Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ValveSoftware/Proton.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lsteamclient')
-rw-r--r--lsteamclient/Makefile.in175
-rw-r--r--lsteamclient/Makefile.in.orig9
-rw-r--r--lsteamclient/cb_converters.dat220
-rw-r--r--lsteamclient/cb_converters.h1283
-rw-r--r--lsteamclient/cb_converters_100.cpp21
-rw-r--r--lsteamclient/cb_converters_102.cpp35
-rw-r--r--lsteamclient/cb_converters_104.cpp29
-rw-r--r--lsteamclient/cb_converters_111.cpp21
-rw-r--r--lsteamclient/cb_converters_112.cpp21
-rw-r--r--lsteamclient/cb_converters_116.cpp41
-rw-r--r--lsteamclient/cb_converters_117.cpp49
-rw-r--r--lsteamclient/cb_converters_118.cpp69
-rw-r--r--lsteamclient/cb_converters_122.cpp29
-rw-r--r--lsteamclient/cb_converters_124.cpp51
-rw-r--r--lsteamclient/cb_converters_125.cpp79
-rw-r--r--lsteamclient/cb_converters_128.cpp51
-rw-r--r--lsteamclient/cb_converters_132.cpp99
-rw-r--r--lsteamclient/cb_converters_134.cpp19
-rw-r--r--lsteamclient/cb_converters_136.cpp33
-rw-r--r--lsteamclient/cb_converters_137.cpp21
-rw-r--r--lsteamclient/cb_converters_140.cpp21
-rw-r--r--lsteamclient/cb_converters_141.cpp25
-rw-r--r--lsteamclient/cb_converters_142.cpp2457
-rw-r--r--lsteamclient/cb_getapi_sizes.dat392
-rw-r--r--lsteamclient/cb_getapi_table.dat1200
-rw-r--r--lsteamclient/cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001.cpp35
-rw-r--r--lsteamclient/cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001.h11
-rw-r--r--lsteamclient/cppISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001.cpp16
-rw-r--r--lsteamclient/cppISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001.h7
-rw-r--r--lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION001.cpp15
-rw-r--r--lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION001.h7
-rw-r--r--lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION002.cpp45
-rw-r--r--lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION002.h13
-rw-r--r--lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION003.cpp50
-rw-r--r--lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION003.h14
-rw-r--r--lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION004.cpp80
-rw-r--r--lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION004.h20
-rw-r--r--lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION005.cpp110
-rw-r--r--lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION005.h26
-rw-r--r--lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION006.cpp120
-rw-r--r--lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION006.h28
-rw-r--r--lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION007.cpp130
-rw-r--r--lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION007.h30
-rw-r--r--lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION008.cpp140
-rw-r--r--lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION008.h32
-rw-r--r--lsteamclient/cppISteamClient_SteamClient007.cpp120
-rw-r--r--lsteamclient/cppISteamClient_SteamClient007.h28
-rw-r--r--lsteamclient/cppISteamClient_SteamClient008.cpp115
-rw-r--r--lsteamclient/cppISteamClient_SteamClient008.h27
-rw-r--r--lsteamclient/cppISteamClient_SteamClient009.cpp120
-rw-r--r--lsteamclient/cppISteamClient_SteamClient009.h28
-rw-r--r--lsteamclient/cppISteamClient_SteamClient010.cpp130
-rw-r--r--lsteamclient/cppISteamClient_SteamClient010.h30
-rw-r--r--lsteamclient/cppISteamClient_SteamClient011.cpp135
-rw-r--r--lsteamclient/cppISteamClient_SteamClient011.h31
-rw-r--r--lsteamclient/cppISteamClient_SteamClient012.cpp145
-rw-r--r--lsteamclient/cppISteamClient_SteamClient012.h33
-rw-r--r--lsteamclient/cppISteamClient_SteamClient014.cpp155
-rw-r--r--lsteamclient/cppISteamClient_SteamClient014.h35
-rw-r--r--lsteamclient/cppISteamClient_SteamClient015.cpp160
-rw-r--r--lsteamclient/cppISteamClient_SteamClient015.h36
-rw-r--r--lsteamclient/cppISteamClient_SteamClient016.cpp180
-rw-r--r--lsteamclient/cppISteamClient_SteamClient016.h40
-rw-r--r--lsteamclient/cppISteamClient_SteamClient017.cpp195
-rw-r--r--lsteamclient/cppISteamClient_SteamClient017.h43
-rw-r--r--lsteamclient/cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION.cpp40
-rw-r--r--lsteamclient/cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION.h12
-rw-r--r--lsteamclient/cppISteamController_SteamController003.cpp95
-rw-r--r--lsteamclient/cppISteamController_SteamController003.h23
-rw-r--r--lsteamclient/cppISteamController_SteamController004.cpp120
-rw-r--r--lsteamclient/cppISteamController_SteamController004.h28
-rw-r--r--lsteamclient/cppISteamController_SteamController005.cpp140
-rw-r--r--lsteamclient/cppISteamController_SteamController005.h32
-rw-r--r--lsteamclient/cppISteamController_SteamController006.cpp165
-rw-r--r--lsteamclient/cppISteamController_SteamController006.h37
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends003.cpp110
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends003.h26
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends004.cpp110
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends004.h26
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends005.cpp130
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends005.h30
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends006.cpp140
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends006.h32
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends007.cpp150
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends007.h34
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends008.cpp180
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends008.h40
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends009.cpp230
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends009.h50
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends011.cpp325
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends011.h69
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends013.cpp325
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends013.h69
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends014.cpp330
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends014.h70
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends015.cpp370
-rw-r--r--lsteamclient/cppISteamFriends_SteamFriends015.h78
-rw-r--r--lsteamclient/cppISteamGameCoordinator_SteamGameCoordinator001.cpp26
-rw-r--r--lsteamclient/cppISteamGameCoordinator_SteamGameCoordinator001.h9
-rw-r--r--lsteamclient/cppISteamGameServerStats_SteamGameServerStats001.cpp61
-rw-r--r--lsteamclient/cppISteamGameServerStats_SteamGameServerStats001.h16
-rw-r--r--lsteamclient/cppISteamGameServer_SteamGameServer004.cpp81
-rw-r--r--lsteamclient/cppISteamGameServer_SteamGameServer004.h20
-rw-r--r--lsteamclient/cppISteamGameServer_SteamGameServer005.cpp81
-rw-r--r--lsteamclient/cppISteamGameServer_SteamGameServer005.h20
-rw-r--r--lsteamclient/cppISteamGameServer_SteamGameServer008.cpp96
-rw-r--r--lsteamclient/cppISteamGameServer_SteamGameServer008.h23
-rw-r--r--lsteamclient/cppISteamGameServer_SteamGameServer009.cpp106
-rw-r--r--lsteamclient/cppISteamGameServer_SteamGameServer009.h25
-rw-r--r--lsteamclient/cppISteamGameServer_SteamGameServer010.cpp126
-rw-r--r--lsteamclient/cppISteamGameServer_SteamGameServer010.h29
-rw-r--r--lsteamclient/cppISteamGameServer_SteamGameServer011.cpp231
-rw-r--r--lsteamclient/cppISteamGameServer_SteamGameServer011.h50
-rw-r--r--lsteamclient/cppISteamGameServer_SteamGameServer012.cpp231
-rw-r--r--lsteamclient/cppISteamGameServer_SteamGameServer012.h50
-rw-r--r--lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002.cpp180
-rw-r--r--lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002.h40
-rw-r--r--lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003.cpp185
-rw-r--r--lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003.h41
-rw-r--r--lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004.cpp190
-rw-r--r--lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004.h42
-rw-r--r--lsteamclient/cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001.cpp85
-rw-r--r--lsteamclient/cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001.h21
-rw-r--r--lsteamclient/cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002.cpp135
-rw-r--r--lsteamclient/cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002.h31
-rw-r--r--lsteamclient/cppISteamInventory_STEAMINVENTORY_INTERFACE_V001.cpp130
-rw-r--r--lsteamclient/cppISteamInventory_STEAMINVENTORY_INTERFACE_V001.h30
-rw-r--r--lsteamclient/cppISteamInventory_STEAMINVENTORY_INTERFACE_V002.cpp195
-rw-r--r--lsteamclient/cppISteamInventory_STEAMINVENTORY_INTERFACE_V002.h43
-rw-r--r--lsteamclient/cppISteamMasterServerUpdater_SteamMasterServerUpdater001.cpp81
-rw-r--r--lsteamclient/cppISteamMasterServerUpdater_SteamMasterServerUpdater001.h20
-rw-r--r--lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers001.cpp90
-rw-r--r--lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers001.h22
-rw-r--r--lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers002.cpp95
-rw-r--r--lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers002.h23
-rw-r--r--lsteamclient/cppISteamMatchmaking_SteamMatchMaking002.cpp110
-rw-r--r--lsteamclient/cppISteamMatchmaking_SteamMatchMaking002.h26
-rw-r--r--lsteamclient/cppISteamMatchmaking_SteamMatchMaking004.cpp145
-rw-r--r--lsteamclient/cppISteamMatchmaking_SteamMatchMaking004.h33
-rw-r--r--lsteamclient/cppISteamMatchmaking_SteamMatchMaking006.cpp150
-rw-r--r--lsteamclient/cppISteamMatchmaking_SteamMatchMaking006.h34
-rw-r--r--lsteamclient/cppISteamMatchmaking_SteamMatchMaking007.cpp180
-rw-r--r--lsteamclient/cppISteamMatchmaking_SteamMatchMaking007.h40
-rw-r--r--lsteamclient/cppISteamMatchmaking_SteamMatchMaking008.cpp190
-rw-r--r--lsteamclient/cppISteamMatchmaking_SteamMatchMaking008.h42
-rw-r--r--lsteamclient/cppISteamMatchmaking_SteamMatchMaking009.cpp200
-rw-r--r--lsteamclient/cppISteamMatchmaking_SteamMatchMaking009.h44
-rw-r--r--lsteamclient/cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001.cpp170
-rw-r--r--lsteamclient/cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001.h38
-rw-r--r--lsteamclient/cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001.cpp55
-rw-r--r--lsteamclient/cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001.h15
-rw-r--r--lsteamclient/cppISteamNetworking_SteamNetworking001.cpp70
-rw-r--r--lsteamclient/cppISteamNetworking_SteamNetworking001.h18
-rw-r--r--lsteamclient/cppISteamNetworking_SteamNetworking002.cpp80
-rw-r--r--lsteamclient/cppISteamNetworking_SteamNetworking002.h20
-rw-r--r--lsteamclient/cppISteamNetworking_SteamNetworking003.cpp110
-rw-r--r--lsteamclient/cppISteamNetworking_SteamNetworking003.h26
-rw-r--r--lsteamclient/cppISteamNetworking_SteamNetworking004.cpp110
-rw-r--r--lsteamclient/cppISteamNetworking_SteamNetworking004.h26
-rw-r--r--lsteamclient/cppISteamNetworking_SteamNetworking005.cpp120
-rw-r--r--lsteamclient/cppISteamNetworking_SteamNetworking005.h28
-rw-r--r--lsteamclient/cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001.cpp41
-rw-r--r--lsteamclient/cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001.h12
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002.cpp45
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002.h13
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004.cpp120
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004.h28
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005.cpp165
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005.h37
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006.cpp245
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006.h53
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008.cpp265
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008.h57
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010.cpp270
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010.h58
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011.cpp270
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011.h58
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012.cpp270
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012.h58
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013.cpp285
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013.h61
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014.cpp285
-rw-r--r--lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014.h61
-rw-r--r--lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001.cpp40
-rw-r--r--lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001.h12
-rw-r--r--lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002.cpp45
-rw-r--r--lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002.h13
-rw-r--r--lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003.cpp55
-rw-r--r--lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003.h15
-rw-r--r--lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION001.cpp80
-rw-r--r--lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION001.h20
-rw-r--r--lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION002.cpp165
-rw-r--r--lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION002.h37
-rw-r--r--lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION003.cpp165
-rw-r--r--lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION003.h37
-rw-r--r--lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION005.cpp240
-rw-r--r--lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION005.h52
-rw-r--r--lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION007.cpp300
-rw-r--r--lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION007.h64
-rw-r--r--lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION008.cpp325
-rw-r--r--lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION008.h69
-rw-r--r--lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION009.cpp345
-rw-r--r--lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION009.h73
-rw-r--r--lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION010.cpp380
-rw-r--r--lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION010.h80
-rw-r--r--lsteamclient/cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001.cpp35
-rw-r--r--lsteamclient/cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001.h11
-rw-r--r--lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003.cpp75
-rw-r--r--lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003.h19
-rw-r--r--lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004.cpp95
-rw-r--r--lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004.h23
-rw-r--r--lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005.cpp145
-rw-r--r--lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005.h33
-rw-r--r--lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006.cpp150
-rw-r--r--lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006.h34
-rw-r--r--lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007.cpp160
-rw-r--r--lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007.h36
-rw-r--r--lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009.cpp170
-rw-r--r--lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009.h38
-rw-r--r--lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010.cpp215
-rw-r--r--lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010.h47
-rw-r--r--lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011.cpp225
-rw-r--r--lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011.h49
-rw-r--r--lsteamclient/cppISteamUser_SteamUser009.cpp45
-rw-r--r--lsteamclient/cppISteamUser_SteamUser009.h13
-rw-r--r--lsteamclient/cppISteamUser_SteamUser010.cpp40
-rw-r--r--lsteamclient/cppISteamUser_SteamUser010.h12
-rw-r--r--lsteamclient/cppISteamUser_SteamUser011.cpp65
-rw-r--r--lsteamclient/cppISteamUser_SteamUser011.h17
-rw-r--r--lsteamclient/cppISteamUser_SteamUser012.cpp90
-rw-r--r--lsteamclient/cppISteamUser_SteamUser012.h22
-rw-r--r--lsteamclient/cppISteamUser_SteamUser013.cpp95
-rw-r--r--lsteamclient/cppISteamUser_SteamUser013.h23
-rw-r--r--lsteamclient/cppISteamUser_SteamUser014.cpp115
-rw-r--r--lsteamclient/cppISteamUser_SteamUser014.h27
-rw-r--r--lsteamclient/cppISteamUser_SteamUser016.cpp120
-rw-r--r--lsteamclient/cppISteamUser_SteamUser016.h28
-rw-r--r--lsteamclient/cppISteamUser_SteamUser017.cpp130
-rw-r--r--lsteamclient/cppISteamUser_SteamUser017.h30
-rw-r--r--lsteamclient/cppISteamUser_SteamUser018.cpp135
-rw-r--r--lsteamclient/cppISteamUser_SteamUser018.h31
-rw-r--r--lsteamclient/cppISteamUser_SteamUser019.cpp155
-rw-r--r--lsteamclient/cppISteamUser_SteamUser019.h35
-rw-r--r--lsteamclient/cppISteamUtils_SteamUtils002.cpp80
-rw-r--r--lsteamclient/cppISteamUtils_SteamUtils002.h20
-rw-r--r--lsteamclient/cppISteamUtils_SteamUtils004.cpp100
-rw-r--r--lsteamclient/cppISteamUtils_SteamUtils004.h24
-rw-r--r--lsteamclient/cppISteamUtils_SteamUtils005.cpp125
-rw-r--r--lsteamclient/cppISteamUtils_SteamUtils005.h29
-rw-r--r--lsteamclient/cppISteamUtils_SteamUtils006.cpp135
-rw-r--r--lsteamclient/cppISteamUtils_SteamUtils006.h31
-rw-r--r--lsteamclient/cppISteamUtils_SteamUtils007.cpp140
-rw-r--r--lsteamclient/cppISteamUtils_SteamUtils007.h32
-rw-r--r--lsteamclient/cppISteamUtils_SteamUtils008.cpp150
-rw-r--r--lsteamclient/cppISteamUtils_SteamUtils008.h34
-rw-r--r--lsteamclient/cppISteamUtils_SteamUtils009.cpp160
-rw-r--r--lsteamclient/cppISteamUtils_SteamUtils009.h36
-rw-r--r--lsteamclient/cppISteamVideo_STEAMVIDEO_INTERFACE_V001.cpp20
-rw-r--r--lsteamclient/cppISteamVideo_STEAMVIDEO_INTERFACE_V001.h8
-rw-r--r--lsteamclient/cppISteamVideo_STEAMVIDEO_INTERFACE_V002.cpp30
-rw-r--r--lsteamclient/cppISteamVideo_STEAMVIDEO_INTERFACE_V002.h10
-rw-r--r--lsteamclient/cxx.h449
-rwxr-xr-xlsteamclient/gen.sh18
-rwxr-xr-xlsteamclient/gen_wrapper.py543
-rw-r--r--lsteamclient/lsteamclient.spec58
-rw-r--r--lsteamclient/steam_defs.h162
-rw-r--r--lsteamclient/steamclient_main.c275
-rw-r--r--lsteamclient/steamclient_private.h33
-rw-r--r--lsteamclient/steamclient_wrappers.c95
-rw-r--r--lsteamclient/steamworks_sdk_100/isteamapps.h38
-rw-r--r--lsteamclient/steamworks_sdk_100/isteamclient.h145
-rw-r--r--lsteamclient/steamworks_sdk_100/isteamfriends.h200
-rw-r--r--lsteamclient/steamworks_sdk_100/isteamgameserver.h160
-rw-r--r--lsteamclient/steamworks_sdk_100/isteammasterserverupdater.h103
-rw-r--r--lsteamclient/steamworks_sdk_100/isteammatchmaking.h477
-rw-r--r--lsteamclient/steamworks_sdk_100/isteamnetworking.h135
-rw-r--r--lsteamclient/steamworks_sdk_100/isteamuser.h150
-rw-r--r--lsteamclient/steamworks_sdk_100/isteamuserstats.h98
-rw-r--r--lsteamclient/steamworks_sdk_100/isteamutils.h77
-rw-r--r--lsteamclient/steamworks_sdk_100/matchmakingtypes.h239
-rw-r--r--lsteamclient/steamworks_sdk_100/steam_api.h308
-rw-r--r--lsteamclient/steamworks_sdk_100/steam_gameserver.h45
-rw-r--r--lsteamclient/steamworks_sdk_100/steamclientpublic.h732
-rw-r--r--lsteamclient/steamworks_sdk_100/steamtypes.h92
-rw-r--r--lsteamclient/steamworks_sdk_101/isteamapps.h32
-rw-r--r--lsteamclient/steamworks_sdk_101/isteamclient.h146
-rw-r--r--lsteamclient/steamworks_sdk_101/isteamfriends.h200
-rw-r--r--lsteamclient/steamworks_sdk_101/isteamgameserver.h161
-rw-r--r--lsteamclient/steamworks_sdk_101/isteammasterserverupdater.h103
-rw-r--r--lsteamclient/steamworks_sdk_101/isteammatchmaking.h509
-rw-r--r--lsteamclient/steamworks_sdk_101/isteamnetworking.h134
-rw-r--r--lsteamclient/steamworks_sdk_101/isteamuser.h146
-rw-r--r--lsteamclient/steamworks_sdk_101/isteamuserstats.h98
-rw-r--r--lsteamclient/steamworks_sdk_101/isteamutils.h77
-rw-r--r--lsteamclient/steamworks_sdk_101/matchmakingtypes.h239
-rw-r--r--lsteamclient/steamworks_sdk_101/steam_api.h318
-rw-r--r--lsteamclient/steamworks_sdk_101/steam_gameserver.h134
-rw-r--r--lsteamclient/steamworks_sdk_101/steamclientpublic.h768
-rw-r--r--lsteamclient/steamworks_sdk_101/steamtypes.h94
-rw-r--r--lsteamclient/steamworks_sdk_102/isteamapps.h32
-rw-r--r--lsteamclient/steamworks_sdk_102/isteamclient.h149
-rw-r--r--lsteamclient/steamworks_sdk_102/isteamfriends.h212
-rw-r--r--lsteamclient/steamworks_sdk_102/isteamgameserver.h161
-rw-r--r--lsteamclient/steamworks_sdk_102/isteammasterserverupdater.h103
-rw-r--r--lsteamclient/steamworks_sdk_102/isteammatchmaking.h553
-rw-r--r--lsteamclient/steamworks_sdk_102/isteamnetworking.h134
-rw-r--r--lsteamclient/steamworks_sdk_102/isteamuser.h167
-rw-r--r--lsteamclient/steamworks_sdk_102/isteamuserstats.h98
-rw-r--r--lsteamclient/steamworks_sdk_102/isteamutils.h81
-rw-r--r--lsteamclient/steamworks_sdk_102/matchmakingtypes.h239
-rw-r--r--lsteamclient/steamworks_sdk_102/steam_api.h318
-rw-r--r--lsteamclient/steamworks_sdk_102/steam_gameserver.h134
-rw-r--r--lsteamclient/steamworks_sdk_102/steamclientpublic.h860
-rw-r--r--lsteamclient/steamworks_sdk_102/steamtypes.h91
-rw-r--r--lsteamclient/steamworks_sdk_103/isteamapps.h32
-rw-r--r--lsteamclient/steamworks_sdk_103/isteamclient.h154
-rw-r--r--lsteamclient/steamworks_sdk_103/isteamfriends.h247
-rw-r--r--lsteamclient/steamworks_sdk_103/isteamgameserver.h192
-rw-r--r--lsteamclient/steamworks_sdk_103/isteammasterserverupdater.h103
-rw-r--r--lsteamclient/steamworks_sdk_103/isteammatchmaking.h584
-rw-r--r--lsteamclient/steamworks_sdk_103/isteamnetworking.h147
-rw-r--r--lsteamclient/steamworks_sdk_103/isteamremotestorage.h45
-rw-r--r--lsteamclient/steamworks_sdk_103/isteamuser.h172
-rw-r--r--lsteamclient/steamworks_sdk_103/isteamuserstats.h111
-rw-r--r--lsteamclient/steamworks_sdk_103/isteamutils.h114
-rw-r--r--lsteamclient/steamworks_sdk_103/matchmakingtypes.h241
-rw-r--r--lsteamclient/steamworks_sdk_103/steam_api.h414
-rw-r--r--lsteamclient/steamworks_sdk_103/steam_gameserver.h134
-rw-r--r--lsteamclient/steamworks_sdk_103/steamclientpublic.h802
-rw-r--r--lsteamclient/steamworks_sdk_103/steamtypes.h97
-rw-r--r--lsteamclient/steamworks_sdk_104/isteamapps.h45
-rw-r--r--lsteamclient/steamworks_sdk_104/isteamclient.h151
-rw-r--r--lsteamclient/steamworks_sdk_104/isteamfriends.h250
-rw-r--r--lsteamclient/steamworks_sdk_104/isteamgameserver.h193
-rw-r--r--lsteamclient/steamworks_sdk_104/isteammasterserverupdater.h103
-rw-r--r--lsteamclient/steamworks_sdk_104/isteammatchmaking.h584
-rw-r--r--lsteamclient/steamworks_sdk_104/isteamnetworking.h147
-rw-r--r--lsteamclient/steamworks_sdk_104/isteamremotestorage.h45
-rw-r--r--lsteamclient/steamworks_sdk_104/isteamuser.h199
-rw-r--r--lsteamclient/steamworks_sdk_104/isteamuserstats.h260
-rw-r--r--lsteamclient/steamworks_sdk_104/isteamutils.h146
-rw-r--r--lsteamclient/steamworks_sdk_104/matchmakingtypes.h241
-rw-r--r--lsteamclient/steamworks_sdk_104/steam_api.h421
-rw-r--r--lsteamclient/steamworks_sdk_104/steam_gameserver.h134
-rw-r--r--lsteamclient/steamworks_sdk_104/steamclientpublic.h856
-rw-r--r--lsteamclient/steamworks_sdk_104/steamtypes.h97
-rw-r--r--lsteamclient/steamworks_sdk_105/isteamapps.h45
-rw-r--r--lsteamclient/steamworks_sdk_105/isteamclient.h151
-rw-r--r--lsteamclient/steamworks_sdk_105/isteamfriends.h251
-rw-r--r--lsteamclient/steamworks_sdk_105/isteamgameserver.h202
-rw-r--r--lsteamclient/steamworks_sdk_105/isteammasterserverupdater.h103
-rw-r--r--lsteamclient/steamworks_sdk_105/isteammatchmaking.h589
-rw-r--r--lsteamclient/steamworks_sdk_105/isteamnetworking.h271
-rw-r--r--lsteamclient/steamworks_sdk_105/isteamremotestorage.h45
-rw-r--r--lsteamclient/steamworks_sdk_105/isteamuser.h203
-rw-r--r--lsteamclient/steamworks_sdk_105/isteamuserstats.h277
-rw-r--r--lsteamclient/steamworks_sdk_105/isteamutils.h146
-rw-r--r--lsteamclient/steamworks_sdk_105/matchmakingtypes.h242
-rw-r--r--lsteamclient/steamworks_sdk_105/steam_api.h431
-rw-r--r--lsteamclient/steamworks_sdk_105/steam_gameserver.h134
-rw-r--r--lsteamclient/steamworks_sdk_105/steamclientpublic.h883
-rw-r--r--lsteamclient/steamworks_sdk_105/steamtypes.h105
-rw-r--r--lsteamclient/steamworks_sdk_106/isteamapps.h45
-rw-r--r--lsteamclient/steamworks_sdk_106/isteamclient.h152
-rw-r--r--lsteamclient/steamworks_sdk_106/isteamfriends.h251
-rw-r--r--lsteamclient/steamworks_sdk_106/isteamgameserver.h202
-rw-r--r--lsteamclient/steamworks_sdk_106/isteammasterserverupdater.h103
-rw-r--r--lsteamclient/steamworks_sdk_106/isteammatchmaking.h619
-rw-r--r--lsteamclient/steamworks_sdk_106/isteamnetworking.h271
-rw-r--r--lsteamclient/steamworks_sdk_106/isteamremotestorage.h45
-rw-r--r--lsteamclient/steamworks_sdk_106/isteamuser.h217
-rw-r--r--lsteamclient/steamworks_sdk_106/isteamuserstats.h277
-rw-r--r--lsteamclient/steamworks_sdk_106/isteamutils.h146
-rw-r--r--lsteamclient/steamworks_sdk_106/matchmakingtypes.h230
-rw-r--r--lsteamclient/steamworks_sdk_106/steam_api.h444
-rw-r--r--lsteamclient/steamworks_sdk_106/steam_gameserver.h134
-rw-r--r--lsteamclient/steamworks_sdk_106/steamclientpublic.h885
-rw-r--r--lsteamclient/steamworks_sdk_106/steamtypes.h106
-rw-r--r--lsteamclient/steamworks_sdk_107/isteamapps.h45
-rw-r--r--lsteamclient/steamworks_sdk_107/isteamclient.h152
-rw-r--r--lsteamclient/steamworks_sdk_107/isteamfriends.h251
-rw-r--r--lsteamclient/steamworks_sdk_107/isteamgameserver.h202
-rw-r--r--lsteamclient/steamworks_sdk_107/isteammasterserverupdater.h103
-rw-r--r--lsteamclient/steamworks_sdk_107/isteammatchmaking.h619
-rw-r--r--lsteamclient/steamworks_sdk_107/isteamnetworking.h271
-rw-r--r--lsteamclient/steamworks_sdk_107/isteamremotestorage.h45
-rw-r--r--lsteamclient/steamworks_sdk_107/isteamuser.h217
-rw-r--r--lsteamclient/steamworks_sdk_107/isteamuserstats.h277
-rw-r--r--lsteamclient/steamworks_sdk_107/isteamutils.h157
-rw-r--r--lsteamclient/steamworks_sdk_107/matchmakingtypes.h230
-rw-r--r--lsteamclient/steamworks_sdk_107/steam_api.h443
-rw-r--r--lsteamclient/steamworks_sdk_107/steam_gameserver.h134
-rw-r--r--lsteamclient/steamworks_sdk_107/steamclientpublic.h885
-rw-r--r--lsteamclient/steamworks_sdk_107/steamtypes.h106
-rw-r--r--lsteamclient/steamworks_sdk_108/isteamapps.h45
-rw-r--r--lsteamclient/steamworks_sdk_108/isteamclient.h159
-rw-r--r--lsteamclient/steamworks_sdk_108/isteamfriends.h257
-rw-r--r--lsteamclient/steamworks_sdk_108/isteamgameserver.h223
-rw-r--r--lsteamclient/steamworks_sdk_108/isteamgameserverstats.h92
-rw-r--r--lsteamclient/steamworks_sdk_108/isteamgamestats.h75
-rw-r--r--lsteamclient/steamworks_sdk_108/isteammasterserverupdater.h103
-rw-r--r--lsteamclient/steamworks_sdk_108/isteammatchmaking.h634
-rw-r--r--lsteamclient/steamworks_sdk_108/isteamnetworking.h271
-rw-r--r--lsteamclient/steamworks_sdk_108/isteamremotestorage.h45
-rw-r--r--lsteamclient/steamworks_sdk_108/isteamuser.h217
-rw-r--r--lsteamclient/steamworks_sdk_108/isteamuserstats.h316
-rw-r--r--lsteamclient/steamworks_sdk_108/isteamutils.h157
-rw-r--r--lsteamclient/steamworks_sdk_108/matchmakingtypes.h230
-rw-r--r--lsteamclient/steamworks_sdk_108/steam_api.h444
-rw-r--r--lsteamclient/steamworks_sdk_108/steam_gameserver.h143
-rw-r--r--lsteamclient/steamworks_sdk_108/steamclientpublic.h885
-rw-r--r--lsteamclient/steamworks_sdk_108/steamtypes.h124
-rw-r--r--lsteamclient/steamworks_sdk_109/isteamapps.h49
-rw-r--r--lsteamclient/steamworks_sdk_109/isteamclient.h159
-rw-r--r--lsteamclient/steamworks_sdk_109/isteamfriends.h267
-rw-r--r--lsteamclient/steamworks_sdk_109/isteamgamecoordinator.h65
-rw-r--r--lsteamclient/steamworks_sdk_109/isteamgameserver.h226
-rw-r--r--lsteamclient/steamworks_sdk_109/isteamgameserverstats.h93
-rw-r--r--lsteamclient/steamworks_sdk_109/isteamgamestats.h75
-rw-r--r--lsteamclient/steamworks_sdk_109/isteammasterserverupdater.h103
-rw-r--r--lsteamclient/steamworks_sdk_109/isteammatchmaking.h634
-rw-r--r--lsteamclient/steamworks_sdk_109/isteamnetworking.h278
-rw-r--r--lsteamclient/steamworks_sdk_109/isteamremotestorage.h45
-rw-r--r--lsteamclient/steamworks_sdk_109/isteamuser.h233
-rw-r--r--lsteamclient/steamworks_sdk_109/isteamuserstats.h331
-rw-r--r--lsteamclient/steamworks_sdk_109/isteamutils.h158
-rw-r--r--lsteamclient/steamworks_sdk_109/matchmakingtypes.h230
-rw-r--r--lsteamclient/steamworks_sdk_109/steam_api.h463
-rw-r--r--lsteamclient/steamworks_sdk_109/steam_gameserver.h143
-rw-r--r--lsteamclient/steamworks_sdk_109/steamclientpublic.h903
-rw-r--r--lsteamclient/steamworks_sdk_109/steamtypes.h123
-rw-r--r--lsteamclient/steamworks_sdk_110/isteamapps.h49
-rw-r--r--lsteamclient/steamworks_sdk_110/isteamclient.h159
-rw-r--r--lsteamclient/steamworks_sdk_110/isteamfriends.h274
-rw-r--r--lsteamclient/steamworks_sdk_110/isteamgamecoordinator.h65
-rw-r--r--lsteamclient/steamworks_sdk_110/isteamgameserver.h226
-rw-r--r--lsteamclient/steamworks_sdk_110/isteamgameserverstats.h93
-rw-r--r--lsteamclient/steamworks_sdk_110/isteamgamestats.h75
-rw-r--r--lsteamclient/steamworks_sdk_110/isteammasterserverupdater.h103
-rw-r--r--lsteamclient/steamworks_sdk_110/isteammatchmaking.h634
-rw-r--r--lsteamclient/steamworks_sdk_110/isteamnetworking.h278
-rw-r--r--lsteamclient/steamworks_sdk_110/isteamremotestorage.h45
-rw-r--r--lsteamclient/steamworks_sdk_110/isteamuser.h233
-rw-r--r--lsteamclient/steamworks_sdk_110/isteamuserstats.h331
-rw-r--r--lsteamclient/steamworks_sdk_110/isteamutils.h182
-rw-r--r--lsteamclient/steamworks_sdk_110/matchmakingtypes.h230
-rw-r--r--lsteamclient/steamworks_sdk_110/steam_api.h467
-rw-r--r--lsteamclient/steamworks_sdk_110/steam_gameserver.h143
-rw-r--r--lsteamclient/steamworks_sdk_110/steamclientpublic.h917
-rw-r--r--lsteamclient/steamworks_sdk_110/steamtypes.h123
-rw-r--r--lsteamclient/steamworks_sdk_111/isteamapps.h49
-rw-r--r--lsteamclient/steamworks_sdk_111/isteamclient.h163
-rw-r--r--lsteamclient/steamworks_sdk_111/isteamfriends.h286
-rw-r--r--lsteamclient/steamworks_sdk_111/isteamgamecoordinator.h65
-rw-r--r--lsteamclient/steamworks_sdk_111/isteamgameserver.h226
-rw-r--r--lsteamclient/steamworks_sdk_111/isteamgameserverstats.h93
-rw-r--r--lsteamclient/steamworks_sdk_111/isteamgamestats.h75
-rw-r--r--lsteamclient/steamworks_sdk_111/isteammasterserverupdater.h103
-rw-r--r--lsteamclient/steamworks_sdk_111/isteammatchmaking.h634
-rw-r--r--lsteamclient/steamworks_sdk_111/isteamnetworking.h281
-rw-r--r--lsteamclient/steamworks_sdk_111/isteamremotestorage.h45
-rw-r--r--lsteamclient/steamworks_sdk_111/isteamuser.h267
-rw-r--r--lsteamclient/steamworks_sdk_111/isteamuserstats.h331
-rw-r--r--lsteamclient/steamworks_sdk_111/isteamutils.h189
-rw-r--r--lsteamclient/steamworks_sdk_111/matchmakingtypes.h230
-rw-r--r--lsteamclient/steamworks_sdk_111/steam_api.h483
-rw-r--r--lsteamclient/steamworks_sdk_111/steam_gameserver.h157
-rw-r--r--lsteamclient/steamworks_sdk_111/steamclientpublic.h936
-rw-r--r--lsteamclient/steamworks_sdk_111/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_111/steamtypes.h128
-rw-r--r--lsteamclient/steamworks_sdk_112/isteamapps.h57
-rw-r--r--lsteamclient/steamworks_sdk_112/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_112/isteamclient.h166
-rw-r--r--lsteamclient/steamworks_sdk_112/isteamfriends.h339
-rw-r--r--lsteamclient/steamworks_sdk_112/isteamgamecoordinator.h65
-rw-r--r--lsteamclient/steamworks_sdk_112/isteamgameserver.h244
-rw-r--r--lsteamclient/steamworks_sdk_112/isteamgameserverstats.h93
-rw-r--r--lsteamclient/steamworks_sdk_112/isteamgamestats.h75
-rw-r--r--lsteamclient/steamworks_sdk_112/isteammasterserverupdater.h103
-rw-r--r--lsteamclient/steamworks_sdk_112/isteammatchmaking.h638
-rw-r--r--lsteamclient/steamworks_sdk_112/isteamnetworking.h281
-rw-r--r--lsteamclient/steamworks_sdk_112/isteamremotestorage.h178
-rw-r--r--lsteamclient/steamworks_sdk_112/isteamuser.h295
-rw-r--r--lsteamclient/steamworks_sdk_112/isteamuserstats.h353
-rw-r--r--lsteamclient/steamworks_sdk_112/isteamutils.h215
-rw-r--r--lsteamclient/steamworks_sdk_112/matchmakingtypes.h230
-rw-r--r--lsteamclient/steamworks_sdk_112/steam_api.h509
-rw-r--r--lsteamclient/steamworks_sdk_112/steam_gameserver.h157
-rw-r--r--lsteamclient/steamworks_sdk_112/steamclientpublic.h946
-rw-r--r--lsteamclient/steamworks_sdk_112/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_112/steamps3params_internal.h27
-rw-r--r--lsteamclient/steamworks_sdk_112/steamtypes.h128
-rw-r--r--lsteamclient/steamworks_sdk_113/isteamapps.h71
-rw-r--r--lsteamclient/steamworks_sdk_113/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_113/isteamclient.h171
-rw-r--r--lsteamclient/steamworks_sdk_113/isteamfriends.h398
-rw-r--r--lsteamclient/steamworks_sdk_113/isteamgamecoordinator.h65
-rw-r--r--lsteamclient/steamworks_sdk_113/isteamgameserver.h244
-rw-r--r--lsteamclient/steamworks_sdk_113/isteamgameserverstats.h93
-rw-r--r--lsteamclient/steamworks_sdk_113/isteamgamestats.h75
-rw-r--r--lsteamclient/steamworks_sdk_113/isteamhttp.h114
-rw-r--r--lsteamclient/steamworks_sdk_113/isteammasterserverupdater.h103
-rw-r--r--lsteamclient/steamworks_sdk_113/isteammatchmaking.h661
-rw-r--r--lsteamclient/steamworks_sdk_113/isteamnetworking.h294
-rw-r--r--lsteamclient/steamworks_sdk_113/isteamps3overlayrenderer.h85
-rw-r--r--lsteamclient/steamworks_sdk_113/isteamremotestorage.h180
-rw-r--r--lsteamclient/steamworks_sdk_113/isteamuser.h303
-rw-r--r--lsteamclient/steamworks_sdk_113/isteamuserstats.h386
-rw-r--r--lsteamclient/steamworks_sdk_113/isteamutils.h252
-rw-r--r--lsteamclient/steamworks_sdk_113/matchmakingtypes.h233
-rw-r--r--lsteamclient/steamworks_sdk_113/steam_api.h489
-rw-r--r--lsteamclient/steamworks_sdk_113/steam_gameserver.h157
-rw-r--r--lsteamclient/steamworks_sdk_113/steamclientpublic.h969
-rw-r--r--lsteamclient/steamworks_sdk_113/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_113/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_113/steamps3params.h90
-rw-r--r--lsteamclient/steamworks_sdk_113/steamtypes.h128
-rw-r--r--lsteamclient/steamworks_sdk_114/isteamapps.h71
-rw-r--r--lsteamclient/steamworks_sdk_114/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_114/isteamclient.h171
-rw-r--r--lsteamclient/steamworks_sdk_114/isteamfriends.h398
-rw-r--r--lsteamclient/steamworks_sdk_114/isteamgamecoordinator.h65
-rw-r--r--lsteamclient/steamworks_sdk_114/isteamgameserver.h244
-rw-r--r--lsteamclient/steamworks_sdk_114/isteamgameserverstats.h93
-rw-r--r--lsteamclient/steamworks_sdk_114/isteamgamestats.h75
-rw-r--r--lsteamclient/steamworks_sdk_114/isteamhttp.h119
-rw-r--r--lsteamclient/steamworks_sdk_114/isteammasterserverupdater.h103
-rw-r--r--lsteamclient/steamworks_sdk_114/isteammatchmaking.h661
-rw-r--r--lsteamclient/steamworks_sdk_114/isteamnetworking.h294
-rw-r--r--lsteamclient/steamworks_sdk_114/isteamps3overlayrenderer.h85
-rw-r--r--lsteamclient/steamworks_sdk_114/isteamremotestorage.h180
-rw-r--r--lsteamclient/steamworks_sdk_114/isteamuser.h303
-rw-r--r--lsteamclient/steamworks_sdk_114/isteamuserstats.h442
-rw-r--r--lsteamclient/steamworks_sdk_114/isteamutils.h252
-rw-r--r--lsteamclient/steamworks_sdk_114/matchmakingtypes.h233
-rw-r--r--lsteamclient/steamworks_sdk_114/steam_api.h489
-rw-r--r--lsteamclient/steamworks_sdk_114/steam_gameserver.h157
-rw-r--r--lsteamclient/steamworks_sdk_114/steamclientpublic.h969
-rw-r--r--lsteamclient/steamworks_sdk_114/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_114/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_114/steamps3params.h90
-rw-r--r--lsteamclient/steamworks_sdk_114/steamtypes.h128
-rw-r--r--lsteamclient/steamworks_sdk_115/isteamapps.h71
-rw-r--r--lsteamclient/steamworks_sdk_115/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_115/isteamclient.h176
-rw-r--r--lsteamclient/steamworks_sdk_115/isteamfriends.h398
-rw-r--r--lsteamclient/steamworks_sdk_115/isteamgamecoordinator.h65
-rw-r--r--lsteamclient/steamworks_sdk_115/isteamgameserver.h244
-rw-r--r--lsteamclient/steamworks_sdk_115/isteamgameserverstats.h93
-rw-r--r--lsteamclient/steamworks_sdk_115/isteamgamestats.h75
-rw-r--r--lsteamclient/steamworks_sdk_115/isteamhttp.h119
-rw-r--r--lsteamclient/steamworks_sdk_115/isteammasterserverupdater.h103
-rw-r--r--lsteamclient/steamworks_sdk_115/isteammatchmaking.h661
-rw-r--r--lsteamclient/steamworks_sdk_115/isteamnetworking.h294
-rw-r--r--lsteamclient/steamworks_sdk_115/isteamps3overlayrenderer.h85
-rw-r--r--lsteamclient/steamworks_sdk_115/isteamremotestorage.h180
-rw-r--r--lsteamclient/steamworks_sdk_115/isteamuser.h303
-rw-r--r--lsteamclient/steamworks_sdk_115/isteamuserstats.h442
-rw-r--r--lsteamclient/steamworks_sdk_115/isteamutils.h252
-rw-r--r--lsteamclient/steamworks_sdk_115/matchmakingtypes.h233
-rw-r--r--lsteamclient/steamworks_sdk_115/steam_api.h497
-rw-r--r--lsteamclient/steamworks_sdk_115/steam_gameserver.h157
-rw-r--r--lsteamclient/steamworks_sdk_115/steamclientpublic.h970
-rw-r--r--lsteamclient/steamworks_sdk_115/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_115/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_115/steamps3params.h90
-rw-r--r--lsteamclient/steamworks_sdk_115/steamtypes.h128
-rw-r--r--lsteamclient/steamworks_sdk_116/isteamapps.h95
-rw-r--r--lsteamclient/steamworks_sdk_116/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_116/isteamclient.h184
-rw-r--r--lsteamclient/steamworks_sdk_116/isteamfriends.h425
-rw-r--r--lsteamclient/steamworks_sdk_116/isteamgamecoordinator.h65
-rw-r--r--lsteamclient/steamworks_sdk_116/isteamgameserver.h244
-rw-r--r--lsteamclient/steamworks_sdk_116/isteamgameserverstats.h93
-rw-r--r--lsteamclient/steamworks_sdk_116/isteamgamestats.h75
-rw-r--r--lsteamclient/steamworks_sdk_116/isteamhttp.h124
-rw-r--r--lsteamclient/steamworks_sdk_116/isteammasterserverupdater.h103
-rw-r--r--lsteamclient/steamworks_sdk_116/isteammatchmaking.h662
-rw-r--r--lsteamclient/steamworks_sdk_116/isteamnetworking.h294
-rw-r--r--lsteamclient/steamworks_sdk_116/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_116/isteamremotestorage.h202
-rw-r--r--lsteamclient/steamworks_sdk_116/isteamscreenshots.h85
-rw-r--r--lsteamclient/steamworks_sdk_116/isteamuser.h306
-rw-r--r--lsteamclient/steamworks_sdk_116/isteamuserstats.h445
-rw-r--r--lsteamclient/steamworks_sdk_116/isteamutils.h256
-rw-r--r--lsteamclient/steamworks_sdk_116/matchmakingtypes.h233
-rw-r--r--lsteamclient/steamworks_sdk_116/steam_api.h507
-rw-r--r--lsteamclient/steamworks_sdk_116/steam_gameserver.h157
-rw-r--r--lsteamclient/steamworks_sdk_116/steamclientpublic.h973
-rw-r--r--lsteamclient/steamworks_sdk_116/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_116/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_116/steamps3params.h108
-rw-r--r--lsteamclient/steamworks_sdk_116/steamtypes.h132
-rw-r--r--lsteamclient/steamworks_sdk_117/isteamapps.h96
-rw-r--r--lsteamclient/steamworks_sdk_117/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_117/isteamclient.h180
-rw-r--r--lsteamclient/steamworks_sdk_117/isteamfriends.h519
-rw-r--r--lsteamclient/steamworks_sdk_117/isteamgamecoordinator.h65
-rw-r--r--lsteamclient/steamworks_sdk_117/isteamgameserver.h384
-rw-r--r--lsteamclient/steamworks_sdk_117/isteamgameserverstats.h93
-rw-r--r--lsteamclient/steamworks_sdk_117/isteamgamestats.h75
-rw-r--r--lsteamclient/steamworks_sdk_117/isteamhttp.h127
-rw-r--r--lsteamclient/steamworks_sdk_117/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_117/isteammatchmaking.h668
-rw-r--r--lsteamclient/steamworks_sdk_117/isteamnetworking.h294
-rw-r--r--lsteamclient/steamworks_sdk_117/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_117/isteamremotestorage.h458
-rw-r--r--lsteamclient/steamworks_sdk_117/isteamscreenshots.h86
-rw-r--r--lsteamclient/steamworks_sdk_117/isteamuser.h316
-rw-r--r--lsteamclient/steamworks_sdk_117/isteamuserstats.h445
-rw-r--r--lsteamclient/steamworks_sdk_117/isteamutils.h256
-rw-r--r--lsteamclient/steamworks_sdk_117/matchmakingtypes.h240
-rw-r--r--lsteamclient/steamworks_sdk_117/steam_api.h510
-rw-r--r--lsteamclient/steamworks_sdk_117/steam_gameserver.h163
-rw-r--r--lsteamclient/steamworks_sdk_117/steamclientpublic.h999
-rw-r--r--lsteamclient/steamworks_sdk_117/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_117/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_117/steamps3params.h111
-rw-r--r--lsteamclient/steamworks_sdk_117/steamtypes.h132
-rw-r--r--lsteamclient/steamworks_sdk_118/isteamapps.h117
-rw-r--r--lsteamclient/steamworks_sdk_118/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_118/isteamclient.h180
-rw-r--r--lsteamclient/steamworks_sdk_118/isteamfriends.h529
-rw-r--r--lsteamclient/steamworks_sdk_118/isteamgamecoordinator.h65
-rw-r--r--lsteamclient/steamworks_sdk_118/isteamgameserver.h384
-rw-r--r--lsteamclient/steamworks_sdk_118/isteamgameserverstats.h93
-rw-r--r--lsteamclient/steamworks_sdk_118/isteamhttp.h127
-rw-r--r--lsteamclient/steamworks_sdk_118/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_118/isteammatchmaking.h668
-rw-r--r--lsteamclient/steamworks_sdk_118/isteamnetworking.h294
-rw-r--r--lsteamclient/steamworks_sdk_118/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_118/isteamremotestorage.h413
-rw-r--r--lsteamclient/steamworks_sdk_118/isteamscreenshots.h86
-rw-r--r--lsteamclient/steamworks_sdk_118/isteamuser.h316
-rw-r--r--lsteamclient/steamworks_sdk_118/isteamuserstats.h445
-rw-r--r--lsteamclient/steamworks_sdk_118/isteamutils.h257
-rw-r--r--lsteamclient/steamworks_sdk_118/matchmakingtypes.h240
-rw-r--r--lsteamclient/steamworks_sdk_118/steam_api.h510
-rw-r--r--lsteamclient/steamworks_sdk_118/steam_gameserver.h163
-rw-r--r--lsteamclient/steamworks_sdk_118/steamclientpublic.h1004
-rw-r--r--lsteamclient/steamworks_sdk_118/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_118/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_118/steamps3params.h111
-rw-r--r--lsteamclient/steamworks_sdk_118/steamtypes.h132
-rw-r--r--lsteamclient/steamworks_sdk_119/isteamapps.h117
-rw-r--r--lsteamclient/steamworks_sdk_119/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_119/isteamclient.h180
-rw-r--r--lsteamclient/steamworks_sdk_119/isteamfriends.h563
-rw-r--r--lsteamclient/steamworks_sdk_119/isteamgamecoordinator.h65
-rw-r--r--lsteamclient/steamworks_sdk_119/isteamgameserver.h385
-rw-r--r--lsteamclient/steamworks_sdk_119/isteamgameserverstats.h93
-rw-r--r--lsteamclient/steamworks_sdk_119/isteamhttp.h127
-rw-r--r--lsteamclient/steamworks_sdk_119/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_119/isteammatchmaking.h668
-rw-r--r--lsteamclient/steamworks_sdk_119/isteamnetworking.h294
-rw-r--r--lsteamclient/steamworks_sdk_119/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_119/isteamremotestorage.h528
-rw-r--r--lsteamclient/steamworks_sdk_119/isteamscreenshots.h86
-rw-r--r--lsteamclient/steamworks_sdk_119/isteamuser.h316
-rw-r--r--lsteamclient/steamworks_sdk_119/isteamuserstats.h445
-rw-r--r--lsteamclient/steamworks_sdk_119/isteamutils.h257
-rw-r--r--lsteamclient/steamworks_sdk_119/matchmakingtypes.h244
-rw-r--r--lsteamclient/steamworks_sdk_119/steam_api.h510
-rw-r--r--lsteamclient/steamworks_sdk_119/steam_gameserver.h163
-rw-r--r--lsteamclient/steamworks_sdk_119/steamclientpublic.h1005
-rw-r--r--lsteamclient/steamworks_sdk_119/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_119/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_119/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_119/steamtypes.h134
-rw-r--r--lsteamclient/steamworks_sdk_120/isteamapps.h117
-rw-r--r--lsteamclient/steamworks_sdk_120/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_120/isteamclient.h286
-rw-r--r--lsteamclient/steamworks_sdk_120/isteamfriends.h589
-rw-r--r--lsteamclient/steamworks_sdk_120/isteamgamecoordinator.h65
-rw-r--r--lsteamclient/steamworks_sdk_120/isteamgameserver.h385
-rw-r--r--lsteamclient/steamworks_sdk_120/isteamgameserverstats.h93
-rw-r--r--lsteamclient/steamworks_sdk_120/isteamhttp.h127
-rw-r--r--lsteamclient/steamworks_sdk_120/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_120/isteammatchmaking.h668
-rw-r--r--lsteamclient/steamworks_sdk_120/isteamnetworking.h294
-rw-r--r--lsteamclient/steamworks_sdk_120/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_120/isteamremotestorage.h558
-rw-r--r--lsteamclient/steamworks_sdk_120/isteamscreenshots.h86
-rw-r--r--lsteamclient/steamworks_sdk_120/isteamuser.h316
-rw-r--r--lsteamclient/steamworks_sdk_120/isteamuserstats.h451
-rw-r--r--lsteamclient/steamworks_sdk_120/isteamutils.h257
-rw-r--r--lsteamclient/steamworks_sdk_120/matchmakingtypes.h244
-rw-r--r--lsteamclient/steamworks_sdk_120/steam_api.h510
-rw-r--r--lsteamclient/steamworks_sdk_120/steam_gameserver.h163
-rw-r--r--lsteamclient/steamworks_sdk_120/steamclientpublic.h1032
-rw-r--r--lsteamclient/steamworks_sdk_120/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_120/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_120/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_120/steamtypes.h134
-rw-r--r--lsteamclient/steamworks_sdk_121/isteamapps.h117
-rw-r--r--lsteamclient/steamworks_sdk_121/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_121/isteamclient.h286
-rw-r--r--lsteamclient/steamworks_sdk_121/isteamfriends.h590
-rw-r--r--lsteamclient/steamworks_sdk_121/isteamgamecoordinator.h65
-rw-r--r--lsteamclient/steamworks_sdk_121/isteamgameserver.h385
-rw-r--r--lsteamclient/steamworks_sdk_121/isteamgameserverstats.h93
-rw-r--r--lsteamclient/steamworks_sdk_121/isteamhttp.h127
-rw-r--r--lsteamclient/steamworks_sdk_121/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_121/isteammatchmaking.h668
-rw-r--r--lsteamclient/steamworks_sdk_121/isteamnetworking.h294
-rw-r--r--lsteamclient/steamworks_sdk_121/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_121/isteamremotestorage.h558
-rw-r--r--lsteamclient/steamworks_sdk_121/isteamscreenshots.h86
-rw-r--r--lsteamclient/steamworks_sdk_121/isteamuser.h316
-rw-r--r--lsteamclient/steamworks_sdk_121/isteamuserstats.h451
-rw-r--r--lsteamclient/steamworks_sdk_121/isteamutils.h294
-rw-r--r--lsteamclient/steamworks_sdk_121/matchmakingtypes.h244
-rw-r--r--lsteamclient/steamworks_sdk_121/steam_api.h510
-rw-r--r--lsteamclient/steamworks_sdk_121/steam_gameserver.h163
-rw-r--r--lsteamclient/steamworks_sdk_121/steamclientpublic.h1032
-rw-r--r--lsteamclient/steamworks_sdk_121/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_121/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_121/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_121/steamtypes.h134
-rw-r--r--lsteamclient/steamworks_sdk_122/isteamapps.h120
-rw-r--r--lsteamclient/steamworks_sdk_122/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_122/isteamclient.h286
-rw-r--r--lsteamclient/steamworks_sdk_122/isteamfriends.h590
-rw-r--r--lsteamclient/steamworks_sdk_122/isteamgamecoordinator.h65
-rw-r--r--lsteamclient/steamworks_sdk_122/isteamgameserver.h385
-rw-r--r--lsteamclient/steamworks_sdk_122/isteamgameserverstats.h93
-rw-r--r--lsteamclient/steamworks_sdk_122/isteamhttp.h170
-rw-r--r--lsteamclient/steamworks_sdk_122/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_122/isteammatchmaking.h726
-rw-r--r--lsteamclient/steamworks_sdk_122/isteamnetworking.h294
-rw-r--r--lsteamclient/steamworks_sdk_122/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_122/isteamremotestorage.h562
-rw-r--r--lsteamclient/steamworks_sdk_122/isteamscreenshots.h86
-rw-r--r--lsteamclient/steamworks_sdk_122/isteamuser.h327
-rw-r--r--lsteamclient/steamworks_sdk_122/isteamuserstats.h451
-rw-r--r--lsteamclient/steamworks_sdk_122/isteamutils.h294
-rw-r--r--lsteamclient/steamworks_sdk_122/matchmakingtypes.h249
-rw-r--r--lsteamclient/steamworks_sdk_122/steam_api.h510
-rw-r--r--lsteamclient/steamworks_sdk_122/steam_gameserver.h163
-rw-r--r--lsteamclient/steamworks_sdk_122/steamclientpublic.h1059
-rw-r--r--lsteamclient/steamworks_sdk_122/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_122/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_122/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_122/steamtypes.h134
-rw-r--r--lsteamclient/steamworks_sdk_123/isteamapps.h127
-rw-r--r--lsteamclient/steamworks_sdk_123/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_123/isteamclient.h343
-rw-r--r--lsteamclient/steamworks_sdk_123/isteamfriends.h602
-rw-r--r--lsteamclient/steamworks_sdk_123/isteamgamecoordinator.h65
-rw-r--r--lsteamclient/steamworks_sdk_123/isteamgameserver.h391
-rw-r--r--lsteamclient/steamworks_sdk_123/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_123/isteamhttp.h176
-rw-r--r--lsteamclient/steamworks_sdk_123/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_123/isteammatchmaking.h731
-rw-r--r--lsteamclient/steamworks_sdk_123/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_123/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_123/isteamremotestorage.h599
-rw-r--r--lsteamclient/steamworks_sdk_123/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_123/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_123/isteamuser.h339
-rw-r--r--lsteamclient/steamworks_sdk_123/isteamuserstats.h463
-rw-r--r--lsteamclient/steamworks_sdk_123/isteamutils.h300
-rw-r--r--lsteamclient/steamworks_sdk_123/matchmakingtypes.h249
-rw-r--r--lsteamclient/steamworks_sdk_123/steam_api.h522
-rw-r--r--lsteamclient/steamworks_sdk_123/steam_gameserver.h163
-rw-r--r--lsteamclient/steamworks_sdk_123/steamclientpublic.h1067
-rw-r--r--lsteamclient/steamworks_sdk_123/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_123/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_123/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_123/steamtypes.h136
-rw-r--r--lsteamclient/steamworks_sdk_123a/isteamapps.h127
-rw-r--r--lsteamclient/steamworks_sdk_123a/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_123a/isteamclient.h343
-rw-r--r--lsteamclient/steamworks_sdk_123a/isteamfriends.h602
-rw-r--r--lsteamclient/steamworks_sdk_123a/isteamgamecoordinator.h65
-rw-r--r--lsteamclient/steamworks_sdk_123a/isteamgameserver.h391
-rw-r--r--lsteamclient/steamworks_sdk_123a/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_123a/isteamhttp.h176
-rw-r--r--lsteamclient/steamworks_sdk_123a/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_123a/isteammatchmaking.h731
-rw-r--r--lsteamclient/steamworks_sdk_123a/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_123a/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_123a/isteamremotestorage.h599
-rw-r--r--lsteamclient/steamworks_sdk_123a/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_123a/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_123a/isteamuser.h339
-rw-r--r--lsteamclient/steamworks_sdk_123a/isteamuserstats.h463
-rw-r--r--lsteamclient/steamworks_sdk_123a/isteamutils.h300
-rw-r--r--lsteamclient/steamworks_sdk_123a/matchmakingtypes.h249
-rw-r--r--lsteamclient/steamworks_sdk_123a/steam_api.h522
-rw-r--r--lsteamclient/steamworks_sdk_123a/steam_gameserver.h163
-rw-r--r--lsteamclient/steamworks_sdk_123a/steamclientpublic.h1067
-rw-r--r--lsteamclient/steamworks_sdk_123a/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_123a/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_123a/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_123a/steamtypes.h136
-rw-r--r--lsteamclient/steamworks_sdk_124/isteamapps.h128
-rw-r--r--lsteamclient/steamworks_sdk_124/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_124/isteamclient.h350
-rw-r--r--lsteamclient/steamworks_sdk_124/isteamcontroller.h62
-rw-r--r--lsteamclient/steamworks_sdk_124/isteamfriends.h606
-rw-r--r--lsteamclient/steamworks_sdk_124/isteamgamecoordinator.h65
-rw-r--r--lsteamclient/steamworks_sdk_124/isteamgameserver.h391
-rw-r--r--lsteamclient/steamworks_sdk_124/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_124/isteamhttp.h176
-rw-r--r--lsteamclient/steamworks_sdk_124/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_124/isteammatchmaking.h731
-rw-r--r--lsteamclient/steamworks_sdk_124/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_124/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_124/isteamremotestorage.h599
-rw-r--r--lsteamclient/steamworks_sdk_124/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_124/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_124/isteamuser.h347
-rw-r--r--lsteamclient/steamworks_sdk_124/isteamuserstats.h463
-rw-r--r--lsteamclient/steamworks_sdk_124/isteamutils.h304
-rw-r--r--lsteamclient/steamworks_sdk_124/matchmakingtypes.h249
-rw-r--r--lsteamclient/steamworks_sdk_124/steam_api.h524
-rw-r--r--lsteamclient/steamworks_sdk_124/steam_gameserver.h163
-rw-r--r--lsteamclient/steamworks_sdk_124/steamclientpublic.h1089
-rw-r--r--lsteamclient/steamworks_sdk_124/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_124/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_124/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_124/steamtypes.h149
-rw-r--r--lsteamclient/steamworks_sdk_124/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_125/isteamapps.h128
-rw-r--r--lsteamclient/steamworks_sdk_125/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_125/isteamclient.h350
-rw-r--r--lsteamclient/steamworks_sdk_125/isteamcontroller.h62
-rw-r--r--lsteamclient/steamworks_sdk_125/isteamfriends.h606
-rw-r--r--lsteamclient/steamworks_sdk_125/isteamgamecoordinator.h65
-rw-r--r--lsteamclient/steamworks_sdk_125/isteamgameserver.h391
-rw-r--r--lsteamclient/steamworks_sdk_125/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_125/isteamhttp.h176
-rw-r--r--lsteamclient/steamworks_sdk_125/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_125/isteammatchmaking.h731
-rw-r--r--lsteamclient/steamworks_sdk_125/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_125/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_125/isteamremotestorage.h648
-rw-r--r--lsteamclient/steamworks_sdk_125/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_125/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_125/isteamuser.h347
-rw-r--r--lsteamclient/steamworks_sdk_125/isteamuserstats.h463
-rw-r--r--lsteamclient/steamworks_sdk_125/isteamutils.h304
-rw-r--r--lsteamclient/steamworks_sdk_125/matchmakingtypes.h249
-rw-r--r--lsteamclient/steamworks_sdk_125/steam_api.h524
-rw-r--r--lsteamclient/steamworks_sdk_125/steam_gameserver.h163
-rw-r--r--lsteamclient/steamworks_sdk_125/steamclientpublic.h1089
-rw-r--r--lsteamclient/steamworks_sdk_125/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_125/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_125/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_125/steamtypes.h149
-rw-r--r--lsteamclient/steamworks_sdk_125/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_126/isteamapps.h149
-rw-r--r--lsteamclient/steamworks_sdk_126/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_126/isteamclient.h361
-rw-r--r--lsteamclient/steamworks_sdk_126/isteamcontroller.h62
-rw-r--r--lsteamclient/steamworks_sdk_126/isteamfriends.h609
-rw-r--r--lsteamclient/steamworks_sdk_126/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_126/isteamgameserver.h392
-rw-r--r--lsteamclient/steamworks_sdk_126/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_126/isteamhttp.h176
-rw-r--r--lsteamclient/steamworks_sdk_126/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_126/isteammatchmaking.h731
-rw-r--r--lsteamclient/steamworks_sdk_126/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_126/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_126/isteamremotestorage.h649
-rw-r--r--lsteamclient/steamworks_sdk_126/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_126/isteamugc.h192
-rw-r--r--lsteamclient/steamworks_sdk_126/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_126/isteamuser.h348
-rw-r--r--lsteamclient/steamworks_sdk_126/isteamuserstats.h463
-rw-r--r--lsteamclient/steamworks_sdk_126/isteamutils.h304
-rw-r--r--lsteamclient/steamworks_sdk_126/matchmakingtypes.h249
-rw-r--r--lsteamclient/steamworks_sdk_126/steam_api.h539
-rw-r--r--lsteamclient/steamworks_sdk_126/steam_gameserver.h163
-rw-r--r--lsteamclient/steamworks_sdk_126/steamclientpublic.h1093
-rw-r--r--lsteamclient/steamworks_sdk_126/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_126/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_126/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_126/steamtypes.h151
-rw-r--r--lsteamclient/steamworks_sdk_126/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteamapps.h149
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteamclient.h361
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteamcontroller.h62
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteamfriends.h609
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteamgameserver.h392
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteamhttp.h176
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteammatchmaking.h731
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteamremotestorage.h649
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteamugc.h192
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteamuser.h348
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteamuserstats.h463
-rw-r--r--lsteamclient/steamworks_sdk_126a/isteamutils.h304
-rw-r--r--lsteamclient/steamworks_sdk_126a/matchmakingtypes.h249
-rw-r--r--lsteamclient/steamworks_sdk_126a/steam_api.h540
-rw-r--r--lsteamclient/steamworks_sdk_126a/steam_gameserver.h163
-rw-r--r--lsteamclient/steamworks_sdk_126a/steamclientpublic.h1093
-rw-r--r--lsteamclient/steamworks_sdk_126a/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_126a/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_126a/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_126a/steamtypes.h151
-rw-r--r--lsteamclient/steamworks_sdk_126a/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_127/isteamapps.h149
-rw-r--r--lsteamclient/steamworks_sdk_127/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_127/isteamclient.h361
-rw-r--r--lsteamclient/steamworks_sdk_127/isteamcontroller.h91
-rw-r--r--lsteamclient/steamworks_sdk_127/isteamfriends.h609
-rw-r--r--lsteamclient/steamworks_sdk_127/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_127/isteamgameserver.h392
-rw-r--r--lsteamclient/steamworks_sdk_127/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_127/isteamhttp.h176
-rw-r--r--lsteamclient/steamworks_sdk_127/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_127/isteammatchmaking.h731
-rw-r--r--lsteamclient/steamworks_sdk_127/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_127/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_127/isteamremotestorage.h649
-rw-r--r--lsteamclient/steamworks_sdk_127/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_127/isteamugc.h192
-rw-r--r--lsteamclient/steamworks_sdk_127/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_127/isteamuser.h348
-rw-r--r--lsteamclient/steamworks_sdk_127/isteamuserstats.h463
-rw-r--r--lsteamclient/steamworks_sdk_127/isteamutils.h304
-rw-r--r--lsteamclient/steamworks_sdk_127/matchmakingtypes.h249
-rw-r--r--lsteamclient/steamworks_sdk_127/steam_api.h540
-rw-r--r--lsteamclient/steamworks_sdk_127/steam_gameserver.h163
-rw-r--r--lsteamclient/steamworks_sdk_127/steamclientpublic.h1096
-rw-r--r--lsteamclient/steamworks_sdk_127/steamcontrollerpublic.h76
-rw-r--r--lsteamclient/steamworks_sdk_127/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_127/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_127/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_127/steamtypes.h151
-rw-r--r--lsteamclient/steamworks_sdk_127/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_128/isteamapps.h149
-rw-r--r--lsteamclient/steamworks_sdk_128/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_128/isteamclient.h380
-rw-r--r--lsteamclient/steamworks_sdk_128/isteamcontroller.h91
-rw-r--r--lsteamclient/steamworks_sdk_128/isteamfriends.h609
-rw-r--r--lsteamclient/steamworks_sdk_128/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_128/isteamgameserver.h387
-rw-r--r--lsteamclient/steamworks_sdk_128/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_128/isteamhttp.h176
-rw-r--r--lsteamclient/steamworks_sdk_128/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_128/isteammatchmaking.h731
-rw-r--r--lsteamclient/steamworks_sdk_128/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_128/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_128/isteamremotestorage.h649
-rw-r--r--lsteamclient/steamworks_sdk_128/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_128/isteamugc.h192
-rw-r--r--lsteamclient/steamworks_sdk_128/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_128/isteamuser.h348
-rw-r--r--lsteamclient/steamworks_sdk_128/isteamuserstats.h463
-rw-r--r--lsteamclient/steamworks_sdk_128/isteamutils.h307
-rw-r--r--lsteamclient/steamworks_sdk_128/matchmakingtypes.h249
-rw-r--r--lsteamclient/steamworks_sdk_128/steam_api.h540
-rw-r--r--lsteamclient/steamworks_sdk_128/steam_gameserver.h163
-rw-r--r--lsteamclient/steamworks_sdk_128/steamclientpublic.h1097
-rw-r--r--lsteamclient/steamworks_sdk_128/steamcontrollerpublic.h76
-rw-r--r--lsteamclient/steamworks_sdk_128/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_128/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_128/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_128/steamtypes.h151
-rw-r--r--lsteamclient/steamworks_sdk_128/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_128/steamvr.h232
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamapps.h149
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamclient.h395
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamcontroller.h91
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamfriends.h609
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamgameserver.h384
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamhttp.h176
-rw-r--r--lsteamclient/steamworks_sdk_129/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_129/isteammatchmaking.h747
-rw-r--r--lsteamclient/steamworks_sdk_129/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamremotestorage.h651
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamugc.h205
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamuser.h348
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamuserstats.h463
-rw-r--r--lsteamclient/steamworks_sdk_129/isteamutils.h307
-rw-r--r--lsteamclient/steamworks_sdk_129/matchmakingtypes.h249
-rw-r--r--lsteamclient/steamworks_sdk_129/steam_api.h560
-rw-r--r--lsteamclient/steamworks_sdk_129/steam_gameserver.h163
-rw-r--r--lsteamclient/steamworks_sdk_129/steamclientpublic.h1099
-rw-r--r--lsteamclient/steamworks_sdk_129/steamcontrollerpublic.h76
-rw-r--r--lsteamclient/steamworks_sdk_129/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_129/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_129/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_129/steamtypes.h151
-rw-r--r--lsteamclient/steamworks_sdk_129/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_129/steamvr.h242
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamapps.h149
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamclient.h395
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamcontroller.h91
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamfriends.h609
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamgameserver.h384
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamhttp.h176
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteammatchmaking.h747
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamremotestorage.h651
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamugc.h206
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamuser.h348
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamuserstats.h463
-rw-r--r--lsteamclient/steamworks_sdk_129a/isteamutils.h307
-rw-r--r--lsteamclient/steamworks_sdk_129a/matchmakingtypes.h249
-rw-r--r--lsteamclient/steamworks_sdk_129a/steam_api.h560
-rw-r--r--lsteamclient/steamworks_sdk_129a/steam_gameserver.h163
-rw-r--r--lsteamclient/steamworks_sdk_129a/steamclientpublic.h1099
-rw-r--r--lsteamclient/steamworks_sdk_129a/steamcontrollerpublic.h76
-rw-r--r--lsteamclient/steamworks_sdk_129a/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_129a/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_129a/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_129a/steamtypes.h151
-rw-r--r--lsteamclient/steamworks_sdk_129a/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_129a/steamvr.h242
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamapps.h149
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamclient.h400
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamcontroller.h91
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamfriends.h609
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamgameserver.h384
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamhttp.h176
-rw-r--r--lsteamclient/steamworks_sdk_130/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_130/isteammatchmaking.h747
-rw-r--r--lsteamclient/steamworks_sdk_130/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_130/isteammusicremote.h126
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamremotestorage.h647
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamugc.h268
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamuser.h348
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamuserstats.h463
-rw-r--r--lsteamclient/steamworks_sdk_130/isteamutils.h307
-rw-r--r--lsteamclient/steamworks_sdk_130/matchmakingtypes.h249
-rw-r--r--lsteamclient/steamworks_sdk_130/steam_api.h570
-rw-r--r--lsteamclient/steamworks_sdk_130/steam_gameserver.h163
-rw-r--r--lsteamclient/steamworks_sdk_130/steamclientpublic.h1093
-rw-r--r--lsteamclient/steamworks_sdk_130/steamcontrollerpublic.h76
-rw-r--r--lsteamclient/steamworks_sdk_130/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_130/steamhttpenums.h94
-rw-r--r--lsteamclient/steamworks_sdk_130/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_130/steamtypes.h157
-rw-r--r--lsteamclient/steamworks_sdk_130/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_130/steamvr.h242
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamapps.h149
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamclient.h493
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamcontroller.h91
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamfriends.h609
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamgameserver.h384
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamhtmlsurface.h476
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamhttp.h176
-rw-r--r--lsteamclient/steamworks_sdk_131/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_131/isteammatchmaking.h747
-rw-r--r--lsteamclient/steamworks_sdk_131/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_131/isteammusicremote.h126
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamremotestorage.h648
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamugc.h270
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamuser.h348
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamuserstats.h463
-rw-r--r--lsteamclient/steamworks_sdk_131/isteamutils.h307
-rw-r--r--lsteamclient/steamworks_sdk_131/matchmakingtypes.h249
-rw-r--r--lsteamclient/steamworks_sdk_131/steam_api.h583
-rw-r--r--lsteamclient/steamworks_sdk_131/steam_gameserver.h163
-rw-r--r--lsteamclient/steamworks_sdk_131/steamclientpublic.h1102
-rw-r--r--lsteamclient/steamworks_sdk_131/steamcontrollerpublic.h79
-rw-r--r--lsteamclient/steamworks_sdk_131/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_131/steamhttpenums.h95
-rw-r--r--lsteamclient/steamworks_sdk_131/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_131/steamtypes.h157
-rw-r--r--lsteamclient/steamworks_sdk_131/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_131/steamvr.h261
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamapps.h154
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamclient.h503
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamcontroller.h91
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamfriends.h629
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamgameserver.h384
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamhtmlsurface.h476
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamhttp.h208
-rw-r--r--lsteamclient/steamworks_sdk_132/isteaminventory.h354
-rw-r--r--lsteamclient/steamworks_sdk_132/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_132/isteammatchmaking.h747
-rw-r--r--lsteamclient/steamworks_sdk_132/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_132/isteammusicremote.h129
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamremotestorage.h648
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamugc.h271
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamuser.h379
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamuserstats.h465
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamutils.h307
-rw-r--r--lsteamclient/steamworks_sdk_132/isteamvideo.h51
-rw-r--r--lsteamclient/steamworks_sdk_132/matchmakingtypes.h249
-rw-r--r--lsteamclient/steamworks_sdk_132/steam_api.h604
-rw-r--r--lsteamclient/steamworks_sdk_132/steam_api_flat.h633
-rw-r--r--lsteamclient/steamworks_sdk_132/steam_gameserver.h171
-rw-r--r--lsteamclient/steamworks_sdk_132/steamclientpublic.h1106
-rw-r--r--lsteamclient/steamworks_sdk_132/steamcontrollerpublic.h79
-rw-r--r--lsteamclient/steamworks_sdk_132/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_132/steamhttpenums.h97
-rw-r--r--lsteamclient/steamworks_sdk_132/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_132/steamtypes.h178
-rw-r--r--lsteamclient/steamworks_sdk_132/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_132/steamvr.h263
-rw-r--r--lsteamclient/steamworks_sdk_132/steamvr_flat.h33
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamapps.h154
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamclient.h503
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamcontroller.h138
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamfriends.h629
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamgameserver.h384
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamhtmlsurface.h438
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamhttp.h210
-rw-r--r--lsteamclient/steamworks_sdk_133/isteaminventory.h354
-rw-r--r--lsteamclient/steamworks_sdk_133/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_133/isteammatchmaking.h747
-rw-r--r--lsteamclient/steamworks_sdk_133/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_133/isteammusicremote.h129
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamremotestorage.h648
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamugc.h342
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamuser.h379
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamuserstats.h465
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamutils.h307
-rw-r--r--lsteamclient/steamworks_sdk_133/isteamvideo.h60
-rw-r--r--lsteamclient/steamworks_sdk_133/matchmakingtypes.h249
-rw-r--r--lsteamclient/steamworks_sdk_133/steam_api.h604
-rw-r--r--lsteamclient/steamworks_sdk_133/steam_api_flat.h693
-rw-r--r--lsteamclient/steamworks_sdk_133/steam_gameserver.h171
-rw-r--r--lsteamclient/steamworks_sdk_133/steamclientpublic.h1135
-rw-r--r--lsteamclient/steamworks_sdk_133/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_133/steamhttpenums.h97
-rw-r--r--lsteamclient/steamworks_sdk_133/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_133/steamtypes.h179
-rw-r--r--lsteamclient/steamworks_sdk_133/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamapps.h154
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamclient.h503
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamcontroller.h138
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamfriends.h629
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamgameserver.h384
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamhtmlsurface.h438
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamhttp.h210
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteaminventory.h354
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteammatchmaking.h747
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteammusicremote.h129
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamremotestorage.h648
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamugc.h342
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamuser.h379
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamuserstats.h465
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamutils.h307
-rw-r--r--lsteamclient/steamworks_sdk_133a/isteamvideo.h60
-rw-r--r--lsteamclient/steamworks_sdk_133a/matchmakingtypes.h249
-rw-r--r--lsteamclient/steamworks_sdk_133a/steam_api.h604
-rw-r--r--lsteamclient/steamworks_sdk_133a/steam_api_flat.h693
-rw-r--r--lsteamclient/steamworks_sdk_133a/steam_gameserver.h171
-rw-r--r--lsteamclient/steamworks_sdk_133a/steamclientpublic.h1135
-rw-r--r--lsteamclient/steamworks_sdk_133a/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_133a/steamhttpenums.h97
-rw-r--r--lsteamclient/steamworks_sdk_133a/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_133a/steamtypes.h179
-rw-r--r--lsteamclient/steamworks_sdk_133a/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamapps.h154
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamclient.h503
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamcontroller.h138
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamfriends.h629
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamgameserver.h384
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamhtmlsurface.h444
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamhttp.h210
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteaminventory.h354
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteammatchmaking.h747
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteammusicremote.h129
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamremotestorage.h648
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamugc.h342
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamuser.h379
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamuserstats.h465
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamutils.h307
-rw-r--r--lsteamclient/steamworks_sdk_133b/isteamvideo.h60
-rw-r--r--lsteamclient/steamworks_sdk_133b/matchmakingtypes.h249
-rw-r--r--lsteamclient/steamworks_sdk_133b/steam_api.h604
-rw-r--r--lsteamclient/steamworks_sdk_133b/steam_api_flat.h694
-rw-r--r--lsteamclient/steamworks_sdk_133b/steam_gameserver.h179
-rw-r--r--lsteamclient/steamworks_sdk_133b/steamclientpublic.h1135
-rw-r--r--lsteamclient/steamworks_sdk_133b/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_133b/steamhttpenums.h97
-rw-r--r--lsteamclient/steamworks_sdk_133b/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_133b/steamtypes.h179
-rw-r--r--lsteamclient/steamworks_sdk_133b/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamapps.h154
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamclient.h503
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamcontroller.h138
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamfriends.h629
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamgameserver.h384
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamhtmlsurface.h444
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamhttp.h210
-rw-r--r--lsteamclient/steamworks_sdk_134/isteaminventory.h354
-rw-r--r--lsteamclient/steamworks_sdk_134/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_134/isteammatchmaking.h747
-rw-r--r--lsteamclient/steamworks_sdk_134/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_134/isteammusicremote.h129
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamremotestorage.h650
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamugc.h377
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamuser.h379
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamuserstats.h465
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamutils.h310
-rw-r--r--lsteamclient/steamworks_sdk_134/isteamvideo.h60
-rw-r--r--lsteamclient/steamworks_sdk_134/matchmakingtypes.h251
-rw-r--r--lsteamclient/steamworks_sdk_134/steam_api.h604
-rw-r--r--lsteamclient/steamworks_sdk_134/steam_api_flat.h642
-rw-r--r--lsteamclient/steamworks_sdk_134/steam_gameserver.h179
-rw-r--r--lsteamclient/steamworks_sdk_134/steamclientpublic.h1138
-rw-r--r--lsteamclient/steamworks_sdk_134/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_134/steamhttpenums.h97
-rw-r--r--lsteamclient/steamworks_sdk_134/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_134/steamtypes.h179
-rw-r--r--lsteamclient/steamworks_sdk_134/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamapps.h154
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamclient.h503
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamcontroller.h210
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamfriends.h629
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamgameserver.h384
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamhtmlsurface.h444
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamhttp.h210
-rw-r--r--lsteamclient/steamworks_sdk_135/isteaminventory.h354
-rw-r--r--lsteamclient/steamworks_sdk_135/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_135/isteammatchmaking.h747
-rw-r--r--lsteamclient/steamworks_sdk_135/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_135/isteammusicremote.h129
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamremotestorage.h675
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamugc.h385
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamuser.h380
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamuserstats.h465
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamutils.h310
-rw-r--r--lsteamclient/steamworks_sdk_135/isteamvideo.h60
-rw-r--r--lsteamclient/steamworks_sdk_135/matchmakingtypes.h251
-rw-r--r--lsteamclient/steamworks_sdk_135/steam_api.h650
-rw-r--r--lsteamclient/steamworks_sdk_135/steam_api_flat.h657
-rw-r--r--lsteamclient/steamworks_sdk_135/steam_gameserver.h191
-rw-r--r--lsteamclient/steamworks_sdk_135/steamclientpublic.h1165
-rw-r--r--lsteamclient/steamworks_sdk_135/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_135/steamhttpenums.h97
-rw-r--r--lsteamclient/steamworks_sdk_135/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_135/steamtypes.h179
-rw-r--r--lsteamclient/steamworks_sdk_135/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamapps.h154
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamclient.h503
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamcontroller.h211
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamfriends.h629
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamgameserver.h384
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamgameserverstats.h99
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamhtmlsurface.h444
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamhttp.h210
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteaminventory.h354
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteammatchmaking.h747
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteammusicremote.h129
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamremotestorage.h675
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamugc.h385
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamuser.h380
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamuserstats.h465
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamutils.h310
-rw-r--r--lsteamclient/steamworks_sdk_135a/isteamvideo.h60
-rw-r--r--lsteamclient/steamworks_sdk_135a/matchmakingtypes.h251
-rw-r--r--lsteamclient/steamworks_sdk_135a/steam_api.h638
-rw-r--r--lsteamclient/steamworks_sdk_135a/steam_api_flat.h657
-rw-r--r--lsteamclient/steamworks_sdk_135a/steam_gameserver.h191
-rw-r--r--lsteamclient/steamworks_sdk_135a/steamclientpublic.h1165
-rw-r--r--lsteamclient/steamworks_sdk_135a/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_135a/steamhttpenums.h97
-rw-r--r--lsteamclient/steamworks_sdk_135a/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_135a/steamtypes.h179
-rw-r--r--lsteamclient/steamworks_sdk_135a/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamapps.h149
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamclient.h511
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamcontroller.h213
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamfriends.h636
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamgameserver.h387
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamgameserverstats.h101
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamhtmlsurface.h446
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamhttp.h210
-rw-r--r--lsteamclient/steamworks_sdk_136/isteaminventory.h354
-rw-r--r--lsteamclient/steamworks_sdk_136/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_136/isteammatchmaking.h750
-rw-r--r--lsteamclient/steamworks_sdk_136/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_136/isteammusicremote.h129
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamremotestorage.h696
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamugc.h394
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamuser.h382
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamuserstats.h476
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamutils.h244
-rw-r--r--lsteamclient/steamworks_sdk_136/isteamvideo.h60
-rw-r--r--lsteamclient/steamworks_sdk_136/matchmakingtypes.h251
-rw-r--r--lsteamclient/steamworks_sdk_136/steam_api.h641
-rw-r--r--lsteamclient/steamworks_sdk_136/steam_api_flat.h786
-rw-r--r--lsteamclient/steamworks_sdk_136/steam_gameserver.h191
-rw-r--r--lsteamclient/steamworks_sdk_136/steamclientpublic.h1173
-rw-r--r--lsteamclient/steamworks_sdk_136/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_136/steamhttpenums.h97
-rw-r--r--lsteamclient/steamworks_sdk_136/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_136/steamtypes.h181
-rw-r--r--lsteamclient/steamworks_sdk_136/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamapps.h160
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamclient.h520
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamcontroller.h214
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamfriends.h636
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamgameserver.h387
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamgameserverstats.h101
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamhtmlsurface.h453
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamhttp.h210
-rw-r--r--lsteamclient/steamworks_sdk_137/isteaminventory.h354
-rw-r--r--lsteamclient/steamworks_sdk_137/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_137/isteammatchmaking.h751
-rw-r--r--lsteamclient/steamworks_sdk_137/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_137/isteammusicremote.h129
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamremotestorage.h696
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamscreenshots.h96
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamugc.h416
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamuser.h349
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamuserstats.h476
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamutils.h254
-rw-r--r--lsteamclient/steamworks_sdk_137/isteamvideo.h60
-rw-r--r--lsteamclient/steamworks_sdk_137/matchmakingtypes.h251
-rw-r--r--lsteamclient/steamworks_sdk_137/steam_api.h393
-rw-r--r--lsteamclient/steamworks_sdk_137/steam_api_flat.h788
-rw-r--r--lsteamclient/steamworks_sdk_137/steam_api_internal.h325
-rw-r--r--lsteamclient/steamworks_sdk_137/steam_gameserver.h237
-rw-r--r--lsteamclient/steamworks_sdk_137/steamclientpublic.h1224
-rw-r--r--lsteamclient/steamworks_sdk_137/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_137/steamhttpenums.h98
-rw-r--r--lsteamclient/steamworks_sdk_137/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_137/steamtypes.h181
-rw-r--r--lsteamclient/steamworks_sdk_137/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamapps.h176
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamclient.h520
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamcontroller.h251
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamfriends.h636
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamgameserver.h387
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamgameserverstats.h101
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamhtmlsurface.h453
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamhttp.h210
-rw-r--r--lsteamclient/steamworks_sdk_138/isteaminventory.h357
-rw-r--r--lsteamclient/steamworks_sdk_138/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_138/isteammatchmaking.h751
-rw-r--r--lsteamclient/steamworks_sdk_138/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_138/isteammusicremote.h129
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamremotestorage.h681
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamscreenshots.h116
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamugc.h453
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamuser.h355
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamuserstats.h476
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamutils.h254
-rw-r--r--lsteamclient/steamworks_sdk_138/isteamvideo.h60
-rw-r--r--lsteamclient/steamworks_sdk_138/matchmakingtypes.h251
-rw-r--r--lsteamclient/steamworks_sdk_138/steam_api.h394
-rw-r--r--lsteamclient/steamworks_sdk_138/steam_api_flat.h802
-rw-r--r--lsteamclient/steamworks_sdk_138/steam_api_internal.h327
-rw-r--r--lsteamclient/steamworks_sdk_138/steam_gameserver.h237
-rw-r--r--lsteamclient/steamworks_sdk_138/steamclientpublic.h1255
-rw-r--r--lsteamclient/steamworks_sdk_138/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_138/steamhttpenums.h98
-rw-r--r--lsteamclient/steamworks_sdk_138/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_138/steamtypes.h181
-rw-r--r--lsteamclient/steamworks_sdk_138/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamapps.h176
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamclient.h520
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamcontroller.h251
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamfriends.h636
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamgameserver.h387
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamgameserverstats.h101
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamhtmlsurface.h453
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamhttp.h210
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteaminventory.h357
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteammatchmaking.h751
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteammusicremote.h129
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamremotestorage.h681
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamscreenshots.h116
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamugc.h453
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamuser.h355
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamuserstats.h476
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamutils.h254
-rw-r--r--lsteamclient/steamworks_sdk_138a/isteamvideo.h60
-rw-r--r--lsteamclient/steamworks_sdk_138a/matchmakingtypes.h251
-rw-r--r--lsteamclient/steamworks_sdk_138a/steam_api.h394
-rw-r--r--lsteamclient/steamworks_sdk_138a/steam_api_flat.h802
-rw-r--r--lsteamclient/steamworks_sdk_138a/steam_api_internal.h327
-rw-r--r--lsteamclient/steamworks_sdk_138a/steam_gameserver.h237
-rw-r--r--lsteamclient/steamworks_sdk_138a/steamclientpublic.h1255
-rw-r--r--lsteamclient/steamworks_sdk_138a/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_138a/steamhttpenums.h98
-rw-r--r--lsteamclient/steamworks_sdk_138a/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_138a/steamtypes.h181
-rw-r--r--lsteamclient/steamworks_sdk_138a/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamapps.h176
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamclient.h520
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamcontroller.h429
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamfriends.h636
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamgameserver.h387
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamgameserverstats.h101
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamhtmlsurface.h453
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamhttp.h210
-rw-r--r--lsteamclient/steamworks_sdk_139/isteaminventory.h368
-rw-r--r--lsteamclient/steamworks_sdk_139/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_139/isteammatchmaking.h751
-rw-r--r--lsteamclient/steamworks_sdk_139/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_139/isteammusicremote.h129
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamremotestorage.h681
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamscreenshots.h116
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamugc.h453
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamuser.h355
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamuserstats.h476
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamutils.h254
-rw-r--r--lsteamclient/steamworks_sdk_139/isteamvideo.h60
-rw-r--r--lsteamclient/steamworks_sdk_139/matchmakingtypes.h251
-rw-r--r--lsteamclient/steamworks_sdk_139/steam_api.h394
-rw-r--r--lsteamclient/steamworks_sdk_139/steam_api.json7728
-rw-r--r--lsteamclient/steamworks_sdk_139/steam_api_flat.h808
-rw-r--r--lsteamclient/steamworks_sdk_139/steam_api_internal.h327
-rw-r--r--lsteamclient/steamworks_sdk_139/steam_api_interop.cs10694
-rw-r--r--lsteamclient/steamworks_sdk_139/steam_gameserver.h237
-rw-r--r--lsteamclient/steamworks_sdk_139/steamclientpublic.h1232
-rw-r--r--lsteamclient/steamworks_sdk_139/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_139/steamhttpenums.h98
-rw-r--r--lsteamclient/steamworks_sdk_139/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_139/steamtypes.h181
-rw-r--r--lsteamclient/steamworks_sdk_139/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamapps.h176
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamappticket.h29
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamclient.h520
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamcontroller.h440
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamfriends.h636
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamgameserver.h387
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamgameserverstats.h101
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamhtmlsurface.h453
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamhttp.h210
-rw-r--r--lsteamclient/steamworks_sdk_140/isteaminventory.h382
-rw-r--r--lsteamclient/steamworks_sdk_140/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_140/isteammatchmaking.h751
-rw-r--r--lsteamclient/steamworks_sdk_140/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_140/isteammusicremote.h129
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamremotestorage.h681
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamscreenshots.h116
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamugc.h484
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamuser.h369
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamuserstats.h476
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamutils.h264
-rw-r--r--lsteamclient/steamworks_sdk_140/isteamvideo.h71
-rw-r--r--lsteamclient/steamworks_sdk_140/matchmakingtypes.h251
-rw-r--r--lsteamclient/steamworks_sdk_140/steam_api.h394
-rw-r--r--lsteamclient/steamworks_sdk_140/steam_api.json7826
-rw-r--r--lsteamclient/steamworks_sdk_140/steam_api_flat.h816
-rw-r--r--lsteamclient/steamworks_sdk_140/steam_api_internal.h327
-rw-r--r--lsteamclient/steamworks_sdk_140/steam_api_interop.cs10877
-rw-r--r--lsteamclient/steamworks_sdk_140/steam_gameserver.h243
-rw-r--r--lsteamclient/steamworks_sdk_140/steamclientpublic.h1235
-rw-r--r--lsteamclient/steamworks_sdk_140/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_140/steamhttpenums.h98
-rw-r--r--lsteamclient/steamworks_sdk_140/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_140/steamtypes.h181
-rw-r--r--lsteamclient/steamworks_sdk_140/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamapps.h176
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamappticket.h29
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamclient.h526
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamcontroller.h440
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamfriends.h636
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamgameserver.h387
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamgameserverstats.h101
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamhtmlsurface.h457
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamhttp.h210
-rw-r--r--lsteamclient/steamworks_sdk_141/isteaminventory.h382
-rw-r--r--lsteamclient/steamworks_sdk_141/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_141/isteammatchmaking.h751
-rw-r--r--lsteamclient/steamworks_sdk_141/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_141/isteammusicremote.h129
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamparentalsettings.h60
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamremotestorage.h681
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamscreenshots.h116
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamugc.h545
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamunifiedmessages.h63
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamuser.h369
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamuserstats.h476
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamutils.h264
-rw-r--r--lsteamclient/steamworks_sdk_141/isteamvideo.h71
-rw-r--r--lsteamclient/steamworks_sdk_141/matchmakingtypes.h251
-rw-r--r--lsteamclient/steamworks_sdk_141/steam_api.h398
-rw-r--r--lsteamclient/steamworks_sdk_141/steam_api_flat.h830
-rw-r--r--lsteamclient/steamworks_sdk_141/steam_api_internal.h334
-rw-r--r--lsteamclient/steamworks_sdk_141/steam_gameserver.h243
-rw-r--r--lsteamclient/steamworks_sdk_141/steamclientpublic.h1239
-rw-r--r--lsteamclient/steamworks_sdk_141/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_141/steamhttpenums.h98
-rw-r--r--lsteamclient/steamworks_sdk_141/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_141/steamtypes.h181
-rw-r--r--lsteamclient/steamworks_sdk_141/steamuniverse.h27
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamapplist.h63
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamapps.h176
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamappticket.h29
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamclient.h526
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamcontroller.h461
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamfriends.h639
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamgamecoordinator.h76
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamgameserver.h387
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamgameserverstats.h101
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamhtmlsurface.h466
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamhttp.h210
-rw-r--r--lsteamclient/steamworks_sdk_142/isteaminventory.h429
-rw-r--r--lsteamclient/steamworks_sdk_142/isteammasterserverupdater.h1
-rw-r--r--lsteamclient/steamworks_sdk_142/isteammatchmaking.h751
-rw-r--r--lsteamclient/steamworks_sdk_142/isteammusic.h67
-rw-r--r--lsteamclient/steamworks_sdk_142/isteammusicremote.h129
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamnetworking.h306
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamparentalsettings.h60
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamps3overlayrenderer.h91
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamremotestorage.h681
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamscreenshots.h116
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamugc.h545
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamuser.h369
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamuserstats.h476
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamutils.h264
-rw-r--r--lsteamclient/steamworks_sdk_142/isteamvideo.h71
-rw-r--r--lsteamclient/steamworks_sdk_142/matchmakingtypes.h251
-rw-r--r--lsteamclient/steamworks_sdk_142/steam_api.h394
-rw-r--r--lsteamclient/steamworks_sdk_142/steam_api_flat.h844
-rw-r--r--lsteamclient/steamworks_sdk_142/steam_api_internal.h328
-rw-r--r--lsteamclient/steamworks_sdk_142/steam_gameserver.h243
-rw-r--r--lsteamclient/steamworks_sdk_142/steamclientpublic.h1270
-rw-r--r--lsteamclient/steamworks_sdk_142/steamencryptedappticket.h32
-rw-r--r--lsteamclient/steamworks_sdk_142/steamhttpenums.h98
-rw-r--r--lsteamclient/steamworks_sdk_142/steamps3params.h112
-rw-r--r--lsteamclient/steamworks_sdk_142/steamtypes.h184
-rw-r--r--lsteamclient/steamworks_sdk_142/steamuniverse.h27
-rw-r--r--lsteamclient/winISteamAppList.c88
-rw-r--r--lsteamclient/winISteamAppTicket.c54
-rw-r--r--lsteamclient/winISteamApps.c1222
-rw-r--r--lsteamclient/winISteamClient.c2624
-rw-r--r--lsteamclient/winISteamController.c981
-rw-r--r--lsteamclient/winISteamFriends.c4034
-rw-r--r--lsteamclient/winISteamGameCoordinator.c70
-rw-r--r--lsteamclient/winISteamGameServer.c1622
-rw-r--r--lsteamclient/winISteamGameServerStats.c126
-rw-r--r--lsteamclient/winISteamHTMLSurface.c940
-rw-r--r--lsteamclient/winISteamHTTP.c393
-rw-r--r--lsteamclient/winISteamInventory.c561
-rw-r--r--lsteamclient/winISteamMasterServerUpdater.c158
-rw-r--r--lsteamclient/winISteamMatchmaking.c1661
-rw-r--r--lsteamclient/winISteamMatchmakingServers.c337
-rw-r--r--lsteamclient/winISteamMusic.c118
-rw-r--r--lsteamclient/winISteamMusicRemote.c302
-rw-r--r--lsteamclient/winISteamNetworking.c858
-rw-r--r--lsteamclient/winISteamParentalSettings.c94
-rw-r--r--lsteamclient/winISteamRemoteStorage.c3681
-rw-r--r--lsteamclient/winISteamScreenshots.c276
-rw-r--r--lsteamclient/winISteamUGC.c3321
-rw-r--r--lsteamclient/winISteamUnifiedMessages.c86
-rw-r--r--lsteamclient/winISteamUser.c1723
-rw-r--r--lsteamclient/winISteamUserStats.c2083
-rw-r--r--lsteamclient/winISteamUtils.c1520
-rw-r--r--lsteamclient/winISteamVideo.c121
-rw-r--r--lsteamclient/win_constructors.h118
-rw-r--r--lsteamclient/win_constructors_table.dat120
1690 files changed, 463666 insertions, 0 deletions
diff --git a/lsteamclient/Makefile.in b/lsteamclient/Makefile.in
new file mode 100644
index 00000000..88e436f2
--- /dev/null
+++ b/lsteamclient/Makefile.in
@@ -0,0 +1,175 @@
+# Generated from /home/valve/steampfx/drive_c/Program Files/Steam/steamclient.dll by winedump.
+MODULE = lsteamclient.dll
+
+EXTRADEFS = -Wno-unused-variable -Wno-attributes -DSTEAM_API_EXPORTS
+
+
+C_SRCS = \
+ steamclient_main.c \
+ steamclient_wrappers.c \
+ winISteamClient.c \
+ winISteamUser.c \
+ winISteamFriends.c \
+ winISteamUtils.c \
+ winISteamMatchmaking.c \
+ winISteamMatchmakingServers.c \
+ winISteamRemoteStorage.c \
+ winISteamUserStats.c \
+ winISteamApps.c \
+ winISteamNetworking.c \
+ winISteamScreenshots.c \
+ winISteamMusic.c \
+ winISteamMusicRemote.c \
+ winISteamHTTP.c \
+ winISteamController.c \
+ winISteamUGC.c \
+ winISteamAppList.c \
+ winISteamHTMLSurface.c \
+ winISteamInventory.c \
+ winISteamVideo.c \
+ winISteamAppTicket.c \
+ winISteamGameServer.c \
+ winISteamGameServerStats.c \
+ winISteamGameCoordinator.c \
+ winISteamParentalSettings.c \
+ winISteamUnifiedMessages.c \
+ winISteamMasterServerUpdater.c \
+
+CPP_SRCS = \
+ cppISteamClient_SteamClient017.cpp \
+ cppISteamUser_SteamUser019.cpp \
+ cb_converters_142.cpp \
+ cppISteamFriends_SteamFriends015.cpp \
+ cppISteamUtils_SteamUtils009.cpp \
+ cppISteamMatchmaking_SteamMatchMaking009.cpp \
+ cppISteamMatchmakingServers_SteamMatchMakingServers002.cpp \
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014.cpp \
+ cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011.cpp \
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION008.cpp \
+ cppISteamNetworking_SteamNetworking005.cpp \
+ cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003.cpp \
+ cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001.cpp \
+ cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001.cpp \
+ cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002.cpp \
+ cppISteamController_SteamController006.cpp \
+ cppISteamUGC_STEAMUGC_INTERFACE_VERSION010.cpp \
+ cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001.cpp \
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004.cpp \
+ cppISteamInventory_STEAMINVENTORY_INTERFACE_V002.cpp \
+ cppISteamVideo_STEAMVIDEO_INTERFACE_V002.cpp \
+ cppISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001.cpp \
+ cppISteamGameServer_SteamGameServer012.cpp \
+ cppISteamGameServerStats_SteamGameServerStats001.cpp \
+ cppISteamGameCoordinator_SteamGameCoordinator001.cpp \
+ cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001.cpp \
+ cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001.cpp \
+ cb_converters_141.cpp \
+ cppISteamController_SteamController005.cpp \
+ cb_converters_140.cpp \
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003.cpp \
+ cppISteamUtils_SteamUtils008.cpp \
+ cppISteamUGC_STEAMUGC_INTERFACE_VERSION009.cpp \
+ cppISteamInventory_STEAMINVENTORY_INTERFACE_V001.cpp \
+ cppISteamVideo_STEAMVIDEO_INTERFACE_V001.cpp \
+ cppISteamController_SteamController004.cpp \
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013.cpp \
+ cb_converters_137.cpp \
+ cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002.cpp \
+ cppISteamController_SteamController003.cpp \
+ cppISteamUGC_STEAMUGC_INTERFACE_VERSION008.cpp \
+ cppISteamUser_SteamUser018.cpp \
+ cppISteamUtils_SteamUtils007.cpp \
+ cb_converters_136.cpp \
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION007.cpp \
+ cppISteamUGC_STEAMUGC_INTERFACE_VERSION007.cpp \
+ cb_converters_134.cpp \
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012.cpp \
+ cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION.cpp \
+ cppISteamUGC_STEAMUGC_INTERFACE_VERSION005.cpp \
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002.cpp \
+ cb_converters_132.cpp \
+ cppISteamUGC_STEAMUGC_INTERFACE_VERSION003.cpp \
+ cppISteamClient_SteamClient016.cpp \
+ cppISteamUser_SteamUser017.cpp \
+ cppISteamFriends_SteamFriends014.cpp \
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION006.cpp \
+ cppISteamClient_SteamClient015.cpp \
+ cppISteamUGC_STEAMUGC_INTERFACE_VERSION002.cpp \
+ cppISteamClient_SteamClient014.cpp \
+ cppISteamClient_SteamClient012.cpp \
+ cppISteamUtils_SteamUtils006.cpp \
+ cb_converters_128.cpp \
+ cppISteamUGC_STEAMUGC_INTERFACE_VERSION001.cpp \
+ cppISteamGameServer_SteamGameServer011.cpp \
+ cb_converters_125.cpp \
+ cppISteamFriends_SteamFriends013.cpp \
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011.cpp \
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION005.cpp \
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010.cpp \
+ cb_converters_124.cpp \
+ cppISteamUser_SteamUser016.cpp \
+ cppISteamUtils_SteamUtils005.cpp \
+ cb_converters_122.cpp \
+ cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001.cpp \
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008.cpp \
+ cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001.cpp \
+ cppISteamFriends_SteamFriends011.cpp \
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006.cpp \
+ cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010.cpp \
+ cb_converters_118.cpp \
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005.cpp \
+ cb_converters_117.cpp \
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION004.cpp \
+ cppISteamClient_SteamClient011.cpp \
+ cppISteamFriends_SteamFriends009.cpp \
+ cb_converters_116.cpp \
+ cppISteamMatchmaking_SteamMatchMaking008.cpp \
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004.cpp \
+ cppISteamGameServer_SteamGameServer010.cpp \
+ cppISteamMasterServerUpdater_SteamMasterServerUpdater001.cpp \
+ cppISteamClient_SteamClient010.cpp \
+ cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009.cpp \
+ cppISteamUser_SteamUser014.cpp \
+ cppISteamFriends_SteamFriends008.cpp \
+ cb_converters_112.cpp \
+ cppISteamNetworking_SteamNetworking004.cpp \
+ cppISteamClient_SteamClient009.cpp \
+ cppISteamFriends_SteamFriends007.cpp \
+ cb_converters_111.cpp \
+ cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007.cpp \
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION003.cpp \
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002.cpp \
+ cppISteamUser_SteamUser013.cpp \
+ cppISteamFriends_SteamFriends006.cpp \
+ cppISteamNetworking_SteamNetworking003.cpp \
+ cppISteamFriends_SteamFriends005.cpp \
+ cppISteamClient_SteamClient008.cpp \
+ cppISteamMatchmaking_SteamMatchMaking007.cpp \
+ cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006.cpp \
+ cppISteamGameServer_SteamGameServer009.cpp \
+ cppISteamUtils_SteamUtils004.cpp \
+ cppISteamUser_SteamUser012.cpp \
+ cppISteamMatchmakingServers_SteamMatchMakingServers001.cpp \
+ cppISteamMatchmaking_SteamMatchMaking006.cpp \
+ cb_converters_104.cpp \
+ cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005.cpp \
+ cppISteamNetworking_SteamNetworking002.cpp \
+ cppISteamGameServer_SteamGameServer008.cpp \
+ cppISteamClient_SteamClient007.cpp \
+ cppISteamUser_SteamUser011.cpp \
+ cppISteamUtils_SteamUtils002.cpp \
+ cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004.cpp \
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION002.cpp \
+ cppISteamFriends_SteamFriends004.cpp \
+ cppISteamMatchmaking_SteamMatchMaking004.cpp \
+ cb_converters_102.cpp \
+ cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003.cpp \
+ cppISteamNetworking_SteamNetworking001.cpp \
+ cppISteamGameServer_SteamGameServer005.cpp \
+ cppISteamUser_SteamUser010.cpp \
+ cppISteamFriends_SteamFriends003.cpp \
+ cppISteamMatchmaking_SteamMatchMaking002.cpp \
+ cppISteamUser_SteamUser009.cpp \
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION001.cpp \
+ cb_converters_100.cpp \
+ cppISteamGameServer_SteamGameServer004.cpp \
diff --git a/lsteamclient/Makefile.in.orig b/lsteamclient/Makefile.in.orig
new file mode 100644
index 00000000..1366b581
--- /dev/null
+++ b/lsteamclient/Makefile.in.orig
@@ -0,0 +1,9 @@
+# Generated from /home/valve/steampfx/drive_c/Program Files/Steam/steamclient.dll by winedump.
+MODULE = lsteamclient.dll
+
+EXTRADEFS = -Wno-unused-variable -Wno-attributes -DSTEAM_API_EXPORTS
+
+
+C_SRCS = \
+ steamclient_main.c \
+ steamclient_wrappers.c \
diff --git a/lsteamclient/cb_converters.dat b/lsteamclient/cb_converters.dat
new file mode 100644
index 00000000..6bfd3b94
--- /dev/null
+++ b/lsteamclient/cb_converters.dat
@@ -0,0 +1,220 @@
+case 0x00010065: win_msg->m_cubParam = sizeof(struct winSteamServersConnected_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamServersConnected_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00080066: win_msg->m_cubParam = sizeof(struct winSteamServerConnectFailure_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamServerConnectFailure_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00040067: win_msg->m_cubParam = sizeof(struct winSteamServersDisconnected_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamServersDisconnected_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00100071: win_msg->m_cubParam = sizeof(struct winClientGameServerDeny_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_ClientGameServerDeny_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00010075: win_msg->m_cubParam = sizeof(struct winIPCFailure_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_IPCFailure_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0001007d: win_msg->m_cubParam = sizeof(struct winLicensesUpdated_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LicensesUpdated_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0014008f: win_msg->m_cubParam = sizeof(struct winValidateAuthTicketResponse_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_ValidateAuthTicketResponse_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00100098: win_msg->m_cubParam = sizeof(struct winMicroTxnAuthorizationResponse_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_MicroTxnAuthorizationResponse_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0004009a: win_msg->m_cubParam = sizeof(struct winEncryptedAppTicketResponse_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_EncryptedAppTicketResponse_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000800a3: win_msg->m_cubParam = sizeof(struct winGetAuthSessionTicketResponse_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GetAuthSessionTicketResponse_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x010000a4: win_msg->m_cubParam = sizeof(struct winGameWebCallback_t_256); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GameWebCallback_t_256(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x020000a5: win_msg->m_cubParam = sizeof(struct winStoreAuthURLResponse_t_512); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_StoreAuthURLResponse_t_512(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0130: win_msg->m_cubParam = sizeof(struct winPersonaStateChange_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_PersonaStateChange_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0001014b: win_msg->m_cubParam = sizeof(struct winGameOverlayActivated_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GameOverlayActivated_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0080014c: win_msg->m_cubParam = sizeof(struct winGameServerChangeRequested_t_128); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GameServerChangeRequested_t_128(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0010014d: win_msg->m_cubParam = sizeof(struct winGameLobbyJoinRequested_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GameLobbyJoinRequested_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0014014e: win_msg->m_cubParam = sizeof(struct winAvatarImageLoaded_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_AvatarImageLoaded_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0010014f: win_msg->m_cubParam = sizeof(struct winClanOfficerListResponse_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_ClanOfficerListResponse_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0150: win_msg->m_cubParam = sizeof(struct winFriendRichPresenceUpdate_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_FriendRichPresenceUpdate_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x01080151: win_msg->m_cubParam = sizeof(struct winGameRichPresenceJoinRequested_t_264); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GameRichPresenceJoinRequested_t_264(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00140152: win_msg->m_cubParam = sizeof(struct winGameConnectedClanChatMsg_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GameConnectedClanChatMsg_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00100153: win_msg->m_cubParam = sizeof(struct winGameConnectedChatJoin_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GameConnectedChatJoin_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00120154: win_msg->m_cubParam = sizeof(struct winGameConnectedChatLeave_t_18); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GameConnectedChatLeave_t_18(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00010155: win_msg->m_cubParam = sizeof(struct winDownloadClanActivityCountsResult_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_DownloadClanActivityCountsResult_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0156: win_msg->m_cubParam = sizeof(struct winJoinClanChatRoomCompletionResult_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_JoinClanChatRoomCompletionResult_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0157: win_msg->m_cubParam = sizeof(struct winGameConnectedFriendChatMsg_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GameConnectedFriendChatMsg_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00100158: win_msg->m_cubParam = sizeof(struct winFriendsGetFollowerCount_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_FriendsGetFollowerCount_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00100159: win_msg->m_cubParam = sizeof(struct winFriendsIsFollowing_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_FriendsIsFollowing_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x019c015a: win_msg->m_cubParam = sizeof(struct winFriendsEnumerateFollowingList_t_412); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_FriendsEnumerateFollowingList_t_412(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0008015b: win_msg->m_cubParam = sizeof(struct winSetPersonaNameResponse_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SetPersonaNameResponse_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000102bd: win_msg->m_cubParam = sizeof(struct winIPCountry_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_IPCountry_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000102be: win_msg->m_cubParam = sizeof(struct winLowBatteryPower_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LowBatteryPower_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001002bf: win_msg->m_cubParam = sizeof(struct winSteamAPICallCompleted_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamAPICallCompleted_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000102c0: win_msg->m_cubParam = sizeof(struct winSteamShutdown_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamShutdown_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000402c1: win_msg->m_cubParam = sizeof(struct winCheckFileSignature_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_CheckFileSignature_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000802ca: win_msg->m_cubParam = sizeof(struct winGamepadTextInputDismissed_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GamepadTextInputDismissed_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001c01f6: win_msg->m_cubParam = sizeof(struct winFavoritesListChanged_t_28); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_FavoritesListChanged_t_28(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001801f7: win_msg->m_cubParam = sizeof(struct winLobbyInvite_t_24); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LobbyInvite_t_24(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001401f8: win_msg->m_cubParam = sizeof(struct winLobbyEnter_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LobbyEnter_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001401f9: win_msg->m_cubParam = sizeof(struct winLobbyDataUpdate_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LobbyDataUpdate_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001c01fa: win_msg->m_cubParam = sizeof(struct winLobbyChatUpdate_t_28); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LobbyChatUpdate_t_28(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001801fb: win_msg->m_cubParam = sizeof(struct winLobbyChatMsg_t_24); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LobbyChatMsg_t_24(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001801fd: win_msg->m_cubParam = sizeof(struct winLobbyGameCreated_t_24); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LobbyGameCreated_t_24(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000401fe: win_msg->m_cubParam = sizeof(struct winLobbyMatchList_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LobbyMatchList_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00140200: win_msg->m_cubParam = sizeof(struct winLobbyKicked_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LobbyKicked_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0201: win_msg->m_cubParam = sizeof(struct winLobbyCreated_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LobbyCreated_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00090203: win_msg->m_cubParam = sizeof(struct winPSNGameBootInviteResult_t_9); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_PSNGameBootInviteResult_t_9(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00040204: win_msg->m_cubParam = sizeof(struct winFavoritesListAccountsUpdated_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_FavoritesListAccountsUpdated_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0515: win_msg->m_cubParam = sizeof(struct winRemoteStorageAppSyncedClient_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageAppSyncedClient_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0516: win_msg->m_cubParam = sizeof(struct winRemoteStorageAppSyncedServer_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageAppSyncedServer_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x01180517: win_msg->m_cubParam = sizeof(struct winRemoteStorageAppSyncProgress_t_280); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageAppSyncProgress_t_280(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00080519: win_msg->m_cubParam = sizeof(struct winRemoteStorageAppSyncStatusCheck_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageAppSyncStatusCheck_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0110051b: win_msg->m_cubParam = sizeof(struct winRemoteStorageFileShareResult_t_272); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageFileShareResult_t_272(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0010051d: win_msg->m_cubParam = sizeof(struct winRemoteStoragePublishFileResult_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStoragePublishFileResult_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c051f: win_msg->m_cubParam = sizeof(struct winRemoteStorageDeletePublishedFileResult_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageDeletePublishedFileResult_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x019c0520: win_msg->m_cubParam = sizeof(struct winRemoteStorageEnumerateUserPublishedFilesResult_t_412); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageEnumerateUserPublishedFilesResult_t_412(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0521: win_msg->m_cubParam = sizeof(struct winRemoteStorageSubscribePublishedFileResult_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageSubscribePublishedFileResult_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x02640522: win_msg->m_cubParam = sizeof(struct winRemoteStorageEnumerateUserSubscribedFilesResult_t_612); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageEnumerateUserSubscribedFilesResult_t_612(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0523: win_msg->m_cubParam = sizeof(struct winRemoteStorageUnsubscribePublishedFileResult_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageUnsubscribePublishedFileResult_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00100524: win_msg->m_cubParam = sizeof(struct winRemoteStorageUpdatePublishedFileResult_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageUpdatePublishedFileResult_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x01200525: win_msg->m_cubParam = sizeof(struct winRemoteStorageDownloadUGCResult_t_288); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageDownloadUGCResult_t_288(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x26140526: win_msg->m_cubParam = sizeof(struct winRemoteStorageGetPublishedFileDetailsResult_t_9748); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageGetPublishedFileDetailsResult_t_9748(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x026c0527: win_msg->m_cubParam = sizeof(struct winRemoteStorageEnumerateWorkshopFilesResult_t_620); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageEnumerateWorkshopFilesResult_t_620(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001c0528: win_msg->m_cubParam = sizeof(struct winRemoteStorageGetPublishedItemVoteDetailsResult_t_28); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageGetPublishedItemVoteDetailsResult_t_28(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0529: win_msg->m_cubParam = sizeof(struct winRemoteStoragePublishedFileSubscribed_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStoragePublishedFileSubscribed_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c052a: win_msg->m_cubParam = sizeof(struct winRemoteStoragePublishedFileUnsubscribed_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStoragePublishedFileUnsubscribed_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c052b: win_msg->m_cubParam = sizeof(struct winRemoteStoragePublishedFileDeleted_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStoragePublishedFileDeleted_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c052c: win_msg->m_cubParam = sizeof(struct winRemoteStorageUpdateUserPublishedItemVoteResult_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageUpdateUserPublishedItemVoteResult_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0010052d: win_msg->m_cubParam = sizeof(struct winRemoteStorageUserVoteDetails_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageUserVoteDetails_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x019c052e: win_msg->m_cubParam = sizeof(struct winRemoteStorageEnumerateUserSharedWorkshopFilesResult_t_412); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageEnumerateUserSharedWorkshopFilesResult_t_412(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0010052f: win_msg->m_cubParam = sizeof(struct winRemoteStorageSetUserPublishedFileActionResult_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageSetUserPublishedFileActionResult_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x02680530: win_msg->m_cubParam = sizeof(struct winRemoteStorageEnumeratePublishedFilesByUserActionResult_t_616); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageEnumeratePublishedFilesByUserActionResult_t_616(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0531: win_msg->m_cubParam = sizeof(struct winRemoteStoragePublishFileProgress_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStoragePublishFileProgress_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00140532: win_msg->m_cubParam = sizeof(struct winRemoteStoragePublishedFileUpdated_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStoragePublishedFileUpdated_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00040533: win_msg->m_cubParam = sizeof(struct winRemoteStorageFileWriteAsyncComplete_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageFileWriteAsyncComplete_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00140534: win_msg->m_cubParam = sizeof(struct winRemoteStorageFileReadAsyncComplete_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageFileReadAsyncComplete_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0014044d: win_msg->m_cubParam = sizeof(struct winUserStatsReceived_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_UserStatsReceived_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c044e: win_msg->m_cubParam = sizeof(struct winUserStatsStored_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_UserStatsStored_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0094044f: win_msg->m_cubParam = sizeof(struct winUserAchievementStored_t_148); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_UserAchievementStored_t_148(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0450: win_msg->m_cubParam = sizeof(struct winLeaderboardFindResult_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LeaderboardFindResult_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00140451: win_msg->m_cubParam = sizeof(struct winLeaderboardScoresDownloaded_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LeaderboardScoresDownloaded_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001c0452: win_msg->m_cubParam = sizeof(struct winLeaderboardScoreUploaded_t_28); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LeaderboardScoreUploaded_t_28(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00080453: win_msg->m_cubParam = sizeof(struct winNumberOfCurrentPlayers_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_NumberOfCurrentPlayers_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00080454: win_msg->m_cubParam = sizeof(struct winUserStatsUnloaded_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_UserStatsUnloaded_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00900455: win_msg->m_cubParam = sizeof(struct winUserAchievementIconFetched_t_144); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_UserAchievementIconFetched_t_144(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0456: win_msg->m_cubParam = sizeof(struct winGlobalAchievementPercentagesReady_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GlobalAchievementPercentagesReady_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0457: win_msg->m_cubParam = sizeof(struct winLeaderboardUGCSet_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LeaderboardUGCSet_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00140458: win_msg->m_cubParam = sizeof(struct winPS3TrophiesInstalled_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_PS3TrophiesInstalled_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0458: win_msg->m_cubParam = sizeof(struct winGlobalStatsReceived_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GlobalStatsReceived_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000403ed: win_msg->m_cubParam = sizeof(struct winDlcInstalled_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_DlcInstalled_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000803f0: win_msg->m_cubParam = sizeof(struct winRegisterActivationCodeResponse_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RegisterActivationCodeResponse_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000103f6: win_msg->m_cubParam = sizeof(struct winNewLaunchQueryParameters_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_NewLaunchQueryParameters_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00fc03fd: win_msg->m_cubParam = sizeof(struct winAppProofOfPurchaseKeyResponse_t_252); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_AppProofOfPurchaseKeyResponse_t_252(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x002403ff: win_msg->m_cubParam = sizeof(struct winFileDetailsResult_t_36); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_FileDetailsResult_t_36(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000804b2: win_msg->m_cubParam = sizeof(struct winP2PSessionRequest_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_P2PSessionRequest_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000904b3: win_msg->m_cubParam = sizeof(struct winP2PSessionConnectFail_t_9); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_P2PSessionConnectFail_t_9(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001404b1: win_msg->m_cubParam = sizeof(struct winSocketStatusCallback_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SocketStatusCallback_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000808fd: win_msg->m_cubParam = sizeof(struct winScreenshotReady_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_ScreenshotReady_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000108fe: win_msg->m_cubParam = sizeof(struct winScreenshotRequested_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_ScreenshotRequested_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00010fa1: win_msg->m_cubParam = sizeof(struct winPlaybackStatusHasChanged_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_PlaybackStatusHasChanged_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00040fa2: win_msg->m_cubParam = sizeof(struct winVolumeHasChanged_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_VolumeHasChanged_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00011005: win_msg->m_cubParam = sizeof(struct winMusicPlayerRemoteWillActivate_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_MusicPlayerRemoteWillActivate_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00011006: win_msg->m_cubParam = sizeof(struct winMusicPlayerRemoteWillDeactivate_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_MusicPlayerRemoteWillDeactivate_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00011007: win_msg->m_cubParam = sizeof(struct winMusicPlayerRemoteToFront_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_MusicPlayerRemoteToFront_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00011008: win_msg->m_cubParam = sizeof(struct winMusicPlayerWillQuit_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_MusicPlayerWillQuit_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00011009: win_msg->m_cubParam = sizeof(struct winMusicPlayerWantsPlay_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_MusicPlayerWantsPlay_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0001100a: win_msg->m_cubParam = sizeof(struct winMusicPlayerWantsPause_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_MusicPlayerWantsPause_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0001100b: win_msg->m_cubParam = sizeof(struct winMusicPlayerWantsPlayPrevious_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_MusicPlayerWantsPlayPrevious_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0001100c: win_msg->m_cubParam = sizeof(struct winMusicPlayerWantsPlayNext_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_MusicPlayerWantsPlayNext_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0001100d: win_msg->m_cubParam = sizeof(struct winMusicPlayerWantsShuffled_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_MusicPlayerWantsShuffled_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0001100e: win_msg->m_cubParam = sizeof(struct winMusicPlayerWantsLooped_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_MusicPlayerWantsLooped_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00040fab: win_msg->m_cubParam = sizeof(struct winMusicPlayerWantsVolume_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_MusicPlayerWantsVolume_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00040fac: win_msg->m_cubParam = sizeof(struct winMusicPlayerSelectsQueueEntry_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_MusicPlayerSelectsQueueEntry_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00040fad: win_msg->m_cubParam = sizeof(struct winMusicPlayerSelectsPlaylistEntry_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_MusicPlayerSelectsPlaylistEntry_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00041012: win_msg->m_cubParam = sizeof(struct winMusicPlayerWantsPlayingRepeatStatus_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_MusicPlayerWantsPlayingRepeatStatus_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00180835: win_msg->m_cubParam = sizeof(struct winHTTPRequestCompleted_t_24); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTTPRequestCompleted_t_24(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0836: win_msg->m_cubParam = sizeof(struct winHTTPRequestHeadersReceived_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTTPRequestHeadersReceived_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00140837: win_msg->m_cubParam = sizeof(struct winHTTPRequestDataReceived_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTTPRequestDataReceived_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00180d49: win_msg->m_cubParam = sizeof(struct winSteamUGCQueryCompleted_t_24); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamUGCQueryCompleted_t_24(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x26280d4a: win_msg->m_cubParam = sizeof(struct winSteamUGCRequestUGCDetailsResult_t_9768); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamUGCRequestUGCDetailsResult_t_9768(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00100d4b: win_msg->m_cubParam = sizeof(struct winCreateItemResult_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_CreateItemResult_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00100d4c: win_msg->m_cubParam = sizeof(struct winSubmitItemUpdateResult_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SubmitItemUpdateResult_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0d4d: win_msg->m_cubParam = sizeof(struct winItemInstalled_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_ItemInstalled_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00100d4e: win_msg->m_cubParam = sizeof(struct winDownloadItemResult_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_DownloadItemResult_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00100d4f: win_msg->m_cubParam = sizeof(struct winUserFavoriteItemsListChanged_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_UserFavoriteItemsListChanged_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00100d50: win_msg->m_cubParam = sizeof(struct winSetUserItemVoteResult_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SetUserItemVoteResult_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00100d51: win_msg->m_cubParam = sizeof(struct winGetUserItemVoteResult_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GetUserItemVoteResult_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00040d52: win_msg->m_cubParam = sizeof(struct winStartPlaytimeTrackingResult_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_StartPlaytimeTrackingResult_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00040d53: win_msg->m_cubParam = sizeof(struct winStopPlaytimeTrackingResult_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_StopPlaytimeTrackingResult_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00140d54: win_msg->m_cubParam = sizeof(struct winAddUGCDependencyResult_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_AddUGCDependencyResult_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00140d55: win_msg->m_cubParam = sizeof(struct winRemoveUGCDependencyResult_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoveUGCDependencyResult_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00100d56: win_msg->m_cubParam = sizeof(struct winAddAppDependencyResult_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_AddAppDependencyResult_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00100d57: win_msg->m_cubParam = sizeof(struct winRemoveAppDependencyResult_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoveAppDependencyResult_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00940d58: win_msg->m_cubParam = sizeof(struct winGetAppDependenciesResult_t_148); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GetAppDependenciesResult_t_148(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0d59: win_msg->m_cubParam = sizeof(struct winDeleteItemResult_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_DeleteItemResult_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00040f3d: win_msg->m_cubParam = sizeof(struct winSteamAppInstalled_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamAppInstalled_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00040f3e: win_msg->m_cubParam = sizeof(struct winSteamAppUninstalled_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamAppUninstalled_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00041195: win_msg->m_cubParam = sizeof(struct winHTML_BrowserReady_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_BrowserReady_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00301196: win_msg->m_cubParam = sizeof(struct winHTML_NeedsPaint_t_48); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_NeedsPaint_t_48(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00141197: win_msg->m_cubParam = sizeof(struct winHTML_StartRequest_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_StartRequest_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00041198: win_msg->m_cubParam = sizeof(struct winHTML_CloseBrowser_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_CloseBrowser_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00181199: win_msg->m_cubParam = sizeof(struct winHTML_URLChanged_t_24); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_URLChanged_t_24(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c119a: win_msg->m_cubParam = sizeof(struct winHTML_FinishedRequest_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_FinishedRequest_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0008119b: win_msg->m_cubParam = sizeof(struct winHTML_OpenLinkInNewTab_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_OpenLinkInNewTab_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0008119c: win_msg->m_cubParam = sizeof(struct winHTML_ChangedTitle_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_ChangedTitle_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c119d: win_msg->m_cubParam = sizeof(struct winHTML_SearchResults_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_SearchResults_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0008119e: win_msg->m_cubParam = sizeof(struct winHTML_CanGoBackAndForward_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_CanGoBackAndForward_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0018119f: win_msg->m_cubParam = sizeof(struct winHTML_HorizontalScroll_t_24); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_HorizontalScroll_t_24(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001811a0: win_msg->m_cubParam = sizeof(struct winHTML_VerticalScroll_t_24); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_VerticalScroll_t_24(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001411a1: win_msg->m_cubParam = sizeof(struct winHTML_LinkAtPosition_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_LinkAtPosition_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000811a2: win_msg->m_cubParam = sizeof(struct winHTML_JSAlert_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_JSAlert_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000811a3: win_msg->m_cubParam = sizeof(struct winHTML_JSConfirm_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_JSConfirm_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c11a4: win_msg->m_cubParam = sizeof(struct winHTML_FileOpenDialog_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_FileOpenDialog_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001c11a9: win_msg->m_cubParam = sizeof(struct winHTML_NewWindow_t_28); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_NewWindow_t_28(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000811aa: win_msg->m_cubParam = sizeof(struct winHTML_SetCursor_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_SetCursor_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000811ab: win_msg->m_cubParam = sizeof(struct winHTML_StatusText_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_StatusText_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000811ac: win_msg->m_cubParam = sizeof(struct winHTML_ShowToolTip_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_ShowToolTip_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000811ad: win_msg->m_cubParam = sizeof(struct winHTML_UpdateToolTip_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_UpdateToolTip_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000411ae: win_msg->m_cubParam = sizeof(struct winHTML_HideToolTip_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_HideToolTip_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000811af: win_msg->m_cubParam = sizeof(struct winHTML_BrowserRestarted_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_BrowserRestarted_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0008125c: win_msg->m_cubParam = sizeof(struct winSteamInventoryResultReady_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamInventoryResultReady_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0004125d: win_msg->m_cubParam = sizeof(struct winSteamInventoryFullUpdate_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamInventoryFullUpdate_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0001125e: win_msg->m_cubParam = sizeof(struct winSteamInventoryDefinitionUpdate_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamInventoryDefinitionUpdate_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0014125f: win_msg->m_cubParam = sizeof(struct winSteamInventoryEligiblePromoItemDefIDs_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamInventoryEligiblePromoItemDefIDs_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00141260: win_msg->m_cubParam = sizeof(struct winSteamInventoryStartPurchaseResult_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamInventoryStartPurchaseResult_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00081261: win_msg->m_cubParam = sizeof(struct winSteamInventoryRequestPricesResult_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamInventoryRequestPricesResult_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000111fc: win_msg->m_cubParam = sizeof(struct winBroadcastUploadStart_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_BroadcastUploadStart_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000411fd: win_msg->m_cubParam = sizeof(struct winBroadcastUploadStop_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_BroadcastUploadStop_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x01081203: win_msg->m_cubParam = sizeof(struct winGetVideoURLResult_t_264); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GetVideoURLResult_t_264(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00081210: win_msg->m_cubParam = sizeof(struct winGetOPFSettingsResult_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GetOPFSettingsResult_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00011389: win_msg->m_cubParam = sizeof(struct winSteamParentalSettingsChanged_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamParentalSettingsChanged_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001000c9: win_msg->m_cubParam = sizeof(struct winGSClientApprove_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GSClientApprove_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x008c00ca: win_msg->m_cubParam = sizeof(struct winGSClientDeny_t_140); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GSClientDeny_t_140(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c00cb: win_msg->m_cubParam = sizeof(struct winGSClientKick_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GSClientKick_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x008c00ce: win_msg->m_cubParam = sizeof(struct winGSClientAchievementStatus_t_140); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GSClientAchievementStatus_t_140(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00010073: win_msg->m_cubParam = sizeof(struct winGSPolicyResponse_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GSPolicyResponse_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001000cf: win_msg->m_cubParam = sizeof(struct winGSGameplayStats_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GSGameplayStats_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001200d0: win_msg->m_cubParam = sizeof(struct winGSClientGroupStatus_t_18); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GSClientGroupStatus_t_18(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x002000d1: win_msg->m_cubParam = sizeof(struct winGSReputation_t_32); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GSReputation_t_32(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000400d2: win_msg->m_cubParam = sizeof(struct winAssociateWithClanResult_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_AssociateWithClanResult_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001800d3: win_msg->m_cubParam = sizeof(struct winComputeNewPlayerCompatibilityResult_t_24); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_ComputeNewPlayerCompatibilityResult_t_24(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0708: win_msg->m_cubParam = sizeof(struct winGSStatsReceived_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GSStatsReceived_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0709: win_msg->m_cubParam = sizeof(struct winGSStatsStored_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GSStatsStored_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000406a5: win_msg->m_cubParam = sizeof(struct winGCMessageAvailable_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GCMessageAvailable_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000106a6: win_msg->m_cubParam = sizeof(struct winGCMessageFailed_t_1); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GCMessageFailed_t_1(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001809c5: win_msg->m_cubParam = sizeof(struct winSteamUnifiedMessagesSendMethodResult_t_24); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamUnifiedMessagesSendMethodResult_t_24(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00080d4c: win_msg->m_cubParam = sizeof(struct winSubmitItemUpdateResult_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SubmitItemUpdateResult_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0008051a: win_msg->m_cubParam = sizeof(struct winRemoteStorageConflictResolution_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageConflictResolution_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000802bf: win_msg->m_cubParam = sizeof(struct winSteamAPICallCompleted_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamAPICallCompleted_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x004803f5: win_msg->m_cubParam = sizeof(struct winAppProofOfPurchaseKeyResponse_t_72); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_AppProofOfPurchaseKeyResponse_t_72(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00040066: win_msg->m_cubParam = sizeof(struct winSteamServerConnectFailure_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamServerConnectFailure_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00140835: win_msg->m_cubParam = sizeof(struct winHTTPRequestCompleted_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTTPRequestCompleted_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001011a5: win_msg->m_cubParam = sizeof(struct winHTML_ComboNeedsPaint_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_ComboNeedsPaint_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000411a6: win_msg->m_cubParam = sizeof(struct winHTML_ShowPopup_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_ShowPopup_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000411a7: win_msg->m_cubParam = sizeof(struct winHTML_HidePopup_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_HidePopup_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001411a8: win_msg->m_cubParam = sizeof(struct winHTML_SizePopup_t_20); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_SizePopup_t_20(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001811a9: win_msg->m_cubParam = sizeof(struct winHTML_NewWindow_t_24); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_HTML_NewWindow_t_24(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001801f6: win_msg->m_cubParam = sizeof(struct winFavoritesListChanged_t_24); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_FavoritesListChanged_t_24(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c051b: win_msg->m_cubParam = sizeof(struct winRemoteStorageFileShareResult_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageFileShareResult_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x26200d4a: win_msg->m_cubParam = sizeof(struct winSteamUGCRequestUGCDetailsResult_t_9760); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_SteamUGCRequestUGCDetailsResult_t_9760(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c008f: win_msg->m_cubParam = sizeof(struct winValidateAuthTicketResponse_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_ValidateAuthTicketResponse_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x26100526: win_msg->m_cubParam = sizeof(struct winRemoteStorageGetPublishedFileDetailsResult_t_9744); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageGetPublishedFileDetailsResult_t_9744(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000800c9: win_msg->m_cubParam = sizeof(struct winGSClientApprove_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_GSClientApprove_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c051d: win_msg->m_cubParam = sizeof(struct winRemoteStoragePublishFileResult_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStoragePublishFileResult_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c0524: win_msg->m_cubParam = sizeof(struct winRemoteStorageUpdatePublishedFileResult_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageUpdatePublishedFileResult_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x02640527: win_msg->m_cubParam = sizeof(struct winRemoteStorageEnumerateWorkshopFilesResult_t_612); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageEnumerateWorkshopFilesResult_t_612(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00040521: win_msg->m_cubParam = sizeof(struct winRemoteStorageSubscribePublishedFileResult_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageSubscribePublishedFileResult_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00040523: win_msg->m_cubParam = sizeof(struct winRemoteStorageUnsubscribePublishedFileResult_t_4); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageUnsubscribePublishedFileResult_t_4(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x250c0526: win_msg->m_cubParam = sizeof(struct winRemoteStorageGetPublishedFileDetailsResult_t_9484); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageGetPublishedFileDetailsResult_t_9484(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001000d3: win_msg->m_cubParam = sizeof(struct winComputeNewPlayerCompatibilityResult_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_ComputeNewPlayerCompatibilityResult_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x06c4051e: win_msg->m_cubParam = sizeof(struct winRemoteStorageGetPublishedFileDetailsResult_t_1732); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageGetPublishedFileDetailsResult_t_1732(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00080152: win_msg->m_cubParam = sizeof(struct winNameHistoryResponse_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_NameHistoryResponse_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x0020051c: win_msg->m_cubParam = sizeof(struct winRemoteStorageDownloadUGCResult_t_32); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RemoteStorageDownloadUGCResult_t_32(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001001f7: win_msg->m_cubParam = sizeof(struct winLobbyInvite_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LobbyInvite_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x001001f9: win_msg->m_cubParam = sizeof(struct winLobbyDataUpdate_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LobbyDataUpdate_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000801ff: win_msg->m_cubParam = sizeof(struct winLobbyClosing_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LobbyClosing_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00100200: win_msg->m_cubParam = sizeof(struct winLobbyKicked_t_16); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_LobbyKicked_t_16(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x00180202: win_msg->m_cubParam = sizeof(struct winRequestFriendsLobbiesResponse_t_24); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_RequestFriendsLobbiesResponse_t_24(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000c044d: win_msg->m_cubParam = sizeof(struct winUserStatsReceived_t_12); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_UserStatsReceived_t_12(lin_msg.m_pubParam, win_msg->m_pubParam); break;
+case 0x000803e9: win_msg->m_cubParam = sizeof(struct winAppDataChanged_t_8); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_AppDataChanged_t_8(lin_msg.m_pubParam, win_msg->m_pubParam); break;
diff --git a/lsteamclient/cb_converters.h b/lsteamclient/cb_converters.h
new file mode 100644
index 00000000..49d3a0b3
--- /dev/null
+++ b/lsteamclient/cb_converters.h
@@ -0,0 +1,1283 @@
+struct winSteamServersConnected_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_SteamServersConnected_t_1(void *l, void *w);
+struct winSteamServerConnectFailure_t_8 {
+ EResult m_eResult;
+ bool m_bStillRetrying;
+} __attribute__ ((ms_struct));
+extern void cb_SteamServerConnectFailure_t_8(void *l, void *w);
+struct winSteamServersDisconnected_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_SteamServersDisconnected_t_4(void *l, void *w);
+struct winClientGameServerDeny_t_16 {
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+} __attribute__ ((ms_struct));
+extern void cb_ClientGameServerDeny_t_16(void *l, void *w);
+struct winIPCFailure_t_1 {
+ uint8 m_eFailureType;
+} __attribute__ ((ms_struct));
+extern void cb_IPCFailure_t_1(void *l, void *w);
+struct winLicensesUpdated_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_LicensesUpdated_t_1(void *l, void *w);
+struct winValidateAuthTicketResponse_t_20 {
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID;
+} __attribute__ ((ms_struct));
+extern void cb_ValidateAuthTicketResponse_t_20(void *l, void *w);
+struct winMicroTxnAuthorizationResponse_t_16 {
+ uint32 m_unAppID;
+ uint64 m_ulOrderID;
+ uint8 m_bAuthorized;
+} __attribute__ ((ms_struct));
+extern void cb_MicroTxnAuthorizationResponse_t_16(void *l, void *w);
+struct winEncryptedAppTicketResponse_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_EncryptedAppTicketResponse_t_4(void *l, void *w);
+struct winGetAuthSessionTicketResponse_t_8 {
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_GetAuthSessionTicketResponse_t_8(void *l, void *w);
+struct winGameWebCallback_t_256 {
+ char m_szURL[256];
+} __attribute__ ((ms_struct));
+extern void cb_GameWebCallback_t_256(void *l, void *w);
+struct winStoreAuthURLResponse_t_512 {
+ char m_szURL[512];
+} __attribute__ ((ms_struct));
+extern void cb_StoreAuthURLResponse_t_512(void *l, void *w);
+struct winPersonaStateChange_t_12 {
+ uint64 m_ulSteamID;
+ int m_nChangeFlags;
+} __attribute__ ((ms_struct));
+extern void cb_PersonaStateChange_t_12(void *l, void *w);
+struct winGameOverlayActivated_t_1 {
+ uint8 m_bActive;
+} __attribute__ ((ms_struct));
+extern void cb_GameOverlayActivated_t_1(void *l, void *w);
+struct winGameServerChangeRequested_t_128 {
+ char m_rgchServer[64];
+ char m_rgchPassword[64];
+} __attribute__ ((ms_struct));
+extern void cb_GameServerChangeRequested_t_128(void *l, void *w);
+struct winGameLobbyJoinRequested_t_16 {
+ CSteamID m_steamIDLobby;
+ CSteamID m_steamIDFriend;
+} __attribute__ ((ms_struct));
+extern void cb_GameLobbyJoinRequested_t_16(void *l, void *w);
+struct winAvatarImageLoaded_t_20 {
+ CSteamID m_steamID;
+ int m_iImage;
+ int m_iWide;
+ int m_iTall;
+} __attribute__ ((ms_struct));
+extern void cb_AvatarImageLoaded_t_20(void *l, void *w);
+struct winClanOfficerListResponse_t_16 {
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+} __attribute__ ((ms_struct));
+extern void cb_ClanOfficerListResponse_t_16(void *l, void *w);
+struct winFriendRichPresenceUpdate_t_12 {
+ CSteamID m_steamIDFriend;
+ AppId_t m_nAppID;
+} __attribute__ ((ms_struct));
+extern void cb_FriendRichPresenceUpdate_t_12(void *l, void *w);
+struct winGameRichPresenceJoinRequested_t_264 {
+ CSteamID m_steamIDFriend;
+ char m_rgchConnect[256];
+} __attribute__ ((ms_struct));
+extern void cb_GameRichPresenceJoinRequested_t_264(void *l, void *w);
+struct winGameConnectedClanChatMsg_t_20 {
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+} __attribute__ ((ms_struct));
+extern void cb_GameConnectedClanChatMsg_t_20(void *l, void *w);
+struct winGameConnectedChatJoin_t_16 {
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+} __attribute__ ((ms_struct));
+extern void cb_GameConnectedChatJoin_t_16(void *l, void *w);
+struct winGameConnectedChatLeave_t_18 {
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked;
+ bool m_bDropped;
+} __attribute__ ((ms_struct));
+extern void cb_GameConnectedChatLeave_t_18(void *l, void *w);
+struct winDownloadClanActivityCountsResult_t_1 {
+ bool m_bSuccess;
+} __attribute__ ((ms_struct));
+extern void cb_DownloadClanActivityCountsResult_t_1(void *l, void *w);
+struct winJoinClanChatRoomCompletionResult_t_12 {
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+} __attribute__ ((ms_struct));
+extern void cb_JoinClanChatRoomCompletionResult_t_12(void *l, void *w);
+struct winGameConnectedFriendChatMsg_t_12 {
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+} __attribute__ ((ms_struct));
+extern void cb_GameConnectedFriendChatMsg_t_12(void *l, void *w);
+struct winFriendsGetFollowerCount_t_16 {
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+} __attribute__ ((ms_struct));
+extern void cb_FriendsGetFollowerCount_t_16(void *l, void *w);
+struct winFriendsIsFollowing_t_16 {
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+} __attribute__ ((ms_struct));
+extern void cb_FriendsIsFollowing_t_16(void *l, void *w);
+struct winFriendsEnumerateFollowingList_t_412 {
+ EResult m_eResult;
+ CSteamID m_rgSteamID[50];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+} __attribute__ ((ms_struct));
+extern void cb_FriendsEnumerateFollowingList_t_412(void *l, void *w);
+struct winSetPersonaNameResponse_t_8 {
+ bool m_bSuccess;
+ bool m_bLocalSuccess;
+ EResult m_result;
+} __attribute__ ((ms_struct));
+extern void cb_SetPersonaNameResponse_t_8(void *l, void *w);
+struct winIPCountry_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_IPCountry_t_1(void *l, void *w);
+struct winLowBatteryPower_t_1 {
+ uint8 m_nMinutesBatteryLeft;
+} __attribute__ ((ms_struct));
+extern void cb_LowBatteryPower_t_1(void *l, void *w);
+struct winSteamAPICallCompleted_t_16 {
+ SteamAPICall_t m_hAsyncCall;
+ int m_iCallback;
+ uint32 m_cubParam;
+} __attribute__ ((ms_struct));
+extern void cb_SteamAPICallCompleted_t_16(void *l, void *w);
+struct winSteamShutdown_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_SteamShutdown_t_1(void *l, void *w);
+struct winCheckFileSignature_t_4 {
+ ECheckFileSignature m_eCheckFileSignature;
+} __attribute__ ((ms_struct));
+extern void cb_CheckFileSignature_t_4(void *l, void *w);
+struct winGamepadTextInputDismissed_t_8 {
+ bool m_bSubmitted;
+ uint32 m_unSubmittedText;
+} __attribute__ ((ms_struct));
+extern void cb_GamepadTextInputDismissed_t_8(void *l, void *w);
+struct winFavoritesListChanged_t_28 {
+ uint32 m_nIP;
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd;
+ AccountID_t m_unAccountId;
+} __attribute__ ((ms_struct));
+extern void cb_FavoritesListChanged_t_28(void *l, void *w);
+struct winLobbyInvite_t_24 {
+ uint64 m_ulSteamIDUser;
+ uint64 m_ulSteamIDLobby;
+ uint64 m_ulGameID;
+} __attribute__ ((ms_struct));
+extern void cb_LobbyInvite_t_24(void *l, void *w);
+struct winLobbyEnter_t_20 {
+ uint64 m_ulSteamIDLobby;
+ uint32 m_rgfChatPermissions;
+ bool m_bLocked;
+ uint32 m_EChatRoomEnterResponse;
+} __attribute__ ((ms_struct));
+extern void cb_LobbyEnter_t_20(void *l, void *w);
+struct winLobbyDataUpdate_t_20 {
+ uint64 m_ulSteamIDLobby;
+ uint64 m_ulSteamIDMember;
+ uint8 m_bSuccess;
+} __attribute__ ((ms_struct));
+extern void cb_LobbyDataUpdate_t_20(void *l, void *w);
+struct winLobbyChatUpdate_t_28 {
+ uint64 m_ulSteamIDLobby;
+ uint64 m_ulSteamIDUserChanged;
+ uint64 m_ulSteamIDMakingChange;
+ uint32 m_rgfChatMemberStateChange;
+} __attribute__ ((ms_struct));
+extern void cb_LobbyChatUpdate_t_28(void *l, void *w);
+struct winLobbyChatMsg_t_24 {
+ uint64 m_ulSteamIDLobby;
+ uint64 m_ulSteamIDUser;
+ uint8 m_eChatEntryType;
+ uint32 m_iChatID;
+} __attribute__ ((ms_struct));
+extern void cb_LobbyChatMsg_t_24(void *l, void *w);
+struct winLobbyGameCreated_t_24 {
+ uint64 m_ulSteamIDLobby;
+ uint64 m_ulSteamIDGameServer;
+ uint32 m_unIP;
+ uint16 m_usPort;
+} __attribute__ ((ms_struct));
+extern void cb_LobbyGameCreated_t_24(void *l, void *w);
+struct winLobbyMatchList_t_4 {
+ uint32 m_nLobbiesMatching;
+} __attribute__ ((ms_struct));
+extern void cb_LobbyMatchList_t_4(void *l, void *w);
+struct winLobbyKicked_t_20 {
+ uint64 m_ulSteamIDLobby;
+ uint64 m_ulSteamIDAdmin;
+ uint8 m_bKickedDueToDisconnect;
+} __attribute__ ((ms_struct));
+extern void cb_LobbyKicked_t_20(void *l, void *w);
+struct winLobbyCreated_t_12 {
+ EResult m_eResult;
+ uint64 m_ulSteamIDLobby;
+} __attribute__ ((ms_struct));
+extern void cb_LobbyCreated_t_12(void *l, void *w);
+struct winPSNGameBootInviteResult_t_9 {
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby;
+} __attribute__ ((ms_struct));
+extern void cb_PSNGameBootInviteResult_t_9(void *l, void *w);
+struct winFavoritesListAccountsUpdated_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_FavoritesListAccountsUpdated_t_4(void *l, void *w);
+struct winRemoteStorageAppSyncedClient_t_12 {
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageAppSyncedClient_t_12(void *l, void *w);
+struct winRemoteStorageAppSyncedServer_t_12 {
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageAppSyncedServer_t_12(void *l, void *w);
+struct winRemoteStorageAppSyncProgress_t_280 {
+ char m_rgchCurrentFile[260];
+ AppId_t m_nAppID;
+ uint32 m_uBytesTransferredThisChunk;
+ double m_dAppPercentComplete;
+ bool m_bUploading;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageAppSyncProgress_t_280(void *l, void *w);
+struct winRemoteStorageAppSyncStatusCheck_t_8 {
+ AppId_t m_nAppID;
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageAppSyncStatusCheck_t_8(void *l, void *w);
+struct winRemoteStorageFileShareResult_t_272 {
+ EResult m_eResult;
+ UGCHandle_t m_hFile;
+ char m_rgchFilename[260];
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageFileShareResult_t_272(void *l, void *w);
+struct winRemoteStoragePublishFileResult_t_16 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStoragePublishFileResult_t_16(void *l, void *w);
+struct winRemoteStorageDeletePublishedFileResult_t_12 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageDeletePublishedFileResult_t_12(void *l, void *w);
+struct winRemoteStorageEnumerateUserPublishedFilesResult_t_412 {
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[50];
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageEnumerateUserPublishedFilesResult_t_412(void *l, void *w);
+struct winRemoteStorageSubscribePublishedFileResult_t_12 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageSubscribePublishedFileResult_t_12(void *l, void *w);
+struct winRemoteStorageEnumerateUserSubscribedFilesResult_t_612 {
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[50];
+ uint32 m_rgRTimeSubscribed[50];
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageEnumerateUserSubscribedFilesResult_t_612(void *l, void *w);
+struct winRemoteStorageUnsubscribePublishedFileResult_t_12 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageUnsubscribePublishedFileResult_t_12(void *l, void *w);
+struct winRemoteStorageUpdatePublishedFileResult_t_16 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageUpdatePublishedFileResult_t_16(void *l, void *w);
+struct winRemoteStorageDownloadUGCResult_t_288 {
+ EResult m_eResult;
+ UGCHandle_t m_hFile;
+ AppId_t m_nAppID;
+ int32 m_nSizeInBytes;
+ char m_pchFileName[260];
+ uint64 m_ulSteamIDOwner;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageDownloadUGCResult_t_288(void *l, void *w);
+struct winRemoteStorageGetPublishedFileDetailsResult_t_9748 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID;
+ AppId_t m_nConsumerAppID;
+ char m_rgchTitle[129];
+ char m_rgchDescription[8000];
+ UGCHandle_t m_hFile;
+ UGCHandle_t m_hPreviewFile;
+ uint64 m_ulSteamIDOwner;
+ uint32 m_rtimeCreated;
+ uint32 m_rtimeUpdated;
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[1025];
+ bool m_bTagsTruncated;
+ char m_pchFileName[260];
+ int32 m_nFileSize;
+ int32 m_nPreviewFileSize;
+ char m_rgchURL[256];
+ EWorkshopFileType m_eFileType;
+ bool m_bAcceptedForUse;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageGetPublishedFileDetailsResult_t_9748(void *l, void *w);
+struct winRemoteStorageEnumerateWorkshopFilesResult_t_620 {
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[50];
+ float m_rgScore[50];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageEnumerateWorkshopFilesResult_t_620(void *l, void *w);
+struct winRemoteStorageGetPublishedItemVoteDetailsResult_t_28 {
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageGetPublishedItemVoteDetailsResult_t_28(void *l, void *w);
+struct winRemoteStoragePublishedFileSubscribed_t_12 {
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nAppID;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStoragePublishedFileSubscribed_t_12(void *l, void *w);
+struct winRemoteStoragePublishedFileUnsubscribed_t_12 {
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nAppID;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStoragePublishedFileUnsubscribed_t_12(void *l, void *w);
+struct winRemoteStoragePublishedFileDeleted_t_12 {
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nAppID;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStoragePublishedFileDeleted_t_12(void *l, void *w);
+struct winRemoteStorageUpdateUserPublishedItemVoteResult_t_12 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageUpdateUserPublishedItemVoteResult_t_12(void *l, void *w);
+struct winRemoteStorageUserVoteDetails_t_16 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ EWorkshopVote m_eVote;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageUserVoteDetails_t_16(void *l, void *w);
+struct winRemoteStorageEnumerateUserSharedWorkshopFilesResult_t_412 {
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[50];
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageEnumerateUserSharedWorkshopFilesResult_t_412(void *l, void *w);
+struct winRemoteStorageSetUserPublishedFileActionResult_t_16 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ EWorkshopFileAction m_eAction;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageSetUserPublishedFileActionResult_t_16(void *l, void *w);
+struct winRemoteStorageEnumeratePublishedFilesByUserActionResult_t_616 {
+ EResult m_eResult;
+ EWorkshopFileAction m_eAction;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[50];
+ uint32 m_rgRTimeUpdated[50];
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageEnumeratePublishedFilesByUserActionResult_t_616(void *l, void *w);
+struct winRemoteStoragePublishFileProgress_t_12 {
+ double m_dPercentFile;
+ bool m_bPreview;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStoragePublishFileProgress_t_12(void *l, void *w);
+struct winRemoteStoragePublishedFileUpdated_t_20 {
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nAppID;
+ uint64 m_ulUnused;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStoragePublishedFileUpdated_t_20(void *l, void *w);
+struct winRemoteStorageFileWriteAsyncComplete_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageFileWriteAsyncComplete_t_4(void *l, void *w);
+struct winRemoteStorageFileReadAsyncComplete_t_20 {
+ SteamAPICall_t m_hFileReadAsync;
+ EResult m_eResult;
+ uint32 m_nOffset;
+ uint32 m_cubRead;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageFileReadAsyncComplete_t_20(void *l, void *w);
+struct winUserStatsReceived_t_20 {
+ uint64 m_nGameID;
+ EResult m_eResult;
+ CSteamID m_steamIDUser;
+} __attribute__ ((ms_struct));
+extern void cb_UserStatsReceived_t_20(void *l, void *w);
+struct winUserStatsStored_t_12 {
+ uint64 m_nGameID;
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_UserStatsStored_t_12(void *l, void *w);
+struct winUserAchievementStored_t_148 {
+ uint64 m_nGameID;
+ bool m_bGroupAchievement;
+ char m_rgchAchievementName[128];
+ uint32 m_nCurProgress;
+ uint32 m_nMaxProgress;
+} __attribute__ ((ms_struct));
+extern void cb_UserAchievementStored_t_148(void *l, void *w);
+struct winLeaderboardFindResult_t_12 {
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ uint8 m_bLeaderboardFound;
+} __attribute__ ((ms_struct));
+extern void cb_LeaderboardFindResult_t_12(void *l, void *w);
+struct winLeaderboardScoresDownloaded_t_20 {
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries;
+ int m_cEntryCount;
+} __attribute__ ((ms_struct));
+extern void cb_LeaderboardScoresDownloaded_t_20(void *l, void *w);
+struct winLeaderboardScoreUploaded_t_28 {
+ uint8 m_bSuccess;
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ int32 m_nScore;
+ uint8 m_bScoreChanged;
+ int m_nGlobalRankNew;
+ int m_nGlobalRankPrevious;
+} __attribute__ ((ms_struct));
+extern void cb_LeaderboardScoreUploaded_t_28(void *l, void *w);
+struct winNumberOfCurrentPlayers_t_8 {
+ uint8 m_bSuccess;
+ int32 m_cPlayers;
+} __attribute__ ((ms_struct));
+extern void cb_NumberOfCurrentPlayers_t_8(void *l, void *w);
+struct winUserStatsUnloaded_t_8 {
+ CSteamID m_steamIDUser;
+} __attribute__ ((ms_struct));
+extern void cb_UserStatsUnloaded_t_8(void *l, void *w);
+struct winUserAchievementIconFetched_t_144 {
+ CGameID m_nGameID;
+ char m_rgchAchievementName[128];
+ bool m_bAchieved;
+ int m_nIconHandle;
+} __attribute__ ((ms_struct));
+extern void cb_UserAchievementIconFetched_t_144(void *l, void *w);
+struct winGlobalAchievementPercentagesReady_t_12 {
+ uint64 m_nGameID;
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_GlobalAchievementPercentagesReady_t_12(void *l, void *w);
+struct winLeaderboardUGCSet_t_12 {
+ EResult m_eResult;
+ SteamLeaderboard_t m_hSteamLeaderboard;
+} __attribute__ ((ms_struct));
+extern void cb_LeaderboardUGCSet_t_12(void *l, void *w);
+struct winPS3TrophiesInstalled_t_20 {
+ uint64 m_nGameID;
+ EResult m_eResult;
+ uint64 m_ulRequiredDiskSpace;
+} __attribute__ ((ms_struct));
+extern void cb_PS3TrophiesInstalled_t_20(void *l, void *w);
+struct winGlobalStatsReceived_t_12 {
+ uint64 m_nGameID;
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_GlobalStatsReceived_t_12(void *l, void *w);
+struct winDlcInstalled_t_4 {
+ AppId_t m_nAppID;
+} __attribute__ ((ms_struct));
+extern void cb_DlcInstalled_t_4(void *l, void *w);
+struct winRegisterActivationCodeResponse_t_8 {
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered;
+} __attribute__ ((ms_struct));
+extern void cb_RegisterActivationCodeResponse_t_8(void *l, void *w);
+struct winNewLaunchQueryParameters_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_NewLaunchQueryParameters_t_1(void *l, void *w);
+struct winAppProofOfPurchaseKeyResponse_t_252 {
+ EResult m_eResult;
+ uint32 m_nAppID;
+ uint32 m_cchKeyLength;
+ char m_rgchKey[240];
+} __attribute__ ((ms_struct));
+extern void cb_AppProofOfPurchaseKeyResponse_t_252(void *l, void *w);
+struct winFileDetailsResult_t_36 {
+ EResult m_eResult;
+ uint64 m_ulFileSize;
+ uint8 m_FileSHA[20];
+ uint32 m_unFlags;
+} __attribute__ ((ms_struct));
+extern void cb_FileDetailsResult_t_36(void *l, void *w);
+struct winP2PSessionRequest_t_8 {
+ CSteamID m_steamIDRemote;
+} __attribute__ ((ms_struct));
+extern void cb_P2PSessionRequest_t_8(void *l, void *w);
+struct winP2PSessionConnectFail_t_9 {
+ CSteamID m_steamIDRemote;
+ uint8 m_eP2PSessionError;
+} __attribute__ ((ms_struct));
+extern void cb_P2PSessionConnectFail_t_9(void *l, void *w);
+struct winSocketStatusCallback_t_20 {
+ SNetSocket_t m_hSocket;
+ SNetListenSocket_t m_hListenSocket;
+ CSteamID m_steamIDRemote;
+ int m_eSNetSocketState;
+} __attribute__ ((ms_struct));
+extern void cb_SocketStatusCallback_t_20(void *l, void *w);
+struct winScreenshotReady_t_8 {
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_ScreenshotReady_t_8(void *l, void *w);
+struct winScreenshotRequested_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_ScreenshotRequested_t_1(void *l, void *w);
+struct winPlaybackStatusHasChanged_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_PlaybackStatusHasChanged_t_1(void *l, void *w);
+struct winVolumeHasChanged_t_4 {
+ float m_flNewVolume;
+} __attribute__ ((ms_struct));
+extern void cb_VolumeHasChanged_t_4(void *l, void *w);
+struct winMusicPlayerRemoteWillActivate_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_MusicPlayerRemoteWillActivate_t_1(void *l, void *w);
+struct winMusicPlayerRemoteWillDeactivate_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_MusicPlayerRemoteWillDeactivate_t_1(void *l, void *w);
+struct winMusicPlayerRemoteToFront_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_MusicPlayerRemoteToFront_t_1(void *l, void *w);
+struct winMusicPlayerWillQuit_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_MusicPlayerWillQuit_t_1(void *l, void *w);
+struct winMusicPlayerWantsPlay_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_MusicPlayerWantsPlay_t_1(void *l, void *w);
+struct winMusicPlayerWantsPause_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_MusicPlayerWantsPause_t_1(void *l, void *w);
+struct winMusicPlayerWantsPlayPrevious_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_MusicPlayerWantsPlayPrevious_t_1(void *l, void *w);
+struct winMusicPlayerWantsPlayNext_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_MusicPlayerWantsPlayNext_t_1(void *l, void *w);
+struct winMusicPlayerWantsShuffled_t_1 {
+ bool m_bShuffled;
+} __attribute__ ((ms_struct));
+extern void cb_MusicPlayerWantsShuffled_t_1(void *l, void *w);
+struct winMusicPlayerWantsLooped_t_1 {
+ bool m_bLooped;
+} __attribute__ ((ms_struct));
+extern void cb_MusicPlayerWantsLooped_t_1(void *l, void *w);
+struct winMusicPlayerWantsVolume_t_4 {
+ float m_flNewVolume;
+} __attribute__ ((ms_struct));
+extern void cb_MusicPlayerWantsVolume_t_4(void *l, void *w);
+struct winMusicPlayerSelectsQueueEntry_t_4 {
+ int nID;
+} __attribute__ ((ms_struct));
+extern void cb_MusicPlayerSelectsQueueEntry_t_4(void *l, void *w);
+struct winMusicPlayerSelectsPlaylistEntry_t_4 {
+ int nID;
+} __attribute__ ((ms_struct));
+extern void cb_MusicPlayerSelectsPlaylistEntry_t_4(void *l, void *w);
+struct winMusicPlayerWantsPlayingRepeatStatus_t_4 {
+ int m_nPlayingRepeatStatus;
+} __attribute__ ((ms_struct));
+extern void cb_MusicPlayerWantsPlayingRepeatStatus_t_4(void *l, void *w);
+struct winHTTPRequestCompleted_t_24 {
+ HTTPRequestHandle m_hRequest;
+ uint64 m_ulContextValue;
+ bool m_bRequestSuccessful;
+ EHTTPStatusCode m_eStatusCode;
+ uint32 m_unBodySize;
+} __attribute__ ((ms_struct));
+extern void cb_HTTPRequestCompleted_t_24(void *l, void *w);
+struct winHTTPRequestHeadersReceived_t_12 {
+ HTTPRequestHandle m_hRequest;
+ uint64 m_ulContextValue;
+} __attribute__ ((ms_struct));
+extern void cb_HTTPRequestHeadersReceived_t_12(void *l, void *w);
+struct winHTTPRequestDataReceived_t_20 {
+ HTTPRequestHandle m_hRequest;
+ uint64 m_ulContextValue;
+ uint32 m_cOffset;
+ uint32 m_cBytesReceived;
+} __attribute__ ((ms_struct));
+extern void cb_HTTPRequestDataReceived_t_20(void *l, void *w);
+struct winSteamUGCQueryCompleted_t_24 {
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData;
+} __attribute__ ((ms_struct));
+extern void cb_SteamUGCQueryCompleted_t_24(void *l, void *w);
+struct winSteamUGCRequestUGCDetailsResult_t_9768 {
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData;
+} __attribute__ ((ms_struct));
+extern void cb_SteamUGCRequestUGCDetailsResult_t_9768(void *l, void *w);
+struct winCreateItemResult_t_16 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+} __attribute__ ((ms_struct));
+extern void cb_CreateItemResult_t_16(void *l, void *w);
+struct winSubmitItemUpdateResult_t_16 {
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+ PublishedFileId_t m_nPublishedFileId;
+} __attribute__ ((ms_struct));
+extern void cb_SubmitItemUpdateResult_t_16(void *l, void *w);
+struct winItemInstalled_t_12 {
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+} __attribute__ ((ms_struct));
+extern void cb_ItemInstalled_t_12(void *l, void *w);
+struct winDownloadItemResult_t_16 {
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_DownloadItemResult_t_16(void *l, void *w);
+struct winUserFavoriteItemsListChanged_t_16 {
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bWasAddRequest;
+} __attribute__ ((ms_struct));
+extern void cb_UserFavoriteItemsListChanged_t_16(void *l, void *w);
+struct winSetUserItemVoteResult_t_16 {
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVoteUp;
+} __attribute__ ((ms_struct));
+extern void cb_SetUserItemVoteResult_t_16(void *l, void *w);
+struct winGetUserItemVoteResult_t_16 {
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVotedUp;
+ bool m_bVotedDown;
+ bool m_bVoteSkipped;
+} __attribute__ ((ms_struct));
+extern void cb_GetUserItemVoteResult_t_16(void *l, void *w);
+struct winStartPlaytimeTrackingResult_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_StartPlaytimeTrackingResult_t_4(void *l, void *w);
+struct winStopPlaytimeTrackingResult_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_StopPlaytimeTrackingResult_t_4(void *l, void *w);
+struct winAddUGCDependencyResult_t_20 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ PublishedFileId_t m_nChildPublishedFileId;
+} __attribute__ ((ms_struct));
+extern void cb_AddUGCDependencyResult_t_20(void *l, void *w);
+struct winRemoveUGCDependencyResult_t_20 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ PublishedFileId_t m_nChildPublishedFileId;
+} __attribute__ ((ms_struct));
+extern void cb_RemoveUGCDependencyResult_t_20(void *l, void *w);
+struct winAddAppDependencyResult_t_16 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nAppID;
+} __attribute__ ((ms_struct));
+extern void cb_AddAppDependencyResult_t_16(void *l, void *w);
+struct winRemoveAppDependencyResult_t_16 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nAppID;
+} __attribute__ ((ms_struct));
+extern void cb_RemoveAppDependencyResult_t_16(void *l, void *w);
+struct winGetAppDependenciesResult_t_148 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_rgAppIDs[32];
+ uint32 m_nNumAppDependencies;
+ uint32 m_nTotalNumAppDependencies;
+} __attribute__ ((ms_struct));
+extern void cb_GetAppDependenciesResult_t_148(void *l, void *w);
+struct winDeleteItemResult_t_12 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+} __attribute__ ((ms_struct));
+extern void cb_DeleteItemResult_t_12(void *l, void *w);
+struct winSteamAppInstalled_t_4 {
+ AppId_t m_nAppID;
+} __attribute__ ((ms_struct));
+extern void cb_SteamAppInstalled_t_4(void *l, void *w);
+struct winSteamAppUninstalled_t_4 {
+ AppId_t m_nAppID;
+} __attribute__ ((ms_struct));
+extern void cb_SteamAppUninstalled_t_4(void *l, void *w);
+struct winHTML_BrowserReady_t_4 {
+ HHTMLBrowser unBrowserHandle;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_BrowserReady_t_4(void *l, void *w);
+struct winHTML_NeedsPaint_t_48 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pBGRA;
+ uint32 unWide;
+ uint32 unTall;
+ uint32 unUpdateX;
+ uint32 unUpdateY;
+ uint32 unUpdateWide;
+ uint32 unUpdateTall;
+ uint32 unScrollX;
+ uint32 unScrollY;
+ float flPageScale;
+ uint32 unPageSerial;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_NeedsPaint_t_48(void *l, void *w);
+struct winHTML_StartRequest_t_20 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchURL;
+ const char * pchTarget;
+ const char * pchPostData;
+ bool bIsRedirect;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_StartRequest_t_20(void *l, void *w);
+struct winHTML_CloseBrowser_t_4 {
+ HHTMLBrowser unBrowserHandle;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_CloseBrowser_t_4(void *l, void *w);
+struct winHTML_URLChanged_t_24 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchURL;
+ const char * pchPostData;
+ bool bIsRedirect;
+ const char * pchPageTitle;
+ bool bNewNavigation;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_URLChanged_t_24(void *l, void *w);
+struct winHTML_FinishedRequest_t_12 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchURL;
+ const char * pchPageTitle;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_FinishedRequest_t_12(void *l, void *w);
+struct winHTML_OpenLinkInNewTab_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchURL;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_OpenLinkInNewTab_t_8(void *l, void *w);
+struct winHTML_ChangedTitle_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchTitle;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_ChangedTitle_t_8(void *l, void *w);
+struct winHTML_SearchResults_t_12 {
+ HHTMLBrowser unBrowserHandle;
+ uint32 unResults;
+ uint32 unCurrentMatch;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_SearchResults_t_12(void *l, void *w);
+struct winHTML_CanGoBackAndForward_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ bool bCanGoBack;
+ bool bCanGoForward;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_CanGoBackAndForward_t_8(void *l, void *w);
+struct winHTML_HorizontalScroll_t_24 {
+ HHTMLBrowser unBrowserHandle;
+ uint32 unScrollMax;
+ uint32 unScrollCurrent;
+ float flPageScale;
+ bool bVisible;
+ uint32 unPageSize;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_HorizontalScroll_t_24(void *l, void *w);
+struct winHTML_VerticalScroll_t_24 {
+ HHTMLBrowser unBrowserHandle;
+ uint32 unScrollMax;
+ uint32 unScrollCurrent;
+ float flPageScale;
+ bool bVisible;
+ uint32 unPageSize;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_VerticalScroll_t_24(void *l, void *w);
+struct winHTML_LinkAtPosition_t_20 {
+ HHTMLBrowser unBrowserHandle;
+ uint32 x;
+ uint32 y;
+ const char * pchURL;
+ bool bInput;
+ bool bLiveLink;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_LinkAtPosition_t_20(void *l, void *w);
+struct winHTML_JSAlert_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchMessage;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_JSAlert_t_8(void *l, void *w);
+struct winHTML_JSConfirm_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchMessage;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_JSConfirm_t_8(void *l, void *w);
+struct winHTML_FileOpenDialog_t_12 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchTitle;
+ const char * pchInitialFile;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_FileOpenDialog_t_12(void *l, void *w);
+struct winHTML_NewWindow_t_28 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchURL;
+ uint32 unX;
+ uint32 unY;
+ uint32 unWide;
+ uint32 unTall;
+ HHTMLBrowser unNewWindow_BrowserHandle;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_NewWindow_t_28(void *l, void *w);
+struct winHTML_SetCursor_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ uint32 eMouseCursor;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_SetCursor_t_8(void *l, void *w);
+struct winHTML_StatusText_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchMsg;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_StatusText_t_8(void *l, void *w);
+struct winHTML_ShowToolTip_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchMsg;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_ShowToolTip_t_8(void *l, void *w);
+struct winHTML_UpdateToolTip_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchMsg;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_UpdateToolTip_t_8(void *l, void *w);
+struct winHTML_HideToolTip_t_4 {
+ HHTMLBrowser unBrowserHandle;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_HideToolTip_t_4(void *l, void *w);
+struct winHTML_BrowserRestarted_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ HHTMLBrowser unOldBrowserHandle;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_BrowserRestarted_t_8(void *l, void *w);
+struct winSteamInventoryResultReady_t_8 {
+ SteamInventoryResult_t m_handle;
+ EResult m_result;
+} __attribute__ ((ms_struct));
+extern void cb_SteamInventoryResultReady_t_8(void *l, void *w);
+struct winSteamInventoryFullUpdate_t_4 {
+ SteamInventoryResult_t m_handle;
+} __attribute__ ((ms_struct));
+extern void cb_SteamInventoryFullUpdate_t_4(void *l, void *w);
+struct winSteamInventoryDefinitionUpdate_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_SteamInventoryDefinitionUpdate_t_1(void *l, void *w);
+struct winSteamInventoryEligiblePromoItemDefIDs_t_20 {
+ EResult m_result;
+ CSteamID m_steamID;
+ int m_numEligiblePromoItemDefs;
+ bool m_bCachedData;
+} __attribute__ ((ms_struct));
+extern void cb_SteamInventoryEligiblePromoItemDefIDs_t_20(void *l, void *w);
+struct winSteamInventoryStartPurchaseResult_t_20 {
+ EResult m_result;
+ uint64 m_ulOrderID;
+ uint64 m_ulTransID;
+} __attribute__ ((ms_struct));
+extern void cb_SteamInventoryStartPurchaseResult_t_20(void *l, void *w);
+struct winSteamInventoryRequestPricesResult_t_8 {
+ EResult m_result;
+ char m_rgchCurrency[4];
+} __attribute__ ((ms_struct));
+extern void cb_SteamInventoryRequestPricesResult_t_8(void *l, void *w);
+struct winBroadcastUploadStart_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_BroadcastUploadStart_t_1(void *l, void *w);
+struct winBroadcastUploadStop_t_4 {
+ EBroadcastUploadResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_BroadcastUploadStop_t_4(void *l, void *w);
+struct winGetVideoURLResult_t_264 {
+ EResult m_eResult;
+ AppId_t m_unVideoAppID;
+ char m_rgchURL[256];
+} __attribute__ ((ms_struct));
+extern void cb_GetVideoURLResult_t_264(void *l, void *w);
+struct winGetOPFSettingsResult_t_8 {
+ EResult m_eResult;
+ AppId_t m_unVideoAppID;
+} __attribute__ ((ms_struct));
+extern void cb_GetOPFSettingsResult_t_8(void *l, void *w);
+struct winSteamParentalSettingsChanged_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_SteamParentalSettingsChanged_t_1(void *l, void *w);
+struct winGSClientApprove_t_16 {
+ CSteamID m_SteamID;
+ CSteamID m_OwnerSteamID;
+} __attribute__ ((ms_struct));
+extern void cb_GSClientApprove_t_16(void *l, void *w);
+struct winGSClientDeny_t_140 {
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+} __attribute__ ((ms_struct));
+extern void cb_GSClientDeny_t_140(void *l, void *w);
+struct winGSClientKick_t_12 {
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+} __attribute__ ((ms_struct));
+extern void cb_GSClientKick_t_12(void *l, void *w);
+struct winGSClientAchievementStatus_t_140 {
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+} __attribute__ ((ms_struct));
+extern void cb_GSClientAchievementStatus_t_140(void *l, void *w);
+struct winGSPolicyResponse_t_1 {
+ uint8 m_bSecure;
+} __attribute__ ((ms_struct));
+extern void cb_GSPolicyResponse_t_1(void *l, void *w);
+struct winGSGameplayStats_t_16 {
+ EResult m_eResult;
+ int32 m_nRank;
+ uint32 m_unTotalConnects;
+ uint32 m_unTotalMinutesPlayed;
+} __attribute__ ((ms_struct));
+extern void cb_GSGameplayStats_t_16(void *l, void *w);
+struct winGSClientGroupStatus_t_18 {
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+} __attribute__ ((ms_struct));
+extern void cb_GSClientGroupStatus_t_18(void *l, void *w);
+struct winGSReputation_t_32 {
+ EResult m_eResult;
+ uint32 m_unReputationScore;
+ bool m_bBanned;
+ uint32 m_unBannedIP;
+ uint16 m_usBannedPort;
+ uint64 m_ulBannedGameID;
+ uint32 m_unBanExpires;
+} __attribute__ ((ms_struct));
+extern void cb_GSReputation_t_32(void *l, void *w);
+struct winAssociateWithClanResult_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_AssociateWithClanResult_t_4(void *l, void *w);
+struct winComputeNewPlayerCompatibilityResult_t_24 {
+ EResult m_eResult;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+} __attribute__ ((ms_struct));
+extern void cb_ComputeNewPlayerCompatibilityResult_t_24(void *l, void *w);
+struct winGSStatsReceived_t_12 {
+ EResult m_eResult;
+ CSteamID m_steamIDUser;
+} __attribute__ ((ms_struct));
+extern void cb_GSStatsReceived_t_12(void *l, void *w);
+struct winGSStatsStored_t_12 {
+ EResult m_eResult;
+ CSteamID m_steamIDUser;
+} __attribute__ ((ms_struct));
+extern void cb_GSStatsStored_t_12(void *l, void *w);
+struct winGCMessageAvailable_t_4 {
+ uint32 m_nMessageSize;
+} __attribute__ ((ms_struct));
+extern void cb_GCMessageAvailable_t_4(void *l, void *w);
+struct winGCMessageFailed_t_1 {
+} __attribute__ ((ms_struct));
+extern void cb_GCMessageFailed_t_1(void *l, void *w);
+struct winSteamUnifiedMessagesSendMethodResult_t_24 {
+ ClientUnifiedMessageHandle m_hHandle;
+ uint64 m_unContext;
+ EResult m_eResult;
+ uint32 m_unResponseSize;
+} __attribute__ ((ms_struct));
+extern void cb_SteamUnifiedMessagesSendMethodResult_t_24(void *l, void *w);
+struct winSubmitItemUpdateResult_t_8 {
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+} __attribute__ ((ms_struct));
+extern void cb_SubmitItemUpdateResult_t_8(void *l, void *w);
+struct winRemoteStorageConflictResolution_t_8 {
+ AppId_t m_nAppID;
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageConflictResolution_t_8(void *l, void *w);
+struct winSteamAPICallCompleted_t_8 {
+ SteamAPICall_t m_hAsyncCall;
+} __attribute__ ((ms_struct));
+extern void cb_SteamAPICallCompleted_t_8(void *l, void *w);
+struct winAppProofOfPurchaseKeyResponse_t_72 {
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[64];
+} __attribute__ ((ms_struct));
+extern void cb_AppProofOfPurchaseKeyResponse_t_72(void *l, void *w);
+struct winSteamServerConnectFailure_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_SteamServerConnectFailure_t_4(void *l, void *w);
+struct winHTTPRequestCompleted_t_20 {
+ HTTPRequestHandle m_hRequest;
+ uint64 m_ulContextValue;
+ bool m_bRequestSuccessful;
+ EHTTPStatusCode m_eStatusCode;
+} __attribute__ ((ms_struct));
+extern void cb_HTTPRequestCompleted_t_20(void *l, void *w);
+struct winHTML_ComboNeedsPaint_t_16 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pBGRA;
+ uint32 unWide;
+ uint32 unTall;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_ComboNeedsPaint_t_16(void *l, void *w);
+struct winHTML_ShowPopup_t_4 {
+ HHTMLBrowser unBrowserHandle;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_ShowPopup_t_4(void *l, void *w);
+struct winHTML_HidePopup_t_4 {
+ HHTMLBrowser unBrowserHandle;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_HidePopup_t_4(void *l, void *w);
+struct winHTML_SizePopup_t_20 {
+ HHTMLBrowser unBrowserHandle;
+ uint32 unX;
+ uint32 unY;
+ uint32 unWide;
+ uint32 unTall;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_SizePopup_t_20(void *l, void *w);
+struct winHTML_NewWindow_t_24 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchURL;
+ uint32 unX;
+ uint32 unY;
+ uint32 unWide;
+ uint32 unTall;
+} __attribute__ ((ms_struct));
+extern void cb_HTML_NewWindow_t_24(void *l, void *w);
+struct winFavoritesListChanged_t_24 {
+ uint32 m_nIP;
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd;
+} __attribute__ ((ms_struct));
+extern void cb_FavoritesListChanged_t_24(void *l, void *w);
+struct winRemoteStorageFileShareResult_t_12 {
+ EResult m_eResult;
+ UGCHandle_t m_hFile;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageFileShareResult_t_12(void *l, void *w);
+struct winSteamUGCRequestUGCDetailsResult_t_9760 {
+ SteamUGCDetails_t m_details;
+} __attribute__ ((ms_struct));
+extern void cb_SteamUGCRequestUGCDetailsResult_t_9760(void *l, void *w);
+struct winValidateAuthTicketResponse_t_12 {
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+} __attribute__ ((ms_struct));
+extern void cb_ValidateAuthTicketResponse_t_12(void *l, void *w);
+struct winRemoteStorageGetPublishedFileDetailsResult_t_9744 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID;
+ AppId_t m_nConsumerAppID;
+ char m_rgchTitle[129];
+ char m_rgchDescription[8000];
+ UGCHandle_t m_hFile;
+ UGCHandle_t m_hPreviewFile;
+ uint64 m_ulSteamIDOwner;
+ uint32 m_rtimeCreated;
+ uint32 m_rtimeUpdated;
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[1025];
+ bool m_bTagsTruncated;
+ char m_pchFileName[260];
+ int32 m_nFileSize;
+ int32 m_nPreviewFileSize;
+ char m_rgchURL[256];
+ EWorkshopFileType m_eFileType;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageGetPublishedFileDetailsResult_t_9744(void *l, void *w);
+struct winGSClientApprove_t_8 {
+ CSteamID m_SteamID;
+} __attribute__ ((ms_struct));
+extern void cb_GSClientApprove_t_8(void *l, void *w);
+struct winRemoteStoragePublishFileResult_t_12 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStoragePublishFileResult_t_12(void *l, void *w);
+struct winRemoteStorageUpdatePublishedFileResult_t_12 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageUpdatePublishedFileResult_t_12(void *l, void *w);
+struct winRemoteStorageEnumerateWorkshopFilesResult_t_612 {
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[50];
+ float m_rgScore[50];
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageEnumerateWorkshopFilesResult_t_612(void *l, void *w);
+struct winRemoteStorageSubscribePublishedFileResult_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageSubscribePublishedFileResult_t_4(void *l, void *w);
+struct winRemoteStorageUnsubscribePublishedFileResult_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageUnsubscribePublishedFileResult_t_4(void *l, void *w);
+struct winRemoteStorageGetPublishedFileDetailsResult_t_9484 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID;
+ AppId_t m_nConsumerAppID;
+ char m_rgchTitle[129];
+ char m_rgchDescription[8000];
+ UGCHandle_t m_hFile;
+ UGCHandle_t m_hPreviewFile;
+ uint64 m_ulSteamIDOwner;
+ uint32 m_rtimeCreated;
+ uint32 m_rtimeUpdated;
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[1025];
+ bool m_bTagsTruncated;
+ char m_pchFileName[260];
+ int32 m_nFileSize;
+ int32 m_nPreviewFileSize;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageGetPublishedFileDetailsResult_t_9484(void *l, void *w);
+struct winComputeNewPlayerCompatibilityResult_t_16 {
+ EResult m_eResult;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+} __attribute__ ((ms_struct));
+extern void cb_ComputeNewPlayerCompatibilityResult_t_16(void *l, void *w);
+struct winRemoteStorageGetPublishedFileDetailsResult_t_1732 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID;
+ AppId_t m_nConsumerAppID;
+ char m_rgchTitle[129];
+ char m_rgchDescription[257];
+ UGCHandle_t m_hFile;
+ UGCHandle_t m_hPreviewFile;
+ uint64 m_ulSteamIDOwner;
+ uint32 m_rtimeCreated;
+ uint32 m_rtimeUpdated;
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[1025];
+ bool m_bTagsTruncated;
+ char m_pchFileName[260];
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageGetPublishedFileDetailsResult_t_1732(void *l, void *w);
+struct winNameHistoryResponse_t_8 {
+ int m_cSuccessfulLookups;
+ int m_cFailedLookups;
+} __attribute__ ((ms_struct));
+extern void cb_NameHistoryResponse_t_8(void *l, void *w);
+struct winRemoteStorageDownloadUGCResult_t_32 {
+ EResult m_eResult;
+ UGCHandle_t m_hFile;
+ AppId_t m_nAppID;
+ int32 m_nSizeInBytes;
+ char * m_pchFileName;
+ uint64 m_ulSteamIDOwner;
+} __attribute__ ((ms_struct));
+extern void cb_RemoteStorageDownloadUGCResult_t_32(void *l, void *w);
+struct winLobbyInvite_t_16 {
+ uint64 m_ulSteamIDUser;
+ uint64 m_ulSteamIDLobby;
+} __attribute__ ((ms_struct));
+extern void cb_LobbyInvite_t_16(void *l, void *w);
+struct winLobbyDataUpdate_t_16 {
+ uint64 m_ulSteamIDLobby;
+ uint64 m_ulSteamIDMember;
+} __attribute__ ((ms_struct));
+extern void cb_LobbyDataUpdate_t_16(void *l, void *w);
+struct winLobbyClosing_t_8 {
+ uint64 m_ulSteamIDLobby;
+} __attribute__ ((ms_struct));
+extern void cb_LobbyClosing_t_8(void *l, void *w);
+struct winLobbyKicked_t_16 {
+ uint64 m_ulSteamIDLobby;
+ uint64 m_ulSteamIDAdmin;
+} __attribute__ ((ms_struct));
+extern void cb_LobbyKicked_t_16(void *l, void *w);
+struct winRequestFriendsLobbiesResponse_t_24 {
+ uint64 m_ulSteamIDFriend;
+ uint64 m_ulSteamIDLobby;
+ int m_cResultIndex;
+ int m_cResultsTotal;
+} __attribute__ ((ms_struct));
+extern void cb_RequestFriendsLobbiesResponse_t_24(void *l, void *w);
+struct winUserStatsReceived_t_12 {
+ uint64 m_nGameID;
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+extern void cb_UserStatsReceived_t_12(void *l, void *w);
+struct winAppDataChanged_t_8 {
+ uint32 m_nAppID;
+ bool m_bBySteamUI;
+ bool m_bCDDBUpdate;
+} __attribute__ ((ms_struct));
+extern void cb_AppDataChanged_t_8(void *l, void *w);
diff --git a/lsteamclient/cb_converters_100.cpp b/lsteamclient/cb_converters_100.cpp
new file mode 100644
index 00000000..95964423
--- /dev/null
+++ b/lsteamclient/cb_converters_100.cpp
@@ -0,0 +1,21 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_100/steam_api.h"
+#include "steamworks_sdk_100/isteamgameserver.h"
+extern "C" {
+struct winAppDataChanged_t_8 {
+ uint32 m_nAppID;
+ bool m_bBySteamUI;
+ bool m_bCDDBUpdate;
+} __attribute__ ((ms_struct));
+void cb_AppDataChanged_t_8(void *l, void *w)
+{
+ AppDataChanged_t *lin = (AppDataChanged_t *)l;
+ struct winAppDataChanged_t_8 *win = (struct winAppDataChanged_t_8 *)w;
+ win->m_nAppID = lin->m_nAppID;
+ win->m_bBySteamUI = lin->m_bBySteamUI;
+ win->m_bCDDBUpdate = lin->m_bCDDBUpdate;
+}
+
+
+}
diff --git a/lsteamclient/cb_converters_102.cpp b/lsteamclient/cb_converters_102.cpp
new file mode 100644
index 00000000..8caf259d
--- /dev/null
+++ b/lsteamclient/cb_converters_102.cpp
@@ -0,0 +1,35 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_102/steam_api.h"
+#include "steamworks_sdk_102/isteamgameserver.h"
+extern "C" {
+struct winRequestFriendsLobbiesResponse_t_24 {
+ uint64 m_ulSteamIDFriend;
+ uint64 m_ulSteamIDLobby;
+ int m_cResultIndex;
+ int m_cResultsTotal;
+} __attribute__ ((ms_struct));
+void cb_RequestFriendsLobbiesResponse_t_24(void *l, void *w)
+{
+ RequestFriendsLobbiesResponse_t *lin = (RequestFriendsLobbiesResponse_t *)l;
+ struct winRequestFriendsLobbiesResponse_t_24 *win = (struct winRequestFriendsLobbiesResponse_t_24 *)w;
+ win->m_ulSteamIDFriend = lin->m_ulSteamIDFriend;
+ win->m_ulSteamIDLobby = lin->m_ulSteamIDLobby;
+ win->m_cResultIndex = lin->m_cResultIndex;
+ win->m_cResultsTotal = lin->m_cResultsTotal;
+}
+
+struct winUserStatsReceived_t_12 {
+ uint64 m_nGameID;
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_UserStatsReceived_t_12(void *l, void *w)
+{
+ UserStatsReceived_t *lin = (UserStatsReceived_t *)l;
+ struct winUserStatsReceived_t_12 *win = (struct winUserStatsReceived_t_12 *)w;
+ win->m_nGameID = lin->m_nGameID;
+ win->m_eResult = lin->m_eResult;
+}
+
+
+}
diff --git a/lsteamclient/cb_converters_104.cpp b/lsteamclient/cb_converters_104.cpp
new file mode 100644
index 00000000..0d20f5e8
--- /dev/null
+++ b/lsteamclient/cb_converters_104.cpp
@@ -0,0 +1,29 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_104/steam_api.h"
+#include "steamworks_sdk_104/isteamgameserver.h"
+extern "C" {
+struct winLobbyClosing_t_8 {
+ uint64 m_ulSteamIDLobby;
+} __attribute__ ((ms_struct));
+void cb_LobbyClosing_t_8(void *l, void *w)
+{
+ LobbyClosing_t *lin = (LobbyClosing_t *)l;
+ struct winLobbyClosing_t_8 *win = (struct winLobbyClosing_t_8 *)w;
+ win->m_ulSteamIDLobby = lin->m_ulSteamIDLobby;
+}
+
+struct winLobbyKicked_t_16 {
+ uint64 m_ulSteamIDLobby;
+ uint64 m_ulSteamIDAdmin;
+} __attribute__ ((ms_struct));
+void cb_LobbyKicked_t_16(void *l, void *w)
+{
+ LobbyKicked_t *lin = (LobbyKicked_t *)l;
+ struct winLobbyKicked_t_16 *win = (struct winLobbyKicked_t_16 *)w;
+ win->m_ulSteamIDLobby = lin->m_ulSteamIDLobby;
+ win->m_ulSteamIDAdmin = lin->m_ulSteamIDAdmin;
+}
+
+
+}
diff --git a/lsteamclient/cb_converters_111.cpp b/lsteamclient/cb_converters_111.cpp
new file mode 100644
index 00000000..5f366c1a
--- /dev/null
+++ b/lsteamclient/cb_converters_111.cpp
@@ -0,0 +1,21 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_111/steam_api.h"
+#include "steamworks_sdk_111/isteamgameserver.h"
+#include "steamworks_sdk_111/isteamgameserverstats.h"
+#include "steamworks_sdk_111/isteamgamecoordinator.h"
+extern "C" {
+struct winLobbyDataUpdate_t_16 {
+ uint64 m_ulSteamIDLobby;
+ uint64 m_ulSteamIDMember;
+} __attribute__ ((ms_struct));
+void cb_LobbyDataUpdate_t_16(void *l, void *w)
+{
+ LobbyDataUpdate_t *lin = (LobbyDataUpdate_t *)l;
+ struct winLobbyDataUpdate_t_16 *win = (struct winLobbyDataUpdate_t_16 *)w;
+ win->m_ulSteamIDLobby = lin->m_ulSteamIDLobby;
+ win->m_ulSteamIDMember = lin->m_ulSteamIDMember;
+}
+
+
+}
diff --git a/lsteamclient/cb_converters_112.cpp b/lsteamclient/cb_converters_112.cpp
new file mode 100644
index 00000000..49f1c11c
--- /dev/null
+++ b/lsteamclient/cb_converters_112.cpp
@@ -0,0 +1,21 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_112/steam_api.h"
+#include "steamworks_sdk_112/isteamgameserver.h"
+#include "steamworks_sdk_112/isteamgameserverstats.h"
+#include "steamworks_sdk_112/isteamgamecoordinator.h"
+extern "C" {
+struct winLobbyInvite_t_16 {
+ uint64 m_ulSteamIDUser;
+ uint64 m_ulSteamIDLobby;
+} __attribute__ ((ms_struct));
+void cb_LobbyInvite_t_16(void *l, void *w)
+{
+ LobbyInvite_t *lin = (LobbyInvite_t *)l;
+ struct winLobbyInvite_t_16 *win = (struct winLobbyInvite_t_16 *)w;
+ win->m_ulSteamIDUser = lin->m_ulSteamIDUser;
+ win->m_ulSteamIDLobby = lin->m_ulSteamIDLobby;
+}
+
+
+}
diff --git a/lsteamclient/cb_converters_116.cpp b/lsteamclient/cb_converters_116.cpp
new file mode 100644
index 00000000..716ecd78
--- /dev/null
+++ b/lsteamclient/cb_converters_116.cpp
@@ -0,0 +1,41 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_116/steam_api.h"
+#include "steamworks_sdk_116/isteamgameserver.h"
+#include "steamworks_sdk_116/isteamgameserverstats.h"
+#include "steamworks_sdk_116/isteamgamecoordinator.h"
+extern "C" {
+struct winNameHistoryResponse_t_8 {
+ int m_cSuccessfulLookups;
+ int m_cFailedLookups;
+} __attribute__ ((ms_struct));
+void cb_NameHistoryResponse_t_8(void *l, void *w)
+{
+ NameHistoryResponse_t *lin = (NameHistoryResponse_t *)l;
+ struct winNameHistoryResponse_t_8 *win = (struct winNameHistoryResponse_t_8 *)w;
+ win->m_cSuccessfulLookups = lin->m_cSuccessfulLookups;
+ win->m_cFailedLookups = lin->m_cFailedLookups;
+}
+
+struct winRemoteStorageDownloadUGCResult_t_32 {
+ EResult m_eResult;
+ UGCHandle_t m_hFile;
+ AppId_t m_nAppID;
+ int32 m_nSizeInBytes;
+ char * m_pchFileName;
+ uint64 m_ulSteamIDOwner;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageDownloadUGCResult_t_32(void *l, void *w)
+{
+ RemoteStorageDownloadUGCResult_t *lin = (RemoteStorageDownloadUGCResult_t *)l;
+ struct winRemoteStorageDownloadUGCResult_t_32 *win = (struct winRemoteStorageDownloadUGCResult_t_32 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_hFile = lin->m_hFile;
+ win->m_nAppID = lin->m_nAppID;
+ win->m_nSizeInBytes = lin->m_nSizeInBytes;
+ win->m_pchFileName = lin->m_pchFileName;
+ win->m_ulSteamIDOwner = lin->m_ulSteamIDOwner;
+}
+
+
+}
diff --git a/lsteamclient/cb_converters_117.cpp b/lsteamclient/cb_converters_117.cpp
new file mode 100644
index 00000000..f1b4cecf
--- /dev/null
+++ b/lsteamclient/cb_converters_117.cpp
@@ -0,0 +1,49 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_117/steam_api.h"
+#include "steamworks_sdk_117/isteamgameserver.h"
+#include "steamworks_sdk_117/isteamgameserverstats.h"
+#include "steamworks_sdk_117/isteamgamecoordinator.h"
+extern "C" {
+struct winRemoteStorageGetPublishedFileDetailsResult_t_1732 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID;
+ AppId_t m_nConsumerAppID;
+ char m_rgchTitle[129];
+ char m_rgchDescription[257];
+ UGCHandle_t m_hFile;
+ UGCHandle_t m_hPreviewFile;
+ uint64 m_ulSteamIDOwner;
+ uint32 m_rtimeCreated;
+ uint32 m_rtimeUpdated;
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[1025];
+ bool m_bTagsTruncated;
+ char m_pchFileName[260];
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageGetPublishedFileDetailsResult_t_1732(void *l, void *w)
+{
+ RemoteStorageGetPublishedFileDetailsResult_t *lin = (RemoteStorageGetPublishedFileDetailsResult_t *)l;
+ struct winRemoteStorageGetPublishedFileDetailsResult_t_1732 *win = (struct winRemoteStorageGetPublishedFileDetailsResult_t_1732 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_nCreatorAppID = lin->m_nCreatorAppID;
+ win->m_nConsumerAppID = lin->m_nConsumerAppID;
+ memcpy(win->m_rgchTitle, lin->m_rgchTitle, sizeof(win->m_rgchTitle));
+ memcpy(win->m_rgchDescription, lin->m_rgchDescription, sizeof(win->m_rgchDescription));
+ win->m_hFile = lin->m_hFile;
+ win->m_hPreviewFile = lin->m_hPreviewFile;
+ win->m_ulSteamIDOwner = lin->m_ulSteamIDOwner;
+ win->m_rtimeCreated = lin->m_rtimeCreated;
+ win->m_rtimeUpdated = lin->m_rtimeUpdated;
+ win->m_eVisibility = lin->m_eVisibility;
+ win->m_bBanned = lin->m_bBanned;
+ memcpy(win->m_rgchTags, lin->m_rgchTags, sizeof(win->m_rgchTags));
+ win->m_bTagsTruncated = lin->m_bTagsTruncated;
+ memcpy(win->m_pchFileName, lin->m_pchFileName, sizeof(win->m_pchFileName));
+}
+
+
+}
diff --git a/lsteamclient/cb_converters_118.cpp b/lsteamclient/cb_converters_118.cpp
new file mode 100644
index 00000000..28985cfd
--- /dev/null
+++ b/lsteamclient/cb_converters_118.cpp
@@ -0,0 +1,69 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_118/steam_api.h"
+#include "steamworks_sdk_118/isteamgameserver.h"
+#include "steamworks_sdk_118/isteamgameserverstats.h"
+#include "steamworks_sdk_118/isteamgamecoordinator.h"
+extern "C" {
+struct winRemoteStorageGetPublishedFileDetailsResult_t_9484 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID;
+ AppId_t m_nConsumerAppID;
+ char m_rgchTitle[129];
+ char m_rgchDescription[8000];
+ UGCHandle_t m_hFile;
+ UGCHandle_t m_hPreviewFile;
+ uint64 m_ulSteamIDOwner;
+ uint32 m_rtimeCreated;
+ uint32 m_rtimeUpdated;
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[1025];
+ bool m_bTagsTruncated;
+ char m_pchFileName[260];
+ int32 m_nFileSize;
+ int32 m_nPreviewFileSize;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageGetPublishedFileDetailsResult_t_9484(void *l, void *w)
+{
+ RemoteStorageGetPublishedFileDetailsResult_t *lin = (RemoteStorageGetPublishedFileDetailsResult_t *)l;
+ struct winRemoteStorageGetPublishedFileDetailsResult_t_9484 *win = (struct winRemoteStorageGetPublishedFileDetailsResult_t_9484 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_nCreatorAppID = lin->m_nCreatorAppID;
+ win->m_nConsumerAppID = lin->m_nConsumerAppID;
+ memcpy(win->m_rgchTitle, lin->m_rgchTitle, sizeof(win->m_rgchTitle));
+ memcpy(win->m_rgchDescription, lin->m_rgchDescription, sizeof(win->m_rgchDescription));
+ win->m_hFile = lin->m_hFile;
+ win->m_hPreviewFile = lin->m_hPreviewFile;
+ win->m_ulSteamIDOwner = lin->m_ulSteamIDOwner;
+ win->m_rtimeCreated = lin->m_rtimeCreated;
+ win->m_rtimeUpdated = lin->m_rtimeUpdated;
+ win->m_eVisibility = lin->m_eVisibility;
+ win->m_bBanned = lin->m_bBanned;
+ memcpy(win->m_rgchTags, lin->m_rgchTags, sizeof(win->m_rgchTags));
+ win->m_bTagsTruncated = lin->m_bTagsTruncated;
+ memcpy(win->m_pchFileName, lin->m_pchFileName, sizeof(win->m_pchFileName));
+ win->m_nFileSize = lin->m_nFileSize;
+ win->m_nPreviewFileSize = lin->m_nPreviewFileSize;
+}
+
+struct winComputeNewPlayerCompatibilityResult_t_16 {
+ EResult m_eResult;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+} __attribute__ ((ms_struct));
+void cb_ComputeNewPlayerCompatibilityResult_t_16(void *l, void *w)
+{
+ ComputeNewPlayerCompatibilityResult_t *lin = (ComputeNewPlayerCompatibilityResult_t *)l;
+ struct winComputeNewPlayerCompatibilityResult_t_16 *win = (struct winComputeNewPlayerCompatibilityResult_t_16 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_cPlayersThatDontLikeCandidate = lin->m_cPlayersThatDontLikeCandidate;
+ win->m_cPlayersThatCandidateDoesntLike = lin->m_cPlayersThatCandidateDoesntLike;
+ win->m_cClanPlayersThatDontLikeCandidate = lin->m_cClanPlayersThatDontLikeCandidate;
+}
+
+
+}
diff --git a/lsteamclient/cb_converters_122.cpp b/lsteamclient/cb_converters_122.cpp
new file mode 100644
index 00000000..091f517f
--- /dev/null
+++ b/lsteamclient/cb_converters_122.cpp
@@ -0,0 +1,29 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_122/steam_api.h"
+#include "steamworks_sdk_122/isteamgameserver.h"
+#include "steamworks_sdk_122/isteamgameserverstats.h"
+#include "steamworks_sdk_122/isteamgamecoordinator.h"
+extern "C" {
+struct winRemoteStorageSubscribePublishedFileResult_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageSubscribePublishedFileResult_t_4(void *l, void *w)
+{
+ RemoteStorageSubscribePublishedFileResult_t *lin = (RemoteStorageSubscribePublishedFileResult_t *)l;
+ struct winRemoteStorageSubscribePublishedFileResult_t_4 *win = (struct winRemoteStorageSubscribePublishedFileResult_t_4 *)w;
+ win->m_eResult = lin->m_eResult;
+}
+
+struct winRemoteStorageUnsubscribePublishedFileResult_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageUnsubscribePublishedFileResult_t_4(void *l, void *w)
+{
+ RemoteStorageUnsubscribePublishedFileResult_t *lin = (RemoteStorageUnsubscribePublishedFileResult_t *)l;
+ struct winRemoteStorageUnsubscribePublishedFileResult_t_4 *win = (struct winRemoteStorageUnsubscribePublishedFileResult_t_4 *)w;
+ win->m_eResult = lin->m_eResult;
+}
+
+
+}
diff --git a/lsteamclient/cb_converters_124.cpp b/lsteamclient/cb_converters_124.cpp
new file mode 100644
index 00000000..9367c502
--- /dev/null
+++ b/lsteamclient/cb_converters_124.cpp
@@ -0,0 +1,51 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_124/steam_api.h"
+#include "steamworks_sdk_124/isteamgameserver.h"
+#include "steamworks_sdk_124/isteamgameserverstats.h"
+#include "steamworks_sdk_124/isteamgamecoordinator.h"
+extern "C" {
+struct winRemoteStoragePublishFileResult_t_12 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+} __attribute__ ((ms_struct));
+void cb_RemoteStoragePublishFileResult_t_12(void *l, void *w)
+{
+ RemoteStoragePublishFileResult_t *lin = (RemoteStoragePublishFileResult_t *)l;
+ struct winRemoteStoragePublishFileResult_t_12 *win = (struct winRemoteStoragePublishFileResult_t_12 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+}
+
+struct winRemoteStorageUpdatePublishedFileResult_t_12 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageUpdatePublishedFileResult_t_12(void *l, void *w)
+{
+ RemoteStorageUpdatePublishedFileResult_t *lin = (RemoteStorageUpdatePublishedFileResult_t *)l;
+ struct winRemoteStorageUpdatePublishedFileResult_t_12 *win = (struct winRemoteStorageUpdatePublishedFileResult_t_12 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+}
+
+struct winRemoteStorageEnumerateWorkshopFilesResult_t_612 {
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[50];
+ float m_rgScore[50];
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageEnumerateWorkshopFilesResult_t_612(void *l, void *w)
+{
+ RemoteStorageEnumerateWorkshopFilesResult_t *lin = (RemoteStorageEnumerateWorkshopFilesResult_t *)l;
+ struct winRemoteStorageEnumerateWorkshopFilesResult_t_612 *win = (struct winRemoteStorageEnumerateWorkshopFilesResult_t_612 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nResultsReturned = lin->m_nResultsReturned;
+ win->m_nTotalResultCount = lin->m_nTotalResultCount;
+ memcpy(win->m_rgPublishedFileId, lin->m_rgPublishedFileId, sizeof(win->m_rgPublishedFileId));
+ memcpy(win->m_rgScore, lin->m_rgScore, sizeof(win->m_rgScore));
+}
+
+
+}
diff --git a/lsteamclient/cb_converters_125.cpp b/lsteamclient/cb_converters_125.cpp
new file mode 100644
index 00000000..3729d218
--- /dev/null
+++ b/lsteamclient/cb_converters_125.cpp
@@ -0,0 +1,79 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_125/steam_api.h"
+#include "steamworks_sdk_125/isteamgameserver.h"
+#include "steamworks_sdk_125/isteamgameserverstats.h"
+#include "steamworks_sdk_125/isteamgamecoordinator.h"
+extern "C" {
+struct winValidateAuthTicketResponse_t_12 {
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+} __attribute__ ((ms_struct));
+void cb_ValidateAuthTicketResponse_t_12(void *l, void *w)
+{
+ ValidateAuthTicketResponse_t *lin = (ValidateAuthTicketResponse_t *)l;
+ struct winValidateAuthTicketResponse_t_12 *win = (struct winValidateAuthTicketResponse_t_12 *)w;
+ win->m_SteamID = lin->m_SteamID;
+ win->m_eAuthSessionResponse = lin->m_eAuthSessionResponse;
+}
+
+struct winRemoteStorageGetPublishedFileDetailsResult_t_9744 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID;
+ AppId_t m_nConsumerAppID;
+ char m_rgchTitle[129];
+ char m_rgchDescription[8000];
+ UGCHandle_t m_hFile;
+ UGCHandle_t m_hPreviewFile;
+ uint64 m_ulSteamIDOwner;
+ uint32 m_rtimeCreated;
+ uint32 m_rtimeUpdated;
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[1025];
+ bool m_bTagsTruncated;
+ char m_pchFileName[260];
+ int32 m_nFileSize;
+ int32 m_nPreviewFileSize;
+ char m_rgchURL[256];
+ EWorkshopFileType m_eFileType;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageGetPublishedFileDetailsResult_t_9744(void *l, void *w)
+{
+ RemoteStorageGetPublishedFileDetailsResult_t *lin = (RemoteStorageGetPublishedFileDetailsResult_t *)l;
+ struct winRemoteStorageGetPublishedFileDetailsResult_t_9744 *win = (struct winRemoteStorageGetPublishedFileDetailsResult_t_9744 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_nCreatorAppID = lin->m_nCreatorAppID;
+ win->m_nConsumerAppID = lin->m_nConsumerAppID;
+ memcpy(win->m_rgchTitle, lin->m_rgchTitle, sizeof(win->m_rgchTitle));
+ memcpy(win->m_rgchDescription, lin->m_rgchDescription, sizeof(win->m_rgchDescription));
+ win->m_hFile = lin->m_hFile;
+ win->m_hPreviewFile = lin->m_hPreviewFile;
+ win->m_ulSteamIDOwner = lin->m_ulSteamIDOwner;
+ win->m_rtimeCreated = lin->m_rtimeCreated;
+ win->m_rtimeUpdated = lin->m_rtimeUpdated;
+ win->m_eVisibility = lin->m_eVisibility;
+ win->m_bBanned = lin->m_bBanned;
+ memcpy(win->m_rgchTags, lin->m_rgchTags, sizeof(win->m_rgchTags));
+ win->m_bTagsTruncated = lin->m_bTagsTruncated;
+ memcpy(win->m_pchFileName, lin->m_pchFileName, sizeof(win->m_pchFileName));
+ win->m_nFileSize = lin->m_nFileSize;
+ win->m_nPreviewFileSize = lin->m_nPreviewFileSize;
+ memcpy(win->m_rgchURL, lin->m_rgchURL, sizeof(win->m_rgchURL));
+ win->m_eFileType = lin->m_eFileType;
+}
+
+struct winGSClientApprove_t_8 {
+ CSteamID m_SteamID;
+} __attribute__ ((ms_struct));
+void cb_GSClientApprove_t_8(void *l, void *w)
+{
+ GSClientApprove_t *lin = (GSClientApprove_t *)l;
+ struct winGSClientApprove_t_8 *win = (struct winGSClientApprove_t_8 *)w;
+ win->m_SteamID = lin->m_SteamID;
+}
+
+
+}
diff --git a/lsteamclient/cb_converters_128.cpp b/lsteamclient/cb_converters_128.cpp
new file mode 100644
index 00000000..6eff9cfb
--- /dev/null
+++ b/lsteamclient/cb_converters_128.cpp
@@ -0,0 +1,51 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_128/steam_api.h"
+#include "steamworks_sdk_128/isteamgameserver.h"
+#include "steamworks_sdk_128/isteamgameserverstats.h"
+#include "steamworks_sdk_128/isteamgamecoordinator.h"
+extern "C" {
+struct winFavoritesListChanged_t_24 {
+ uint32 m_nIP;
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd;
+} __attribute__ ((ms_struct));
+void cb_FavoritesListChanged_t_24(void *l, void *w)
+{
+ FavoritesListChanged_t *lin = (FavoritesListChanged_t *)l;
+ struct winFavoritesListChanged_t_24 *win = (struct winFavoritesListChanged_t_24 *)w;
+ win->m_nIP = lin->m_nIP;
+ win->m_nQueryPort = lin->m_nQueryPort;
+ win->m_nConnPort = lin->m_nConnPort;
+ win->m_nAppID = lin->m_nAppID;
+ win->m_nFlags = lin->m_nFlags;
+ win->m_bAdd = lin->m_bAdd;
+}
+
+struct winRemoteStorageFileShareResult_t_12 {
+ EResult m_eResult;
+ UGCHandle_t m_hFile;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageFileShareResult_t_12(void *l, void *w)
+{
+ RemoteStorageFileShareResult_t *lin = (RemoteStorageFileShareResult_t *)l;
+ struct winRemoteStorageFileShareResult_t_12 *win = (struct winRemoteStorageFileShareResult_t_12 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_hFile = lin->m_hFile;
+}
+
+struct winSteamUGCRequestUGCDetailsResult_t_9760 {
+ SteamUGCDetails_t m_details;
+} __attribute__ ((ms_struct));
+void cb_SteamUGCRequestUGCDetailsResult_t_9760(void *l, void *w)
+{
+ SteamUGCRequestUGCDetailsResult_t *lin = (SteamUGCRequestUGCDetailsResult_t *)l;
+ struct winSteamUGCRequestUGCDetailsResult_t_9760 *win = (struct winSteamUGCRequestUGCDetailsResult_t_9760 *)w;
+ win->m_details = lin->m_details;
+}
+
+
+}
diff --git a/lsteamclient/cb_converters_132.cpp b/lsteamclient/cb_converters_132.cpp
new file mode 100644
index 00000000..37d743de
--- /dev/null
+++ b/lsteamclient/cb_converters_132.cpp
@@ -0,0 +1,99 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_132/steam_api.h"
+#include "steamworks_sdk_132/isteamgameserver.h"
+#include "steamworks_sdk_132/isteamgameserverstats.h"
+#include "steamworks_sdk_132/isteamgamecoordinator.h"
+extern "C" {
+struct winHTTPRequestCompleted_t_20 {
+ HTTPRequestHandle m_hRequest;
+ uint64 m_ulContextValue;
+ bool m_bRequestSuccessful;
+ EHTTPStatusCode m_eStatusCode;
+} __attribute__ ((ms_struct));
+void cb_HTTPRequestCompleted_t_20(void *l, void *w)
+{
+ HTTPRequestCompleted_t *lin = (HTTPRequestCompleted_t *)l;
+ struct winHTTPRequestCompleted_t_20 *win = (struct winHTTPRequestCompleted_t_20 *)w;
+ win->m_hRequest = lin->m_hRequest;
+ win->m_ulContextValue = lin->m_ulContextValue;
+ win->m_bRequestSuccessful = lin->m_bRequestSuccessful;
+ win->m_eStatusCode = lin->m_eStatusCode;
+}
+
+struct winHTML_ComboNeedsPaint_t_16 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pBGRA;
+ uint32 unWide;
+ uint32 unTall;
+} __attribute__ ((ms_struct));
+void cb_HTML_ComboNeedsPaint_t_16(void *l, void *w)
+{
+ HTML_ComboNeedsPaint_t *lin = (HTML_ComboNeedsPaint_t *)l;
+ struct winHTML_ComboNeedsPaint_t_16 *win = (struct winHTML_ComboNeedsPaint_t_16 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->pBGRA = lin->pBGRA;
+ win->unWide = lin->unWide;
+ win->unTall = lin->unTall;
+}
+
+struct winHTML_ShowPopup_t_4 {
+ HHTMLBrowser unBrowserHandle;
+} __attribute__ ((ms_struct));
+void cb_HTML_ShowPopup_t_4(void *l, void *w)
+{
+ HTML_ShowPopup_t *lin = (HTML_ShowPopup_t *)l;
+ struct winHTML_ShowPopup_t_4 *win = (struct winHTML_ShowPopup_t_4 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+}
+
+struct winHTML_HidePopup_t_4 {
+ HHTMLBrowser unBrowserHandle;
+} __attribute__ ((ms_struct));
+void cb_HTML_HidePopup_t_4(void *l, void *w)
+{
+ HTML_HidePopup_t *lin = (HTML_HidePopup_t *)l;
+ struct winHTML_HidePopup_t_4 *win = (struct winHTML_HidePopup_t_4 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+}
+
+struct winHTML_SizePopup_t_20 {
+ HHTMLBrowser unBrowserHandle;
+ uint32 unX;
+ uint32 unY;
+ uint32 unWide;
+ uint32 unTall;
+} __attribute__ ((ms_struct));
+void cb_HTML_SizePopup_t_20(void *l, void *w)
+{
+ HTML_SizePopup_t *lin = (HTML_SizePopup_t *)l;
+ struct winHTML_SizePopup_t_20 *win = (struct winHTML_SizePopup_t_20 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->unX = lin->unX;
+ win->unY = lin->unY;
+ win->unWide = lin->unWide;
+ win->unTall = lin->unTall;
+}
+
+struct winHTML_NewWindow_t_24 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchURL;
+ uint32 unX;
+ uint32 unY;
+ uint32 unWide;
+ uint32 unTall;
+} __attribute__ ((ms_struct));
+void cb_HTML_NewWindow_t_24(void *l, void *w)
+{
+ HTML_NewWindow_t *lin = (HTML_NewWindow_t *)l;
+ struct winHTML_NewWindow_t_24 *win = (struct winHTML_NewWindow_t_24 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->pchURL = lin->pchURL;
+ win->unX = lin->unX;
+ win->unY = lin->unY;
+ win->unWide = lin->unWide;
+ win->unTall = lin->unTall;
+}
+
+
+}
diff --git a/lsteamclient/cb_converters_134.cpp b/lsteamclient/cb_converters_134.cpp
new file mode 100644
index 00000000..d6968f86
--- /dev/null
+++ b/lsteamclient/cb_converters_134.cpp
@@ -0,0 +1,19 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_134/steam_api.h"
+#include "steamworks_sdk_134/isteamgameserver.h"
+#include "steamworks_sdk_134/isteamgameserverstats.h"
+#include "steamworks_sdk_134/isteamgamecoordinator.h"
+extern "C" {
+struct winSteamServerConnectFailure_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_SteamServerConnectFailure_t_4(void *l, void *w)
+{
+ SteamServerConnectFailure_t *lin = (SteamServerConnectFailure_t *)l;
+ struct winSteamServerConnectFailure_t_4 *win = (struct winSteamServerConnectFailure_t_4 *)w;
+ win->m_eResult = lin->m_eResult;
+}
+
+
+}
diff --git a/lsteamclient/cb_converters_136.cpp b/lsteamclient/cb_converters_136.cpp
new file mode 100644
index 00000000..b23db1c9
--- /dev/null
+++ b/lsteamclient/cb_converters_136.cpp
@@ -0,0 +1,33 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_136/steam_api.h"
+#include "steamworks_sdk_136/isteamgameserver.h"
+#include "steamworks_sdk_136/isteamgameserverstats.h"
+#include "steamworks_sdk_136/isteamgamecoordinator.h"
+extern "C" {
+struct winSteamAPICallCompleted_t_8 {
+ SteamAPICall_t m_hAsyncCall;
+} __attribute__ ((ms_struct));
+void cb_SteamAPICallCompleted_t_8(void *l, void *w)
+{
+ SteamAPICallCompleted_t *lin = (SteamAPICallCompleted_t *)l;
+ struct winSteamAPICallCompleted_t_8 *win = (struct winSteamAPICallCompleted_t_8 *)w;
+ win->m_hAsyncCall = lin->m_hAsyncCall;
+}
+
+struct winAppProofOfPurchaseKeyResponse_t_72 {
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[64];
+} __attribute__ ((ms_struct));
+void cb_AppProofOfPurchaseKeyResponse_t_72(void *l, void *w)
+{
+ AppProofOfPurchaseKeyResponse_t *lin = (AppProofOfPurchaseKeyResponse_t *)l;
+ struct winAppProofOfPurchaseKeyResponse_t_72 *win = (struct winAppProofOfPurchaseKeyResponse_t_72 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nAppID = lin->m_nAppID;
+ memcpy(win->m_rgchKey, lin->m_rgchKey, sizeof(win->m_rgchKey));
+}
+
+
+}
diff --git a/lsteamclient/cb_converters_137.cpp b/lsteamclient/cb_converters_137.cpp
new file mode 100644
index 00000000..8f7ef38d
--- /dev/null
+++ b/lsteamclient/cb_converters_137.cpp
@@ -0,0 +1,21 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_137/steam_api.h"
+#include "steamworks_sdk_137/isteamgameserver.h"
+#include "steamworks_sdk_137/isteamgameserverstats.h"
+#include "steamworks_sdk_137/isteamgamecoordinator.h"
+extern "C" {
+struct winRemoteStorageConflictResolution_t_8 {
+ AppId_t m_nAppID;
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageConflictResolution_t_8(void *l, void *w)
+{
+ RemoteStorageConflictResolution_t *lin = (RemoteStorageConflictResolution_t *)l;
+ struct winRemoteStorageConflictResolution_t_8 *win = (struct winRemoteStorageConflictResolution_t_8 *)w;
+ win->m_nAppID = lin->m_nAppID;
+ win->m_eResult = lin->m_eResult;
+}
+
+
+}
diff --git a/lsteamclient/cb_converters_140.cpp b/lsteamclient/cb_converters_140.cpp
new file mode 100644
index 00000000..cd3b8c36
--- /dev/null
+++ b/lsteamclient/cb_converters_140.cpp
@@ -0,0 +1,21 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_140/steam_api.h"
+#include "steamworks_sdk_140/isteamgameserver.h"
+#include "steamworks_sdk_140/isteamgameserverstats.h"
+#include "steamworks_sdk_140/isteamgamecoordinator.h"
+extern "C" {
+struct winSubmitItemUpdateResult_t_8 {
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+} __attribute__ ((ms_struct));
+void cb_SubmitItemUpdateResult_t_8(void *l, void *w)
+{
+ SubmitItemUpdateResult_t *lin = (SubmitItemUpdateResult_t *)l;
+ struct winSubmitItemUpdateResult_t_8 *win = (struct winSubmitItemUpdateResult_t_8 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_bUserNeedsToAcceptWorkshopLegalAgreement = lin->m_bUserNeedsToAcceptWorkshopLegalAgreement;
+}
+
+
+}
diff --git a/lsteamclient/cb_converters_141.cpp b/lsteamclient/cb_converters_141.cpp
new file mode 100644
index 00000000..c263bfb0
--- /dev/null
+++ b/lsteamclient/cb_converters_141.cpp
@@ -0,0 +1,25 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_141/steam_api.h"
+#include "steamworks_sdk_141/isteamgameserver.h"
+#include "steamworks_sdk_141/isteamgameserverstats.h"
+#include "steamworks_sdk_141/isteamgamecoordinator.h"
+extern "C" {
+struct winSteamUnifiedMessagesSendMethodResult_t_24 {
+ ClientUnifiedMessageHandle m_hHandle;
+ uint64 m_unContext;
+ EResult m_eResult;
+ uint32 m_unResponseSize;
+} __attribute__ ((ms_struct));
+void cb_SteamUnifiedMessagesSendMethodResult_t_24(void *l, void *w)
+{
+ SteamUnifiedMessagesSendMethodResult_t *lin = (SteamUnifiedMessagesSendMethodResult_t *)l;
+ struct winSteamUnifiedMessagesSendMethodResult_t_24 *win = (struct winSteamUnifiedMessagesSendMethodResult_t_24 *)w;
+ win->m_hHandle = lin->m_hHandle;
+ win->m_unContext = lin->m_unContext;
+ win->m_eResult = lin->m_eResult;
+ win->m_unResponseSize = lin->m_unResponseSize;
+}
+
+
+}
diff --git a/lsteamclient/cb_converters_142.cpp b/lsteamclient/cb_converters_142.cpp
new file mode 100644
index 00000000..1d4600d3
--- /dev/null
+++ b/lsteamclient/cb_converters_142.cpp
@@ -0,0 +1,2457 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "steamworks_sdk_142/isteamgameserver.h"
+#include "steamworks_sdk_142/isteamgameserverstats.h"
+#include "steamworks_sdk_142/isteamgamecoordinator.h"
+extern "C" {
+struct winSteamServersConnected_t_1 {
+} __attribute__ ((ms_struct));
+void cb_SteamServersConnected_t_1(void *l, void *w)
+{
+ SteamServersConnected_t *lin = (SteamServersConnected_t *)l;
+ struct winSteamServersConnected_t_1 *win = (struct winSteamServersConnected_t_1 *)w;
+}
+
+struct winSteamServerConnectFailure_t_8 {
+ EResult m_eResult;
+ bool m_bStillRetrying;
+} __attribute__ ((ms_struct));
+void cb_SteamServerConnectFailure_t_8(void *l, void *w)
+{
+ SteamServerConnectFailure_t *lin = (SteamServerConnectFailure_t *)l;
+ struct winSteamServerConnectFailure_t_8 *win = (struct winSteamServerConnectFailure_t_8 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_bStillRetrying = lin->m_bStillRetrying;
+}
+
+struct winSteamServersDisconnected_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_SteamServersDisconnected_t_4(void *l, void *w)
+{
+ SteamServersDisconnected_t *lin = (SteamServersDisconnected_t *)l;
+ struct winSteamServersDisconnected_t_4 *win = (struct winSteamServersDisconnected_t_4 *)w;
+ win->m_eResult = lin->m_eResult;
+}
+
+struct winClientGameServerDeny_t_16 {
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+} __attribute__ ((ms_struct));
+void cb_ClientGameServerDeny_t_16(void *l, void *w)
+{
+ ClientGameServerDeny_t *lin = (ClientGameServerDeny_t *)l;
+ struct winClientGameServerDeny_t_16 *win = (struct winClientGameServerDeny_t_16 *)w;
+ win->m_uAppID = lin->m_uAppID;
+ win->m_unGameServerIP = lin->m_unGameServerIP;
+ win->m_usGameServerPort = lin->m_usGameServerPort;
+ win->m_bSecure = lin->m_bSecure;
+ win->m_uReason = lin->m_uReason;
+}
+
+struct winIPCFailure_t_1 {
+ uint8 m_eFailureType;
+} __attribute__ ((ms_struct));
+void cb_IPCFailure_t_1(void *l, void *w)
+{
+ IPCFailure_t *lin = (IPCFailure_t *)l;
+ struct winIPCFailure_t_1 *win = (struct winIPCFailure_t_1 *)w;
+ win->m_eFailureType = lin->m_eFailureType;
+}
+
+struct winLicensesUpdated_t_1 {
+} __attribute__ ((ms_struct));
+void cb_LicensesUpdated_t_1(void *l, void *w)
+{
+ LicensesUpdated_t *lin = (LicensesUpdated_t *)l;
+ struct winLicensesUpdated_t_1 *win = (struct winLicensesUpdated_t_1 *)w;
+}
+
+struct winValidateAuthTicketResponse_t_20 {
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID;
+} __attribute__ ((ms_struct));
+void cb_ValidateAuthTicketResponse_t_20(void *l, void *w)
+{
+ ValidateAuthTicketResponse_t *lin = (ValidateAuthTicketResponse_t *)l;
+ struct winValidateAuthTicketResponse_t_20 *win = (struct winValidateAuthTicketResponse_t_20 *)w;
+ win->m_SteamID = lin->m_SteamID;
+ win->m_eAuthSessionResponse = lin->m_eAuthSessionResponse;
+ win->m_OwnerSteamID = lin->m_OwnerSteamID;
+}
+
+struct winMicroTxnAuthorizationResponse_t_16 {
+ uint32 m_unAppID;
+ uint64 m_ulOrderID;
+ uint8 m_bAuthorized;
+} __attribute__ ((ms_struct));
+void cb_MicroTxnAuthorizationResponse_t_16(void *l, void *w)
+{
+ MicroTxnAuthorizationResponse_t *lin = (MicroTxnAuthorizationResponse_t *)l;
+ struct winMicroTxnAuthorizationResponse_t_16 *win = (struct winMicroTxnAuthorizationResponse_t_16 *)w;
+ win->m_unAppID = lin->m_unAppID;
+ win->m_ulOrderID = lin->m_ulOrderID;
+ win->m_bAuthorized = lin->m_bAuthorized;
+}
+
+struct winEncryptedAppTicketResponse_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_EncryptedAppTicketResponse_t_4(void *l, void *w)
+{
+ EncryptedAppTicketResponse_t *lin = (EncryptedAppTicketResponse_t *)l;
+ struct winEncryptedAppTicketResponse_t_4 *win = (struct winEncryptedAppTicketResponse_t_4 *)w;
+ win->m_eResult = lin->m_eResult;
+}
+
+struct winGetAuthSessionTicketResponse_t_8 {
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_GetAuthSessionTicketResponse_t_8(void *l, void *w)
+{
+ GetAuthSessionTicketResponse_t *lin = (GetAuthSessionTicketResponse_t *)l;
+ struct winGetAuthSessionTicketResponse_t_8 *win = (struct winGetAuthSessionTicketResponse_t_8 *)w;
+ win->m_hAuthTicket = lin->m_hAuthTicket;
+ win->m_eResult = lin->m_eResult;
+}
+
+struct winGameWebCallback_t_256 {
+ char m_szURL[256];
+} __attribute__ ((ms_struct));
+void cb_GameWebCallback_t_256(void *l, void *w)
+{
+ GameWebCallback_t *lin = (GameWebCallback_t *)l;
+ struct winGameWebCallback_t_256 *win = (struct winGameWebCallback_t_256 *)w;
+ memcpy(win->m_szURL, lin->m_szURL, sizeof(win->m_szURL));
+}
+
+struct winStoreAuthURLResponse_t_512 {
+ char m_szURL[512];
+} __attribute__ ((ms_struct));
+void cb_StoreAuthURLResponse_t_512(void *l, void *w)
+{
+ StoreAuthURLResponse_t *lin = (StoreAuthURLResponse_t *)l;
+ struct winStoreAuthURLResponse_t_512 *win = (struct winStoreAuthURLResponse_t_512 *)w;
+ memcpy(win->m_szURL, lin->m_szURL, sizeof(win->m_szURL));
+}
+
+struct winPersonaStateChange_t_12 {
+ uint64 m_ulSteamID;
+ int m_nChangeFlags;
+} __attribute__ ((ms_struct));
+void cb_PersonaStateChange_t_12(void *l, void *w)
+{
+ PersonaStateChange_t *lin = (PersonaStateChange_t *)l;
+ struct winPersonaStateChange_t_12 *win = (struct winPersonaStateChange_t_12 *)w;
+ win->m_ulSteamID = lin->m_ulSteamID;
+ win->m_nChangeFlags = lin->m_nChangeFlags;
+}
+
+struct winGameOverlayActivated_t_1 {
+ uint8 m_bActive;
+} __attribute__ ((ms_struct));
+void cb_GameOverlayActivated_t_1(void *l, void *w)
+{
+ GameOverlayActivated_t *lin = (GameOverlayActivated_t *)l;
+ struct winGameOverlayActivated_t_1 *win = (struct winGameOverlayActivated_t_1 *)w;
+ win->m_bActive = lin->m_bActive;
+}
+
+struct winGameServerChangeRequested_t_128 {
+ char m_rgchServer[64];
+ char m_rgchPassword[64];
+} __attribute__ ((ms_struct));
+void cb_GameServerChangeRequested_t_128(void *l, void *w)
+{
+ GameServerChangeRequested_t *lin = (GameServerChangeRequested_t *)l;
+ struct winGameServerChangeRequested_t_128 *win = (struct winGameServerChangeRequested_t_128 *)w;
+ memcpy(win->m_rgchServer, lin->m_rgchServer, sizeof(win->m_rgchServer));
+ memcpy(win->m_rgchPassword, lin->m_rgchPassword, sizeof(win->m_rgchPassword));
+}
+
+struct winGameLobbyJoinRequested_t_16 {
+ CSteamID m_steamIDLobby;
+ CSteamID m_steamIDFriend;
+} __attribute__ ((ms_struct));
+void cb_GameLobbyJoinRequested_t_16(void *l, void *w)
+{
+ GameLobbyJoinRequested_t *lin = (GameLobbyJoinRequested_t *)l;
+ struct winGameLobbyJoinRequested_t_16 *win = (struct winGameLobbyJoinRequested_t_16 *)w;
+ win->m_steamIDLobby = lin->m_steamIDLobby;
+ win->m_steamIDFriend = lin->m_steamIDFriend;
+}
+
+struct winAvatarImageLoaded_t_20 {
+ CSteamID m_steamID;
+ int m_iImage;
+ int m_iWide;
+ int m_iTall;
+} __attribute__ ((ms_struct));
+void cb_AvatarImageLoaded_t_20(void *l, void *w)
+{
+ AvatarImageLoaded_t *lin = (AvatarImageLoaded_t *)l;
+ struct winAvatarImageLoaded_t_20 *win = (struct winAvatarImageLoaded_t_20 *)w;
+ win->m_steamID = lin->m_steamID;
+ win->m_iImage = lin->m_iImage;
+ win->m_iWide = lin->m_iWide;
+ win->m_iTall = lin->m_iTall;
+}
+
+struct winClanOfficerListResponse_t_16 {
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+} __attribute__ ((ms_struct));
+void cb_ClanOfficerListResponse_t_16(void *l, void *w)
+{
+ ClanOfficerListResponse_t *lin = (ClanOfficerListResponse_t *)l;
+ struct winClanOfficerListResponse_t_16 *win = (struct winClanOfficerListResponse_t_16 *)w;
+ win->m_steamIDClan = lin->m_steamIDClan;
+ win->m_cOfficers = lin->m_cOfficers;
+ win->m_bSuccess = lin->m_bSuccess;
+}
+
+struct winFriendRichPresenceUpdate_t_12 {
+ CSteamID m_steamIDFriend;
+ AppId_t m_nAppID;
+} __attribute__ ((ms_struct));
+void cb_FriendRichPresenceUpdate_t_12(void *l, void *w)
+{
+ FriendRichPresenceUpdate_t *lin = (FriendRichPresenceUpdate_t *)l;
+ struct winFriendRichPresenceUpdate_t_12 *win = (struct winFriendRichPresenceUpdate_t_12 *)w;
+ win->m_steamIDFriend = lin->m_steamIDFriend;
+ win->m_nAppID = lin->m_nAppID;
+}
+
+struct winGameRichPresenceJoinRequested_t_264 {
+ CSteamID m_steamIDFriend;
+ char m_rgchConnect[256];
+} __attribute__ ((ms_struct));
+void cb_GameRichPresenceJoinRequested_t_264(void *l, void *w)
+{
+ GameRichPresenceJoinRequested_t *lin = (GameRichPresenceJoinRequested_t *)l;
+ struct winGameRichPresenceJoinRequested_t_264 *win = (struct winGameRichPresenceJoinRequested_t_264 *)w;
+ win->m_steamIDFriend = lin->m_steamIDFriend;
+ memcpy(win->m_rgchConnect, lin->m_rgchConnect, sizeof(win->m_rgchConnect));
+}
+
+struct winGameConnectedClanChatMsg_t_20 {
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+} __attribute__ ((ms_struct));
+void cb_GameConnectedClanChatMsg_t_20(void *l, void *w)
+{
+ GameConnectedClanChatMsg_t *lin = (GameConnectedClanChatMsg_t *)l;
+ struct winGameConnectedClanChatMsg_t_20 *win = (struct winGameConnectedClanChatMsg_t_20 *)w;
+ win->m_steamIDClanChat = lin->m_steamIDClanChat;
+ win->m_steamIDUser = lin->m_steamIDUser;
+ win->m_iMessageID = lin->m_iMessageID;
+}
+
+struct winGameConnectedChatJoin_t_16 {
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+} __attribute__ ((ms_struct));
+void cb_GameConnectedChatJoin_t_16(void *l, void *w)
+{
+ GameConnectedChatJoin_t *lin = (GameConnectedChatJoin_t *)l;
+ struct winGameConnectedChatJoin_t_16 *win = (struct winGameConnectedChatJoin_t_16 *)w;
+ win->m_steamIDClanChat = lin->m_steamIDClanChat;
+ win->m_steamIDUser = lin->m_steamIDUser;
+}
+
+struct winGameConnectedChatLeave_t_18 {
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked;
+ bool m_bDropped;
+} __attribute__ ((ms_struct));
+void cb_GameConnectedChatLeave_t_18(void *l, void *w)
+{
+ GameConnectedChatLeave_t *lin = (GameConnectedChatLeave_t *)l;
+ struct winGameConnectedChatLeave_t_18 *win = (struct winGameConnectedChatLeave_t_18 *)w;
+ win->m_steamIDClanChat = lin->m_steamIDClanChat;
+ win->m_steamIDUser = lin->m_steamIDUser;
+ win->m_bKicked = lin->m_bKicked;
+ win->m_bDropped = lin->m_bDropped;
+}
+
+struct winDownloadClanActivityCountsResult_t_1 {
+ bool m_bSuccess;
+} __attribute__ ((ms_struct));
+void cb_DownloadClanActivityCountsResult_t_1(void *l, void *w)
+{
+ DownloadClanActivityCountsResult_t *lin = (DownloadClanActivityCountsResult_t *)l;
+ struct winDownloadClanActivityCountsResult_t_1 *win = (struct winDownloadClanActivityCountsResult_t_1 *)w;
+ win->m_bSuccess = lin->m_bSuccess;
+}
+
+struct winJoinClanChatRoomCompletionResult_t_12 {
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+} __attribute__ ((ms_struct));
+void cb_JoinClanChatRoomCompletionResult_t_12(void *l, void *w)
+{
+ JoinClanChatRoomCompletionResult_t *lin = (JoinClanChatRoomCompletionResult_t *)l;
+ struct winJoinClanChatRoomCompletionResult_t_12 *win = (struct winJoinClanChatRoomCompletionResult_t_12 *)w;
+ win->m_steamIDClanChat = lin->m_steamIDClanChat;
+ win->m_eChatRoomEnterResponse = lin->m_eChatRoomEnterResponse;
+}
+
+struct winGameConnectedFriendChatMsg_t_12 {
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+} __attribute__ ((ms_struct));
+void cb_GameConnectedFriendChatMsg_t_12(void *l, void *w)
+{
+ GameConnectedFriendChatMsg_t *lin = (GameConnectedFriendChatMsg_t *)l;
+ struct winGameConnectedFriendChatMsg_t_12 *win = (struct winGameConnectedFriendChatMsg_t_12 *)w;
+ win->m_steamIDUser = lin->m_steamIDUser;
+ win->m_iMessageID = lin->m_iMessageID;
+}
+
+struct winFriendsGetFollowerCount_t_16 {
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+} __attribute__ ((ms_struct));
+void cb_FriendsGetFollowerCount_t_16(void *l, void *w)
+{
+ FriendsGetFollowerCount_t *lin = (FriendsGetFollowerCount_t *)l;
+ struct winFriendsGetFollowerCount_t_16 *win = (struct winFriendsGetFollowerCount_t_16 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_steamID = lin->m_steamID;
+ win->m_nCount = lin->m_nCount;
+}
+
+struct winFriendsIsFollowing_t_16 {
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+} __attribute__ ((ms_struct));
+void cb_FriendsIsFollowing_t_16(void *l, void *w)
+{
+ FriendsIsFollowing_t *lin = (FriendsIsFollowing_t *)l;
+ struct winFriendsIsFollowing_t_16 *win = (struct winFriendsIsFollowing_t_16 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_steamID = lin->m_steamID;
+ win->m_bIsFollowing = lin->m_bIsFollowing;
+}
+
+struct winFriendsEnumerateFollowingList_t_412 {
+ EResult m_eResult;
+ CSteamID m_rgSteamID[50];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+} __attribute__ ((ms_struct));
+void cb_FriendsEnumerateFollowingList_t_412(void *l, void *w)
+{
+ FriendsEnumerateFollowingList_t *lin = (FriendsEnumerateFollowingList_t *)l;
+ struct winFriendsEnumerateFollowingList_t_412 *win = (struct winFriendsEnumerateFollowingList_t_412 *)w;
+ win->m_eResult = lin->m_eResult;
+ memcpy(win->m_rgSteamID, lin->m_rgSteamID, sizeof(win->m_rgSteamID));
+ win->m_nResultsReturned = lin->m_nResultsReturned;
+ win->m_nTotalResultCount = lin->m_nTotalResultCount;
+}
+
+struct winSetPersonaNameResponse_t_8 {
+ bool m_bSuccess;
+ bool m_bLocalSuccess;
+ EResult m_result;
+} __attribute__ ((ms_struct));
+void cb_SetPersonaNameResponse_t_8(void *l, void *w)
+{
+ SetPersonaNameResponse_t *lin = (SetPersonaNameResponse_t *)l;
+ struct winSetPersonaNameResponse_t_8 *win = (struct winSetPersonaNameResponse_t_8 *)w;
+ win->m_bSuccess = lin->m_bSuccess;
+ win->m_bLocalSuccess = lin->m_bLocalSuccess;
+ win->m_result = lin->m_result;
+}
+
+struct winIPCountry_t_1 {
+} __attribute__ ((ms_struct));
+void cb_IPCountry_t_1(void *l, void *w)
+{
+ IPCountry_t *lin = (IPCountry_t *)l;
+ struct winIPCountry_t_1 *win = (struct winIPCountry_t_1 *)w;
+}
+
+struct winLowBatteryPower_t_1 {
+ uint8 m_nMinutesBatteryLeft;
+} __attribute__ ((ms_struct));
+void cb_LowBatteryPower_t_1(void *l, void *w)
+{
+ LowBatteryPower_t *lin = (LowBatteryPower_t *)l;
+ struct winLowBatteryPower_t_1 *win = (struct winLowBatteryPower_t_1 *)w;
+ win->m_nMinutesBatteryLeft = lin->m_nMinutesBatteryLeft;
+}
+
+struct winSteamAPICallCompleted_t_16 {
+ SteamAPICall_t m_hAsyncCall;
+ int m_iCallback;
+ uint32 m_cubParam;
+} __attribute__ ((ms_struct));
+void cb_SteamAPICallCompleted_t_16(void *l, void *w)
+{
+ SteamAPICallCompleted_t *lin = (SteamAPICallCompleted_t *)l;
+ struct winSteamAPICallCompleted_t_16 *win = (struct winSteamAPICallCompleted_t_16 *)w;
+ win->m_hAsyncCall = lin->m_hAsyncCall;
+ win->m_iCallback = lin->m_iCallback;
+ win->m_cubParam = lin->m_cubParam;
+}
+
+struct winSteamShutdown_t_1 {
+} __attribute__ ((ms_struct));
+void cb_SteamShutdown_t_1(void *l, void *w)
+{
+ SteamShutdown_t *lin = (SteamShutdown_t *)l;
+ struct winSteamShutdown_t_1 *win = (struct winSteamShutdown_t_1 *)w;
+}
+
+struct winCheckFileSignature_t_4 {
+ ECheckFileSignature m_eCheckFileSignature;
+} __attribute__ ((ms_struct));
+void cb_CheckFileSignature_t_4(void *l, void *w)
+{
+ CheckFileSignature_t *lin = (CheckFileSignature_t *)l;
+ struct winCheckFileSignature_t_4 *win = (struct winCheckFileSignature_t_4 *)w;
+ win->m_eCheckFileSignature = lin->m_eCheckFileSignature;
+}
+
+struct winGamepadTextInputDismissed_t_8 {
+ bool m_bSubmitted;
+ uint32 m_unSubmittedText;
+} __attribute__ ((ms_struct));
+void cb_GamepadTextInputDismissed_t_8(void *l, void *w)
+{
+ GamepadTextInputDismissed_t *lin = (GamepadTextInputDismissed_t *)l;
+ struct winGamepadTextInputDismissed_t_8 *win = (struct winGamepadTextInputDismissed_t_8 *)w;
+ win->m_bSubmitted = lin->m_bSubmitted;
+ win->m_unSubmittedText = lin->m_unSubmittedText;
+}
+
+struct winFavoritesListChanged_t_28 {
+ uint32 m_nIP;
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd;
+ AccountID_t m_unAccountId;
+} __attribute__ ((ms_struct));
+void cb_FavoritesListChanged_t_28(void *l, void *w)
+{
+ FavoritesListChanged_t *lin = (FavoritesListChanged_t *)l;
+ struct winFavoritesListChanged_t_28 *win = (struct winFavoritesListChanged_t_28 *)w;
+ win->m_nIP = lin->m_nIP;
+ win->m_nQueryPort = lin->m_nQueryPort;
+ win->m_nConnPort = lin->m_nConnPort;
+ win->m_nAppID = lin->m_nAppID;
+ win->m_nFlags = lin->m_nFlags;
+ win->m_bAdd = lin->m_bAdd;
+ win->m_unAccountId = lin->m_unAccountId;
+}
+
+struct winLobbyInvite_t_24 {
+ uint64 m_ulSteamIDUser;
+ uint64 m_ulSteamIDLobby;
+ uint64 m_ulGameID;
+} __attribute__ ((ms_struct));
+void cb_LobbyInvite_t_24(void *l, void *w)
+{
+ LobbyInvite_t *lin = (LobbyInvite_t *)l;
+ struct winLobbyInvite_t_24 *win = (struct winLobbyInvite_t_24 *)w;
+ win->m_ulSteamIDUser = lin->m_ulSteamIDUser;
+ win->m_ulSteamIDLobby = lin->m_ulSteamIDLobby;
+ win->m_ulGameID = lin->m_ulGameID;
+}
+
+struct winLobbyEnter_t_20 {
+ uint64 m_ulSteamIDLobby;
+ uint32 m_rgfChatPermissions;
+ bool m_bLocked;
+ uint32 m_EChatRoomEnterResponse;
+} __attribute__ ((ms_struct));
+void cb_LobbyEnter_t_20(void *l, void *w)
+{
+ LobbyEnter_t *lin = (LobbyEnter_t *)l;
+ struct winLobbyEnter_t_20 *win = (struct winLobbyEnter_t_20 *)w;
+ win->m_ulSteamIDLobby = lin->m_ulSteamIDLobby;
+ win->m_rgfChatPermissions = lin->m_rgfChatPermissions;
+ win->m_bLocked = lin->m_bLocked;
+ win->m_EChatRoomEnterResponse = lin->m_EChatRoomEnterResponse;
+}
+
+struct winLobbyDataUpdate_t_20 {
+ uint64 m_ulSteamIDLobby;
+ uint64 m_ulSteamIDMember;
+ uint8 m_bSuccess;
+} __attribute__ ((ms_struct));
+void cb_LobbyDataUpdate_t_20(void *l, void *w)
+{
+ LobbyDataUpdate_t *lin = (LobbyDataUpdate_t *)l;
+ struct winLobbyDataUpdate_t_20 *win = (struct winLobbyDataUpdate_t_20 *)w;
+ win->m_ulSteamIDLobby = lin->m_ulSteamIDLobby;
+ win->m_ulSteamIDMember = lin->m_ulSteamIDMember;
+ win->m_bSuccess = lin->m_bSuccess;
+}
+
+struct winLobbyChatUpdate_t_28 {
+ uint64 m_ulSteamIDLobby;
+ uint64 m_ulSteamIDUserChanged;
+ uint64 m_ulSteamIDMakingChange;
+ uint32 m_rgfChatMemberStateChange;
+} __attribute__ ((ms_struct));
+void cb_LobbyChatUpdate_t_28(void *l, void *w)
+{
+ LobbyChatUpdate_t *lin = (LobbyChatUpdate_t *)l;
+ struct winLobbyChatUpdate_t_28 *win = (struct winLobbyChatUpdate_t_28 *)w;
+ win->m_ulSteamIDLobby = lin->m_ulSteamIDLobby;
+ win->m_ulSteamIDUserChanged = lin->m_ulSteamIDUserChanged;
+ win->m_ulSteamIDMakingChange = lin->m_ulSteamIDMakingChange;
+ win->m_rgfChatMemberStateChange = lin->m_rgfChatMemberStateChange;
+}
+
+struct winLobbyChatMsg_t_24 {
+ uint64 m_ulSteamIDLobby;
+ uint64 m_ulSteamIDUser;
+ uint8 m_eChatEntryType;
+ uint32 m_iChatID;
+} __attribute__ ((ms_struct));
+void cb_LobbyChatMsg_t_24(void *l, void *w)
+{
+ LobbyChatMsg_t *lin = (LobbyChatMsg_t *)l;
+ struct winLobbyChatMsg_t_24 *win = (struct winLobbyChatMsg_t_24 *)w;
+ win->m_ulSteamIDLobby = lin->m_ulSteamIDLobby;
+ win->m_ulSteamIDUser = lin->m_ulSteamIDUser;
+ win->m_eChatEntryType = lin->m_eChatEntryType;
+ win->m_iChatID = lin->m_iChatID;
+}
+
+struct winLobbyGameCreated_t_24 {
+ uint64 m_ulSteamIDLobby;
+ uint64 m_ulSteamIDGameServer;
+ uint32 m_unIP;
+ uint16 m_usPort;
+} __attribute__ ((ms_struct));
+void cb_LobbyGameCreated_t_24(void *l, void *w)
+{
+ LobbyGameCreated_t *lin = (LobbyGameCreated_t *)l;
+ struct winLobbyGameCreated_t_24 *win = (struct winLobbyGameCreated_t_24 *)w;
+ win->m_ulSteamIDLobby = lin->m_ulSteamIDLobby;
+ win->m_ulSteamIDGameServer = lin->m_ulSteamIDGameServer;
+ win->m_unIP = lin->m_unIP;
+ win->m_usPort = lin->m_usPort;
+}
+
+struct winLobbyMatchList_t_4 {
+ uint32 m_nLobbiesMatching;
+} __attribute__ ((ms_struct));
+void cb_LobbyMatchList_t_4(void *l, void *w)
+{
+ LobbyMatchList_t *lin = (LobbyMatchList_t *)l;
+ struct winLobbyMatchList_t_4 *win = (struct winLobbyMatchList_t_4 *)w;
+ win->m_nLobbiesMatching = lin->m_nLobbiesMatching;
+}
+
+struct winLobbyKicked_t_20 {
+ uint64 m_ulSteamIDLobby;
+ uint64 m_ulSteamIDAdmin;
+ uint8 m_bKickedDueToDisconnect;
+} __attribute__ ((ms_struct));
+void cb_LobbyKicked_t_20(void *l, void *w)
+{
+ LobbyKicked_t *lin = (LobbyKicked_t *)l;
+ struct winLobbyKicked_t_20 *win = (struct winLobbyKicked_t_20 *)w;
+ win->m_ulSteamIDLobby = lin->m_ulSteamIDLobby;
+ win->m_ulSteamIDAdmin = lin->m_ulSteamIDAdmin;
+ win->m_bKickedDueToDisconnect = lin->m_bKickedDueToDisconnect;
+}
+
+struct winLobbyCreated_t_12 {
+ EResult m_eResult;
+ uint64 m_ulSteamIDLobby;
+} __attribute__ ((ms_struct));
+void cb_LobbyCreated_t_12(void *l, void *w)
+{
+ LobbyCreated_t *lin = (LobbyCreated_t *)l;
+ struct winLobbyCreated_t_12 *win = (struct winLobbyCreated_t_12 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_ulSteamIDLobby = lin->m_ulSteamIDLobby;
+}
+
+struct winPSNGameBootInviteResult_t_9 {
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby;
+} __attribute__ ((ms_struct));
+void cb_PSNGameBootInviteResult_t_9(void *l, void *w)
+{
+ PSNGameBootInviteResult_t *lin = (PSNGameBootInviteResult_t *)l;
+ struct winPSNGameBootInviteResult_t_9 *win = (struct winPSNGameBootInviteResult_t_9 *)w;
+ win->m_bGameBootInviteExists = lin->m_bGameBootInviteExists;
+ win->m_steamIDLobby = lin->m_steamIDLobby;
+}
+
+struct winFavoritesListAccountsUpdated_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_FavoritesListAccountsUpdated_t_4(void *l, void *w)
+{
+ FavoritesListAccountsUpdated_t *lin = (FavoritesListAccountsUpdated_t *)l;
+ struct winFavoritesListAccountsUpdated_t_4 *win = (struct winFavoritesListAccountsUpdated_t_4 *)w;
+ win->m_eResult = lin->m_eResult;
+}
+
+struct winRemoteStorageAppSyncedClient_t_12 {
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageAppSyncedClient_t_12(void *l, void *w)
+{
+ RemoteStorageAppSyncedClient_t *lin = (RemoteStorageAppSyncedClient_t *)l;
+ struct winRemoteStorageAppSyncedClient_t_12 *win = (struct winRemoteStorageAppSyncedClient_t_12 *)w;
+ win->m_nAppID = lin->m_nAppID;
+ win->m_eResult = lin->m_eResult;
+ win->m_unNumDownloads = lin->m_unNumDownloads;
+}
+
+struct winRemoteStorageAppSyncedServer_t_12 {
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageAppSyncedServer_t_12(void *l, void *w)
+{
+ RemoteStorageAppSyncedServer_t *lin = (RemoteStorageAppSyncedServer_t *)l;
+ struct winRemoteStorageAppSyncedServer_t_12 *win = (struct winRemoteStorageAppSyncedServer_t_12 *)w;
+ win->m_nAppID = lin->m_nAppID;
+ win->m_eResult = lin->m_eResult;
+ win->m_unNumUploads = lin->m_unNumUploads;
+}
+
+struct winRemoteStorageAppSyncProgress_t_280 {
+ char m_rgchCurrentFile[260];
+ AppId_t m_nAppID;
+ uint32 m_uBytesTransferredThisChunk;
+ double m_dAppPercentComplete;
+ bool m_bUploading;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageAppSyncProgress_t_280(void *l, void *w)
+{
+ RemoteStorageAppSyncProgress_t *lin = (RemoteStorageAppSyncProgress_t *)l;
+ struct winRemoteStorageAppSyncProgress_t_280 *win = (struct winRemoteStorageAppSyncProgress_t_280 *)w;
+ memcpy(win->m_rgchCurrentFile, lin->m_rgchCurrentFile, sizeof(win->m_rgchCurrentFile));
+ win->m_nAppID = lin->m_nAppID;
+ win->m_uBytesTransferredThisChunk = lin->m_uBytesTransferredThisChunk;
+ win->m_dAppPercentComplete = lin->m_dAppPercentComplete;
+ win->m_bUploading = lin->m_bUploading;
+}
+
+struct winRemoteStorageAppSyncStatusCheck_t_8 {
+ AppId_t m_nAppID;
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageAppSyncStatusCheck_t_8(void *l, void *w)
+{
+ RemoteStorageAppSyncStatusCheck_t *lin = (RemoteStorageAppSyncStatusCheck_t *)l;
+ struct winRemoteStorageAppSyncStatusCheck_t_8 *win = (struct winRemoteStorageAppSyncStatusCheck_t_8 *)w;
+ win->m_nAppID = lin->m_nAppID;
+ win->m_eResult = lin->m_eResult;
+}
+
+struct winRemoteStorageFileShareResult_t_272 {
+ EResult m_eResult;
+ UGCHandle_t m_hFile;
+ char m_rgchFilename[260];
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageFileShareResult_t_272(void *l, void *w)
+{
+ RemoteStorageFileShareResult_t *lin = (RemoteStorageFileShareResult_t *)l;
+ struct winRemoteStorageFileShareResult_t_272 *win = (struct winRemoteStorageFileShareResult_t_272 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_hFile = lin->m_hFile;
+ memcpy(win->m_rgchFilename, lin->m_rgchFilename, sizeof(win->m_rgchFilename));
+}
+
+struct winRemoteStoragePublishFileResult_t_16 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+} __attribute__ ((ms_struct));
+void cb_RemoteStoragePublishFileResult_t_16(void *l, void *w)
+{
+ RemoteStoragePublishFileResult_t *lin = (RemoteStoragePublishFileResult_t *)l;
+ struct winRemoteStoragePublishFileResult_t_16 *win = (struct winRemoteStoragePublishFileResult_t_16 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_bUserNeedsToAcceptWorkshopLegalAgreement = lin->m_bUserNeedsToAcceptWorkshopLegalAgreement;
+}
+
+struct winRemoteStorageDeletePublishedFileResult_t_12 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageDeletePublishedFileResult_t_12(void *l, void *w)
+{
+ RemoteStorageDeletePublishedFileResult_t *lin = (RemoteStorageDeletePublishedFileResult_t *)l;
+ struct winRemoteStorageDeletePublishedFileResult_t_12 *win = (struct winRemoteStorageDeletePublishedFileResult_t_12 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+}
+
+struct winRemoteStorageEnumerateUserPublishedFilesResult_t_412 {
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[50];
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageEnumerateUserPublishedFilesResult_t_412(void *l, void *w)
+{
+ RemoteStorageEnumerateUserPublishedFilesResult_t *lin = (RemoteStorageEnumerateUserPublishedFilesResult_t *)l;
+ struct winRemoteStorageEnumerateUserPublishedFilesResult_t_412 *win = (struct winRemoteStorageEnumerateUserPublishedFilesResult_t_412 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nResultsReturned = lin->m_nResultsReturned;
+ win->m_nTotalResultCount = lin->m_nTotalResultCount;
+ memcpy(win->m_rgPublishedFileId, lin->m_rgPublishedFileId, sizeof(win->m_rgPublishedFileId));
+}
+
+struct winRemoteStorageSubscribePublishedFileResult_t_12 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageSubscribePublishedFileResult_t_12(void *l, void *w)
+{
+ RemoteStorageSubscribePublishedFileResult_t *lin = (RemoteStorageSubscribePublishedFileResult_t *)l;
+ struct winRemoteStorageSubscribePublishedFileResult_t_12 *win = (struct winRemoteStorageSubscribePublishedFileResult_t_12 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+}
+
+struct winRemoteStorageEnumerateUserSubscribedFilesResult_t_612 {
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[50];
+ uint32 m_rgRTimeSubscribed[50];
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageEnumerateUserSubscribedFilesResult_t_612(void *l, void *w)
+{
+ RemoteStorageEnumerateUserSubscribedFilesResult_t *lin = (RemoteStorageEnumerateUserSubscribedFilesResult_t *)l;
+ struct winRemoteStorageEnumerateUserSubscribedFilesResult_t_612 *win = (struct winRemoteStorageEnumerateUserSubscribedFilesResult_t_612 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nResultsReturned = lin->m_nResultsReturned;
+ win->m_nTotalResultCount = lin->m_nTotalResultCount;
+ memcpy(win->m_rgPublishedFileId, lin->m_rgPublishedFileId, sizeof(win->m_rgPublishedFileId));
+ memcpy(win->m_rgRTimeSubscribed, lin->m_rgRTimeSubscribed, sizeof(win->m_rgRTimeSubscribed));
+}
+
+struct winRemoteStorageUnsubscribePublishedFileResult_t_12 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageUnsubscribePublishedFileResult_t_12(void *l, void *w)
+{
+ RemoteStorageUnsubscribePublishedFileResult_t *lin = (RemoteStorageUnsubscribePublishedFileResult_t *)l;
+ struct winRemoteStorageUnsubscribePublishedFileResult_t_12 *win = (struct winRemoteStorageUnsubscribePublishedFileResult_t_12 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+}
+
+struct winRemoteStorageUpdatePublishedFileResult_t_16 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageUpdatePublishedFileResult_t_16(void *l, void *w)
+{
+ RemoteStorageUpdatePublishedFileResult_t *lin = (RemoteStorageUpdatePublishedFileResult_t *)l;
+ struct winRemoteStorageUpdatePublishedFileResult_t_16 *win = (struct winRemoteStorageUpdatePublishedFileResult_t_16 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_bUserNeedsToAcceptWorkshopLegalAgreement = lin->m_bUserNeedsToAcceptWorkshopLegalAgreement;
+}
+
+struct winRemoteStorageDownloadUGCResult_t_288 {
+ EResult m_eResult;
+ UGCHandle_t m_hFile;
+ AppId_t m_nAppID;
+ int32 m_nSizeInBytes;
+ char m_pchFileName[260];
+ uint64 m_ulSteamIDOwner;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageDownloadUGCResult_t_288(void *l, void *w)
+{
+ RemoteStorageDownloadUGCResult_t *lin = (RemoteStorageDownloadUGCResult_t *)l;
+ struct winRemoteStorageDownloadUGCResult_t_288 *win = (struct winRemoteStorageDownloadUGCResult_t_288 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_hFile = lin->m_hFile;
+ win->m_nAppID = lin->m_nAppID;
+ win->m_nSizeInBytes = lin->m_nSizeInBytes;
+ memcpy(win->m_pchFileName, lin->m_pchFileName, sizeof(win->m_pchFileName));
+ win->m_ulSteamIDOwner = lin->m_ulSteamIDOwner;
+}
+
+struct winRemoteStorageGetPublishedFileDetailsResult_t_9748 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID;
+ AppId_t m_nConsumerAppID;
+ char m_rgchTitle[129];
+ char m_rgchDescription[8000];
+ UGCHandle_t m_hFile;
+ UGCHandle_t m_hPreviewFile;
+ uint64 m_ulSteamIDOwner;
+ uint32 m_rtimeCreated;
+ uint32 m_rtimeUpdated;
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[1025];
+ bool m_bTagsTruncated;
+ char m_pchFileName[260];
+ int32 m_nFileSize;
+ int32 m_nPreviewFileSize;
+ char m_rgchURL[256];
+ EWorkshopFileType m_eFileType;
+ bool m_bAcceptedForUse;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageGetPublishedFileDetailsResult_t_9748(void *l, void *w)
+{
+ RemoteStorageGetPublishedFileDetailsResult_t *lin = (RemoteStorageGetPublishedFileDetailsResult_t *)l;
+ struct winRemoteStorageGetPublishedFileDetailsResult_t_9748 *win = (struct winRemoteStorageGetPublishedFileDetailsResult_t_9748 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_nCreatorAppID = lin->m_nCreatorAppID;
+ win->m_nConsumerAppID = lin->m_nConsumerAppID;
+ memcpy(win->m_rgchTitle, lin->m_rgchTitle, sizeof(win->m_rgchTitle));
+ memcpy(win->m_rgchDescription, lin->m_rgchDescription, sizeof(win->m_rgchDescription));
+ win->m_hFile = lin->m_hFile;
+ win->m_hPreviewFile = lin->m_hPreviewFile;
+ win->m_ulSteamIDOwner = lin->m_ulSteamIDOwner;
+ win->m_rtimeCreated = lin->m_rtimeCreated;
+ win->m_rtimeUpdated = lin->m_rtimeUpdated;
+ win->m_eVisibility = lin->m_eVisibility;
+ win->m_bBanned = lin->m_bBanned;
+ memcpy(win->m_rgchTags, lin->m_rgchTags, sizeof(win->m_rgchTags));
+ win->m_bTagsTruncated = lin->m_bTagsTruncated;
+ memcpy(win->m_pchFileName, lin->m_pchFileName, sizeof(win->m_pchFileName));
+ win->m_nFileSize = lin->m_nFileSize;
+ win->m_nPreviewFileSize = lin->m_nPreviewFileSize;
+ memcpy(win->m_rgchURL, lin->m_rgchURL, sizeof(win->m_rgchURL));
+ win->m_eFileType = lin->m_eFileType;
+ win->m_bAcceptedForUse = lin->m_bAcceptedForUse;
+}
+
+struct winRemoteStorageEnumerateWorkshopFilesResult_t_620 {
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[50];
+ float m_rgScore[50];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageEnumerateWorkshopFilesResult_t_620(void *l, void *w)
+{
+ RemoteStorageEnumerateWorkshopFilesResult_t *lin = (RemoteStorageEnumerateWorkshopFilesResult_t *)l;
+ struct winRemoteStorageEnumerateWorkshopFilesResult_t_620 *win = (struct winRemoteStorageEnumerateWorkshopFilesResult_t_620 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nResultsReturned = lin->m_nResultsReturned;
+ win->m_nTotalResultCount = lin->m_nTotalResultCount;
+ memcpy(win->m_rgPublishedFileId, lin->m_rgPublishedFileId, sizeof(win->m_rgPublishedFileId));
+ memcpy(win->m_rgScore, lin->m_rgScore, sizeof(win->m_rgScore));
+ win->m_nAppId = lin->m_nAppId;
+ win->m_unStartIndex = lin->m_unStartIndex;
+}
+
+struct winRemoteStorageGetPublishedItemVoteDetailsResult_t_28 {
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageGetPublishedItemVoteDetailsResult_t_28(void *l, void *w)
+{
+ RemoteStorageGetPublishedItemVoteDetailsResult_t *lin = (RemoteStorageGetPublishedItemVoteDetailsResult_t *)l;
+ struct winRemoteStorageGetPublishedItemVoteDetailsResult_t_28 *win = (struct winRemoteStorageGetPublishedItemVoteDetailsResult_t_28 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_unPublishedFileId = lin->m_unPublishedFileId;
+ win->m_nVotesFor = lin->m_nVotesFor;
+ win->m_nVotesAgainst = lin->m_nVotesAgainst;
+ win->m_nReports = lin->m_nReports;
+ win->m_fScore = lin->m_fScore;
+}
+
+struct winRemoteStoragePublishedFileSubscribed_t_12 {
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nAppID;
+} __attribute__ ((ms_struct));
+void cb_RemoteStoragePublishedFileSubscribed_t_12(void *l, void *w)
+{
+ RemoteStoragePublishedFileSubscribed_t *lin = (RemoteStoragePublishedFileSubscribed_t *)l;
+ struct winRemoteStoragePublishedFileSubscribed_t_12 *win = (struct winRemoteStoragePublishedFileSubscribed_t_12 *)w;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_nAppID = lin->m_nAppID;
+}
+
+struct winRemoteStoragePublishedFileUnsubscribed_t_12 {
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nAppID;
+} __attribute__ ((ms_struct));
+void cb_RemoteStoragePublishedFileUnsubscribed_t_12(void *l, void *w)
+{
+ RemoteStoragePublishedFileUnsubscribed_t *lin = (RemoteStoragePublishedFileUnsubscribed_t *)l;
+ struct winRemoteStoragePublishedFileUnsubscribed_t_12 *win = (struct winRemoteStoragePublishedFileUnsubscribed_t_12 *)w;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_nAppID = lin->m_nAppID;
+}
+
+struct winRemoteStoragePublishedFileDeleted_t_12 {
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nAppID;
+} __attribute__ ((ms_struct));
+void cb_RemoteStoragePublishedFileDeleted_t_12(void *l, void *w)
+{
+ RemoteStoragePublishedFileDeleted_t *lin = (RemoteStoragePublishedFileDeleted_t *)l;
+ struct winRemoteStoragePublishedFileDeleted_t_12 *win = (struct winRemoteStoragePublishedFileDeleted_t_12 *)w;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_nAppID = lin->m_nAppID;
+}
+
+struct winRemoteStorageUpdateUserPublishedItemVoteResult_t_12 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageUpdateUserPublishedItemVoteResult_t_12(void *l, void *w)
+{
+ RemoteStorageUpdateUserPublishedItemVoteResult_t *lin = (RemoteStorageUpdateUserPublishedItemVoteResult_t *)l;
+ struct winRemoteStorageUpdateUserPublishedItemVoteResult_t_12 *win = (struct winRemoteStorageUpdateUserPublishedItemVoteResult_t_12 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+}
+
+struct winRemoteStorageUserVoteDetails_t_16 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ EWorkshopVote m_eVote;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageUserVoteDetails_t_16(void *l, void *w)
+{
+ RemoteStorageUserVoteDetails_t *lin = (RemoteStorageUserVoteDetails_t *)l;
+ struct winRemoteStorageUserVoteDetails_t_16 *win = (struct winRemoteStorageUserVoteDetails_t_16 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_eVote = lin->m_eVote;
+}
+
+struct winRemoteStorageEnumerateUserSharedWorkshopFilesResult_t_412 {
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[50];
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageEnumerateUserSharedWorkshopFilesResult_t_412(void *l, void *w)
+{
+ RemoteStorageEnumerateUserSharedWorkshopFilesResult_t *lin = (RemoteStorageEnumerateUserSharedWorkshopFilesResult_t *)l;
+ struct winRemoteStorageEnumerateUserSharedWorkshopFilesResult_t_412 *win = (struct winRemoteStorageEnumerateUserSharedWorkshopFilesResult_t_412 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nResultsReturned = lin->m_nResultsReturned;
+ win->m_nTotalResultCount = lin->m_nTotalResultCount;
+ memcpy(win->m_rgPublishedFileId, lin->m_rgPublishedFileId, sizeof(win->m_rgPublishedFileId));
+}
+
+struct winRemoteStorageSetUserPublishedFileActionResult_t_16 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ EWorkshopFileAction m_eAction;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageSetUserPublishedFileActionResult_t_16(void *l, void *w)
+{
+ RemoteStorageSetUserPublishedFileActionResult_t *lin = (RemoteStorageSetUserPublishedFileActionResult_t *)l;
+ struct winRemoteStorageSetUserPublishedFileActionResult_t_16 *win = (struct winRemoteStorageSetUserPublishedFileActionResult_t_16 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_eAction = lin->m_eAction;
+}
+
+struct winRemoteStorageEnumeratePublishedFilesByUserActionResult_t_616 {
+ EResult m_eResult;
+ EWorkshopFileAction m_eAction;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[50];
+ uint32 m_rgRTimeUpdated[50];
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageEnumeratePublishedFilesByUserActionResult_t_616(void *l, void *w)
+{
+ RemoteStorageEnumeratePublishedFilesByUserActionResult_t *lin = (RemoteStorageEnumeratePublishedFilesByUserActionResult_t *)l;
+ struct winRemoteStorageEnumeratePublishedFilesByUserActionResult_t_616 *win = (struct winRemoteStorageEnumeratePublishedFilesByUserActionResult_t_616 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_eAction = lin->m_eAction;
+ win->m_nResultsReturned = lin->m_nResultsReturned;
+ win->m_nTotalResultCount = lin->m_nTotalResultCount;
+ memcpy(win->m_rgPublishedFileId, lin->m_rgPublishedFileId, sizeof(win->m_rgPublishedFileId));
+ memcpy(win->m_rgRTimeUpdated, lin->m_rgRTimeUpdated, sizeof(win->m_rgRTimeUpdated));
+}
+
+struct winRemoteStoragePublishFileProgress_t_12 {
+ double m_dPercentFile;
+ bool m_bPreview;
+} __attribute__ ((ms_struct));
+void cb_RemoteStoragePublishFileProgress_t_12(void *l, void *w)
+{
+ RemoteStoragePublishFileProgress_t *lin = (RemoteStoragePublishFileProgress_t *)l;
+ struct winRemoteStoragePublishFileProgress_t_12 *win = (struct winRemoteStoragePublishFileProgress_t_12 *)w;
+ win->m_dPercentFile = lin->m_dPercentFile;
+ win->m_bPreview = lin->m_bPreview;
+}
+
+struct winRemoteStoragePublishedFileUpdated_t_20 {
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nAppID;
+ uint64 m_ulUnused;
+} __attribute__ ((ms_struct));
+void cb_RemoteStoragePublishedFileUpdated_t_20(void *l, void *w)
+{
+ RemoteStoragePublishedFileUpdated_t *lin = (RemoteStoragePublishedFileUpdated_t *)l;
+ struct winRemoteStoragePublishedFileUpdated_t_20 *win = (struct winRemoteStoragePublishedFileUpdated_t_20 *)w;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_nAppID = lin->m_nAppID;
+ win->m_ulUnused = lin->m_ulUnused;
+}
+
+struct winRemoteStorageFileWriteAsyncComplete_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageFileWriteAsyncComplete_t_4(void *l, void *w)
+{
+ RemoteStorageFileWriteAsyncComplete_t *lin = (RemoteStorageFileWriteAsyncComplete_t *)l;
+ struct winRemoteStorageFileWriteAsyncComplete_t_4 *win = (struct winRemoteStorageFileWriteAsyncComplete_t_4 *)w;
+ win->m_eResult = lin->m_eResult;
+}
+
+struct winRemoteStorageFileReadAsyncComplete_t_20 {
+ SteamAPICall_t m_hFileReadAsync;
+ EResult m_eResult;
+ uint32 m_nOffset;
+ uint32 m_cubRead;
+} __attribute__ ((ms_struct));
+void cb_RemoteStorageFileReadAsyncComplete_t_20(void *l, void *w)
+{
+ RemoteStorageFileReadAsyncComplete_t *lin = (RemoteStorageFileReadAsyncComplete_t *)l;
+ struct winRemoteStorageFileReadAsyncComplete_t_20 *win = (struct winRemoteStorageFileReadAsyncComplete_t_20 *)w;
+ win->m_hFileReadAsync = lin->m_hFileReadAsync;
+ win->m_eResult = lin->m_eResult;
+ win->m_nOffset = lin->m_nOffset;
+ win->m_cubRead = lin->m_cubRead;
+}
+
+struct winUserStatsReceived_t_20 {
+ uint64 m_nGameID;
+ EResult m_eResult;
+ CSteamID m_steamIDUser;
+} __attribute__ ((ms_struct));
+void cb_UserStatsReceived_t_20(void *l, void *w)
+{
+ UserStatsReceived_t *lin = (UserStatsReceived_t *)l;
+ struct winUserStatsReceived_t_20 *win = (struct winUserStatsReceived_t_20 *)w;
+ win->m_nGameID = lin->m_nGameID;
+ win->m_eResult = lin->m_eResult;
+ win->m_steamIDUser = lin->m_steamIDUser;
+}
+
+struct winUserStatsStored_t_12 {
+ uint64 m_nGameID;
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_UserStatsStored_t_12(void *l, void *w)
+{
+ UserStatsStored_t *lin = (UserStatsStored_t *)l;
+ struct winUserStatsStored_t_12 *win = (struct winUserStatsStored_t_12 *)w;
+ win->m_nGameID = lin->m_nGameID;
+ win->m_eResult = lin->m_eResult;
+}
+
+struct winUserAchievementStored_t_148 {
+ uint64 m_nGameID;
+ bool m_bGroupAchievement;
+ char m_rgchAchievementName[128];
+ uint32 m_nCurProgress;
+ uint32 m_nMaxProgress;
+} __attribute__ ((ms_struct));
+void cb_UserAchievementStored_t_148(void *l, void *w)
+{
+ UserAchievementStored_t *lin = (UserAchievementStored_t *)l;
+ struct winUserAchievementStored_t_148 *win = (struct winUserAchievementStored_t_148 *)w;
+ win->m_nGameID = lin->m_nGameID;
+ win->m_bGroupAchievement = lin->m_bGroupAchievement;
+ memcpy(win->m_rgchAchievementName, lin->m_rgchAchievementName, sizeof(win->m_rgchAchievementName));
+ win->m_nCurProgress = lin->m_nCurProgress;
+ win->m_nMaxProgress = lin->m_nMaxProgress;
+}
+
+struct winLeaderboardFindResult_t_12 {
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ uint8 m_bLeaderboardFound;
+} __attribute__ ((ms_struct));
+void cb_LeaderboardFindResult_t_12(void *l, void *w)
+{
+ LeaderboardFindResult_t *lin = (LeaderboardFindResult_t *)l;
+ struct winLeaderboardFindResult_t_12 *win = (struct winLeaderboardFindResult_t_12 *)w;
+ win->m_hSteamLeaderboard = lin->m_hSteamLeaderboard;
+ win->m_bLeaderboardFound = lin->m_bLeaderboardFound;
+}
+
+struct winLeaderboardScoresDownloaded_t_20 {
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries;
+ int m_cEntryCount;
+} __attribute__ ((ms_struct));
+void cb_LeaderboardScoresDownloaded_t_20(void *l, void *w)
+{
+ LeaderboardScoresDownloaded_t *lin = (LeaderboardScoresDownloaded_t *)l;
+ struct winLeaderboardScoresDownloaded_t_20 *win = (struct winLeaderboardScoresDownloaded_t_20 *)w;
+ win->m_hSteamLeaderboard = lin->m_hSteamLeaderboard;
+ win->m_hSteamLeaderboardEntries = lin->m_hSteamLeaderboardEntries;
+ win->m_cEntryCount = lin->m_cEntryCount;
+}
+
+struct winLeaderboardScoreUploaded_t_28 {
+ uint8 m_bSuccess;
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ int32 m_nScore;
+ uint8 m_bScoreChanged;
+ int m_nGlobalRankNew;
+ int m_nGlobalRankPrevious;
+} __attribute__ ((ms_struct));
+void cb_LeaderboardScoreUploaded_t_28(void *l, void *w)
+{
+ LeaderboardScoreUploaded_t *lin = (LeaderboardScoreUploaded_t *)l;
+ struct winLeaderboardScoreUploaded_t_28 *win = (struct winLeaderboardScoreUploaded_t_28 *)w;
+ win->m_bSuccess = lin->m_bSuccess;
+ win->m_hSteamLeaderboard = lin->m_hSteamLeaderboard;
+ win->m_nScore = lin->m_nScore;
+ win->m_bScoreChanged = lin->m_bScoreChanged;
+ win->m_nGlobalRankNew = lin->m_nGlobalRankNew;
+ win->m_nGlobalRankPrevious = lin->m_nGlobalRankPrevious;
+}
+
+struct winNumberOfCurrentPlayers_t_8 {
+ uint8 m_bSuccess;
+ int32 m_cPlayers;
+} __attribute__ ((ms_struct));
+void cb_NumberOfCurrentPlayers_t_8(void *l, void *w)
+{
+ NumberOfCurrentPlayers_t *lin = (NumberOfCurrentPlayers_t *)l;
+ struct winNumberOfCurrentPlayers_t_8 *win = (struct winNumberOfCurrentPlayers_t_8 *)w;
+ win->m_bSuccess = lin->m_bSuccess;
+ win->m_cPlayers = lin->m_cPlayers;
+}
+
+struct winUserStatsUnloaded_t_8 {
+ CSteamID m_steamIDUser;
+} __attribute__ ((ms_struct));
+void cb_UserStatsUnloaded_t_8(void *l, void *w)
+{
+ UserStatsUnloaded_t *lin = (UserStatsUnloaded_t *)l;
+ struct winUserStatsUnloaded_t_8 *win = (struct winUserStatsUnloaded_t_8 *)w;
+ win->m_steamIDUser = lin->m_steamIDUser;
+}
+
+struct winUserAchievementIconFetched_t_144 {
+ CGameID m_nGameID;
+ char m_rgchAchievementName[128];
+ bool m_bAchieved;
+ int m_nIconHandle;
+} __attribute__ ((ms_struct));
+void cb_UserAchievementIconFetched_t_144(void *l, void *w)
+{
+ UserAchievementIconFetched_t *lin = (UserAchievementIconFetched_t *)l;
+ struct winUserAchievementIconFetched_t_144 *win = (struct winUserAchievementIconFetched_t_144 *)w;
+ win->m_nGameID = lin->m_nGameID;
+ memcpy(win->m_rgchAchievementName, lin->m_rgchAchievementName, sizeof(win->m_rgchAchievementName));
+ win->m_bAchieved = lin->m_bAchieved;
+ win->m_nIconHandle = lin->m_nIconHandle;
+}
+
+struct winGlobalAchievementPercentagesReady_t_12 {
+ uint64 m_nGameID;
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_GlobalAchievementPercentagesReady_t_12(void *l, void *w)
+{
+ GlobalAchievementPercentagesReady_t *lin = (GlobalAchievementPercentagesReady_t *)l;
+ struct winGlobalAchievementPercentagesReady_t_12 *win = (struct winGlobalAchievementPercentagesReady_t_12 *)w;
+ win->m_nGameID = lin->m_nGameID;
+ win->m_eResult = lin->m_eResult;
+}
+
+struct winLeaderboardUGCSet_t_12 {
+ EResult m_eResult;
+ SteamLeaderboard_t m_hSteamLeaderboard;
+} __attribute__ ((ms_struct));
+void cb_LeaderboardUGCSet_t_12(void *l, void *w)
+{
+ LeaderboardUGCSet_t *lin = (LeaderboardUGCSet_t *)l;
+ struct winLeaderboardUGCSet_t_12 *win = (struct winLeaderboardUGCSet_t_12 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_hSteamLeaderboard = lin->m_hSteamLeaderboard;
+}
+
+struct winPS3TrophiesInstalled_t_20 {
+ uint64 m_nGameID;
+ EResult m_eResult;
+ uint64 m_ulRequiredDiskSpace;
+} __attribute__ ((ms_struct));
+void cb_PS3TrophiesInstalled_t_20(void *l, void *w)
+{
+ PS3TrophiesInstalled_t *lin = (PS3TrophiesInstalled_t *)l;
+ struct winPS3TrophiesInstalled_t_20 *win = (struct winPS3TrophiesInstalled_t_20 *)w;
+ win->m_nGameID = lin->m_nGameID;
+ win->m_eResult = lin->m_eResult;
+ win->m_ulRequiredDiskSpace = lin->m_ulRequiredDiskSpace;
+}
+
+struct winGlobalStatsReceived_t_12 {
+ uint64 m_nGameID;
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_GlobalStatsReceived_t_12(void *l, void *w)
+{
+ GlobalStatsReceived_t *lin = (GlobalStatsReceived_t *)l;
+ struct winGlobalStatsReceived_t_12 *win = (struct winGlobalStatsReceived_t_12 *)w;
+ win->m_nGameID = lin->m_nGameID;
+ win->m_eResult = lin->m_eResult;
+}
+
+struct winDlcInstalled_t_4 {
+ AppId_t m_nAppID;
+} __attribute__ ((ms_struct));
+void cb_DlcInstalled_t_4(void *l, void *w)
+{
+ DlcInstalled_t *lin = (DlcInstalled_t *)l;
+ struct winDlcInstalled_t_4 *win = (struct winDlcInstalled_t_4 *)w;
+ win->m_nAppID = lin->m_nAppID;
+}
+
+struct winRegisterActivationCodeResponse_t_8 {
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered;
+} __attribute__ ((ms_struct));
+void cb_RegisterActivationCodeResponse_t_8(void *l, void *w)
+{
+ RegisterActivationCodeResponse_t *lin = (RegisterActivationCodeResponse_t *)l;
+ struct winRegisterActivationCodeResponse_t_8 *win = (struct winRegisterActivationCodeResponse_t_8 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_unPackageRegistered = lin->m_unPackageRegistered;
+}
+
+struct winNewLaunchQueryParameters_t_1 {
+} __attribute__ ((ms_struct));
+void cb_NewLaunchQueryParameters_t_1(void *l, void *w)
+{
+ NewLaunchQueryParameters_t *lin = (NewLaunchQueryParameters_t *)l;
+ struct winNewLaunchQueryParameters_t_1 *win = (struct winNewLaunchQueryParameters_t_1 *)w;
+}
+
+struct winAppProofOfPurchaseKeyResponse_t_252 {
+ EResult m_eResult;
+ uint32 m_nAppID;
+ uint32 m_cchKeyLength;
+ char m_rgchKey[240];
+} __attribute__ ((ms_struct));
+void cb_AppProofOfPurchaseKeyResponse_t_252(void *l, void *w)
+{
+ AppProofOfPurchaseKeyResponse_t *lin = (AppProofOfPurchaseKeyResponse_t *)l;
+ struct winAppProofOfPurchaseKeyResponse_t_252 *win = (struct winAppProofOfPurchaseKeyResponse_t_252 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nAppID = lin->m_nAppID;
+ win->m_cchKeyLength = lin->m_cchKeyLength;
+ memcpy(win->m_rgchKey, lin->m_rgchKey, sizeof(win->m_rgchKey));
+}
+
+struct winFileDetailsResult_t_36 {
+ EResult m_eResult;
+ uint64 m_ulFileSize;
+ uint8 m_FileSHA[20];
+ uint32 m_unFlags;
+} __attribute__ ((ms_struct));
+void cb_FileDetailsResult_t_36(void *l, void *w)
+{
+ FileDetailsResult_t *lin = (FileDetailsResult_t *)l;
+ struct winFileDetailsResult_t_36 *win = (struct winFileDetailsResult_t_36 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_ulFileSize = lin->m_ulFileSize;
+ memcpy(win->m_FileSHA, lin->m_FileSHA, sizeof(win->m_FileSHA));
+ win->m_unFlags = lin->m_unFlags;
+}
+
+struct winP2PSessionRequest_t_8 {
+ CSteamID m_steamIDRemote;
+} __attribute__ ((ms_struct));
+void cb_P2PSessionRequest_t_8(void *l, void *w)
+{
+ P2PSessionRequest_t *lin = (P2PSessionRequest_t *)l;
+ struct winP2PSessionRequest_t_8 *win = (struct winP2PSessionRequest_t_8 *)w;
+ win->m_steamIDRemote = lin->m_steamIDRemote;
+}
+
+struct winP2PSessionConnectFail_t_9 {
+ CSteamID m_steamIDRemote;
+ uint8 m_eP2PSessionError;
+} __attribute__ ((ms_struct));
+void cb_P2PSessionConnectFail_t_9(void *l, void *w)
+{
+ P2PSessionConnectFail_t *lin = (P2PSessionConnectFail_t *)l;
+ struct winP2PSessionConnectFail_t_9 *win = (struct winP2PSessionConnectFail_t_9 *)w;
+ win->m_steamIDRemote = lin->m_steamIDRemote;
+ win->m_eP2PSessionError = lin->m_eP2PSessionError;
+}
+
+struct winSocketStatusCallback_t_20 {
+ SNetSocket_t m_hSocket;
+ SNetListenSocket_t m_hListenSocket;
+ CSteamID m_steamIDRemote;
+ int m_eSNetSocketState;
+} __attribute__ ((ms_struct));
+void cb_SocketStatusCallback_t_20(void *l, void *w)
+{
+ SocketStatusCallback_t *lin = (SocketStatusCallback_t *)l;
+ struct winSocketStatusCallback_t_20 *win = (struct winSocketStatusCallback_t_20 *)w;
+ win->m_hSocket = lin->m_hSocket;
+ win->m_hListenSocket = lin->m_hListenSocket;
+ win->m_steamIDRemote = lin->m_steamIDRemote;
+ win->m_eSNetSocketState = lin->m_eSNetSocketState;
+}
+
+struct winScreenshotReady_t_8 {
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_ScreenshotReady_t_8(void *l, void *w)
+{
+ ScreenshotReady_t *lin = (ScreenshotReady_t *)l;
+ struct winScreenshotReady_t_8 *win = (struct winScreenshotReady_t_8 *)w;
+ win->m_hLocal = lin->m_hLocal;
+ win->m_eResult = lin->m_eResult;
+}
+
+struct winScreenshotRequested_t_1 {
+} __attribute__ ((ms_struct));
+void cb_ScreenshotRequested_t_1(void *l, void *w)
+{
+ ScreenshotRequested_t *lin = (ScreenshotRequested_t *)l;
+ struct winScreenshotRequested_t_1 *win = (struct winScreenshotRequested_t_1 *)w;
+}
+
+struct winPlaybackStatusHasChanged_t_1 {
+} __attribute__ ((ms_struct));
+void cb_PlaybackStatusHasChanged_t_1(void *l, void *w)
+{
+ PlaybackStatusHasChanged_t *lin = (PlaybackStatusHasChanged_t *)l;
+ struct winPlaybackStatusHasChanged_t_1 *win = (struct winPlaybackStatusHasChanged_t_1 *)w;
+}
+
+struct winVolumeHasChanged_t_4 {
+ float m_flNewVolume;
+} __attribute__ ((ms_struct));
+void cb_VolumeHasChanged_t_4(void *l, void *w)
+{
+ VolumeHasChanged_t *lin = (VolumeHasChanged_t *)l;
+ struct winVolumeHasChanged_t_4 *win = (struct winVolumeHasChanged_t_4 *)w;
+ win->m_flNewVolume = lin->m_flNewVolume;
+}
+
+struct winMusicPlayerRemoteWillActivate_t_1 {
+} __attribute__ ((ms_struct));
+void cb_MusicPlayerRemoteWillActivate_t_1(void *l, void *w)
+{
+ MusicPlayerRemoteWillActivate_t *lin = (MusicPlayerRemoteWillActivate_t *)l;
+ struct winMusicPlayerRemoteWillActivate_t_1 *win = (struct winMusicPlayerRemoteWillActivate_t_1 *)w;
+}
+
+struct winMusicPlayerRemoteWillDeactivate_t_1 {
+} __attribute__ ((ms_struct));
+void cb_MusicPlayerRemoteWillDeactivate_t_1(void *l, void *w)
+{
+ MusicPlayerRemoteWillDeactivate_t *lin = (MusicPlayerRemoteWillDeactivate_t *)l;
+ struct winMusicPlayerRemoteWillDeactivate_t_1 *win = (struct winMusicPlayerRemoteWillDeactivate_t_1 *)w;
+}
+
+struct winMusicPlayerRemoteToFront_t_1 {
+} __attribute__ ((ms_struct));
+void cb_MusicPlayerRemoteToFront_t_1(void *l, void *w)
+{
+ MusicPlayerRemoteToFront_t *lin = (MusicPlayerRemoteToFront_t *)l;
+ struct winMusicPlayerRemoteToFront_t_1 *win = (struct winMusicPlayerRemoteToFront_t_1 *)w;
+}
+
+struct winMusicPlayerWillQuit_t_1 {
+} __attribute__ ((ms_struct));
+void cb_MusicPlayerWillQuit_t_1(void *l, void *w)
+{
+ MusicPlayerWillQuit_t *lin = (MusicPlayerWillQuit_t *)l;
+ struct winMusicPlayerWillQuit_t_1 *win = (struct winMusicPlayerWillQuit_t_1 *)w;
+}
+
+struct winMusicPlayerWantsPlay_t_1 {
+} __attribute__ ((ms_struct));
+void cb_MusicPlayerWantsPlay_t_1(void *l, void *w)
+{
+ MusicPlayerWantsPlay_t *lin = (MusicPlayerWantsPlay_t *)l;
+ struct winMusicPlayerWantsPlay_t_1 *win = (struct winMusicPlayerWantsPlay_t_1 *)w;
+}
+
+struct winMusicPlayerWantsPause_t_1 {
+} __attribute__ ((ms_struct));
+void cb_MusicPlayerWantsPause_t_1(void *l, void *w)
+{
+ MusicPlayerWantsPause_t *lin = (MusicPlayerWantsPause_t *)l;
+ struct winMusicPlayerWantsPause_t_1 *win = (struct winMusicPlayerWantsPause_t_1 *)w;
+}
+
+struct winMusicPlayerWantsPlayPrevious_t_1 {
+} __attribute__ ((ms_struct));
+void cb_MusicPlayerWantsPlayPrevious_t_1(void *l, void *w)
+{
+ MusicPlayerWantsPlayPrevious_t *lin = (MusicPlayerWantsPlayPrevious_t *)l;
+ struct winMusicPlayerWantsPlayPrevious_t_1 *win = (struct winMusicPlayerWantsPlayPrevious_t_1 *)w;
+}
+
+struct winMusicPlayerWantsPlayNext_t_1 {
+} __attribute__ ((ms_struct));
+void cb_MusicPlayerWantsPlayNext_t_1(void *l, void *w)
+{
+ MusicPlayerWantsPlayNext_t *lin = (MusicPlayerWantsPlayNext_t *)l;
+ struct winMusicPlayerWantsPlayNext_t_1 *win = (struct winMusicPlayerWantsPlayNext_t_1 *)w;
+}
+
+struct winMusicPlayerWantsShuffled_t_1 {
+ bool m_bShuffled;
+} __attribute__ ((ms_struct));
+void cb_MusicPlayerWantsShuffled_t_1(void *l, void *w)
+{
+ MusicPlayerWantsShuffled_t *lin = (MusicPlayerWantsShuffled_t *)l;
+ struct winMusicPlayerWantsShuffled_t_1 *win = (struct winMusicPlayerWantsShuffled_t_1 *)w;
+ win->m_bShuffled = lin->m_bShuffled;
+}
+
+struct winMusicPlayerWantsLooped_t_1 {
+ bool m_bLooped;
+} __attribute__ ((ms_struct));
+void cb_MusicPlayerWantsLooped_t_1(void *l, void *w)
+{
+ MusicPlayerWantsLooped_t *lin = (MusicPlayerWantsLooped_t *)l;
+ struct winMusicPlayerWantsLooped_t_1 *win = (struct winMusicPlayerWantsLooped_t_1 *)w;
+ win->m_bLooped = lin->m_bLooped;
+}
+
+struct winMusicPlayerWantsVolume_t_4 {
+ float m_flNewVolume;
+} __attribute__ ((ms_struct));
+void cb_MusicPlayerWantsVolume_t_4(void *l, void *w)
+{
+ MusicPlayerWantsVolume_t *lin = (MusicPlayerWantsVolume_t *)l;
+ struct winMusicPlayerWantsVolume_t_4 *win = (struct winMusicPlayerWantsVolume_t_4 *)w;
+ win->m_flNewVolume = lin->m_flNewVolume;
+}
+
+struct winMusicPlayerSelectsQueueEntry_t_4 {
+ int nID;
+} __attribute__ ((ms_struct));
+void cb_MusicPlayerSelectsQueueEntry_t_4(void *l, void *w)
+{
+ MusicPlayerSelectsQueueEntry_t *lin = (MusicPlayerSelectsQueueEntry_t *)l;
+ struct winMusicPlayerSelectsQueueEntry_t_4 *win = (struct winMusicPlayerSelectsQueueEntry_t_4 *)w;
+ win->nID = lin->nID;
+}
+
+struct winMusicPlayerSelectsPlaylistEntry_t_4 {
+ int nID;
+} __attribute__ ((ms_struct));
+void cb_MusicPlayerSelectsPlaylistEntry_t_4(void *l, void *w)
+{
+ MusicPlayerSelectsPlaylistEntry_t *lin = (MusicPlayerSelectsPlaylistEntry_t *)l;
+ struct winMusicPlayerSelectsPlaylistEntry_t_4 *win = (struct winMusicPlayerSelectsPlaylistEntry_t_4 *)w;
+ win->nID = lin->nID;
+}
+
+struct winMusicPlayerWantsPlayingRepeatStatus_t_4 {
+ int m_nPlayingRepeatStatus;
+} __attribute__ ((ms_struct));
+void cb_MusicPlayerWantsPlayingRepeatStatus_t_4(void *l, void *w)
+{
+ MusicPlayerWantsPlayingRepeatStatus_t *lin = (MusicPlayerWantsPlayingRepeatStatus_t *)l;
+ struct winMusicPlayerWantsPlayingRepeatStatus_t_4 *win = (struct winMusicPlayerWantsPlayingRepeatStatus_t_4 *)w;
+ win->m_nPlayingRepeatStatus = lin->m_nPlayingRepeatStatus;
+}
+
+struct winHTTPRequestCompleted_t_24 {
+ HTTPRequestHandle m_hRequest;
+ uint64 m_ulContextValue;
+ bool m_bRequestSuccessful;
+ EHTTPStatusCode m_eStatusCode;
+ uint32 m_unBodySize;
+} __attribute__ ((ms_struct));
+void cb_HTTPRequestCompleted_t_24(void *l, void *w)
+{
+ HTTPRequestCompleted_t *lin = (HTTPRequestCompleted_t *)l;
+ struct winHTTPRequestCompleted_t_24 *win = (struct winHTTPRequestCompleted_t_24 *)w;
+ win->m_hRequest = lin->m_hRequest;
+ win->m_ulContextValue = lin->m_ulContextValue;
+ win->m_bRequestSuccessful = lin->m_bRequestSuccessful;
+ win->m_eStatusCode = lin->m_eStatusCode;
+ win->m_unBodySize = lin->m_unBodySize;
+}
+
+struct winHTTPRequestHeadersReceived_t_12 {
+ HTTPRequestHandle m_hRequest;
+ uint64 m_ulContextValue;
+} __attribute__ ((ms_struct));
+void cb_HTTPRequestHeadersReceived_t_12(void *l, void *w)
+{
+ HTTPRequestHeadersReceived_t *lin = (HTTPRequestHeadersReceived_t *)l;
+ struct winHTTPRequestHeadersReceived_t_12 *win = (struct winHTTPRequestHeadersReceived_t_12 *)w;
+ win->m_hRequest = lin->m_hRequest;
+ win->m_ulContextValue = lin->m_ulContextValue;
+}
+
+struct winHTTPRequestDataReceived_t_20 {
+ HTTPRequestHandle m_hRequest;
+ uint64 m_ulContextValue;
+ uint32 m_cOffset;
+ uint32 m_cBytesReceived;
+} __attribute__ ((ms_struct));
+void cb_HTTPRequestDataReceived_t_20(void *l, void *w)
+{
+ HTTPRequestDataReceived_t *lin = (HTTPRequestDataReceived_t *)l;
+ struct winHTTPRequestDataReceived_t_20 *win = (struct winHTTPRequestDataReceived_t_20 *)w;
+ win->m_hRequest = lin->m_hRequest;
+ win->m_ulContextValue = lin->m_ulContextValue;
+ win->m_cOffset = lin->m_cOffset;
+ win->m_cBytesReceived = lin->m_cBytesReceived;
+}
+
+struct winSteamUGCQueryCompleted_t_24 {
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData;
+} __attribute__ ((ms_struct));
+void cb_SteamUGCQueryCompleted_t_24(void *l, void *w)
+{
+ SteamUGCQueryCompleted_t *lin = (SteamUGCQueryCompleted_t *)l;
+ struct winSteamUGCQueryCompleted_t_24 *win = (struct winSteamUGCQueryCompleted_t_24 *)w;
+ win->m_handle = lin->m_handle;
+ win->m_eResult = lin->m_eResult;
+ win->m_unNumResultsReturned = lin->m_unNumResultsReturned;
+ win->m_unTotalMatchingResults = lin->m_unTotalMatchingResults;
+ win->m_bCachedData = lin->m_bCachedData;
+}
+
+struct winSteamUGCRequestUGCDetailsResult_t_9768 {
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData;
+} __attribute__ ((ms_struct));
+void cb_SteamUGCRequestUGCDetailsResult_t_9768(void *l, void *w)
+{
+ SteamUGCRequestUGCDetailsResult_t *lin = (SteamUGCRequestUGCDetailsResult_t *)l;
+ struct winSteamUGCRequestUGCDetailsResult_t_9768 *win = (struct winSteamUGCRequestUGCDetailsResult_t_9768 *)w;
+ win->m_details = lin->m_details;
+ win->m_bCachedData = lin->m_bCachedData;
+}
+
+struct winCreateItemResult_t_16 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+} __attribute__ ((ms_struct));
+void cb_CreateItemResult_t_16(void *l, void *w)
+{
+ CreateItemResult_t *lin = (CreateItemResult_t *)l;
+ struct winCreateItemResult_t_16 *win = (struct winCreateItemResult_t_16 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_bUserNeedsToAcceptWorkshopLegalAgreement = lin->m_bUserNeedsToAcceptWorkshopLegalAgreement;
+}
+
+struct winSubmitItemUpdateResult_t_16 {
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+ PublishedFileId_t m_nPublishedFileId;
+} __attribute__ ((ms_struct));
+void cb_SubmitItemUpdateResult_t_16(void *l, void *w)
+{
+ SubmitItemUpdateResult_t *lin = (SubmitItemUpdateResult_t *)l;
+ struct winSubmitItemUpdateResult_t_16 *win = (struct winSubmitItemUpdateResult_t_16 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_bUserNeedsToAcceptWorkshopLegalAgreement = lin->m_bUserNeedsToAcceptWorkshopLegalAgreement;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+}
+
+struct winItemInstalled_t_12 {
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+} __attribute__ ((ms_struct));
+void cb_ItemInstalled_t_12(void *l, void *w)
+{
+ ItemInstalled_t *lin = (ItemInstalled_t *)l;
+ struct winItemInstalled_t_12 *win = (struct winItemInstalled_t_12 *)w;
+ win->m_unAppID = lin->m_unAppID;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+}
+
+struct winDownloadItemResult_t_16 {
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_DownloadItemResult_t_16(void *l, void *w)
+{
+ DownloadItemResult_t *lin = (DownloadItemResult_t *)l;
+ struct winDownloadItemResult_t_16 *win = (struct winDownloadItemResult_t_16 *)w;
+ win->m_unAppID = lin->m_unAppID;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_eResult = lin->m_eResult;
+}
+
+struct winUserFavoriteItemsListChanged_t_16 {
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bWasAddRequest;
+} __attribute__ ((ms_struct));
+void cb_UserFavoriteItemsListChanged_t_16(void *l, void *w)
+{
+ UserFavoriteItemsListChanged_t *lin = (UserFavoriteItemsListChanged_t *)l;
+ struct winUserFavoriteItemsListChanged_t_16 *win = (struct winUserFavoriteItemsListChanged_t_16 *)w;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_eResult = lin->m_eResult;
+ win->m_bWasAddRequest = lin->m_bWasAddRequest;
+}
+
+struct winSetUserItemVoteResult_t_16 {
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVoteUp;
+} __attribute__ ((ms_struct));
+void cb_SetUserItemVoteResult_t_16(void *l, void *w)
+{
+ SetUserItemVoteResult_t *lin = (SetUserItemVoteResult_t *)l;
+ struct winSetUserItemVoteResult_t_16 *win = (struct winSetUserItemVoteResult_t_16 *)w;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_eResult = lin->m_eResult;
+ win->m_bVoteUp = lin->m_bVoteUp;
+}
+
+struct winGetUserItemVoteResult_t_16 {
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVotedUp;
+ bool m_bVotedDown;
+ bool m_bVoteSkipped;
+} __attribute__ ((ms_struct));
+void cb_GetUserItemVoteResult_t_16(void *l, void *w)
+{
+ GetUserItemVoteResult_t *lin = (GetUserItemVoteResult_t *)l;
+ struct winGetUserItemVoteResult_t_16 *win = (struct winGetUserItemVoteResult_t_16 *)w;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_eResult = lin->m_eResult;
+ win->m_bVotedUp = lin->m_bVotedUp;
+ win->m_bVotedDown = lin->m_bVotedDown;
+ win->m_bVoteSkipped = lin->m_bVoteSkipped;
+}
+
+struct winStartPlaytimeTrackingResult_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_StartPlaytimeTrackingResult_t_4(void *l, void *w)
+{
+ StartPlaytimeTrackingResult_t *lin = (StartPlaytimeTrackingResult_t *)l;
+ struct winStartPlaytimeTrackingResult_t_4 *win = (struct winStartPlaytimeTrackingResult_t_4 *)w;
+ win->m_eResult = lin->m_eResult;
+}
+
+struct winStopPlaytimeTrackingResult_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_StopPlaytimeTrackingResult_t_4(void *l, void *w)
+{
+ StopPlaytimeTrackingResult_t *lin = (StopPlaytimeTrackingResult_t *)l;
+ struct winStopPlaytimeTrackingResult_t_4 *win = (struct winStopPlaytimeTrackingResult_t_4 *)w;
+ win->m_eResult = lin->m_eResult;
+}
+
+struct winAddUGCDependencyResult_t_20 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ PublishedFileId_t m_nChildPublishedFileId;
+} __attribute__ ((ms_struct));
+void cb_AddUGCDependencyResult_t_20(void *l, void *w)
+{
+ AddUGCDependencyResult_t *lin = (AddUGCDependencyResult_t *)l;
+ struct winAddUGCDependencyResult_t_20 *win = (struct winAddUGCDependencyResult_t_20 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_nChildPublishedFileId = lin->m_nChildPublishedFileId;
+}
+
+struct winRemoveUGCDependencyResult_t_20 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ PublishedFileId_t m_nChildPublishedFileId;
+} __attribute__ ((ms_struct));
+void cb_RemoveUGCDependencyResult_t_20(void *l, void *w)
+{
+ RemoveUGCDependencyResult_t *lin = (RemoveUGCDependencyResult_t *)l;
+ struct winRemoveUGCDependencyResult_t_20 *win = (struct winRemoveUGCDependencyResult_t_20 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_nChildPublishedFileId = lin->m_nChildPublishedFileId;
+}
+
+struct winAddAppDependencyResult_t_16 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nAppID;
+} __attribute__ ((ms_struct));
+void cb_AddAppDependencyResult_t_16(void *l, void *w)
+{
+ AddAppDependencyResult_t *lin = (AddAppDependencyResult_t *)l;
+ struct winAddAppDependencyResult_t_16 *win = (struct winAddAppDependencyResult_t_16 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_nAppID = lin->m_nAppID;
+}
+
+struct winRemoveAppDependencyResult_t_16 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nAppID;
+} __attribute__ ((ms_struct));
+void cb_RemoveAppDependencyResult_t_16(void *l, void *w)
+{
+ RemoveAppDependencyResult_t *lin = (RemoveAppDependencyResult_t *)l;
+ struct winRemoveAppDependencyResult_t_16 *win = (struct winRemoveAppDependencyResult_t_16 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ win->m_nAppID = lin->m_nAppID;
+}
+
+struct winGetAppDependenciesResult_t_148 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_rgAppIDs[32];
+ uint32 m_nNumAppDependencies;
+ uint32 m_nTotalNumAppDependencies;
+} __attribute__ ((ms_struct));
+void cb_GetAppDependenciesResult_t_148(void *l, void *w)
+{
+ GetAppDependenciesResult_t *lin = (GetAppDependenciesResult_t *)l;
+ struct winGetAppDependenciesResult_t_148 *win = (struct winGetAppDependenciesResult_t_148 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+ memcpy(win->m_rgAppIDs, lin->m_rgAppIDs, sizeof(win->m_rgAppIDs));
+ win->m_nNumAppDependencies = lin->m_nNumAppDependencies;
+ win->m_nTotalNumAppDependencies = lin->m_nTotalNumAppDependencies;
+}
+
+struct winDeleteItemResult_t_12 {
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+} __attribute__ ((ms_struct));
+void cb_DeleteItemResult_t_12(void *l, void *w)
+{
+ DeleteItemResult_t *lin = (DeleteItemResult_t *)l;
+ struct winDeleteItemResult_t_12 *win = (struct winDeleteItemResult_t_12 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nPublishedFileId = lin->m_nPublishedFileId;
+}
+
+struct winSteamAppInstalled_t_4 {
+ AppId_t m_nAppID;
+} __attribute__ ((ms_struct));
+void cb_SteamAppInstalled_t_4(void *l, void *w)
+{
+ SteamAppInstalled_t *lin = (SteamAppInstalled_t *)l;
+ struct winSteamAppInstalled_t_4 *win = (struct winSteamAppInstalled_t_4 *)w;
+ win->m_nAppID = lin->m_nAppID;
+}
+
+struct winSteamAppUninstalled_t_4 {
+ AppId_t m_nAppID;
+} __attribute__ ((ms_struct));
+void cb_SteamAppUninstalled_t_4(void *l, void *w)
+{
+ SteamAppUninstalled_t *lin = (SteamAppUninstalled_t *)l;
+ struct winSteamAppUninstalled_t_4 *win = (struct winSteamAppUninstalled_t_4 *)w;
+ win->m_nAppID = lin->m_nAppID;
+}
+
+struct winHTML_BrowserReady_t_4 {
+ HHTMLBrowser unBrowserHandle;
+} __attribute__ ((ms_struct));
+void cb_HTML_BrowserReady_t_4(void *l, void *w)
+{
+ HTML_BrowserReady_t *lin = (HTML_BrowserReady_t *)l;
+ struct winHTML_BrowserReady_t_4 *win = (struct winHTML_BrowserReady_t_4 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+}
+
+struct winHTML_NeedsPaint_t_48 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pBGRA;
+ uint32 unWide;
+ uint32 unTall;
+ uint32 unUpdateX;
+ uint32 unUpdateY;
+ uint32 unUpdateWide;
+ uint32 unUpdateTall;
+ uint32 unScrollX;
+ uint32 unScrollY;
+ float flPageScale;
+ uint32 unPageSerial;
+} __attribute__ ((ms_struct));
+void cb_HTML_NeedsPaint_t_48(void *l, void *w)
+{
+ HTML_NeedsPaint_t *lin = (HTML_NeedsPaint_t *)l;
+ struct winHTML_NeedsPaint_t_48 *win = (struct winHTML_NeedsPaint_t_48 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->pBGRA = lin->pBGRA;
+ win->unWide = lin->unWide;
+ win->unTall = lin->unTall;
+ win->unUpdateX = lin->unUpdateX;
+ win->unUpdateY = lin->unUpdateY;
+ win->unUpdateWide = lin->unUpdateWide;
+ win->unUpdateTall = lin->unUpdateTall;
+ win->unScrollX = lin->unScrollX;
+ win->unScrollY = lin->unScrollY;
+ win->flPageScale = lin->flPageScale;
+ win->unPageSerial = lin->unPageSerial;
+}
+
+struct winHTML_StartRequest_t_20 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchURL;
+ const char * pchTarget;
+ const char * pchPostData;
+ bool bIsRedirect;
+} __attribute__ ((ms_struct));
+void cb_HTML_StartRequest_t_20(void *l, void *w)
+{
+ HTML_StartRequest_t *lin = (HTML_StartRequest_t *)l;
+ struct winHTML_StartRequest_t_20 *win = (struct winHTML_StartRequest_t_20 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->pchURL = lin->pchURL;
+ win->pchTarget = lin->pchTarget;
+ win->pchPostData = lin->pchPostData;
+ win->bIsRedirect = lin->bIsRedirect;
+}
+
+struct winHTML_CloseBrowser_t_4 {
+ HHTMLBrowser unBrowserHandle;
+} __attribute__ ((ms_struct));
+void cb_HTML_CloseBrowser_t_4(void *l, void *w)
+{
+ HTML_CloseBrowser_t *lin = (HTML_CloseBrowser_t *)l;
+ struct winHTML_CloseBrowser_t_4 *win = (struct winHTML_CloseBrowser_t_4 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+}
+
+struct winHTML_URLChanged_t_24 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchURL;
+ const char * pchPostData;
+ bool bIsRedirect;
+ const char * pchPageTitle;
+ bool bNewNavigation;
+} __attribute__ ((ms_struct));
+void cb_HTML_URLChanged_t_24(void *l, void *w)
+{
+ HTML_URLChanged_t *lin = (HTML_URLChanged_t *)l;
+ struct winHTML_URLChanged_t_24 *win = (struct winHTML_URLChanged_t_24 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->pchURL = lin->pchURL;
+ win->pchPostData = lin->pchPostData;
+ win->bIsRedirect = lin->bIsRedirect;
+ win->pchPageTitle = lin->pchPageTitle;
+ win->bNewNavigation = lin->bNewNavigation;
+}
+
+struct winHTML_FinishedRequest_t_12 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchURL;
+ const char * pchPageTitle;
+} __attribute__ ((ms_struct));
+void cb_HTML_FinishedRequest_t_12(void *l, void *w)
+{
+ HTML_FinishedRequest_t *lin = (HTML_FinishedRequest_t *)l;
+ struct winHTML_FinishedRequest_t_12 *win = (struct winHTML_FinishedRequest_t_12 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->pchURL = lin->pchURL;
+ win->pchPageTitle = lin->pchPageTitle;
+}
+
+struct winHTML_OpenLinkInNewTab_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchURL;
+} __attribute__ ((ms_struct));
+void cb_HTML_OpenLinkInNewTab_t_8(void *l, void *w)
+{
+ HTML_OpenLinkInNewTab_t *lin = (HTML_OpenLinkInNewTab_t *)l;
+ struct winHTML_OpenLinkInNewTab_t_8 *win = (struct winHTML_OpenLinkInNewTab_t_8 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->pchURL = lin->pchURL;
+}
+
+struct winHTML_ChangedTitle_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchTitle;
+} __attribute__ ((ms_struct));
+void cb_HTML_ChangedTitle_t_8(void *l, void *w)
+{
+ HTML_ChangedTitle_t *lin = (HTML_ChangedTitle_t *)l;
+ struct winHTML_ChangedTitle_t_8 *win = (struct winHTML_ChangedTitle_t_8 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->pchTitle = lin->pchTitle;
+}
+
+struct winHTML_SearchResults_t_12 {
+ HHTMLBrowser unBrowserHandle;
+ uint32 unResults;
+ uint32 unCurrentMatch;
+} __attribute__ ((ms_struct));
+void cb_HTML_SearchResults_t_12(void *l, void *w)
+{
+ HTML_SearchResults_t *lin = (HTML_SearchResults_t *)l;
+ struct winHTML_SearchResults_t_12 *win = (struct winHTML_SearchResults_t_12 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->unResults = lin->unResults;
+ win->unCurrentMatch = lin->unCurrentMatch;
+}
+
+struct winHTML_CanGoBackAndForward_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ bool bCanGoBack;
+ bool bCanGoForward;
+} __attribute__ ((ms_struct));
+void cb_HTML_CanGoBackAndForward_t_8(void *l, void *w)
+{
+ HTML_CanGoBackAndForward_t *lin = (HTML_CanGoBackAndForward_t *)l;
+ struct winHTML_CanGoBackAndForward_t_8 *win = (struct winHTML_CanGoBackAndForward_t_8 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->bCanGoBack = lin->bCanGoBack;
+ win->bCanGoForward = lin->bCanGoForward;
+}
+
+struct winHTML_HorizontalScroll_t_24 {
+ HHTMLBrowser unBrowserHandle;
+ uint32 unScrollMax;
+ uint32 unScrollCurrent;
+ float flPageScale;
+ bool bVisible;
+ uint32 unPageSize;
+} __attribute__ ((ms_struct));
+void cb_HTML_HorizontalScroll_t_24(void *l, void *w)
+{
+ HTML_HorizontalScroll_t *lin = (HTML_HorizontalScroll_t *)l;
+ struct winHTML_HorizontalScroll_t_24 *win = (struct winHTML_HorizontalScroll_t_24 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->unScrollMax = lin->unScrollMax;
+ win->unScrollCurrent = lin->unScrollCurrent;
+ win->flPageScale = lin->flPageScale;
+ win->bVisible = lin->bVisible;
+ win->unPageSize = lin->unPageSize;
+}
+
+struct winHTML_VerticalScroll_t_24 {
+ HHTMLBrowser unBrowserHandle;
+ uint32 unScrollMax;
+ uint32 unScrollCurrent;
+ float flPageScale;
+ bool bVisible;
+ uint32 unPageSize;
+} __attribute__ ((ms_struct));
+void cb_HTML_VerticalScroll_t_24(void *l, void *w)
+{
+ HTML_VerticalScroll_t *lin = (HTML_VerticalScroll_t *)l;
+ struct winHTML_VerticalScroll_t_24 *win = (struct winHTML_VerticalScroll_t_24 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->unScrollMax = lin->unScrollMax;
+ win->unScrollCurrent = lin->unScrollCurrent;
+ win->flPageScale = lin->flPageScale;
+ win->bVisible = lin->bVisible;
+ win->unPageSize = lin->unPageSize;
+}
+
+struct winHTML_LinkAtPosition_t_20 {
+ HHTMLBrowser unBrowserHandle;
+ uint32 x;
+ uint32 y;
+ const char * pchURL;
+ bool bInput;
+ bool bLiveLink;
+} __attribute__ ((ms_struct));
+void cb_HTML_LinkAtPosition_t_20(void *l, void *w)
+{
+ HTML_LinkAtPosition_t *lin = (HTML_LinkAtPosition_t *)l;
+ struct winHTML_LinkAtPosition_t_20 *win = (struct winHTML_LinkAtPosition_t_20 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->x = lin->x;
+ win->y = lin->y;
+ win->pchURL = lin->pchURL;
+ win->bInput = lin->bInput;
+ win->bLiveLink = lin->bLiveLink;
+}
+
+struct winHTML_JSAlert_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchMessage;
+} __attribute__ ((ms_struct));
+void cb_HTML_JSAlert_t_8(void *l, void *w)
+{
+ HTML_JSAlert_t *lin = (HTML_JSAlert_t *)l;
+ struct winHTML_JSAlert_t_8 *win = (struct winHTML_JSAlert_t_8 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->pchMessage = lin->pchMessage;
+}
+
+struct winHTML_JSConfirm_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchMessage;
+} __attribute__ ((ms_struct));
+void cb_HTML_JSConfirm_t_8(void *l, void *w)
+{
+ HTML_JSConfirm_t *lin = (HTML_JSConfirm_t *)l;
+ struct winHTML_JSConfirm_t_8 *win = (struct winHTML_JSConfirm_t_8 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->pchMessage = lin->pchMessage;
+}
+
+struct winHTML_FileOpenDialog_t_12 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchTitle;
+ const char * pchInitialFile;
+} __attribute__ ((ms_struct));
+void cb_HTML_FileOpenDialog_t_12(void *l, void *w)
+{
+ HTML_FileOpenDialog_t *lin = (HTML_FileOpenDialog_t *)l;
+ struct winHTML_FileOpenDialog_t_12 *win = (struct winHTML_FileOpenDialog_t_12 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->pchTitle = lin->pchTitle;
+ win->pchInitialFile = lin->pchInitialFile;
+}
+
+struct winHTML_NewWindow_t_28 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchURL;
+ uint32 unX;
+ uint32 unY;
+ uint32 unWide;
+ uint32 unTall;
+ HHTMLBrowser unNewWindow_BrowserHandle;
+} __attribute__ ((ms_struct));
+void cb_HTML_NewWindow_t_28(void *l, void *w)
+{
+ HTML_NewWindow_t *lin = (HTML_NewWindow_t *)l;
+ struct winHTML_NewWindow_t_28 *win = (struct winHTML_NewWindow_t_28 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->pchURL = lin->pchURL;
+ win->unX = lin->unX;
+ win->unY = lin->unY;
+ win->unWide = lin->unWide;
+ win->unTall = lin->unTall;
+ win->unNewWindow_BrowserHandle = lin->unNewWindow_BrowserHandle;
+}
+
+struct winHTML_SetCursor_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ uint32 eMouseCursor;
+} __attribute__ ((ms_struct));
+void cb_HTML_SetCursor_t_8(void *l, void *w)
+{
+ HTML_SetCursor_t *lin = (HTML_SetCursor_t *)l;
+ struct winHTML_SetCursor_t_8 *win = (struct winHTML_SetCursor_t_8 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->eMouseCursor = lin->eMouseCursor;
+}
+
+struct winHTML_StatusText_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchMsg;
+} __attribute__ ((ms_struct));
+void cb_HTML_StatusText_t_8(void *l, void *w)
+{
+ HTML_StatusText_t *lin = (HTML_StatusText_t *)l;
+ struct winHTML_StatusText_t_8 *win = (struct winHTML_StatusText_t_8 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->pchMsg = lin->pchMsg;
+}
+
+struct winHTML_ShowToolTip_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchMsg;
+} __attribute__ ((ms_struct));
+void cb_HTML_ShowToolTip_t_8(void *l, void *w)
+{
+ HTML_ShowToolTip_t *lin = (HTML_ShowToolTip_t *)l;
+ struct winHTML_ShowToolTip_t_8 *win = (struct winHTML_ShowToolTip_t_8 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->pchMsg = lin->pchMsg;
+}
+
+struct winHTML_UpdateToolTip_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ const char * pchMsg;
+} __attribute__ ((ms_struct));
+void cb_HTML_UpdateToolTip_t_8(void *l, void *w)
+{
+ HTML_UpdateToolTip_t *lin = (HTML_UpdateToolTip_t *)l;
+ struct winHTML_UpdateToolTip_t_8 *win = (struct winHTML_UpdateToolTip_t_8 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->pchMsg = lin->pchMsg;
+}
+
+struct winHTML_HideToolTip_t_4 {
+ HHTMLBrowser unBrowserHandle;
+} __attribute__ ((ms_struct));
+void cb_HTML_HideToolTip_t_4(void *l, void *w)
+{
+ HTML_HideToolTip_t *lin = (HTML_HideToolTip_t *)l;
+ struct winHTML_HideToolTip_t_4 *win = (struct winHTML_HideToolTip_t_4 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+}
+
+struct winHTML_BrowserRestarted_t_8 {
+ HHTMLBrowser unBrowserHandle;
+ HHTMLBrowser unOldBrowserHandle;
+} __attribute__ ((ms_struct));
+void cb_HTML_BrowserRestarted_t_8(void *l, void *w)
+{
+ HTML_BrowserRestarted_t *lin = (HTML_BrowserRestarted_t *)l;
+ struct winHTML_BrowserRestarted_t_8 *win = (struct winHTML_BrowserRestarted_t_8 *)w;
+ win->unBrowserHandle = lin->unBrowserHandle;
+ win->unOldBrowserHandle = lin->unOldBrowserHandle;
+}
+
+struct winSteamInventoryResultReady_t_8 {
+ SteamInventoryResult_t m_handle;
+ EResult m_result;
+} __attribute__ ((ms_struct));
+void cb_SteamInventoryResultReady_t_8(void *l, void *w)
+{
+ SteamInventoryResultReady_t *lin = (SteamInventoryResultReady_t *)l;
+ struct winSteamInventoryResultReady_t_8 *win = (struct winSteamInventoryResultReady_t_8 *)w;
+ win->m_handle = lin->m_handle;
+ win->m_result = lin->m_result;
+}
+
+struct winSteamInventoryFullUpdate_t_4 {
+ SteamInventoryResult_t m_handle;
+} __attribute__ ((ms_struct));
+void cb_SteamInventoryFullUpdate_t_4(void *l, void *w)
+{
+ SteamInventoryFullUpdate_t *lin = (SteamInventoryFullUpdate_t *)l;
+ struct winSteamInventoryFullUpdate_t_4 *win = (struct winSteamInventoryFullUpdate_t_4 *)w;
+ win->m_handle = lin->m_handle;
+}
+
+struct winSteamInventoryDefinitionUpdate_t_1 {
+} __attribute__ ((ms_struct));
+void cb_SteamInventoryDefinitionUpdate_t_1(void *l, void *w)
+{
+ SteamInventoryDefinitionUpdate_t *lin = (SteamInventoryDefinitionUpdate_t *)l;
+ struct winSteamInventoryDefinitionUpdate_t_1 *win = (struct winSteamInventoryDefinitionUpdate_t_1 *)w;
+}
+
+struct winSteamInventoryEligiblePromoItemDefIDs_t_20 {
+ EResult m_result;
+ CSteamID m_steamID;
+ int m_numEligiblePromoItemDefs;
+ bool m_bCachedData;
+} __attribute__ ((ms_struct));
+void cb_SteamInventoryEligiblePromoItemDefIDs_t_20(void *l, void *w)
+{
+ SteamInventoryEligiblePromoItemDefIDs_t *lin = (SteamInventoryEligiblePromoItemDefIDs_t *)l;
+ struct winSteamInventoryEligiblePromoItemDefIDs_t_20 *win = (struct winSteamInventoryEligiblePromoItemDefIDs_t_20 *)w;
+ win->m_result = lin->m_result;
+ win->m_steamID = lin->m_steamID;
+ win->m_numEligiblePromoItemDefs = lin->m_numEligiblePromoItemDefs;
+ win->m_bCachedData = lin->m_bCachedData;
+}
+
+struct winSteamInventoryStartPurchaseResult_t_20 {
+ EResult m_result;
+ uint64 m_ulOrderID;
+ uint64 m_ulTransID;
+} __attribute__ ((ms_struct));
+void cb_SteamInventoryStartPurchaseResult_t_20(void *l, void *w)
+{
+ SteamInventoryStartPurchaseResult_t *lin = (SteamInventoryStartPurchaseResult_t *)l;
+ struct winSteamInventoryStartPurchaseResult_t_20 *win = (struct winSteamInventoryStartPurchaseResult_t_20 *)w;
+ win->m_result = lin->m_result;
+ win->m_ulOrderID = lin->m_ulOrderID;
+ win->m_ulTransID = lin->m_ulTransID;
+}
+
+struct winSteamInventoryRequestPricesResult_t_8 {
+ EResult m_result;
+ char m_rgchCurrency[4];
+} __attribute__ ((ms_struct));
+void cb_SteamInventoryRequestPricesResult_t_8(void *l, void *w)
+{
+ SteamInventoryRequestPricesResult_t *lin = (SteamInventoryRequestPricesResult_t *)l;
+ struct winSteamInventoryRequestPricesResult_t_8 *win = (struct winSteamInventoryRequestPricesResult_t_8 *)w;
+ win->m_result = lin->m_result;
+ memcpy(win->m_rgchCurrency, lin->m_rgchCurrency, sizeof(win->m_rgchCurrency));
+}
+
+struct winBroadcastUploadStart_t_1 {
+} __attribute__ ((ms_struct));
+void cb_BroadcastUploadStart_t_1(void *l, void *w)
+{
+ BroadcastUploadStart_t *lin = (BroadcastUploadStart_t *)l;
+ struct winBroadcastUploadStart_t_1 *win = (struct winBroadcastUploadStart_t_1 *)w;
+}
+
+struct winBroadcastUploadStop_t_4 {
+ EBroadcastUploadResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_BroadcastUploadStop_t_4(void *l, void *w)
+{
+ BroadcastUploadStop_t *lin = (BroadcastUploadStop_t *)l;
+ struct winBroadcastUploadStop_t_4 *win = (struct winBroadcastUploadStop_t_4 *)w;
+ win->m_eResult = lin->m_eResult;
+}
+
+struct winGetVideoURLResult_t_264 {
+ EResult m_eResult;
+ AppId_t m_unVideoAppID;
+ char m_rgchURL[256];
+} __attribute__ ((ms_struct));
+void cb_GetVideoURLResult_t_264(void *l, void *w)
+{
+ GetVideoURLResult_t *lin = (GetVideoURLResult_t *)l;
+ struct winGetVideoURLResult_t_264 *win = (struct winGetVideoURLResult_t_264 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_unVideoAppID = lin->m_unVideoAppID;
+ memcpy(win->m_rgchURL, lin->m_rgchURL, sizeof(win->m_rgchURL));
+}
+
+struct winGetOPFSettingsResult_t_8 {
+ EResult m_eResult;
+ AppId_t m_unVideoAppID;
+} __attribute__ ((ms_struct));
+void cb_GetOPFSettingsResult_t_8(void *l, void *w)
+{
+ GetOPFSettingsResult_t *lin = (GetOPFSettingsResult_t *)l;
+ struct winGetOPFSettingsResult_t_8 *win = (struct winGetOPFSettingsResult_t_8 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_unVideoAppID = lin->m_unVideoAppID;
+}
+
+struct winSteamParentalSettingsChanged_t_1 {
+} __attribute__ ((ms_struct));
+void cb_SteamParentalSettingsChanged_t_1(void *l, void *w)
+{
+ SteamParentalSettingsChanged_t *lin = (SteamParentalSettingsChanged_t *)l;
+ struct winSteamParentalSettingsChanged_t_1 *win = (struct winSteamParentalSettingsChanged_t_1 *)w;
+}
+
+struct winGSClientApprove_t_16 {
+ CSteamID m_SteamID;
+ CSteamID m_OwnerSteamID;
+} __attribute__ ((ms_struct));
+void cb_GSClientApprove_t_16(void *l, void *w)
+{
+ GSClientApprove_t *lin = (GSClientApprove_t *)l;
+ struct winGSClientApprove_t_16 *win = (struct winGSClientApprove_t_16 *)w;
+ win->m_SteamID = lin->m_SteamID;
+ win->m_OwnerSteamID = lin->m_OwnerSteamID;
+}
+
+struct winGSClientDeny_t_140 {
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+} __attribute__ ((ms_struct));
+void cb_GSClientDeny_t_140(void *l, void *w)
+{
+ GSClientDeny_t *lin = (GSClientDeny_t *)l;
+ struct winGSClientDeny_t_140 *win = (struct winGSClientDeny_t_140 *)w;
+ win->m_SteamID = lin->m_SteamID;
+ win->m_eDenyReason = lin->m_eDenyReason;
+ memcpy(win->m_rgchOptionalText, lin->m_rgchOptionalText, sizeof(win->m_rgchOptionalText));
+}
+
+struct winGSClientKick_t_12 {
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+} __attribute__ ((ms_struct));
+void cb_GSClientKick_t_12(void *l, void *w)
+{
+ GSClientKick_t *lin = (GSClientKick_t *)l;
+ struct winGSClientKick_t_12 *win = (struct winGSClientKick_t_12 *)w;
+ win->m_SteamID = lin->m_SteamID;
+ win->m_eDenyReason = lin->m_eDenyReason;
+}
+
+struct winGSClientAchievementStatus_t_140 {
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+} __attribute__ ((ms_struct));
+void cb_GSClientAchievementStatus_t_140(void *l, void *w)
+{
+ GSClientAchievementStatus_t *lin = (GSClientAchievementStatus_t *)l;
+ struct winGSClientAchievementStatus_t_140 *win = (struct winGSClientAchievementStatus_t_140 *)w;
+ win->m_SteamID = lin->m_SteamID;
+ memcpy(win->m_pchAchievement, lin->m_pchAchievement, sizeof(win->m_pchAchievement));
+ win->m_bUnlocked = lin->m_bUnlocked;
+}
+
+struct winGSPolicyResponse_t_1 {
+ uint8 m_bSecure;
+} __attribute__ ((ms_struct));
+void cb_GSPolicyResponse_t_1(void *l, void *w)
+{
+ GSPolicyResponse_t *lin = (GSPolicyResponse_t *)l;
+ struct winGSPolicyResponse_t_1 *win = (struct winGSPolicyResponse_t_1 *)w;
+ win->m_bSecure = lin->m_bSecure;
+}
+
+struct winGSGameplayStats_t_16 {
+ EResult m_eResult;
+ int32 m_nRank;
+ uint32 m_unTotalConnects;
+ uint32 m_unTotalMinutesPlayed;
+} __attribute__ ((ms_struct));
+void cb_GSGameplayStats_t_16(void *l, void *w)
+{
+ GSGameplayStats_t *lin = (GSGameplayStats_t *)l;
+ struct winGSGameplayStats_t_16 *win = (struct winGSGameplayStats_t_16 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_nRank = lin->m_nRank;
+ win->m_unTotalConnects = lin->m_unTotalConnects;
+ win->m_unTotalMinutesPlayed = lin->m_unTotalMinutesPlayed;
+}
+
+struct winGSClientGroupStatus_t_18 {
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+} __attribute__ ((ms_struct));
+void cb_GSClientGroupStatus_t_18(void *l, void *w)
+{
+ GSClientGroupStatus_t *lin = (GSClientGroupStatus_t *)l;
+ struct winGSClientGroupStatus_t_18 *win = (struct winGSClientGroupStatus_t_18 *)w;
+ win->m_SteamIDUser = lin->m_SteamIDUser;
+ win->m_SteamIDGroup = lin->m_SteamIDGroup;
+ win->m_bMember = lin->m_bMember;
+ win->m_bOfficer = lin->m_bOfficer;
+}
+
+struct winGSReputation_t_32 {
+ EResult m_eResult;
+ uint32 m_unReputationScore;
+ bool m_bBanned;
+ uint32 m_unBannedIP;
+ uint16 m_usBannedPort;
+ uint64 m_ulBannedGameID;
+ uint32 m_unBanExpires;
+} __attribute__ ((ms_struct));
+void cb_GSReputation_t_32(void *l, void *w)
+{
+ GSReputation_t *lin = (GSReputation_t *)l;
+ struct winGSReputation_t_32 *win = (struct winGSReputation_t_32 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_unReputationScore = lin->m_unReputationScore;
+ win->m_bBanned = lin->m_bBanned;
+ win->m_unBannedIP = lin->m_unBannedIP;
+ win->m_usBannedPort = lin->m_usBannedPort;
+ win->m_ulBannedGameID = lin->m_ulBannedGameID;
+ win->m_unBanExpires = lin->m_unBanExpires;
+}
+
+struct winAssociateWithClanResult_t_4 {
+ EResult m_eResult;
+} __attribute__ ((ms_struct));
+void cb_AssociateWithClanResult_t_4(void *l, void *w)
+{
+ AssociateWithClanResult_t *lin = (AssociateWithClanResult_t *)l;
+ struct winAssociateWithClanResult_t_4 *win = (struct winAssociateWithClanResult_t_4 *)w;
+ win->m_eResult = lin->m_eResult;
+}
+
+struct winComputeNewPlayerCompatibilityResult_t_24 {
+ EResult m_eResult;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+} __attribute__ ((ms_struct));
+void cb_ComputeNewPlayerCompatibilityResult_t_24(void *l, void *w)
+{
+ ComputeNewPlayerCompatibilityResult_t *lin = (ComputeNewPlayerCompatibilityResult_t *)l;
+ struct winComputeNewPlayerCompatibilityResult_t_24 *win = (struct winComputeNewPlayerCompatibilityResult_t_24 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_cPlayersThatDontLikeCandidate = lin->m_cPlayersThatDontLikeCandidate;
+ win->m_cPlayersThatCandidateDoesntLike = lin->m_cPlayersThatCandidateDoesntLike;
+ win->m_cClanPlayersThatDontLikeCandidate = lin->m_cClanPlayersThatDontLikeCandidate;
+ win->m_SteamIDCandidate = lin->m_SteamIDCandidate;
+}
+
+struct winGSStatsReceived_t_12 {
+ EResult m_eResult;
+ CSteamID m_steamIDUser;
+} __attribute__ ((ms_struct));
+void cb_GSStatsReceived_t_12(void *l, void *w)
+{
+ GSStatsReceived_t *lin = (GSStatsReceived_t *)l;
+ struct winGSStatsReceived_t_12 *win = (struct winGSStatsReceived_t_12 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_steamIDUser = lin->m_steamIDUser;
+}
+
+struct winGSStatsStored_t_12 {
+ EResult m_eResult;
+ CSteamID m_steamIDUser;
+} __attribute__ ((ms_struct));
+void cb_GSStatsStored_t_12(void *l, void *w)
+{
+ GSStatsStored_t *lin = (GSStatsStored_t *)l;
+ struct winGSStatsStored_t_12 *win = (struct winGSStatsStored_t_12 *)w;
+ win->m_eResult = lin->m_eResult;
+ win->m_steamIDUser = lin->m_steamIDUser;
+}
+
+struct winGCMessageAvailable_t_4 {
+ uint32 m_nMessageSize;
+} __attribute__ ((ms_struct));
+void cb_GCMessageAvailable_t_4(void *l, void *w)
+{
+ GCMessageAvailable_t *lin = (GCMessageAvailable_t *)l;
+ struct winGCMessageAvailable_t_4 *win = (struct winGCMessageAvailable_t_4 *)w;
+ win->m_nMessageSize = lin->m_nMessageSize;
+}
+
+struct winGCMessageFailed_t_1 {
+} __attribute__ ((ms_struct));
+void cb_GCMessageFailed_t_1(void *l, void *w)
+{
+ GCMessageFailed_t *lin = (GCMessageFailed_t *)l;
+ struct winGCMessageFailed_t_1 *win = (struct winGCMessageFailed_t_1 *)w;
+}
+
+
+}
diff --git a/lsteamclient/cb_getapi_sizes.dat b/lsteamclient/cb_getapi_sizes.dat
new file mode 100644
index 00000000..d3efe6b4
--- /dev/null
+++ b/lsteamclient/cb_getapi_sizes.dat
@@ -0,0 +1,392 @@
+case 512: /* LobbyKicked_t_20 */
+ return 20;
+case 513: /* LobbyCreated_t_12 */
+ return 12;
+case 3413: /* RemoveUGCDependencyResult_t_20 */
+ return 20;
+case 515: /* PSNGameBootInviteResult_t_9 */
+ return 9;
+case 516: /* FavoritesListAccountsUpdated_t_4 */
+ return 4;
+case 4101: /* MusicPlayerRemoteWillActivate_t_1 */
+ return 1;
+case 4102: /* MusicPlayerRemoteWillDeactivate_t_1 */
+ return 1;
+case 4103: /* MusicPlayerRemoteToFront_t_1 */
+ return 1;
+case 4104: /* MusicPlayerWillQuit_t_1 */
+ return 1;
+case 4105: /* MusicPlayerWantsPlay_t_1 */
+ return 1;
+case 4106: /* MusicPlayerWantsPause_t_1 */
+ return 1;
+case 4107: /* MusicPlayerWantsPlayPrevious_t_1 */
+ return 1;
+case 4108: /* MusicPlayerWantsPlayNext_t_1 */
+ return 1;
+case 4109: /* MusicPlayerWantsShuffled_t_1 */
+ return 1;
+case 4110: /* MusicPlayerWantsLooped_t_1 */
+ return 1;
+case 4525: /* HTML_UpdateToolTip_t_8 */
+ return 8;
+case 4624: /* GetOPFSettingsResult_t_8 */
+ return 8;
+case 3416: /* GetAppDependenciesResult_t_148 */
+ return 148;
+case 4114: /* MusicPlayerWantsPlayingRepeatStatus_t_4 */
+ return 4;
+case 4611: /* GetVideoURLResult_t_264 */
+ return 264;
+case 3417: /* DeleteItemResult_t_12 */
+ return 12;
+case 4527: /* HTML_BrowserRestarted_t_8 */
+ return 8;
+case 514: /* RequestFriendsLobbiesResponse_t_24 */
+ return 24;
+case 2101: /* HTTPRequestCompleted_t_24 */
+ return 24;
+case 2102: /* HTTPRequestHeadersReceived_t_12 */
+ return 12;
+case 2103: /* HTTPRequestDataReceived_t_20 */
+ return 20;
+case 4605: /* BroadcastUploadStop_t_4 */
+ return 4;
+case 3410: /* StartPlaytimeTrackingResult_t_4 */
+ return 4;
+case 3412: /* AddUGCDependencyResult_t_20 */
+ return 20;
+case 1101: /* UserStatsReceived_t_20 */
+ return 20;
+case 1102: /* UserStatsStored_t_12 */
+ return 12;
+case 1103: /* UserAchievementStored_t_148 */
+ return 148;
+case 1104: /* LeaderboardFindResult_t_12 */
+ return 12;
+case 1105: /* LeaderboardScoresDownloaded_t_20 */
+ return 20;
+case 1106: /* LeaderboardScoreUploaded_t_28 */
+ return 28;
+case 1107: /* NumberOfCurrentPlayers_t_8 */
+ return 8;
+case 1108: /* UserStatsUnloaded_t_8 */
+ return 8;
+case 1109: /* UserAchievementIconFetched_t_144 */
+ return 144;
+case 1110: /* GlobalAchievementPercentagesReady_t_12 */
+ return 12;
+case 1111: /* LeaderboardUGCSet_t_12 */
+ return 12;
+case 1112: /* PS3TrophiesInstalled_t_20 */
+ return 20;
+case 4700: /* SteamInventoryResultReady_t_8 */
+ return 8;
+case 4701: /* SteamInventoryFullUpdate_t_4 */
+ return 4;
+case 4702: /* SteamInventoryDefinitionUpdate_t_1 */
+ return 1;
+case 4703: /* SteamInventoryEligiblePromoItemDefIDs_t_20 */
+ return 20;
+case 4704: /* SteamInventoryStartPurchaseResult_t_20 */
+ return 20;
+case 4705: /* SteamInventoryRequestPricesResult_t_8 */
+ return 8;
+case 101: /* SteamServersConnected_t_1 */
+ return 1;
+case 102: /* SteamServerConnectFailure_t_8 */
+ return 8;
+case 103: /* SteamServersDisconnected_t_4 */
+ return 4;
+case 113: /* ClientGameServerDeny_t_16 */
+ return 16;
+case 115: /* GSPolicyResponse_t_1 */
+ return 1;
+case 117: /* IPCFailure_t_1 */
+ return 1;
+case 125: /* LicensesUpdated_t_1 */
+ return 1;
+case 3414: /* AddAppDependencyResult_t_16 */
+ return 16;
+case 143: /* ValidateAuthTicketResponse_t_20 */
+ return 20;
+case 152: /* MicroTxnAuthorizationResponse_t_16 */
+ return 16;
+case 154: /* EncryptedAppTicketResponse_t_4 */
+ return 4;
+case 4523: /* HTML_StatusText_t_8 */
+ return 8;
+case 2501: /* SteamUnifiedMessagesSendMethodResult_t_24 */
+ return 24;
+case 3415: /* RemoveAppDependencyResult_t_16 */
+ return 16;
+case 163: /* GetAuthSessionTicketResponse_t_8 */
+ return 8;
+case 164: /* GameWebCallback_t_256 */
+ return 256;
+case 165: /* StoreAuthURLResponse_t_512 */
+ return 512;
+case 1702: /* GCMessageFailed_t_1 */
+ return 1;
+case 1201: /* SocketStatusCallback_t_20 */
+ return 20;
+case 1202: /* P2PSessionRequest_t_8 */
+ return 8;
+case 1203: /* P2PSessionConnectFail_t_9 */
+ return 9;
+case 4524: /* HTML_ShowToolTip_t_8 */
+ return 8;
+case 701: /* IPCountry_t_1 */
+ return 1;
+case 702: /* LowBatteryPower_t_1 */
+ return 1;
+case 703: /* SteamAPICallCompleted_t_16 */
+ return 16;
+case 704: /* SteamShutdown_t_1 */
+ return 1;
+case 705: /* CheckFileSignature_t_4 */
+ return 4;
+case 201: /* GSClientApprove_t_16 */
+ return 16;
+case 714: /* GamepadTextInputDismissed_t_8 */
+ return 8;
+case 203: /* GSClientKick_t_12 */
+ return 12;
+case 206: /* GSClientAchievementStatus_t_140 */
+ return 140;
+case 207: /* GSGameplayStats_t_16 */
+ return 16;
+case 208: /* GSClientGroupStatus_t_18 */
+ return 18;
+case 209: /* GSReputation_t_32 */
+ return 32;
+case 210: /* AssociateWithClanResult_t_4 */
+ return 4;
+case 211: /* ComputeNewPlayerCompatibilityResult_t_24 */
+ return 24;
+case 2301: /* ScreenshotReady_t_8 */
+ return 8;
+case 2302: /* ScreenshotRequested_t_1 */
+ return 1;
+case 1800: /* GSStatsReceived_t_12 */
+ return 12;
+case 1801: /* GSStatsStored_t_12 */
+ return 12;
+case 1301: /* RemoteStorageAppSyncedClient_t_12 */
+ return 12;
+case 1302: /* RemoteStorageAppSyncedServer_t_12 */
+ return 12;
+case 1303: /* RemoteStorageAppSyncProgress_t_280 */
+ return 280;
+case 1305: /* RemoteStorageAppSyncStatusCheck_t_8 */
+ return 8;
+case 1306: /* RemoteStorageConflictResolution_t_8 */
+ return 8;
+case 1307: /* RemoteStorageFileShareResult_t_272 */
+ return 272;
+case 1308: /* RemoteStorageDownloadUGCResult_t_32 */
+ return 32;
+case 1309: /* RemoteStoragePublishFileResult_t_16 */
+ return 16;
+case 1310: /* RemoteStorageGetPublishedFileDetailsResult_t_1732 */
+ return 1732;
+case 1311: /* RemoteStorageDeletePublishedFileResult_t_12 */
+ return 12;
+case 1312: /* RemoteStorageEnumerateUserPublishedFilesResult_t_412 */
+ return 412;
+case 1313: /* RemoteStorageSubscribePublishedFileResult_t_12 */
+ return 12;
+case 1314: /* RemoteStorageEnumerateUserSubscribedFilesResult_t_612 */
+ return 612;
+case 1315: /* RemoteStorageUnsubscribePublishedFileResult_t_12 */
+ return 12;
+case 1316: /* RemoteStorageUpdatePublishedFileResult_t_16 */
+ return 16;
+case 1317: /* RemoteStorageDownloadUGCResult_t_288 */
+ return 288;
+case 1318: /* RemoteStorageGetPublishedFileDetailsResult_t_9748 */
+ return 9748;
+case 1319: /* RemoteStorageEnumerateWorkshopFilesResult_t_620 */
+ return 620;
+case 1320: /* RemoteStorageGetPublishedItemVoteDetailsResult_t_28 */
+ return 28;
+case 1321: /* RemoteStoragePublishedFileSubscribed_t_12 */
+ return 12;
+case 1322: /* RemoteStoragePublishedFileUnsubscribed_t_12 */
+ return 12;
+case 1323: /* RemoteStoragePublishedFileDeleted_t_12 */
+ return 12;
+case 1324: /* RemoteStorageUpdateUserPublishedItemVoteResult_t_12 */
+ return 12;
+case 1325: /* RemoteStorageUserVoteDetails_t_16 */
+ return 16;
+case 1326: /* RemoteStorageEnumerateUserSharedWorkshopFilesResult_t_412 */
+ return 412;
+case 1327: /* RemoteStorageSetUserPublishedFileActionResult_t_16 */
+ return 16;
+case 1328: /* RemoteStorageEnumeratePublishedFilesByUserActionResult_t_616 */
+ return 616;
+case 1329: /* RemoteStoragePublishFileProgress_t_12 */
+ return 12;
+case 1330: /* RemoteStoragePublishedFileUpdated_t_20 */
+ return 20;
+case 1331: /* RemoteStorageFileWriteAsyncComplete_t_4 */
+ return 4;
+case 1332: /* RemoteStorageFileReadAsyncComplete_t_20 */
+ return 20;
+case 3901: /* SteamAppInstalled_t_4 */
+ return 4;
+case 3902: /* SteamAppUninstalled_t_4 */
+ return 4;
+case 3401: /* SteamUGCQueryCompleted_t_24 */
+ return 24;
+case 3402: /* SteamUGCRequestUGCDetailsResult_t_9768 */
+ return 9768;
+case 331: /* GameOverlayActivated_t_1 */
+ return 1;
+case 332: /* GameServerChangeRequested_t_128 */
+ return 128;
+case 333: /* GameLobbyJoinRequested_t_16 */
+ return 16;
+case 334: /* AvatarImageLoaded_t_20 */
+ return 20;
+case 335: /* ClanOfficerListResponse_t_16 */
+ return 16;
+case 336: /* FriendRichPresenceUpdate_t_12 */
+ return 12;
+case 337: /* GameRichPresenceJoinRequested_t_264 */
+ return 264;
+case 338: /* GameConnectedClanChatMsg_t_20 */
+ return 20;
+case 339: /* GameConnectedChatJoin_t_16 */
+ return 16;
+case 340: /* GameConnectedChatLeave_t_18 */
+ return 18;
+case 341: /* DownloadClanActivityCountsResult_t_1 */
+ return 1;
+case 342: /* JoinClanChatRoomCompletionResult_t_12 */
+ return 12;
+case 343: /* GameConnectedFriendChatMsg_t_12 */
+ return 12;
+case 344: /* FriendsGetFollowerCount_t_16 */
+ return 16;
+case 345: /* FriendsIsFollowing_t_16 */
+ return 16;
+case 346: /* FriendsEnumerateFollowingList_t_412 */
+ return 412;
+case 347: /* SetPersonaNameResponse_t_8 */
+ return 8;
+case 5001: /* SteamParentalSettingsChanged_t_1 */
+ return 1;
+case 4501: /* HTML_BrowserReady_t_4 */
+ return 4;
+case 4502: /* HTML_NeedsPaint_t_48 */
+ return 48;
+case 4503: /* HTML_StartRequest_t_20 */
+ return 20;
+case 4504: /* HTML_CloseBrowser_t_4 */
+ return 4;
+case 4505: /* HTML_URLChanged_t_24 */
+ return 24;
+case 4506: /* HTML_FinishedRequest_t_12 */
+ return 12;
+case 4507: /* HTML_OpenLinkInNewTab_t_8 */
+ return 8;
+case 4508: /* HTML_ChangedTitle_t_8 */
+ return 8;
+case 4509: /* HTML_SearchResults_t_12 */
+ return 12;
+case 4510: /* HTML_CanGoBackAndForward_t_8 */
+ return 8;
+case 4511: /* HTML_HorizontalScroll_t_24 */
+ return 24;
+case 4512: /* HTML_VerticalScroll_t_24 */
+ return 24;
+case 4001: /* PlaybackStatusHasChanged_t_1 */
+ return 1;
+case 4002: /* VolumeHasChanged_t_4 */
+ return 4;
+case 4515: /* HTML_JSConfirm_t_8 */
+ return 8;
+case 4516: /* HTML_FileOpenDialog_t_12 */
+ return 12;
+case 4517: /* HTML_ComboNeedsPaint_t_16 */
+ return 16;
+case 4518: /* HTML_ShowPopup_t_4 */
+ return 4;
+case 4519: /* HTML_HidePopup_t_4 */
+ return 4;
+case 4520: /* HTML_SizePopup_t_20 */
+ return 20;
+case 4521: /* HTML_NewWindow_t_28 */
+ return 28;
+case 4522: /* HTML_SetCursor_t_8 */
+ return 8;
+case 4011: /* MusicPlayerWantsVolume_t_4 */
+ return 4;
+case 4012: /* MusicPlayerSelectsQueueEntry_t_4 */
+ return 4;
+case 4013: /* MusicPlayerSelectsPlaylistEntry_t_4 */
+ return 4;
+case 4526: /* HTML_HideToolTip_t_4 */
+ return 4;
+case 304: /* PersonaStateChange_t_12 */
+ return 12;
+case 202: /* GSClientDeny_t_140 */
+ return 140;
+case 3403: /* CreateItemResult_t_16 */
+ return 16;
+case 1014: /* NewLaunchQueryParameters_t_1 */
+ return 1;
+case 4513: /* HTML_LinkAtPosition_t_20 */
+ return 20;
+case 3404: /* SubmitItemUpdateResult_t_16 */
+ return 16;
+case 4514: /* HTML_JSAlert_t_8 */
+ return 8;
+case 3405: /* ItemInstalled_t_12 */
+ return 12;
+case 511: /* LobbyClosing_t_8 */
+ return 8;
+case 3406: /* DownloadItemResult_t_16 */
+ return 16;
+case 3407: /* UserFavoriteItemsListChanged_t_16 */
+ return 16;
+case 1701: /* GCMessageAvailable_t_4 */
+ return 4;
+case 3408: /* SetUserItemVoteResult_t_16 */
+ return 16;
+case 3409: /* GetUserItemVoteResult_t_16 */
+ return 16;
+case 1001: /* AppDataChanged_t_8 */
+ return 8;
+case 1005: /* DlcInstalled_t_4 */
+ return 4;
+case 1021: /* AppProofOfPurchaseKeyResponse_t_252 */
+ return 252;
+case 1008: /* RegisterActivationCodeResponse_t_8 */
+ return 8;
+case 3411: /* StopPlaytimeTrackingResult_t_4 */
+ return 4;
+case 1013: /* AppProofOfPurchaseKeyResponse_t_72 */
+ return 72;
+case 502: /* FavoritesListChanged_t_28 */
+ return 28;
+case 503: /* LobbyInvite_t_24 */
+ return 24;
+case 504: /* LobbyEnter_t_20 */
+ return 20;
+case 505: /* LobbyDataUpdate_t_20 */
+ return 20;
+case 506: /* LobbyChatUpdate_t_28 */
+ return 28;
+case 507: /* LobbyChatMsg_t_24 */
+ return 24;
+case 4604: /* BroadcastUploadStart_t_1 */
+ return 1;
+case 509: /* LobbyGameCreated_t_24 */
+ return 24;
+case 510: /* LobbyMatchList_t_4 */
+ return 4;
+case 1023: /* FileDetailsResult_t_36 */
+ return 36;
diff --git a/lsteamclient/cb_getapi_table.dat b/lsteamclient/cb_getapi_table.dat
new file mode 100644
index 00000000..76791d1b
--- /dev/null
+++ b/lsteamclient/cb_getapi_table.dat
@@ -0,0 +1,1200 @@
+case 512:
+ switch(callback_len){
+ default:
+ case sizeof(struct winLobbyKicked_t_20): cb_LobbyKicked_t_20(lin_callback, callback); break;
+ case sizeof(struct winLobbyKicked_t_16): cb_LobbyKicked_t_16(lin_callback, callback); break;
+ }
+ break;
+case 513:
+ switch(callback_len){
+ default:
+ case sizeof(struct winLobbyCreated_t_12): cb_LobbyCreated_t_12(lin_callback, callback); break;
+ }
+ break;
+case 3413:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoveUGCDependencyResult_t_20): cb_RemoveUGCDependencyResult_t_20(lin_callback, callback); break;
+ }
+ break;
+case 515:
+ switch(callback_len){
+ default:
+ case sizeof(struct winPSNGameBootInviteResult_t_9): cb_PSNGameBootInviteResult_t_9(lin_callback, callback); break;
+ }
+ break;
+case 516:
+ switch(callback_len){
+ default:
+ case sizeof(struct winFavoritesListAccountsUpdated_t_4): cb_FavoritesListAccountsUpdated_t_4(lin_callback, callback); break;
+ }
+ break;
+case 4101:
+ switch(callback_len){
+ default:
+ case sizeof(struct winMusicPlayerRemoteWillActivate_t_1): cb_MusicPlayerRemoteWillActivate_t_1(lin_callback, callback); break;
+ }
+ break;
+case 4102:
+ switch(callback_len){
+ default:
+ case sizeof(struct winMusicPlayerRemoteWillDeactivate_t_1): cb_MusicPlayerRemoteWillDeactivate_t_1(lin_callback, callback); break;
+ }
+ break;
+case 4103:
+ switch(callback_len){
+ default:
+ case sizeof(struct winMusicPlayerRemoteToFront_t_1): cb_MusicPlayerRemoteToFront_t_1(lin_callback, callback); break;
+ }
+ break;
+case 4104:
+ switch(callback_len){
+ default:
+ case sizeof(struct winMusicPlayerWillQuit_t_1): cb_MusicPlayerWillQuit_t_1(lin_callback, callback); break;
+ }
+ break;
+case 4105:
+ switch(callback_len){
+ default:
+ case sizeof(struct winMusicPlayerWantsPlay_t_1): cb_MusicPlayerWantsPlay_t_1(lin_callback, callback); break;
+ }
+ break;
+case 4106:
+ switch(callback_len){
+ default:
+ case sizeof(struct winMusicPlayerWantsPause_t_1): cb_MusicPlayerWantsPause_t_1(lin_callback, callback); break;
+ }
+ break;
+case 4107:
+ switch(callback_len){
+ default:
+ case sizeof(struct winMusicPlayerWantsPlayPrevious_t_1): cb_MusicPlayerWantsPlayPrevious_t_1(lin_callback, callback); break;
+ }
+ break;
+case 4108:
+ switch(callback_len){
+ default:
+ case sizeof(struct winMusicPlayerWantsPlayNext_t_1): cb_MusicPlayerWantsPlayNext_t_1(lin_callback, callback); break;
+ }
+ break;
+case 4109:
+ switch(callback_len){
+ default:
+ case sizeof(struct winMusicPlayerWantsShuffled_t_1): cb_MusicPlayerWantsShuffled_t_1(lin_callback, callback); break;
+ }
+ break;
+case 4110:
+ switch(callback_len){
+ default:
+ case sizeof(struct winMusicPlayerWantsLooped_t_1): cb_MusicPlayerWantsLooped_t_1(lin_callback, callback); break;
+ }
+ break;
+case 4525:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_UpdateToolTip_t_8): cb_HTML_UpdateToolTip_t_8(lin_callback, callback); break;
+ }
+ break;
+case 4624:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGetOPFSettingsResult_t_8): cb_GetOPFSettingsResult_t_8(lin_callback, callback); break;
+ }
+ break;
+case 3416:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGetAppDependenciesResult_t_148): cb_GetAppDependenciesResult_t_148(lin_callback, callback); break;
+ }
+ break;
+case 4114:
+ switch(callback_len){
+ default:
+ case sizeof(struct winMusicPlayerWantsPlayingRepeatStatus_t_4): cb_MusicPlayerWantsPlayingRepeatStatus_t_4(lin_callback, callback); break;
+ }
+ break;
+case 4611:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGetVideoURLResult_t_264): cb_GetVideoURLResult_t_264(lin_callback, callback); break;
+ }
+ break;
+case 3417:
+ switch(callback_len){
+ default:
+ case sizeof(struct winDeleteItemResult_t_12): cb_DeleteItemResult_t_12(lin_callback, callback); break;
+ }
+ break;
+case 4527:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_BrowserRestarted_t_8): cb_HTML_BrowserRestarted_t_8(lin_callback, callback); break;
+ }
+ break;
+case 514:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRequestFriendsLobbiesResponse_t_24): cb_RequestFriendsLobbiesResponse_t_24(lin_callback, callback); break;
+ }
+ break;
+case 2101:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTTPRequestCompleted_t_24): cb_HTTPRequestCompleted_t_24(lin_callback, callback); break;
+ case sizeof(struct winHTTPRequestCompleted_t_20): cb_HTTPRequestCompleted_t_20(lin_callback, callback); break;
+ }
+ break;
+case 2102:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTTPRequestHeadersReceived_t_12): cb_HTTPRequestHeadersReceived_t_12(lin_callback, callback); break;
+ }
+ break;
+case 2103:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTTPRequestDataReceived_t_20): cb_HTTPRequestDataReceived_t_20(lin_callback, callback); break;
+ }
+ break;
+case 4605:
+ switch(callback_len){
+ default:
+ case sizeof(struct winBroadcastUploadStop_t_4): cb_BroadcastUploadStop_t_4(lin_callback, callback); break;
+ }
+ break;
+case 3410:
+ switch(callback_len){
+ default:
+ case sizeof(struct winStartPlaytimeTrackingResult_t_4): cb_StartPlaytimeTrackingResult_t_4(lin_callback, callback); break;
+ }
+ break;
+case 3412:
+ switch(callback_len){
+ default:
+ case sizeof(struct winAddUGCDependencyResult_t_20): cb_AddUGCDependencyResult_t_20(lin_callback, callback); break;
+ }
+ break;
+case 1101:
+ switch(callback_len){
+ default:
+ case sizeof(struct winUserStatsReceived_t_20): cb_UserStatsReceived_t_20(lin_callback, callback); break;
+ case sizeof(struct winUserStatsReceived_t_12): cb_UserStatsReceived_t_12(lin_callback, callback); break;
+ }
+ break;
+case 1102:
+ switch(callback_len){
+ default:
+ case sizeof(struct winUserStatsStored_t_12): cb_UserStatsStored_t_12(lin_callback, callback); break;
+ }
+ break;
+case 1103:
+ switch(callback_len){
+ default:
+ case sizeof(struct winUserAchievementStored_t_148): cb_UserAchievementStored_t_148(lin_callback, callback); break;
+ }
+ break;
+case 1104:
+ switch(callback_len){
+ default:
+ case sizeof(struct winLeaderboardFindResult_t_12): cb_LeaderboardFindResult_t_12(lin_callback, callback); break;
+ }
+ break;
+case 1105:
+ switch(callback_len){
+ default:
+ case sizeof(struct winLeaderboardScoresDownloaded_t_20): cb_LeaderboardScoresDownloaded_t_20(lin_callback, callback); break;
+ }
+ break;
+case 1106:
+ switch(callback_len){
+ default:
+ case sizeof(struct winLeaderboardScoreUploaded_t_28): cb_LeaderboardScoreUploaded_t_28(lin_callback, callback); break;
+ }
+ break;
+case 1107:
+ switch(callback_len){
+ default:
+ case sizeof(struct winNumberOfCurrentPlayers_t_8): cb_NumberOfCurrentPlayers_t_8(lin_callback, callback); break;
+ }
+ break;
+case 1108:
+ switch(callback_len){
+ default:
+ case sizeof(struct winUserStatsUnloaded_t_8): cb_UserStatsUnloaded_t_8(lin_callback, callback); break;
+ }
+ break;
+case 1109:
+ switch(callback_len){
+ default:
+ case sizeof(struct winUserAchievementIconFetched_t_144): cb_UserAchievementIconFetched_t_144(lin_callback, callback); break;
+ }
+ break;
+case 1110:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGlobalAchievementPercentagesReady_t_12): cb_GlobalAchievementPercentagesReady_t_12(lin_callback, callback); break;
+ }
+ break;
+case 1111:
+ switch(callback_len){
+ default:
+ case sizeof(struct winLeaderboardUGCSet_t_12): cb_LeaderboardUGCSet_t_12(lin_callback, callback); break;
+ }
+ break;
+case 1112:
+ switch(callback_len){
+ default:
+ case sizeof(struct winPS3TrophiesInstalled_t_20): cb_PS3TrophiesInstalled_t_20(lin_callback, callback); break;
+ case sizeof(struct winGlobalStatsReceived_t_12): cb_GlobalStatsReceived_t_12(lin_callback, callback); break;
+ }
+ break;
+case 4700:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSteamInventoryResultReady_t_8): cb_SteamInventoryResultReady_t_8(lin_callback, callback); break;
+ }
+ break;
+case 4701:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSteamInventoryFullUpdate_t_4): cb_SteamInventoryFullUpdate_t_4(lin_callback, callback); break;
+ }
+ break;
+case 4702:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSteamInventoryDefinitionUpdate_t_1): cb_SteamInventoryDefinitionUpdate_t_1(lin_callback, callback); break;
+ }
+ break;
+case 4703:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSteamInventoryEligiblePromoItemDefIDs_t_20): cb_SteamInventoryEligiblePromoItemDefIDs_t_20(lin_callback, callback); break;
+ }
+ break;
+case 4704:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSteamInventoryStartPurchaseResult_t_20): cb_SteamInventoryStartPurchaseResult_t_20(lin_callback, callback); break;
+ }
+ break;
+case 4705:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSteamInventoryRequestPricesResult_t_8): cb_SteamInventoryRequestPricesResult_t_8(lin_callback, callback); break;
+ }
+ break;
+case 101:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSteamServersConnected_t_1): cb_SteamServersConnected_t_1(lin_callback, callback); break;
+ }
+ break;
+case 102:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSteamServerConnectFailure_t_8): cb_SteamServerConnectFailure_t_8(lin_callback, callback); break;
+ case sizeof(struct winSteamServerConnectFailure_t_4): cb_SteamServerConnectFailure_t_4(lin_callback, callback); break;
+ }
+ break;
+case 103:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSteamServersDisconnected_t_4): cb_SteamServersDisconnected_t_4(lin_callback, callback); break;
+ }
+ break;
+case 113:
+ switch(callback_len){
+ default:
+ case sizeof(struct winClientGameServerDeny_t_16): cb_ClientGameServerDeny_t_16(lin_callback, callback); break;
+ }
+ break;
+case 115:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGSPolicyResponse_t_1): cb_GSPolicyResponse_t_1(lin_callback, callback); break;
+ }
+ break;
+case 117:
+ switch(callback_len){
+ default:
+ case sizeof(struct winIPCFailure_t_1): cb_IPCFailure_t_1(lin_callback, callback); break;
+ }
+ break;
+case 125:
+ switch(callback_len){
+ default:
+ case sizeof(struct winLicensesUpdated_t_1): cb_LicensesUpdated_t_1(lin_callback, callback); break;
+ }
+ break;
+case 3414:
+ switch(callback_len){
+ default:
+ case sizeof(struct winAddAppDependencyResult_t_16): cb_AddAppDependencyResult_t_16(lin_callback, callback); break;
+ }
+ break;
+case 143:
+ switch(callback_len){
+ default:
+ case sizeof(struct winValidateAuthTicketResponse_t_20): cb_ValidateAuthTicketResponse_t_20(lin_callback, callback); break;
+ case sizeof(struct winValidateAuthTicketResponse_t_12): cb_ValidateAuthTicketResponse_t_12(lin_callback, callback); break;
+ }
+ break;
+case 152:
+ switch(callback_len){
+ default:
+ case sizeof(struct winMicroTxnAuthorizationResponse_t_16): cb_MicroTxnAuthorizationResponse_t_16(lin_callback, callback); break;
+ }
+ break;
+case 154:
+ switch(callback_len){
+ default:
+ case sizeof(struct winEncryptedAppTicketResponse_t_4): cb_EncryptedAppTicketResponse_t_4(lin_callback, callback); break;
+ }
+ break;
+case 4523:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_StatusText_t_8): cb_HTML_StatusText_t_8(lin_callback, callback); break;
+ }
+ break;
+case 2501:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSteamUnifiedMessagesSendMethodResult_t_24): cb_SteamUnifiedMessagesSendMethodResult_t_24(lin_callback, callback); break;
+ }
+ break;
+case 3415:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoveAppDependencyResult_t_16): cb_RemoveAppDependencyResult_t_16(lin_callback, callback); break;
+ }
+ break;
+case 163:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGetAuthSessionTicketResponse_t_8): cb_GetAuthSessionTicketResponse_t_8(lin_callback, callback); break;
+ }
+ break;
+case 164:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGameWebCallback_t_256): cb_GameWebCallback_t_256(lin_callback, callback); break;
+ }
+ break;
+case 165:
+ switch(callback_len){
+ default:
+ case sizeof(struct winStoreAuthURLResponse_t_512): cb_StoreAuthURLResponse_t_512(lin_callback, callback); break;
+ }
+ break;
+case 1702:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGCMessageFailed_t_1): cb_GCMessageFailed_t_1(lin_callback, callback); break;
+ }
+ break;
+case 1201:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSocketStatusCallback_t_20): cb_SocketStatusCallback_t_20(lin_callback, callback); break;
+ }
+ break;
+case 1202:
+ switch(callback_len){
+ default:
+ case sizeof(struct winP2PSessionRequest_t_8): cb_P2PSessionRequest_t_8(lin_callback, callback); break;
+ }
+ break;
+case 1203:
+ switch(callback_len){
+ default:
+ case sizeof(struct winP2PSessionConnectFail_t_9): cb_P2PSessionConnectFail_t_9(lin_callback, callback); break;
+ }
+ break;
+case 4524:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_ShowToolTip_t_8): cb_HTML_ShowToolTip_t_8(lin_callback, callback); break;
+ }
+ break;
+case 701:
+ switch(callback_len){
+ default:
+ case sizeof(struct winIPCountry_t_1): cb_IPCountry_t_1(lin_callback, callback); break;
+ }
+ break;
+case 702:
+ switch(callback_len){
+ default:
+ case sizeof(struct winLowBatteryPower_t_1): cb_LowBatteryPower_t_1(lin_callback, callback); break;
+ }
+ break;
+case 703:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSteamAPICallCompleted_t_16): cb_SteamAPICallCompleted_t_16(lin_callback, callback); break;
+ case sizeof(struct winSteamAPICallCompleted_t_8): cb_SteamAPICallCompleted_t_8(lin_callback, callback); break;
+ }
+ break;
+case 704:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSteamShutdown_t_1): cb_SteamShutdown_t_1(lin_callback, callback); break;
+ }
+ break;
+case 705:
+ switch(callback_len){
+ default:
+ case sizeof(struct winCheckFileSignature_t_4): cb_CheckFileSignature_t_4(lin_callback, callback); break;
+ }
+ break;
+case 201:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGSClientApprove_t_16): cb_GSClientApprove_t_16(lin_callback, callback); break;
+ case sizeof(struct winGSClientApprove_t_8): cb_GSClientApprove_t_8(lin_callback, callback); break;
+ }
+ break;
+case 714:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGamepadTextInputDismissed_t_8): cb_GamepadTextInputDismissed_t_8(lin_callback, callback); break;
+ }
+ break;
+case 203:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGSClientKick_t_12): cb_GSClientKick_t_12(lin_callback, callback); break;
+ }
+ break;
+case 206:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGSClientAchievementStatus_t_140): cb_GSClientAchievementStatus_t_140(lin_callback, callback); break;
+ }
+ break;
+case 207:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGSGameplayStats_t_16): cb_GSGameplayStats_t_16(lin_callback, callback); break;
+ }
+ break;
+case 208:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGSClientGroupStatus_t_18): cb_GSClientGroupStatus_t_18(lin_callback, callback); break;
+ }
+ break;
+case 209:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGSReputation_t_32): cb_GSReputation_t_32(lin_callback, callback); break;
+ }
+ break;
+case 210:
+ switch(callback_len){
+ default:
+ case sizeof(struct winAssociateWithClanResult_t_4): cb_AssociateWithClanResult_t_4(lin_callback, callback); break;
+ }
+ break;
+case 211:
+ switch(callback_len){
+ default:
+ case sizeof(struct winComputeNewPlayerCompatibilityResult_t_24): cb_ComputeNewPlayerCompatibilityResult_t_24(lin_callback, callback); break;
+ case sizeof(struct winComputeNewPlayerCompatibilityResult_t_16): cb_ComputeNewPlayerCompatibilityResult_t_16(lin_callback, callback); break;
+ }
+ break;
+case 2301:
+ switch(callback_len){
+ default:
+ case sizeof(struct winScreenshotReady_t_8): cb_ScreenshotReady_t_8(lin_callback, callback); break;
+ }
+ break;
+case 2302:
+ switch(callback_len){
+ default:
+ case sizeof(struct winScreenshotRequested_t_1): cb_ScreenshotRequested_t_1(lin_callback, callback); break;
+ }
+ break;
+case 1800:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGSStatsReceived_t_12): cb_GSStatsReceived_t_12(lin_callback, callback); break;
+ }
+ break;
+case 1801:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGSStatsStored_t_12): cb_GSStatsStored_t_12(lin_callback, callback); break;
+ }
+ break;
+case 1301:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageAppSyncedClient_t_12): cb_RemoteStorageAppSyncedClient_t_12(lin_callback, callback); break;
+ }
+ break;
+case 1302:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageAppSyncedServer_t_12): cb_RemoteStorageAppSyncedServer_t_12(lin_callback, callback); break;
+ }
+ break;
+case 1303:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageAppSyncProgress_t_280): cb_RemoteStorageAppSyncProgress_t_280(lin_callback, callback); break;
+ }
+ break;
+case 1305:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageAppSyncStatusCheck_t_8): cb_RemoteStorageAppSyncStatusCheck_t_8(lin_callback, callback); break;
+ }
+ break;
+case 1306:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageConflictResolution_t_8): cb_RemoteStorageConflictResolution_t_8(lin_callback, callback); break;
+ }
+ break;
+case 1307:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageFileShareResult_t_272): cb_RemoteStorageFileShareResult_t_272(lin_callback, callback); break;
+ case sizeof(struct winRemoteStorageFileShareResult_t_12): cb_RemoteStorageFileShareResult_t_12(lin_callback, callback); break;
+ }
+ break;
+case 1308:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageDownloadUGCResult_t_32): cb_RemoteStorageDownloadUGCResult_t_32(lin_callback, callback); break;
+ }
+ break;
+case 1309:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStoragePublishFileResult_t_16): cb_RemoteStoragePublishFileResult_t_16(lin_callback, callback); break;
+ case sizeof(struct winRemoteStoragePublishFileResult_t_12): cb_RemoteStoragePublishFileResult_t_12(lin_callback, callback); break;
+ }
+ break;
+case 1310:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageGetPublishedFileDetailsResult_t_1732): cb_RemoteStorageGetPublishedFileDetailsResult_t_1732(lin_callback, callback); break;
+ }
+ break;
+case 1311:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageDeletePublishedFileResult_t_12): cb_RemoteStorageDeletePublishedFileResult_t_12(lin_callback, callback); break;
+ }
+ break;
+case 1312:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageEnumerateUserPublishedFilesResult_t_412): cb_RemoteStorageEnumerateUserPublishedFilesResult_t_412(lin_callback, callback); break;
+ }
+ break;
+case 1313:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageSubscribePublishedFileResult_t_12): cb_RemoteStorageSubscribePublishedFileResult_t_12(lin_callback, callback); break;
+ case sizeof(struct winRemoteStorageSubscribePublishedFileResult_t_4): cb_RemoteStorageSubscribePublishedFileResult_t_4(lin_callback, callback); break;
+ }
+ break;
+case 1314:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageEnumerateUserSubscribedFilesResult_t_612): cb_RemoteStorageEnumerateUserSubscribedFilesResult_t_612(lin_callback, callback); break;
+ }
+ break;
+case 1315:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageUnsubscribePublishedFileResult_t_12): cb_RemoteStorageUnsubscribePublishedFileResult_t_12(lin_callback, callback); break;
+ case sizeof(struct winRemoteStorageUnsubscribePublishedFileResult_t_4): cb_RemoteStorageUnsubscribePublishedFileResult_t_4(lin_callback, callback); break;
+ }
+ break;
+case 1316:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageUpdatePublishedFileResult_t_16): cb_RemoteStorageUpdatePublishedFileResult_t_16(lin_callback, callback); break;
+ case sizeof(struct winRemoteStorageUpdatePublishedFileResult_t_12): cb_RemoteStorageUpdatePublishedFileResult_t_12(lin_callback, callback); break;
+ }
+ break;
+case 1317:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageDownloadUGCResult_t_288): cb_RemoteStorageDownloadUGCResult_t_288(lin_callback, callback); break;
+ }
+ break;
+case 1318:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageGetPublishedFileDetailsResult_t_9748): cb_RemoteStorageGetPublishedFileDetailsResult_t_9748(lin_callback, callback); break;
+ case sizeof(struct winRemoteStorageGetPublishedFileDetailsResult_t_9744): cb_RemoteStorageGetPublishedFileDetailsResult_t_9744(lin_callback, callback); break;
+ case sizeof(struct winRemoteStorageGetPublishedFileDetailsResult_t_9484): cb_RemoteStorageGetPublishedFileDetailsResult_t_9484(lin_callback, callback); break;
+ }
+ break;
+case 1319:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageEnumerateWorkshopFilesResult_t_620): cb_RemoteStorageEnumerateWorkshopFilesResult_t_620(lin_callback, callback); break;
+ case sizeof(struct winRemoteStorageEnumerateWorkshopFilesResult_t_612): cb_RemoteStorageEnumerateWorkshopFilesResult_t_612(lin_callback, callback); break;
+ }
+ break;
+case 1320:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageGetPublishedItemVoteDetailsResult_t_28): cb_RemoteStorageGetPublishedItemVoteDetailsResult_t_28(lin_callback, callback); break;
+ }
+ break;
+case 1321:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStoragePublishedFileSubscribed_t_12): cb_RemoteStoragePublishedFileSubscribed_t_12(lin_callback, callback); break;
+ }
+ break;
+case 1322:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStoragePublishedFileUnsubscribed_t_12): cb_RemoteStoragePublishedFileUnsubscribed_t_12(lin_callback, callback); break;
+ }
+ break;
+case 1323:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStoragePublishedFileDeleted_t_12): cb_RemoteStoragePublishedFileDeleted_t_12(lin_callback, callback); break;
+ }
+ break;
+case 1324:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageUpdateUserPublishedItemVoteResult_t_12): cb_RemoteStorageUpdateUserPublishedItemVoteResult_t_12(lin_callback, callback); break;
+ }
+ break;
+case 1325:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageUserVoteDetails_t_16): cb_RemoteStorageUserVoteDetails_t_16(lin_callback, callback); break;
+ }
+ break;
+case 1326:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageEnumerateUserSharedWorkshopFilesResult_t_412): cb_RemoteStorageEnumerateUserSharedWorkshopFilesResult_t_412(lin_callback, callback); break;
+ }
+ break;
+case 1327:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageSetUserPublishedFileActionResult_t_16): cb_RemoteStorageSetUserPublishedFileActionResult_t_16(lin_callback, callback); break;
+ }
+ break;
+case 1328:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageEnumeratePublishedFilesByUserActionResult_t_616): cb_RemoteStorageEnumeratePublishedFilesByUserActionResult_t_616(lin_callback, callback); break;
+ }
+ break;
+case 1329:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStoragePublishFileProgress_t_12): cb_RemoteStoragePublishFileProgress_t_12(lin_callback, callback); break;
+ }
+ break;
+case 1330:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStoragePublishedFileUpdated_t_20): cb_RemoteStoragePublishedFileUpdated_t_20(lin_callback, callback); break;
+ }
+ break;
+case 1331:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageFileWriteAsyncComplete_t_4): cb_RemoteStorageFileWriteAsyncComplete_t_4(lin_callback, callback); break;
+ }
+ break;
+case 1332:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRemoteStorageFileReadAsyncComplete_t_20): cb_RemoteStorageFileReadAsyncComplete_t_20(lin_callback, callback); break;
+ }
+ break;
+case 3901:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSteamAppInstalled_t_4): cb_SteamAppInstalled_t_4(lin_callback, callback); break;
+ }
+ break;
+case 3902:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSteamAppUninstalled_t_4): cb_SteamAppUninstalled_t_4(lin_callback, callback); break;
+ }
+ break;
+case 3401:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSteamUGCQueryCompleted_t_24): cb_SteamUGCQueryCompleted_t_24(lin_callback, callback); break;
+ }
+ break;
+case 3402:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSteamUGCRequestUGCDetailsResult_t_9768): cb_SteamUGCRequestUGCDetailsResult_t_9768(lin_callback, callback); break;
+ case sizeof(struct winSteamUGCRequestUGCDetailsResult_t_9760): cb_SteamUGCRequestUGCDetailsResult_t_9760(lin_callback, callback); break;
+ }
+ break;
+case 331:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGameOverlayActivated_t_1): cb_GameOverlayActivated_t_1(lin_callback, callback); break;
+ }
+ break;
+case 332:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGameServerChangeRequested_t_128): cb_GameServerChangeRequested_t_128(lin_callback, callback); break;
+ }
+ break;
+case 333:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGameLobbyJoinRequested_t_16): cb_GameLobbyJoinRequested_t_16(lin_callback, callback); break;
+ }
+ break;
+case 334:
+ switch(callback_len){
+ default:
+ case sizeof(struct winAvatarImageLoaded_t_20): cb_AvatarImageLoaded_t_20(lin_callback, callback); break;
+ }
+ break;
+case 335:
+ switch(callback_len){
+ default:
+ case sizeof(struct winClanOfficerListResponse_t_16): cb_ClanOfficerListResponse_t_16(lin_callback, callback); break;
+ }
+ break;
+case 336:
+ switch(callback_len){
+ default:
+ case sizeof(struct winFriendRichPresenceUpdate_t_12): cb_FriendRichPresenceUpdate_t_12(lin_callback, callback); break;
+ }
+ break;
+case 337:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGameRichPresenceJoinRequested_t_264): cb_GameRichPresenceJoinRequested_t_264(lin_callback, callback); break;
+ }
+ break;
+case 338:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGameConnectedClanChatMsg_t_20): cb_GameConnectedClanChatMsg_t_20(lin_callback, callback); break;
+ case sizeof(struct winNameHistoryResponse_t_8): cb_NameHistoryResponse_t_8(lin_callback, callback); break;
+ }
+ break;
+case 339:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGameConnectedChatJoin_t_16): cb_GameConnectedChatJoin_t_16(lin_callback, callback); break;
+ }
+ break;
+case 340:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGameConnectedChatLeave_t_18): cb_GameConnectedChatLeave_t_18(lin_callback, callback); break;
+ }
+ break;
+case 341:
+ switch(callback_len){
+ default:
+ case sizeof(struct winDownloadClanActivityCountsResult_t_1): cb_DownloadClanActivityCountsResult_t_1(lin_callback, callback); break;
+ }
+ break;
+case 342:
+ switch(callback_len){
+ default:
+ case sizeof(struct winJoinClanChatRoomCompletionResult_t_12): cb_JoinClanChatRoomCompletionResult_t_12(lin_callback, callback); break;
+ }
+ break;
+case 343:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGameConnectedFriendChatMsg_t_12): cb_GameConnectedFriendChatMsg_t_12(lin_callback, callback); break;
+ }
+ break;
+case 344:
+ switch(callback_len){
+ default:
+ case sizeof(struct winFriendsGetFollowerCount_t_16): cb_FriendsGetFollowerCount_t_16(lin_callback, callback); break;
+ }
+ break;
+case 345:
+ switch(callback_len){
+ default:
+ case sizeof(struct winFriendsIsFollowing_t_16): cb_FriendsIsFollowing_t_16(lin_callback, callback); break;
+ }
+ break;
+case 346:
+ switch(callback_len){
+ default:
+ case sizeof(struct winFriendsEnumerateFollowingList_t_412): cb_FriendsEnumerateFollowingList_t_412(lin_callback, callback); break;
+ }
+ break;
+case 347:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSetPersonaNameResponse_t_8): cb_SetPersonaNameResponse_t_8(lin_callback, callback); break;
+ }
+ break;
+case 5001:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSteamParentalSettingsChanged_t_1): cb_SteamParentalSettingsChanged_t_1(lin_callback, callback); break;
+ }
+ break;
+case 4501:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_BrowserReady_t_4): cb_HTML_BrowserReady_t_4(lin_callback, callback); break;
+ }
+ break;
+case 4502:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_NeedsPaint_t_48): cb_HTML_NeedsPaint_t_48(lin_callback, callback); break;
+ }
+ break;
+case 4503:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_StartRequest_t_20): cb_HTML_StartRequest_t_20(lin_callback, callback); break;
+ }
+ break;
+case 4504:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_CloseBrowser_t_4): cb_HTML_CloseBrowser_t_4(lin_callback, callback); break;
+ }
+ break;
+case 4505:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_URLChanged_t_24): cb_HTML_URLChanged_t_24(lin_callback, callback); break;
+ }
+ break;
+case 4506:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_FinishedRequest_t_12): cb_HTML_FinishedRequest_t_12(lin_callback, callback); break;
+ }
+ break;
+case 4507:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_OpenLinkInNewTab_t_8): cb_HTML_OpenLinkInNewTab_t_8(lin_callback, callback); break;
+ }
+ break;
+case 4508:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_ChangedTitle_t_8): cb_HTML_ChangedTitle_t_8(lin_callback, callback); break;
+ }
+ break;
+case 4509:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_SearchResults_t_12): cb_HTML_SearchResults_t_12(lin_callback, callback); break;
+ }
+ break;
+case 4510:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_CanGoBackAndForward_t_8): cb_HTML_CanGoBackAndForward_t_8(lin_callback, callback); break;
+ }
+ break;
+case 4511:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_HorizontalScroll_t_24): cb_HTML_HorizontalScroll_t_24(lin_callback, callback); break;
+ }
+ break;
+case 4512:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_VerticalScroll_t_24): cb_HTML_VerticalScroll_t_24(lin_callback, callback); break;
+ }
+ break;
+case 4001:
+ switch(callback_len){
+ default:
+ case sizeof(struct winPlaybackStatusHasChanged_t_1): cb_PlaybackStatusHasChanged_t_1(lin_callback, callback); break;
+ }
+ break;
+case 4002:
+ switch(callback_len){
+ default:
+ case sizeof(struct winVolumeHasChanged_t_4): cb_VolumeHasChanged_t_4(lin_callback, callback); break;
+ }
+ break;
+case 4515:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_JSConfirm_t_8): cb_HTML_JSConfirm_t_8(lin_callback, callback); break;
+ }
+ break;
+case 4516:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_FileOpenDialog_t_12): cb_HTML_FileOpenDialog_t_12(lin_callback, callback); break;
+ }
+ break;
+case 4517:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_ComboNeedsPaint_t_16): cb_HTML_ComboNeedsPaint_t_16(lin_callback, callback); break;
+ }
+ break;
+case 4518:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_ShowPopup_t_4): cb_HTML_ShowPopup_t_4(lin_callback, callback); break;
+ }
+ break;
+case 4519:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_HidePopup_t_4): cb_HTML_HidePopup_t_4(lin_callback, callback); break;
+ }
+ break;
+case 4520:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_SizePopup_t_20): cb_HTML_SizePopup_t_20(lin_callback, callback); break;
+ }
+ break;
+case 4521:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_NewWindow_t_28): cb_HTML_NewWindow_t_28(lin_callback, callback); break;
+ case sizeof(struct winHTML_NewWindow_t_24): cb_HTML_NewWindow_t_24(lin_callback, callback); break;
+ }
+ break;
+case 4522:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_SetCursor_t_8): cb_HTML_SetCursor_t_8(lin_callback, callback); break;
+ }
+ break;
+case 4011:
+ switch(callback_len){
+ default:
+ case sizeof(struct winMusicPlayerWantsVolume_t_4): cb_MusicPlayerWantsVolume_t_4(lin_callback, callback); break;
+ }
+ break;
+case 4012:
+ switch(callback_len){
+ default:
+ case sizeof(struct winMusicPlayerSelectsQueueEntry_t_4): cb_MusicPlayerSelectsQueueEntry_t_4(lin_callback, callback); break;
+ }
+ break;
+case 4013:
+ switch(callback_len){
+ default:
+ case sizeof(struct winMusicPlayerSelectsPlaylistEntry_t_4): cb_MusicPlayerSelectsPlaylistEntry_t_4(lin_callback, callback); break;
+ }
+ break;
+case 4526:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_HideToolTip_t_4): cb_HTML_HideToolTip_t_4(lin_callback, callback); break;
+ }
+ break;
+case 304:
+ switch(callback_len){
+ default:
+ case sizeof(struct winPersonaStateChange_t_12): cb_PersonaStateChange_t_12(lin_callback, callback); break;
+ }
+ break;
+case 202:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGSClientDeny_t_140): cb_GSClientDeny_t_140(lin_callback, callback); break;
+ }
+ break;
+case 3403:
+ switch(callback_len){
+ default:
+ case sizeof(struct winCreateItemResult_t_16): cb_CreateItemResult_t_16(lin_callback, callback); break;
+ }
+ break;
+case 1014:
+ switch(callback_len){
+ default:
+ case sizeof(struct winNewLaunchQueryParameters_t_1): cb_NewLaunchQueryParameters_t_1(lin_callback, callback); break;
+ }
+ break;
+case 4513:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_LinkAtPosition_t_20): cb_HTML_LinkAtPosition_t_20(lin_callback, callback); break;
+ }
+ break;
+case 3404:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSubmitItemUpdateResult_t_16): cb_SubmitItemUpdateResult_t_16(lin_callback, callback); break;
+ case sizeof(struct winSubmitItemUpdateResult_t_8): cb_SubmitItemUpdateResult_t_8(lin_callback, callback); break;
+ }
+ break;
+case 4514:
+ switch(callback_len){
+ default:
+ case sizeof(struct winHTML_JSAlert_t_8): cb_HTML_JSAlert_t_8(lin_callback, callback); break;
+ }
+ break;
+case 3405:
+ switch(callback_len){
+ default:
+ case sizeof(struct winItemInstalled_t_12): cb_ItemInstalled_t_12(lin_callback, callback); break;
+ }
+ break;
+case 511:
+ switch(callback_len){
+ default:
+ case sizeof(struct winLobbyClosing_t_8): cb_LobbyClosing_t_8(lin_callback, callback); break;
+ }
+ break;
+case 3406:
+ switch(callback_len){
+ default:
+ case sizeof(struct winDownloadItemResult_t_16): cb_DownloadItemResult_t_16(lin_callback, callback); break;
+ }
+ break;
+case 3407:
+ switch(callback_len){
+ default:
+ case sizeof(struct winUserFavoriteItemsListChanged_t_16): cb_UserFavoriteItemsListChanged_t_16(lin_callback, callback); break;
+ }
+ break;
+case 1701:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGCMessageAvailable_t_4): cb_GCMessageAvailable_t_4(lin_callback, callback); break;
+ }
+ break;
+case 3408:
+ switch(callback_len){
+ default:
+ case sizeof(struct winSetUserItemVoteResult_t_16): cb_SetUserItemVoteResult_t_16(lin_callback, callback); break;
+ }
+ break;
+case 3409:
+ switch(callback_len){
+ default:
+ case sizeof(struct winGetUserItemVoteResult_t_16): cb_GetUserItemVoteResult_t_16(lin_callback, callback); break;
+ }
+ break;
+case 1001:
+ switch(callback_len){
+ default:
+ case sizeof(struct winAppDataChanged_t_8): cb_AppDataChanged_t_8(lin_callback, callback); break;
+ }
+ break;
+case 1005:
+ switch(callback_len){
+ default:
+ case sizeof(struct winDlcInstalled_t_4): cb_DlcInstalled_t_4(lin_callback, callback); break;
+ }
+ break;
+case 1021:
+ switch(callback_len){
+ default:
+ case sizeof(struct winAppProofOfPurchaseKeyResponse_t_252): cb_AppProofOfPurchaseKeyResponse_t_252(lin_callback, callback); break;
+ }
+ break;
+case 1008:
+ switch(callback_len){
+ default:
+ case sizeof(struct winRegisterActivationCodeResponse_t_8): cb_RegisterActivationCodeResponse_t_8(lin_callback, callback); break;
+ }
+ break;
+case 3411:
+ switch(callback_len){
+ default:
+ case sizeof(struct winStopPlaytimeTrackingResult_t_4): cb_StopPlaytimeTrackingResult_t_4(lin_callback, callback); break;
+ }
+ break;
+case 1013:
+ switch(callback_len){
+ default:
+ case sizeof(struct winAppProofOfPurchaseKeyResponse_t_72): cb_AppProofOfPurchaseKeyResponse_t_72(lin_callback, callback); break;
+ }
+ break;
+case 502:
+ switch(callback_len){
+ default:
+ case sizeof(struct winFavoritesListChanged_t_28): cb_FavoritesListChanged_t_28(lin_callback, callback); break;
+ case sizeof(struct winFavoritesListChanged_t_24): cb_FavoritesListChanged_t_24(lin_callback, callback); break;
+ }
+ break;
+case 503:
+ switch(callback_len){
+ default:
+ case sizeof(struct winLobbyInvite_t_24): cb_LobbyInvite_t_24(lin_callback, callback); break;
+ case sizeof(struct winLobbyInvite_t_16): cb_LobbyInvite_t_16(lin_callback, callback); break;
+ }
+ break;
+case 504:
+ switch(callback_len){
+ default:
+ case sizeof(struct winLobbyEnter_t_20): cb_LobbyEnter_t_20(lin_callback, callback); break;
+ }
+ break;
+case 505:
+ switch(callback_len){
+ default:
+ case sizeof(struct winLobbyDataUpdate_t_20): cb_LobbyDataUpdate_t_20(lin_callback, callback); break;
+ case sizeof(struct winLobbyDataUpdate_t_16): cb_LobbyDataUpdate_t_16(lin_callback, callback); break;
+ }
+ break;
+case 506:
+ switch(callback_len){
+ default:
+ case sizeof(struct winLobbyChatUpdate_t_28): cb_LobbyChatUpdate_t_28(lin_callback, callback); break;
+ }
+ break;
+case 507:
+ switch(callback_len){
+ default:
+ case sizeof(struct winLobbyChatMsg_t_24): cb_LobbyChatMsg_t_24(lin_callback, callback); break;
+ }
+ break;
+case 4604:
+ switch(callback_len){
+ default:
+ case sizeof(struct winBroadcastUploadStart_t_1): cb_BroadcastUploadStart_t_1(lin_callback, callback); break;
+ }
+ break;
+case 509:
+ switch(callback_len){
+ default:
+ case sizeof(struct winLobbyGameCreated_t_24): cb_LobbyGameCreated_t_24(lin_callback, callback); break;
+ }
+ break;
+case 510:
+ switch(callback_len){
+ default:
+ case sizeof(struct winLobbyMatchList_t_4): cb_LobbyMatchList_t_4(lin_callback, callback); break;
+ }
+ break;
+case 1023:
+ switch(callback_len){
+ default:
+ case sizeof(struct winFileDetailsResult_t_36): cb_FileDetailsResult_t_36(lin_callback, callback); break;
+ }
+ break;
diff --git a/lsteamclient/cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001.cpp b/lsteamclient/cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001.cpp
new file mode 100644
index 00000000..4e402ce3
--- /dev/null
+++ b/lsteamclient/cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001.cpp
@@ -0,0 +1,35 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+uint32 cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetNumInstalledApps(void *linux_side)
+{
+ return ((ISteamAppList*)linux_side)->GetNumInstalledApps();
+}
+
+uint32 cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetInstalledApps(void *linux_side, AppId_t * pvecAppID, uint32 unMaxAppIDs)
+{
+ return ((ISteamAppList*)linux_side)->GetInstalledApps((AppId_t *)pvecAppID, (uint32)unMaxAppIDs);
+}
+
+int cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetAppName(void *linux_side, AppId_t nAppID, char * pchName, int cchNameMax)
+{
+ return ((ISteamAppList*)linux_side)->GetAppName((AppId_t)nAppID, (char *)pchName, (int)cchNameMax);
+}
+
+int cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetAppInstallDir(void *linux_side, AppId_t nAppID, char * pchDirectory, int cchNameMax)
+{
+ return ((ISteamAppList*)linux_side)->GetAppInstallDir((AppId_t)nAppID, (char *)pchDirectory, (int)cchNameMax);
+}
+
+int cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetAppBuildId(void *linux_side, AppId_t nAppID)
+{
+ return ((ISteamAppList*)linux_side)->GetAppBuildId((AppId_t)nAppID);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001.h b/lsteamclient/cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001.h
new file mode 100644
index 00000000..45537285
--- /dev/null
+++ b/lsteamclient/cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001.h
@@ -0,0 +1,11 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern uint32 cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetNumInstalledApps(void *);
+extern uint32 cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetInstalledApps(void *, AppId_t *, uint32);
+extern int cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetAppName(void *, AppId_t, char *, int);
+extern int cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetAppInstallDir(void *, AppId_t, char *, int);
+extern int cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetAppBuildId(void *, AppId_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001.cpp b/lsteamclient/cppISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001.cpp
new file mode 100644
index 00000000..b922fcec
--- /dev/null
+++ b/lsteamclient/cppISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001.cpp
@@ -0,0 +1,16 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "steamworks_sdk_142/isteamappticket.h"
+#include "cppISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+uint32 cppISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001_GetAppOwnershipTicketData(void *linux_side, uint32 nAppID, void * pvBuffer, uint32 cbBufferLength, uint32 * piAppId, uint32 * piSteamId, uint32 * piSignature, uint32 * pcbSignature)
+{
+ return ((ISteamAppTicket*)linux_side)->GetAppOwnershipTicketData((uint32)nAppID, (void *)pvBuffer, (uint32)cbBufferLength, (uint32 *)piAppId, (uint32 *)piSteamId, (uint32 *)piSignature, (uint32 *)pcbSignature);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001.h b/lsteamclient/cppISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001.h
new file mode 100644
index 00000000..09c169b5
--- /dev/null
+++ b/lsteamclient/cppISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001.h
@@ -0,0 +1,7 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern uint32 cppISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001_GetAppOwnershipTicketData(void *, uint32, void *, uint32, uint32 *, uint32 *, uint32 *, uint32 *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION001.cpp b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION001.cpp
new file mode 100644
index 00000000..e5022d37
--- /dev/null
+++ b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION001.cpp
@@ -0,0 +1,15 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_100/steam_api.h"
+#include "cppISteamApps_STEAMAPPS_INTERFACE_VERSION001.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+int cppISteamApps_STEAMAPPS_INTERFACE_VERSION001_GetAppData(void *linux_side, AppId_t nAppID, const char * pchKey, char * pchValue, int cchValueMax)
+{
+ return ((ISteamApps*)linux_side)->GetAppData((AppId_t)nAppID, (const char *)pchKey, (char *)pchValue, (int)cchValueMax);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION001.h b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION001.h
new file mode 100644
index 00000000..b443c68b
--- /dev/null
+++ b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION001.h
@@ -0,0 +1,7 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern int cppISteamApps_STEAMAPPS_INTERFACE_VERSION001_GetAppData(void *, AppId_t, const char *, char *, int);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION002.cpp b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION002.cpp
new file mode 100644
index 00000000..d788b241
--- /dev/null
+++ b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION002.cpp
@@ -0,0 +1,45 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_103/steam_api.h"
+#include "cppISteamApps_STEAMAPPS_INTERFACE_VERSION002.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsSubscribed(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribed();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsLowViolence(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsLowViolence();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsCybercafe(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsCybercafe();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsVACBanned(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsVACBanned();
+}
+
+const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_GetCurrentGameLanguage(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetCurrentGameLanguage();
+}
+
+const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_GetAvailableGameLanguages(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetAvailableGameLanguages();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsSubscribedApp(void *linux_side, AppId_t appID)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribedApp((AppId_t)appID);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION002.h b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION002.h
new file mode 100644
index 00000000..a6fc51ea
--- /dev/null
+++ b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION002.h
@@ -0,0 +1,13 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsSubscribed(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsLowViolence(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsCybercafe(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsVACBanned(void *);
+extern const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_GetCurrentGameLanguage(void *);
+extern const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_GetAvailableGameLanguages(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsSubscribedApp(void *, AppId_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION003.cpp b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION003.cpp
new file mode 100644
index 00000000..118f875c
--- /dev/null
+++ b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION003.cpp
@@ -0,0 +1,50 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_111/steam_api.h"
+#include "cppISteamApps_STEAMAPPS_INTERFACE_VERSION003.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsSubscribed(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribed();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsLowViolence(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsLowViolence();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsCybercafe(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsCybercafe();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsVACBanned(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsVACBanned();
+}
+
+const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_GetCurrentGameLanguage(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetCurrentGameLanguage();
+}
+
+const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_GetAvailableGameLanguages(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetAvailableGameLanguages();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsSubscribedApp(void *linux_side, AppId_t appID)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribedApp((AppId_t)appID);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsDlcInstalled(void *linux_side, AppId_t appID)
+{
+ return ((ISteamApps*)linux_side)->BIsDlcInstalled((AppId_t)appID);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION003.h b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION003.h
new file mode 100644
index 00000000..a38c9b6d
--- /dev/null
+++ b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION003.h
@@ -0,0 +1,14 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsSubscribed(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsLowViolence(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsCybercafe(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsVACBanned(void *);
+extern const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_GetCurrentGameLanguage(void *);
+extern const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_GetAvailableGameLanguages(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsSubscribedApp(void *, AppId_t);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsDlcInstalled(void *, AppId_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION004.cpp b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION004.cpp
new file mode 100644
index 00000000..7e6846b4
--- /dev/null
+++ b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION004.cpp
@@ -0,0 +1,80 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_117/steam_api.h"
+#include "cppISteamApps_STEAMAPPS_INTERFACE_VERSION004.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsSubscribed(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribed();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsLowViolence(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsLowViolence();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsCybercafe(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsCybercafe();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsVACBanned(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsVACBanned();
+}
+
+const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetCurrentGameLanguage(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetCurrentGameLanguage();
+}
+
+const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetAvailableGameLanguages(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetAvailableGameLanguages();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsSubscribedApp(void *linux_side, AppId_t appID)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribedApp((AppId_t)appID);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsDlcInstalled(void *linux_side, AppId_t appID)
+{
+ return ((ISteamApps*)linux_side)->BIsDlcInstalled((AppId_t)appID);
+}
+
+uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetEarliestPurchaseUnixTime(void *linux_side, AppId_t nAppID)
+{
+ return ((ISteamApps*)linux_side)->GetEarliestPurchaseUnixTime((AppId_t)nAppID);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsSubscribedFromFreeWeekend(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribedFromFreeWeekend();
+}
+
+int cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetDLCCount(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetDLCCount();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BGetDLCDataByIndex(void *linux_side, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize)
+{
+ return ((ISteamApps*)linux_side)->BGetDLCDataByIndex((int)iDLC, (AppId_t *)pAppID, (bool *)pbAvailable, (char *)pchName, (int)cchNameBufferSize);
+}
+
+void cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_InstallDLC(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamApps*)linux_side)->InstallDLC((AppId_t)nAppID);
+}
+
+void cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_UninstallDLC(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamApps*)linux_side)->UninstallDLC((AppId_t)nAppID);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION004.h b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION004.h
new file mode 100644
index 00000000..515eed5d
--- /dev/null
+++ b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION004.h
@@ -0,0 +1,20 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsSubscribed(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsLowViolence(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsCybercafe(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsVACBanned(void *);
+extern const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetCurrentGameLanguage(void *);
+extern const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetAvailableGameLanguages(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsSubscribedApp(void *, AppId_t);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsDlcInstalled(void *, AppId_t);
+extern uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetEarliestPurchaseUnixTime(void *, AppId_t);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsSubscribedFromFreeWeekend(void *);
+extern int cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetDLCCount(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BGetDLCDataByIndex(void *, int, AppId_t *, bool *, char *, int);
+extern void cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_InstallDLC(void *, AppId_t);
+extern void cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_UninstallDLC(void *, AppId_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION005.cpp b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION005.cpp
new file mode 100644
index 00000000..acb7a2fe
--- /dev/null
+++ b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION005.cpp
@@ -0,0 +1,110 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_125/steam_api.h"
+#include "cppISteamApps_STEAMAPPS_INTERFACE_VERSION005.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsSubscribed(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribed();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsLowViolence(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsLowViolence();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsCybercafe(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsCybercafe();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsVACBanned(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsVACBanned();
+}
+
+const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetCurrentGameLanguage(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetCurrentGameLanguage();
+}
+
+const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetAvailableGameLanguages(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetAvailableGameLanguages();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsSubscribedApp(void *linux_side, AppId_t appID)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribedApp((AppId_t)appID);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsDlcInstalled(void *linux_side, AppId_t appID)
+{
+ return ((ISteamApps*)linux_side)->BIsDlcInstalled((AppId_t)appID);
+}
+
+uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetEarliestPurchaseUnixTime(void *linux_side, AppId_t nAppID)
+{
+ return ((ISteamApps*)linux_side)->GetEarliestPurchaseUnixTime((AppId_t)nAppID);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsSubscribedFromFreeWeekend(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribedFromFreeWeekend();
+}
+
+int cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetDLCCount(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetDLCCount();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BGetDLCDataByIndex(void *linux_side, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize)
+{
+ return ((ISteamApps*)linux_side)->BGetDLCDataByIndex((int)iDLC, (AppId_t *)pAppID, (bool *)pbAvailable, (char *)pchName, (int)cchNameBufferSize);
+}
+
+void cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_InstallDLC(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamApps*)linux_side)->InstallDLC((AppId_t)nAppID);
+}
+
+void cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_UninstallDLC(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamApps*)linux_side)->UninstallDLC((AppId_t)nAppID);
+}
+
+void cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_RequestAppProofOfPurchaseKey(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamApps*)linux_side)->RequestAppProofOfPurchaseKey((AppId_t)nAppID);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetCurrentBetaName(void *linux_side, char * pchName, int cchNameBufferSize)
+{
+ return ((ISteamApps*)linux_side)->GetCurrentBetaName((char *)pchName, (int)cchNameBufferSize);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_MarkContentCorrupt(void *linux_side, bool bMissingFilesOnly)
+{
+ return ((ISteamApps*)linux_side)->MarkContentCorrupt((bool)bMissingFilesOnly);
+}
+
+uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetInstalledDepots(void *linux_side, DepotId_t * pvecDepots, uint32 cMaxDepots)
+{
+ return ((ISteamApps*)linux_side)->GetInstalledDepots((DepotId_t *)pvecDepots, (uint32)cMaxDepots);
+}
+
+uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetAppInstallDir(void *linux_side, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize)
+{
+ return ((ISteamApps*)linux_side)->GetAppInstallDir((AppId_t)appID, (char *)pchFolder, (uint32)cchFolderBufferSize);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsAppInstalled(void *linux_side, AppId_t appID)
+{
+ return ((ISteamApps*)linux_side)->BIsAppInstalled((AppId_t)appID);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION005.h b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION005.h
new file mode 100644
index 00000000..bb2d7574
--- /dev/null
+++ b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION005.h
@@ -0,0 +1,26 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsSubscribed(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsLowViolence(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsCybercafe(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsVACBanned(void *);
+extern const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetCurrentGameLanguage(void *);
+extern const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetAvailableGameLanguages(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsSubscribedApp(void *, AppId_t);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsDlcInstalled(void *, AppId_t);
+extern uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetEarliestPurchaseUnixTime(void *, AppId_t);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsSubscribedFromFreeWeekend(void *);
+extern int cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetDLCCount(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BGetDLCDataByIndex(void *, int, AppId_t *, bool *, char *, int);
+extern void cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_InstallDLC(void *, AppId_t);
+extern void cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_UninstallDLC(void *, AppId_t);
+extern void cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_RequestAppProofOfPurchaseKey(void *, AppId_t);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetCurrentBetaName(void *, char *, int);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_MarkContentCorrupt(void *, bool);
+extern uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetInstalledDepots(void *, DepotId_t *, uint32);
+extern uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetAppInstallDir(void *, AppId_t, char *, uint32);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsAppInstalled(void *, AppId_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION006.cpp b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION006.cpp
new file mode 100644
index 00000000..1358f1e9
--- /dev/null
+++ b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION006.cpp
@@ -0,0 +1,120 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_131/steam_api.h"
+#include "cppISteamApps_STEAMAPPS_INTERFACE_VERSION006.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsSubscribed(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribed();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsLowViolence(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsLowViolence();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsCybercafe(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsCybercafe();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsVACBanned(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsVACBanned();
+}
+
+const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetCurrentGameLanguage(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetCurrentGameLanguage();
+}
+
+const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetAvailableGameLanguages(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetAvailableGameLanguages();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsSubscribedApp(void *linux_side, AppId_t appID)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribedApp((AppId_t)appID);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsDlcInstalled(void *linux_side, AppId_t appID)
+{
+ return ((ISteamApps*)linux_side)->BIsDlcInstalled((AppId_t)appID);
+}
+
+uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetEarliestPurchaseUnixTime(void *linux_side, AppId_t nAppID)
+{
+ return ((ISteamApps*)linux_side)->GetEarliestPurchaseUnixTime((AppId_t)nAppID);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsSubscribedFromFreeWeekend(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribedFromFreeWeekend();
+}
+
+int cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetDLCCount(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetDLCCount();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BGetDLCDataByIndex(void *linux_side, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize)
+{
+ return ((ISteamApps*)linux_side)->BGetDLCDataByIndex((int)iDLC, (AppId_t *)pAppID, (bool *)pbAvailable, (char *)pchName, (int)cchNameBufferSize);
+}
+
+void cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_InstallDLC(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamApps*)linux_side)->InstallDLC((AppId_t)nAppID);
+}
+
+void cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_UninstallDLC(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamApps*)linux_side)->UninstallDLC((AppId_t)nAppID);
+}
+
+void cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_RequestAppProofOfPurchaseKey(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamApps*)linux_side)->RequestAppProofOfPurchaseKey((AppId_t)nAppID);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetCurrentBetaName(void *linux_side, char * pchName, int cchNameBufferSize)
+{
+ return ((ISteamApps*)linux_side)->GetCurrentBetaName((char *)pchName, (int)cchNameBufferSize);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_MarkContentCorrupt(void *linux_side, bool bMissingFilesOnly)
+{
+ return ((ISteamApps*)linux_side)->MarkContentCorrupt((bool)bMissingFilesOnly);
+}
+
+uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetInstalledDepots(void *linux_side, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots)
+{
+ return ((ISteamApps*)linux_side)->GetInstalledDepots((AppId_t)appID, (DepotId_t *)pvecDepots, (uint32)cMaxDepots);
+}
+
+uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetAppInstallDir(void *linux_side, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize)
+{
+ return ((ISteamApps*)linux_side)->GetAppInstallDir((AppId_t)appID, (char *)pchFolder, (uint32)cchFolderBufferSize);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsAppInstalled(void *linux_side, AppId_t appID)
+{
+ return ((ISteamApps*)linux_side)->BIsAppInstalled((AppId_t)appID);
+}
+
+CSteamID cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetAppOwner(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetAppOwner();
+}
+
+const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetLaunchQueryParam(void *linux_side, const char * pchKey)
+{
+ return ((ISteamApps*)linux_side)->GetLaunchQueryParam((const char *)pchKey);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION006.h b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION006.h
new file mode 100644
index 00000000..e972da43
--- /dev/null
+++ b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION006.h
@@ -0,0 +1,28 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsSubscribed(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsLowViolence(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsCybercafe(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsVACBanned(void *);
+extern const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetCurrentGameLanguage(void *);
+extern const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetAvailableGameLanguages(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsSubscribedApp(void *, AppId_t);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsDlcInstalled(void *, AppId_t);
+extern uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetEarliestPurchaseUnixTime(void *, AppId_t);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsSubscribedFromFreeWeekend(void *);
+extern int cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetDLCCount(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BGetDLCDataByIndex(void *, int, AppId_t *, bool *, char *, int);
+extern void cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_InstallDLC(void *, AppId_t);
+extern void cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_UninstallDLC(void *, AppId_t);
+extern void cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_RequestAppProofOfPurchaseKey(void *, AppId_t);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetCurrentBetaName(void *, char *, int);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_MarkContentCorrupt(void *, bool);
+extern uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetInstalledDepots(void *, AppId_t, DepotId_t *, uint32);
+extern uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetAppInstallDir(void *, AppId_t, char *, uint32);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsAppInstalled(void *, AppId_t);
+extern CSteamID cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetAppOwner(void *);
+extern const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetLaunchQueryParam(void *, const char *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION007.cpp b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION007.cpp
new file mode 100644
index 00000000..d82aed34
--- /dev/null
+++ b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION007.cpp
@@ -0,0 +1,130 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_136/steam_api.h"
+#include "cppISteamApps_STEAMAPPS_INTERFACE_VERSION007.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsSubscribed(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribed();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsLowViolence(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsLowViolence();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsCybercafe(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsCybercafe();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsVACBanned(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsVACBanned();
+}
+
+const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetCurrentGameLanguage(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetCurrentGameLanguage();
+}
+
+const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAvailableGameLanguages(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetAvailableGameLanguages();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsSubscribedApp(void *linux_side, AppId_t appID)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribedApp((AppId_t)appID);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsDlcInstalled(void *linux_side, AppId_t appID)
+{
+ return ((ISteamApps*)linux_side)->BIsDlcInstalled((AppId_t)appID);
+}
+
+uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetEarliestPurchaseUnixTime(void *linux_side, AppId_t nAppID)
+{
+ return ((ISteamApps*)linux_side)->GetEarliestPurchaseUnixTime((AppId_t)nAppID);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsSubscribedFromFreeWeekend(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribedFromFreeWeekend();
+}
+
+int cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetDLCCount(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetDLCCount();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BGetDLCDataByIndex(void *linux_side, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize)
+{
+ return ((ISteamApps*)linux_side)->BGetDLCDataByIndex((int)iDLC, (AppId_t *)pAppID, (bool *)pbAvailable, (char *)pchName, (int)cchNameBufferSize);
+}
+
+void cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_InstallDLC(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamApps*)linux_side)->InstallDLC((AppId_t)nAppID);
+}
+
+void cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_UninstallDLC(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamApps*)linux_side)->UninstallDLC((AppId_t)nAppID);
+}
+
+void cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_RequestAppProofOfPurchaseKey(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamApps*)linux_side)->RequestAppProofOfPurchaseKey((AppId_t)nAppID);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetCurrentBetaName(void *linux_side, char * pchName, int cchNameBufferSize)
+{
+ return ((ISteamApps*)linux_side)->GetCurrentBetaName((char *)pchName, (int)cchNameBufferSize);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_MarkContentCorrupt(void *linux_side, bool bMissingFilesOnly)
+{
+ return ((ISteamApps*)linux_side)->MarkContentCorrupt((bool)bMissingFilesOnly);
+}
+
+uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetInstalledDepots(void *linux_side, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots)
+{
+ return ((ISteamApps*)linux_side)->GetInstalledDepots((AppId_t)appID, (DepotId_t *)pvecDepots, (uint32)cMaxDepots);
+}
+
+uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAppInstallDir(void *linux_side, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize)
+{
+ return ((ISteamApps*)linux_side)->GetAppInstallDir((AppId_t)appID, (char *)pchFolder, (uint32)cchFolderBufferSize);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsAppInstalled(void *linux_side, AppId_t appID)
+{
+ return ((ISteamApps*)linux_side)->BIsAppInstalled((AppId_t)appID);
+}
+
+CSteamID cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAppOwner(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetAppOwner();
+}
+
+const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetLaunchQueryParam(void *linux_side, const char * pchKey)
+{
+ return ((ISteamApps*)linux_side)->GetLaunchQueryParam((const char *)pchKey);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetDlcDownloadProgress(void *linux_side, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal)
+{
+ return ((ISteamApps*)linux_side)->GetDlcDownloadProgress((AppId_t)nAppID, (uint64 *)punBytesDownloaded, (uint64 *)punBytesTotal);
+}
+
+int cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAppBuildId(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetAppBuildId();
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION007.h b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION007.h
new file mode 100644
index 00000000..ba100385
--- /dev/null
+++ b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION007.h
@@ -0,0 +1,30 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsSubscribed(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsLowViolence(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsCybercafe(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsVACBanned(void *);
+extern const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetCurrentGameLanguage(void *);
+extern const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAvailableGameLanguages(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsSubscribedApp(void *, AppId_t);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsDlcInstalled(void *, AppId_t);
+extern uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetEarliestPurchaseUnixTime(void *, AppId_t);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsSubscribedFromFreeWeekend(void *);
+extern int cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetDLCCount(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BGetDLCDataByIndex(void *, int, AppId_t *, bool *, char *, int);
+extern void cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_InstallDLC(void *, AppId_t);
+extern void cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_UninstallDLC(void *, AppId_t);
+extern void cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_RequestAppProofOfPurchaseKey(void *, AppId_t);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetCurrentBetaName(void *, char *, int);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_MarkContentCorrupt(void *, bool);
+extern uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetInstalledDepots(void *, AppId_t, DepotId_t *, uint32);
+extern uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAppInstallDir(void *, AppId_t, char *, uint32);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsAppInstalled(void *, AppId_t);
+extern CSteamID cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAppOwner(void *);
+extern const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetLaunchQueryParam(void *, const char *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetDlcDownloadProgress(void *, AppId_t, uint64 *, uint64 *);
+extern int cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAppBuildId(void *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION008.cpp b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION008.cpp
new file mode 100644
index 00000000..e4416872
--- /dev/null
+++ b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION008.cpp
@@ -0,0 +1,140 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamApps_STEAMAPPS_INTERFACE_VERSION008.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsSubscribed(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribed();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsLowViolence(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsLowViolence();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsCybercafe(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsCybercafe();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsVACBanned(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsVACBanned();
+}
+
+const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetCurrentGameLanguage(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetCurrentGameLanguage();
+}
+
+const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAvailableGameLanguages(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetAvailableGameLanguages();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsSubscribedApp(void *linux_side, AppId_t appID)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribedApp((AppId_t)appID);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsDlcInstalled(void *linux_side, AppId_t appID)
+{
+ return ((ISteamApps*)linux_side)->BIsDlcInstalled((AppId_t)appID);
+}
+
+uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetEarliestPurchaseUnixTime(void *linux_side, AppId_t nAppID)
+{
+ return ((ISteamApps*)linux_side)->GetEarliestPurchaseUnixTime((AppId_t)nAppID);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsSubscribedFromFreeWeekend(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->BIsSubscribedFromFreeWeekend();
+}
+
+int cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetDLCCount(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetDLCCount();
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BGetDLCDataByIndex(void *linux_side, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize)
+{
+ return ((ISteamApps*)linux_side)->BGetDLCDataByIndex((int)iDLC, (AppId_t *)pAppID, (bool *)pbAvailable, (char *)pchName, (int)cchNameBufferSize);
+}
+
+void cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_InstallDLC(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamApps*)linux_side)->InstallDLC((AppId_t)nAppID);
+}
+
+void cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_UninstallDLC(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamApps*)linux_side)->UninstallDLC((AppId_t)nAppID);
+}
+
+void cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_RequestAppProofOfPurchaseKey(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamApps*)linux_side)->RequestAppProofOfPurchaseKey((AppId_t)nAppID);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetCurrentBetaName(void *linux_side, char * pchName, int cchNameBufferSize)
+{
+ return ((ISteamApps*)linux_side)->GetCurrentBetaName((char *)pchName, (int)cchNameBufferSize);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_MarkContentCorrupt(void *linux_side, bool bMissingFilesOnly)
+{
+ return ((ISteamApps*)linux_side)->MarkContentCorrupt((bool)bMissingFilesOnly);
+}
+
+uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetInstalledDepots(void *linux_side, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots)
+{
+ return ((ISteamApps*)linux_side)->GetInstalledDepots((AppId_t)appID, (DepotId_t *)pvecDepots, (uint32)cMaxDepots);
+}
+
+uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAppInstallDir(void *linux_side, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize)
+{
+ return ((ISteamApps*)linux_side)->GetAppInstallDir((AppId_t)appID, (char *)pchFolder, (uint32)cchFolderBufferSize);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsAppInstalled(void *linux_side, AppId_t appID)
+{
+ return ((ISteamApps*)linux_side)->BIsAppInstalled((AppId_t)appID);
+}
+
+CSteamID cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAppOwner(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetAppOwner();
+}
+
+const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetLaunchQueryParam(void *linux_side, const char * pchKey)
+{
+ return ((ISteamApps*)linux_side)->GetLaunchQueryParam((const char *)pchKey);
+}
+
+bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetDlcDownloadProgress(void *linux_side, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal)
+{
+ return ((ISteamApps*)linux_side)->GetDlcDownloadProgress((AppId_t)nAppID, (uint64 *)punBytesDownloaded, (uint64 *)punBytesTotal);
+}
+
+int cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAppBuildId(void *linux_side)
+{
+ return ((ISteamApps*)linux_side)->GetAppBuildId();
+}
+
+void cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_RequestAllProofOfPurchaseKeys(void *linux_side)
+{
+ ((ISteamApps*)linux_side)->RequestAllProofOfPurchaseKeys();
+}
+
+SteamAPICall_t cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetFileDetails(void *linux_side, const char * pszFileName)
+{
+ return ((ISteamApps*)linux_side)->GetFileDetails((const char *)pszFileName);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION008.h b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION008.h
new file mode 100644
index 00000000..7e92f423
--- /dev/null
+++ b/lsteamclient/cppISteamApps_STEAMAPPS_INTERFACE_VERSION008.h
@@ -0,0 +1,32 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsSubscribed(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsLowViolence(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsCybercafe(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsVACBanned(void *);
+extern const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetCurrentGameLanguage(void *);
+extern const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAvailableGameLanguages(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsSubscribedApp(void *, AppId_t);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsDlcInstalled(void *, AppId_t);
+extern uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetEarliestPurchaseUnixTime(void *, AppId_t);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsSubscribedFromFreeWeekend(void *);
+extern int cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetDLCCount(void *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BGetDLCDataByIndex(void *, int, AppId_t *, bool *, char *, int);
+extern void cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_InstallDLC(void *, AppId_t);
+extern void cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_UninstallDLC(void *, AppId_t);
+extern void cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_RequestAppProofOfPurchaseKey(void *, AppId_t);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetCurrentBetaName(void *, char *, int);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_MarkContentCorrupt(void *, bool);
+extern uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetInstalledDepots(void *, AppId_t, DepotId_t *, uint32);
+extern uint32 cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAppInstallDir(void *, AppId_t, char *, uint32);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsAppInstalled(void *, AppId_t);
+extern CSteamID cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAppOwner(void *);
+extern const char * cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetLaunchQueryParam(void *, const char *);
+extern bool cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetDlcDownloadProgress(void *, AppId_t, uint64 *, uint64 *);
+extern int cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAppBuildId(void *);
+extern void cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_RequestAllProofOfPurchaseKeys(void *);
+extern SteamAPICall_t cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetFileDetails(void *, const char *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient007.cpp b/lsteamclient/cppISteamClient_SteamClient007.cpp
new file mode 100644
index 00000000..dcba4613
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient007.cpp
@@ -0,0 +1,120 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_103/steam_api.h"
+#include "cppISteamClient_SteamClient007.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamPipe cppISteamClient_SteamClient007_CreateSteamPipe(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->CreateSteamPipe();
+}
+
+bool cppISteamClient_SteamClient007_BReleaseSteamPipe(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->BReleaseSteamPipe((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient007_ConnectToGlobalUser(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->ConnectToGlobalUser((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient007_CreateLocalUser(void *linux_side, HSteamPipe * phSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->CreateLocalUser((HSteamPipe *)phSteamPipe);
+}
+
+void cppISteamClient_SteamClient007_ReleaseUser(void *linux_side, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ ((ISteamClient*)linux_side)->ReleaseUser((HSteamPipe)hSteamPipe, (HSteamUser)hUser);
+}
+
+void *cppISteamClient_SteamClient007_GetISteamUser(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUser((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient007_GetISteamGameServer(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGameServer((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient007_SetLocalIPBinding(void *linux_side, uint32 unIP, uint16 usPort)
+{
+ ((ISteamClient*)linux_side)->SetLocalIPBinding((uint32)unIP, (uint16)usPort);
+}
+
+void *cppISteamClient_SteamClient007_GetISteamFriends(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamFriends((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient007_GetISteamUtils(void *linux_side, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUtils((HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient007_GetISteamMatchmaking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmaking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient007_GetISteamContentServer(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamContentServer((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient007_GetISteamMasterServerUpdater(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMasterServerUpdater((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient007_GetISteamMatchmakingServers(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmakingServers((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void * cppISteamClient_SteamClient007_GetISteamGenericInterface(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGenericInterface((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient007_RunFrame(void *linux_side)
+{
+ ((ISteamClient*)linux_side)->RunFrame();
+}
+
+uint32 cppISteamClient_SteamClient007_GetIPCCallCount(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->GetIPCCallCount();
+}
+
+void *cppISteamClient_SteamClient007_GetISteamUserStats(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUserStats((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient007_GetISteamApps(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamApps((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient007_GetISteamNetworking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamNetworking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient007_SetWarningMessageHook(void *linux_side, SteamAPIWarningMessageHook_t pFunction)
+{
+ ((ISteamClient*)linux_side)->SetWarningMessageHook((SteamAPIWarningMessageHook_t)pFunction);
+}
+
+void *cppISteamClient_SteamClient007_GetISteamRemoteStorage(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamRemoteStorage((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient007.h b/lsteamclient/cppISteamClient_SteamClient007.h
new file mode 100644
index 00000000..ba7198de
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient007.h
@@ -0,0 +1,28 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamPipe cppISteamClient_SteamClient007_CreateSteamPipe(void *);
+extern bool cppISteamClient_SteamClient007_BReleaseSteamPipe(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient007_ConnectToGlobalUser(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient007_CreateLocalUser(void *, HSteamPipe *);
+extern void cppISteamClient_SteamClient007_ReleaseUser(void *, HSteamPipe, HSteamUser);
+extern void *cppISteamClient_SteamClient007_GetISteamUser(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient007_GetISteamGameServer(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient007_SetLocalIPBinding(void *, uint32, uint16);
+extern void *cppISteamClient_SteamClient007_GetISteamFriends(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient007_GetISteamUtils(void *, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient007_GetISteamMatchmaking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient007_GetISteamContentServer(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient007_GetISteamMasterServerUpdater(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient007_GetISteamMatchmakingServers(void *, HSteamUser, HSteamPipe, const char *);
+extern void * cppISteamClient_SteamClient007_GetISteamGenericInterface(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient007_RunFrame(void *);
+extern uint32 cppISteamClient_SteamClient007_GetIPCCallCount(void *);
+extern void *cppISteamClient_SteamClient007_GetISteamUserStats(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient007_GetISteamApps(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient007_GetISteamNetworking(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient007_SetWarningMessageHook(void *, SteamAPIWarningMessageHook_t);
+extern void *cppISteamClient_SteamClient007_GetISteamRemoteStorage(void *, HSteamUser, HSteamPipe, const char *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient008.cpp b/lsteamclient/cppISteamClient_SteamClient008.cpp
new file mode 100644
index 00000000..55da09af
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient008.cpp
@@ -0,0 +1,115 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_107/steam_api.h"
+#include "cppISteamClient_SteamClient008.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamPipe cppISteamClient_SteamClient008_CreateSteamPipe(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->CreateSteamPipe();
+}
+
+bool cppISteamClient_SteamClient008_BReleaseSteamPipe(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->BReleaseSteamPipe((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient008_ConnectToGlobalUser(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->ConnectToGlobalUser((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient008_CreateLocalUser(void *linux_side, HSteamPipe * phSteamPipe, EAccountType eAccountType)
+{
+ return ((ISteamClient*)linux_side)->CreateLocalUser((HSteamPipe *)phSteamPipe, (EAccountType)eAccountType);
+}
+
+void cppISteamClient_SteamClient008_ReleaseUser(void *linux_side, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ ((ISteamClient*)linux_side)->ReleaseUser((HSteamPipe)hSteamPipe, (HSteamUser)hUser);
+}
+
+void *cppISteamClient_SteamClient008_GetISteamUser(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUser((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient008_GetISteamGameServer(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGameServer((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient008_SetLocalIPBinding(void *linux_side, uint32 unIP, uint16 usPort)
+{
+ ((ISteamClient*)linux_side)->SetLocalIPBinding((uint32)unIP, (uint16)usPort);
+}
+
+void *cppISteamClient_SteamClient008_GetISteamFriends(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamFriends((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient008_GetISteamUtils(void *linux_side, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUtils((HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient008_GetISteamMatchmaking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmaking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient008_GetISteamMasterServerUpdater(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMasterServerUpdater((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient008_GetISteamMatchmakingServers(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmakingServers((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void * cppISteamClient_SteamClient008_GetISteamGenericInterface(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGenericInterface((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient008_GetISteamUserStats(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUserStats((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient008_GetISteamApps(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamApps((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient008_GetISteamNetworking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamNetworking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient008_GetISteamRemoteStorage(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamRemoteStorage((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient008_RunFrame(void *linux_side)
+{
+ ((ISteamClient*)linux_side)->RunFrame();
+}
+
+uint32 cppISteamClient_SteamClient008_GetIPCCallCount(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->GetIPCCallCount();
+}
+
+void cppISteamClient_SteamClient008_SetWarningMessageHook(void *linux_side, SteamAPIWarningMessageHook_t pFunction)
+{
+ ((ISteamClient*)linux_side)->SetWarningMessageHook((SteamAPIWarningMessageHook_t)pFunction);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient008.h b/lsteamclient/cppISteamClient_SteamClient008.h
new file mode 100644
index 00000000..1a5af401
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient008.h
@@ -0,0 +1,27 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamPipe cppISteamClient_SteamClient008_CreateSteamPipe(void *);
+extern bool cppISteamClient_SteamClient008_BReleaseSteamPipe(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient008_ConnectToGlobalUser(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient008_CreateLocalUser(void *, HSteamPipe *, EAccountType);
+extern void cppISteamClient_SteamClient008_ReleaseUser(void *, HSteamPipe, HSteamUser);
+extern void *cppISteamClient_SteamClient008_GetISteamUser(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient008_GetISteamGameServer(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient008_SetLocalIPBinding(void *, uint32, uint16);
+extern void *cppISteamClient_SteamClient008_GetISteamFriends(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient008_GetISteamUtils(void *, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient008_GetISteamMatchmaking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient008_GetISteamMasterServerUpdater(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient008_GetISteamMatchmakingServers(void *, HSteamUser, HSteamPipe, const char *);
+extern void * cppISteamClient_SteamClient008_GetISteamGenericInterface(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient008_GetISteamUserStats(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient008_GetISteamApps(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient008_GetISteamNetworking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient008_GetISteamRemoteStorage(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient008_RunFrame(void *);
+extern uint32 cppISteamClient_SteamClient008_GetIPCCallCount(void *);
+extern void cppISteamClient_SteamClient008_SetWarningMessageHook(void *, SteamAPIWarningMessageHook_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient009.cpp b/lsteamclient/cppISteamClient_SteamClient009.cpp
new file mode 100644
index 00000000..742e9c98
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient009.cpp
@@ -0,0 +1,120 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_111/steam_api.h"
+#include "cppISteamClient_SteamClient009.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamPipe cppISteamClient_SteamClient009_CreateSteamPipe(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->CreateSteamPipe();
+}
+
+bool cppISteamClient_SteamClient009_BReleaseSteamPipe(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->BReleaseSteamPipe((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient009_ConnectToGlobalUser(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->ConnectToGlobalUser((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient009_CreateLocalUser(void *linux_side, HSteamPipe * phSteamPipe, EAccountType eAccountType)
+{
+ return ((ISteamClient*)linux_side)->CreateLocalUser((HSteamPipe *)phSteamPipe, (EAccountType)eAccountType);
+}
+
+void cppISteamClient_SteamClient009_ReleaseUser(void *linux_side, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ ((ISteamClient*)linux_side)->ReleaseUser((HSteamPipe)hSteamPipe, (HSteamUser)hUser);
+}
+
+void *cppISteamClient_SteamClient009_GetISteamUser(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUser((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient009_GetISteamGameServer(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGameServer((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient009_SetLocalIPBinding(void *linux_side, uint32 unIP, uint16 usPort)
+{
+ ((ISteamClient*)linux_side)->SetLocalIPBinding((uint32)unIP, (uint16)usPort);
+}
+
+void *cppISteamClient_SteamClient009_GetISteamFriends(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamFriends((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient009_GetISteamUtils(void *linux_side, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUtils((HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient009_GetISteamMatchmaking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmaking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient009_GetISteamMasterServerUpdater(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMasterServerUpdater((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient009_GetISteamMatchmakingServers(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmakingServers((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void * cppISteamClient_SteamClient009_GetISteamGenericInterface(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGenericInterface((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient009_GetISteamUserStats(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUserStats((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient009_GetISteamGameServerStats(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGameServerStats((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient009_GetISteamApps(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamApps((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient009_GetISteamNetworking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamNetworking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient009_GetISteamRemoteStorage(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamRemoteStorage((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient009_RunFrame(void *linux_side)
+{
+ ((ISteamClient*)linux_side)->RunFrame();
+}
+
+uint32 cppISteamClient_SteamClient009_GetIPCCallCount(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->GetIPCCallCount();
+}
+
+void cppISteamClient_SteamClient009_SetWarningMessageHook(void *linux_side, SteamAPIWarningMessageHook_t pFunction)
+{
+ ((ISteamClient*)linux_side)->SetWarningMessageHook((SteamAPIWarningMessageHook_t)pFunction);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient009.h b/lsteamclient/cppISteamClient_SteamClient009.h
new file mode 100644
index 00000000..f23244f0
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient009.h
@@ -0,0 +1,28 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamPipe cppISteamClient_SteamClient009_CreateSteamPipe(void *);
+extern bool cppISteamClient_SteamClient009_BReleaseSteamPipe(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient009_ConnectToGlobalUser(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient009_CreateLocalUser(void *, HSteamPipe *, EAccountType);
+extern void cppISteamClient_SteamClient009_ReleaseUser(void *, HSteamPipe, HSteamUser);
+extern void *cppISteamClient_SteamClient009_GetISteamUser(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient009_GetISteamGameServer(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient009_SetLocalIPBinding(void *, uint32, uint16);
+extern void *cppISteamClient_SteamClient009_GetISteamFriends(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient009_GetISteamUtils(void *, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient009_GetISteamMatchmaking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient009_GetISteamMasterServerUpdater(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient009_GetISteamMatchmakingServers(void *, HSteamUser, HSteamPipe, const char *);
+extern void * cppISteamClient_SteamClient009_GetISteamGenericInterface(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient009_GetISteamUserStats(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient009_GetISteamGameServerStats(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient009_GetISteamApps(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient009_GetISteamNetworking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient009_GetISteamRemoteStorage(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient009_RunFrame(void *);
+extern uint32 cppISteamClient_SteamClient009_GetIPCCallCount(void *);
+extern void cppISteamClient_SteamClient009_SetWarningMessageHook(void *, SteamAPIWarningMessageHook_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient010.cpp b/lsteamclient/cppISteamClient_SteamClient010.cpp
new file mode 100644
index 00000000..685189ea
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient010.cpp
@@ -0,0 +1,130 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_115/steam_api.h"
+#include "cppISteamClient_SteamClient010.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamPipe cppISteamClient_SteamClient010_CreateSteamPipe(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->CreateSteamPipe();
+}
+
+bool cppISteamClient_SteamClient010_BReleaseSteamPipe(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->BReleaseSteamPipe((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient010_ConnectToGlobalUser(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->ConnectToGlobalUser((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient010_CreateLocalUser(void *linux_side, HSteamPipe * phSteamPipe, EAccountType eAccountType)
+{
+ return ((ISteamClient*)linux_side)->CreateLocalUser((HSteamPipe *)phSteamPipe, (EAccountType)eAccountType);
+}
+
+void cppISteamClient_SteamClient010_ReleaseUser(void *linux_side, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ ((ISteamClient*)linux_side)->ReleaseUser((HSteamPipe)hSteamPipe, (HSteamUser)hUser);
+}
+
+void *cppISteamClient_SteamClient010_GetISteamUser(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUser((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient010_GetISteamGameServer(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGameServer((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient010_SetLocalIPBinding(void *linux_side, uint32 unIP, uint16 usPort)
+{
+ ((ISteamClient*)linux_side)->SetLocalIPBinding((uint32)unIP, (uint16)usPort);
+}
+
+void *cppISteamClient_SteamClient010_GetISteamFriends(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamFriends((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient010_GetISteamUtils(void *linux_side, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUtils((HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient010_GetISteamMatchmaking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmaking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient010_GetISteamMasterServerUpdater(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMasterServerUpdater((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient010_GetISteamMatchmakingServers(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmakingServers((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void * cppISteamClient_SteamClient010_GetISteamGenericInterface(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGenericInterface((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient010_GetISteamUserStats(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUserStats((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient010_GetISteamGameServerStats(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGameServerStats((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient010_GetISteamApps(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamApps((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient010_GetISteamNetworking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamNetworking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient010_GetISteamRemoteStorage(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamRemoteStorage((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient010_RunFrame(void *linux_side)
+{
+ ((ISteamClient*)linux_side)->RunFrame();
+}
+
+uint32 cppISteamClient_SteamClient010_GetIPCCallCount(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->GetIPCCallCount();
+}
+
+void cppISteamClient_SteamClient010_SetWarningMessageHook(void *linux_side, SteamAPIWarningMessageHook_t pFunction)
+{
+ ((ISteamClient*)linux_side)->SetWarningMessageHook((SteamAPIWarningMessageHook_t)pFunction);
+}
+
+bool cppISteamClient_SteamClient010_BShutdownIfAllPipesClosed(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->BShutdownIfAllPipesClosed();
+}
+
+void *cppISteamClient_SteamClient010_GetISteamHTTP(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamHTTP((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient010.h b/lsteamclient/cppISteamClient_SteamClient010.h
new file mode 100644
index 00000000..6b0ee78a
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient010.h
@@ -0,0 +1,30 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamPipe cppISteamClient_SteamClient010_CreateSteamPipe(void *);
+extern bool cppISteamClient_SteamClient010_BReleaseSteamPipe(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient010_ConnectToGlobalUser(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient010_CreateLocalUser(void *, HSteamPipe *, EAccountType);
+extern void cppISteamClient_SteamClient010_ReleaseUser(void *, HSteamPipe, HSteamUser);
+extern void *cppISteamClient_SteamClient010_GetISteamUser(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient010_GetISteamGameServer(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient010_SetLocalIPBinding(void *, uint32, uint16);
+extern void *cppISteamClient_SteamClient010_GetISteamFriends(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient010_GetISteamUtils(void *, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient010_GetISteamMatchmaking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient010_GetISteamMasterServerUpdater(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient010_GetISteamMatchmakingServers(void *, HSteamUser, HSteamPipe, const char *);
+extern void * cppISteamClient_SteamClient010_GetISteamGenericInterface(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient010_GetISteamUserStats(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient010_GetISteamGameServerStats(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient010_GetISteamApps(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient010_GetISteamNetworking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient010_GetISteamRemoteStorage(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient010_RunFrame(void *);
+extern uint32 cppISteamClient_SteamClient010_GetIPCCallCount(void *);
+extern void cppISteamClient_SteamClient010_SetWarningMessageHook(void *, SteamAPIWarningMessageHook_t);
+extern bool cppISteamClient_SteamClient010_BShutdownIfAllPipesClosed(void *);
+extern void *cppISteamClient_SteamClient010_GetISteamHTTP(void *, HSteamUser, HSteamPipe, const char *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient011.cpp b/lsteamclient/cppISteamClient_SteamClient011.cpp
new file mode 100644
index 00000000..e8c52a17
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient011.cpp
@@ -0,0 +1,135 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_116/steam_api.h"
+#include "cppISteamClient_SteamClient011.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamPipe cppISteamClient_SteamClient011_CreateSteamPipe(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->CreateSteamPipe();
+}
+
+bool cppISteamClient_SteamClient011_BReleaseSteamPipe(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->BReleaseSteamPipe((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient011_ConnectToGlobalUser(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->ConnectToGlobalUser((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient011_CreateLocalUser(void *linux_side, HSteamPipe * phSteamPipe, EAccountType eAccountType)
+{
+ return ((ISteamClient*)linux_side)->CreateLocalUser((HSteamPipe *)phSteamPipe, (EAccountType)eAccountType);
+}
+
+void cppISteamClient_SteamClient011_ReleaseUser(void *linux_side, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ ((ISteamClient*)linux_side)->ReleaseUser((HSteamPipe)hSteamPipe, (HSteamUser)hUser);
+}
+
+void *cppISteamClient_SteamClient011_GetISteamUser(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUser((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient011_GetISteamGameServer(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGameServer((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient011_SetLocalIPBinding(void *linux_side, uint32 unIP, uint16 usPort)
+{
+ ((ISteamClient*)linux_side)->SetLocalIPBinding((uint32)unIP, (uint16)usPort);
+}
+
+void *cppISteamClient_SteamClient011_GetISteamFriends(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamFriends((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient011_GetISteamUtils(void *linux_side, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUtils((HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient011_GetISteamMatchmaking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmaking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient011_GetISteamMasterServerUpdater(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMasterServerUpdater((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient011_GetISteamMatchmakingServers(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmakingServers((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void * cppISteamClient_SteamClient011_GetISteamGenericInterface(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGenericInterface((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient011_GetISteamUserStats(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUserStats((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient011_GetISteamGameServerStats(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGameServerStats((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient011_GetISteamApps(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamApps((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient011_GetISteamNetworking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamNetworking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient011_GetISteamRemoteStorage(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamRemoteStorage((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient011_GetISteamScreenshots(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamScreenshots((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient011_RunFrame(void *linux_side)
+{
+ ((ISteamClient*)linux_side)->RunFrame();
+}
+
+uint32 cppISteamClient_SteamClient011_GetIPCCallCount(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->GetIPCCallCount();
+}
+
+void cppISteamClient_SteamClient011_SetWarningMessageHook(void *linux_side, SteamAPIWarningMessageHook_t pFunction)
+{
+ ((ISteamClient*)linux_side)->SetWarningMessageHook((SteamAPIWarningMessageHook_t)pFunction);
+}
+
+bool cppISteamClient_SteamClient011_BShutdownIfAllPipesClosed(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->BShutdownIfAllPipesClosed();
+}
+
+void *cppISteamClient_SteamClient011_GetISteamHTTP(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamHTTP((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient011.h b/lsteamclient/cppISteamClient_SteamClient011.h
new file mode 100644
index 00000000..a3379849
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient011.h
@@ -0,0 +1,31 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamPipe cppISteamClient_SteamClient011_CreateSteamPipe(void *);
+extern bool cppISteamClient_SteamClient011_BReleaseSteamPipe(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient011_ConnectToGlobalUser(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient011_CreateLocalUser(void *, HSteamPipe *, EAccountType);
+extern void cppISteamClient_SteamClient011_ReleaseUser(void *, HSteamPipe, HSteamUser);
+extern void *cppISteamClient_SteamClient011_GetISteamUser(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient011_GetISteamGameServer(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient011_SetLocalIPBinding(void *, uint32, uint16);
+extern void *cppISteamClient_SteamClient011_GetISteamFriends(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient011_GetISteamUtils(void *, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient011_GetISteamMatchmaking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient011_GetISteamMasterServerUpdater(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient011_GetISteamMatchmakingServers(void *, HSteamUser, HSteamPipe, const char *);
+extern void * cppISteamClient_SteamClient011_GetISteamGenericInterface(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient011_GetISteamUserStats(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient011_GetISteamGameServerStats(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient011_GetISteamApps(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient011_GetISteamNetworking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient011_GetISteamRemoteStorage(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient011_GetISteamScreenshots(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient011_RunFrame(void *);
+extern uint32 cppISteamClient_SteamClient011_GetIPCCallCount(void *);
+extern void cppISteamClient_SteamClient011_SetWarningMessageHook(void *, SteamAPIWarningMessageHook_t);
+extern bool cppISteamClient_SteamClient011_BShutdownIfAllPipesClosed(void *);
+extern void *cppISteamClient_SteamClient011_GetISteamHTTP(void *, HSteamUser, HSteamPipe, const char *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient012.cpp b/lsteamclient/cppISteamClient_SteamClient012.cpp
new file mode 100644
index 00000000..d84b0a15
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient012.cpp
@@ -0,0 +1,145 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_128/steam_api.h"
+#include "cppISteamClient_SteamClient012.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamPipe cppISteamClient_SteamClient012_CreateSteamPipe(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->CreateSteamPipe();
+}
+
+bool cppISteamClient_SteamClient012_BReleaseSteamPipe(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->BReleaseSteamPipe((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient012_ConnectToGlobalUser(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->ConnectToGlobalUser((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient012_CreateLocalUser(void *linux_side, HSteamPipe * phSteamPipe, EAccountType eAccountType)
+{
+ return ((ISteamClient*)linux_side)->CreateLocalUser((HSteamPipe *)phSteamPipe, (EAccountType)eAccountType);
+}
+
+void cppISteamClient_SteamClient012_ReleaseUser(void *linux_side, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ ((ISteamClient*)linux_side)->ReleaseUser((HSteamPipe)hSteamPipe, (HSteamUser)hUser);
+}
+
+void *cppISteamClient_SteamClient012_GetISteamUser(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUser((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient012_GetISteamGameServer(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGameServer((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient012_SetLocalIPBinding(void *linux_side, uint32 unIP, uint16 usPort)
+{
+ ((ISteamClient*)linux_side)->SetLocalIPBinding((uint32)unIP, (uint16)usPort);
+}
+
+void *cppISteamClient_SteamClient012_GetISteamFriends(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamFriends((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient012_GetISteamUtils(void *linux_side, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUtils((HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient012_GetISteamMatchmaking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmaking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient012_GetISteamMatchmakingServers(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmakingServers((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void * cppISteamClient_SteamClient012_GetISteamGenericInterface(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGenericInterface((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient012_GetISteamUserStats(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUserStats((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient012_GetISteamGameServerStats(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGameServerStats((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient012_GetISteamApps(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamApps((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient012_GetISteamNetworking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamNetworking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient012_GetISteamRemoteStorage(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamRemoteStorage((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient012_GetISteamScreenshots(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamScreenshots((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient012_RunFrame(void *linux_side)
+{
+ ((ISteamClient*)linux_side)->RunFrame();
+}
+
+uint32 cppISteamClient_SteamClient012_GetIPCCallCount(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->GetIPCCallCount();
+}
+
+void cppISteamClient_SteamClient012_SetWarningMessageHook(void *linux_side, SteamAPIWarningMessageHook_t pFunction)
+{
+ ((ISteamClient*)linux_side)->SetWarningMessageHook((SteamAPIWarningMessageHook_t)pFunction);
+}
+
+bool cppISteamClient_SteamClient012_BShutdownIfAllPipesClosed(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->BShutdownIfAllPipesClosed();
+}
+
+void *cppISteamClient_SteamClient012_GetISteamHTTP(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamHTTP((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient012_GetISteamUnifiedMessages(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUnifiedMessages((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient012_GetISteamController(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamController((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient012_GetISteamUGC(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUGC((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient012.h b/lsteamclient/cppISteamClient_SteamClient012.h
new file mode 100644
index 00000000..6c801067
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient012.h
@@ -0,0 +1,33 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamPipe cppISteamClient_SteamClient012_CreateSteamPipe(void *);
+extern bool cppISteamClient_SteamClient012_BReleaseSteamPipe(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient012_ConnectToGlobalUser(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient012_CreateLocalUser(void *, HSteamPipe *, EAccountType);
+extern void cppISteamClient_SteamClient012_ReleaseUser(void *, HSteamPipe, HSteamUser);
+extern void *cppISteamClient_SteamClient012_GetISteamUser(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient012_GetISteamGameServer(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient012_SetLocalIPBinding(void *, uint32, uint16);
+extern void *cppISteamClient_SteamClient012_GetISteamFriends(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient012_GetISteamUtils(void *, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient012_GetISteamMatchmaking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient012_GetISteamMatchmakingServers(void *, HSteamUser, HSteamPipe, const char *);
+extern void * cppISteamClient_SteamClient012_GetISteamGenericInterface(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient012_GetISteamUserStats(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient012_GetISteamGameServerStats(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient012_GetISteamApps(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient012_GetISteamNetworking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient012_GetISteamRemoteStorage(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient012_GetISteamScreenshots(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient012_RunFrame(void *);
+extern uint32 cppISteamClient_SteamClient012_GetIPCCallCount(void *);
+extern void cppISteamClient_SteamClient012_SetWarningMessageHook(void *, SteamAPIWarningMessageHook_t);
+extern bool cppISteamClient_SteamClient012_BShutdownIfAllPipesClosed(void *);
+extern void *cppISteamClient_SteamClient012_GetISteamHTTP(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient012_GetISteamUnifiedMessages(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient012_GetISteamController(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient012_GetISteamUGC(void *, HSteamUser, HSteamPipe, const char *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient014.cpp b/lsteamclient/cppISteamClient_SteamClient014.cpp
new file mode 100644
index 00000000..faca812e
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient014.cpp
@@ -0,0 +1,155 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_129a/steam_api.h"
+#include "cppISteamClient_SteamClient014.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamPipe cppISteamClient_SteamClient014_CreateSteamPipe(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->CreateSteamPipe();
+}
+
+bool cppISteamClient_SteamClient014_BReleaseSteamPipe(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->BReleaseSteamPipe((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient014_ConnectToGlobalUser(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->ConnectToGlobalUser((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient014_CreateLocalUser(void *linux_side, HSteamPipe * phSteamPipe, EAccountType eAccountType)
+{
+ return ((ISteamClient*)linux_side)->CreateLocalUser((HSteamPipe *)phSteamPipe, (EAccountType)eAccountType);
+}
+
+void cppISteamClient_SteamClient014_ReleaseUser(void *linux_side, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ ((ISteamClient*)linux_side)->ReleaseUser((HSteamPipe)hSteamPipe, (HSteamUser)hUser);
+}
+
+void *cppISteamClient_SteamClient014_GetISteamUser(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUser((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient014_GetISteamGameServer(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGameServer((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient014_SetLocalIPBinding(void *linux_side, uint32 unIP, uint16 usPort)
+{
+ ((ISteamClient*)linux_side)->SetLocalIPBinding((uint32)unIP, (uint16)usPort);
+}
+
+void *cppISteamClient_SteamClient014_GetISteamFriends(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamFriends((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient014_GetISteamUtils(void *linux_side, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUtils((HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient014_GetISteamMatchmaking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmaking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient014_GetISteamMatchmakingServers(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmakingServers((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void * cppISteamClient_SteamClient014_GetISteamGenericInterface(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGenericInterface((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient014_GetISteamUserStats(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUserStats((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient014_GetISteamGameServerStats(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGameServerStats((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient014_GetISteamApps(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamApps((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient014_GetISteamNetworking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamNetworking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient014_GetISteamRemoteStorage(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamRemoteStorage((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient014_GetISteamScreenshots(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamScreenshots((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient014_RunFrame(void *linux_side)
+{
+ ((ISteamClient*)linux_side)->RunFrame();
+}
+
+uint32 cppISteamClient_SteamClient014_GetIPCCallCount(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->GetIPCCallCount();
+}
+
+void cppISteamClient_SteamClient014_SetWarningMessageHook(void *linux_side, SteamAPIWarningMessageHook_t pFunction)
+{
+ ((ISteamClient*)linux_side)->SetWarningMessageHook((SteamAPIWarningMessageHook_t)pFunction);
+}
+
+bool cppISteamClient_SteamClient014_BShutdownIfAllPipesClosed(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->BShutdownIfAllPipesClosed();
+}
+
+void *cppISteamClient_SteamClient014_GetISteamHTTP(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamHTTP((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient014_GetISteamUnifiedMessages(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUnifiedMessages((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient014_GetISteamController(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamController((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient014_GetISteamUGC(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUGC((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient014_GetISteamAppList(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamAppList((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient014_GetISteamMusic(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMusic((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient014.h b/lsteamclient/cppISteamClient_SteamClient014.h
new file mode 100644
index 00000000..91e08236
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient014.h
@@ -0,0 +1,35 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamPipe cppISteamClient_SteamClient014_CreateSteamPipe(void *);
+extern bool cppISteamClient_SteamClient014_BReleaseSteamPipe(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient014_ConnectToGlobalUser(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient014_CreateLocalUser(void *, HSteamPipe *, EAccountType);
+extern void cppISteamClient_SteamClient014_ReleaseUser(void *, HSteamPipe, HSteamUser);
+extern void *cppISteamClient_SteamClient014_GetISteamUser(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient014_GetISteamGameServer(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient014_SetLocalIPBinding(void *, uint32, uint16);
+extern void *cppISteamClient_SteamClient014_GetISteamFriends(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient014_GetISteamUtils(void *, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient014_GetISteamMatchmaking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient014_GetISteamMatchmakingServers(void *, HSteamUser, HSteamPipe, const char *);
+extern void * cppISteamClient_SteamClient014_GetISteamGenericInterface(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient014_GetISteamUserStats(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient014_GetISteamGameServerStats(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient014_GetISteamApps(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient014_GetISteamNetworking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient014_GetISteamRemoteStorage(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient014_GetISteamScreenshots(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient014_RunFrame(void *);
+extern uint32 cppISteamClient_SteamClient014_GetIPCCallCount(void *);
+extern void cppISteamClient_SteamClient014_SetWarningMessageHook(void *, SteamAPIWarningMessageHook_t);
+extern bool cppISteamClient_SteamClient014_BShutdownIfAllPipesClosed(void *);
+extern void *cppISteamClient_SteamClient014_GetISteamHTTP(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient014_GetISteamUnifiedMessages(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient014_GetISteamController(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient014_GetISteamUGC(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient014_GetISteamAppList(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient014_GetISteamMusic(void *, HSteamUser, HSteamPipe, const char *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient015.cpp b/lsteamclient/cppISteamClient_SteamClient015.cpp
new file mode 100644
index 00000000..89c17131
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient015.cpp
@@ -0,0 +1,160 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_130/steam_api.h"
+#include "cppISteamClient_SteamClient015.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamPipe cppISteamClient_SteamClient015_CreateSteamPipe(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->CreateSteamPipe();
+}
+
+bool cppISteamClient_SteamClient015_BReleaseSteamPipe(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->BReleaseSteamPipe((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient015_ConnectToGlobalUser(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->ConnectToGlobalUser((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient015_CreateLocalUser(void *linux_side, HSteamPipe * phSteamPipe, EAccountType eAccountType)
+{
+ return ((ISteamClient*)linux_side)->CreateLocalUser((HSteamPipe *)phSteamPipe, (EAccountType)eAccountType);
+}
+
+void cppISteamClient_SteamClient015_ReleaseUser(void *linux_side, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ ((ISteamClient*)linux_side)->ReleaseUser((HSteamPipe)hSteamPipe, (HSteamUser)hUser);
+}
+
+void *cppISteamClient_SteamClient015_GetISteamUser(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUser((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient015_GetISteamGameServer(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGameServer((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient015_SetLocalIPBinding(void *linux_side, uint32 unIP, uint16 usPort)
+{
+ ((ISteamClient*)linux_side)->SetLocalIPBinding((uint32)unIP, (uint16)usPort);
+}
+
+void *cppISteamClient_SteamClient015_GetISteamFriends(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamFriends((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient015_GetISteamUtils(void *linux_side, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUtils((HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient015_GetISteamMatchmaking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmaking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient015_GetISteamMatchmakingServers(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmakingServers((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void * cppISteamClient_SteamClient015_GetISteamGenericInterface(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGenericInterface((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient015_GetISteamUserStats(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUserStats((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient015_GetISteamGameServerStats(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGameServerStats((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient015_GetISteamApps(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamApps((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient015_GetISteamNetworking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamNetworking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient015_GetISteamRemoteStorage(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamRemoteStorage((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient015_GetISteamScreenshots(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamScreenshots((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient015_RunFrame(void *linux_side)
+{
+ ((ISteamClient*)linux_side)->RunFrame();
+}
+
+uint32 cppISteamClient_SteamClient015_GetIPCCallCount(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->GetIPCCallCount();
+}
+
+void cppISteamClient_SteamClient015_SetWarningMessageHook(void *linux_side, SteamAPIWarningMessageHook_t pFunction)
+{
+ ((ISteamClient*)linux_side)->SetWarningMessageHook((SteamAPIWarningMessageHook_t)pFunction);
+}
+
+bool cppISteamClient_SteamClient015_BShutdownIfAllPipesClosed(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->BShutdownIfAllPipesClosed();
+}
+
+void *cppISteamClient_SteamClient015_GetISteamHTTP(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamHTTP((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient015_GetISteamUnifiedMessages(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUnifiedMessages((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient015_GetISteamController(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamController((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient015_GetISteamUGC(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUGC((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient015_GetISteamAppList(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamAppList((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient015_GetISteamMusic(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMusic((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient015_GetISteamMusicRemote(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMusicRemote((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient015.h b/lsteamclient/cppISteamClient_SteamClient015.h
new file mode 100644
index 00000000..4cc0d2a8
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient015.h
@@ -0,0 +1,36 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamPipe cppISteamClient_SteamClient015_CreateSteamPipe(void *);
+extern bool cppISteamClient_SteamClient015_BReleaseSteamPipe(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient015_ConnectToGlobalUser(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient015_CreateLocalUser(void *, HSteamPipe *, EAccountType);
+extern void cppISteamClient_SteamClient015_ReleaseUser(void *, HSteamPipe, HSteamUser);
+extern void *cppISteamClient_SteamClient015_GetISteamUser(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient015_GetISteamGameServer(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient015_SetLocalIPBinding(void *, uint32, uint16);
+extern void *cppISteamClient_SteamClient015_GetISteamFriends(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient015_GetISteamUtils(void *, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient015_GetISteamMatchmaking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient015_GetISteamMatchmakingServers(void *, HSteamUser, HSteamPipe, const char *);
+extern void * cppISteamClient_SteamClient015_GetISteamGenericInterface(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient015_GetISteamUserStats(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient015_GetISteamGameServerStats(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient015_GetISteamApps(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient015_GetISteamNetworking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient015_GetISteamRemoteStorage(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient015_GetISteamScreenshots(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient015_RunFrame(void *);
+extern uint32 cppISteamClient_SteamClient015_GetIPCCallCount(void *);
+extern void cppISteamClient_SteamClient015_SetWarningMessageHook(void *, SteamAPIWarningMessageHook_t);
+extern bool cppISteamClient_SteamClient015_BShutdownIfAllPipesClosed(void *);
+extern void *cppISteamClient_SteamClient015_GetISteamHTTP(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient015_GetISteamUnifiedMessages(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient015_GetISteamController(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient015_GetISteamUGC(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient015_GetISteamAppList(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient015_GetISteamMusic(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient015_GetISteamMusicRemote(void *, HSteamUser, HSteamPipe, const char *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient016.cpp b/lsteamclient/cppISteamClient_SteamClient016.cpp
new file mode 100644
index 00000000..9e59ccc2
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient016.cpp
@@ -0,0 +1,180 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_131/steam_api.h"
+#include "cppISteamClient_SteamClient016.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamPipe cppISteamClient_SteamClient016_CreateSteamPipe(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->CreateSteamPipe();
+}
+
+bool cppISteamClient_SteamClient016_BReleaseSteamPipe(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->BReleaseSteamPipe((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient016_ConnectToGlobalUser(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->ConnectToGlobalUser((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient016_CreateLocalUser(void *linux_side, HSteamPipe * phSteamPipe, EAccountType eAccountType)
+{
+ return ((ISteamClient*)linux_side)->CreateLocalUser((HSteamPipe *)phSteamPipe, (EAccountType)eAccountType);
+}
+
+void cppISteamClient_SteamClient016_ReleaseUser(void *linux_side, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ ((ISteamClient*)linux_side)->ReleaseUser((HSteamPipe)hSteamPipe, (HSteamUser)hUser);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamUser(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUser((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamGameServer(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGameServer((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient016_SetLocalIPBinding(void *linux_side, uint32 unIP, uint16 usPort)
+{
+ ((ISteamClient*)linux_side)->SetLocalIPBinding((uint32)unIP, (uint16)usPort);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamFriends(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamFriends((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamUtils(void *linux_side, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUtils((HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamMatchmaking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmaking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamMatchmakingServers(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmakingServers((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void * cppISteamClient_SteamClient016_GetISteamGenericInterface(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGenericInterface((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamUserStats(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUserStats((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamGameServerStats(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGameServerStats((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamApps(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamApps((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamNetworking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamNetworking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamRemoteStorage(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamRemoteStorage((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamScreenshots(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamScreenshots((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient016_RunFrame(void *linux_side)
+{
+ ((ISteamClient*)linux_side)->RunFrame();
+}
+
+uint32 cppISteamClient_SteamClient016_GetIPCCallCount(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->GetIPCCallCount();
+}
+
+void cppISteamClient_SteamClient016_SetWarningMessageHook(void *linux_side, SteamAPIWarningMessageHook_t pFunction)
+{
+ ((ISteamClient*)linux_side)->SetWarningMessageHook((SteamAPIWarningMessageHook_t)pFunction);
+}
+
+bool cppISteamClient_SteamClient016_BShutdownIfAllPipesClosed(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->BShutdownIfAllPipesClosed();
+}
+
+void *cppISteamClient_SteamClient016_GetISteamHTTP(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamHTTP((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamUnifiedMessages(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUnifiedMessages((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamController(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamController((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamUGC(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUGC((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamAppList(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamAppList((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamMusic(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMusic((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamMusicRemote(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMusicRemote((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient016_GetISteamHTMLSurface(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamHTMLSurface((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient016_Set_SteamAPI_CPostAPIResultInProcess(void *linux_side, SteamAPI_PostAPIResultInProcess_t func)
+{
+ ((ISteamClient*)linux_side)->Set_SteamAPI_CPostAPIResultInProcess((SteamAPI_PostAPIResultInProcess_t)func);
+}
+
+void cppISteamClient_SteamClient016_Remove_SteamAPI_CPostAPIResultInProcess(void *linux_side, SteamAPI_PostAPIResultInProcess_t func)
+{
+ ((ISteamClient*)linux_side)->Remove_SteamAPI_CPostAPIResultInProcess((SteamAPI_PostAPIResultInProcess_t)func);
+}
+
+void cppISteamClient_SteamClient016_Set_SteamAPI_CCheckCallbackRegisteredInProcess(void *linux_side, SteamAPI_CheckCallbackRegistered_t func)
+{
+ ((ISteamClient*)linux_side)->Set_SteamAPI_CCheckCallbackRegisteredInProcess((SteamAPI_CheckCallbackRegistered_t)func);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient016.h b/lsteamclient/cppISteamClient_SteamClient016.h
new file mode 100644
index 00000000..cfef323a
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient016.h
@@ -0,0 +1,40 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamPipe cppISteamClient_SteamClient016_CreateSteamPipe(void *);
+extern bool cppISteamClient_SteamClient016_BReleaseSteamPipe(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient016_ConnectToGlobalUser(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient016_CreateLocalUser(void *, HSteamPipe *, EAccountType);
+extern void cppISteamClient_SteamClient016_ReleaseUser(void *, HSteamPipe, HSteamUser);
+extern void *cppISteamClient_SteamClient016_GetISteamUser(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient016_GetISteamGameServer(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient016_SetLocalIPBinding(void *, uint32, uint16);
+extern void *cppISteamClient_SteamClient016_GetISteamFriends(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient016_GetISteamUtils(void *, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient016_GetISteamMatchmaking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient016_GetISteamMatchmakingServers(void *, HSteamUser, HSteamPipe, const char *);
+extern void * cppISteamClient_SteamClient016_GetISteamGenericInterface(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient016_GetISteamUserStats(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient016_GetISteamGameServerStats(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient016_GetISteamApps(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient016_GetISteamNetworking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient016_GetISteamRemoteStorage(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient016_GetISteamScreenshots(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient016_RunFrame(void *);
+extern uint32 cppISteamClient_SteamClient016_GetIPCCallCount(void *);
+extern void cppISteamClient_SteamClient016_SetWarningMessageHook(void *, SteamAPIWarningMessageHook_t);
+extern bool cppISteamClient_SteamClient016_BShutdownIfAllPipesClosed(void *);
+extern void *cppISteamClient_SteamClient016_GetISteamHTTP(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient016_GetISteamUnifiedMessages(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient016_GetISteamController(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient016_GetISteamUGC(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient016_GetISteamAppList(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient016_GetISteamMusic(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient016_GetISteamMusicRemote(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient016_GetISteamHTMLSurface(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient016_Set_SteamAPI_CPostAPIResultInProcess(void *, SteamAPI_PostAPIResultInProcess_t);
+extern void cppISteamClient_SteamClient016_Remove_SteamAPI_CPostAPIResultInProcess(void *, SteamAPI_PostAPIResultInProcess_t);
+extern void cppISteamClient_SteamClient016_Set_SteamAPI_CCheckCallbackRegisteredInProcess(void *, SteamAPI_CheckCallbackRegistered_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient017.cpp b/lsteamclient/cppISteamClient_SteamClient017.cpp
new file mode 100644
index 00000000..f851e22f
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient017.cpp
@@ -0,0 +1,195 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamClient_SteamClient017.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamPipe cppISteamClient_SteamClient017_CreateSteamPipe(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->CreateSteamPipe();
+}
+
+bool cppISteamClient_SteamClient017_BReleaseSteamPipe(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->BReleaseSteamPipe((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient017_ConnectToGlobalUser(void *linux_side, HSteamPipe hSteamPipe)
+{
+ return ((ISteamClient*)linux_side)->ConnectToGlobalUser((HSteamPipe)hSteamPipe);
+}
+
+HSteamUser cppISteamClient_SteamClient017_CreateLocalUser(void *linux_side, HSteamPipe * phSteamPipe, EAccountType eAccountType)
+{
+ return ((ISteamClient*)linux_side)->CreateLocalUser((HSteamPipe *)phSteamPipe, (EAccountType)eAccountType);
+}
+
+void cppISteamClient_SteamClient017_ReleaseUser(void *linux_side, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ ((ISteamClient*)linux_side)->ReleaseUser((HSteamPipe)hSteamPipe, (HSteamUser)hUser);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamUser(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUser((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamGameServer(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGameServer((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient017_SetLocalIPBinding(void *linux_side, uint32 unIP, uint16 usPort)
+{
+ ((ISteamClient*)linux_side)->SetLocalIPBinding((uint32)unIP, (uint16)usPort);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamFriends(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamFriends((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamUtils(void *linux_side, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUtils((HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamMatchmaking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmaking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamMatchmakingServers(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMatchmakingServers((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void * cppISteamClient_SteamClient017_GetISteamGenericInterface(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGenericInterface((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamUserStats(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUserStats((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamGameServerStats(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamGameServerStats((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamApps(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamApps((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamNetworking(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamNetworking((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamRemoteStorage(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamRemoteStorage((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamScreenshots(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamScreenshots((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient017_RunFrame(void *linux_side)
+{
+ ((ISteamClient*)linux_side)->RunFrame();
+}
+
+uint32 cppISteamClient_SteamClient017_GetIPCCallCount(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->GetIPCCallCount();
+}
+
+void cppISteamClient_SteamClient017_SetWarningMessageHook(void *linux_side, SteamAPIWarningMessageHook_t pFunction)
+{
+ ((ISteamClient*)linux_side)->SetWarningMessageHook((SteamAPIWarningMessageHook_t)pFunction);
+}
+
+bool cppISteamClient_SteamClient017_BShutdownIfAllPipesClosed(void *linux_side)
+{
+ return ((ISteamClient*)linux_side)->BShutdownIfAllPipesClosed();
+}
+
+void *cppISteamClient_SteamClient017_GetISteamHTTP(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamHTTP((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void * cppISteamClient_SteamClient017_DEPRECATED_GetISteamUnifiedMessages(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->DEPRECATED_GetISteamUnifiedMessages((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamController(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamController((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamUGC(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamUGC((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamAppList(void *linux_side, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamAppList((HSteamUser)hSteamUser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamMusic(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMusic((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamMusicRemote(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamMusicRemote((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamHTMLSurface(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamHTMLSurface((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void cppISteamClient_SteamClient017_DEPRECATED_Set_SteamAPI_CPostAPIResultInProcess(void *linux_side, void * _a)
+{
+ ((ISteamClient*)linux_side)->DEPRECATED_Set_SteamAPI_CPostAPIResultInProcess((void (*)())_a);
+}
+
+void cppISteamClient_SteamClient017_DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess(void *linux_side, void * _a)
+{
+ ((ISteamClient*)linux_side)->DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess((void (*)())_a);
+}
+
+void cppISteamClient_SteamClient017_Set_SteamAPI_CCheckCallbackRegisteredInProcess(void *linux_side, SteamAPI_CheckCallbackRegistered_t func)
+{
+ ((ISteamClient*)linux_side)->Set_SteamAPI_CCheckCallbackRegisteredInProcess((SteamAPI_CheckCallbackRegistered_t)func);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamInventory(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamInventory((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamVideo(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamVideo((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+void *cppISteamClient_SteamClient017_GetISteamParentalSettings(void *linux_side, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ return ((ISteamClient*)linux_side)->GetISteamParentalSettings((HSteamUser)hSteamuser, (HSteamPipe)hSteamPipe, (const char *)pchVersion);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamClient_SteamClient017.h b/lsteamclient/cppISteamClient_SteamClient017.h
new file mode 100644
index 00000000..38a52411
--- /dev/null
+++ b/lsteamclient/cppISteamClient_SteamClient017.h
@@ -0,0 +1,43 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamPipe cppISteamClient_SteamClient017_CreateSteamPipe(void *);
+extern bool cppISteamClient_SteamClient017_BReleaseSteamPipe(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient017_ConnectToGlobalUser(void *, HSteamPipe);
+extern HSteamUser cppISteamClient_SteamClient017_CreateLocalUser(void *, HSteamPipe *, EAccountType);
+extern void cppISteamClient_SteamClient017_ReleaseUser(void *, HSteamPipe, HSteamUser);
+extern void *cppISteamClient_SteamClient017_GetISteamUser(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient017_GetISteamGameServer(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient017_SetLocalIPBinding(void *, uint32, uint16);
+extern void *cppISteamClient_SteamClient017_GetISteamFriends(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient017_GetISteamUtils(void *, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient017_GetISteamMatchmaking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient017_GetISteamMatchmakingServers(void *, HSteamUser, HSteamPipe, const char *);
+extern void * cppISteamClient_SteamClient017_GetISteamGenericInterface(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient017_GetISteamUserStats(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient017_GetISteamGameServerStats(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient017_GetISteamApps(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient017_GetISteamNetworking(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient017_GetISteamRemoteStorage(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient017_GetISteamScreenshots(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient017_RunFrame(void *);
+extern uint32 cppISteamClient_SteamClient017_GetIPCCallCount(void *);
+extern void cppISteamClient_SteamClient017_SetWarningMessageHook(void *, SteamAPIWarningMessageHook_t);
+extern bool cppISteamClient_SteamClient017_BShutdownIfAllPipesClosed(void *);
+extern void *cppISteamClient_SteamClient017_GetISteamHTTP(void *, HSteamUser, HSteamPipe, const char *);
+extern void * cppISteamClient_SteamClient017_DEPRECATED_GetISteamUnifiedMessages(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient017_GetISteamController(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient017_GetISteamUGC(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient017_GetISteamAppList(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient017_GetISteamMusic(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient017_GetISteamMusicRemote(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient017_GetISteamHTMLSurface(void *, HSteamUser, HSteamPipe, const char *);
+extern void cppISteamClient_SteamClient017_DEPRECATED_Set_SteamAPI_CPostAPIResultInProcess(void *, void *);
+extern void cppISteamClient_SteamClient017_DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess(void *, void *);
+extern void cppISteamClient_SteamClient017_Set_SteamAPI_CCheckCallbackRegisteredInProcess(void *, SteamAPI_CheckCallbackRegistered_t);
+extern void *cppISteamClient_SteamClient017_GetISteamInventory(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient017_GetISteamVideo(void *, HSteamUser, HSteamPipe, const char *);
+extern void *cppISteamClient_SteamClient017_GetISteamParentalSettings(void *, HSteamUser, HSteamPipe, const char *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION.cpp b/lsteamclient/cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION.cpp
new file mode 100644
index 00000000..a1a4dd6a
--- /dev/null
+++ b/lsteamclient/cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION.cpp
@@ -0,0 +1,40 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_134/steam_api.h"
+#include "cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION_Init(void *linux_side, const char * pchAbsolutePathToControllerConfigVDF)
+{
+ return ((ISteamController*)linux_side)->Init((const char *)pchAbsolutePathToControllerConfigVDF);
+}
+
+bool cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION_Shutdown(void *linux_side)
+{
+ return ((ISteamController*)linux_side)->Shutdown();
+}
+
+void cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION_RunFrame(void *linux_side)
+{
+ ((ISteamController*)linux_side)->RunFrame();
+}
+
+bool cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION_GetControllerState(void *linux_side, uint32 unControllerIndex, SteamControllerState001_t * pState)
+{
+ return ((ISteamController*)linux_side)->GetControllerState((uint32)unControllerIndex, (SteamControllerState001_t *)pState);
+}
+
+void cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION_TriggerHapticPulse(void *linux_side, uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec)
+{
+ ((ISteamController*)linux_side)->TriggerHapticPulse((uint32)unControllerIndex, (ESteamControllerPad)eTargetPad, (unsigned short)usDurationMicroSec);
+}
+
+void cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION_SetOverrideMode(void *linux_side, const char * pchMode)
+{
+ ((ISteamController*)linux_side)->SetOverrideMode((const char *)pchMode);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION.h b/lsteamclient/cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION.h
new file mode 100644
index 00000000..40e821d5
--- /dev/null
+++ b/lsteamclient/cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION.h
@@ -0,0 +1,12 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION_Init(void *, const char *);
+extern bool cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION_Shutdown(void *);
+extern void cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION_RunFrame(void *);
+extern bool cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION_GetControllerState(void *, uint32, SteamControllerState001_t *);
+extern void cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION_TriggerHapticPulse(void *, uint32, ESteamControllerPad, unsigned short);
+extern void cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION_SetOverrideMode(void *, const char *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamController_SteamController003.cpp b/lsteamclient/cppISteamController_SteamController003.cpp
new file mode 100644
index 00000000..f93a1fe1
--- /dev/null
+++ b/lsteamclient/cppISteamController_SteamController003.cpp
@@ -0,0 +1,95 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_137/steam_api.h"
+#include "cppISteamController_SteamController003.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamController_SteamController003_Init(void *linux_side)
+{
+ return ((ISteamController*)linux_side)->Init();
+}
+
+bool cppISteamController_SteamController003_Shutdown(void *linux_side)
+{
+ return ((ISteamController*)linux_side)->Shutdown();
+}
+
+void cppISteamController_SteamController003_RunFrame(void *linux_side)
+{
+ ((ISteamController*)linux_side)->RunFrame();
+}
+
+int cppISteamController_SteamController003_GetConnectedControllers(void *linux_side, ControllerHandle_t * handlesOut)
+{
+ return ((ISteamController*)linux_side)->GetConnectedControllers((ControllerHandle_t *)handlesOut);
+}
+
+bool cppISteamController_SteamController003_ShowBindingPanel(void *linux_side, ControllerHandle_t controllerHandle)
+{
+ return ((ISteamController*)linux_side)->ShowBindingPanel((ControllerHandle_t)controllerHandle);
+}
+
+ControllerActionSetHandle_t cppISteamController_SteamController003_GetActionSetHandle(void *linux_side, const char * pszActionSetName)
+{
+ return ((ISteamController*)linux_side)->GetActionSetHandle((const char *)pszActionSetName);
+}
+
+void cppISteamController_SteamController003_ActivateActionSet(void *linux_side, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle)
+{
+ ((ISteamController*)linux_side)->ActivateActionSet((ControllerHandle_t)controllerHandle, (ControllerActionSetHandle_t)actionSetHandle);
+}
+
+ControllerActionSetHandle_t cppISteamController_SteamController003_GetCurrentActionSet(void *linux_side, ControllerHandle_t controllerHandle)
+{
+ return ((ISteamController*)linux_side)->GetCurrentActionSet((ControllerHandle_t)controllerHandle);
+}
+
+ControllerDigitalActionHandle_t cppISteamController_SteamController003_GetDigitalActionHandle(void *linux_side, const char * pszActionName)
+{
+ return ((ISteamController*)linux_side)->GetDigitalActionHandle((const char *)pszActionName);
+}
+
+ControllerDigitalActionData_t cppISteamController_SteamController003_GetDigitalActionData(void *linux_side, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle)
+{
+ return ((ISteamController*)linux_side)->GetDigitalActionData((ControllerHandle_t)controllerHandle, (ControllerDigitalActionHandle_t)digitalActionHandle);
+}
+
+int cppISteamController_SteamController003_GetDigitalActionOrigins(void *linux_side, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin * originsOut)
+{
+ return ((ISteamController*)linux_side)->GetDigitalActionOrigins((ControllerHandle_t)controllerHandle, (ControllerActionSetHandle_t)actionSetHandle, (ControllerDigitalActionHandle_t)digitalActionHandle, (EControllerActionOrigin *)originsOut);
+}
+
+ControllerAnalogActionHandle_t cppISteamController_SteamController003_GetAnalogActionHandle(void *linux_side, const char * pszActionName)
+{
+ return ((ISteamController*)linux_side)->GetAnalogActionHandle((const char *)pszActionName);
+}
+
+ControllerAnalogActionData_t cppISteamController_SteamController003_GetAnalogActionData(void *linux_side, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle)
+{
+ return ((ISteamController*)linux_side)->GetAnalogActionData((ControllerHandle_t)controllerHandle, (ControllerAnalogActionHandle_t)analogActionHandle);
+}
+
+int cppISteamController_SteamController003_GetAnalogActionOrigins(void *linux_side, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin * originsOut)
+{
+ return ((ISteamController*)linux_side)->GetAnalogActionOrigins((ControllerHandle_t)controllerHandle, (ControllerActionSetHandle_t)actionSetHandle, (ControllerAnalogActionHandle_t)analogActionHandle, (EControllerActionOrigin *)originsOut);
+}
+
+void cppISteamController_SteamController003_StopAnalogActionMomentum(void *linux_side, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction)
+{
+ ((ISteamController*)linux_side)->StopAnalogActionMomentum((ControllerHandle_t)controllerHandle, (ControllerAnalogActionHandle_t)eAction);
+}
+
+void cppISteamController_SteamController003_TriggerHapticPulse(void *linux_side, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec)
+{
+ ((ISteamController*)linux_side)->TriggerHapticPulse((ControllerHandle_t)controllerHandle, (ESteamControllerPad)eTargetPad, (unsigned short)usDurationMicroSec);
+}
+
+void cppISteamController_SteamController003_TriggerRepeatedHapticPulse(void *linux_side, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags)
+{
+ ((ISteamController*)linux_side)->TriggerRepeatedHapticPulse((ControllerHandle_t)controllerHandle, (ESteamControllerPad)eTargetPad, (unsigned short)usDurationMicroSec, (unsigned short)usOffMicroSec, (unsigned short)unRepeat, (unsigned int)nFlags);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamController_SteamController003.h b/lsteamclient/cppISteamController_SteamController003.h
new file mode 100644
index 00000000..c15f1321
--- /dev/null
+++ b/lsteamclient/cppISteamController_SteamController003.h
@@ -0,0 +1,23 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamController_SteamController003_Init(void *);
+extern bool cppISteamController_SteamController003_Shutdown(void *);
+extern void cppISteamController_SteamController003_RunFrame(void *);
+extern int cppISteamController_SteamController003_GetConnectedControllers(void *, ControllerHandle_t *);
+extern bool cppISteamController_SteamController003_ShowBindingPanel(void *, ControllerHandle_t);
+extern ControllerActionSetHandle_t cppISteamController_SteamController003_GetActionSetHandle(void *, const char *);
+extern void cppISteamController_SteamController003_ActivateActionSet(void *, ControllerHandle_t, ControllerActionSetHandle_t);
+extern ControllerActionSetHandle_t cppISteamController_SteamController003_GetCurrentActionSet(void *, ControllerHandle_t);
+extern ControllerDigitalActionHandle_t cppISteamController_SteamController003_GetDigitalActionHandle(void *, const char *);
+extern ControllerDigitalActionData_t cppISteamController_SteamController003_GetDigitalActionData(void *, ControllerHandle_t, ControllerDigitalActionHandle_t);
+extern int cppISteamController_SteamController003_GetDigitalActionOrigins(void *, ControllerHandle_t, ControllerActionSetHandle_t, ControllerDigitalActionHandle_t, EControllerActionOrigin *);
+extern ControllerAnalogActionHandle_t cppISteamController_SteamController003_GetAnalogActionHandle(void *, const char *);
+extern ControllerAnalogActionData_t cppISteamController_SteamController003_GetAnalogActionData(void *, ControllerHandle_t, ControllerAnalogActionHandle_t);
+extern int cppISteamController_SteamController003_GetAnalogActionOrigins(void *, ControllerHandle_t, ControllerActionSetHandle_t, ControllerAnalogActionHandle_t, EControllerActionOrigin *);
+extern void cppISteamController_SteamController003_StopAnalogActionMomentum(void *, ControllerHandle_t, ControllerAnalogActionHandle_t);
+extern void cppISteamController_SteamController003_TriggerHapticPulse(void *, ControllerHandle_t, ESteamControllerPad, unsigned short);
+extern void cppISteamController_SteamController003_TriggerRepeatedHapticPulse(void *, ControllerHandle_t, ESteamControllerPad, unsigned short, unsigned short, unsigned short, unsigned int);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamController_SteamController004.cpp b/lsteamclient/cppISteamController_SteamController004.cpp
new file mode 100644
index 00000000..9999e7fb
--- /dev/null
+++ b/lsteamclient/cppISteamController_SteamController004.cpp
@@ -0,0 +1,120 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_138a/steam_api.h"
+#include "cppISteamController_SteamController004.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamController_SteamController004_Init(void *linux_side)
+{
+ return ((ISteamController*)linux_side)->Init();
+}
+
+bool cppISteamController_SteamController004_Shutdown(void *linux_side)
+{
+ return ((ISteamController*)linux_side)->Shutdown();
+}
+
+void cppISteamController_SteamController004_RunFrame(void *linux_side)
+{
+ ((ISteamController*)linux_side)->RunFrame();
+}
+
+int cppISteamController_SteamController004_GetConnectedControllers(void *linux_side, ControllerHandle_t * handlesOut)
+{
+ return ((ISteamController*)linux_side)->GetConnectedControllers((ControllerHandle_t *)handlesOut);
+}
+
+bool cppISteamController_SteamController004_ShowBindingPanel(void *linux_side, ControllerHandle_t controllerHandle)
+{
+ return ((ISteamController*)linux_side)->ShowBindingPanel((ControllerHandle_t)controllerHandle);
+}
+
+ControllerActionSetHandle_t cppISteamController_SteamController004_GetActionSetHandle(void *linux_side, const char * pszActionSetName)
+{
+ return ((ISteamController*)linux_side)->GetActionSetHandle((const char *)pszActionSetName);
+}
+
+void cppISteamController_SteamController004_ActivateActionSet(void *linux_side, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle)
+{
+ ((ISteamController*)linux_side)->ActivateActionSet((ControllerHandle_t)controllerHandle, (ControllerActionSetHandle_t)actionSetHandle);
+}
+
+ControllerActionSetHandle_t cppISteamController_SteamController004_GetCurrentActionSet(void *linux_side, ControllerHandle_t controllerHandle)
+{
+ return ((ISteamController*)linux_side)->GetCurrentActionSet((ControllerHandle_t)controllerHandle);
+}
+
+ControllerDigitalActionHandle_t cppISteamController_SteamController004_GetDigitalActionHandle(void *linux_side, const char * pszActionName)
+{
+ return ((ISteamController*)linux_side)->GetDigitalActionHandle((const char *)pszActionName);
+}
+
+ControllerDigitalActionData_t cppISteamController_SteamController004_GetDigitalActionData(void *linux_side, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle)
+{
+ return ((ISteamController*)linux_side)->GetDigitalActionData((ControllerHandle_t)controllerHandle, (ControllerDigitalActionHandle_t)digitalActionHandle);
+}
+
+int cppISteamController_SteamController004_GetDigitalActionOrigins(void *linux_side, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin * originsOut)
+{
+ return ((ISteamController*)linux_side)->GetDigitalActionOrigins((ControllerHandle_t)controllerHandle, (ControllerActionSetHandle_t)actionSetHandle, (ControllerDigitalActionHandle_t)digitalActionHandle, (EControllerActionOrigin *)originsOut);
+}
+
+ControllerAnalogActionHandle_t cppISteamController_SteamController004_GetAnalogActionHandle(void *linux_side, const char * pszActionName)
+{
+ return ((ISteamController*)linux_side)->GetAnalogActionHandle((const char *)pszActionName);
+}
+
+ControllerAnalogActionData_t cppISteamController_SteamController004_GetAnalogActionData(void *linux_side, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle)
+{
+ return ((ISteamController*)linux_side)->GetAnalogActionData((ControllerHandle_t)controllerHandle, (ControllerAnalogActionHandle_t)analogActionHandle);
+}
+
+int cppISteamController_SteamController004_GetAnalogActionOrigins(void *linux_side, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin * originsOut)
+{
+ return ((ISteamController*)linux_side)->GetAnalogActionOrigins((ControllerHandle_t)controllerHandle, (ControllerActionSetHandle_t)actionSetHandle, (ControllerAnalogActionHandle_t)analogActionHandle, (EControllerActionOrigin *)originsOut);
+}
+
+void cppISteamController_SteamController004_StopAnalogActionMomentum(void *linux_side, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction)
+{
+ ((ISteamController*)linux_side)->StopAnalogActionMomentum((ControllerHandle_t)controllerHandle, (ControllerAnalogActionHandle_t)eAction);
+}
+
+void cppISteamController_SteamController004_TriggerHapticPulse(void *linux_side, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec)
+{
+ ((ISteamController*)linux_side)->TriggerHapticPulse((ControllerHandle_t)controllerHandle, (ESteamControllerPad)eTargetPad, (unsigned short)usDurationMicroSec);
+}
+
+void cppISteamController_SteamController004_TriggerRepeatedHapticPulse(void *linux_side, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags)
+{
+ ((ISteamController*)linux_side)->TriggerRepeatedHapticPulse((ControllerHandle_t)controllerHandle, (ESteamControllerPad)eTargetPad, (unsigned short)usDurationMicroSec, (unsigned short)usOffMicroSec, (unsigned short)unRepeat, (unsigned int)nFlags);
+}
+
+int cppISteamController_SteamController004_GetGamepadIndexForController(void *linux_side, ControllerHandle_t ulControllerHandle)
+{
+ return ((ISteamController*)linux_side)->GetGamepadIndexForController((ControllerHandle_t)ulControllerHandle);
+}
+
+ControllerHandle_t cppISteamController_SteamController004_GetControllerForGamepadIndex(void *linux_side, int nIndex)
+{
+ return ((ISteamController*)linux_side)->GetControllerForGamepadIndex((int)nIndex);
+}
+
+ControllerMotionData_t cppISteamController_SteamController004_GetMotionData(void *linux_side, ControllerHandle_t controllerHandle)
+{
+ return ((ISteamController*)linux_side)->GetMotionData((ControllerHandle_t)controllerHandle);
+}
+
+bool cppISteamController_SteamController004_ShowDigitalActionOrigins(void *linux_side, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition)
+{
+ return ((ISteamController*)linux_side)->ShowDigitalActionOrigins((ControllerHandle_t)controllerHandle, (ControllerDigitalActionHandle_t)digitalActionHandle, (float)flScale, (float)flXPosition, (float)flYPosition);
+}
+
+bool cppISteamController_SteamController004_ShowAnalogActionOrigins(void *linux_side, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition)
+{
+ return ((ISteamController*)linux_side)->ShowAnalogActionOrigins((ControllerHandle_t)controllerHandle, (ControllerAnalogActionHandle_t)analogActionHandle, (float)flScale, (float)flXPosition, (float)flYPosition);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamController_SteamController004.h b/lsteamclient/cppISteamController_SteamController004.h
new file mode 100644
index 00000000..3b65c6a5
--- /dev/null
+++ b/lsteamclient/cppISteamController_SteamController004.h
@@ -0,0 +1,28 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamController_SteamController004_Init(void *);
+extern bool cppISteamController_SteamController004_Shutdown(void *);
+extern void cppISteamController_SteamController004_RunFrame(void *);
+extern int cppISteamController_SteamController004_GetConnectedControllers(void *, ControllerHandle_t *);
+extern bool cppISteamController_SteamController004_ShowBindingPanel(void *, ControllerHandle_t);
+extern ControllerActionSetHandle_t cppISteamController_SteamController004_GetActionSetHandle(void *, const char *);
+extern void cppISteamController_SteamController004_ActivateActionSet(void *, ControllerHandle_t, ControllerActionSetHandle_t);
+extern ControllerActionSetHandle_t cppISteamController_SteamController004_GetCurrentActionSet(void *, ControllerHandle_t);
+extern ControllerDigitalActionHandle_t cppISteamController_SteamController004_GetDigitalActionHandle(void *, const char *);
+extern ControllerDigitalActionData_t cppISteamController_SteamController004_GetDigitalActionData(void *, ControllerHandle_t, ControllerDigitalActionHandle_t);
+extern int cppISteamController_SteamController004_GetDigitalActionOrigins(void *, ControllerHandle_t, ControllerActionSetHandle_t, ControllerDigitalActionHandle_t, EControllerActionOrigin *);
+extern ControllerAnalogActionHandle_t cppISteamController_SteamController004_GetAnalogActionHandle(void *, const char *);
+extern ControllerAnalogActionData_t cppISteamController_SteamController004_GetAnalogActionData(void *, ControllerHandle_t, ControllerAnalogActionHandle_t);
+extern int cppISteamController_SteamController004_GetAnalogActionOrigins(void *, ControllerHandle_t, ControllerActionSetHandle_t, ControllerAnalogActionHandle_t, EControllerActionOrigin *);
+extern void cppISteamController_SteamController004_StopAnalogActionMomentum(void *, ControllerHandle_t, ControllerAnalogActionHandle_t);
+extern void cppISteamController_SteamController004_TriggerHapticPulse(void *, ControllerHandle_t, ESteamControllerPad, unsigned short);
+extern void cppISteamController_SteamController004_TriggerRepeatedHapticPulse(void *, ControllerHandle_t, ESteamControllerPad, unsigned short, unsigned short, unsigned short, unsigned int);
+extern int cppISteamController_SteamController004_GetGamepadIndexForController(void *, ControllerHandle_t);
+extern ControllerHandle_t cppISteamController_SteamController004_GetControllerForGamepadIndex(void *, int);
+extern ControllerMotionData_t cppISteamController_SteamController004_GetMotionData(void *, ControllerHandle_t);
+extern bool cppISteamController_SteamController004_ShowDigitalActionOrigins(void *, ControllerHandle_t, ControllerDigitalActionHandle_t, float, float, float);
+extern bool cppISteamController_SteamController004_ShowAnalogActionOrigins(void *, ControllerHandle_t, ControllerAnalogActionHandle_t, float, float, float);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamController_SteamController005.cpp b/lsteamclient/cppISteamController_SteamController005.cpp
new file mode 100644
index 00000000..d89426e1
--- /dev/null
+++ b/lsteamclient/cppISteamController_SteamController005.cpp
@@ -0,0 +1,140 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_141/steam_api.h"
+#include "cppISteamController_SteamController005.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamController_SteamController005_Init(void *linux_side)
+{
+ return ((ISteamController*)linux_side)->Init();
+}
+
+bool cppISteamController_SteamController005_Shutdown(void *linux_side)
+{
+ return ((ISteamController*)linux_side)->Shutdown();
+}
+
+void cppISteamController_SteamController005_RunFrame(void *linux_side)
+{
+ ((ISteamController*)linux_side)->RunFrame();
+}
+
+int cppISteamController_SteamController005_GetConnectedControllers(void *linux_side, ControllerHandle_t * handlesOut)
+{
+ return ((ISteamController*)linux_side)->GetConnectedControllers((ControllerHandle_t *)handlesOut);
+}
+
+bool cppISteamController_SteamController005_ShowBindingPanel(void *linux_side, ControllerHandle_t controllerHandle)
+{
+ return ((ISteamController*)linux_side)->ShowBindingPanel((ControllerHandle_t)controllerHandle);
+}
+
+ControllerActionSetHandle_t cppISteamController_SteamController005_GetActionSetHandle(void *linux_side, const char * pszActionSetName)
+{
+ return ((ISteamController*)linux_side)->GetActionSetHandle((const char *)pszActionSetName);
+}
+
+void cppISteamController_SteamController005_ActivateActionSet(void *linux_side, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle)
+{
+ ((ISteamController*)linux_side)->ActivateActionSet((ControllerHandle_t)controllerHandle, (ControllerActionSetHandle_t)actionSetHandle);
+}
+
+ControllerActionSetHandle_t cppISteamController_SteamController005_GetCurrentActionSet(void *linux_side, ControllerHandle_t controllerHandle)
+{
+ return ((ISteamController*)linux_side)->GetCurrentActionSet((ControllerHandle_t)controllerHandle);
+}
+
+ControllerDigitalActionHandle_t cppISteamController_SteamController005_GetDigitalActionHandle(void *linux_side, const char * pszActionName)
+{
+ return ((ISteamController*)linux_side)->GetDigitalActionHandle((const char *)pszActionName);
+}
+
+ControllerDigitalActionData_t cppISteamController_SteamController005_GetDigitalActionData(void *linux_side, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle)
+{
+ return ((ISteamController*)linux_side)->GetDigitalActionData((ControllerHandle_t)controllerHandle, (ControllerDigitalActionHandle_t)digitalActionHandle);
+}
+
+int cppISteamController_SteamController005_GetDigitalActionOrigins(void *linux_side, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin * originsOut)
+{
+ return ((ISteamController*)linux_side)->GetDigitalActionOrigins((ControllerHandle_t)controllerHandle, (ControllerActionSetHandle_t)actionSetHandle, (ControllerDigitalActionHandle_t)digitalActionHandle, (EControllerActionOrigin *)originsOut);
+}
+
+ControllerAnalogActionHandle_t cppISteamController_SteamController005_GetAnalogActionHandle(void *linux_side, const char * pszActionName)
+{
+ return ((ISteamController*)linux_side)->GetAnalogActionHandle((const char *)pszActionName);
+}
+
+ControllerAnalogActionData_t cppISteamController_SteamController005_GetAnalogActionData(void *linux_side, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle)
+{
+ return ((ISteamController*)linux_side)->GetAnalogActionData((ControllerHandle_t)controllerHandle, (ControllerAnalogActionHandle_t)analogActionHandle);
+}
+
+int cppISteamController_SteamController005_GetAnalogActionOrigins(void *linux_side, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin * originsOut)
+{
+ return ((ISteamController*)linux_side)->GetAnalogActionOrigins((ControllerHandle_t)controllerHandle, (ControllerActionSetHandle_t)actionSetHandle, (ControllerAnalogActionHandle_t)analogActionHandle, (EControllerActionOrigin *)originsOut);
+}
+
+void cppISteamController_SteamController005_StopAnalogActionMomentum(void *linux_side, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction)
+{
+ ((ISteamController*)linux_side)->StopAnalogActionMomentum((ControllerHandle_t)controllerHandle, (ControllerAnalogActionHandle_t)eAction);
+}
+
+void cppISteamController_SteamController005_TriggerHapticPulse(void *linux_side, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec)
+{
+ ((ISteamController*)linux_side)->TriggerHapticPulse((ControllerHandle_t)controllerHandle, (ESteamControllerPad)eTargetPad, (unsigned short)usDurationMicroSec);
+}
+
+void cppISteamController_SteamController005_TriggerRepeatedHapticPulse(void *linux_side, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags)
+{
+ ((ISteamController*)linux_side)->TriggerRepeatedHapticPulse((ControllerHandle_t)controllerHandle, (ESteamControllerPad)eTargetPad, (unsigned short)usDurationMicroSec, (unsigned short)usOffMicroSec, (unsigned short)unRepeat, (unsigned int)nFlags);
+}
+
+void cppISteamController_SteamController005_TriggerVibration(void *linux_side, ControllerHandle_t controllerHandle, unsigned short usLeftSpeed, unsigned short usRightSpeed)
+{
+ ((ISteamController*)linux_side)->TriggerVibration((ControllerHandle_t)controllerHandle, (unsigned short)usLeftSpeed, (unsigned short)usRightSpeed);
+}
+
+void cppISteamController_SteamController005_SetLEDColor(void *linux_side, ControllerHandle_t controllerHandle, uint8 nColorR, uint8 nColorG, uint8 nColorB, unsigned int nFlags)
+{
+ ((ISteamController*)linux_side)->SetLEDColor((ControllerHandle_t)controllerHandle, (uint8)nColorR, (uint8)nColorG, (uint8)nColorB, (unsigned int)nFlags);
+}
+
+int cppISteamController_SteamController005_GetGamepadIndexForController(void *linux_side, ControllerHandle_t ulControllerHandle)
+{
+ return ((ISteamController*)linux_side)->GetGamepadIndexForController((ControllerHandle_t)ulControllerHandle);
+}
+
+ControllerHandle_t cppISteamController_SteamController005_GetControllerForGamepadIndex(void *linux_side, int nIndex)
+{
+ return ((ISteamController*)linux_side)->GetControllerForGamepadIndex((int)nIndex);
+}
+
+ControllerMotionData_t cppISteamController_SteamController005_GetMotionData(void *linux_side, ControllerHandle_t controllerHandle)
+{
+ return ((ISteamController*)linux_side)->GetMotionData((ControllerHandle_t)controllerHandle);
+}
+
+bool cppISteamController_SteamController005_ShowDigitalActionOrigins(void *linux_side, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition)
+{
+ return ((ISteamController*)linux_side)->ShowDigitalActionOrigins((ControllerHandle_t)controllerHandle, (ControllerDigitalActionHandle_t)digitalActionHandle, (float)flScale, (float)flXPosition, (float)flYPosition);
+}
+
+bool cppISteamController_SteamController005_ShowAnalogActionOrigins(void *linux_side, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition)
+{
+ return ((ISteamController*)linux_side)->ShowAnalogActionOrigins((ControllerHandle_t)controllerHandle, (ControllerAnalogActionHandle_t)analogActionHandle, (float)flScale, (float)flXPosition, (float)flYPosition);
+}
+
+const char * cppISteamController_SteamController005_GetStringForActionOrigin(void *linux_side, EControllerActionOrigin eOrigin)
+{
+ return ((ISteamController*)linux_side)->GetStringForActionOrigin((EControllerActionOrigin)eOrigin);
+}
+
+const char * cppISteamController_SteamController005_GetGlyphForActionOrigin(void *linux_side, EControllerActionOrigin eOrigin)
+{
+ return ((ISteamController*)linux_side)->GetGlyphForActionOrigin((EControllerActionOrigin)eOrigin);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamController_SteamController005.h b/lsteamclient/cppISteamController_SteamController005.h
new file mode 100644
index 00000000..ebfa84c9
--- /dev/null
+++ b/lsteamclient/cppISteamController_SteamController005.h
@@ -0,0 +1,32 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamController_SteamController005_Init(void *);
+extern bool cppISteamController_SteamController005_Shutdown(void *);
+extern void cppISteamController_SteamController005_RunFrame(void *);
+extern int cppISteamController_SteamController005_GetConnectedControllers(void *, ControllerHandle_t *);
+extern bool cppISteamController_SteamController005_ShowBindingPanel(void *, ControllerHandle_t);
+extern ControllerActionSetHandle_t cppISteamController_SteamController005_GetActionSetHandle(void *, const char *);
+extern void cppISteamController_SteamController005_ActivateActionSet(void *, ControllerHandle_t, ControllerActionSetHandle_t);
+extern ControllerActionSetHandle_t cppISteamController_SteamController005_GetCurrentActionSet(void *, ControllerHandle_t);
+extern ControllerDigitalActionHandle_t cppISteamController_SteamController005_GetDigitalActionHandle(void *, const char *);
+extern ControllerDigitalActionData_t cppISteamController_SteamController005_GetDigitalActionData(void *, ControllerHandle_t, ControllerDigitalActionHandle_t);
+extern int cppISteamController_SteamController005_GetDigitalActionOrigins(void *, ControllerHandle_t, ControllerActionSetHandle_t, ControllerDigitalActionHandle_t, EControllerActionOrigin *);
+extern ControllerAnalogActionHandle_t cppISteamController_SteamController005_GetAnalogActionHandle(void *, const char *);
+extern ControllerAnalogActionData_t cppISteamController_SteamController005_GetAnalogActionData(void *, ControllerHandle_t, ControllerAnalogActionHandle_t);
+extern int cppISteamController_SteamController005_GetAnalogActionOrigins(void *, ControllerHandle_t, ControllerActionSetHandle_t, ControllerAnalogActionHandle_t, EControllerActionOrigin *);
+extern void cppISteamController_SteamController005_StopAnalogActionMomentum(void *, ControllerHandle_t, ControllerAnalogActionHandle_t);
+extern void cppISteamController_SteamController005_TriggerHapticPulse(void *, ControllerHandle_t, ESteamControllerPad, unsigned short);
+extern void cppISteamController_SteamController005_TriggerRepeatedHapticPulse(void *, ControllerHandle_t, ESteamControllerPad, unsigned short, unsigned short, unsigned short, unsigned int);
+extern void cppISteamController_SteamController005_TriggerVibration(void *, ControllerHandle_t, unsigned short, unsigned short);
+extern void cppISteamController_SteamController005_SetLEDColor(void *, ControllerHandle_t, uint8, uint8, uint8, unsigned int);
+extern int cppISteamController_SteamController005_GetGamepadIndexForController(void *, ControllerHandle_t);
+extern ControllerHandle_t cppISteamController_SteamController005_GetControllerForGamepadIndex(void *, int);
+extern ControllerMotionData_t cppISteamController_SteamController005_GetMotionData(void *, ControllerHandle_t);
+extern bool cppISteamController_SteamController005_ShowDigitalActionOrigins(void *, ControllerHandle_t, ControllerDigitalActionHandle_t, float, float, float);
+extern bool cppISteamController_SteamController005_ShowAnalogActionOrigins(void *, ControllerHandle_t, ControllerAnalogActionHandle_t, float, float, float);
+extern const char * cppISteamController_SteamController005_GetStringForActionOrigin(void *, EControllerActionOrigin);
+extern const char * cppISteamController_SteamController005_GetGlyphForActionOrigin(void *, EControllerActionOrigin);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamController_SteamController006.cpp b/lsteamclient/cppISteamController_SteamController006.cpp
new file mode 100644
index 00000000..50062953
--- /dev/null
+++ b/lsteamclient/cppISteamController_SteamController006.cpp
@@ -0,0 +1,165 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamController_SteamController006.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamController_SteamController006_Init(void *linux_side)
+{
+ return ((ISteamController*)linux_side)->Init();
+}
+
+bool cppISteamController_SteamController006_Shutdown(void *linux_side)
+{
+ return ((ISteamController*)linux_side)->Shutdown();
+}
+
+void cppISteamController_SteamController006_RunFrame(void *linux_side)
+{
+ ((ISteamController*)linux_side)->RunFrame();
+}
+
+int cppISteamController_SteamController006_GetConnectedControllers(void *linux_side, ControllerHandle_t * handlesOut)
+{
+ return ((ISteamController*)linux_side)->GetConnectedControllers((ControllerHandle_t *)handlesOut);
+}
+
+bool cppISteamController_SteamController006_ShowBindingPanel(void *linux_side, ControllerHandle_t controllerHandle)
+{
+ return ((ISteamController*)linux_side)->ShowBindingPanel((ControllerHandle_t)controllerHandle);
+}
+
+ControllerActionSetHandle_t cppISteamController_SteamController006_GetActionSetHandle(void *linux_side, const char * pszActionSetName)
+{
+ return ((ISteamController*)linux_side)->GetActionSetHandle((const char *)pszActionSetName);
+}
+
+void cppISteamController_SteamController006_ActivateActionSet(void *linux_side, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle)
+{
+ ((ISteamController*)linux_side)->ActivateActionSet((ControllerHandle_t)controllerHandle, (ControllerActionSetHandle_t)actionSetHandle);
+}
+
+ControllerActionSetHandle_t cppISteamController_SteamController006_GetCurrentActionSet(void *linux_side, ControllerHandle_t controllerHandle)
+{
+ return ((ISteamController*)linux_side)->GetCurrentActionSet((ControllerHandle_t)controllerHandle);
+}
+
+void cppISteamController_SteamController006_ActivateActionSetLayer(void *linux_side, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetLayerHandle)
+{
+ ((ISteamController*)linux_side)->ActivateActionSetLayer((ControllerHandle_t)controllerHandle, (ControllerActionSetHandle_t)actionSetLayerHandle);
+}
+
+void cppISteamController_SteamController006_DeactivateActionSetLayer(void *linux_side, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetLayerHandle)
+{
+ ((ISteamController*)linux_side)->DeactivateActionSetLayer((ControllerHandle_t)controllerHandle, (ControllerActionSetHandle_t)actionSetLayerHandle);
+}
+
+void cppISteamController_SteamController006_DeactivateAllActionSetLayers(void *linux_side, ControllerHandle_t controllerHandle)
+{
+ ((ISteamController*)linux_side)->DeactivateAllActionSetLayers((ControllerHandle_t)controllerHandle);
+}
+
+int cppISteamController_SteamController006_GetActiveActionSetLayers(void *linux_side, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t * handlesOut)
+{
+ return ((ISteamController*)linux_side)->GetActiveActionSetLayers((ControllerHandle_t)controllerHandle, (ControllerActionSetHandle_t *)handlesOut);
+}
+
+ControllerDigitalActionHandle_t cppISteamController_SteamController006_GetDigitalActionHandle(void *linux_side, const char * pszActionName)
+{
+ return ((ISteamController*)linux_side)->GetDigitalActionHandle((const char *)pszActionName);
+}
+
+ControllerDigitalActionData_t cppISteamController_SteamController006_GetDigitalActionData(void *linux_side, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle)
+{
+ return ((ISteamController*)linux_side)->GetDigitalActionData((ControllerHandle_t)controllerHandle, (ControllerDigitalActionHandle_t)digitalActionHandle);
+}
+
+int cppISteamController_SteamController006_GetDigitalActionOrigins(void *linux_side, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin * originsOut)
+{
+ return ((ISteamController*)linux_side)->GetDigitalActionOrigins((ControllerHandle_t)controllerHandle, (ControllerActionSetHandle_t)actionSetHandle, (ControllerDigitalActionHandle_t)digitalActionHandle, (EControllerActionOrigin *)originsOut);
+}
+
+ControllerAnalogActionHandle_t cppISteamController_SteamController006_GetAnalogActionHandle(void *linux_side, const char * pszActionName)
+{
+ return ((ISteamController*)linux_side)->GetAnalogActionHandle((const char *)pszActionName);
+}
+
+ControllerAnalogActionData_t cppISteamController_SteamController006_GetAnalogActionData(void *linux_side, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle)
+{
+ return ((ISteamController*)linux_side)->GetAnalogActionData((ControllerHandle_t)controllerHandle, (ControllerAnalogActionHandle_t)analogActionHandle);
+}
+
+int cppISteamController_SteamController006_GetAnalogActionOrigins(void *linux_side, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin * originsOut)
+{
+ return ((ISteamController*)linux_side)->GetAnalogActionOrigins((ControllerHandle_t)controllerHandle, (ControllerActionSetHandle_t)actionSetHandle, (ControllerAnalogActionHandle_t)analogActionHandle, (EControllerActionOrigin *)originsOut);
+}
+
+void cppISteamController_SteamController006_StopAnalogActionMomentum(void *linux_side, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction)
+{
+ ((ISteamController*)linux_side)->StopAnalogActionMomentum((ControllerHandle_t)controllerHandle, (ControllerAnalogActionHandle_t)eAction);
+}
+
+void cppISteamController_SteamController006_TriggerHapticPulse(void *linux_side, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec)
+{
+ ((ISteamController*)linux_side)->TriggerHapticPulse((ControllerHandle_t)controllerHandle, (ESteamControllerPad)eTargetPad, (unsigned short)usDurationMicroSec);
+}
+
+void cppISteamController_SteamController006_TriggerRepeatedHapticPulse(void *linux_side, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags)
+{
+ ((ISteamController*)linux_side)->TriggerRepeatedHapticPulse((ControllerHandle_t)controllerHandle, (ESteamControllerPad)eTargetPad, (unsigned short)usDurationMicroSec, (unsigned short)usOffMicroSec, (unsigned short)unRepeat, (unsigned int)nFlags);
+}
+
+void cppISteamController_SteamController006_TriggerVibration(void *linux_side, ControllerHandle_t controllerHandle, unsigned short usLeftSpeed, unsigned short usRightSpeed)
+{
+ ((ISteamController*)linux_side)->TriggerVibration((ControllerHandle_t)controllerHandle, (unsigned short)usLeftSpeed, (unsigned short)usRightSpeed);
+}
+
+void cppISteamController_SteamController006_SetLEDColor(void *linux_side, ControllerHandle_t controllerHandle, uint8 nColorR, uint8 nColorG, uint8 nColorB, unsigned int nFlags)
+{
+ ((ISteamController*)linux_side)->SetLEDColor((ControllerHandle_t)controllerHandle, (uint8)nColorR, (uint8)nColorG, (uint8)nColorB, (unsigned int)nFlags);
+}
+
+int cppISteamController_SteamController006_GetGamepadIndexForController(void *linux_side, ControllerHandle_t ulControllerHandle)
+{
+ return ((ISteamController*)linux_side)->GetGamepadIndexForController((ControllerHandle_t)ulControllerHandle);
+}
+
+ControllerHandle_t cppISteamController_SteamController006_GetControllerForGamepadIndex(void *linux_side, int nIndex)
+{
+ return ((ISteamController*)linux_side)->GetControllerForGamepadIndex((int)nIndex);
+}
+
+ControllerMotionData_t cppISteamController_SteamController006_GetMotionData(void *linux_side, ControllerHandle_t controllerHandle)
+{
+ return ((ISteamController*)linux_side)->GetMotionData((ControllerHandle_t)controllerHandle);
+}
+
+bool cppISteamController_SteamController006_ShowDigitalActionOrigins(void *linux_side, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition)
+{
+ return ((ISteamController*)linux_side)->ShowDigitalActionOrigins((ControllerHandle_t)controllerHandle, (ControllerDigitalActionHandle_t)digitalActionHandle, (float)flScale, (float)flXPosition, (float)flYPosition);
+}
+
+bool cppISteamController_SteamController006_ShowAnalogActionOrigins(void *linux_side, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition)
+{
+ return ((ISteamController*)linux_side)->ShowAnalogActionOrigins((ControllerHandle_t)controllerHandle, (ControllerAnalogActionHandle_t)analogActionHandle, (float)flScale, (float)flXPosition, (float)flYPosition);
+}
+
+const char * cppISteamController_SteamController006_GetStringForActionOrigin(void *linux_side, EControllerActionOrigin eOrigin)
+{
+ return ((ISteamController*)linux_side)->GetStringForActionOrigin((EControllerActionOrigin)eOrigin);
+}
+
+const char * cppISteamController_SteamController006_GetGlyphForActionOrigin(void *linux_side, EControllerActionOrigin eOrigin)
+{
+ return ((ISteamController*)linux_side)->GetGlyphForActionOrigin((EControllerActionOrigin)eOrigin);
+}
+
+ESteamInputType cppISteamController_SteamController006_GetInputTypeForHandle(void *linux_side, ControllerHandle_t controllerHandle)
+{
+ return ((ISteamController*)linux_side)->GetInputTypeForHandle((ControllerHandle_t)controllerHandle);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamController_SteamController006.h b/lsteamclient/cppISteamController_SteamController006.h
new file mode 100644
index 00000000..082c6f24
--- /dev/null
+++ b/lsteamclient/cppISteamController_SteamController006.h
@@ -0,0 +1,37 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamController_SteamController006_Init(void *);
+extern bool cppISteamController_SteamController006_Shutdown(void *);
+extern void cppISteamController_SteamController006_RunFrame(void *);
+extern int cppISteamController_SteamController006_GetConnectedControllers(void *, ControllerHandle_t *);
+extern bool cppISteamController_SteamController006_ShowBindingPanel(void *, ControllerHandle_t);
+extern ControllerActionSetHandle_t cppISteamController_SteamController006_GetActionSetHandle(void *, const char *);
+extern void cppISteamController_SteamController006_ActivateActionSet(void *, ControllerHandle_t, ControllerActionSetHandle_t);
+extern ControllerActionSetHandle_t cppISteamController_SteamController006_GetCurrentActionSet(void *, ControllerHandle_t);
+extern void cppISteamController_SteamController006_ActivateActionSetLayer(void *, ControllerHandle_t, ControllerActionSetHandle_t);
+extern void cppISteamController_SteamController006_DeactivateActionSetLayer(void *, ControllerHandle_t, ControllerActionSetHandle_t);
+extern void cppISteamController_SteamController006_DeactivateAllActionSetLayers(void *, ControllerHandle_t);
+extern int cppISteamController_SteamController006_GetActiveActionSetLayers(void *, ControllerHandle_t, ControllerActionSetHandle_t *);
+extern ControllerDigitalActionHandle_t cppISteamController_SteamController006_GetDigitalActionHandle(void *, const char *);
+extern ControllerDigitalActionData_t cppISteamController_SteamController006_GetDigitalActionData(void *, ControllerHandle_t, ControllerDigitalActionHandle_t);
+extern int cppISteamController_SteamController006_GetDigitalActionOrigins(void *, ControllerHandle_t, ControllerActionSetHandle_t, ControllerDigitalActionHandle_t, EControllerActionOrigin *);
+extern ControllerAnalogActionHandle_t cppISteamController_SteamController006_GetAnalogActionHandle(void *, const char *);
+extern ControllerAnalogActionData_t cppISteamController_SteamController006_GetAnalogActionData(void *, ControllerHandle_t, ControllerAnalogActionHandle_t);
+extern int cppISteamController_SteamController006_GetAnalogActionOrigins(void *, ControllerHandle_t, ControllerActionSetHandle_t, ControllerAnalogActionHandle_t, EControllerActionOrigin *);
+extern void cppISteamController_SteamController006_StopAnalogActionMomentum(void *, ControllerHandle_t, ControllerAnalogActionHandle_t);
+extern void cppISteamController_SteamController006_TriggerHapticPulse(void *, ControllerHandle_t, ESteamControllerPad, unsigned short);
+extern void cppISteamController_SteamController006_TriggerRepeatedHapticPulse(void *, ControllerHandle_t, ESteamControllerPad, unsigned short, unsigned short, unsigned short, unsigned int);
+extern void cppISteamController_SteamController006_TriggerVibration(void *, ControllerHandle_t, unsigned short, unsigned short);
+extern void cppISteamController_SteamController006_SetLEDColor(void *, ControllerHandle_t, uint8, uint8, uint8, unsigned int);
+extern int cppISteamController_SteamController006_GetGamepadIndexForController(void *, ControllerHandle_t);
+extern ControllerHandle_t cppISteamController_SteamController006_GetControllerForGamepadIndex(void *, int);
+extern ControllerMotionData_t cppISteamController_SteamController006_GetMotionData(void *, ControllerHandle_t);
+extern bool cppISteamController_SteamController006_ShowDigitalActionOrigins(void *, ControllerHandle_t, ControllerDigitalActionHandle_t, float, float, float);
+extern bool cppISteamController_SteamController006_ShowAnalogActionOrigins(void *, ControllerHandle_t, ControllerAnalogActionHandle_t, float, float, float);
+extern const char * cppISteamController_SteamController006_GetStringForActionOrigin(void *, EControllerActionOrigin);
+extern const char * cppISteamController_SteamController006_GetGlyphForActionOrigin(void *, EControllerActionOrigin);
+extern ESteamInputType cppISteamController_SteamController006_GetInputTypeForHandle(void *, ControllerHandle_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends003.cpp b/lsteamclient/cppISteamFriends_SteamFriends003.cpp
new file mode 100644
index 00000000..6a0da9c1
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends003.cpp
@@ -0,0 +1,110 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_101/steam_api.h"
+#include "cppISteamFriends_SteamFriends003.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+const char * cppISteamFriends_SteamFriends003_GetPersonaName(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaName();
+}
+
+void cppISteamFriends_SteamFriends003_SetPersonaName(void *linux_side, const char * pchPersonaName)
+{
+ ((ISteamFriends*)linux_side)->SetPersonaName((const char *)pchPersonaName);
+}
+
+EPersonaState cppISteamFriends_SteamFriends003_GetPersonaState(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaState();
+}
+
+int cppISteamFriends_SteamFriends003_GetFriendCount(void *linux_side, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCount((int)iFriendFlags);
+}
+
+CSteamID cppISteamFriends_SteamFriends003_GetFriendByIndex(void *linux_side, int iFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendByIndex((int)iFriend, (int)iFriendFlags);
+}
+
+EFriendRelationship cppISteamFriends_SteamFriends003_GetFriendRelationship(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRelationship((CSteamID)steamIDFriend);
+}
+
+EPersonaState cppISteamFriends_SteamFriends003_GetFriendPersonaState(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaState((CSteamID)steamIDFriend);
+}
+
+const char * cppISteamFriends_SteamFriends003_GetFriendPersonaName(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaName((CSteamID)steamIDFriend);
+}
+
+int cppISteamFriends_SteamFriends003_GetFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendAvatar((CSteamID)steamIDFriend);
+}
+
+bool cppISteamFriends_SteamFriends003_GetFriendGamePlayed(void *linux_side, CSteamID steamIDFriend, uint64 * pulGameID, uint32 * punGameIP, uint16 * pusGamePort, uint16 * pusQueryPort)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendGamePlayed((CSteamID)steamIDFriend, (uint64 *)pulGameID, (uint32 *)punGameIP, (uint16 *)pusGamePort, (uint16 *)pusQueryPort);
+}
+
+const char * cppISteamFriends_SteamFriends003_GetFriendPersonaNameHistory(void *linux_side, CSteamID steamIDFriend, int iPersonaName)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaNameHistory((CSteamID)steamIDFriend, (int)iPersonaName);
+}
+
+bool cppISteamFriends_SteamFriends003_HasFriend(void *linux_side, CSteamID steamIDFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->HasFriend((CSteamID)steamIDFriend, (int)iFriendFlags);
+}
+
+int cppISteamFriends_SteamFriends003_GetClanCount(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetClanCount();
+}
+
+CSteamID cppISteamFriends_SteamFriends003_GetClanByIndex(void *linux_side, int iClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanByIndex((int)iClan);
+}
+
+const char * cppISteamFriends_SteamFriends003_GetClanName(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanName((CSteamID)steamIDClan);
+}
+
+int cppISteamFriends_SteamFriends003_GetFriendCountFromSource(void *linux_side, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCountFromSource((CSteamID)steamIDSource);
+}
+
+CSteamID cppISteamFriends_SteamFriends003_GetFriendFromSourceByIndex(void *linux_side, CSteamID steamIDSource, int iFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendFromSourceByIndex((CSteamID)steamIDSource, (int)iFriend);
+}
+
+bool cppISteamFriends_SteamFriends003_IsUserInSource(void *linux_side, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->IsUserInSource((CSteamID)steamIDUser, (CSteamID)steamIDSource);
+}
+
+void cppISteamFriends_SteamFriends003_SetInGameVoiceSpeaking(void *linux_side, CSteamID steamIDUser, bool bSpeaking)
+{
+ ((ISteamFriends*)linux_side)->SetInGameVoiceSpeaking((CSteamID)steamIDUser, (bool)bSpeaking);
+}
+
+void cppISteamFriends_SteamFriends003_ActivateGameOverlay(void *linux_side, const char * pchDialog)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlay((const char *)pchDialog);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends003.h b/lsteamclient/cppISteamFriends_SteamFriends003.h
new file mode 100644
index 00000000..99e1b2ec
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends003.h
@@ -0,0 +1,26 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern const char * cppISteamFriends_SteamFriends003_GetPersonaName(void *);
+extern void cppISteamFriends_SteamFriends003_SetPersonaName(void *, const char *);
+extern EPersonaState cppISteamFriends_SteamFriends003_GetPersonaState(void *);
+extern int cppISteamFriends_SteamFriends003_GetFriendCount(void *, int);
+extern CSteamID cppISteamFriends_SteamFriends003_GetFriendByIndex(void *, int, int);
+extern EFriendRelationship cppISteamFriends_SteamFriends003_GetFriendRelationship(void *, CSteamID);
+extern EPersonaState cppISteamFriends_SteamFriends003_GetFriendPersonaState(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends003_GetFriendPersonaName(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends003_GetFriendAvatar(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends003_GetFriendGamePlayed(void *, CSteamID, uint64 *, uint32 *, uint16 *, uint16 *);
+extern const char * cppISteamFriends_SteamFriends003_GetFriendPersonaNameHistory(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends003_HasFriend(void *, CSteamID, int);
+extern int cppISteamFriends_SteamFriends003_GetClanCount(void *);
+extern CSteamID cppISteamFriends_SteamFriends003_GetClanByIndex(void *, int);
+extern const char * cppISteamFriends_SteamFriends003_GetClanName(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends003_GetFriendCountFromSource(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends003_GetFriendFromSourceByIndex(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends003_IsUserInSource(void *, CSteamID, CSteamID);
+extern void cppISteamFriends_SteamFriends003_SetInGameVoiceSpeaking(void *, CSteamID, bool);
+extern void cppISteamFriends_SteamFriends003_ActivateGameOverlay(void *, const char *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends004.cpp b/lsteamclient/cppISteamFriends_SteamFriends004.cpp
new file mode 100644
index 00000000..a12f929c
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends004.cpp
@@ -0,0 +1,110 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_102/steam_api.h"
+#include "cppISteamFriends_SteamFriends004.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+const char * cppISteamFriends_SteamFriends004_GetPersonaName(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaName();
+}
+
+void cppISteamFriends_SteamFriends004_SetPersonaName(void *linux_side, const char * pchPersonaName)
+{
+ ((ISteamFriends*)linux_side)->SetPersonaName((const char *)pchPersonaName);
+}
+
+EPersonaState cppISteamFriends_SteamFriends004_GetPersonaState(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaState();
+}
+
+int cppISteamFriends_SteamFriends004_GetFriendCount(void *linux_side, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCount((int)iFriendFlags);
+}
+
+CSteamID cppISteamFriends_SteamFriends004_GetFriendByIndex(void *linux_side, int iFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendByIndex((int)iFriend, (int)iFriendFlags);
+}
+
+EFriendRelationship cppISteamFriends_SteamFriends004_GetFriendRelationship(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRelationship((CSteamID)steamIDFriend);
+}
+
+EPersonaState cppISteamFriends_SteamFriends004_GetFriendPersonaState(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaState((CSteamID)steamIDFriend);
+}
+
+const char * cppISteamFriends_SteamFriends004_GetFriendPersonaName(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaName((CSteamID)steamIDFriend);
+}
+
+int cppISteamFriends_SteamFriends004_GetFriendAvatar(void *linux_side, CSteamID steamIDFriend, int eAvatarSize)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendAvatar((CSteamID)steamIDFriend, (int)eAvatarSize);
+}
+
+bool cppISteamFriends_SteamFriends004_GetFriendGamePlayed(void *linux_side, CSteamID steamIDFriend, uint64 * pulGameID, uint32 * punGameIP, uint16 * pusGamePort, uint16 * pusQueryPort)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendGamePlayed((CSteamID)steamIDFriend, (uint64 *)pulGameID, (uint32 *)punGameIP, (uint16 *)pusGamePort, (uint16 *)pusQueryPort);
+}
+
+const char * cppISteamFriends_SteamFriends004_GetFriendPersonaNameHistory(void *linux_side, CSteamID steamIDFriend, int iPersonaName)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaNameHistory((CSteamID)steamIDFriend, (int)iPersonaName);
+}
+
+bool cppISteamFriends_SteamFriends004_HasFriend(void *linux_side, CSteamID steamIDFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->HasFriend((CSteamID)steamIDFriend, (int)iFriendFlags);
+}
+
+int cppISteamFriends_SteamFriends004_GetClanCount(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetClanCount();
+}
+
+CSteamID cppISteamFriends_SteamFriends004_GetClanByIndex(void *linux_side, int iClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanByIndex((int)iClan);
+}
+
+const char * cppISteamFriends_SteamFriends004_GetClanName(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanName((CSteamID)steamIDClan);
+}
+
+int cppISteamFriends_SteamFriends004_GetFriendCountFromSource(void *linux_side, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCountFromSource((CSteamID)steamIDSource);
+}
+
+CSteamID cppISteamFriends_SteamFriends004_GetFriendFromSourceByIndex(void *linux_side, CSteamID steamIDSource, int iFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendFromSourceByIndex((CSteamID)steamIDSource, (int)iFriend);
+}
+
+bool cppISteamFriends_SteamFriends004_IsUserInSource(void *linux_side, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->IsUserInSource((CSteamID)steamIDUser, (CSteamID)steamIDSource);
+}
+
+void cppISteamFriends_SteamFriends004_SetInGameVoiceSpeaking(void *linux_side, CSteamID steamIDUser, bool bSpeaking)
+{
+ ((ISteamFriends*)linux_side)->SetInGameVoiceSpeaking((CSteamID)steamIDUser, (bool)bSpeaking);
+}
+
+void cppISteamFriends_SteamFriends004_ActivateGameOverlay(void *linux_side, const char * pchDialog)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlay((const char *)pchDialog);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends004.h b/lsteamclient/cppISteamFriends_SteamFriends004.h
new file mode 100644
index 00000000..8b96c12a
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends004.h
@@ -0,0 +1,26 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern const char * cppISteamFriends_SteamFriends004_GetPersonaName(void *);
+extern void cppISteamFriends_SteamFriends004_SetPersonaName(void *, const char *);
+extern EPersonaState cppISteamFriends_SteamFriends004_GetPersonaState(void *);
+extern int cppISteamFriends_SteamFriends004_GetFriendCount(void *, int);
+extern CSteamID cppISteamFriends_SteamFriends004_GetFriendByIndex(void *, int, int);
+extern EFriendRelationship cppISteamFriends_SteamFriends004_GetFriendRelationship(void *, CSteamID);
+extern EPersonaState cppISteamFriends_SteamFriends004_GetFriendPersonaState(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends004_GetFriendPersonaName(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends004_GetFriendAvatar(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends004_GetFriendGamePlayed(void *, CSteamID, uint64 *, uint32 *, uint16 *, uint16 *);
+extern const char * cppISteamFriends_SteamFriends004_GetFriendPersonaNameHistory(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends004_HasFriend(void *, CSteamID, int);
+extern int cppISteamFriends_SteamFriends004_GetClanCount(void *);
+extern CSteamID cppISteamFriends_SteamFriends004_GetClanByIndex(void *, int);
+extern const char * cppISteamFriends_SteamFriends004_GetClanName(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends004_GetFriendCountFromSource(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends004_GetFriendFromSourceByIndex(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends004_IsUserInSource(void *, CSteamID, CSteamID);
+extern void cppISteamFriends_SteamFriends004_SetInGameVoiceSpeaking(void *, CSteamID, bool);
+extern void cppISteamFriends_SteamFriends004_ActivateGameOverlay(void *, const char *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends005.cpp b/lsteamclient/cppISteamFriends_SteamFriends005.cpp
new file mode 100644
index 00000000..0c858b15
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends005.cpp
@@ -0,0 +1,130 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_109/steam_api.h"
+#include "cppISteamFriends_SteamFriends005.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+const char * cppISteamFriends_SteamFriends005_GetPersonaName(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaName();
+}
+
+void cppISteamFriends_SteamFriends005_SetPersonaName(void *linux_side, const char * pchPersonaName)
+{
+ ((ISteamFriends*)linux_side)->SetPersonaName((const char *)pchPersonaName);
+}
+
+EPersonaState cppISteamFriends_SteamFriends005_GetPersonaState(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaState();
+}
+
+int cppISteamFriends_SteamFriends005_GetFriendCount(void *linux_side, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCount((int)iFriendFlags);
+}
+
+CSteamID cppISteamFriends_SteamFriends005_GetFriendByIndex(void *linux_side, int iFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendByIndex((int)iFriend, (int)iFriendFlags);
+}
+
+EFriendRelationship cppISteamFriends_SteamFriends005_GetFriendRelationship(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRelationship((CSteamID)steamIDFriend);
+}
+
+EPersonaState cppISteamFriends_SteamFriends005_GetFriendPersonaState(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaState((CSteamID)steamIDFriend);
+}
+
+const char * cppISteamFriends_SteamFriends005_GetFriendPersonaName(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaName((CSteamID)steamIDFriend);
+}
+
+int cppISteamFriends_SteamFriends005_GetFriendAvatar(void *linux_side, CSteamID steamIDFriend, int eAvatarSize)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendAvatar((CSteamID)steamIDFriend, (int)eAvatarSize);
+}
+
+bool cppISteamFriends_SteamFriends005_GetFriendGamePlayed(void *linux_side, CSteamID steamIDFriend, FriendGameInfo_t * pFriendGameInfo)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendGamePlayed((CSteamID)steamIDFriend, (FriendGameInfo_t *)pFriendGameInfo);
+}
+
+const char * cppISteamFriends_SteamFriends005_GetFriendPersonaNameHistory(void *linux_side, CSteamID steamIDFriend, int iPersonaName)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaNameHistory((CSteamID)steamIDFriend, (int)iPersonaName);
+}
+
+bool cppISteamFriends_SteamFriends005_HasFriend(void *linux_side, CSteamID steamIDFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->HasFriend((CSteamID)steamIDFriend, (int)iFriendFlags);
+}
+
+int cppISteamFriends_SteamFriends005_GetClanCount(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetClanCount();
+}
+
+CSteamID cppISteamFriends_SteamFriends005_GetClanByIndex(void *linux_side, int iClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanByIndex((int)iClan);
+}
+
+const char * cppISteamFriends_SteamFriends005_GetClanName(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanName((CSteamID)steamIDClan);
+}
+
+int cppISteamFriends_SteamFriends005_GetFriendCountFromSource(void *linux_side, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCountFromSource((CSteamID)steamIDSource);
+}
+
+CSteamID cppISteamFriends_SteamFriends005_GetFriendFromSourceByIndex(void *linux_side, CSteamID steamIDSource, int iFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendFromSourceByIndex((CSteamID)steamIDSource, (int)iFriend);
+}
+
+bool cppISteamFriends_SteamFriends005_IsUserInSource(void *linux_side, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->IsUserInSource((CSteamID)steamIDUser, (CSteamID)steamIDSource);
+}
+
+void cppISteamFriends_SteamFriends005_SetInGameVoiceSpeaking(void *linux_side, CSteamID steamIDUser, bool bSpeaking)
+{
+ ((ISteamFriends*)linux_side)->SetInGameVoiceSpeaking((CSteamID)steamIDUser, (bool)bSpeaking);
+}
+
+void cppISteamFriends_SteamFriends005_ActivateGameOverlay(void *linux_side, const char * pchDialog)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlay((const char *)pchDialog);
+}
+
+void cppISteamFriends_SteamFriends005_ActivateGameOverlayToUser(void *linux_side, const char * pchDialog, CSteamID steamID)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToUser((const char *)pchDialog, (CSteamID)steamID);
+}
+
+void cppISteamFriends_SteamFriends005_ActivateGameOverlayToWebPage(void *linux_side, const char * pchURL)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToWebPage((const char *)pchURL);
+}
+
+void cppISteamFriends_SteamFriends005_ActivateGameOverlayToStore(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToStore((AppId_t)nAppID);
+}
+
+void cppISteamFriends_SteamFriends005_SetPlayedWith(void *linux_side, CSteamID steamIDUserPlayedWith)
+{
+ ((ISteamFriends*)linux_side)->SetPlayedWith((CSteamID)steamIDUserPlayedWith);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends005.h b/lsteamclient/cppISteamFriends_SteamFriends005.h
new file mode 100644
index 00000000..621dc6d3
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends005.h
@@ -0,0 +1,30 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern const char * cppISteamFriends_SteamFriends005_GetPersonaName(void *);
+extern void cppISteamFriends_SteamFriends005_SetPersonaName(void *, const char *);
+extern EPersonaState cppISteamFriends_SteamFriends005_GetPersonaState(void *);
+extern int cppISteamFriends_SteamFriends005_GetFriendCount(void *, int);
+extern CSteamID cppISteamFriends_SteamFriends005_GetFriendByIndex(void *, int, int);
+extern EFriendRelationship cppISteamFriends_SteamFriends005_GetFriendRelationship(void *, CSteamID);
+extern EPersonaState cppISteamFriends_SteamFriends005_GetFriendPersonaState(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends005_GetFriendPersonaName(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends005_GetFriendAvatar(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends005_GetFriendGamePlayed(void *, CSteamID, FriendGameInfo_t *);
+extern const char * cppISteamFriends_SteamFriends005_GetFriendPersonaNameHistory(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends005_HasFriend(void *, CSteamID, int);
+extern int cppISteamFriends_SteamFriends005_GetClanCount(void *);
+extern CSteamID cppISteamFriends_SteamFriends005_GetClanByIndex(void *, int);
+extern const char * cppISteamFriends_SteamFriends005_GetClanName(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends005_GetFriendCountFromSource(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends005_GetFriendFromSourceByIndex(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends005_IsUserInSource(void *, CSteamID, CSteamID);
+extern void cppISteamFriends_SteamFriends005_SetInGameVoiceSpeaking(void *, CSteamID, bool);
+extern void cppISteamFriends_SteamFriends005_ActivateGameOverlay(void *, const char *);
+extern void cppISteamFriends_SteamFriends005_ActivateGameOverlayToUser(void *, const char *, CSteamID);
+extern void cppISteamFriends_SteamFriends005_ActivateGameOverlayToWebPage(void *, const char *);
+extern void cppISteamFriends_SteamFriends005_ActivateGameOverlayToStore(void *, AppId_t);
+extern void cppISteamFriends_SteamFriends005_SetPlayedWith(void *, CSteamID);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends006.cpp b/lsteamclient/cppISteamFriends_SteamFriends006.cpp
new file mode 100644
index 00000000..ee7a17c5
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends006.cpp
@@ -0,0 +1,140 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_110/steam_api.h"
+#include "cppISteamFriends_SteamFriends006.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+const char * cppISteamFriends_SteamFriends006_GetPersonaName(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaName();
+}
+
+void cppISteamFriends_SteamFriends006_SetPersonaName(void *linux_side, const char * pchPersonaName)
+{
+ ((ISteamFriends*)linux_side)->SetPersonaName((const char *)pchPersonaName);
+}
+
+EPersonaState cppISteamFriends_SteamFriends006_GetPersonaState(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaState();
+}
+
+int cppISteamFriends_SteamFriends006_GetFriendCount(void *linux_side, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCount((int)iFriendFlags);
+}
+
+CSteamID cppISteamFriends_SteamFriends006_GetFriendByIndex(void *linux_side, int iFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendByIndex((int)iFriend, (int)iFriendFlags);
+}
+
+EFriendRelationship cppISteamFriends_SteamFriends006_GetFriendRelationship(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRelationship((CSteamID)steamIDFriend);
+}
+
+EPersonaState cppISteamFriends_SteamFriends006_GetFriendPersonaState(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaState((CSteamID)steamIDFriend);
+}
+
+const char * cppISteamFriends_SteamFriends006_GetFriendPersonaName(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaName((CSteamID)steamIDFriend);
+}
+
+int cppISteamFriends_SteamFriends006_GetFriendAvatar(void *linux_side, CSteamID steamIDFriend, int eAvatarSize)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendAvatar((CSteamID)steamIDFriend, (int)eAvatarSize);
+}
+
+bool cppISteamFriends_SteamFriends006_GetFriendGamePlayed(void *linux_side, CSteamID steamIDFriend, FriendGameInfo_t * pFriendGameInfo)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendGamePlayed((CSteamID)steamIDFriend, (FriendGameInfo_t *)pFriendGameInfo);
+}
+
+const char * cppISteamFriends_SteamFriends006_GetFriendPersonaNameHistory(void *linux_side, CSteamID steamIDFriend, int iPersonaName)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaNameHistory((CSteamID)steamIDFriend, (int)iPersonaName);
+}
+
+bool cppISteamFriends_SteamFriends006_HasFriend(void *linux_side, CSteamID steamIDFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->HasFriend((CSteamID)steamIDFriend, (int)iFriendFlags);
+}
+
+int cppISteamFriends_SteamFriends006_GetClanCount(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetClanCount();
+}
+
+CSteamID cppISteamFriends_SteamFriends006_GetClanByIndex(void *linux_side, int iClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanByIndex((int)iClan);
+}
+
+const char * cppISteamFriends_SteamFriends006_GetClanName(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanName((CSteamID)steamIDClan);
+}
+
+const char * cppISteamFriends_SteamFriends006_GetClanTag(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanTag((CSteamID)steamIDClan);
+}
+
+int cppISteamFriends_SteamFriends006_GetFriendCountFromSource(void *linux_side, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCountFromSource((CSteamID)steamIDSource);
+}
+
+CSteamID cppISteamFriends_SteamFriends006_GetFriendFromSourceByIndex(void *linux_side, CSteamID steamIDSource, int iFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendFromSourceByIndex((CSteamID)steamIDSource, (int)iFriend);
+}
+
+bool cppISteamFriends_SteamFriends006_IsUserInSource(void *linux_side, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->IsUserInSource((CSteamID)steamIDUser, (CSteamID)steamIDSource);
+}
+
+void cppISteamFriends_SteamFriends006_SetInGameVoiceSpeaking(void *linux_side, CSteamID steamIDUser, bool bSpeaking)
+{
+ ((ISteamFriends*)linux_side)->SetInGameVoiceSpeaking((CSteamID)steamIDUser, (bool)bSpeaking);
+}
+
+void cppISteamFriends_SteamFriends006_ActivateGameOverlay(void *linux_side, const char * pchDialog)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlay((const char *)pchDialog);
+}
+
+void cppISteamFriends_SteamFriends006_ActivateGameOverlayToUser(void *linux_side, const char * pchDialog, CSteamID steamID)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToUser((const char *)pchDialog, (CSteamID)steamID);
+}
+
+void cppISteamFriends_SteamFriends006_ActivateGameOverlayToWebPage(void *linux_side, const char * pchURL)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToWebPage((const char *)pchURL);
+}
+
+void cppISteamFriends_SteamFriends006_ActivateGameOverlayToStore(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToStore((AppId_t)nAppID);
+}
+
+void cppISteamFriends_SteamFriends006_SetPlayedWith(void *linux_side, CSteamID steamIDUserPlayedWith)
+{
+ ((ISteamFriends*)linux_side)->SetPlayedWith((CSteamID)steamIDUserPlayedWith);
+}
+
+void cppISteamFriends_SteamFriends006_ActivateGameOverlayInviteDialog(void *linux_side, CSteamID steamIDLobby)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayInviteDialog((CSteamID)steamIDLobby);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends006.h b/lsteamclient/cppISteamFriends_SteamFriends006.h
new file mode 100644
index 00000000..48527906
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends006.h
@@ -0,0 +1,32 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern const char * cppISteamFriends_SteamFriends006_GetPersonaName(void *);
+extern void cppISteamFriends_SteamFriends006_SetPersonaName(void *, const char *);
+extern EPersonaState cppISteamFriends_SteamFriends006_GetPersonaState(void *);
+extern int cppISteamFriends_SteamFriends006_GetFriendCount(void *, int);
+extern CSteamID cppISteamFriends_SteamFriends006_GetFriendByIndex(void *, int, int);
+extern EFriendRelationship cppISteamFriends_SteamFriends006_GetFriendRelationship(void *, CSteamID);
+extern EPersonaState cppISteamFriends_SteamFriends006_GetFriendPersonaState(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends006_GetFriendPersonaName(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends006_GetFriendAvatar(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends006_GetFriendGamePlayed(void *, CSteamID, FriendGameInfo_t *);
+extern const char * cppISteamFriends_SteamFriends006_GetFriendPersonaNameHistory(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends006_HasFriend(void *, CSteamID, int);
+extern int cppISteamFriends_SteamFriends006_GetClanCount(void *);
+extern CSteamID cppISteamFriends_SteamFriends006_GetClanByIndex(void *, int);
+extern const char * cppISteamFriends_SteamFriends006_GetClanName(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends006_GetClanTag(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends006_GetFriendCountFromSource(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends006_GetFriendFromSourceByIndex(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends006_IsUserInSource(void *, CSteamID, CSteamID);
+extern void cppISteamFriends_SteamFriends006_SetInGameVoiceSpeaking(void *, CSteamID, bool);
+extern void cppISteamFriends_SteamFriends006_ActivateGameOverlay(void *, const char *);
+extern void cppISteamFriends_SteamFriends006_ActivateGameOverlayToUser(void *, const char *, CSteamID);
+extern void cppISteamFriends_SteamFriends006_ActivateGameOverlayToWebPage(void *, const char *);
+extern void cppISteamFriends_SteamFriends006_ActivateGameOverlayToStore(void *, AppId_t);
+extern void cppISteamFriends_SteamFriends006_SetPlayedWith(void *, CSteamID);
+extern void cppISteamFriends_SteamFriends006_ActivateGameOverlayInviteDialog(void *, CSteamID);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends007.cpp b/lsteamclient/cppISteamFriends_SteamFriends007.cpp
new file mode 100644
index 00000000..09b61271
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends007.cpp
@@ -0,0 +1,150 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_111/steam_api.h"
+#include "cppISteamFriends_SteamFriends007.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+const char * cppISteamFriends_SteamFriends007_GetPersonaName(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaName();
+}
+
+void cppISteamFriends_SteamFriends007_SetPersonaName(void *linux_side, const char * pchPersonaName)
+{
+ ((ISteamFriends*)linux_side)->SetPersonaName((const char *)pchPersonaName);
+}
+
+EPersonaState cppISteamFriends_SteamFriends007_GetPersonaState(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaState();
+}
+
+int cppISteamFriends_SteamFriends007_GetFriendCount(void *linux_side, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCount((int)iFriendFlags);
+}
+
+CSteamID cppISteamFriends_SteamFriends007_GetFriendByIndex(void *linux_side, int iFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendByIndex((int)iFriend, (int)iFriendFlags);
+}
+
+EFriendRelationship cppISteamFriends_SteamFriends007_GetFriendRelationship(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRelationship((CSteamID)steamIDFriend);
+}
+
+EPersonaState cppISteamFriends_SteamFriends007_GetFriendPersonaState(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaState((CSteamID)steamIDFriend);
+}
+
+const char * cppISteamFriends_SteamFriends007_GetFriendPersonaName(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaName((CSteamID)steamIDFriend);
+}
+
+bool cppISteamFriends_SteamFriends007_GetFriendGamePlayed(void *linux_side, CSteamID steamIDFriend, FriendGameInfo_t * pFriendGameInfo)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendGamePlayed((CSteamID)steamIDFriend, (FriendGameInfo_t *)pFriendGameInfo);
+}
+
+const char * cppISteamFriends_SteamFriends007_GetFriendPersonaNameHistory(void *linux_side, CSteamID steamIDFriend, int iPersonaName)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaNameHistory((CSteamID)steamIDFriend, (int)iPersonaName);
+}
+
+bool cppISteamFriends_SteamFriends007_HasFriend(void *linux_side, CSteamID steamIDFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->HasFriend((CSteamID)steamIDFriend, (int)iFriendFlags);
+}
+
+int cppISteamFriends_SteamFriends007_GetClanCount(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetClanCount();
+}
+
+CSteamID cppISteamFriends_SteamFriends007_GetClanByIndex(void *linux_side, int iClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanByIndex((int)iClan);
+}
+
+const char * cppISteamFriends_SteamFriends007_GetClanName(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanName((CSteamID)steamIDClan);
+}
+
+const char * cppISteamFriends_SteamFriends007_GetClanTag(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanTag((CSteamID)steamIDClan);
+}
+
+int cppISteamFriends_SteamFriends007_GetFriendCountFromSource(void *linux_side, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCountFromSource((CSteamID)steamIDSource);
+}
+
+CSteamID cppISteamFriends_SteamFriends007_GetFriendFromSourceByIndex(void *linux_side, CSteamID steamIDSource, int iFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendFromSourceByIndex((CSteamID)steamIDSource, (int)iFriend);
+}
+
+bool cppISteamFriends_SteamFriends007_IsUserInSource(void *linux_side, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->IsUserInSource((CSteamID)steamIDUser, (CSteamID)steamIDSource);
+}
+
+void cppISteamFriends_SteamFriends007_SetInGameVoiceSpeaking(void *linux_side, CSteamID steamIDUser, bool bSpeaking)
+{
+ ((ISteamFriends*)linux_side)->SetInGameVoiceSpeaking((CSteamID)steamIDUser, (bool)bSpeaking);
+}
+
+void cppISteamFriends_SteamFriends007_ActivateGameOverlay(void *linux_side, const char * pchDialog)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlay((const char *)pchDialog);
+}
+
+void cppISteamFriends_SteamFriends007_ActivateGameOverlayToUser(void *linux_side, const char * pchDialog, CSteamID steamID)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToUser((const char *)pchDialog, (CSteamID)steamID);
+}
+
+void cppISteamFriends_SteamFriends007_ActivateGameOverlayToWebPage(void *linux_side, const char * pchURL)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToWebPage((const char *)pchURL);
+}
+
+void cppISteamFriends_SteamFriends007_ActivateGameOverlayToStore(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToStore((AppId_t)nAppID);
+}
+
+void cppISteamFriends_SteamFriends007_SetPlayedWith(void *linux_side, CSteamID steamIDUserPlayedWith)
+{
+ ((ISteamFriends*)linux_side)->SetPlayedWith((CSteamID)steamIDUserPlayedWith);
+}
+
+void cppISteamFriends_SteamFriends007_ActivateGameOverlayInviteDialog(void *linux_side, CSteamID steamIDLobby)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayInviteDialog((CSteamID)steamIDLobby);
+}
+
+int cppISteamFriends_SteamFriends007_GetSmallFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetSmallFriendAvatar((CSteamID)steamIDFriend);
+}
+
+int cppISteamFriends_SteamFriends007_GetMediumFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetMediumFriendAvatar((CSteamID)steamIDFriend);
+}
+
+int cppISteamFriends_SteamFriends007_GetLargeFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetLargeFriendAvatar((CSteamID)steamIDFriend);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends007.h b/lsteamclient/cppISteamFriends_SteamFriends007.h
new file mode 100644
index 00000000..1925af3a
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends007.h
@@ -0,0 +1,34 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern const char * cppISteamFriends_SteamFriends007_GetPersonaName(void *);
+extern void cppISteamFriends_SteamFriends007_SetPersonaName(void *, const char *);
+extern EPersonaState cppISteamFriends_SteamFriends007_GetPersonaState(void *);
+extern int cppISteamFriends_SteamFriends007_GetFriendCount(void *, int);
+extern CSteamID cppISteamFriends_SteamFriends007_GetFriendByIndex(void *, int, int);
+extern EFriendRelationship cppISteamFriends_SteamFriends007_GetFriendRelationship(void *, CSteamID);
+extern EPersonaState cppISteamFriends_SteamFriends007_GetFriendPersonaState(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends007_GetFriendPersonaName(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends007_GetFriendGamePlayed(void *, CSteamID, FriendGameInfo_t *);
+extern const char * cppISteamFriends_SteamFriends007_GetFriendPersonaNameHistory(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends007_HasFriend(void *, CSteamID, int);
+extern int cppISteamFriends_SteamFriends007_GetClanCount(void *);
+extern CSteamID cppISteamFriends_SteamFriends007_GetClanByIndex(void *, int);
+extern const char * cppISteamFriends_SteamFriends007_GetClanName(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends007_GetClanTag(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends007_GetFriendCountFromSource(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends007_GetFriendFromSourceByIndex(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends007_IsUserInSource(void *, CSteamID, CSteamID);
+extern void cppISteamFriends_SteamFriends007_SetInGameVoiceSpeaking(void *, CSteamID, bool);
+extern void cppISteamFriends_SteamFriends007_ActivateGameOverlay(void *, const char *);
+extern void cppISteamFriends_SteamFriends007_ActivateGameOverlayToUser(void *, const char *, CSteamID);
+extern void cppISteamFriends_SteamFriends007_ActivateGameOverlayToWebPage(void *, const char *);
+extern void cppISteamFriends_SteamFriends007_ActivateGameOverlayToStore(void *, AppId_t);
+extern void cppISteamFriends_SteamFriends007_SetPlayedWith(void *, CSteamID);
+extern void cppISteamFriends_SteamFriends007_ActivateGameOverlayInviteDialog(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends007_GetSmallFriendAvatar(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends007_GetMediumFriendAvatar(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends007_GetLargeFriendAvatar(void *, CSteamID);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends008.cpp b/lsteamclient/cppISteamFriends_SteamFriends008.cpp
new file mode 100644
index 00000000..5e4c7754
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends008.cpp
@@ -0,0 +1,180 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_112/steam_api.h"
+#include "cppISteamFriends_SteamFriends008.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+const char * cppISteamFriends_SteamFriends008_GetPersonaName(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaName();
+}
+
+void cppISteamFriends_SteamFriends008_SetPersonaName(void *linux_side, const char * pchPersonaName)
+{
+ ((ISteamFriends*)linux_side)->SetPersonaName((const char *)pchPersonaName);
+}
+
+EPersonaState cppISteamFriends_SteamFriends008_GetPersonaState(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaState();
+}
+
+int cppISteamFriends_SteamFriends008_GetFriendCount(void *linux_side, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCount((int)iFriendFlags);
+}
+
+CSteamID cppISteamFriends_SteamFriends008_GetFriendByIndex(void *linux_side, int iFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendByIndex((int)iFriend, (int)iFriendFlags);
+}
+
+EFriendRelationship cppISteamFriends_SteamFriends008_GetFriendRelationship(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRelationship((CSteamID)steamIDFriend);
+}
+
+EPersonaState cppISteamFriends_SteamFriends008_GetFriendPersonaState(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaState((CSteamID)steamIDFriend);
+}
+
+const char * cppISteamFriends_SteamFriends008_GetFriendPersonaName(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaName((CSteamID)steamIDFriend);
+}
+
+bool cppISteamFriends_SteamFriends008_GetFriendGamePlayed(void *linux_side, CSteamID steamIDFriend, FriendGameInfo_t * pFriendGameInfo)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendGamePlayed((CSteamID)steamIDFriend, (FriendGameInfo_t *)pFriendGameInfo);
+}
+
+const char * cppISteamFriends_SteamFriends008_GetFriendPersonaNameHistory(void *linux_side, CSteamID steamIDFriend, int iPersonaName)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaNameHistory((CSteamID)steamIDFriend, (int)iPersonaName);
+}
+
+bool cppISteamFriends_SteamFriends008_HasFriend(void *linux_side, CSteamID steamIDFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->HasFriend((CSteamID)steamIDFriend, (int)iFriendFlags);
+}
+
+int cppISteamFriends_SteamFriends008_GetClanCount(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetClanCount();
+}
+
+CSteamID cppISteamFriends_SteamFriends008_GetClanByIndex(void *linux_side, int iClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanByIndex((int)iClan);
+}
+
+const char * cppISteamFriends_SteamFriends008_GetClanName(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanName((CSteamID)steamIDClan);
+}
+
+const char * cppISteamFriends_SteamFriends008_GetClanTag(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanTag((CSteamID)steamIDClan);
+}
+
+int cppISteamFriends_SteamFriends008_GetFriendCountFromSource(void *linux_side, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCountFromSource((CSteamID)steamIDSource);
+}
+
+CSteamID cppISteamFriends_SteamFriends008_GetFriendFromSourceByIndex(void *linux_side, CSteamID steamIDSource, int iFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendFromSourceByIndex((CSteamID)steamIDSource, (int)iFriend);
+}
+
+bool cppISteamFriends_SteamFriends008_IsUserInSource(void *linux_side, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->IsUserInSource((CSteamID)steamIDUser, (CSteamID)steamIDSource);
+}
+
+void cppISteamFriends_SteamFriends008_SetInGameVoiceSpeaking(void *linux_side, CSteamID steamIDUser, bool bSpeaking)
+{
+ ((ISteamFriends*)linux_side)->SetInGameVoiceSpeaking((CSteamID)steamIDUser, (bool)bSpeaking);
+}
+
+void cppISteamFriends_SteamFriends008_ActivateGameOverlay(void *linux_side, const char * pchDialog)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlay((const char *)pchDialog);
+}
+
+void cppISteamFriends_SteamFriends008_ActivateGameOverlayToUser(void *linux_side, const char * pchDialog, CSteamID steamID)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToUser((const char *)pchDialog, (CSteamID)steamID);
+}
+
+void cppISteamFriends_SteamFriends008_ActivateGameOverlayToWebPage(void *linux_side, const char * pchURL)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToWebPage((const char *)pchURL);
+}
+
+void cppISteamFriends_SteamFriends008_ActivateGameOverlayToStore(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToStore((AppId_t)nAppID);
+}
+
+void cppISteamFriends_SteamFriends008_SetPlayedWith(void *linux_side, CSteamID steamIDUserPlayedWith)
+{
+ ((ISteamFriends*)linux_side)->SetPlayedWith((CSteamID)steamIDUserPlayedWith);
+}
+
+void cppISteamFriends_SteamFriends008_ActivateGameOverlayInviteDialog(void *linux_side, CSteamID steamIDLobby)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayInviteDialog((CSteamID)steamIDLobby);
+}
+
+int cppISteamFriends_SteamFriends008_GetSmallFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetSmallFriendAvatar((CSteamID)steamIDFriend);
+}
+
+int cppISteamFriends_SteamFriends008_GetMediumFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetMediumFriendAvatar((CSteamID)steamIDFriend);
+}
+
+int cppISteamFriends_SteamFriends008_GetLargeFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetLargeFriendAvatar((CSteamID)steamIDFriend);
+}
+
+bool cppISteamFriends_SteamFriends008_RequestUserInformation(void *linux_side, CSteamID steamIDUser, bool bRequireNameOnly)
+{
+ return ((ISteamFriends*)linux_side)->RequestUserInformation((CSteamID)steamIDUser, (bool)bRequireNameOnly);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends008_RequestClanOfficerList(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->RequestClanOfficerList((CSteamID)steamIDClan);
+}
+
+CSteamID cppISteamFriends_SteamFriends008_GetClanOwner(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanOwner((CSteamID)steamIDClan);
+}
+
+int cppISteamFriends_SteamFriends008_GetClanOfficerCount(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanOfficerCount((CSteamID)steamIDClan);
+}
+
+CSteamID cppISteamFriends_SteamFriends008_GetClanOfficerByIndex(void *linux_side, CSteamID steamIDClan, int iOfficer)
+{
+ return ((ISteamFriends*)linux_side)->GetClanOfficerByIndex((CSteamID)steamIDClan, (int)iOfficer);
+}
+
+uint32 cppISteamFriends_SteamFriends008_GetUserRestrictions(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetUserRestrictions();
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends008.h b/lsteamclient/cppISteamFriends_SteamFriends008.h
new file mode 100644
index 00000000..76655557
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends008.h
@@ -0,0 +1,40 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern const char * cppISteamFriends_SteamFriends008_GetPersonaName(void *);
+extern void cppISteamFriends_SteamFriends008_SetPersonaName(void *, const char *);
+extern EPersonaState cppISteamFriends_SteamFriends008_GetPersonaState(void *);
+extern int cppISteamFriends_SteamFriends008_GetFriendCount(void *, int);
+extern CSteamID cppISteamFriends_SteamFriends008_GetFriendByIndex(void *, int, int);
+extern EFriendRelationship cppISteamFriends_SteamFriends008_GetFriendRelationship(void *, CSteamID);
+extern EPersonaState cppISteamFriends_SteamFriends008_GetFriendPersonaState(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends008_GetFriendPersonaName(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends008_GetFriendGamePlayed(void *, CSteamID, FriendGameInfo_t *);
+extern const char * cppISteamFriends_SteamFriends008_GetFriendPersonaNameHistory(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends008_HasFriend(void *, CSteamID, int);
+extern int cppISteamFriends_SteamFriends008_GetClanCount(void *);
+extern CSteamID cppISteamFriends_SteamFriends008_GetClanByIndex(void *, int);
+extern const char * cppISteamFriends_SteamFriends008_GetClanName(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends008_GetClanTag(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends008_GetFriendCountFromSource(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends008_GetFriendFromSourceByIndex(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends008_IsUserInSource(void *, CSteamID, CSteamID);
+extern void cppISteamFriends_SteamFriends008_SetInGameVoiceSpeaking(void *, CSteamID, bool);
+extern void cppISteamFriends_SteamFriends008_ActivateGameOverlay(void *, const char *);
+extern void cppISteamFriends_SteamFriends008_ActivateGameOverlayToUser(void *, const char *, CSteamID);
+extern void cppISteamFriends_SteamFriends008_ActivateGameOverlayToWebPage(void *, const char *);
+extern void cppISteamFriends_SteamFriends008_ActivateGameOverlayToStore(void *, AppId_t);
+extern void cppISteamFriends_SteamFriends008_SetPlayedWith(void *, CSteamID);
+extern void cppISteamFriends_SteamFriends008_ActivateGameOverlayInviteDialog(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends008_GetSmallFriendAvatar(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends008_GetMediumFriendAvatar(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends008_GetLargeFriendAvatar(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends008_RequestUserInformation(void *, CSteamID, bool);
+extern SteamAPICall_t cppISteamFriends_SteamFriends008_RequestClanOfficerList(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends008_GetClanOwner(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends008_GetClanOfficerCount(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends008_GetClanOfficerByIndex(void *, CSteamID, int);
+extern uint32 cppISteamFriends_SteamFriends008_GetUserRestrictions(void *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends009.cpp b/lsteamclient/cppISteamFriends_SteamFriends009.cpp
new file mode 100644
index 00000000..ec75907e
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends009.cpp
@@ -0,0 +1,230 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_116/steam_api.h"
+#include "cppISteamFriends_SteamFriends009.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+const char * cppISteamFriends_SteamFriends009_GetPersonaName(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaName();
+}
+
+void cppISteamFriends_SteamFriends009_SetPersonaName(void *linux_side, const char * pchPersonaName)
+{
+ ((ISteamFriends*)linux_side)->SetPersonaName((const char *)pchPersonaName);
+}
+
+EPersonaState cppISteamFriends_SteamFriends009_GetPersonaState(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaState();
+}
+
+int cppISteamFriends_SteamFriends009_GetFriendCount(void *linux_side, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCount((int)iFriendFlags);
+}
+
+CSteamID cppISteamFriends_SteamFriends009_GetFriendByIndex(void *linux_side, int iFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendByIndex((int)iFriend, (int)iFriendFlags);
+}
+
+EFriendRelationship cppISteamFriends_SteamFriends009_GetFriendRelationship(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRelationship((CSteamID)steamIDFriend);
+}
+
+EPersonaState cppISteamFriends_SteamFriends009_GetFriendPersonaState(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaState((CSteamID)steamIDFriend);
+}
+
+const char * cppISteamFriends_SteamFriends009_GetFriendPersonaName(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaName((CSteamID)steamIDFriend);
+}
+
+bool cppISteamFriends_SteamFriends009_GetFriendGamePlayed(void *linux_side, CSteamID steamIDFriend, FriendGameInfo_t * pFriendGameInfo)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendGamePlayed((CSteamID)steamIDFriend, (FriendGameInfo_t *)pFriendGameInfo);
+}
+
+const char * cppISteamFriends_SteamFriends009_GetFriendPersonaNameHistory(void *linux_side, CSteamID steamIDFriend, int iPersonaName)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaNameHistory((CSteamID)steamIDFriend, (int)iPersonaName);
+}
+
+bool cppISteamFriends_SteamFriends009_HasFriend(void *linux_side, CSteamID steamIDFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->HasFriend((CSteamID)steamIDFriend, (int)iFriendFlags);
+}
+
+int cppISteamFriends_SteamFriends009_GetClanCount(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetClanCount();
+}
+
+CSteamID cppISteamFriends_SteamFriends009_GetClanByIndex(void *linux_side, int iClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanByIndex((int)iClan);
+}
+
+const char * cppISteamFriends_SteamFriends009_GetClanName(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanName((CSteamID)steamIDClan);
+}
+
+const char * cppISteamFriends_SteamFriends009_GetClanTag(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanTag((CSteamID)steamIDClan);
+}
+
+int cppISteamFriends_SteamFriends009_GetFriendCountFromSource(void *linux_side, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCountFromSource((CSteamID)steamIDSource);
+}
+
+CSteamID cppISteamFriends_SteamFriends009_GetFriendFromSourceByIndex(void *linux_side, CSteamID steamIDSource, int iFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendFromSourceByIndex((CSteamID)steamIDSource, (int)iFriend);
+}
+
+bool cppISteamFriends_SteamFriends009_IsUserInSource(void *linux_side, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->IsUserInSource((CSteamID)steamIDUser, (CSteamID)steamIDSource);
+}
+
+void cppISteamFriends_SteamFriends009_SetInGameVoiceSpeaking(void *linux_side, CSteamID steamIDUser, bool bSpeaking)
+{
+ ((ISteamFriends*)linux_side)->SetInGameVoiceSpeaking((CSteamID)steamIDUser, (bool)bSpeaking);
+}
+
+void cppISteamFriends_SteamFriends009_ActivateGameOverlay(void *linux_side, const char * pchDialog)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlay((const char *)pchDialog);
+}
+
+void cppISteamFriends_SteamFriends009_ActivateGameOverlayToUser(void *linux_side, const char * pchDialog, CSteamID steamID)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToUser((const char *)pchDialog, (CSteamID)steamID);
+}
+
+void cppISteamFriends_SteamFriends009_ActivateGameOverlayToWebPage(void *linux_side, const char * pchURL)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToWebPage((const char *)pchURL);
+}
+
+void cppISteamFriends_SteamFriends009_ActivateGameOverlayToStore(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToStore((AppId_t)nAppID);
+}
+
+void cppISteamFriends_SteamFriends009_SetPlayedWith(void *linux_side, CSteamID steamIDUserPlayedWith)
+{
+ ((ISteamFriends*)linux_side)->SetPlayedWith((CSteamID)steamIDUserPlayedWith);
+}
+
+void cppISteamFriends_SteamFriends009_ActivateGameOverlayInviteDialog(void *linux_side, CSteamID steamIDLobby)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayInviteDialog((CSteamID)steamIDLobby);
+}
+
+int cppISteamFriends_SteamFriends009_GetSmallFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetSmallFriendAvatar((CSteamID)steamIDFriend);
+}
+
+int cppISteamFriends_SteamFriends009_GetMediumFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetMediumFriendAvatar((CSteamID)steamIDFriend);
+}
+
+int cppISteamFriends_SteamFriends009_GetLargeFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetLargeFriendAvatar((CSteamID)steamIDFriend);
+}
+
+bool cppISteamFriends_SteamFriends009_RequestUserInformation(void *linux_side, CSteamID steamIDUser, bool bRequireNameOnly)
+{
+ return ((ISteamFriends*)linux_side)->RequestUserInformation((CSteamID)steamIDUser, (bool)bRequireNameOnly);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends009_RequestClanOfficerList(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->RequestClanOfficerList((CSteamID)steamIDClan);
+}
+
+CSteamID cppISteamFriends_SteamFriends009_GetClanOwner(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanOwner((CSteamID)steamIDClan);
+}
+
+int cppISteamFriends_SteamFriends009_GetClanOfficerCount(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanOfficerCount((CSteamID)steamIDClan);
+}
+
+CSteamID cppISteamFriends_SteamFriends009_GetClanOfficerByIndex(void *linux_side, CSteamID steamIDClan, int iOfficer)
+{
+ return ((ISteamFriends*)linux_side)->GetClanOfficerByIndex((CSteamID)steamIDClan, (int)iOfficer);
+}
+
+uint32 cppISteamFriends_SteamFriends009_GetUserRestrictions(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetUserRestrictions();
+}
+
+bool cppISteamFriends_SteamFriends009_SetRichPresence(void *linux_side, const char * pchKey, const char * pchValue)
+{
+ return ((ISteamFriends*)linux_side)->SetRichPresence((const char *)pchKey, (const char *)pchValue);
+}
+
+void cppISteamFriends_SteamFriends009_ClearRichPresence(void *linux_side)
+{
+ ((ISteamFriends*)linux_side)->ClearRichPresence();
+}
+
+const char * cppISteamFriends_SteamFriends009_GetFriendRichPresence(void *linux_side, CSteamID steamIDFriend, const char * pchKey)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRichPresence((CSteamID)steamIDFriend, (const char *)pchKey);
+}
+
+int cppISteamFriends_SteamFriends009_GetFriendRichPresenceKeyCount(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRichPresenceKeyCount((CSteamID)steamIDFriend);
+}
+
+const char * cppISteamFriends_SteamFriends009_GetFriendRichPresenceKeyByIndex(void *linux_side, CSteamID steamIDFriend, int iKey)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRichPresenceKeyByIndex((CSteamID)steamIDFriend, (int)iKey);
+}
+
+bool cppISteamFriends_SteamFriends009_InviteUserToGame(void *linux_side, CSteamID steamIDFriend, const char * pchConnectString)
+{
+ return ((ISteamFriends*)linux_side)->InviteUserToGame((CSteamID)steamIDFriend, (const char *)pchConnectString);
+}
+
+int cppISteamFriends_SteamFriends009_GetCoplayFriendCount(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetCoplayFriendCount();
+}
+
+CSteamID cppISteamFriends_SteamFriends009_GetCoplayFriend(void *linux_side, int iCoplayFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetCoplayFriend((int)iCoplayFriend);
+}
+
+int cppISteamFriends_SteamFriends009_GetFriendCoplayTime(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCoplayTime((CSteamID)steamIDFriend);
+}
+
+AppId_t cppISteamFriends_SteamFriends009_GetFriendCoplayGame(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCoplayGame((CSteamID)steamIDFriend);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends009.h b/lsteamclient/cppISteamFriends_SteamFriends009.h
new file mode 100644
index 00000000..a1313a04
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends009.h
@@ -0,0 +1,50 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern const char * cppISteamFriends_SteamFriends009_GetPersonaName(void *);
+extern void cppISteamFriends_SteamFriends009_SetPersonaName(void *, const char *);
+extern EPersonaState cppISteamFriends_SteamFriends009_GetPersonaState(void *);
+extern int cppISteamFriends_SteamFriends009_GetFriendCount(void *, int);
+extern CSteamID cppISteamFriends_SteamFriends009_GetFriendByIndex(void *, int, int);
+extern EFriendRelationship cppISteamFriends_SteamFriends009_GetFriendRelationship(void *, CSteamID);
+extern EPersonaState cppISteamFriends_SteamFriends009_GetFriendPersonaState(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends009_GetFriendPersonaName(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends009_GetFriendGamePlayed(void *, CSteamID, FriendGameInfo_t *);
+extern const char * cppISteamFriends_SteamFriends009_GetFriendPersonaNameHistory(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends009_HasFriend(void *, CSteamID, int);
+extern int cppISteamFriends_SteamFriends009_GetClanCount(void *);
+extern CSteamID cppISteamFriends_SteamFriends009_GetClanByIndex(void *, int);
+extern const char * cppISteamFriends_SteamFriends009_GetClanName(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends009_GetClanTag(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends009_GetFriendCountFromSource(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends009_GetFriendFromSourceByIndex(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends009_IsUserInSource(void *, CSteamID, CSteamID);
+extern void cppISteamFriends_SteamFriends009_SetInGameVoiceSpeaking(void *, CSteamID, bool);
+extern void cppISteamFriends_SteamFriends009_ActivateGameOverlay(void *, const char *);
+extern void cppISteamFriends_SteamFriends009_ActivateGameOverlayToUser(void *, const char *, CSteamID);
+extern void cppISteamFriends_SteamFriends009_ActivateGameOverlayToWebPage(void *, const char *);
+extern void cppISteamFriends_SteamFriends009_ActivateGameOverlayToStore(void *, AppId_t);
+extern void cppISteamFriends_SteamFriends009_SetPlayedWith(void *, CSteamID);
+extern void cppISteamFriends_SteamFriends009_ActivateGameOverlayInviteDialog(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends009_GetSmallFriendAvatar(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends009_GetMediumFriendAvatar(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends009_GetLargeFriendAvatar(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends009_RequestUserInformation(void *, CSteamID, bool);
+extern SteamAPICall_t cppISteamFriends_SteamFriends009_RequestClanOfficerList(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends009_GetClanOwner(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends009_GetClanOfficerCount(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends009_GetClanOfficerByIndex(void *, CSteamID, int);
+extern uint32 cppISteamFriends_SteamFriends009_GetUserRestrictions(void *);
+extern bool cppISteamFriends_SteamFriends009_SetRichPresence(void *, const char *, const char *);
+extern void cppISteamFriends_SteamFriends009_ClearRichPresence(void *);
+extern const char * cppISteamFriends_SteamFriends009_GetFriendRichPresence(void *, CSteamID, const char *);
+extern int cppISteamFriends_SteamFriends009_GetFriendRichPresenceKeyCount(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends009_GetFriendRichPresenceKeyByIndex(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends009_InviteUserToGame(void *, CSteamID, const char *);
+extern int cppISteamFriends_SteamFriends009_GetCoplayFriendCount(void *);
+extern CSteamID cppISteamFriends_SteamFriends009_GetCoplayFriend(void *, int);
+extern int cppISteamFriends_SteamFriends009_GetFriendCoplayTime(void *, CSteamID);
+extern AppId_t cppISteamFriends_SteamFriends009_GetFriendCoplayGame(void *, CSteamID);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends011.cpp b/lsteamclient/cppISteamFriends_SteamFriends011.cpp
new file mode 100644
index 00000000..4a9d6078
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends011.cpp
@@ -0,0 +1,325 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_119/steam_api.h"
+#include "cppISteamFriends_SteamFriends011.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+const char * cppISteamFriends_SteamFriends011_GetPersonaName(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaName();
+}
+
+void cppISteamFriends_SteamFriends011_SetPersonaName(void *linux_side, const char * pchPersonaName)
+{
+ ((ISteamFriends*)linux_side)->SetPersonaName((const char *)pchPersonaName);
+}
+
+EPersonaState cppISteamFriends_SteamFriends011_GetPersonaState(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaState();
+}
+
+int cppISteamFriends_SteamFriends011_GetFriendCount(void *linux_side, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCount((int)iFriendFlags);
+}
+
+CSteamID cppISteamFriends_SteamFriends011_GetFriendByIndex(void *linux_side, int iFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendByIndex((int)iFriend, (int)iFriendFlags);
+}
+
+EFriendRelationship cppISteamFriends_SteamFriends011_GetFriendRelationship(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRelationship((CSteamID)steamIDFriend);
+}
+
+EPersonaState cppISteamFriends_SteamFriends011_GetFriendPersonaState(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaState((CSteamID)steamIDFriend);
+}
+
+const char * cppISteamFriends_SteamFriends011_GetFriendPersonaName(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaName((CSteamID)steamIDFriend);
+}
+
+bool cppISteamFriends_SteamFriends011_GetFriendGamePlayed(void *linux_side, CSteamID steamIDFriend, FriendGameInfo_t * pFriendGameInfo)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendGamePlayed((CSteamID)steamIDFriend, (FriendGameInfo_t *)pFriendGameInfo);
+}
+
+const char * cppISteamFriends_SteamFriends011_GetFriendPersonaNameHistory(void *linux_side, CSteamID steamIDFriend, int iPersonaName)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaNameHistory((CSteamID)steamIDFriend, (int)iPersonaName);
+}
+
+bool cppISteamFriends_SteamFriends011_HasFriend(void *linux_side, CSteamID steamIDFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->HasFriend((CSteamID)steamIDFriend, (int)iFriendFlags);
+}
+
+int cppISteamFriends_SteamFriends011_GetClanCount(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetClanCount();
+}
+
+CSteamID cppISteamFriends_SteamFriends011_GetClanByIndex(void *linux_side, int iClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanByIndex((int)iClan);
+}
+
+const char * cppISteamFriends_SteamFriends011_GetClanName(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanName((CSteamID)steamIDClan);
+}
+
+const char * cppISteamFriends_SteamFriends011_GetClanTag(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanTag((CSteamID)steamIDClan);
+}
+
+bool cppISteamFriends_SteamFriends011_GetClanActivityCounts(void *linux_side, CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting)
+{
+ return ((ISteamFriends*)linux_side)->GetClanActivityCounts((CSteamID)steamIDClan, (int *)pnOnline, (int *)pnInGame, (int *)pnChatting);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends011_DownloadClanActivityCounts(void *linux_side, CSteamID * psteamIDClans, int cClansToRequest)
+{
+ return ((ISteamFriends*)linux_side)->DownloadClanActivityCounts((CSteamID *)psteamIDClans, (int)cClansToRequest);
+}
+
+int cppISteamFriends_SteamFriends011_GetFriendCountFromSource(void *linux_side, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCountFromSource((CSteamID)steamIDSource);
+}
+
+CSteamID cppISteamFriends_SteamFriends011_GetFriendFromSourceByIndex(void *linux_side, CSteamID steamIDSource, int iFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendFromSourceByIndex((CSteamID)steamIDSource, (int)iFriend);
+}
+
+bool cppISteamFriends_SteamFriends011_IsUserInSource(void *linux_side, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->IsUserInSource((CSteamID)steamIDUser, (CSteamID)steamIDSource);
+}
+
+void cppISteamFriends_SteamFriends011_SetInGameVoiceSpeaking(void *linux_side, CSteamID steamIDUser, bool bSpeaking)
+{
+ ((ISteamFriends*)linux_side)->SetInGameVoiceSpeaking((CSteamID)steamIDUser, (bool)bSpeaking);
+}
+
+void cppISteamFriends_SteamFriends011_ActivateGameOverlay(void *linux_side, const char * pchDialog)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlay((const char *)pchDialog);
+}
+
+void cppISteamFriends_SteamFriends011_ActivateGameOverlayToUser(void *linux_side, const char * pchDialog, CSteamID steamID)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToUser((const char *)pchDialog, (CSteamID)steamID);
+}
+
+void cppISteamFriends_SteamFriends011_ActivateGameOverlayToWebPage(void *linux_side, const char * pchURL)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToWebPage((const char *)pchURL);
+}
+
+void cppISteamFriends_SteamFriends011_ActivateGameOverlayToStore(void *linux_side, AppId_t nAppID)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToStore((AppId_t)nAppID);
+}
+
+void cppISteamFriends_SteamFriends011_SetPlayedWith(void *linux_side, CSteamID steamIDUserPlayedWith)
+{
+ ((ISteamFriends*)linux_side)->SetPlayedWith((CSteamID)steamIDUserPlayedWith);
+}
+
+void cppISteamFriends_SteamFriends011_ActivateGameOverlayInviteDialog(void *linux_side, CSteamID steamIDLobby)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayInviteDialog((CSteamID)steamIDLobby);
+}
+
+int cppISteamFriends_SteamFriends011_GetSmallFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetSmallFriendAvatar((CSteamID)steamIDFriend);
+}
+
+int cppISteamFriends_SteamFriends011_GetMediumFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetMediumFriendAvatar((CSteamID)steamIDFriend);
+}
+
+int cppISteamFriends_SteamFriends011_GetLargeFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetLargeFriendAvatar((CSteamID)steamIDFriend);
+}
+
+bool cppISteamFriends_SteamFriends011_RequestUserInformation(void *linux_side, CSteamID steamIDUser, bool bRequireNameOnly)
+{
+ return ((ISteamFriends*)linux_side)->RequestUserInformation((CSteamID)steamIDUser, (bool)bRequireNameOnly);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends011_RequestClanOfficerList(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->RequestClanOfficerList((CSteamID)steamIDClan);
+}
+
+CSteamID cppISteamFriends_SteamFriends011_GetClanOwner(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanOwner((CSteamID)steamIDClan);
+}
+
+int cppISteamFriends_SteamFriends011_GetClanOfficerCount(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanOfficerCount((CSteamID)steamIDClan);
+}
+
+CSteamID cppISteamFriends_SteamFriends011_GetClanOfficerByIndex(void *linux_side, CSteamID steamIDClan, int iOfficer)
+{
+ return ((ISteamFriends*)linux_side)->GetClanOfficerByIndex((CSteamID)steamIDClan, (int)iOfficer);
+}
+
+uint32 cppISteamFriends_SteamFriends011_GetUserRestrictions(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetUserRestrictions();
+}
+
+bool cppISteamFriends_SteamFriends011_SetRichPresence(void *linux_side, const char * pchKey, const char * pchValue)
+{
+ return ((ISteamFriends*)linux_side)->SetRichPresence((const char *)pchKey, (const char *)pchValue);
+}
+
+void cppISteamFriends_SteamFriends011_ClearRichPresence(void *linux_side)
+{
+ ((ISteamFriends*)linux_side)->ClearRichPresence();
+}
+
+const char * cppISteamFriends_SteamFriends011_GetFriendRichPresence(void *linux_side, CSteamID steamIDFriend, const char * pchKey)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRichPresence((CSteamID)steamIDFriend, (const char *)pchKey);
+}
+
+int cppISteamFriends_SteamFriends011_GetFriendRichPresenceKeyCount(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRichPresenceKeyCount((CSteamID)steamIDFriend);
+}
+
+const char * cppISteamFriends_SteamFriends011_GetFriendRichPresenceKeyByIndex(void *linux_side, CSteamID steamIDFriend, int iKey)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRichPresenceKeyByIndex((CSteamID)steamIDFriend, (int)iKey);
+}
+
+void cppISteamFriends_SteamFriends011_RequestFriendRichPresence(void *linux_side, CSteamID steamIDFriend)
+{
+ ((ISteamFriends*)linux_side)->RequestFriendRichPresence((CSteamID)steamIDFriend);
+}
+
+bool cppISteamFriends_SteamFriends011_InviteUserToGame(void *linux_side, CSteamID steamIDFriend, const char * pchConnectString)
+{
+ return ((ISteamFriends*)linux_side)->InviteUserToGame((CSteamID)steamIDFriend, (const char *)pchConnectString);
+}
+
+int cppISteamFriends_SteamFriends011_GetCoplayFriendCount(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetCoplayFriendCount();
+}
+
+CSteamID cppISteamFriends_SteamFriends011_GetCoplayFriend(void *linux_side, int iCoplayFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetCoplayFriend((int)iCoplayFriend);
+}
+
+int cppISteamFriends_SteamFriends011_GetFriendCoplayTime(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCoplayTime((CSteamID)steamIDFriend);
+}
+
+AppId_t cppISteamFriends_SteamFriends011_GetFriendCoplayGame(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCoplayGame((CSteamID)steamIDFriend);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends011_JoinClanChatRoom(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->JoinClanChatRoom((CSteamID)steamIDClan);
+}
+
+bool cppISteamFriends_SteamFriends011_LeaveClanChatRoom(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->LeaveClanChatRoom((CSteamID)steamIDClan);
+}
+
+int cppISteamFriends_SteamFriends011_GetClanChatMemberCount(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanChatMemberCount((CSteamID)steamIDClan);
+}
+
+CSteamID cppISteamFriends_SteamFriends011_GetChatMemberByIndex(void *linux_side, CSteamID steamIDClan, int iUser)
+{
+ return ((ISteamFriends*)linux_side)->GetChatMemberByIndex((CSteamID)steamIDClan, (int)iUser);
+}
+
+bool cppISteamFriends_SteamFriends011_SendClanChatMessage(void *linux_side, CSteamID steamIDClanChat, const char * pchText)
+{
+ return ((ISteamFriends*)linux_side)->SendClanChatMessage((CSteamID)steamIDClanChat, (const char *)pchText);
+}
+
+int cppISteamFriends_SteamFriends011_GetClanChatMessage(void *linux_side, CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * _a, CSteamID * _b)
+{
+ return ((ISteamFriends*)linux_side)->GetClanChatMessage((CSteamID)steamIDClanChat, (int)iMessage, (void *)prgchText, (int)cchTextMax, (EChatEntryType *)_a, (CSteamID *)_b);
+}
+
+bool cppISteamFriends_SteamFriends011_IsClanChatAdmin(void *linux_side, CSteamID steamIDClanChat, CSteamID steamIDUser)
+{
+ return ((ISteamFriends*)linux_side)->IsClanChatAdmin((CSteamID)steamIDClanChat, (CSteamID)steamIDUser);
+}
+
+bool cppISteamFriends_SteamFriends011_IsClanChatWindowOpenInSteam(void *linux_side, CSteamID steamIDClanChat)
+{
+ return ((ISteamFriends*)linux_side)->IsClanChatWindowOpenInSteam((CSteamID)steamIDClanChat);
+}
+
+bool cppISteamFriends_SteamFriends011_OpenClanChatWindowInSteam(void *linux_side, CSteamID steamIDClanChat)
+{
+ return ((ISteamFriends*)linux_side)->OpenClanChatWindowInSteam((CSteamID)steamIDClanChat);
+}
+
+bool cppISteamFriends_SteamFriends011_CloseClanChatWindowInSteam(void *linux_side, CSteamID steamIDClanChat)
+{
+ return ((ISteamFriends*)linux_side)->CloseClanChatWindowInSteam((CSteamID)steamIDClanChat);
+}
+
+bool cppISteamFriends_SteamFriends011_SetListenForFriendsMessages(void *linux_side, bool bInterceptEnabled)
+{
+ return ((ISteamFriends*)linux_side)->SetListenForFriendsMessages((bool)bInterceptEnabled);
+}
+
+bool cppISteamFriends_SteamFriends011_ReplyToFriendMessage(void *linux_side, CSteamID steamIDFriend, const char * pchMsgToSend)
+{
+ return ((ISteamFriends*)linux_side)->ReplyToFriendMessage((CSteamID)steamIDFriend, (const char *)pchMsgToSend);
+}
+
+int cppISteamFriends_SteamFriends011_GetFriendMessage(void *linux_side, CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendMessage((CSteamID)steamIDFriend, (int)iMessageID, (void *)pvData, (int)cubData, (EChatEntryType *)peChatEntryType);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends011_GetFollowerCount(void *linux_side, CSteamID steamID)
+{
+ return ((ISteamFriends*)linux_side)->GetFollowerCount((CSteamID)steamID);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends011_IsFollowing(void *linux_side, CSteamID steamID)
+{
+ return ((ISteamFriends*)linux_side)->IsFollowing((CSteamID)steamID);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends011_EnumerateFollowingList(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamFriends*)linux_side)->EnumerateFollowingList((uint32)unStartIndex);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends011.h b/lsteamclient/cppISteamFriends_SteamFriends011.h
new file mode 100644
index 00000000..8ddf34e0
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends011.h
@@ -0,0 +1,69 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern const char * cppISteamFriends_SteamFriends011_GetPersonaName(void *);
+extern void cppISteamFriends_SteamFriends011_SetPersonaName(void *, const char *);
+extern EPersonaState cppISteamFriends_SteamFriends011_GetPersonaState(void *);
+extern int cppISteamFriends_SteamFriends011_GetFriendCount(void *, int);
+extern CSteamID cppISteamFriends_SteamFriends011_GetFriendByIndex(void *, int, int);
+extern EFriendRelationship cppISteamFriends_SteamFriends011_GetFriendRelationship(void *, CSteamID);
+extern EPersonaState cppISteamFriends_SteamFriends011_GetFriendPersonaState(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends011_GetFriendPersonaName(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends011_GetFriendGamePlayed(void *, CSteamID, FriendGameInfo_t *);
+extern const char * cppISteamFriends_SteamFriends011_GetFriendPersonaNameHistory(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends011_HasFriend(void *, CSteamID, int);
+extern int cppISteamFriends_SteamFriends011_GetClanCount(void *);
+extern CSteamID cppISteamFriends_SteamFriends011_GetClanByIndex(void *, int);
+extern const char * cppISteamFriends_SteamFriends011_GetClanName(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends011_GetClanTag(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends011_GetClanActivityCounts(void *, CSteamID, int *, int *, int *);
+extern SteamAPICall_t cppISteamFriends_SteamFriends011_DownloadClanActivityCounts(void *, CSteamID *, int);
+extern int cppISteamFriends_SteamFriends011_GetFriendCountFromSource(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends011_GetFriendFromSourceByIndex(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends011_IsUserInSource(void *, CSteamID, CSteamID);
+extern void cppISteamFriends_SteamFriends011_SetInGameVoiceSpeaking(void *, CSteamID, bool);
+extern void cppISteamFriends_SteamFriends011_ActivateGameOverlay(void *, const char *);
+extern void cppISteamFriends_SteamFriends011_ActivateGameOverlayToUser(void *, const char *, CSteamID);
+extern void cppISteamFriends_SteamFriends011_ActivateGameOverlayToWebPage(void *, const char *);
+extern void cppISteamFriends_SteamFriends011_ActivateGameOverlayToStore(void *, AppId_t);
+extern void cppISteamFriends_SteamFriends011_SetPlayedWith(void *, CSteamID);
+extern void cppISteamFriends_SteamFriends011_ActivateGameOverlayInviteDialog(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends011_GetSmallFriendAvatar(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends011_GetMediumFriendAvatar(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends011_GetLargeFriendAvatar(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends011_RequestUserInformation(void *, CSteamID, bool);
+extern SteamAPICall_t cppISteamFriends_SteamFriends011_RequestClanOfficerList(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends011_GetClanOwner(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends011_GetClanOfficerCount(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends011_GetClanOfficerByIndex(void *, CSteamID, int);
+extern uint32 cppISteamFriends_SteamFriends011_GetUserRestrictions(void *);
+extern bool cppISteamFriends_SteamFriends011_SetRichPresence(void *, const char *, const char *);
+extern void cppISteamFriends_SteamFriends011_ClearRichPresence(void *);
+extern const char * cppISteamFriends_SteamFriends011_GetFriendRichPresence(void *, CSteamID, const char *);
+extern int cppISteamFriends_SteamFriends011_GetFriendRichPresenceKeyCount(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends011_GetFriendRichPresenceKeyByIndex(void *, CSteamID, int);
+extern void cppISteamFriends_SteamFriends011_RequestFriendRichPresence(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends011_InviteUserToGame(void *, CSteamID, const char *);
+extern int cppISteamFriends_SteamFriends011_GetCoplayFriendCount(void *);
+extern CSteamID cppISteamFriends_SteamFriends011_GetCoplayFriend(void *, int);
+extern int cppISteamFriends_SteamFriends011_GetFriendCoplayTime(void *, CSteamID);
+extern AppId_t cppISteamFriends_SteamFriends011_GetFriendCoplayGame(void *, CSteamID);
+extern SteamAPICall_t cppISteamFriends_SteamFriends011_JoinClanChatRoom(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends011_LeaveClanChatRoom(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends011_GetClanChatMemberCount(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends011_GetChatMemberByIndex(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends011_SendClanChatMessage(void *, CSteamID, const char *);
+extern int cppISteamFriends_SteamFriends011_GetClanChatMessage(void *, CSteamID, int, void *, int, EChatEntryType *, CSteamID *);
+extern bool cppISteamFriends_SteamFriends011_IsClanChatAdmin(void *, CSteamID, CSteamID);
+extern bool cppISteamFriends_SteamFriends011_IsClanChatWindowOpenInSteam(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends011_OpenClanChatWindowInSteam(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends011_CloseClanChatWindowInSteam(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends011_SetListenForFriendsMessages(void *, bool);
+extern bool cppISteamFriends_SteamFriends011_ReplyToFriendMessage(void *, CSteamID, const char *);
+extern int cppISteamFriends_SteamFriends011_GetFriendMessage(void *, CSteamID, int, void *, int, EChatEntryType *);
+extern SteamAPICall_t cppISteamFriends_SteamFriends011_GetFollowerCount(void *, CSteamID);
+extern SteamAPICall_t cppISteamFriends_SteamFriends011_IsFollowing(void *, CSteamID);
+extern SteamAPICall_t cppISteamFriends_SteamFriends011_EnumerateFollowingList(void *, uint32);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends013.cpp b/lsteamclient/cppISteamFriends_SteamFriends013.cpp
new file mode 100644
index 00000000..96abe70d
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends013.cpp
@@ -0,0 +1,325 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_125/steam_api.h"
+#include "cppISteamFriends_SteamFriends013.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+const char * cppISteamFriends_SteamFriends013_GetPersonaName(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaName();
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends013_SetPersonaName(void *linux_side, const char * pchPersonaName)
+{
+ return ((ISteamFriends*)linux_side)->SetPersonaName((const char *)pchPersonaName);
+}
+
+EPersonaState cppISteamFriends_SteamFriends013_GetPersonaState(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaState();
+}
+
+int cppISteamFriends_SteamFriends013_GetFriendCount(void *linux_side, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCount((int)iFriendFlags);
+}
+
+CSteamID cppISteamFriends_SteamFriends013_GetFriendByIndex(void *linux_side, int iFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendByIndex((int)iFriend, (int)iFriendFlags);
+}
+
+EFriendRelationship cppISteamFriends_SteamFriends013_GetFriendRelationship(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRelationship((CSteamID)steamIDFriend);
+}
+
+EPersonaState cppISteamFriends_SteamFriends013_GetFriendPersonaState(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaState((CSteamID)steamIDFriend);
+}
+
+const char * cppISteamFriends_SteamFriends013_GetFriendPersonaName(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaName((CSteamID)steamIDFriend);
+}
+
+bool cppISteamFriends_SteamFriends013_GetFriendGamePlayed(void *linux_side, CSteamID steamIDFriend, FriendGameInfo_t * pFriendGameInfo)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendGamePlayed((CSteamID)steamIDFriend, (FriendGameInfo_t *)pFriendGameInfo);
+}
+
+const char * cppISteamFriends_SteamFriends013_GetFriendPersonaNameHistory(void *linux_side, CSteamID steamIDFriend, int iPersonaName)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaNameHistory((CSteamID)steamIDFriend, (int)iPersonaName);
+}
+
+bool cppISteamFriends_SteamFriends013_HasFriend(void *linux_side, CSteamID steamIDFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->HasFriend((CSteamID)steamIDFriend, (int)iFriendFlags);
+}
+
+int cppISteamFriends_SteamFriends013_GetClanCount(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetClanCount();
+}
+
+CSteamID cppISteamFriends_SteamFriends013_GetClanByIndex(void *linux_side, int iClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanByIndex((int)iClan);
+}
+
+const char * cppISteamFriends_SteamFriends013_GetClanName(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanName((CSteamID)steamIDClan);
+}
+
+const char * cppISteamFriends_SteamFriends013_GetClanTag(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanTag((CSteamID)steamIDClan);
+}
+
+bool cppISteamFriends_SteamFriends013_GetClanActivityCounts(void *linux_side, CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting)
+{
+ return ((ISteamFriends*)linux_side)->GetClanActivityCounts((CSteamID)steamIDClan, (int *)pnOnline, (int *)pnInGame, (int *)pnChatting);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends013_DownloadClanActivityCounts(void *linux_side, CSteamID * psteamIDClans, int cClansToRequest)
+{
+ return ((ISteamFriends*)linux_side)->DownloadClanActivityCounts((CSteamID *)psteamIDClans, (int)cClansToRequest);
+}
+
+int cppISteamFriends_SteamFriends013_GetFriendCountFromSource(void *linux_side, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCountFromSource((CSteamID)steamIDSource);
+}
+
+CSteamID cppISteamFriends_SteamFriends013_GetFriendFromSourceByIndex(void *linux_side, CSteamID steamIDSource, int iFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendFromSourceByIndex((CSteamID)steamIDSource, (int)iFriend);
+}
+
+bool cppISteamFriends_SteamFriends013_IsUserInSource(void *linux_side, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->IsUserInSource((CSteamID)steamIDUser, (CSteamID)steamIDSource);
+}
+
+void cppISteamFriends_SteamFriends013_SetInGameVoiceSpeaking(void *linux_side, CSteamID steamIDUser, bool bSpeaking)
+{
+ ((ISteamFriends*)linux_side)->SetInGameVoiceSpeaking((CSteamID)steamIDUser, (bool)bSpeaking);
+}
+
+void cppISteamFriends_SteamFriends013_ActivateGameOverlay(void *linux_side, const char * pchDialog)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlay((const char *)pchDialog);
+}
+
+void cppISteamFriends_SteamFriends013_ActivateGameOverlayToUser(void *linux_side, const char * pchDialog, CSteamID steamID)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToUser((const char *)pchDialog, (CSteamID)steamID);
+}
+
+void cppISteamFriends_SteamFriends013_ActivateGameOverlayToWebPage(void *linux_side, const char * pchURL)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToWebPage((const char *)pchURL);
+}
+
+void cppISteamFriends_SteamFriends013_ActivateGameOverlayToStore(void *linux_side, AppId_t nAppID, EOverlayToStoreFlag eFlag)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToStore((AppId_t)nAppID, (EOverlayToStoreFlag)eFlag);
+}
+
+void cppISteamFriends_SteamFriends013_SetPlayedWith(void *linux_side, CSteamID steamIDUserPlayedWith)
+{
+ ((ISteamFriends*)linux_side)->SetPlayedWith((CSteamID)steamIDUserPlayedWith);
+}
+
+void cppISteamFriends_SteamFriends013_ActivateGameOverlayInviteDialog(void *linux_side, CSteamID steamIDLobby)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayInviteDialog((CSteamID)steamIDLobby);
+}
+
+int cppISteamFriends_SteamFriends013_GetSmallFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetSmallFriendAvatar((CSteamID)steamIDFriend);
+}
+
+int cppISteamFriends_SteamFriends013_GetMediumFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetMediumFriendAvatar((CSteamID)steamIDFriend);
+}
+
+int cppISteamFriends_SteamFriends013_GetLargeFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetLargeFriendAvatar((CSteamID)steamIDFriend);
+}
+
+bool cppISteamFriends_SteamFriends013_RequestUserInformation(void *linux_side, CSteamID steamIDUser, bool bRequireNameOnly)
+{
+ return ((ISteamFriends*)linux_side)->RequestUserInformation((CSteamID)steamIDUser, (bool)bRequireNameOnly);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends013_RequestClanOfficerList(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->RequestClanOfficerList((CSteamID)steamIDClan);
+}
+
+CSteamID cppISteamFriends_SteamFriends013_GetClanOwner(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanOwner((CSteamID)steamIDClan);
+}
+
+int cppISteamFriends_SteamFriends013_GetClanOfficerCount(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanOfficerCount((CSteamID)steamIDClan);
+}
+
+CSteamID cppISteamFriends_SteamFriends013_GetClanOfficerByIndex(void *linux_side, CSteamID steamIDClan, int iOfficer)
+{
+ return ((ISteamFriends*)linux_side)->GetClanOfficerByIndex((CSteamID)steamIDClan, (int)iOfficer);
+}
+
+uint32 cppISteamFriends_SteamFriends013_GetUserRestrictions(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetUserRestrictions();
+}
+
+bool cppISteamFriends_SteamFriends013_SetRichPresence(void *linux_side, const char * pchKey, const char * pchValue)
+{
+ return ((ISteamFriends*)linux_side)->SetRichPresence((const char *)pchKey, (const char *)pchValue);
+}
+
+void cppISteamFriends_SteamFriends013_ClearRichPresence(void *linux_side)
+{
+ ((ISteamFriends*)linux_side)->ClearRichPresence();
+}
+
+const char * cppISteamFriends_SteamFriends013_GetFriendRichPresence(void *linux_side, CSteamID steamIDFriend, const char * pchKey)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRichPresence((CSteamID)steamIDFriend, (const char *)pchKey);
+}
+
+int cppISteamFriends_SteamFriends013_GetFriendRichPresenceKeyCount(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRichPresenceKeyCount((CSteamID)steamIDFriend);
+}
+
+const char * cppISteamFriends_SteamFriends013_GetFriendRichPresenceKeyByIndex(void *linux_side, CSteamID steamIDFriend, int iKey)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRichPresenceKeyByIndex((CSteamID)steamIDFriend, (int)iKey);
+}
+
+void cppISteamFriends_SteamFriends013_RequestFriendRichPresence(void *linux_side, CSteamID steamIDFriend)
+{
+ ((ISteamFriends*)linux_side)->RequestFriendRichPresence((CSteamID)steamIDFriend);
+}
+
+bool cppISteamFriends_SteamFriends013_InviteUserToGame(void *linux_side, CSteamID steamIDFriend, const char * pchConnectString)
+{
+ return ((ISteamFriends*)linux_side)->InviteUserToGame((CSteamID)steamIDFriend, (const char *)pchConnectString);
+}
+
+int cppISteamFriends_SteamFriends013_GetCoplayFriendCount(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetCoplayFriendCount();
+}
+
+CSteamID cppISteamFriends_SteamFriends013_GetCoplayFriend(void *linux_side, int iCoplayFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetCoplayFriend((int)iCoplayFriend);
+}
+
+int cppISteamFriends_SteamFriends013_GetFriendCoplayTime(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCoplayTime((CSteamID)steamIDFriend);
+}
+
+AppId_t cppISteamFriends_SteamFriends013_GetFriendCoplayGame(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCoplayGame((CSteamID)steamIDFriend);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends013_JoinClanChatRoom(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->JoinClanChatRoom((CSteamID)steamIDClan);
+}
+
+bool cppISteamFriends_SteamFriends013_LeaveClanChatRoom(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->LeaveClanChatRoom((CSteamID)steamIDClan);
+}
+
+int cppISteamFriends_SteamFriends013_GetClanChatMemberCount(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanChatMemberCount((CSteamID)steamIDClan);
+}
+
+CSteamID cppISteamFriends_SteamFriends013_GetChatMemberByIndex(void *linux_side, CSteamID steamIDClan, int iUser)
+{
+ return ((ISteamFriends*)linux_side)->GetChatMemberByIndex((CSteamID)steamIDClan, (int)iUser);
+}
+
+bool cppISteamFriends_SteamFriends013_SendClanChatMessage(void *linux_side, CSteamID steamIDClanChat, const char * pchText)
+{
+ return ((ISteamFriends*)linux_side)->SendClanChatMessage((CSteamID)steamIDClanChat, (const char *)pchText);
+}
+
+int cppISteamFriends_SteamFriends013_GetClanChatMessage(void *linux_side, CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * _a, CSteamID * _b)
+{
+ return ((ISteamFriends*)linux_side)->GetClanChatMessage((CSteamID)steamIDClanChat, (int)iMessage, (void *)prgchText, (int)cchTextMax, (EChatEntryType *)_a, (CSteamID *)_b);
+}
+
+bool cppISteamFriends_SteamFriends013_IsClanChatAdmin(void *linux_side, CSteamID steamIDClanChat, CSteamID steamIDUser)
+{
+ return ((ISteamFriends*)linux_side)->IsClanChatAdmin((CSteamID)steamIDClanChat, (CSteamID)steamIDUser);
+}
+
+bool cppISteamFriends_SteamFriends013_IsClanChatWindowOpenInSteam(void *linux_side, CSteamID steamIDClanChat)
+{
+ return ((ISteamFriends*)linux_side)->IsClanChatWindowOpenInSteam((CSteamID)steamIDClanChat);
+}
+
+bool cppISteamFriends_SteamFriends013_OpenClanChatWindowInSteam(void *linux_side, CSteamID steamIDClanChat)
+{
+ return ((ISteamFriends*)linux_side)->OpenClanChatWindowInSteam((CSteamID)steamIDClanChat);
+}
+
+bool cppISteamFriends_SteamFriends013_CloseClanChatWindowInSteam(void *linux_side, CSteamID steamIDClanChat)
+{
+ return ((ISteamFriends*)linux_side)->CloseClanChatWindowInSteam((CSteamID)steamIDClanChat);
+}
+
+bool cppISteamFriends_SteamFriends013_SetListenForFriendsMessages(void *linux_side, bool bInterceptEnabled)
+{
+ return ((ISteamFriends*)linux_side)->SetListenForFriendsMessages((bool)bInterceptEnabled);
+}
+
+bool cppISteamFriends_SteamFriends013_ReplyToFriendMessage(void *linux_side, CSteamID steamIDFriend, const char * pchMsgToSend)
+{
+ return ((ISteamFriends*)linux_side)->ReplyToFriendMessage((CSteamID)steamIDFriend, (const char *)pchMsgToSend);
+}
+
+int cppISteamFriends_SteamFriends013_GetFriendMessage(void *linux_side, CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendMessage((CSteamID)steamIDFriend, (int)iMessageID, (void *)pvData, (int)cubData, (EChatEntryType *)peChatEntryType);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends013_GetFollowerCount(void *linux_side, CSteamID steamID)
+{
+ return ((ISteamFriends*)linux_side)->GetFollowerCount((CSteamID)steamID);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends013_IsFollowing(void *linux_side, CSteamID steamID)
+{
+ return ((ISteamFriends*)linux_side)->IsFollowing((CSteamID)steamID);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends013_EnumerateFollowingList(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamFriends*)linux_side)->EnumerateFollowingList((uint32)unStartIndex);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends013.h b/lsteamclient/cppISteamFriends_SteamFriends013.h
new file mode 100644
index 00000000..3b27b229
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends013.h
@@ -0,0 +1,69 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern const char * cppISteamFriends_SteamFriends013_GetPersonaName(void *);
+extern SteamAPICall_t cppISteamFriends_SteamFriends013_SetPersonaName(void *, const char *);
+extern EPersonaState cppISteamFriends_SteamFriends013_GetPersonaState(void *);
+extern int cppISteamFriends_SteamFriends013_GetFriendCount(void *, int);
+extern CSteamID cppISteamFriends_SteamFriends013_GetFriendByIndex(void *, int, int);
+extern EFriendRelationship cppISteamFriends_SteamFriends013_GetFriendRelationship(void *, CSteamID);
+extern EPersonaState cppISteamFriends_SteamFriends013_GetFriendPersonaState(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends013_GetFriendPersonaName(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends013_GetFriendGamePlayed(void *, CSteamID, FriendGameInfo_t *);
+extern const char * cppISteamFriends_SteamFriends013_GetFriendPersonaNameHistory(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends013_HasFriend(void *, CSteamID, int);
+extern int cppISteamFriends_SteamFriends013_GetClanCount(void *);
+extern CSteamID cppISteamFriends_SteamFriends013_GetClanByIndex(void *, int);
+extern const char * cppISteamFriends_SteamFriends013_GetClanName(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends013_GetClanTag(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends013_GetClanActivityCounts(void *, CSteamID, int *, int *, int *);
+extern SteamAPICall_t cppISteamFriends_SteamFriends013_DownloadClanActivityCounts(void *, CSteamID *, int);
+extern int cppISteamFriends_SteamFriends013_GetFriendCountFromSource(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends013_GetFriendFromSourceByIndex(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends013_IsUserInSource(void *, CSteamID, CSteamID);
+extern void cppISteamFriends_SteamFriends013_SetInGameVoiceSpeaking(void *, CSteamID, bool);
+extern void cppISteamFriends_SteamFriends013_ActivateGameOverlay(void *, const char *);
+extern void cppISteamFriends_SteamFriends013_ActivateGameOverlayToUser(void *, const char *, CSteamID);
+extern void cppISteamFriends_SteamFriends013_ActivateGameOverlayToWebPage(void *, const char *);
+extern void cppISteamFriends_SteamFriends013_ActivateGameOverlayToStore(void *, AppId_t, EOverlayToStoreFlag);
+extern void cppISteamFriends_SteamFriends013_SetPlayedWith(void *, CSteamID);
+extern void cppISteamFriends_SteamFriends013_ActivateGameOverlayInviteDialog(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends013_GetSmallFriendAvatar(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends013_GetMediumFriendAvatar(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends013_GetLargeFriendAvatar(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends013_RequestUserInformation(void *, CSteamID, bool);
+extern SteamAPICall_t cppISteamFriends_SteamFriends013_RequestClanOfficerList(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends013_GetClanOwner(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends013_GetClanOfficerCount(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends013_GetClanOfficerByIndex(void *, CSteamID, int);
+extern uint32 cppISteamFriends_SteamFriends013_GetUserRestrictions(void *);
+extern bool cppISteamFriends_SteamFriends013_SetRichPresence(void *, const char *, const char *);
+extern void cppISteamFriends_SteamFriends013_ClearRichPresence(void *);
+extern const char * cppISteamFriends_SteamFriends013_GetFriendRichPresence(void *, CSteamID, const char *);
+extern int cppISteamFriends_SteamFriends013_GetFriendRichPresenceKeyCount(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends013_GetFriendRichPresenceKeyByIndex(void *, CSteamID, int);
+extern void cppISteamFriends_SteamFriends013_RequestFriendRichPresence(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends013_InviteUserToGame(void *, CSteamID, const char *);
+extern int cppISteamFriends_SteamFriends013_GetCoplayFriendCount(void *);
+extern CSteamID cppISteamFriends_SteamFriends013_GetCoplayFriend(void *, int);
+extern int cppISteamFriends_SteamFriends013_GetFriendCoplayTime(void *, CSteamID);
+extern AppId_t cppISteamFriends_SteamFriends013_GetFriendCoplayGame(void *, CSteamID);
+extern SteamAPICall_t cppISteamFriends_SteamFriends013_JoinClanChatRoom(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends013_LeaveClanChatRoom(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends013_GetClanChatMemberCount(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends013_GetChatMemberByIndex(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends013_SendClanChatMessage(void *, CSteamID, const char *);
+extern int cppISteamFriends_SteamFriends013_GetClanChatMessage(void *, CSteamID, int, void *, int, EChatEntryType *, CSteamID *);
+extern bool cppISteamFriends_SteamFriends013_IsClanChatAdmin(void *, CSteamID, CSteamID);
+extern bool cppISteamFriends_SteamFriends013_IsClanChatWindowOpenInSteam(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends013_OpenClanChatWindowInSteam(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends013_CloseClanChatWindowInSteam(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends013_SetListenForFriendsMessages(void *, bool);
+extern bool cppISteamFriends_SteamFriends013_ReplyToFriendMessage(void *, CSteamID, const char *);
+extern int cppISteamFriends_SteamFriends013_GetFriendMessage(void *, CSteamID, int, void *, int, EChatEntryType *);
+extern SteamAPICall_t cppISteamFriends_SteamFriends013_GetFollowerCount(void *, CSteamID);
+extern SteamAPICall_t cppISteamFriends_SteamFriends013_IsFollowing(void *, CSteamID);
+extern SteamAPICall_t cppISteamFriends_SteamFriends013_EnumerateFollowingList(void *, uint32);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends014.cpp b/lsteamclient/cppISteamFriends_SteamFriends014.cpp
new file mode 100644
index 00000000..4edce442
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends014.cpp
@@ -0,0 +1,330 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_131/steam_api.h"
+#include "cppISteamFriends_SteamFriends014.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+const char * cppISteamFriends_SteamFriends014_GetPersonaName(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaName();
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends014_SetPersonaName(void *linux_side, const char * pchPersonaName)
+{
+ return ((ISteamFriends*)linux_side)->SetPersonaName((const char *)pchPersonaName);
+}
+
+EPersonaState cppISteamFriends_SteamFriends014_GetPersonaState(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaState();
+}
+
+int cppISteamFriends_SteamFriends014_GetFriendCount(void *linux_side, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCount((int)iFriendFlags);
+}
+
+CSteamID cppISteamFriends_SteamFriends014_GetFriendByIndex(void *linux_side, int iFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendByIndex((int)iFriend, (int)iFriendFlags);
+}
+
+EFriendRelationship cppISteamFriends_SteamFriends014_GetFriendRelationship(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRelationship((CSteamID)steamIDFriend);
+}
+
+EPersonaState cppISteamFriends_SteamFriends014_GetFriendPersonaState(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaState((CSteamID)steamIDFriend);
+}
+
+const char * cppISteamFriends_SteamFriends014_GetFriendPersonaName(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaName((CSteamID)steamIDFriend);
+}
+
+bool cppISteamFriends_SteamFriends014_GetFriendGamePlayed(void *linux_side, CSteamID steamIDFriend, FriendGameInfo_t * pFriendGameInfo)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendGamePlayed((CSteamID)steamIDFriend, (FriendGameInfo_t *)pFriendGameInfo);
+}
+
+const char * cppISteamFriends_SteamFriends014_GetFriendPersonaNameHistory(void *linux_side, CSteamID steamIDFriend, int iPersonaName)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaNameHistory((CSteamID)steamIDFriend, (int)iPersonaName);
+}
+
+const char * cppISteamFriends_SteamFriends014_GetPlayerNickname(void *linux_side, CSteamID steamIDPlayer)
+{
+ return ((ISteamFriends*)linux_side)->GetPlayerNickname((CSteamID)steamIDPlayer);
+}
+
+bool cppISteamFriends_SteamFriends014_HasFriend(void *linux_side, CSteamID steamIDFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->HasFriend((CSteamID)steamIDFriend, (int)iFriendFlags);
+}
+
+int cppISteamFriends_SteamFriends014_GetClanCount(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetClanCount();
+}
+
+CSteamID cppISteamFriends_SteamFriends014_GetClanByIndex(void *linux_side, int iClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanByIndex((int)iClan);
+}
+
+const char * cppISteamFriends_SteamFriends014_GetClanName(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanName((CSteamID)steamIDClan);
+}
+
+const char * cppISteamFriends_SteamFriends014_GetClanTag(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanTag((CSteamID)steamIDClan);
+}
+
+bool cppISteamFriends_SteamFriends014_GetClanActivityCounts(void *linux_side, CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting)
+{
+ return ((ISteamFriends*)linux_side)->GetClanActivityCounts((CSteamID)steamIDClan, (int *)pnOnline, (int *)pnInGame, (int *)pnChatting);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends014_DownloadClanActivityCounts(void *linux_side, CSteamID * psteamIDClans, int cClansToRequest)
+{
+ return ((ISteamFriends*)linux_side)->DownloadClanActivityCounts((CSteamID *)psteamIDClans, (int)cClansToRequest);
+}
+
+int cppISteamFriends_SteamFriends014_GetFriendCountFromSource(void *linux_side, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCountFromSource((CSteamID)steamIDSource);
+}
+
+CSteamID cppISteamFriends_SteamFriends014_GetFriendFromSourceByIndex(void *linux_side, CSteamID steamIDSource, int iFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendFromSourceByIndex((CSteamID)steamIDSource, (int)iFriend);
+}
+
+bool cppISteamFriends_SteamFriends014_IsUserInSource(void *linux_side, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->IsUserInSource((CSteamID)steamIDUser, (CSteamID)steamIDSource);
+}
+
+void cppISteamFriends_SteamFriends014_SetInGameVoiceSpeaking(void *linux_side, CSteamID steamIDUser, bool bSpeaking)
+{
+ ((ISteamFriends*)linux_side)->SetInGameVoiceSpeaking((CSteamID)steamIDUser, (bool)bSpeaking);
+}
+
+void cppISteamFriends_SteamFriends014_ActivateGameOverlay(void *linux_side, const char * pchDialog)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlay((const char *)pchDialog);
+}
+
+void cppISteamFriends_SteamFriends014_ActivateGameOverlayToUser(void *linux_side, const char * pchDialog, CSteamID steamID)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToUser((const char *)pchDialog, (CSteamID)steamID);
+}
+
+void cppISteamFriends_SteamFriends014_ActivateGameOverlayToWebPage(void *linux_side, const char * pchURL)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToWebPage((const char *)pchURL);
+}
+
+void cppISteamFriends_SteamFriends014_ActivateGameOverlayToStore(void *linux_side, AppId_t nAppID, EOverlayToStoreFlag eFlag)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToStore((AppId_t)nAppID, (EOverlayToStoreFlag)eFlag);
+}
+
+void cppISteamFriends_SteamFriends014_SetPlayedWith(void *linux_side, CSteamID steamIDUserPlayedWith)
+{
+ ((ISteamFriends*)linux_side)->SetPlayedWith((CSteamID)steamIDUserPlayedWith);
+}
+
+void cppISteamFriends_SteamFriends014_ActivateGameOverlayInviteDialog(void *linux_side, CSteamID steamIDLobby)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayInviteDialog((CSteamID)steamIDLobby);
+}
+
+int cppISteamFriends_SteamFriends014_GetSmallFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetSmallFriendAvatar((CSteamID)steamIDFriend);
+}
+
+int cppISteamFriends_SteamFriends014_GetMediumFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetMediumFriendAvatar((CSteamID)steamIDFriend);
+}
+
+int cppISteamFriends_SteamFriends014_GetLargeFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetLargeFriendAvatar((CSteamID)steamIDFriend);
+}
+
+bool cppISteamFriends_SteamFriends014_RequestUserInformation(void *linux_side, CSteamID steamIDUser, bool bRequireNameOnly)
+{
+ return ((ISteamFriends*)linux_side)->RequestUserInformation((CSteamID)steamIDUser, (bool)bRequireNameOnly);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends014_RequestClanOfficerList(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->RequestClanOfficerList((CSteamID)steamIDClan);
+}
+
+CSteamID cppISteamFriends_SteamFriends014_GetClanOwner(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanOwner((CSteamID)steamIDClan);
+}
+
+int cppISteamFriends_SteamFriends014_GetClanOfficerCount(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanOfficerCount((CSteamID)steamIDClan);
+}
+
+CSteamID cppISteamFriends_SteamFriends014_GetClanOfficerByIndex(void *linux_side, CSteamID steamIDClan, int iOfficer)
+{
+ return ((ISteamFriends*)linux_side)->GetClanOfficerByIndex((CSteamID)steamIDClan, (int)iOfficer);
+}
+
+uint32 cppISteamFriends_SteamFriends014_GetUserRestrictions(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetUserRestrictions();
+}
+
+bool cppISteamFriends_SteamFriends014_SetRichPresence(void *linux_side, const char * pchKey, const char * pchValue)
+{
+ return ((ISteamFriends*)linux_side)->SetRichPresence((const char *)pchKey, (const char *)pchValue);
+}
+
+void cppISteamFriends_SteamFriends014_ClearRichPresence(void *linux_side)
+{
+ ((ISteamFriends*)linux_side)->ClearRichPresence();
+}
+
+const char * cppISteamFriends_SteamFriends014_GetFriendRichPresence(void *linux_side, CSteamID steamIDFriend, const char * pchKey)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRichPresence((CSteamID)steamIDFriend, (const char *)pchKey);
+}
+
+int cppISteamFriends_SteamFriends014_GetFriendRichPresenceKeyCount(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRichPresenceKeyCount((CSteamID)steamIDFriend);
+}
+
+const char * cppISteamFriends_SteamFriends014_GetFriendRichPresenceKeyByIndex(void *linux_side, CSteamID steamIDFriend, int iKey)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRichPresenceKeyByIndex((CSteamID)steamIDFriend, (int)iKey);
+}
+
+void cppISteamFriends_SteamFriends014_RequestFriendRichPresence(void *linux_side, CSteamID steamIDFriend)
+{
+ ((ISteamFriends*)linux_side)->RequestFriendRichPresence((CSteamID)steamIDFriend);
+}
+
+bool cppISteamFriends_SteamFriends014_InviteUserToGame(void *linux_side, CSteamID steamIDFriend, const char * pchConnectString)
+{
+ return ((ISteamFriends*)linux_side)->InviteUserToGame((CSteamID)steamIDFriend, (const char *)pchConnectString);
+}
+
+int cppISteamFriends_SteamFriends014_GetCoplayFriendCount(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetCoplayFriendCount();
+}
+
+CSteamID cppISteamFriends_SteamFriends014_GetCoplayFriend(void *linux_side, int iCoplayFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetCoplayFriend((int)iCoplayFriend);
+}
+
+int cppISteamFriends_SteamFriends014_GetFriendCoplayTime(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCoplayTime((CSteamID)steamIDFriend);
+}
+
+AppId_t cppISteamFriends_SteamFriends014_GetFriendCoplayGame(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCoplayGame((CSteamID)steamIDFriend);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends014_JoinClanChatRoom(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->JoinClanChatRoom((CSteamID)steamIDClan);
+}
+
+bool cppISteamFriends_SteamFriends014_LeaveClanChatRoom(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->LeaveClanChatRoom((CSteamID)steamIDClan);
+}
+
+int cppISteamFriends_SteamFriends014_GetClanChatMemberCount(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanChatMemberCount((CSteamID)steamIDClan);
+}
+
+CSteamID cppISteamFriends_SteamFriends014_GetChatMemberByIndex(void *linux_side, CSteamID steamIDClan, int iUser)
+{
+ return ((ISteamFriends*)linux_side)->GetChatMemberByIndex((CSteamID)steamIDClan, (int)iUser);
+}
+
+bool cppISteamFriends_SteamFriends014_SendClanChatMessage(void *linux_side, CSteamID steamIDClanChat, const char * pchText)
+{
+ return ((ISteamFriends*)linux_side)->SendClanChatMessage((CSteamID)steamIDClanChat, (const char *)pchText);
+}
+
+int cppISteamFriends_SteamFriends014_GetClanChatMessage(void *linux_side, CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, CSteamID * psteamidChatter)
+{
+ return ((ISteamFriends*)linux_side)->GetClanChatMessage((CSteamID)steamIDClanChat, (int)iMessage, (void *)prgchText, (int)cchTextMax, (EChatEntryType *)peChatEntryType, (CSteamID *)psteamidChatter);
+}
+
+bool cppISteamFriends_SteamFriends014_IsClanChatAdmin(void *linux_side, CSteamID steamIDClanChat, CSteamID steamIDUser)
+{
+ return ((ISteamFriends*)linux_side)->IsClanChatAdmin((CSteamID)steamIDClanChat, (CSteamID)steamIDUser);
+}
+
+bool cppISteamFriends_SteamFriends014_IsClanChatWindowOpenInSteam(void *linux_side, CSteamID steamIDClanChat)
+{
+ return ((ISteamFriends*)linux_side)->IsClanChatWindowOpenInSteam((CSteamID)steamIDClanChat);
+}
+
+bool cppISteamFriends_SteamFriends014_OpenClanChatWindowInSteam(void *linux_side, CSteamID steamIDClanChat)
+{
+ return ((ISteamFriends*)linux_side)->OpenClanChatWindowInSteam((CSteamID)steamIDClanChat);
+}
+
+bool cppISteamFriends_SteamFriends014_CloseClanChatWindowInSteam(void *linux_side, CSteamID steamIDClanChat)
+{
+ return ((ISteamFriends*)linux_side)->CloseClanChatWindowInSteam((CSteamID)steamIDClanChat);
+}
+
+bool cppISteamFriends_SteamFriends014_SetListenForFriendsMessages(void *linux_side, bool bInterceptEnabled)
+{
+ return ((ISteamFriends*)linux_side)->SetListenForFriendsMessages((bool)bInterceptEnabled);
+}
+
+bool cppISteamFriends_SteamFriends014_ReplyToFriendMessage(void *linux_side, CSteamID steamIDFriend, const char * pchMsgToSend)
+{
+ return ((ISteamFriends*)linux_side)->ReplyToFriendMessage((CSteamID)steamIDFriend, (const char *)pchMsgToSend);
+}
+
+int cppISteamFriends_SteamFriends014_GetFriendMessage(void *linux_side, CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendMessage((CSteamID)steamIDFriend, (int)iMessageID, (void *)pvData, (int)cubData, (EChatEntryType *)peChatEntryType);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends014_GetFollowerCount(void *linux_side, CSteamID steamID)
+{
+ return ((ISteamFriends*)linux_side)->GetFollowerCount((CSteamID)steamID);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends014_IsFollowing(void *linux_side, CSteamID steamID)
+{
+ return ((ISteamFriends*)linux_side)->IsFollowing((CSteamID)steamID);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends014_EnumerateFollowingList(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamFriends*)linux_side)->EnumerateFollowingList((uint32)unStartIndex);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends014.h b/lsteamclient/cppISteamFriends_SteamFriends014.h
new file mode 100644
index 00000000..faf6231f
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends014.h
@@ -0,0 +1,70 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern const char * cppISteamFriends_SteamFriends014_GetPersonaName(void *);
+extern SteamAPICall_t cppISteamFriends_SteamFriends014_SetPersonaName(void *, const char *);
+extern EPersonaState cppISteamFriends_SteamFriends014_GetPersonaState(void *);
+extern int cppISteamFriends_SteamFriends014_GetFriendCount(void *, int);
+extern CSteamID cppISteamFriends_SteamFriends014_GetFriendByIndex(void *, int, int);
+extern EFriendRelationship cppISteamFriends_SteamFriends014_GetFriendRelationship(void *, CSteamID);
+extern EPersonaState cppISteamFriends_SteamFriends014_GetFriendPersonaState(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends014_GetFriendPersonaName(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends014_GetFriendGamePlayed(void *, CSteamID, FriendGameInfo_t *);
+extern const char * cppISteamFriends_SteamFriends014_GetFriendPersonaNameHistory(void *, CSteamID, int);
+extern const char * cppISteamFriends_SteamFriends014_GetPlayerNickname(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends014_HasFriend(void *, CSteamID, int);
+extern int cppISteamFriends_SteamFriends014_GetClanCount(void *);
+extern CSteamID cppISteamFriends_SteamFriends014_GetClanByIndex(void *, int);
+extern const char * cppISteamFriends_SteamFriends014_GetClanName(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends014_GetClanTag(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends014_GetClanActivityCounts(void *, CSteamID, int *, int *, int *);
+extern SteamAPICall_t cppISteamFriends_SteamFriends014_DownloadClanActivityCounts(void *, CSteamID *, int);
+extern int cppISteamFriends_SteamFriends014_GetFriendCountFromSource(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends014_GetFriendFromSourceByIndex(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends014_IsUserInSource(void *, CSteamID, CSteamID);
+extern void cppISteamFriends_SteamFriends014_SetInGameVoiceSpeaking(void *, CSteamID, bool);
+extern void cppISteamFriends_SteamFriends014_ActivateGameOverlay(void *, const char *);
+extern void cppISteamFriends_SteamFriends014_ActivateGameOverlayToUser(void *, const char *, CSteamID);
+extern void cppISteamFriends_SteamFriends014_ActivateGameOverlayToWebPage(void *, const char *);
+extern void cppISteamFriends_SteamFriends014_ActivateGameOverlayToStore(void *, AppId_t, EOverlayToStoreFlag);
+extern void cppISteamFriends_SteamFriends014_SetPlayedWith(void *, CSteamID);
+extern void cppISteamFriends_SteamFriends014_ActivateGameOverlayInviteDialog(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends014_GetSmallFriendAvatar(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends014_GetMediumFriendAvatar(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends014_GetLargeFriendAvatar(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends014_RequestUserInformation(void *, CSteamID, bool);
+extern SteamAPICall_t cppISteamFriends_SteamFriends014_RequestClanOfficerList(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends014_GetClanOwner(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends014_GetClanOfficerCount(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends014_GetClanOfficerByIndex(void *, CSteamID, int);
+extern uint32 cppISteamFriends_SteamFriends014_GetUserRestrictions(void *);
+extern bool cppISteamFriends_SteamFriends014_SetRichPresence(void *, const char *, const char *);
+extern void cppISteamFriends_SteamFriends014_ClearRichPresence(void *);
+extern const char * cppISteamFriends_SteamFriends014_GetFriendRichPresence(void *, CSteamID, const char *);
+extern int cppISteamFriends_SteamFriends014_GetFriendRichPresenceKeyCount(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends014_GetFriendRichPresenceKeyByIndex(void *, CSteamID, int);
+extern void cppISteamFriends_SteamFriends014_RequestFriendRichPresence(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends014_InviteUserToGame(void *, CSteamID, const char *);
+extern int cppISteamFriends_SteamFriends014_GetCoplayFriendCount(void *);
+extern CSteamID cppISteamFriends_SteamFriends014_GetCoplayFriend(void *, int);
+extern int cppISteamFriends_SteamFriends014_GetFriendCoplayTime(void *, CSteamID);
+extern AppId_t cppISteamFriends_SteamFriends014_GetFriendCoplayGame(void *, CSteamID);
+extern SteamAPICall_t cppISteamFriends_SteamFriends014_JoinClanChatRoom(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends014_LeaveClanChatRoom(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends014_GetClanChatMemberCount(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends014_GetChatMemberByIndex(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends014_SendClanChatMessage(void *, CSteamID, const char *);
+extern int cppISteamFriends_SteamFriends014_GetClanChatMessage(void *, CSteamID, int, void *, int, EChatEntryType *, CSteamID *);
+extern bool cppISteamFriends_SteamFriends014_IsClanChatAdmin(void *, CSteamID, CSteamID);
+extern bool cppISteamFriends_SteamFriends014_IsClanChatWindowOpenInSteam(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends014_OpenClanChatWindowInSteam(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends014_CloseClanChatWindowInSteam(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends014_SetListenForFriendsMessages(void *, bool);
+extern bool cppISteamFriends_SteamFriends014_ReplyToFriendMessage(void *, CSteamID, const char *);
+extern int cppISteamFriends_SteamFriends014_GetFriendMessage(void *, CSteamID, int, void *, int, EChatEntryType *);
+extern SteamAPICall_t cppISteamFriends_SteamFriends014_GetFollowerCount(void *, CSteamID);
+extern SteamAPICall_t cppISteamFriends_SteamFriends014_IsFollowing(void *, CSteamID);
+extern SteamAPICall_t cppISteamFriends_SteamFriends014_EnumerateFollowingList(void *, uint32);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends015.cpp b/lsteamclient/cppISteamFriends_SteamFriends015.cpp
new file mode 100644
index 00000000..1c3c002e
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends015.cpp
@@ -0,0 +1,370 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamFriends_SteamFriends015.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+const char * cppISteamFriends_SteamFriends015_GetPersonaName(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaName();
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends015_SetPersonaName(void *linux_side, const char * pchPersonaName)
+{
+ return ((ISteamFriends*)linux_side)->SetPersonaName((const char *)pchPersonaName);
+}
+
+EPersonaState cppISteamFriends_SteamFriends015_GetPersonaState(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetPersonaState();
+}
+
+int cppISteamFriends_SteamFriends015_GetFriendCount(void *linux_side, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCount((int)iFriendFlags);
+}
+
+CSteamID cppISteamFriends_SteamFriends015_GetFriendByIndex(void *linux_side, int iFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendByIndex((int)iFriend, (int)iFriendFlags);
+}
+
+EFriendRelationship cppISteamFriends_SteamFriends015_GetFriendRelationship(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRelationship((CSteamID)steamIDFriend);
+}
+
+EPersonaState cppISteamFriends_SteamFriends015_GetFriendPersonaState(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaState((CSteamID)steamIDFriend);
+}
+
+const char * cppISteamFriends_SteamFriends015_GetFriendPersonaName(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaName((CSteamID)steamIDFriend);
+}
+
+bool cppISteamFriends_SteamFriends015_GetFriendGamePlayed(void *linux_side, CSteamID steamIDFriend, FriendGameInfo_t * pFriendGameInfo)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendGamePlayed((CSteamID)steamIDFriend, (FriendGameInfo_t *)pFriendGameInfo);
+}
+
+const char * cppISteamFriends_SteamFriends015_GetFriendPersonaNameHistory(void *linux_side, CSteamID steamIDFriend, int iPersonaName)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendPersonaNameHistory((CSteamID)steamIDFriend, (int)iPersonaName);
+}
+
+int cppISteamFriends_SteamFriends015_GetFriendSteamLevel(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendSteamLevel((CSteamID)steamIDFriend);
+}
+
+const char * cppISteamFriends_SteamFriends015_GetPlayerNickname(void *linux_side, CSteamID steamIDPlayer)
+{
+ return ((ISteamFriends*)linux_side)->GetPlayerNickname((CSteamID)steamIDPlayer);
+}
+
+int cppISteamFriends_SteamFriends015_GetFriendsGroupCount(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendsGroupCount();
+}
+
+FriendsGroupID_t cppISteamFriends_SteamFriends015_GetFriendsGroupIDByIndex(void *linux_side, int iFG)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendsGroupIDByIndex((int)iFG);
+}
+
+const char * cppISteamFriends_SteamFriends015_GetFriendsGroupName(void *linux_side, FriendsGroupID_t friendsGroupID)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendsGroupName((FriendsGroupID_t)friendsGroupID);
+}
+
+int cppISteamFriends_SteamFriends015_GetFriendsGroupMembersCount(void *linux_side, FriendsGroupID_t friendsGroupID)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendsGroupMembersCount((FriendsGroupID_t)friendsGroupID);
+}
+
+void cppISteamFriends_SteamFriends015_GetFriendsGroupMembersList(void *linux_side, FriendsGroupID_t friendsGroupID, CSteamID * pOutSteamIDMembers, int nMembersCount)
+{
+ ((ISteamFriends*)linux_side)->GetFriendsGroupMembersList((FriendsGroupID_t)friendsGroupID, (CSteamID *)pOutSteamIDMembers, (int)nMembersCount);
+}
+
+bool cppISteamFriends_SteamFriends015_HasFriend(void *linux_side, CSteamID steamIDFriend, int iFriendFlags)
+{
+ return ((ISteamFriends*)linux_side)->HasFriend((CSteamID)steamIDFriend, (int)iFriendFlags);
+}
+
+int cppISteamFriends_SteamFriends015_GetClanCount(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetClanCount();
+}
+
+CSteamID cppISteamFriends_SteamFriends015_GetClanByIndex(void *linux_side, int iClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanByIndex((int)iClan);
+}
+
+const char * cppISteamFriends_SteamFriends015_GetClanName(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanName((CSteamID)steamIDClan);
+}
+
+const char * cppISteamFriends_SteamFriends015_GetClanTag(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanTag((CSteamID)steamIDClan);
+}
+
+bool cppISteamFriends_SteamFriends015_GetClanActivityCounts(void *linux_side, CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting)
+{
+ return ((ISteamFriends*)linux_side)->GetClanActivityCounts((CSteamID)steamIDClan, (int *)pnOnline, (int *)pnInGame, (int *)pnChatting);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends015_DownloadClanActivityCounts(void *linux_side, CSteamID * psteamIDClans, int cClansToRequest)
+{
+ return ((ISteamFriends*)linux_side)->DownloadClanActivityCounts((CSteamID *)psteamIDClans, (int)cClansToRequest);
+}
+
+int cppISteamFriends_SteamFriends015_GetFriendCountFromSource(void *linux_side, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCountFromSource((CSteamID)steamIDSource);
+}
+
+CSteamID cppISteamFriends_SteamFriends015_GetFriendFromSourceByIndex(void *linux_side, CSteamID steamIDSource, int iFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendFromSourceByIndex((CSteamID)steamIDSource, (int)iFriend);
+}
+
+bool cppISteamFriends_SteamFriends015_IsUserInSource(void *linux_side, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ return ((ISteamFriends*)linux_side)->IsUserInSource((CSteamID)steamIDUser, (CSteamID)steamIDSource);
+}
+
+void cppISteamFriends_SteamFriends015_SetInGameVoiceSpeaking(void *linux_side, CSteamID steamIDUser, bool bSpeaking)
+{
+ ((ISteamFriends*)linux_side)->SetInGameVoiceSpeaking((CSteamID)steamIDUser, (bool)bSpeaking);
+}
+
+void cppISteamFriends_SteamFriends015_ActivateGameOverlay(void *linux_side, const char * pchDialog)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlay((const char *)pchDialog);
+}
+
+void cppISteamFriends_SteamFriends015_ActivateGameOverlayToUser(void *linux_side, const char * pchDialog, CSteamID steamID)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToUser((const char *)pchDialog, (CSteamID)steamID);
+}
+
+void cppISteamFriends_SteamFriends015_ActivateGameOverlayToWebPage(void *linux_side, const char * pchURL)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToWebPage((const char *)pchURL);
+}
+
+void cppISteamFriends_SteamFriends015_ActivateGameOverlayToStore(void *linux_side, AppId_t nAppID, EOverlayToStoreFlag eFlag)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayToStore((AppId_t)nAppID, (EOverlayToStoreFlag)eFlag);
+}
+
+void cppISteamFriends_SteamFriends015_SetPlayedWith(void *linux_side, CSteamID steamIDUserPlayedWith)
+{
+ ((ISteamFriends*)linux_side)->SetPlayedWith((CSteamID)steamIDUserPlayedWith);
+}
+
+void cppISteamFriends_SteamFriends015_ActivateGameOverlayInviteDialog(void *linux_side, CSteamID steamIDLobby)
+{
+ ((ISteamFriends*)linux_side)->ActivateGameOverlayInviteDialog((CSteamID)steamIDLobby);
+}
+
+int cppISteamFriends_SteamFriends015_GetSmallFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetSmallFriendAvatar((CSteamID)steamIDFriend);
+}
+
+int cppISteamFriends_SteamFriends015_GetMediumFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetMediumFriendAvatar((CSteamID)steamIDFriend);
+}
+
+int cppISteamFriends_SteamFriends015_GetLargeFriendAvatar(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetLargeFriendAvatar((CSteamID)steamIDFriend);
+}
+
+bool cppISteamFriends_SteamFriends015_RequestUserInformation(void *linux_side, CSteamID steamIDUser, bool bRequireNameOnly)
+{
+ return ((ISteamFriends*)linux_side)->RequestUserInformation((CSteamID)steamIDUser, (bool)bRequireNameOnly);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends015_RequestClanOfficerList(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->RequestClanOfficerList((CSteamID)steamIDClan);
+}
+
+CSteamID cppISteamFriends_SteamFriends015_GetClanOwner(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanOwner((CSteamID)steamIDClan);
+}
+
+int cppISteamFriends_SteamFriends015_GetClanOfficerCount(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanOfficerCount((CSteamID)steamIDClan);
+}
+
+CSteamID cppISteamFriends_SteamFriends015_GetClanOfficerByIndex(void *linux_side, CSteamID steamIDClan, int iOfficer)
+{
+ return ((ISteamFriends*)linux_side)->GetClanOfficerByIndex((CSteamID)steamIDClan, (int)iOfficer);
+}
+
+uint32 cppISteamFriends_SteamFriends015_GetUserRestrictions(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetUserRestrictions();
+}
+
+bool cppISteamFriends_SteamFriends015_SetRichPresence(void *linux_side, const char * pchKey, const char * pchValue)
+{
+ return ((ISteamFriends*)linux_side)->SetRichPresence((const char *)pchKey, (const char *)pchValue);
+}
+
+void cppISteamFriends_SteamFriends015_ClearRichPresence(void *linux_side)
+{
+ ((ISteamFriends*)linux_side)->ClearRichPresence();
+}
+
+const char * cppISteamFriends_SteamFriends015_GetFriendRichPresence(void *linux_side, CSteamID steamIDFriend, const char * pchKey)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRichPresence((CSteamID)steamIDFriend, (const char *)pchKey);
+}
+
+int cppISteamFriends_SteamFriends015_GetFriendRichPresenceKeyCount(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRichPresenceKeyCount((CSteamID)steamIDFriend);
+}
+
+const char * cppISteamFriends_SteamFriends015_GetFriendRichPresenceKeyByIndex(void *linux_side, CSteamID steamIDFriend, int iKey)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendRichPresenceKeyByIndex((CSteamID)steamIDFriend, (int)iKey);
+}
+
+void cppISteamFriends_SteamFriends015_RequestFriendRichPresence(void *linux_side, CSteamID steamIDFriend)
+{
+ ((ISteamFriends*)linux_side)->RequestFriendRichPresence((CSteamID)steamIDFriend);
+}
+
+bool cppISteamFriends_SteamFriends015_InviteUserToGame(void *linux_side, CSteamID steamIDFriend, const char * pchConnectString)
+{
+ return ((ISteamFriends*)linux_side)->InviteUserToGame((CSteamID)steamIDFriend, (const char *)pchConnectString);
+}
+
+int cppISteamFriends_SteamFriends015_GetCoplayFriendCount(void *linux_side)
+{
+ return ((ISteamFriends*)linux_side)->GetCoplayFriendCount();
+}
+
+CSteamID cppISteamFriends_SteamFriends015_GetCoplayFriend(void *linux_side, int iCoplayFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetCoplayFriend((int)iCoplayFriend);
+}
+
+int cppISteamFriends_SteamFriends015_GetFriendCoplayTime(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCoplayTime((CSteamID)steamIDFriend);
+}
+
+AppId_t cppISteamFriends_SteamFriends015_GetFriendCoplayGame(void *linux_side, CSteamID steamIDFriend)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendCoplayGame((CSteamID)steamIDFriend);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends015_JoinClanChatRoom(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->JoinClanChatRoom((CSteamID)steamIDClan);
+}
+
+bool cppISteamFriends_SteamFriends015_LeaveClanChatRoom(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->LeaveClanChatRoom((CSteamID)steamIDClan);
+}
+
+int cppISteamFriends_SteamFriends015_GetClanChatMemberCount(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->GetClanChatMemberCount((CSteamID)steamIDClan);
+}
+
+CSteamID cppISteamFriends_SteamFriends015_GetChatMemberByIndex(void *linux_side, CSteamID steamIDClan, int iUser)
+{
+ return ((ISteamFriends*)linux_side)->GetChatMemberByIndex((CSteamID)steamIDClan, (int)iUser);
+}
+
+bool cppISteamFriends_SteamFriends015_SendClanChatMessage(void *linux_side, CSteamID steamIDClanChat, const char * pchText)
+{
+ return ((ISteamFriends*)linux_side)->SendClanChatMessage((CSteamID)steamIDClanChat, (const char *)pchText);
+}
+
+int cppISteamFriends_SteamFriends015_GetClanChatMessage(void *linux_side, CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, CSteamID * psteamidChatter)
+{
+ return ((ISteamFriends*)linux_side)->GetClanChatMessage((CSteamID)steamIDClanChat, (int)iMessage, (void *)prgchText, (int)cchTextMax, (EChatEntryType *)peChatEntryType, (CSteamID *)psteamidChatter);
+}
+
+bool cppISteamFriends_SteamFriends015_IsClanChatAdmin(void *linux_side, CSteamID steamIDClanChat, CSteamID steamIDUser)
+{
+ return ((ISteamFriends*)linux_side)->IsClanChatAdmin((CSteamID)steamIDClanChat, (CSteamID)steamIDUser);
+}
+
+bool cppISteamFriends_SteamFriends015_IsClanChatWindowOpenInSteam(void *linux_side, CSteamID steamIDClanChat)
+{
+ return ((ISteamFriends*)linux_side)->IsClanChatWindowOpenInSteam((CSteamID)steamIDClanChat);
+}
+
+bool cppISteamFriends_SteamFriends015_OpenClanChatWindowInSteam(void *linux_side, CSteamID steamIDClanChat)
+{
+ return ((ISteamFriends*)linux_side)->OpenClanChatWindowInSteam((CSteamID)steamIDClanChat);
+}
+
+bool cppISteamFriends_SteamFriends015_CloseClanChatWindowInSteam(void *linux_side, CSteamID steamIDClanChat)
+{
+ return ((ISteamFriends*)linux_side)->CloseClanChatWindowInSteam((CSteamID)steamIDClanChat);
+}
+
+bool cppISteamFriends_SteamFriends015_SetListenForFriendsMessages(void *linux_side, bool bInterceptEnabled)
+{
+ return ((ISteamFriends*)linux_side)->SetListenForFriendsMessages((bool)bInterceptEnabled);
+}
+
+bool cppISteamFriends_SteamFriends015_ReplyToFriendMessage(void *linux_side, CSteamID steamIDFriend, const char * pchMsgToSend)
+{
+ return ((ISteamFriends*)linux_side)->ReplyToFriendMessage((CSteamID)steamIDFriend, (const char *)pchMsgToSend);
+}
+
+int cppISteamFriends_SteamFriends015_GetFriendMessage(void *linux_side, CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ return ((ISteamFriends*)linux_side)->GetFriendMessage((CSteamID)steamIDFriend, (int)iMessageID, (void *)pvData, (int)cubData, (EChatEntryType *)peChatEntryType);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends015_GetFollowerCount(void *linux_side, CSteamID steamID)
+{
+ return ((ISteamFriends*)linux_side)->GetFollowerCount((CSteamID)steamID);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends015_IsFollowing(void *linux_side, CSteamID steamID)
+{
+ return ((ISteamFriends*)linux_side)->IsFollowing((CSteamID)steamID);
+}
+
+SteamAPICall_t cppISteamFriends_SteamFriends015_EnumerateFollowingList(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamFriends*)linux_side)->EnumerateFollowingList((uint32)unStartIndex);
+}
+
+bool cppISteamFriends_SteamFriends015_IsClanPublic(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->IsClanPublic((CSteamID)steamIDClan);
+}
+
+bool cppISteamFriends_SteamFriends015_IsClanOfficialGameGroup(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamFriends*)linux_side)->IsClanOfficialGameGroup((CSteamID)steamIDClan);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamFriends_SteamFriends015.h b/lsteamclient/cppISteamFriends_SteamFriends015.h
new file mode 100644
index 00000000..f66efdea
--- /dev/null
+++ b/lsteamclient/cppISteamFriends_SteamFriends015.h
@@ -0,0 +1,78 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern const char * cppISteamFriends_SteamFriends015_GetPersonaName(void *);
+extern SteamAPICall_t cppISteamFriends_SteamFriends015_SetPersonaName(void *, const char *);
+extern EPersonaState cppISteamFriends_SteamFriends015_GetPersonaState(void *);
+extern int cppISteamFriends_SteamFriends015_GetFriendCount(void *, int);
+extern CSteamID cppISteamFriends_SteamFriends015_GetFriendByIndex(void *, int, int);
+extern EFriendRelationship cppISteamFriends_SteamFriends015_GetFriendRelationship(void *, CSteamID);
+extern EPersonaState cppISteamFriends_SteamFriends015_GetFriendPersonaState(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends015_GetFriendPersonaName(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends015_GetFriendGamePlayed(void *, CSteamID, FriendGameInfo_t *);
+extern const char * cppISteamFriends_SteamFriends015_GetFriendPersonaNameHistory(void *, CSteamID, int);
+extern int cppISteamFriends_SteamFriends015_GetFriendSteamLevel(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends015_GetPlayerNickname(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends015_GetFriendsGroupCount(void *);
+extern FriendsGroupID_t cppISteamFriends_SteamFriends015_GetFriendsGroupIDByIndex(void *, int);
+extern const char * cppISteamFriends_SteamFriends015_GetFriendsGroupName(void *, FriendsGroupID_t);
+extern int cppISteamFriends_SteamFriends015_GetFriendsGroupMembersCount(void *, FriendsGroupID_t);
+extern void cppISteamFriends_SteamFriends015_GetFriendsGroupMembersList(void *, FriendsGroupID_t, CSteamID *, int);
+extern bool cppISteamFriends_SteamFriends015_HasFriend(void *, CSteamID, int);
+extern int cppISteamFriends_SteamFriends015_GetClanCount(void *);
+extern CSteamID cppISteamFriends_SteamFriends015_GetClanByIndex(void *, int);
+extern const char * cppISteamFriends_SteamFriends015_GetClanName(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends015_GetClanTag(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends015_GetClanActivityCounts(void *, CSteamID, int *, int *, int *);
+extern SteamAPICall_t cppISteamFriends_SteamFriends015_DownloadClanActivityCounts(void *, CSteamID *, int);
+extern int cppISteamFriends_SteamFriends015_GetFriendCountFromSource(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends015_GetFriendFromSourceByIndex(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends015_IsUserInSource(void *, CSteamID, CSteamID);
+extern void cppISteamFriends_SteamFriends015_SetInGameVoiceSpeaking(void *, CSteamID, bool);
+extern void cppISteamFriends_SteamFriends015_ActivateGameOverlay(void *, const char *);
+extern void cppISteamFriends_SteamFriends015_ActivateGameOverlayToUser(void *, const char *, CSteamID);
+extern void cppISteamFriends_SteamFriends015_ActivateGameOverlayToWebPage(void *, const char *);
+extern void cppISteamFriends_SteamFriends015_ActivateGameOverlayToStore(void *, AppId_t, EOverlayToStoreFlag);
+extern void cppISteamFriends_SteamFriends015_SetPlayedWith(void *, CSteamID);
+extern void cppISteamFriends_SteamFriends015_ActivateGameOverlayInviteDialog(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends015_GetSmallFriendAvatar(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends015_GetMediumFriendAvatar(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends015_GetLargeFriendAvatar(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends015_RequestUserInformation(void *, CSteamID, bool);
+extern SteamAPICall_t cppISteamFriends_SteamFriends015_RequestClanOfficerList(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends015_GetClanOwner(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends015_GetClanOfficerCount(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends015_GetClanOfficerByIndex(void *, CSteamID, int);
+extern uint32 cppISteamFriends_SteamFriends015_GetUserRestrictions(void *);
+extern bool cppISteamFriends_SteamFriends015_SetRichPresence(void *, const char *, const char *);
+extern void cppISteamFriends_SteamFriends015_ClearRichPresence(void *);
+extern const char * cppISteamFriends_SteamFriends015_GetFriendRichPresence(void *, CSteamID, const char *);
+extern int cppISteamFriends_SteamFriends015_GetFriendRichPresenceKeyCount(void *, CSteamID);
+extern const char * cppISteamFriends_SteamFriends015_GetFriendRichPresenceKeyByIndex(void *, CSteamID, int);
+extern void cppISteamFriends_SteamFriends015_RequestFriendRichPresence(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends015_InviteUserToGame(void *, CSteamID, const char *);
+extern int cppISteamFriends_SteamFriends015_GetCoplayFriendCount(void *);
+extern CSteamID cppISteamFriends_SteamFriends015_GetCoplayFriend(void *, int);
+extern int cppISteamFriends_SteamFriends015_GetFriendCoplayTime(void *, CSteamID);
+extern AppId_t cppISteamFriends_SteamFriends015_GetFriendCoplayGame(void *, CSteamID);
+extern SteamAPICall_t cppISteamFriends_SteamFriends015_JoinClanChatRoom(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends015_LeaveClanChatRoom(void *, CSteamID);
+extern int cppISteamFriends_SteamFriends015_GetClanChatMemberCount(void *, CSteamID);
+extern CSteamID cppISteamFriends_SteamFriends015_GetChatMemberByIndex(void *, CSteamID, int);
+extern bool cppISteamFriends_SteamFriends015_SendClanChatMessage(void *, CSteamID, const char *);
+extern int cppISteamFriends_SteamFriends015_GetClanChatMessage(void *, CSteamID, int, void *, int, EChatEntryType *, CSteamID *);
+extern bool cppISteamFriends_SteamFriends015_IsClanChatAdmin(void *, CSteamID, CSteamID);
+extern bool cppISteamFriends_SteamFriends015_IsClanChatWindowOpenInSteam(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends015_OpenClanChatWindowInSteam(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends015_CloseClanChatWindowInSteam(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends015_SetListenForFriendsMessages(void *, bool);
+extern bool cppISteamFriends_SteamFriends015_ReplyToFriendMessage(void *, CSteamID, const char *);
+extern int cppISteamFriends_SteamFriends015_GetFriendMessage(void *, CSteamID, int, void *, int, EChatEntryType *);
+extern SteamAPICall_t cppISteamFriends_SteamFriends015_GetFollowerCount(void *, CSteamID);
+extern SteamAPICall_t cppISteamFriends_SteamFriends015_IsFollowing(void *, CSteamID);
+extern SteamAPICall_t cppISteamFriends_SteamFriends015_EnumerateFollowingList(void *, uint32);
+extern bool cppISteamFriends_SteamFriends015_IsClanPublic(void *, CSteamID);
+extern bool cppISteamFriends_SteamFriends015_IsClanOfficialGameGroup(void *, CSteamID);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamGameCoordinator_SteamGameCoordinator001.cpp b/lsteamclient/cppISteamGameCoordinator_SteamGameCoordinator001.cpp
new file mode 100644
index 00000000..3e94a384
--- /dev/null
+++ b/lsteamclient/cppISteamGameCoordinator_SteamGameCoordinator001.cpp
@@ -0,0 +1,26 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "steamworks_sdk_142/isteamgamecoordinator.h"
+#include "cppISteamGameCoordinator_SteamGameCoordinator001.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+EGCResults cppISteamGameCoordinator_SteamGameCoordinator001_SendMessage(void *linux_side, uint32 unMsgType, const void * pubData, uint32 cubData)
+{
+ return ((ISteamGameCoordinator*)linux_side)->SendMessage((uint32)unMsgType, (const void *)pubData, (uint32)cubData);
+}
+
+bool cppISteamGameCoordinator_SteamGameCoordinator001_IsMessageAvailable(void *linux_side, uint32 * pcubMsgSize)
+{
+ return ((ISteamGameCoordinator*)linux_side)->IsMessageAvailable((uint32 *)pcubMsgSize);
+}
+
+EGCResults cppISteamGameCoordinator_SteamGameCoordinator001_RetrieveMessage(void *linux_side, uint32 * punMsgType, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize)
+{
+ return ((ISteamGameCoordinator*)linux_side)->RetrieveMessage((uint32 *)punMsgType, (void *)pubDest, (uint32)cubDest, (uint32 *)pcubMsgSize);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamGameCoordinator_SteamGameCoordinator001.h b/lsteamclient/cppISteamGameCoordinator_SteamGameCoordinator001.h
new file mode 100644
index 00000000..abb692d8
--- /dev/null
+++ b/lsteamclient/cppISteamGameCoordinator_SteamGameCoordinator001.h
@@ -0,0 +1,9 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern EGCResults cppISteamGameCoordinator_SteamGameCoordinator001_SendMessage(void *, uint32, const void *, uint32);
+extern bool cppISteamGameCoordinator_SteamGameCoordinator001_IsMessageAvailable(void *, uint32 *);
+extern EGCResults cppISteamGameCoordinator_SteamGameCoordinator001_RetrieveMessage(void *, uint32 *, void *, uint32, uint32 *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamGameServerStats_SteamGameServerStats001.cpp b/lsteamclient/cppISteamGameServerStats_SteamGameServerStats001.cpp
new file mode 100644
index 00000000..13d15fb7
--- /dev/null
+++ b/lsteamclient/cppISteamGameServerStats_SteamGameServerStats001.cpp
@@ -0,0 +1,61 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "steamworks_sdk_142/isteamgameserverstats.h"
+#include "cppISteamGameServerStats_SteamGameServerStats001.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+SteamAPICall_t cppISteamGameServerStats_SteamGameServerStats001_RequestUserStats(void *linux_side, CSteamID steamIDUser)
+{
+ return ((ISteamGameServerStats*)linux_side)->RequestUserStats((CSteamID)steamIDUser);
+}
+
+bool cppISteamGameServerStats_SteamGameServerStats001_GetUserStat(void *linux_side, CSteamID steamIDUser, const char * pchName, int32 * pData)
+{
+ return ((ISteamGameServerStats*)linux_side)->GetUserStat((CSteamID)steamIDUser, (const char *)pchName, (int32 *)pData);
+}
+
+bool cppISteamGameServerStats_SteamGameServerStats001_GetUserStat_2(void *linux_side, CSteamID steamIDUser, const char * pchName, float * pData)
+{
+ return ((ISteamGameServerStats*)linux_side)->GetUserStat((CSteamID)steamIDUser, (const char *)pchName, (float *)pData);
+}
+
+bool cppISteamGameServerStats_SteamGameServerStats001_GetUserAchievement(void *linux_side, CSteamID steamIDUser, const char * pchName, bool * pbAchieved)
+{
+ return ((ISteamGameServerStats*)linux_side)->GetUserAchievement((CSteamID)steamIDUser, (const char *)pchName, (bool *)pbAchieved);
+}
+
+bool cppISteamGameServerStats_SteamGameServerStats001_SetUserStat(void *linux_side, CSteamID steamIDUser, const char * pchName, int32 nData)
+{
+ return ((ISteamGameServerStats*)linux_side)->SetUserStat((CSteamID)steamIDUser, (const char *)pchName, (int32)nData);
+}
+
+bool cppISteamGameServerStats_SteamGameServerStats001_SetUserStat_2(void *linux_side, CSteamID steamIDUser, const char * pchName, float fData)
+{
+ return ((ISteamGameServerStats*)linux_side)->SetUserStat((CSteamID)steamIDUser, (const char *)pchName, (float)fData);
+}
+
+bool cppISteamGameServerStats_SteamGameServerStats001_UpdateUserAvgRateStat(void *linux_side, CSteamID steamIDUser, const char * pchName, float flCountThisSession, double dSessionLength)
+{
+ return ((ISteamGameServerStats*)linux_side)->UpdateUserAvgRateStat((CSteamID)steamIDUser, (const char *)pchName, (float)flCountThisSession, (double)dSessionLength);
+}
+
+bool cppISteamGameServerStats_SteamGameServerStats001_SetUserAchievement(void *linux_side, CSteamID steamIDUser, const char * pchName)
+{
+ return ((ISteamGameServerStats*)linux_side)->SetUserAchievement((CSteamID)steamIDUser, (const char *)pchName);
+}
+
+bool cppISteamGameServerStats_SteamGameServerStats001_ClearUserAchievement(void *linux_side, CSteamID steamIDUser, const char * pchName)
+{
+ return ((ISteamGameServerStats*)linux_side)->ClearUserAchievement((CSteamID)steamIDUser, (const char *)pchName);
+}
+
+SteamAPICall_t cppISteamGameServerStats_SteamGameServerStats001_StoreUserStats(void *linux_side, CSteamID steamIDUser)
+{
+ return ((ISteamGameServerStats*)linux_side)->StoreUserStats((CSteamID)steamIDUser);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamGameServerStats_SteamGameServerStats001.h b/lsteamclient/cppISteamGameServerStats_SteamGameServerStats001.h
new file mode 100644
index 00000000..c1eff92f
--- /dev/null
+++ b/lsteamclient/cppISteamGameServerStats_SteamGameServerStats001.h
@@ -0,0 +1,16 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern SteamAPICall_t cppISteamGameServerStats_SteamGameServerStats001_RequestUserStats(void *, CSteamID);
+extern bool cppISteamGameServerStats_SteamGameServerStats001_GetUserStat(void *, CSteamID, const char *, int32 *);
+extern bool cppISteamGameServerStats_SteamGameServerStats001_GetUserStat_2(void *, CSteamID, const char *, float *);
+extern bool cppISteamGameServerStats_SteamGameServerStats001_GetUserAchievement(void *, CSteamID, const char *, bool *);
+extern bool cppISteamGameServerStats_SteamGameServerStats001_SetUserStat(void *, CSteamID, const char *, int32);
+extern bool cppISteamGameServerStats_SteamGameServerStats001_SetUserStat_2(void *, CSteamID, const char *, float);
+extern bool cppISteamGameServerStats_SteamGameServerStats001_UpdateUserAvgRateStat(void *, CSteamID, const char *, float, double);
+extern bool cppISteamGameServerStats_SteamGameServerStats001_SetUserAchievement(void *, CSteamID, const char *);
+extern bool cppISteamGameServerStats_SteamGameServerStats001_ClearUserAchievement(void *, CSteamID, const char *);
+extern SteamAPICall_t cppISteamGameServerStats_SteamGameServerStats001_StoreUserStats(void *, CSteamID);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamGameServer_SteamGameServer004.cpp b/lsteamclient/cppISteamGameServer_SteamGameServer004.cpp
new file mode 100644
index 00000000..fc5d06b9
--- /dev/null
+++ b/lsteamclient/cppISteamGameServer_SteamGameServer004.cpp
@@ -0,0 +1,81 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_100/steam_api.h"
+#include "steamworks_sdk_100/isteamgameserver.h"
+#include "cppISteamGameServer_SteamGameServer004.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+void cppISteamGameServer_SteamGameServer004_LogOn(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->LogOn();
+}
+
+void cppISteamGameServer_SteamGameServer004_LogOff(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->LogOff();
+}
+
+bool cppISteamGameServer_SteamGameServer004_BLoggedOn(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->BLoggedOn();
+}
+
+bool cppISteamGameServer_SteamGameServer004_BSecure(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->BSecure();
+}
+
+CSteamID cppISteamGameServer_SteamGameServer004_GetSteamID(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->GetSteamID();
+}
+
+void cppISteamGameServer_SteamGameServer004_SendUserConnectAndAuthenticate(void *linux_side, CSteamID steamIDUser, uint32 unIPClient, void * pvAuthBlob, uint32 cubAuthBlobSize)
+{
+ ((ISteamGameServer*)linux_side)->SendUserConnectAndAuthenticate((CSteamID)steamIDUser, (uint32)unIPClient, (void *)pvAuthBlob, (uint32)cubAuthBlobSize);
+}
+
+CSteamID cppISteamGameServer_SteamGameServer004_CreateUnauthenticatedUserConnection(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->CreateUnauthenticatedUserConnection();
+}
+
+void cppISteamGameServer_SteamGameServer004_SendUserDisconnect(void *linux_side, CSteamID steamIDUser)
+{
+ ((ISteamGameServer*)linux_side)->SendUserDisconnect((CSteamID)steamIDUser);
+}
+
+bool cppISteamGameServer_SteamGameServer004_BUpdateUserData(void *linux_side, CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore)
+{
+ return ((ISteamGameServer*)linux_side)->BUpdateUserData((CSteamID)steamIDUser, (const char *)pchPlayerName, (uint32)uScore);
+}
+
+bool cppISteamGameServer_SteamGameServer004_BSetServerType(void *linux_side, int32 nGameAppId, uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort, uint16 unSpectatorPort, uint16 usQueryPort, const char * pchGameDir, const char * pchVersion, bool bLANMode)
+{
+ return ((ISteamGameServer*)linux_side)->BSetServerType((int32)nGameAppId, (uint32)unServerFlags, (uint32)unGameIP, (uint16)unGamePort, (uint16)unSpectatorPort, (uint16)usQueryPort, (const char *)pchGameDir, (const char *)pchVersion, (bool)bLANMode);
+}
+
+void cppISteamGameServer_SteamGameServer004_UpdateServerStatus(void *linux_side, int cPlayers, int cPlayersMax, int cBotPlayers, const char * pchServerName, const char * pSpectatorServerName, const char * pchMapName)
+{
+ ((ISteamGameServer*)linux_side)->UpdateServerStatus((int)cPlayers, (int)cPlayersMax, (int)cBotPlayers, (const char *)pchServerName, (const char *)pSpectatorServerName, (const char *)pchMapName);
+}
+
+void cppISteamGameServer_SteamGameServer004_UpdateSpectatorPort(void *linux_side, uint16 unSpectatorPort)
+{
+ ((ISteamGameServer*)linux_side)->UpdateSpectatorPort((uint16)unSpectatorPort);
+}
+
+void cppISteamGameServer_SteamGameServer004_SetGameType(void *linux_side, const char * pchGameType)
+{
+ ((ISteamGameServer*)linux_side)->SetGameType((const char *)pchGameType);
+}
+
+bool cppISteamGameServer_SteamGameServer004_BGetUserAchievementStatus(void *linux_side, CSteamID steamID, const char * pchAchievementName)
+{
+ return ((ISteamGameServer*)linux_side)->BGetUserAchievementStatus((CSteamID)steamID, (const char *)pchAchievementName);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamGameServer_SteamGameServer004.h b/lsteamclient/cppISteamGameServer_SteamGameServer004.h
new file mode 100644
index 00000000..fa20aead
--- /dev/null
+++ b/lsteamclient/cppISteamGameServer_SteamGameServer004.h
@@ -0,0 +1,20 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern void cppISteamGameServer_SteamGameServer004_LogOn(void *);
+extern void cppISteamGameServer_SteamGameServer004_LogOff(void *);
+extern bool cppISteamGameServer_SteamGameServer004_BLoggedOn(void *);
+extern bool cppISteamGameServer_SteamGameServer004_BSecure(void *);
+extern CSteamID cppISteamGameServer_SteamGameServer004_GetSteamID(void *);
+extern void cppISteamGameServer_SteamGameServer004_SendUserConnectAndAuthenticate(void *, CSteamID, uint32, void *, uint32);
+extern CSteamID cppISteamGameServer_SteamGameServer004_CreateUnauthenticatedUserConnection(void *);
+extern void cppISteamGameServer_SteamGameServer004_SendUserDisconnect(void *, CSteamID);
+extern bool cppISteamGameServer_SteamGameServer004_BUpdateUserData(void *, CSteamID, const char *, uint32);
+extern bool cppISteamGameServer_SteamGameServer004_BSetServerType(void *, int32, uint32, uint32, uint16, uint16, uint16, const char *, const char *, bool);
+extern void cppISteamGameServer_SteamGameServer004_UpdateServerStatus(void *, int, int, int, const char *, const char *, const char *);
+extern void cppISteamGameServer_SteamGameServer004_UpdateSpectatorPort(void *, uint16);
+extern void cppISteamGameServer_SteamGameServer004_SetGameType(void *, const char *);
+extern bool cppISteamGameServer_SteamGameServer004_BGetUserAchievementStatus(void *, CSteamID, const char *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamGameServer_SteamGameServer005.cpp b/lsteamclient/cppISteamGameServer_SteamGameServer005.cpp
new file mode 100644
index 00000000..c530d984
--- /dev/null
+++ b/lsteamclient/cppISteamGameServer_SteamGameServer005.cpp
@@ -0,0 +1,81 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_102/steam_api.h"
+#include "steamworks_sdk_102/isteamgameserver.h"
+#include "cppISteamGameServer_SteamGameServer005.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+void cppISteamGameServer_SteamGameServer005_LogOn(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->LogOn();
+}
+
+void cppISteamGameServer_SteamGameServer005_LogOff(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->LogOff();
+}
+
+bool cppISteamGameServer_SteamGameServer005_BLoggedOn(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->BLoggedOn();
+}
+
+bool cppISteamGameServer_SteamGameServer005_BSecure(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->BSecure();
+}
+
+CSteamID cppISteamGameServer_SteamGameServer005_GetSteamID(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->GetSteamID();
+}
+
+bool cppISteamGameServer_SteamGameServer005_SendUserConnectAndAuthenticate(void *linux_side, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, CSteamID * pSteamIDUser)
+{
+ return ((ISteamGameServer*)linux_side)->SendUserConnectAndAuthenticate((uint32)unIPClient, (const void *)pvAuthBlob, (uint32)cubAuthBlobSize, (CSteamID *)pSteamIDUser);
+}
+
+CSteamID cppISteamGameServer_SteamGameServer005_CreateUnauthenticatedUserConnection(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->CreateUnauthenticatedUserConnection();
+}
+
+void cppISteamGameServer_SteamGameServer005_SendUserDisconnect(void *linux_side, CSteamID steamIDUser)
+{
+ ((ISteamGameServer*)linux_side)->SendUserDisconnect((CSteamID)steamIDUser);
+}
+
+bool cppISteamGameServer_SteamGameServer005_BUpdateUserData(void *linux_side, CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore)
+{
+ return ((ISteamGameServer*)linux_side)->BUpdateUserData((CSteamID)steamIDUser, (const char *)pchPlayerName, (uint32)uScore);
+}
+
+bool cppISteamGameServer_SteamGameServer005_BSetServerType(void *linux_side, uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort, uint16 unSpectatorPort, uint16 usQueryPort, const char * pchGameDir, const char * pchVersion, bool bLANMode)
+{
+ return ((ISteamGameServer*)linux_side)->BSetServerType((uint32)unServerFlags, (uint32)unGameIP, (uint16)unGamePort, (uint16)unSpectatorPort, (uint16)usQueryPort, (const char *)pchGameDir, (const char *)pchVersion, (bool)bLANMode);
+}
+
+void cppISteamGameServer_SteamGameServer005_UpdateServerStatus(void *linux_side, int cPlayers, int cPlayersMax, int cBotPlayers, const char * pchServerName, const char * pSpectatorServerName, const char * pchMapName)
+{
+ ((ISteamGameServer*)linux_side)->UpdateServerStatus((int)cPlayers, (int)cPlayersMax, (int)cBotPlayers, (const char *)pchServerName, (const char *)pSpectatorServerName, (const char *)pchMapName);
+}
+
+void cppISteamGameServer_SteamGameServer005_UpdateSpectatorPort(void *linux_side, uint16 unSpectatorPort)
+{
+ ((ISteamGameServer*)linux_side)->UpdateSpectatorPort((uint16)unSpectatorPort);
+}
+
+void cppISteamGameServer_SteamGameServer005_SetGameType(void *linux_side, const char * pchGameType)
+{
+ ((ISteamGameServer*)linux_side)->SetGameType((const char *)pchGameType);
+}
+
+bool cppISteamGameServer_SteamGameServer005_BGetUserAchievementStatus(void *linux_side, CSteamID steamID, const char * pchAchievementName)
+{
+ return ((ISteamGameServer*)linux_side)->BGetUserAchievementStatus((CSteamID)steamID, (const char *)pchAchievementName);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamGameServer_SteamGameServer005.h b/lsteamclient/cppISteamGameServer_SteamGameServer005.h
new file mode 100644
index 00000000..5f9aeeeb
--- /dev/null
+++ b/lsteamclient/cppISteamGameServer_SteamGameServer005.h
@@ -0,0 +1,20 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern void cppISteamGameServer_SteamGameServer005_LogOn(void *);
+extern void cppISteamGameServer_SteamGameServer005_LogOff(void *);
+extern bool cppISteamGameServer_SteamGameServer005_BLoggedOn(void *);
+extern bool cppISteamGameServer_SteamGameServer005_BSecure(void *);
+extern CSteamID cppISteamGameServer_SteamGameServer005_GetSteamID(void *);
+extern bool cppISteamGameServer_SteamGameServer005_SendUserConnectAndAuthenticate(void *, uint32, const void *, uint32, CSteamID *);
+extern CSteamID cppISteamGameServer_SteamGameServer005_CreateUnauthenticatedUserConnection(void *);
+extern void cppISteamGameServer_SteamGameServer005_SendUserDisconnect(void *, CSteamID);
+extern bool cppISteamGameServer_SteamGameServer005_BUpdateUserData(void *, CSteamID, const char *, uint32);
+extern bool cppISteamGameServer_SteamGameServer005_BSetServerType(void *, uint32, uint32, uint16, uint16, uint16, const char *, const char *, bool);
+extern void cppISteamGameServer_SteamGameServer005_UpdateServerStatus(void *, int, int, int, const char *, const char *, const char *);
+extern void cppISteamGameServer_SteamGameServer005_UpdateSpectatorPort(void *, uint16);
+extern void cppISteamGameServer_SteamGameServer005_SetGameType(void *, const char *);
+extern bool cppISteamGameServer_SteamGameServer005_BGetUserAchievementStatus(void *, CSteamID, const char *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamGameServer_SteamGameServer008.cpp b/lsteamclient/cppISteamGameServer_SteamGameServer008.cpp
new file mode 100644
index 00000000..93b14dbf
--- /dev/null
+++ b/lsteamclient/cppISteamGameServer_SteamGameServer008.cpp
@@ -0,0 +1,96 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_104/steam_api.h"
+#include "steamworks_sdk_104/isteamgameserver.h"
+#include "cppISteamGameServer_SteamGameServer008.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+void cppISteamGameServer_SteamGameServer008_LogOn(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->LogOn();
+}
+
+void cppISteamGameServer_SteamGameServer008_LogOff(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->LogOff();
+}
+
+bool cppISteamGameServer_SteamGameServer008_BLoggedOn(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->BLoggedOn();
+}
+
+bool cppISteamGameServer_SteamGameServer008_BSecure(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->BSecure();
+}
+
+CSteamID cppISteamGameServer_SteamGameServer008_GetSteamID(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->GetSteamID();
+}
+
+bool cppISteamGameServer_SteamGameServer008_SendUserConnectAndAuthenticate(void *linux_side, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, CSteamID * pSteamIDUser)
+{
+ return ((ISteamGameServer*)linux_side)->SendUserConnectAndAuthenticate((uint32)unIPClient, (const void *)pvAuthBlob, (uint32)cubAuthBlobSize, (CSteamID *)pSteamIDUser);
+}
+
+CSteamID cppISteamGameServer_SteamGameServer008_CreateUnauthenticatedUserConnection(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->CreateUnauthenticatedUserConnection();
+}
+
+void cppISteamGameServer_SteamGameServer008_SendUserDisconnect(void *linux_side, CSteamID steamIDUser)
+{
+ ((ISteamGameServer*)linux_side)->SendUserDisconnect((CSteamID)steamIDUser);
+}
+
+bool cppISteamGameServer_SteamGameServer008_BUpdateUserData(void *linux_side, CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore)
+{
+ return ((ISteamGameServer*)linux_side)->BUpdateUserData((CSteamID)steamIDUser, (const char *)pchPlayerName, (uint32)uScore);
+}
+
+bool cppISteamGameServer_SteamGameServer008_BSetServerType(void *linux_side, uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort, uint16 unSpectatorPort, uint16 usQueryPort, const char * pchGameDir, const char * pchVersion, bool bLANMode)
+{
+ return ((ISteamGameServer*)linux_side)->BSetServerType((uint32)unServerFlags, (uint32)unGameIP, (uint16)unGamePort, (uint16)unSpectatorPort, (uint16)usQueryPort, (const char *)pchGameDir, (const char *)pchVersion, (bool)bLANMode);
+}
+
+void cppISteamGameServer_SteamGameServer008_UpdateServerStatus(void *linux_side, int cPlayers, int cPlayersMax, int cBotPlayers, const char * pchServerName, const char * pSpectatorServerName, const char * pchMapName)
+{
+ ((ISteamGameServer*)linux_side)->UpdateServerStatus((int)cPlayers, (int)cPlayersMax, (int)cBotPlayers, (const char *)pchServerName, (const char *)pSpectatorServerName, (const char *)pchMapName);
+}
+
+void cppISteamGameServer_SteamGameServer008_UpdateSpectatorPort(void *linux_side, uint16 unSpectatorPort)
+{
+ ((ISteamGameServer*)linux_side)->UpdateSpectatorPort((uint16)unSpectatorPort);
+}
+
+void cppISteamGameServer_SteamGameServer008_SetGameType(void *linux_side, const char * pchGameType)
+{
+ ((ISteamGameServer*)linux_side)->SetGameType((const char *)pchGameType);
+}
+
+bool cppISteamGameServer_SteamGameServer008_BGetUserAchievementStatus(void *linux_side, CSteamID steamID, const char * pchAchievementName)
+{
+ return ((ISteamGameServer*)linux_side)->BGetUserAchievementStatus((CSteamID)steamID, (const char *)pchAchievementName);
+}
+
+void cppISteamGameServer_SteamGameServer008_GetGameplayStats(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->GetGameplayStats();
+}
+
+bool cppISteamGameServer_SteamGameServer008_RequestUserGroupStatus(void *linux_side, CSteamID steamIDUser, CSteamID steamIDGroup)
+{
+ return ((ISteamGameServer*)linux_side)->RequestUserGroupStatus((CSteamID)steamIDUser, (CSteamID)steamIDGroup);
+}
+
+uint32 cppISteamGameServer_SteamGameServer008_GetPublicIP(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->GetPublicIP();
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamGameServer_SteamGameServer008.h b/lsteamclient/cppISteamGameServer_SteamGameServer008.h
new file mode 100644
index 00000000..2094de0e
--- /dev/null
+++ b/lsteamclient/cppISteamGameServer_SteamGameServer008.h
@@ -0,0 +1,23 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern void cppISteamGameServer_SteamGameServer008_LogOn(void *);
+extern void cppISteamGameServer_SteamGameServer008_LogOff(void *);
+extern bool cppISteamGameServer_SteamGameServer008_BLoggedOn(void *);
+extern bool cppISteamGameServer_SteamGameServer008_BSecure(void *);
+extern CSteamID cppISteamGameServer_SteamGameServer008_GetSteamID(void *);
+extern bool cppISteamGameServer_SteamGameServer008_SendUserConnectAndAuthenticate(void *, uint32, const void *, uint32, CSteamID *);
+extern CSteamID cppISteamGameServer_SteamGameServer008_CreateUnauthenticatedUserConnection(void *);
+extern void cppISteamGameServer_SteamGameServer008_SendUserDisconnect(void *, CSteamID);
+extern bool cppISteamGameServer_SteamGameServer008_BUpdateUserData(void *, CSteamID, const char *, uint32);
+extern bool cppISteamGameServer_SteamGameServer008_BSetServerType(void *, uint32, uint32, uint16, uint16, uint16, const char *, const char *, bool);
+extern void cppISteamGameServer_SteamGameServer008_UpdateServerStatus(void *, int, int, int, const char *, const char *, const char *);
+extern void cppISteamGameServer_SteamGameServer008_UpdateSpectatorPort(void *, uint16);
+extern void cppISteamGameServer_SteamGameServer008_SetGameType(void *, const char *);
+extern bool cppISteamGameServer_SteamGameServer008_BGetUserAchievementStatus(void *, CSteamID, const char *);
+extern void cppISteamGameServer_SteamGameServer008_GetGameplayStats(void *);
+extern bool cppISteamGameServer_SteamGameServer008_RequestUserGroupStatus(void *, CSteamID, CSteamID);
+extern uint32 cppISteamGameServer_SteamGameServer008_GetPublicIP(void *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamGameServer_SteamGameServer009.cpp b/lsteamclient/cppISteamGameServer_SteamGameServer009.cpp
new file mode 100644
index 00000000..be5d3e0e
--- /dev/null
+++ b/lsteamclient/cppISteamGameServer_SteamGameServer009.cpp
@@ -0,0 +1,106 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_107/steam_api.h"
+#include "steamworks_sdk_107/isteamgameserver.h"
+#include "cppISteamGameServer_SteamGameServer009.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+void cppISteamGameServer_SteamGameServer009_LogOn(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->LogOn();
+}
+
+void cppISteamGameServer_SteamGameServer009_LogOff(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->LogOff();
+}
+
+bool cppISteamGameServer_SteamGameServer009_BLoggedOn(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->BLoggedOn();
+}
+
+bool cppISteamGameServer_SteamGameServer009_BSecure(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->BSecure();
+}
+
+CSteamID cppISteamGameServer_SteamGameServer009_GetSteamID(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->GetSteamID();
+}
+
+bool cppISteamGameServer_SteamGameServer009_SendUserConnectAndAuthenticate(void *linux_side, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, CSteamID * pSteamIDUser)
+{
+ return ((ISteamGameServer*)linux_side)->SendUserConnectAndAuthenticate((uint32)unIPClient, (const void *)pvAuthBlob, (uint32)cubAuthBlobSize, (CSteamID *)pSteamIDUser);
+}
+
+CSteamID cppISteamGameServer_SteamGameServer009_CreateUnauthenticatedUserConnection(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->CreateUnauthenticatedUserConnection();
+}
+
+void cppISteamGameServer_SteamGameServer009_SendUserDisconnect(void *linux_side, CSteamID steamIDUser)
+{
+ ((ISteamGameServer*)linux_side)->SendUserDisconnect((CSteamID)steamIDUser);
+}
+
+bool cppISteamGameServer_SteamGameServer009_BUpdateUserData(void *linux_side, CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore)
+{
+ return ((ISteamGameServer*)linux_side)->BUpdateUserData((CSteamID)steamIDUser, (const char *)pchPlayerName, (uint32)uScore);
+}
+
+bool cppISteamGameServer_SteamGameServer009_BSetServerType(void *linux_side, uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort, uint16 unSpectatorPort, uint16 usQueryPort, const char * pchGameDir, const char * pchVersion, bool bLANMode)
+{
+ return ((ISteamGameServer*)linux_side)->BSetServerType((uint32)unServerFlags, (uint32)unGameIP, (uint16)unGamePort, (uint16)unSpectatorPort, (uint16)usQueryPort, (const char *)pchGameDir, (const char *)pchVersion, (bool)bLANMode);
+}
+
+void cppISteamGameServer_SteamGameServer009_UpdateServerStatus(void *linux_side, int cPlayers, int cPlayersMax, int cBotPlayers, const char * pchServerName, const char * pSpectatorServerName, const char * pchMapName)
+{
+ ((ISteamGameServer*)linux_side)->UpdateServerStatus((int)cPlayers, (int)cPlayersMax, (int)cBotPlayers, (const char *)pchServerName, (const char *)pSpectatorServerName, (const char *)pchMapName);
+}
+
+void cppISteamGameServer_SteamGameServer009_UpdateSpectatorPort(void *linux_side, uint16 unSpectatorPort)
+{
+ ((ISteamGameServer*)linux_side)->UpdateSpectatorPort((uint16)unSpectatorPort);
+}
+
+void cppISteamGameServer_SteamGameServer009_SetGameType(void *linux_side, const char * pchGameType)
+{
+ ((ISteamGameServer*)linux_side)->SetGameType((const char *)pchGameType);
+}
+
+bool cppISteamGameServer_SteamGameServer009_BGetUserAchievementStatus(void *linux_side, CSteamID steamID, const char * pchAchievementName)
+{
+ return ((ISteamGameServer*)linux_side)->BGetUserAchievementStatus((CSteamID)steamID, (const char *)pchAchievementName);
+}
+
+void cppISteamGameServer_SteamGameServer009_GetGameplayStats(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->GetGameplayStats();
+}
+
+bool cppISteamGameServer_SteamGameServer009_RequestUserGroupStatus(void *linux_side, CSteamID steamIDUser, CSteamID steamIDGroup)
+{
+ return ((ISteamGameServer*)linux_side)->RequestUserGroupStatus((CSteamID)steamIDUser, (CSteamID)steamIDGroup);
+}
+
+uint32 cppISteamGameServer_SteamGameServer009_GetPublicIP(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->GetPublicIP();
+}
+
+void cppISteamGameServer_SteamGameServer009_SetGameData(void *linux_side, const char * pchGameData)
+{
+ ((ISteamGameServer*)linux_side)->SetGameData((const char *)pchGameData);
+}
+
+EUserHasLicenseForAppResult cppISteamGameServer_SteamGameServer009_UserHasLicenseForApp(void *linux_side, CSteamID steamID, AppId_t appID)
+{
+ return ((ISteamGameServer*)linux_side)->UserHasLicenseForApp((CSteamID)steamID, (AppId_t)appID);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamGameServer_SteamGameServer009.h b/lsteamclient/cppISteamGameServer_SteamGameServer009.h
new file mode 100644
index 00000000..1a35d8b0
--- /dev/null
+++ b/lsteamclient/cppISteamGameServer_SteamGameServer009.h
@@ -0,0 +1,25 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern void cppISteamGameServer_SteamGameServer009_LogOn(void *);
+extern void cppISteamGameServer_SteamGameServer009_LogOff(void *);
+extern bool cppISteamGameServer_SteamGameServer009_BLoggedOn(void *);
+extern bool cppISteamGameServer_SteamGameServer009_BSecure(void *);
+extern CSteamID cppISteamGameServer_SteamGameServer009_GetSteamID(void *);
+extern bool cppISteamGameServer_SteamGameServer009_SendUserConnectAndAuthenticate(void *, uint32, const void *, uint32, CSteamID *);
+extern CSteamID cppISteamGameServer_SteamGameServer009_CreateUnauthenticatedUserConnection(void *);
+extern void cppISteamGameServer_SteamGameServer009_SendUserDisconnect(void *, CSteamID);
+extern bool cppISteamGameServer_SteamGameServer009_BUpdateUserData(void *, CSteamID, const char *, uint32);
+extern bool cppISteamGameServer_SteamGameServer009_BSetServerType(void *, uint32, uint32, uint16, uint16, uint16, const char *, const char *, bool);
+extern void cppISteamGameServer_SteamGameServer009_UpdateServerStatus(void *, int, int, int, const char *, const char *, const char *);
+extern void cppISteamGameServer_SteamGameServer009_UpdateSpectatorPort(void *, uint16);
+extern void cppISteamGameServer_SteamGameServer009_SetGameType(void *, const char *);
+extern bool cppISteamGameServer_SteamGameServer009_BGetUserAchievementStatus(void *, CSteamID, const char *);
+extern void cppISteamGameServer_SteamGameServer009_GetGameplayStats(void *);
+extern bool cppISteamGameServer_SteamGameServer009_RequestUserGroupStatus(void *, CSteamID, CSteamID);
+extern uint32 cppISteamGameServer_SteamGameServer009_GetPublicIP(void *);
+extern void cppISteamGameServer_SteamGameServer009_SetGameData(void *, const char *);
+extern EUserHasLicenseForAppResult cppISteamGameServer_SteamGameServer009_UserHasLicenseForApp(void *, CSteamID, AppId_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamGameServer_SteamGameServer010.cpp b/lsteamclient/cppISteamGameServer_SteamGameServer010.cpp
new file mode 100644
index 00000000..458cd8cf
--- /dev/null
+++ b/lsteamclient/cppISteamGameServer_SteamGameServer010.cpp
@@ -0,0 +1,126 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_116/steam_api.h"
+#include "steamworks_sdk_116/isteamgameserver.h"
+#include "cppISteamGameServer_SteamGameServer010.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+void cppISteamGameServer_SteamGameServer010_LogOn(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->LogOn();
+}
+
+void cppISteamGameServer_SteamGameServer010_LogOff(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->LogOff();
+}
+
+bool cppISteamGameServer_SteamGameServer010_BLoggedOn(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->BLoggedOn();
+}
+
+bool cppISteamGameServer_SteamGameServer010_BSecure(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->BSecure();
+}
+
+CSteamID cppISteamGameServer_SteamGameServer010_GetSteamID(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->GetSteamID();
+}
+
+bool cppISteamGameServer_SteamGameServer010_SendUserConnectAndAuthenticate(void *linux_side, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, CSteamID * pSteamIDUser)
+{
+ return ((ISteamGameServer*)linux_side)->SendUserConnectAndAuthenticate((uint32)unIPClient, (const void *)pvAuthBlob, (uint32)cubAuthBlobSize, (CSteamID *)pSteamIDUser);
+}
+
+CSteamID cppISteamGameServer_SteamGameServer010_CreateUnauthenticatedUserConnection(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->CreateUnauthenticatedUserConnection();
+}
+
+void cppISteamGameServer_SteamGameServer010_SendUserDisconnect(void *linux_side, CSteamID steamIDUser)
+{
+ ((ISteamGameServer*)linux_side)->SendUserDisconnect((CSteamID)steamIDUser);
+}
+
+bool cppISteamGameServer_SteamGameServer010_BUpdateUserData(void *linux_side, CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore)
+{
+ return ((ISteamGameServer*)linux_side)->BUpdateUserData((CSteamID)steamIDUser, (const char *)pchPlayerName, (uint32)uScore);
+}
+
+bool cppISteamGameServer_SteamGameServer010_BSetServerType(void *linux_side, uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort, uint16 unSpectatorPort, uint16 usQueryPort, const char * pchGameDir, const char * pchVersion, bool bLANMode)
+{
+ return ((ISteamGameServer*)linux_side)->BSetServerType((uint32)unServerFlags, (uint32)unGameIP, (uint16)unGamePort, (uint16)unSpectatorPort, (uint16)usQueryPort, (const char *)pchGameDir, (const char *)pchVersion, (bool)bLANMode);
+}
+
+void cppISteamGameServer_SteamGameServer010_UpdateServerStatus(void *linux_side, int cPlayers, int cPlayersMax, int cBotPlayers, const char * pchServerName, const char * pSpectatorServerName, const char * pchMapName)
+{
+ ((ISteamGameServer*)linux_side)->UpdateServerStatus((int)cPlayers, (int)cPlayersMax, (int)cBotPlayers, (const char *)pchServerName, (const char *)pSpectatorServerName, (const char *)pchMapName);
+}
+
+void cppISteamGameServer_SteamGameServer010_UpdateSpectatorPort(void *linux_side, uint16 unSpectatorPort)
+{
+ ((ISteamGameServer*)linux_side)->UpdateSpectatorPort((uint16)unSpectatorPort);
+}
+
+void cppISteamGameServer_SteamGameServer010_SetGameTags(void *linux_side, const char * pchGameTags)
+{
+ ((ISteamGameServer*)linux_side)->SetGameTags((const char *)pchGameTags);
+}
+
+void cppISteamGameServer_SteamGameServer010_GetGameplayStats(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->GetGameplayStats();
+}
+
+SteamAPICall_t cppISteamGameServer_SteamGameServer010_GetServerReputation(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->GetServerReputation();
+}
+
+bool cppISteamGameServer_SteamGameServer010_RequestUserGroupStatus(void *linux_side, CSteamID steamIDUser, CSteamID steamIDGroup)
+{
+ return ((ISteamGameServer*)linux_side)->RequestUserGroupStatus((CSteamID)steamIDUser, (CSteamID)steamIDGroup);
+}
+
+uint32 cppISteamGameServer_SteamGameServer010_GetPublicIP(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->GetPublicIP();
+}
+
+void cppISteamGameServer_SteamGameServer010_SetGameData(void *linux_side, const char * pchGameData)
+{
+ ((ISteamGameServer*)linux_side)->SetGameData((const char *)pchGameData);
+}
+
+EUserHasLicenseForAppResult cppISteamGameServer_SteamGameServer010_UserHasLicenseForApp(void *linux_side, CSteamID steamID, AppId_t appID)
+{
+ return ((ISteamGameServer*)linux_side)->UserHasLicenseForApp((CSteamID)steamID, (AppId_t)appID);
+}
+
+HAuthTicket cppISteamGameServer_SteamGameServer010_GetAuthSessionTicket(void *linux_side, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ return ((ISteamGameServer*)linux_side)->GetAuthSessionTicket((void *)pTicket, (int)cbMaxTicket, (uint32 *)pcbTicket);
+}
+
+EBeginAuthSessionResult cppISteamGameServer_SteamGameServer010_BeginAuthSession(void *linux_side, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ return ((ISteamGameServer*)linux_side)->BeginAuthSession((const void *)pAuthTicket, (int)cbAuthTicket, (CSteamID)steamID);
+}
+
+void cppISteamGameServer_SteamGameServer010_EndAuthSession(void *linux_side, CSteamID steamID)
+{
+ ((ISteamGameServer*)linux_side)->EndAuthSession((CSteamID)steamID);
+}
+
+void cppISteamGameServer_SteamGameServer010_CancelAuthTicket(void *linux_side, HAuthTicket hAuthTicket)
+{
+ ((ISteamGameServer*)linux_side)->CancelAuthTicket((HAuthTicket)hAuthTicket);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamGameServer_SteamGameServer010.h b/lsteamclient/cppISteamGameServer_SteamGameServer010.h
new file mode 100644
index 00000000..f05b252e
--- /dev/null
+++ b/lsteamclient/cppISteamGameServer_SteamGameServer010.h
@@ -0,0 +1,29 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern void cppISteamGameServer_SteamGameServer010_LogOn(void *);
+extern void cppISteamGameServer_SteamGameServer010_LogOff(void *);
+extern bool cppISteamGameServer_SteamGameServer010_BLoggedOn(void *);
+extern bool cppISteamGameServer_SteamGameServer010_BSecure(void *);
+extern CSteamID cppISteamGameServer_SteamGameServer010_GetSteamID(void *);
+extern bool cppISteamGameServer_SteamGameServer010_SendUserConnectAndAuthenticate(void *, uint32, const void *, uint32, CSteamID *);
+extern CSteamID cppISteamGameServer_SteamGameServer010_CreateUnauthenticatedUserConnection(void *);
+extern void cppISteamGameServer_SteamGameServer010_SendUserDisconnect(void *, CSteamID);
+extern bool cppISteamGameServer_SteamGameServer010_BUpdateUserData(void *, CSteamID, const char *, uint32);
+extern bool cppISteamGameServer_SteamGameServer010_BSetServerType(void *, uint32, uint32, uint16, uint16, uint16, const char *, const char *, bool);
+extern void cppISteamGameServer_SteamGameServer010_UpdateServerStatus(void *, int, int, int, const char *, const char *, const char *);
+extern void cppISteamGameServer_SteamGameServer010_UpdateSpectatorPort(void *, uint16);
+extern void cppISteamGameServer_SteamGameServer010_SetGameTags(void *, const char *);
+extern void cppISteamGameServer_SteamGameServer010_GetGameplayStats(void *);
+extern SteamAPICall_t cppISteamGameServer_SteamGameServer010_GetServerReputation(void *);
+extern bool cppISteamGameServer_SteamGameServer010_RequestUserGroupStatus(void *, CSteamID, CSteamID);
+extern uint32 cppISteamGameServer_SteamGameServer010_GetPublicIP(void *);
+extern void cppISteamGameServer_SteamGameServer010_SetGameData(void *, const char *);
+extern EUserHasLicenseForAppResult cppISteamGameServer_SteamGameServer010_UserHasLicenseForApp(void *, CSteamID, AppId_t);
+extern HAuthTicket cppISteamGameServer_SteamGameServer010_GetAuthSessionTicket(void *, void *, int, uint32 *);
+extern EBeginAuthSessionResult cppISteamGameServer_SteamGameServer010_BeginAuthSession(void *, const void *, int, CSteamID);
+extern void cppISteamGameServer_SteamGameServer010_EndAuthSession(void *, CSteamID);
+extern void cppISteamGameServer_SteamGameServer010_CancelAuthTicket(void *, HAuthTicket);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamGameServer_SteamGameServer011.cpp b/lsteamclient/cppISteamGameServer_SteamGameServer011.cpp
new file mode 100644
index 00000000..af1d6044
--- /dev/null
+++ b/lsteamclient/cppISteamGameServer_SteamGameServer011.cpp
@@ -0,0 +1,231 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_128/steam_api.h"
+#include "steamworks_sdk_128/isteamgameserver.h"
+#include "cppISteamGameServer_SteamGameServer011.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamGameServer_SteamGameServer011_InitGameServer(void *linux_side, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString)
+{
+ return ((ISteamGameServer*)linux_side)->InitGameServer((uint32)unIP, (uint16)usGamePort, (uint16)usQueryPort, (uint32)unFlags, (AppId_t)nGameAppId, (const char *)pchVersionString);
+}
+
+void cppISteamGameServer_SteamGameServer011_SetProduct(void *linux_side, const char * pszProduct)
+{
+ ((ISteamGameServer*)linux_side)->SetProduct((const char *)pszProduct);
+}
+
+void cppISteamGameServer_SteamGameServer011_SetGameDescription(void *linux_side, const char * pszGameDescription)
+{
+ ((ISteamGameServer*)linux_side)->SetGameDescription((const char *)pszGameDescription);
+}
+
+void cppISteamGameServer_SteamGameServer011_SetModDir(void *linux_side, const char * pszModDir)
+{
+ ((ISteamGameServer*)linux_side)->SetModDir((const char *)pszModDir);
+}
+
+void cppISteamGameServer_SteamGameServer011_SetDedicatedServer(void *linux_side, bool bDedicated)
+{
+ ((ISteamGameServer*)linux_side)->SetDedicatedServer((bool)bDedicated);
+}
+
+void cppISteamGameServer_SteamGameServer011_LogOn(void *linux_side, const char * pszAccountName, const char * pszPassword)
+{
+ ((ISteamGameServer*)linux_side)->LogOn((const char *)pszAccountName, (const char *)pszPassword);
+}
+
+void cppISteamGameServer_SteamGameServer011_LogOnAnonymous(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->LogOnAnonymous();
+}
+
+void cppISteamGameServer_SteamGameServer011_LogOff(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->LogOff();
+}
+
+bool cppISteamGameServer_SteamGameServer011_BLoggedOn(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->BLoggedOn();
+}
+
+bool cppISteamGameServer_SteamGameServer011_BSecure(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->BSecure();
+}
+
+CSteamID cppISteamGameServer_SteamGameServer011_GetSteamID(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->GetSteamID();
+}
+
+bool cppISteamGameServer_SteamGameServer011_WasRestartRequested(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->WasRestartRequested();
+}
+
+void cppISteamGameServer_SteamGameServer011_SetMaxPlayerCount(void *linux_side, int cPlayersMax)
+{
+ ((ISteamGameServer*)linux_side)->SetMaxPlayerCount((int)cPlayersMax);
+}
+
+void cppISteamGameServer_SteamGameServer011_SetBotPlayerCount(void *linux_side, int cBotplayers)
+{
+ ((ISteamGameServer*)linux_side)->SetBotPlayerCount((int)cBotplayers);
+}
+
+void cppISteamGameServer_SteamGameServer011_SetServerName(void *linux_side, const char * pszServerName)
+{
+ ((ISteamGameServer*)linux_side)->SetServerName((const char *)pszServerName);
+}
+
+void cppISteamGameServer_SteamGameServer011_SetMapName(void *linux_side, const char * pszMapName)
+{
+ ((ISteamGameServer*)linux_side)->SetMapName((const char *)pszMapName);
+}
+
+void cppISteamGameServer_SteamGameServer011_SetPasswordProtected(void *linux_side, bool bPasswordProtected)
+{
+ ((ISteamGameServer*)linux_side)->SetPasswordProtected((bool)bPasswordProtected);
+}
+
+void cppISteamGameServer_SteamGameServer011_SetSpectatorPort(void *linux_side, uint16 unSpectatorPort)
+{
+ ((ISteamGameServer*)linux_side)->SetSpectatorPort((uint16)unSpectatorPort);
+}
+
+void cppISteamGameServer_SteamGameServer011_SetSpectatorServerName(void *linux_side, const char * pszSpectatorServerName)
+{
+ ((ISteamGameServer*)linux_side)->SetSpectatorServerName((const char *)pszSpectatorServerName);
+}
+
+void cppISteamGameServer_SteamGameServer011_ClearAllKeyValues(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->ClearAllKeyValues();
+}
+
+void cppISteamGameServer_SteamGameServer011_SetKeyValue(void *linux_side, const char * pKey, const char * pValue)
+{
+ ((ISteamGameServer*)linux_side)->SetKeyValue((const char *)pKey, (const char *)pValue);
+}
+
+void cppISteamGameServer_SteamGameServer011_SetGameTags(void *linux_side, const char * pchGameTags)
+{
+ ((ISteamGameServer*)linux_side)->SetGameTags((const char *)pchGameTags);
+}
+
+void cppISteamGameServer_SteamGameServer011_SetGameData(void *linux_side, const char * pchGameData)
+{
+ ((ISteamGameServer*)linux_side)->SetGameData((const char *)pchGameData);
+}
+
+void cppISteamGameServer_SteamGameServer011_SetRegion(void *linux_side, const char * pszRegion)
+{
+ ((ISteamGameServer*)linux_side)->SetRegion((const char *)pszRegion);
+}
+
+bool cppISteamGameServer_SteamGameServer011_SendUserConnectAndAuthenticate(void *linux_side, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, CSteamID * pSteamIDUser)
+{
+ return ((ISteamGameServer*)linux_side)->SendUserConnectAndAuthenticate((uint32)unIPClient, (const void *)pvAuthBlob, (uint32)cubAuthBlobSize, (CSteamID *)pSteamIDUser);
+}
+
+CSteamID cppISteamGameServer_SteamGameServer011_CreateUnauthenticatedUserConnection(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->CreateUnauthenticatedUserConnection();
+}
+
+void cppISteamGameServer_SteamGameServer011_SendUserDisconnect(void *linux_side, CSteamID steamIDUser)
+{
+ ((ISteamGameServer*)linux_side)->SendUserDisconnect((CSteamID)steamIDUser);
+}
+
+bool cppISteamGameServer_SteamGameServer011_BUpdateUserData(void *linux_side, CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore)
+{
+ return ((ISteamGameServer*)linux_side)->BUpdateUserData((CSteamID)steamIDUser, (const char *)pchPlayerName, (uint32)uScore);
+}
+
+HAuthTicket cppISteamGameServer_SteamGameServer011_GetAuthSessionTicket(void *linux_side, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ return ((ISteamGameServer*)linux_side)->GetAuthSessionTicket((void *)pTicket, (int)cbMaxTicket, (uint32 *)pcbTicket);
+}
+
+EBeginAuthSessionResult cppISteamGameServer_SteamGameServer011_BeginAuthSession(void *linux_side, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ return ((ISteamGameServer*)linux_side)->BeginAuthSession((const void *)pAuthTicket, (int)cbAuthTicket, (CSteamID)steamID);
+}
+
+void cppISteamGameServer_SteamGameServer011_EndAuthSession(void *linux_side, CSteamID steamID)
+{
+ ((ISteamGameServer*)linux_side)->EndAuthSession((CSteamID)steamID);
+}
+
+void cppISteamGameServer_SteamGameServer011_CancelAuthTicket(void *linux_side, HAuthTicket hAuthTicket)
+{
+ ((ISteamGameServer*)linux_side)->CancelAuthTicket((HAuthTicket)hAuthTicket);
+}
+
+EUserHasLicenseForAppResult cppISteamGameServer_SteamGameServer011_UserHasLicenseForApp(void *linux_side, CSteamID steamID, AppId_t appID)
+{
+ return ((ISteamGameServer*)linux_side)->UserHasLicenseForApp((CSteamID)steamID, (AppId_t)appID);
+}
+
+bool cppISteamGameServer_SteamGameServer011_RequestUserGroupStatus(void *linux_side, CSteamID steamIDUser, CSteamID steamIDGroup)
+{
+ return ((ISteamGameServer*)linux_side)->RequestUserGroupStatus((CSteamID)steamIDUser, (CSteamID)steamIDGroup);
+}
+
+void cppISteamGameServer_SteamGameServer011_GetGameplayStats(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->GetGameplayStats();
+}
+
+SteamAPICall_t cppISteamGameServer_SteamGameServer011_GetServerReputation(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->GetServerReputation();
+}
+
+uint32 cppISteamGameServer_SteamGameServer011_GetPublicIP(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->GetPublicIP();
+}
+
+bool cppISteamGameServer_SteamGameServer011_HandleIncomingPacket(void *linux_side, const void * pData, int cbData, uint32 srcIP, uint16 srcPort)
+{
+ return ((ISteamGameServer*)linux_side)->HandleIncomingPacket((const void *)pData, (int)cbData, (uint32)srcIP, (uint16)srcPort);
+}
+
+int cppISteamGameServer_SteamGameServer011_GetNextOutgoingPacket(void *linux_side, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort)
+{
+ return ((ISteamGameServer*)linux_side)->GetNextOutgoingPacket((void *)pOut, (int)cbMaxOut, (uint32 *)pNetAdr, (uint16 *)pPort);
+}
+
+void cppISteamGameServer_SteamGameServer011_EnableHeartbeats(void *linux_side, bool bActive)
+{
+ ((ISteamGameServer*)linux_side)->EnableHeartbeats((bool)bActive);
+}
+
+void cppISteamGameServer_SteamGameServer011_SetHeartbeatInterval(void *linux_side, int iHeartbeatInterval)
+{
+ ((ISteamGameServer*)linux_side)->SetHeartbeatInterval((int)iHeartbeatInterval);
+}
+
+void cppISteamGameServer_SteamGameServer011_ForceHeartbeat(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->ForceHeartbeat();
+}
+
+SteamAPICall_t cppISteamGameServer_SteamGameServer011_AssociateWithClan(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamGameServer*)linux_side)->AssociateWithClan((CSteamID)steamIDClan);
+}
+
+SteamAPICall_t cppISteamGameServer_SteamGameServer011_ComputeNewPlayerCompatibility(void *linux_side, CSteamID steamIDNewPlayer)
+{
+ return ((ISteamGameServer*)linux_side)->ComputeNewPlayerCompatibility((CSteamID)steamIDNewPlayer);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamGameServer_SteamGameServer011.h b/lsteamclient/cppISteamGameServer_SteamGameServer011.h
new file mode 100644
index 00000000..ee065283
--- /dev/null
+++ b/lsteamclient/cppISteamGameServer_SteamGameServer011.h
@@ -0,0 +1,50 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamGameServer_SteamGameServer011_InitGameServer(void *, uint32, uint16, uint16, uint32, AppId_t, const char *);
+extern void cppISteamGameServer_SteamGameServer011_SetProduct(void *, const char *);
+extern void cppISteamGameServer_SteamGameServer011_SetGameDescription(void *, const char *);
+extern void cppISteamGameServer_SteamGameServer011_SetModDir(void *, const char *);
+extern void cppISteamGameServer_SteamGameServer011_SetDedicatedServer(void *, bool);
+extern void cppISteamGameServer_SteamGameServer011_LogOn(void *, const char *, const char *);
+extern void cppISteamGameServer_SteamGameServer011_LogOnAnonymous(void *);
+extern void cppISteamGameServer_SteamGameServer011_LogOff(void *);
+extern bool cppISteamGameServer_SteamGameServer011_BLoggedOn(void *);
+extern bool cppISteamGameServer_SteamGameServer011_BSecure(void *);
+extern CSteamID cppISteamGameServer_SteamGameServer011_GetSteamID(void *);
+extern bool cppISteamGameServer_SteamGameServer011_WasRestartRequested(void *);
+extern void cppISteamGameServer_SteamGameServer011_SetMaxPlayerCount(void *, int);
+extern void cppISteamGameServer_SteamGameServer011_SetBotPlayerCount(void *, int);
+extern void cppISteamGameServer_SteamGameServer011_SetServerName(void *, const char *);
+extern void cppISteamGameServer_SteamGameServer011_SetMapName(void *, const char *);
+extern void cppISteamGameServer_SteamGameServer011_SetPasswordProtected(void *, bool);
+extern void cppISteamGameServer_SteamGameServer011_SetSpectatorPort(void *, uint16);
+extern void cppISteamGameServer_SteamGameServer011_SetSpectatorServerName(void *, const char *);
+extern void cppISteamGameServer_SteamGameServer011_ClearAllKeyValues(void *);
+extern void cppISteamGameServer_SteamGameServer011_SetKeyValue(void *, const char *, const char *);
+extern void cppISteamGameServer_SteamGameServer011_SetGameTags(void *, const char *);
+extern void cppISteamGameServer_SteamGameServer011_SetGameData(void *, const char *);
+extern void cppISteamGameServer_SteamGameServer011_SetRegion(void *, const char *);
+extern bool cppISteamGameServer_SteamGameServer011_SendUserConnectAndAuthenticate(void *, uint32, const void *, uint32, CSteamID *);
+extern CSteamID cppISteamGameServer_SteamGameServer011_CreateUnauthenticatedUserConnection(void *);
+extern void cppISteamGameServer_SteamGameServer011_SendUserDisconnect(void *, CSteamID);
+extern bool cppISteamGameServer_SteamGameServer011_BUpdateUserData(void *, CSteamID, const char *, uint32);
+extern HAuthTicket cppISteamGameServer_SteamGameServer011_GetAuthSessionTicket(void *, void *, int, uint32 *);
+extern EBeginAuthSessionResult cppISteamGameServer_SteamGameServer011_BeginAuthSession(void *, const void *, int, CSteamID);
+extern void cppISteamGameServer_SteamGameServer011_EndAuthSession(void *, CSteamID);
+extern void cppISteamGameServer_SteamGameServer011_CancelAuthTicket(void *, HAuthTicket);
+extern EUserHasLicenseForAppResult cppISteamGameServer_SteamGameServer011_UserHasLicenseForApp(void *, CSteamID, AppId_t);
+extern bool cppISteamGameServer_SteamGameServer011_RequestUserGroupStatus(void *, CSteamID, CSteamID);
+extern void cppISteamGameServer_SteamGameServer011_GetGameplayStats(void *);
+extern SteamAPICall_t cppISteamGameServer_SteamGameServer011_GetServerReputation(void *);
+extern uint32 cppISteamGameServer_SteamGameServer011_GetPublicIP(void *);
+extern bool cppISteamGameServer_SteamGameServer011_HandleIncomingPacket(void *, const void *, int, uint32, uint16);
+extern int cppISteamGameServer_SteamGameServer011_GetNextOutgoingPacket(void *, void *, int, uint32 *, uint16 *);
+extern void cppISteamGameServer_SteamGameServer011_EnableHeartbeats(void *, bool);
+extern void cppISteamGameServer_SteamGameServer011_SetHeartbeatInterval(void *, int);
+extern void cppISteamGameServer_SteamGameServer011_ForceHeartbeat(void *);
+extern SteamAPICall_t cppISteamGameServer_SteamGameServer011_AssociateWithClan(void *, CSteamID);
+extern SteamAPICall_t cppISteamGameServer_SteamGameServer011_ComputeNewPlayerCompatibility(void *, CSteamID);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamGameServer_SteamGameServer012.cpp b/lsteamclient/cppISteamGameServer_SteamGameServer012.cpp
new file mode 100644
index 00000000..1b058ca3
--- /dev/null
+++ b/lsteamclient/cppISteamGameServer_SteamGameServer012.cpp
@@ -0,0 +1,231 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "steamworks_sdk_142/isteamgameserver.h"
+#include "cppISteamGameServer_SteamGameServer012.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamGameServer_SteamGameServer012_InitGameServer(void *linux_side, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString)
+{
+ return ((ISteamGameServer*)linux_side)->InitGameServer((uint32)unIP, (uint16)usGamePort, (uint16)usQueryPort, (uint32)unFlags, (AppId_t)nGameAppId, (const char *)pchVersionString);
+}
+
+void cppISteamGameServer_SteamGameServer012_SetProduct(void *linux_side, const char * pszProduct)
+{
+ ((ISteamGameServer*)linux_side)->SetProduct((const char *)pszProduct);
+}
+
+void cppISteamGameServer_SteamGameServer012_SetGameDescription(void *linux_side, const char * pszGameDescription)
+{
+ ((ISteamGameServer*)linux_side)->SetGameDescription((const char *)pszGameDescription);
+}
+
+void cppISteamGameServer_SteamGameServer012_SetModDir(void *linux_side, const char * pszModDir)
+{
+ ((ISteamGameServer*)linux_side)->SetModDir((const char *)pszModDir);
+}
+
+void cppISteamGameServer_SteamGameServer012_SetDedicatedServer(void *linux_side, bool bDedicated)
+{
+ ((ISteamGameServer*)linux_side)->SetDedicatedServer((bool)bDedicated);
+}
+
+void cppISteamGameServer_SteamGameServer012_LogOn(void *linux_side, const char * pszToken)
+{
+ ((ISteamGameServer*)linux_side)->LogOn((const char *)pszToken);
+}
+
+void cppISteamGameServer_SteamGameServer012_LogOnAnonymous(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->LogOnAnonymous();
+}
+
+void cppISteamGameServer_SteamGameServer012_LogOff(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->LogOff();
+}
+
+bool cppISteamGameServer_SteamGameServer012_BLoggedOn(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->BLoggedOn();
+}
+
+bool cppISteamGameServer_SteamGameServer012_BSecure(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->BSecure();
+}
+
+CSteamID cppISteamGameServer_SteamGameServer012_GetSteamID(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->GetSteamID();
+}
+
+bool cppISteamGameServer_SteamGameServer012_WasRestartRequested(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->WasRestartRequested();
+}
+
+void cppISteamGameServer_SteamGameServer012_SetMaxPlayerCount(void *linux_side, int cPlayersMax)
+{
+ ((ISteamGameServer*)linux_side)->SetMaxPlayerCount((int)cPlayersMax);
+}
+
+void cppISteamGameServer_SteamGameServer012_SetBotPlayerCount(void *linux_side, int cBotplayers)
+{
+ ((ISteamGameServer*)linux_side)->SetBotPlayerCount((int)cBotplayers);
+}
+
+void cppISteamGameServer_SteamGameServer012_SetServerName(void *linux_side, const char * pszServerName)
+{
+ ((ISteamGameServer*)linux_side)->SetServerName((const char *)pszServerName);
+}
+
+void cppISteamGameServer_SteamGameServer012_SetMapName(void *linux_side, const char * pszMapName)
+{
+ ((ISteamGameServer*)linux_side)->SetMapName((const char *)pszMapName);
+}
+
+void cppISteamGameServer_SteamGameServer012_SetPasswordProtected(void *linux_side, bool bPasswordProtected)
+{
+ ((ISteamGameServer*)linux_side)->SetPasswordProtected((bool)bPasswordProtected);
+}
+
+void cppISteamGameServer_SteamGameServer012_SetSpectatorPort(void *linux_side, uint16 unSpectatorPort)
+{
+ ((ISteamGameServer*)linux_side)->SetSpectatorPort((uint16)unSpectatorPort);
+}
+
+void cppISteamGameServer_SteamGameServer012_SetSpectatorServerName(void *linux_side, const char * pszSpectatorServerName)
+{
+ ((ISteamGameServer*)linux_side)->SetSpectatorServerName((const char *)pszSpectatorServerName);
+}
+
+void cppISteamGameServer_SteamGameServer012_ClearAllKeyValues(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->ClearAllKeyValues();
+}
+
+void cppISteamGameServer_SteamGameServer012_SetKeyValue(void *linux_side, const char * pKey, const char * pValue)
+{
+ ((ISteamGameServer*)linux_side)->SetKeyValue((const char *)pKey, (const char *)pValue);
+}
+
+void cppISteamGameServer_SteamGameServer012_SetGameTags(void *linux_side, const char * pchGameTags)
+{
+ ((ISteamGameServer*)linux_side)->SetGameTags((const char *)pchGameTags);
+}
+
+void cppISteamGameServer_SteamGameServer012_SetGameData(void *linux_side, const char * pchGameData)
+{
+ ((ISteamGameServer*)linux_side)->SetGameData((const char *)pchGameData);
+}
+
+void cppISteamGameServer_SteamGameServer012_SetRegion(void *linux_side, const char * pszRegion)
+{
+ ((ISteamGameServer*)linux_side)->SetRegion((const char *)pszRegion);
+}
+
+bool cppISteamGameServer_SteamGameServer012_SendUserConnectAndAuthenticate(void *linux_side, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, CSteamID * pSteamIDUser)
+{
+ return ((ISteamGameServer*)linux_side)->SendUserConnectAndAuthenticate((uint32)unIPClient, (const void *)pvAuthBlob, (uint32)cubAuthBlobSize, (CSteamID *)pSteamIDUser);
+}
+
+CSteamID cppISteamGameServer_SteamGameServer012_CreateUnauthenticatedUserConnection(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->CreateUnauthenticatedUserConnection();
+}
+
+void cppISteamGameServer_SteamGameServer012_SendUserDisconnect(void *linux_side, CSteamID steamIDUser)
+{
+ ((ISteamGameServer*)linux_side)->SendUserDisconnect((CSteamID)steamIDUser);
+}
+
+bool cppISteamGameServer_SteamGameServer012_BUpdateUserData(void *linux_side, CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore)
+{
+ return ((ISteamGameServer*)linux_side)->BUpdateUserData((CSteamID)steamIDUser, (const char *)pchPlayerName, (uint32)uScore);
+}
+
+HAuthTicket cppISteamGameServer_SteamGameServer012_GetAuthSessionTicket(void *linux_side, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ return ((ISteamGameServer*)linux_side)->GetAuthSessionTicket((void *)pTicket, (int)cbMaxTicket, (uint32 *)pcbTicket);
+}
+
+EBeginAuthSessionResult cppISteamGameServer_SteamGameServer012_BeginAuthSession(void *linux_side, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ return ((ISteamGameServer*)linux_side)->BeginAuthSession((const void *)pAuthTicket, (int)cbAuthTicket, (CSteamID)steamID);
+}
+
+void cppISteamGameServer_SteamGameServer012_EndAuthSession(void *linux_side, CSteamID steamID)
+{
+ ((ISteamGameServer*)linux_side)->EndAuthSession((CSteamID)steamID);
+}
+
+void cppISteamGameServer_SteamGameServer012_CancelAuthTicket(void *linux_side, HAuthTicket hAuthTicket)
+{
+ ((ISteamGameServer*)linux_side)->CancelAuthTicket((HAuthTicket)hAuthTicket);
+}
+
+EUserHasLicenseForAppResult cppISteamGameServer_SteamGameServer012_UserHasLicenseForApp(void *linux_side, CSteamID steamID, AppId_t appID)
+{
+ return ((ISteamGameServer*)linux_side)->UserHasLicenseForApp((CSteamID)steamID, (AppId_t)appID);
+}
+
+bool cppISteamGameServer_SteamGameServer012_RequestUserGroupStatus(void *linux_side, CSteamID steamIDUser, CSteamID steamIDGroup)
+{
+ return ((ISteamGameServer*)linux_side)->RequestUserGroupStatus((CSteamID)steamIDUser, (CSteamID)steamIDGroup);
+}
+
+void cppISteamGameServer_SteamGameServer012_GetGameplayStats(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->GetGameplayStats();
+}
+
+SteamAPICall_t cppISteamGameServer_SteamGameServer012_GetServerReputation(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->GetServerReputation();
+}
+
+uint32 cppISteamGameServer_SteamGameServer012_GetPublicIP(void *linux_side)
+{
+ return ((ISteamGameServer*)linux_side)->GetPublicIP();
+}
+
+bool cppISteamGameServer_SteamGameServer012_HandleIncomingPacket(void *linux_side, const void * pData, int cbData, uint32 srcIP, uint16 srcPort)
+{
+ return ((ISteamGameServer*)linux_side)->HandleIncomingPacket((const void *)pData, (int)cbData, (uint32)srcIP, (uint16)srcPort);
+}
+
+int cppISteamGameServer_SteamGameServer012_GetNextOutgoingPacket(void *linux_side, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort)
+{
+ return ((ISteamGameServer*)linux_side)->GetNextOutgoingPacket((void *)pOut, (int)cbMaxOut, (uint32 *)pNetAdr, (uint16 *)pPort);
+}
+
+void cppISteamGameServer_SteamGameServer012_EnableHeartbeats(void *linux_side, bool bActive)
+{
+ ((ISteamGameServer*)linux_side)->EnableHeartbeats((bool)bActive);
+}
+
+void cppISteamGameServer_SteamGameServer012_SetHeartbeatInterval(void *linux_side, int iHeartbeatInterval)
+{
+ ((ISteamGameServer*)linux_side)->SetHeartbeatInterval((int)iHeartbeatInterval);
+}
+
+void cppISteamGameServer_SteamGameServer012_ForceHeartbeat(void *linux_side)
+{
+ ((ISteamGameServer*)linux_side)->ForceHeartbeat();
+}
+
+SteamAPICall_t cppISteamGameServer_SteamGameServer012_AssociateWithClan(void *linux_side, CSteamID steamIDClan)
+{
+ return ((ISteamGameServer*)linux_side)->AssociateWithClan((CSteamID)steamIDClan);
+}
+
+SteamAPICall_t cppISteamGameServer_SteamGameServer012_ComputeNewPlayerCompatibility(void *linux_side, CSteamID steamIDNewPlayer)
+{
+ return ((ISteamGameServer*)linux_side)->ComputeNewPlayerCompatibility((CSteamID)steamIDNewPlayer);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamGameServer_SteamGameServer012.h b/lsteamclient/cppISteamGameServer_SteamGameServer012.h
new file mode 100644
index 00000000..5642e2ab
--- /dev/null
+++ b/lsteamclient/cppISteamGameServer_SteamGameServer012.h
@@ -0,0 +1,50 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamGameServer_SteamGameServer012_InitGameServer(void *, uint32, uint16, uint16, uint32, AppId_t, const char *);
+extern void cppISteamGameServer_SteamGameServer012_SetProduct(void *, const char *);
+extern void cppISteamGameServer_SteamGameServer012_SetGameDescription(void *, const char *);
+extern void cppISteamGameServer_SteamGameServer012_SetModDir(void *, const char *);
+extern void cppISteamGameServer_SteamGameServer012_SetDedicatedServer(void *, bool);
+extern void cppISteamGameServer_SteamGameServer012_LogOn(void *, const char *);
+extern void cppISteamGameServer_SteamGameServer012_LogOnAnonymous(void *);
+extern void cppISteamGameServer_SteamGameServer012_LogOff(void *);
+extern bool cppISteamGameServer_SteamGameServer012_BLoggedOn(void *);
+extern bool cppISteamGameServer_SteamGameServer012_BSecure(void *);
+extern CSteamID cppISteamGameServer_SteamGameServer012_GetSteamID(void *);
+extern bool cppISteamGameServer_SteamGameServer012_WasRestartRequested(void *);
+extern void cppISteamGameServer_SteamGameServer012_SetMaxPlayerCount(void *, int);
+extern void cppISteamGameServer_SteamGameServer012_SetBotPlayerCount(void *, int);
+extern void cppISteamGameServer_SteamGameServer012_SetServerName(void *, const char *);
+extern void cppISteamGameServer_SteamGameServer012_SetMapName(void *, const char *);
+extern void cppISteamGameServer_SteamGameServer012_SetPasswordProtected(void *, bool);
+extern void cppISteamGameServer_SteamGameServer012_SetSpectatorPort(void *, uint16);
+extern void cppISteamGameServer_SteamGameServer012_SetSpectatorServerName(void *, const char *);
+extern void cppISteamGameServer_SteamGameServer012_ClearAllKeyValues(void *);
+extern void cppISteamGameServer_SteamGameServer012_SetKeyValue(void *, const char *, const char *);
+extern void cppISteamGameServer_SteamGameServer012_SetGameTags(void *, const char *);
+extern void cppISteamGameServer_SteamGameServer012_SetGameData(void *, const char *);
+extern void cppISteamGameServer_SteamGameServer012_SetRegion(void *, const char *);
+extern bool cppISteamGameServer_SteamGameServer012_SendUserConnectAndAuthenticate(void *, uint32, const void *, uint32, CSteamID *);
+extern CSteamID cppISteamGameServer_SteamGameServer012_CreateUnauthenticatedUserConnection(void *);
+extern void cppISteamGameServer_SteamGameServer012_SendUserDisconnect(void *, CSteamID);
+extern bool cppISteamGameServer_SteamGameServer012_BUpdateUserData(void *, CSteamID, const char *, uint32);
+extern HAuthTicket cppISteamGameServer_SteamGameServer012_GetAuthSessionTicket(void *, void *, int, uint32 *);
+extern EBeginAuthSessionResult cppISteamGameServer_SteamGameServer012_BeginAuthSession(void *, const void *, int, CSteamID);
+extern void cppISteamGameServer_SteamGameServer012_EndAuthSession(void *, CSteamID);
+extern void cppISteamGameServer_SteamGameServer012_CancelAuthTicket(void *, HAuthTicket);
+extern EUserHasLicenseForAppResult cppISteamGameServer_SteamGameServer012_UserHasLicenseForApp(void *, CSteamID, AppId_t);
+extern bool cppISteamGameServer_SteamGameServer012_RequestUserGroupStatus(void *, CSteamID, CSteamID);
+extern void cppISteamGameServer_SteamGameServer012_GetGameplayStats(void *);
+extern SteamAPICall_t cppISteamGameServer_SteamGameServer012_GetServerReputation(void *);
+extern uint32 cppISteamGameServer_SteamGameServer012_GetPublicIP(void *);
+extern bool cppISteamGameServer_SteamGameServer012_HandleIncomingPacket(void *, const void *, int, uint32, uint16);
+extern int cppISteamGameServer_SteamGameServer012_GetNextOutgoingPacket(void *, void *, int, uint32 *, uint16 *);
+extern void cppISteamGameServer_SteamGameServer012_EnableHeartbeats(void *, bool);
+extern void cppISteamGameServer_SteamGameServer012_SetHeartbeatInterval(void *, int);
+extern void cppISteamGameServer_SteamGameServer012_ForceHeartbeat(void *);
+extern SteamAPICall_t cppISteamGameServer_SteamGameServer012_AssociateWithClan(void *, CSteamID);
+extern SteamAPICall_t cppISteamGameServer_SteamGameServer012_ComputeNewPlayerCompatibility(void *, CSteamID);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002.cpp b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002.cpp
new file mode 100644
index 00000000..eec5786d
--- /dev/null
+++ b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002.cpp
@@ -0,0 +1,180 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_133a/steam_api.h"
+#include "cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Init(void *linux_side)
+{
+ return ((ISteamHTMLSurface*)linux_side)->Init();
+}
+
+bool cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Shutdown(void *linux_side)
+{
+ return ((ISteamHTMLSurface*)linux_side)->Shutdown();
+}
+
+SteamAPICall_t cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_CreateBrowser(void *linux_side, const char * pchUserAgent, const char * pchUserCSS)
+{
+ return ((ISteamHTMLSurface*)linux_side)->CreateBrowser((const char *)pchUserAgent, (const char *)pchUserCSS);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_RemoveBrowser(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->RemoveBrowser((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_LoadURL(void *linux_side, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData)
+{
+ ((ISteamHTMLSurface*)linux_side)->LoadURL((HHTMLBrowser)unBrowserHandle, (const char *)pchURL, (const char *)pchPostData);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetSize(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetSize((HHTMLBrowser)unBrowserHandle, (uint32)unWidth, (uint32)unHeight);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_StopLoad(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->StopLoad((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Reload(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->Reload((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_GoBack(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->GoBack((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_GoForward(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->GoForward((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_AddHeader(void *linux_side, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue)
+{
+ ((ISteamHTMLSurface*)linux_side)->AddHeader((HHTMLBrowser)unBrowserHandle, (const char *)pchKey, (const char *)pchValue);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_ExecuteJavascript(void *linux_side, HHTMLBrowser unBrowserHandle, const char * pchScript)
+{
+ ((ISteamHTMLSurface*)linux_side)->ExecuteJavascript((HHTMLBrowser)unBrowserHandle, (const char *)pchScript);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseUp(void *linux_side, HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton)
+{
+ ((ISteamHTMLSurface*)linux_side)->MouseUp((HHTMLBrowser)unBrowserHandle, (ISteamHTMLSurface::EHTMLMouseButton)eMouseButton);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseDown(void *linux_side, HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton)
+{
+ ((ISteamHTMLSurface*)linux_side)->MouseDown((HHTMLBrowser)unBrowserHandle, (ISteamHTMLSurface::EHTMLMouseButton)eMouseButton);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseDoubleClick(void *linux_side, HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton)
+{
+ ((ISteamHTMLSurface*)linux_side)->MouseDoubleClick((HHTMLBrowser)unBrowserHandle, (ISteamHTMLSurface::EHTMLMouseButton)eMouseButton);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseMove(void *linux_side, HHTMLBrowser unBrowserHandle, int x, int y)
+{
+ ((ISteamHTMLSurface*)linux_side)->MouseMove((HHTMLBrowser)unBrowserHandle, (int)x, (int)y);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseWheel(void *linux_side, HHTMLBrowser unBrowserHandle, int32 nDelta)
+{
+ ((ISteamHTMLSurface*)linux_side)->MouseWheel((HHTMLBrowser)unBrowserHandle, (int32)nDelta);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyDown(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers)
+{
+ ((ISteamHTMLSurface*)linux_side)->KeyDown((HHTMLBrowser)unBrowserHandle, (uint32)nNativeKeyCode, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyUp(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers)
+{
+ ((ISteamHTMLSurface*)linux_side)->KeyUp((HHTMLBrowser)unBrowserHandle, (uint32)nNativeKeyCode, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyChar(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers)
+{
+ ((ISteamHTMLSurface*)linux_side)->KeyChar((HHTMLBrowser)unBrowserHandle, (uint32)cUnicodeChar, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetHorizontalScroll(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetHorizontalScroll((HHTMLBrowser)unBrowserHandle, (uint32)nAbsolutePixelScroll);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetVerticalScroll(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetVerticalScroll((HHTMLBrowser)unBrowserHandle, (uint32)nAbsolutePixelScroll);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetKeyFocus(void *linux_side, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetKeyFocus((HHTMLBrowser)unBrowserHandle, (bool)bHasKeyFocus);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_ViewSource(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->ViewSource((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_CopyToClipboard(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->CopyToClipboard((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_PasteFromClipboard(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->PasteFromClipboard((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Find(void *linux_side, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse)
+{
+ ((ISteamHTMLSurface*)linux_side)->Find((HHTMLBrowser)unBrowserHandle, (const char *)pchSearchStr, (bool)bCurrentlyInFind, (bool)bReverse);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_StopFind(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->StopFind((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_GetLinkAtPosition(void *linux_side, HHTMLBrowser unBrowserHandle, int x, int y)
+{
+ ((ISteamHTMLSurface*)linux_side)->GetLinkAtPosition((HHTMLBrowser)unBrowserHandle, (int)x, (int)y);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetCookie(void *linux_side, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetCookie((const char *)pchHostname, (const char *)pchKey, (const char *)pchValue, (const char *)pchPath, (RTime32)nExpires, (bool)bSecure, (bool)bHTTPOnly);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetPageScaleFactor(void *linux_side, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetPageScaleFactor((HHTMLBrowser)unBrowserHandle, (float)flZoom, (int)nPointX, (int)nPointY);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_AllowStartRequest(void *linux_side, HHTMLBrowser unBrowserHandle, bool bAllowed)
+{
+ ((ISteamHTMLSurface*)linux_side)->AllowStartRequest((HHTMLBrowser)unBrowserHandle, (bool)bAllowed);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_JSDialogResponse(void *linux_side, HHTMLBrowser unBrowserHandle, bool bResult)
+{
+ ((ISteamHTMLSurface*)linux_side)->JSDialogResponse((HHTMLBrowser)unBrowserHandle, (bool)bResult);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_FileLoadDialogResponse(void *linux_side, HHTMLBrowser unBrowserHandle, const char ** pchSelectedFiles)
+{
+ ((ISteamHTMLSurface*)linux_side)->FileLoadDialogResponse((HHTMLBrowser)unBrowserHandle, (const char **)pchSelectedFiles);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002.h b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002.h
new file mode 100644
index 00000000..5a844fc9
--- /dev/null
+++ b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002.h
@@ -0,0 +1,40 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Init(void *);
+extern bool cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Shutdown(void *);
+extern SteamAPICall_t cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_CreateBrowser(void *, const char *, const char *);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_RemoveBrowser(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_LoadURL(void *, HHTMLBrowser, const char *, const char *);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetSize(void *, HHTMLBrowser, uint32, uint32);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_StopLoad(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Reload(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_GoBack(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_GoForward(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_AddHeader(void *, HHTMLBrowser, const char *, const char *);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_ExecuteJavascript(void *, HHTMLBrowser, const char *);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseUp(void *, HHTMLBrowser, EHTMLMouseButton);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseDown(void *, HHTMLBrowser, EHTMLMouseButton);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseDoubleClick(void *, HHTMLBrowser, EHTMLMouseButton);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseMove(void *, HHTMLBrowser, int, int);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseWheel(void *, HHTMLBrowser, int32);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyDown(void *, HHTMLBrowser, uint32, EHTMLKeyModifiers);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyUp(void *, HHTMLBrowser, uint32, EHTMLKeyModifiers);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyChar(void *, HHTMLBrowser, uint32, EHTMLKeyModifiers);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetHorizontalScroll(void *, HHTMLBrowser, uint32);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetVerticalScroll(void *, HHTMLBrowser, uint32);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetKeyFocus(void *, HHTMLBrowser, bool);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_ViewSource(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_CopyToClipboard(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_PasteFromClipboard(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Find(void *, HHTMLBrowser, const char *, bool, bool);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_StopFind(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_GetLinkAtPosition(void *, HHTMLBrowser, int, int);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetCookie(void *, const char *, const char *, const char *, const char *, RTime32, bool, bool);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetPageScaleFactor(void *, HHTMLBrowser, float, int, int);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_AllowStartRequest(void *, HHTMLBrowser, bool);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_JSDialogResponse(void *, HHTMLBrowser, bool);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_FileLoadDialogResponse(void *, HHTMLBrowser, const char **);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003.cpp b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003.cpp
new file mode 100644
index 00000000..ac48cf0f
--- /dev/null
+++ b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003.cpp
@@ -0,0 +1,185 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_140/steam_api.h"
+#include "cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Init(void *linux_side)
+{
+ return ((ISteamHTMLSurface*)linux_side)->Init();
+}
+
+bool cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Shutdown(void *linux_side)
+{
+ return ((ISteamHTMLSurface*)linux_side)->Shutdown();
+}
+
+SteamAPICall_t cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_CreateBrowser(void *linux_side, const char * pchUserAgent, const char * pchUserCSS)
+{
+ return ((ISteamHTMLSurface*)linux_side)->CreateBrowser((const char *)pchUserAgent, (const char *)pchUserCSS);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_RemoveBrowser(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->RemoveBrowser((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_LoadURL(void *linux_side, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData)
+{
+ ((ISteamHTMLSurface*)linux_side)->LoadURL((HHTMLBrowser)unBrowserHandle, (const char *)pchURL, (const char *)pchPostData);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetSize(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetSize((HHTMLBrowser)unBrowserHandle, (uint32)unWidth, (uint32)unHeight);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_StopLoad(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->StopLoad((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Reload(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->Reload((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_GoBack(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->GoBack((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_GoForward(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->GoForward((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_AddHeader(void *linux_side, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue)
+{
+ ((ISteamHTMLSurface*)linux_side)->AddHeader((HHTMLBrowser)unBrowserHandle, (const char *)pchKey, (const char *)pchValue);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_ExecuteJavascript(void *linux_side, HHTMLBrowser unBrowserHandle, const char * pchScript)
+{
+ ((ISteamHTMLSurface*)linux_side)->ExecuteJavascript((HHTMLBrowser)unBrowserHandle, (const char *)pchScript);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseUp(void *linux_side, HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton)
+{
+ ((ISteamHTMLSurface*)linux_side)->MouseUp((HHTMLBrowser)unBrowserHandle, (ISteamHTMLSurface::EHTMLMouseButton)eMouseButton);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseDown(void *linux_side, HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton)
+{
+ ((ISteamHTMLSurface*)linux_side)->MouseDown((HHTMLBrowser)unBrowserHandle, (ISteamHTMLSurface::EHTMLMouseButton)eMouseButton);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseDoubleClick(void *linux_side, HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton)
+{
+ ((ISteamHTMLSurface*)linux_side)->MouseDoubleClick((HHTMLBrowser)unBrowserHandle, (ISteamHTMLSurface::EHTMLMouseButton)eMouseButton);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseMove(void *linux_side, HHTMLBrowser unBrowserHandle, int x, int y)
+{
+ ((ISteamHTMLSurface*)linux_side)->MouseMove((HHTMLBrowser)unBrowserHandle, (int)x, (int)y);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseWheel(void *linux_side, HHTMLBrowser unBrowserHandle, int32 nDelta)
+{
+ ((ISteamHTMLSurface*)linux_side)->MouseWheel((HHTMLBrowser)unBrowserHandle, (int32)nDelta);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyDown(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers)
+{
+ ((ISteamHTMLSurface*)linux_side)->KeyDown((HHTMLBrowser)unBrowserHandle, (uint32)nNativeKeyCode, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyUp(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers)
+{
+ ((ISteamHTMLSurface*)linux_side)->KeyUp((HHTMLBrowser)unBrowserHandle, (uint32)nNativeKeyCode, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyChar(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers)
+{
+ ((ISteamHTMLSurface*)linux_side)->KeyChar((HHTMLBrowser)unBrowserHandle, (uint32)cUnicodeChar, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetHorizontalScroll(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetHorizontalScroll((HHTMLBrowser)unBrowserHandle, (uint32)nAbsolutePixelScroll);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetVerticalScroll(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetVerticalScroll((HHTMLBrowser)unBrowserHandle, (uint32)nAbsolutePixelScroll);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetKeyFocus(void *linux_side, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetKeyFocus((HHTMLBrowser)unBrowserHandle, (bool)bHasKeyFocus);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_ViewSource(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->ViewSource((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_CopyToClipboard(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->CopyToClipboard((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_PasteFromClipboard(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->PasteFromClipboard((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Find(void *linux_side, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse)
+{
+ ((ISteamHTMLSurface*)linux_side)->Find((HHTMLBrowser)unBrowserHandle, (const char *)pchSearchStr, (bool)bCurrentlyInFind, (bool)bReverse);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_StopFind(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->StopFind((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_GetLinkAtPosition(void *linux_side, HHTMLBrowser unBrowserHandle, int x, int y)
+{
+ ((ISteamHTMLSurface*)linux_side)->GetLinkAtPosition((HHTMLBrowser)unBrowserHandle, (int)x, (int)y);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetCookie(void *linux_side, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetCookie((const char *)pchHostname, (const char *)pchKey, (const char *)pchValue, (const char *)pchPath, (RTime32)nExpires, (bool)bSecure, (bool)bHTTPOnly);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetPageScaleFactor(void *linux_side, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetPageScaleFactor((HHTMLBrowser)unBrowserHandle, (float)flZoom, (int)nPointX, (int)nPointY);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetBackgroundMode(void *linux_side, HHTMLBrowser unBrowserHandle, bool bBackgroundMode)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetBackgroundMode((HHTMLBrowser)unBrowserHandle, (bool)bBackgroundMode);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_AllowStartRequest(void *linux_side, HHTMLBrowser unBrowserHandle, bool bAllowed)
+{
+ ((ISteamHTMLSurface*)linux_side)->AllowStartRequest((HHTMLBrowser)unBrowserHandle, (bool)bAllowed);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_JSDialogResponse(void *linux_side, HHTMLBrowser unBrowserHandle, bool bResult)
+{
+ ((ISteamHTMLSurface*)linux_side)->JSDialogResponse((HHTMLBrowser)unBrowserHandle, (bool)bResult);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_FileLoadDialogResponse(void *linux_side, HHTMLBrowser unBrowserHandle, const char ** pchSelectedFiles)
+{
+ ((ISteamHTMLSurface*)linux_side)->FileLoadDialogResponse((HHTMLBrowser)unBrowserHandle, (const char **)pchSelectedFiles);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003.h b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003.h
new file mode 100644
index 00000000..2c3e4508
--- /dev/null
+++ b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003.h
@@ -0,0 +1,41 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Init(void *);
+extern bool cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Shutdown(void *);
+extern SteamAPICall_t cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_CreateBrowser(void *, const char *, const char *);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_RemoveBrowser(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_LoadURL(void *, HHTMLBrowser, const char *, const char *);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetSize(void *, HHTMLBrowser, uint32, uint32);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_StopLoad(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Reload(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_GoBack(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_GoForward(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_AddHeader(void *, HHTMLBrowser, const char *, const char *);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_ExecuteJavascript(void *, HHTMLBrowser, const char *);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseUp(void *, HHTMLBrowser, EHTMLMouseButton);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseDown(void *, HHTMLBrowser, EHTMLMouseButton);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseDoubleClick(void *, HHTMLBrowser, EHTMLMouseButton);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseMove(void *, HHTMLBrowser, int, int);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseWheel(void *, HHTMLBrowser, int32);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyDown(void *, HHTMLBrowser, uint32, EHTMLKeyModifiers);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyUp(void *, HHTMLBrowser, uint32, EHTMLKeyModifiers);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyChar(void *, HHTMLBrowser, uint32, EHTMLKeyModifiers);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetHorizontalScroll(void *, HHTMLBrowser, uint32);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetVerticalScroll(void *, HHTMLBrowser, uint32);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetKeyFocus(void *, HHTMLBrowser, bool);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_ViewSource(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_CopyToClipboard(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_PasteFromClipboard(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Find(void *, HHTMLBrowser, const char *, bool, bool);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_StopFind(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_GetLinkAtPosition(void *, HHTMLBrowser, int, int);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetCookie(void *, const char *, const char *, const char *, const char *, RTime32, bool, bool);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetPageScaleFactor(void *, HHTMLBrowser, float, int, int);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetBackgroundMode(void *, HHTMLBrowser, bool);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_AllowStartRequest(void *, HHTMLBrowser, bool);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_JSDialogResponse(void *, HHTMLBrowser, bool);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_FileLoadDialogResponse(void *, HHTMLBrowser, const char **);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004.cpp b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004.cpp
new file mode 100644
index 00000000..3464faa0
--- /dev/null
+++ b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004.cpp
@@ -0,0 +1,190 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Init(void *linux_side)
+{
+ return ((ISteamHTMLSurface*)linux_side)->Init();
+}
+
+bool cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Shutdown(void *linux_side)
+{
+ return ((ISteamHTMLSurface*)linux_side)->Shutdown();
+}
+
+SteamAPICall_t cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_CreateBrowser(void *linux_side, const char * pchUserAgent, const char * pchUserCSS)
+{
+ return ((ISteamHTMLSurface*)linux_side)->CreateBrowser((const char *)pchUserAgent, (const char *)pchUserCSS);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_RemoveBrowser(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->RemoveBrowser((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_LoadURL(void *linux_side, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData)
+{
+ ((ISteamHTMLSurface*)linux_side)->LoadURL((HHTMLBrowser)unBrowserHandle, (const char *)pchURL, (const char *)pchPostData);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetSize(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetSize((HHTMLBrowser)unBrowserHandle, (uint32)unWidth, (uint32)unHeight);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_StopLoad(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->StopLoad((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Reload(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->Reload((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_GoBack(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->GoBack((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_GoForward(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->GoForward((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_AddHeader(void *linux_side, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue)
+{
+ ((ISteamHTMLSurface*)linux_side)->AddHeader((HHTMLBrowser)unBrowserHandle, (const char *)pchKey, (const char *)pchValue);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_ExecuteJavascript(void *linux_side, HHTMLBrowser unBrowserHandle, const char * pchScript)
+{
+ ((ISteamHTMLSurface*)linux_side)->ExecuteJavascript((HHTMLBrowser)unBrowserHandle, (const char *)pchScript);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseUp(void *linux_side, HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton)
+{
+ ((ISteamHTMLSurface*)linux_side)->MouseUp((HHTMLBrowser)unBrowserHandle, (ISteamHTMLSurface::EHTMLMouseButton)eMouseButton);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseDown(void *linux_side, HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton)
+{
+ ((ISteamHTMLSurface*)linux_side)->MouseDown((HHTMLBrowser)unBrowserHandle, (ISteamHTMLSurface::EHTMLMouseButton)eMouseButton);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseDoubleClick(void *linux_side, HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton)
+{
+ ((ISteamHTMLSurface*)linux_side)->MouseDoubleClick((HHTMLBrowser)unBrowserHandle, (ISteamHTMLSurface::EHTMLMouseButton)eMouseButton);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseMove(void *linux_side, HHTMLBrowser unBrowserHandle, int x, int y)
+{
+ ((ISteamHTMLSurface*)linux_side)->MouseMove((HHTMLBrowser)unBrowserHandle, (int)x, (int)y);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseWheel(void *linux_side, HHTMLBrowser unBrowserHandle, int32 nDelta)
+{
+ ((ISteamHTMLSurface*)linux_side)->MouseWheel((HHTMLBrowser)unBrowserHandle, (int32)nDelta);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyDown(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers)
+{
+ ((ISteamHTMLSurface*)linux_side)->KeyDown((HHTMLBrowser)unBrowserHandle, (uint32)nNativeKeyCode, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyUp(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers)
+{
+ ((ISteamHTMLSurface*)linux_side)->KeyUp((HHTMLBrowser)unBrowserHandle, (uint32)nNativeKeyCode, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyChar(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers)
+{
+ ((ISteamHTMLSurface*)linux_side)->KeyChar((HHTMLBrowser)unBrowserHandle, (uint32)cUnicodeChar, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetHorizontalScroll(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetHorizontalScroll((HHTMLBrowser)unBrowserHandle, (uint32)nAbsolutePixelScroll);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetVerticalScroll(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetVerticalScroll((HHTMLBrowser)unBrowserHandle, (uint32)nAbsolutePixelScroll);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetKeyFocus(void *linux_side, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetKeyFocus((HHTMLBrowser)unBrowserHandle, (bool)bHasKeyFocus);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_ViewSource(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->ViewSource((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_CopyToClipboard(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->CopyToClipboard((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_PasteFromClipboard(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->PasteFromClipboard((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Find(void *linux_side, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse)
+{
+ ((ISteamHTMLSurface*)linux_side)->Find((HHTMLBrowser)unBrowserHandle, (const char *)pchSearchStr, (bool)bCurrentlyInFind, (bool)bReverse);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_StopFind(void *linux_side, HHTMLBrowser unBrowserHandle)
+{
+ ((ISteamHTMLSurface*)linux_side)->StopFind((HHTMLBrowser)unBrowserHandle);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_GetLinkAtPosition(void *linux_side, HHTMLBrowser unBrowserHandle, int x, int y)
+{
+ ((ISteamHTMLSurface*)linux_side)->GetLinkAtPosition((HHTMLBrowser)unBrowserHandle, (int)x, (int)y);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetCookie(void *linux_side, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetCookie((const char *)pchHostname, (const char *)pchKey, (const char *)pchValue, (const char *)pchPath, (RTime32)nExpires, (bool)bSecure, (bool)bHTTPOnly);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetPageScaleFactor(void *linux_side, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetPageScaleFactor((HHTMLBrowser)unBrowserHandle, (float)flZoom, (int)nPointX, (int)nPointY);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetBackgroundMode(void *linux_side, HHTMLBrowser unBrowserHandle, bool bBackgroundMode)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetBackgroundMode((HHTMLBrowser)unBrowserHandle, (bool)bBackgroundMode);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetDPIScalingFactor(void *linux_side, HHTMLBrowser unBrowserHandle, float flDPIScaling)
+{
+ ((ISteamHTMLSurface*)linux_side)->SetDPIScalingFactor((HHTMLBrowser)unBrowserHandle, (float)flDPIScaling);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_AllowStartRequest(void *linux_side, HHTMLBrowser unBrowserHandle, bool bAllowed)
+{
+ ((ISteamHTMLSurface*)linux_side)->AllowStartRequest((HHTMLBrowser)unBrowserHandle, (bool)bAllowed);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_JSDialogResponse(void *linux_side, HHTMLBrowser unBrowserHandle, bool bResult)
+{
+ ((ISteamHTMLSurface*)linux_side)->JSDialogResponse((HHTMLBrowser)unBrowserHandle, (bool)bResult);
+}
+
+void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_FileLoadDialogResponse(void *linux_side, HHTMLBrowser unBrowserHandle, const char ** pchSelectedFiles)
+{
+ ((ISteamHTMLSurface*)linux_side)->FileLoadDialogResponse((HHTMLBrowser)unBrowserHandle, (const char **)pchSelectedFiles);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004.h b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004.h
new file mode 100644
index 00000000..ec69f3ba
--- /dev/null
+++ b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004.h
@@ -0,0 +1,42 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Init(void *);
+extern bool cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Shutdown(void *);
+extern SteamAPICall_t cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_CreateBrowser(void *, const char *, const char *);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_RemoveBrowser(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_LoadURL(void *, HHTMLBrowser, const char *, const char *);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetSize(void *, HHTMLBrowser, uint32, uint32);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_StopLoad(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Reload(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_GoBack(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_GoForward(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_AddHeader(void *, HHTMLBrowser, const char *, const char *);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_ExecuteJavascript(void *, HHTMLBrowser, const char *);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseUp(void *, HHTMLBrowser, EHTMLMouseButton);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseDown(void *, HHTMLBrowser, EHTMLMouseButton);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseDoubleClick(void *, HHTMLBrowser, EHTMLMouseButton);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseMove(void *, HHTMLBrowser, int, int);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseWheel(void *, HHTMLBrowser, int32);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyDown(void *, HHTMLBrowser, uint32, EHTMLKeyModifiers);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyUp(void *, HHTMLBrowser, uint32, EHTMLKeyModifiers);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyChar(void *, HHTMLBrowser, uint32, EHTMLKeyModifiers);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetHorizontalScroll(void *, HHTMLBrowser, uint32);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetVerticalScroll(void *, HHTMLBrowser, uint32);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetKeyFocus(void *, HHTMLBrowser, bool);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_ViewSource(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_CopyToClipboard(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_PasteFromClipboard(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Find(void *, HHTMLBrowser, const char *, bool, bool);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_StopFind(void *, HHTMLBrowser);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_GetLinkAtPosition(void *, HHTMLBrowser, int, int);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetCookie(void *, const char *, const char *, const char *, const char *, RTime32, bool, bool);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetPageScaleFactor(void *, HHTMLBrowser, float, int, int);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetBackgroundMode(void *, HHTMLBrowser, bool);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetDPIScalingFactor(void *, HHTMLBrowser, float);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_AllowStartRequest(void *, HHTMLBrowser, bool);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_JSDialogResponse(void *, HHTMLBrowser, bool);
+extern void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_FileLoadDialogResponse(void *, HHTMLBrowser, const char **);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001.cpp b/lsteamclient/cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001.cpp
new file mode 100644
index 00000000..d36cc6f5
--- /dev/null
+++ b/lsteamclient/cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001.cpp
@@ -0,0 +1,85 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_121/steam_api.h"
+#include "cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HTTPRequestHandle cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_CreateHTTPRequest(void *linux_side, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL)
+{
+ return ((ISteamHTTP*)linux_side)->CreateHTTPRequest((EHTTPMethod)eHTTPRequestMethod, (const char *)pchAbsoluteURL);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestContextValue(void *linux_side, HTTPRequestHandle hRequest, uint64 ulContextValue)
+{
+ return ((ISteamHTTP*)linux_side)->SetHTTPRequestContextValue((HTTPRequestHandle)hRequest, (uint64)ulContextValue);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestNetworkActivityTimeout(void *linux_side, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds)
+{
+ return ((ISteamHTTP*)linux_side)->SetHTTPRequestNetworkActivityTimeout((HTTPRequestHandle)hRequest, (uint32)unTimeoutSeconds);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestHeaderValue(void *linux_side, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue)
+{
+ return ((ISteamHTTP*)linux_side)->SetHTTPRequestHeaderValue((HTTPRequestHandle)hRequest, (const char *)pchHeaderName, (const char *)pchHeaderValue);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestGetOrPostParameter(void *linux_side, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue)
+{
+ return ((ISteamHTTP*)linux_side)->SetHTTPRequestGetOrPostParameter((HTTPRequestHandle)hRequest, (const char *)pchParamName, (const char *)pchParamValue);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SendHTTPRequest(void *linux_side, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle)
+{
+ return ((ISteamHTTP*)linux_side)->SendHTTPRequest((HTTPRequestHandle)hRequest, (SteamAPICall_t *)pCallHandle);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_DeferHTTPRequest(void *linux_side, HTTPRequestHandle hRequest)
+{
+ return ((ISteamHTTP*)linux_side)->DeferHTTPRequest((HTTPRequestHandle)hRequest);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_PrioritizeHTTPRequest(void *linux_side, HTTPRequestHandle hRequest)
+{
+ return ((ISteamHTTP*)linux_side)->PrioritizeHTTPRequest((HTTPRequestHandle)hRequest);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseHeaderSize(void *linux_side, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize)
+{
+ return ((ISteamHTTP*)linux_side)->GetHTTPResponseHeaderSize((HTTPRequestHandle)hRequest, (const char *)pchHeaderName, (uint32 *)unResponseHeaderSize);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseHeaderValue(void *linux_side, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize)
+{
+ return ((ISteamHTTP*)linux_side)->GetHTTPResponseHeaderValue((HTTPRequestHandle)hRequest, (const char *)pchHeaderName, (uint8 *)pHeaderValueBuffer, (uint32)unBufferSize);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseBodySize(void *linux_side, HTTPRequestHandle hRequest, uint32 * unBodySize)
+{
+ return ((ISteamHTTP*)linux_side)->GetHTTPResponseBodySize((HTTPRequestHandle)hRequest, (uint32 *)unBodySize);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseBodyData(void *linux_side, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize)
+{
+ return ((ISteamHTTP*)linux_side)->GetHTTPResponseBodyData((HTTPRequestHandle)hRequest, (uint8 *)pBodyDataBuffer, (uint32)unBufferSize);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_ReleaseHTTPRequest(void *linux_side, HTTPRequestHandle hRequest)
+{
+ return ((ISteamHTTP*)linux_side)->ReleaseHTTPRequest((HTTPRequestHandle)hRequest);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPDownloadProgressPct(void *linux_side, HTTPRequestHandle hRequest, float * pflPercentOut)
+{
+ return ((ISteamHTTP*)linux_side)->GetHTTPDownloadProgressPct((HTTPRequestHandle)hRequest, (float *)pflPercentOut);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestRawPostBody(void *linux_side, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen)
+{
+ return ((ISteamHTTP*)linux_side)->SetHTTPRequestRawPostBody((HTTPRequestHandle)hRequest, (const char *)pchContentType, (uint8 *)pubBody, (uint32)unBodyLen);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001.h b/lsteamclient/cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001.h
new file mode 100644
index 00000000..46678289
--- /dev/null
+++ b/lsteamclient/cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001.h
@@ -0,0 +1,21 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HTTPRequestHandle cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_CreateHTTPRequest(void *, EHTTPMethod, const char *);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestContextValue(void *, HTTPRequestHandle, uint64);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestNetworkActivityTimeout(void *, HTTPRequestHandle, uint32);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestHeaderValue(void *, HTTPRequestHandle, const char *, const char *);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestGetOrPostParameter(void *, HTTPRequestHandle, const char *, const char *);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SendHTTPRequest(void *, HTTPRequestHandle, SteamAPICall_t *);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_DeferHTTPRequest(void *, HTTPRequestHandle);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_PrioritizeHTTPRequest(void *, HTTPRequestHandle);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseHeaderSize(void *, HTTPRequestHandle, const char *, uint32 *);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseHeaderValue(void *, HTTPRequestHandle, const char *, uint8 *, uint32);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseBodySize(void *, HTTPRequestHandle, uint32 *);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseBodyData(void *, HTTPRequestHandle, uint8 *, uint32);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_ReleaseHTTPRequest(void *, HTTPRequestHandle);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPDownloadProgressPct(void *, HTTPRequestHandle, float *);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestRawPostBody(void *, HTTPRequestHandle, const char *, uint8 *, uint32);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002.cpp b/lsteamclient/cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002.cpp
new file mode 100644
index 00000000..9b5552f3
--- /dev/null
+++ b/lsteamclient/cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002.cpp
@@ -0,0 +1,135 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HTTPRequestHandle cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_CreateHTTPRequest(void *linux_side, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL)
+{
+ return ((ISteamHTTP*)linux_side)->CreateHTTPRequest((EHTTPMethod)eHTTPRequestMethod, (const char *)pchAbsoluteURL);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestContextValue(void *linux_side, HTTPRequestHandle hRequest, uint64 ulContextValue)
+{
+ return ((ISteamHTTP*)linux_side)->SetHTTPRequestContextValue((HTTPRequestHandle)hRequest, (uint64)ulContextValue);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestNetworkActivityTimeout(void *linux_side, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds)
+{
+ return ((ISteamHTTP*)linux_side)->SetHTTPRequestNetworkActivityTimeout((HTTPRequestHandle)hRequest, (uint32)unTimeoutSeconds);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestHeaderValue(void *linux_side, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue)
+{
+ return ((ISteamHTTP*)linux_side)->SetHTTPRequestHeaderValue((HTTPRequestHandle)hRequest, (const char *)pchHeaderName, (const char *)pchHeaderValue);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestGetOrPostParameter(void *linux_side, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue)
+{
+ return ((ISteamHTTP*)linux_side)->SetHTTPRequestGetOrPostParameter((HTTPRequestHandle)hRequest, (const char *)pchParamName, (const char *)pchParamValue);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SendHTTPRequest(void *linux_side, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle)
+{
+ return ((ISteamHTTP*)linux_side)->SendHTTPRequest((HTTPRequestHandle)hRequest, (SteamAPICall_t *)pCallHandle);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SendHTTPRequestAndStreamResponse(void *linux_side, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle)
+{
+ return ((ISteamHTTP*)linux_side)->SendHTTPRequestAndStreamResponse((HTTPRequestHandle)hRequest, (SteamAPICall_t *)pCallHandle);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_DeferHTTPRequest(void *linux_side, HTTPRequestHandle hRequest)
+{
+ return ((ISteamHTTP*)linux_side)->DeferHTTPRequest((HTTPRequestHandle)hRequest);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_PrioritizeHTTPRequest(void *linux_side, HTTPRequestHandle hRequest)
+{
+ return ((ISteamHTTP*)linux_side)->PrioritizeHTTPRequest((HTTPRequestHandle)hRequest);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseHeaderSize(void *linux_side, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize)
+{
+ return ((ISteamHTTP*)linux_side)->GetHTTPResponseHeaderSize((HTTPRequestHandle)hRequest, (const char *)pchHeaderName, (uint32 *)unResponseHeaderSize);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseHeaderValue(void *linux_side, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize)
+{
+ return ((ISteamHTTP*)linux_side)->GetHTTPResponseHeaderValue((HTTPRequestHandle)hRequest, (const char *)pchHeaderName, (uint8 *)pHeaderValueBuffer, (uint32)unBufferSize);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseBodySize(void *linux_side, HTTPRequestHandle hRequest, uint32 * unBodySize)
+{
+ return ((ISteamHTTP*)linux_side)->GetHTTPResponseBodySize((HTTPRequestHandle)hRequest, (uint32 *)unBodySize);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseBodyData(void *linux_side, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize)
+{
+ return ((ISteamHTTP*)linux_side)->GetHTTPResponseBodyData((HTTPRequestHandle)hRequest, (uint8 *)pBodyDataBuffer, (uint32)unBufferSize);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPStreamingResponseBodyData(void *linux_side, HTTPRequestHandle hRequest, uint32 cOffset, uint8 * pBodyDataBuffer, uint32 unBufferSize)
+{
+ return ((ISteamHTTP*)linux_side)->GetHTTPStreamingResponseBodyData((HTTPRequestHandle)hRequest, (uint32)cOffset, (uint8 *)pBodyDataBuffer, (uint32)unBufferSize);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_ReleaseHTTPRequest(void *linux_side, HTTPRequestHandle hRequest)
+{
+ return ((ISteamHTTP*)linux_side)->ReleaseHTTPRequest((HTTPRequestHandle)hRequest);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPDownloadProgressPct(void *linux_side, HTTPRequestHandle hRequest, float * pflPercentOut)
+{
+ return ((ISteamHTTP*)linux_side)->GetHTTPDownloadProgressPct((HTTPRequestHandle)hRequest, (float *)pflPercentOut);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestRawPostBody(void *linux_side, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen)
+{
+ return ((ISteamHTTP*)linux_side)->SetHTTPRequestRawPostBody((HTTPRequestHandle)hRequest, (const char *)pchContentType, (uint8 *)pubBody, (uint32)unBodyLen);
+}
+
+HTTPCookieContainerHandle cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_CreateCookieContainer(void *linux_side, bool bAllowResponsesToModify)
+{
+ return ((ISteamHTTP*)linux_side)->CreateCookieContainer((bool)bAllowResponsesToModify);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_ReleaseCookieContainer(void *linux_side, HTTPCookieContainerHandle hCookieContainer)
+{
+ return ((ISteamHTTP*)linux_side)->ReleaseCookieContainer((HTTPCookieContainerHandle)hCookieContainer);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetCookie(void *linux_side, HTTPCookieContainerHandle hCookieContainer, const char * pchHost, const char * pchUrl, const char * pchCookie)
+{
+ return ((ISteamHTTP*)linux_side)->SetCookie((HTTPCookieContainerHandle)hCookieContainer, (const char *)pchHost, (const char *)pchUrl, (const char *)pchCookie);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestCookieContainer(void *linux_side, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer)
+{
+ return ((ISteamHTTP*)linux_side)->SetHTTPRequestCookieContainer((HTTPRequestHandle)hRequest, (HTTPCookieContainerHandle)hCookieContainer);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestUserAgentInfo(void *linux_side, HTTPRequestHandle hRequest, const char * pchUserAgentInfo)
+{
+ return ((ISteamHTTP*)linux_side)->SetHTTPRequestUserAgentInfo((HTTPRequestHandle)hRequest, (const char *)pchUserAgentInfo);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestRequiresVerifiedCertificate(void *linux_side, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate)
+{
+ return ((ISteamHTTP*)linux_side)->SetHTTPRequestRequiresVerifiedCertificate((HTTPRequestHandle)hRequest, (bool)bRequireVerifiedCertificate);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestAbsoluteTimeoutMS(void *linux_side, HTTPRequestHandle hRequest, uint32 unMilliseconds)
+{
+ return ((ISteamHTTP*)linux_side)->SetHTTPRequestAbsoluteTimeoutMS((HTTPRequestHandle)hRequest, (uint32)unMilliseconds);
+}
+
+bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPRequestWasTimedOut(void *linux_side, HTTPRequestHandle hRequest, bool * pbWasTimedOut)
+{
+ return ((ISteamHTTP*)linux_side)->GetHTTPRequestWasTimedOut((HTTPRequestHandle)hRequest, (bool *)pbWasTimedOut);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002.h b/lsteamclient/cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002.h
new file mode 100644
index 00000000..79fbf328
--- /dev/null
+++ b/lsteamclient/cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002.h
@@ -0,0 +1,31 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HTTPRequestHandle cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_CreateHTTPRequest(void *, EHTTPMethod, const char *);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestContextValue(void *, HTTPRequestHandle, uint64);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestNetworkActivityTimeout(void *, HTTPRequestHandle, uint32);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestHeaderValue(void *, HTTPRequestHandle, const char *, const char *);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestGetOrPostParameter(void *, HTTPRequestHandle, const char *, const char *);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SendHTTPRequest(void *, HTTPRequestHandle, SteamAPICall_t *);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SendHTTPRequestAndStreamResponse(void *, HTTPRequestHandle, SteamAPICall_t *);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_DeferHTTPRequest(void *, HTTPRequestHandle);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_PrioritizeHTTPRequest(void *, HTTPRequestHandle);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseHeaderSize(void *, HTTPRequestHandle, const char *, uint32 *);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseHeaderValue(void *, HTTPRequestHandle, const char *, uint8 *, uint32);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseBodySize(void *, HTTPRequestHandle, uint32 *);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseBodyData(void *, HTTPRequestHandle, uint8 *, uint32);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPStreamingResponseBodyData(void *, HTTPRequestHandle, uint32, uint8 *, uint32);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_ReleaseHTTPRequest(void *, HTTPRequestHandle);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPDownloadProgressPct(void *, HTTPRequestHandle, float *);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestRawPostBody(void *, HTTPRequestHandle, const char *, uint8 *, uint32);
+extern HTTPCookieContainerHandle cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_CreateCookieContainer(void *, bool);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_ReleaseCookieContainer(void *, HTTPCookieContainerHandle);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetCookie(void *, HTTPCookieContainerHandle, const char *, const char *, const char *);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestCookieContainer(void *, HTTPRequestHandle, HTTPCookieContainerHandle);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestUserAgentInfo(void *, HTTPRequestHandle, const char *);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestRequiresVerifiedCertificate(void *, HTTPRequestHandle, bool);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestAbsoluteTimeoutMS(void *, HTTPRequestHandle, uint32);
+extern bool cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPRequestWasTimedOut(void *, HTTPRequestHandle, bool *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamInventory_STEAMINVENTORY_INTERFACE_V001.cpp b/lsteamclient/cppISteamInventory_STEAMINVENTORY_INTERFACE_V001.cpp
new file mode 100644
index 00000000..10e3729c
--- /dev/null
+++ b/lsteamclient/cppISteamInventory_STEAMINVENTORY_INTERFACE_V001.cpp
@@ -0,0 +1,130 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_139/steam_api.h"
+#include "cppISteamInventory_STEAMINVENTORY_INTERFACE_V001.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+EResult cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetResultStatus(void *linux_side, SteamInventoryResult_t resultHandle)
+{
+ return ((ISteamInventory*)linux_side)->GetResultStatus((SteamInventoryResult_t)resultHandle);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetResultItems(void *linux_side, SteamInventoryResult_t resultHandle, SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize)
+{
+ return ((ISteamInventory*)linux_side)->GetResultItems((SteamInventoryResult_t)resultHandle, (SteamItemDetails_t *)pOutItemsArray, (uint32 *)punOutItemsArraySize);
+}
+
+uint32 cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetResultTimestamp(void *linux_side, SteamInventoryResult_t resultHandle)
+{
+ return ((ISteamInventory*)linux_side)->GetResultTimestamp((SteamInventoryResult_t)resultHandle);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_CheckResultSteamID(void *linux_side, SteamInventoryResult_t resultHandle, CSteamID steamIDExpected)
+{
+ return ((ISteamInventory*)linux_side)->CheckResultSteamID((SteamInventoryResult_t)resultHandle, (CSteamID)steamIDExpected);
+}
+
+void cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_DestroyResult(void *linux_side, SteamInventoryResult_t resultHandle)
+{
+ ((ISteamInventory*)linux_side)->DestroyResult((SteamInventoryResult_t)resultHandle);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetAllItems(void *linux_side, SteamInventoryResult_t * pResultHandle)
+{
+ return ((ISteamInventory*)linux_side)->GetAllItems((SteamInventoryResult_t *)pResultHandle);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetItemsByID(void *linux_side, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs)
+{
+ return ((ISteamInventory*)linux_side)->GetItemsByID((SteamInventoryResult_t *)pResultHandle, (const SteamItemInstanceID_t *)pInstanceIDs, (uint32)unCountInstanceIDs);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_SerializeResult(void *linux_side, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize)
+{
+ return ((ISteamInventory*)linux_side)->SerializeResult((SteamInventoryResult_t)resultHandle, (void *)pOutBuffer, (uint32 *)punOutBufferSize);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_DeserializeResult(void *linux_side, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE)
+{
+ return ((ISteamInventory*)linux_side)->DeserializeResult((SteamInventoryResult_t *)pOutResultHandle, (const void *)pBuffer, (uint32)unBufferSize, (bool)bRESERVED_MUST_BE_FALSE);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GenerateItems(void *linux_side, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength)
+{
+ return ((ISteamInventory*)linux_side)->GenerateItems((SteamInventoryResult_t *)pResultHandle, (const SteamItemDef_t *)pArrayItemDefs, (const uint32 *)punArrayQuantity, (uint32)unArrayLength);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GrantPromoItems(void *linux_side, SteamInventoryResult_t * pResultHandle)
+{
+ return ((ISteamInventory*)linux_side)->GrantPromoItems((SteamInventoryResult_t *)pResultHandle);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_AddPromoItem(void *linux_side, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef)
+{
+ return ((ISteamInventory*)linux_side)->AddPromoItem((SteamInventoryResult_t *)pResultHandle, (SteamItemDef_t)itemDef);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_AddPromoItems(void *linux_side, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength)
+{
+ return ((ISteamInventory*)linux_side)->AddPromoItems((SteamInventoryResult_t *)pResultHandle, (const SteamItemDef_t *)pArrayItemDefs, (uint32)unArrayLength);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_ConsumeItem(void *linux_side, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity)
+{
+ return ((ISteamInventory*)linux_side)->ConsumeItem((SteamInventoryResult_t *)pResultHandle, (SteamItemInstanceID_t)itemConsume, (uint32)unQuantity);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_ExchangeItems(void *linux_side, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength)
+{
+ return ((ISteamInventory*)linux_side)->ExchangeItems((SteamInventoryResult_t *)pResultHandle, (const SteamItemDef_t *)pArrayGenerate, (const uint32 *)punArrayGenerateQuantity, (uint32)unArrayGenerateLength, (const SteamItemInstanceID_t *)pArrayDestroy, (const uint32 *)punArrayDestroyQuantity, (uint32)unArrayDestroyLength);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_TransferItemQuantity(void *linux_side, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest)
+{
+ return ((ISteamInventory*)linux_side)->TransferItemQuantity((SteamInventoryResult_t *)pResultHandle, (SteamItemInstanceID_t)itemIdSource, (uint32)unQuantity, (SteamItemInstanceID_t)itemIdDest);
+}
+
+void cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_SendItemDropHeartbeat(void *linux_side)
+{
+ ((ISteamInventory*)linux_side)->SendItemDropHeartbeat();
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_TriggerItemDrop(void *linux_side, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition)
+{
+ return ((ISteamInventory*)linux_side)->TriggerItemDrop((SteamInventoryResult_t *)pResultHandle, (SteamItemDef_t)dropListDefinition);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_TradeItems(void *linux_side, SteamInventoryResult_t * pResultHandle, CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength)
+{
+ return ((ISteamInventory*)linux_side)->TradeItems((SteamInventoryResult_t *)pResultHandle, (CSteamID)steamIDTradePartner, (const SteamItemInstanceID_t *)pArrayGive, (const uint32 *)pArrayGiveQuantity, (uint32)nArrayGiveLength, (const SteamItemInstanceID_t *)pArrayGet, (const uint32 *)pArrayGetQuantity, (uint32)nArrayGetLength);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_LoadItemDefinitions(void *linux_side)
+{
+ return ((ISteamInventory*)linux_side)->LoadItemDefinitions();
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetItemDefinitionIDs(void *linux_side, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize)
+{
+ return ((ISteamInventory*)linux_side)->GetItemDefinitionIDs((SteamItemDef_t *)pItemDefIDs, (uint32 *)punItemDefIDsArraySize);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetItemDefinitionProperty(void *linux_side, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSizeOut)
+{
+ return ((ISteamInventory*)linux_side)->GetItemDefinitionProperty((SteamItemDef_t)iDefinition, (const char *)pchPropertyName, (char *)pchValueBuffer, (uint32 *)punValueBufferSizeOut);
+}
+
+SteamAPICall_t cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_RequestEligiblePromoItemDefinitionsIDs(void *linux_side, CSteamID steamID)
+{
+ return ((ISteamInventory*)linux_side)->RequestEligiblePromoItemDefinitionsIDs((CSteamID)steamID);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetEligiblePromoItemDefinitionIDs(void *linux_side, CSteamID steamID, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize)
+{
+ return ((ISteamInventory*)linux_side)->GetEligiblePromoItemDefinitionIDs((CSteamID)steamID, (SteamItemDef_t *)pItemDefIDs, (uint32 *)punItemDefIDsArraySize);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamInventory_STEAMINVENTORY_INTERFACE_V001.h b/lsteamclient/cppISteamInventory_STEAMINVENTORY_INTERFACE_V001.h
new file mode 100644
index 00000000..e8251cb7
--- /dev/null
+++ b/lsteamclient/cppISteamInventory_STEAMINVENTORY_INTERFACE_V001.h
@@ -0,0 +1,30 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern EResult cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetResultStatus(void *, SteamInventoryResult_t);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetResultItems(void *, SteamInventoryResult_t, SteamItemDetails_t *, uint32 *);
+extern uint32 cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetResultTimestamp(void *, SteamInventoryResult_t);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_CheckResultSteamID(void *, SteamInventoryResult_t, CSteamID);
+extern void cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_DestroyResult(void *, SteamInventoryResult_t);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetAllItems(void *, SteamInventoryResult_t *);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetItemsByID(void *, SteamInventoryResult_t *, const SteamItemInstanceID_t *, uint32);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_SerializeResult(void *, SteamInventoryResult_t, void *, uint32 *);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_DeserializeResult(void *, SteamInventoryResult_t *, const void *, uint32, bool);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GenerateItems(void *, SteamInventoryResult_t *, const SteamItemDef_t *, const uint32 *, uint32);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GrantPromoItems(void *, SteamInventoryResult_t *);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_AddPromoItem(void *, SteamInventoryResult_t *, SteamItemDef_t);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_AddPromoItems(void *, SteamInventoryResult_t *, const SteamItemDef_t *, uint32);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_ConsumeItem(void *, SteamInventoryResult_t *, SteamItemInstanceID_t, uint32);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_ExchangeItems(void *, SteamInventoryResult_t *, const SteamItemDef_t *, const uint32 *, uint32, const SteamItemInstanceID_t *, const uint32 *, uint32);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_TransferItemQuantity(void *, SteamInventoryResult_t *, SteamItemInstanceID_t, uint32, SteamItemInstanceID_t);
+extern void cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_SendItemDropHeartbeat(void *);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_TriggerItemDrop(void *, SteamInventoryResult_t *, SteamItemDef_t);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_TradeItems(void *, SteamInventoryResult_t *, CSteamID, const SteamItemInstanceID_t *, const uint32 *, uint32, const SteamItemInstanceID_t *, const uint32 *, uint32);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_LoadItemDefinitions(void *);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetItemDefinitionIDs(void *, SteamItemDef_t *, uint32 *);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetItemDefinitionProperty(void *, SteamItemDef_t, const char *, char *, uint32 *);
+extern SteamAPICall_t cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_RequestEligiblePromoItemDefinitionsIDs(void *, CSteamID);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetEligiblePromoItemDefinitionIDs(void *, CSteamID, SteamItemDef_t *, uint32 *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamInventory_STEAMINVENTORY_INTERFACE_V002.cpp b/lsteamclient/cppISteamInventory_STEAMINVENTORY_INTERFACE_V002.cpp
new file mode 100644
index 00000000..ef2565e3
--- /dev/null
+++ b/lsteamclient/cppISteamInventory_STEAMINVENTORY_INTERFACE_V002.cpp
@@ -0,0 +1,195 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamInventory_STEAMINVENTORY_INTERFACE_V002.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+EResult cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultStatus(void *linux_side, SteamInventoryResult_t resultHandle)
+{
+ return ((ISteamInventory*)linux_side)->GetResultStatus((SteamInventoryResult_t)resultHandle);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultItems(void *linux_side, SteamInventoryResult_t resultHandle, SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize)
+{
+ return ((ISteamInventory*)linux_side)->GetResultItems((SteamInventoryResult_t)resultHandle, (SteamItemDetails_t *)pOutItemsArray, (uint32 *)punOutItemsArraySize);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultItemProperty(void *linux_side, SteamInventoryResult_t resultHandle, uint32 unItemIndex, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSizeOut)
+{
+ return ((ISteamInventory*)linux_side)->GetResultItemProperty((SteamInventoryResult_t)resultHandle, (uint32)unItemIndex, (const char *)pchPropertyName, (char *)pchValueBuffer, (uint32 *)punValueBufferSizeOut);
+}
+
+uint32 cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultTimestamp(void *linux_side, SteamInventoryResult_t resultHandle)
+{
+ return ((ISteamInventory*)linux_side)->GetResultTimestamp((SteamInventoryResult_t)resultHandle);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_CheckResultSteamID(void *linux_side, SteamInventoryResult_t resultHandle, CSteamID steamIDExpected)
+{
+ return ((ISteamInventory*)linux_side)->CheckResultSteamID((SteamInventoryResult_t)resultHandle, (CSteamID)steamIDExpected);
+}
+
+void cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_DestroyResult(void *linux_side, SteamInventoryResult_t resultHandle)
+{
+ ((ISteamInventory*)linux_side)->DestroyResult((SteamInventoryResult_t)resultHandle);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetAllItems(void *linux_side, SteamInventoryResult_t * pResultHandle)
+{
+ return ((ISteamInventory*)linux_side)->GetAllItems((SteamInventoryResult_t *)pResultHandle);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemsByID(void *linux_side, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs)
+{
+ return ((ISteamInventory*)linux_side)->GetItemsByID((SteamInventoryResult_t *)pResultHandle, (const SteamItemInstanceID_t *)pInstanceIDs, (uint32)unCountInstanceIDs);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SerializeResult(void *linux_side, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize)
+{
+ return ((ISteamInventory*)linux_side)->SerializeResult((SteamInventoryResult_t)resultHandle, (void *)pOutBuffer, (uint32 *)punOutBufferSize);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_DeserializeResult(void *linux_side, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE)
+{
+ return ((ISteamInventory*)linux_side)->DeserializeResult((SteamInventoryResult_t *)pOutResultHandle, (const void *)pBuffer, (uint32)unBufferSize, (bool)bRESERVED_MUST_BE_FALSE);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GenerateItems(void *linux_side, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength)
+{
+ return ((ISteamInventory*)linux_side)->GenerateItems((SteamInventoryResult_t *)pResultHandle, (const SteamItemDef_t *)pArrayItemDefs, (const uint32 *)punArrayQuantity, (uint32)unArrayLength);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GrantPromoItems(void *linux_side, SteamInventoryResult_t * pResultHandle)
+{
+ return ((ISteamInventory*)linux_side)->GrantPromoItems((SteamInventoryResult_t *)pResultHandle);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_AddPromoItem(void *linux_side, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef)
+{
+ return ((ISteamInventory*)linux_side)->AddPromoItem((SteamInventoryResult_t *)pResultHandle, (SteamItemDef_t)itemDef);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_AddPromoItems(void *linux_side, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength)
+{
+ return ((ISteamInventory*)linux_side)->AddPromoItems((SteamInventoryResult_t *)pResultHandle, (const SteamItemDef_t *)pArrayItemDefs, (uint32)unArrayLength);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_ConsumeItem(void *linux_side, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity)
+{
+ return ((ISteamInventory*)linux_side)->ConsumeItem((SteamInventoryResult_t *)pResultHandle, (SteamItemInstanceID_t)itemConsume, (uint32)unQuantity);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_ExchangeItems(void *linux_side, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength)
+{
+ return ((ISteamInventory*)linux_side)->ExchangeItems((SteamInventoryResult_t *)pResultHandle, (const SteamItemDef_t *)pArrayGenerate, (const uint32 *)punArrayGenerateQuantity, (uint32)unArrayGenerateLength, (const SteamItemInstanceID_t *)pArrayDestroy, (const uint32 *)punArrayDestroyQuantity, (uint32)unArrayDestroyLength);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_TransferItemQuantity(void *linux_side, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest)
+{
+ return ((ISteamInventory*)linux_side)->TransferItemQuantity((SteamInventoryResult_t *)pResultHandle, (SteamItemInstanceID_t)itemIdSource, (uint32)unQuantity, (SteamItemInstanceID_t)itemIdDest);
+}
+
+void cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SendItemDropHeartbeat(void *linux_side)
+{
+ ((ISteamInventory*)linux_side)->SendItemDropHeartbeat();
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_TriggerItemDrop(void *linux_side, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition)
+{
+ return ((ISteamInventory*)linux_side)->TriggerItemDrop((SteamInventoryResult_t *)pResultHandle, (SteamItemDef_t)dropListDefinition);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_TradeItems(void *linux_side, SteamInventoryResult_t * pResultHandle, CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength)
+{
+ return ((ISteamInventory*)linux_side)->TradeItems((SteamInventoryResult_t *)pResultHandle, (CSteamID)steamIDTradePartner, (const SteamItemInstanceID_t *)pArrayGive, (const uint32 *)pArrayGiveQuantity, (uint32)nArrayGiveLength, (const SteamItemInstanceID_t *)pArrayGet, (const uint32 *)pArrayGetQuantity, (uint32)nArrayGetLength);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_LoadItemDefinitions(void *linux_side)
+{
+ return ((ISteamInventory*)linux_side)->LoadItemDefinitions();
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemDefinitionIDs(void *linux_side, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize)
+{
+ return ((ISteamInventory*)linux_side)->GetItemDefinitionIDs((SteamItemDef_t *)pItemDefIDs, (uint32 *)punItemDefIDsArraySize);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemDefinitionProperty(void *linux_side, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSizeOut)
+{
+ return ((ISteamInventory*)linux_side)->GetItemDefinitionProperty((SteamItemDef_t)iDefinition, (const char *)pchPropertyName, (char *)pchValueBuffer, (uint32 *)punValueBufferSizeOut);
+}
+
+SteamAPICall_t cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_RequestEligiblePromoItemDefinitionsIDs(void *linux_side, CSteamID steamID)
+{
+ return ((ISteamInventory*)linux_side)->RequestEligiblePromoItemDefinitionsIDs((CSteamID)steamID);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetEligiblePromoItemDefinitionIDs(void *linux_side, CSteamID steamID, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize)
+{
+ return ((ISteamInventory*)linux_side)->GetEligiblePromoItemDefinitionIDs((CSteamID)steamID, (SteamItemDef_t *)pItemDefIDs, (uint32 *)punItemDefIDsArraySize);
+}
+
+SteamAPICall_t cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_StartPurchase(void *linux_side, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength)
+{
+ return ((ISteamInventory*)linux_side)->StartPurchase((const SteamItemDef_t *)pArrayItemDefs, (const uint32 *)punArrayQuantity, (uint32)unArrayLength);
+}
+
+SteamAPICall_t cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_RequestPrices(void *linux_side)
+{
+ return ((ISteamInventory*)linux_side)->RequestPrices();
+}
+
+uint32 cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetNumItemsWithPrices(void *linux_side)
+{
+ return ((ISteamInventory*)linux_side)->GetNumItemsWithPrices();
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemsWithPrices(void *linux_side, SteamItemDef_t * pArrayItemDefs, uint64 * pPrices, uint32 unArrayLength)
+{
+ return ((ISteamInventory*)linux_side)->GetItemsWithPrices((SteamItemDef_t *)pArrayItemDefs, (uint64 *)pPrices, (uint32)unArrayLength);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemPrice(void *linux_side, SteamItemDef_t iDefinition, uint64 * pPrice)
+{
+ return ((ISteamInventory*)linux_side)->GetItemPrice((SteamItemDef_t)iDefinition, (uint64 *)pPrice);
+}
+
+SteamInventoryUpdateHandle_t cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_StartUpdateProperties(void *linux_side)
+{
+ return ((ISteamInventory*)linux_side)->StartUpdateProperties();
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_RemoveProperty(void *linux_side, SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char * pchPropertyName)
+{
+ return ((ISteamInventory*)linux_side)->RemoveProperty((SteamInventoryUpdateHandle_t)handle, (SteamItemInstanceID_t)nItemID, (const char *)pchPropertyName);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty(void *linux_side, SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char * pchPropertyName, const char * pchPropertyValue)
+{
+ return ((ISteamInventory*)linux_side)->SetProperty((SteamInventoryUpdateHandle_t)handle, (SteamItemInstanceID_t)nItemID, (const char *)pchPropertyName, (const char *)pchPropertyValue);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty_2(void *linux_side, SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char * pchPropertyName, bool bValue)
+{
+ return ((ISteamInventory*)linux_side)->SetProperty((SteamInventoryUpdateHandle_t)handle, (SteamItemInstanceID_t)nItemID, (const char *)pchPropertyName, (bool)bValue);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty_3(void *linux_side, SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char * pchPropertyName, int64 nValue)
+{
+ return ((ISteamInventory*)linux_side)->SetProperty((SteamInventoryUpdateHandle_t)handle, (SteamItemInstanceID_t)nItemID, (const char *)pchPropertyName, (int64)nValue);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty_4(void *linux_side, SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char * pchPropertyName, float flValue)
+{
+ return ((ISteamInventory*)linux_side)->SetProperty((SteamInventoryUpdateHandle_t)handle, (SteamItemInstanceID_t)nItemID, (const char *)pchPropertyName, (float)flValue);
+}
+
+bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SubmitUpdateProperties(void *linux_side, SteamInventoryUpdateHandle_t handle, SteamInventoryResult_t * pResultHandle)
+{
+ return ((ISteamInventory*)linux_side)->SubmitUpdateProperties((SteamInventoryUpdateHandle_t)handle, (SteamInventoryResult_t *)pResultHandle);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamInventory_STEAMINVENTORY_INTERFACE_V002.h b/lsteamclient/cppISteamInventory_STEAMINVENTORY_INTERFACE_V002.h
new file mode 100644
index 00000000..dfaa68a3
--- /dev/null
+++ b/lsteamclient/cppISteamInventory_STEAMINVENTORY_INTERFACE_V002.h
@@ -0,0 +1,43 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern EResult cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultStatus(void *, SteamInventoryResult_t);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultItems(void *, SteamInventoryResult_t, SteamItemDetails_t *, uint32 *);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultItemProperty(void *, SteamInventoryResult_t, uint32, const char *, char *, uint32 *);
+extern uint32 cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultTimestamp(void *, SteamInventoryResult_t);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_CheckResultSteamID(void *, SteamInventoryResult_t, CSteamID);
+extern void cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_DestroyResult(void *, SteamInventoryResult_t);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetAllItems(void *, SteamInventoryResult_t *);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemsByID(void *, SteamInventoryResult_t *, const SteamItemInstanceID_t *, uint32);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SerializeResult(void *, SteamInventoryResult_t, void *, uint32 *);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_DeserializeResult(void *, SteamInventoryResult_t *, const void *, uint32, bool);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GenerateItems(void *, SteamInventoryResult_t *, const SteamItemDef_t *, const uint32 *, uint32);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GrantPromoItems(void *, SteamInventoryResult_t *);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_AddPromoItem(void *, SteamInventoryResult_t *, SteamItemDef_t);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_AddPromoItems(void *, SteamInventoryResult_t *, const SteamItemDef_t *, uint32);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_ConsumeItem(void *, SteamInventoryResult_t *, SteamItemInstanceID_t, uint32);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_ExchangeItems(void *, SteamInventoryResult_t *, const SteamItemDef_t *, const uint32 *, uint32, const SteamItemInstanceID_t *, const uint32 *, uint32);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_TransferItemQuantity(void *, SteamInventoryResult_t *, SteamItemInstanceID_t, uint32, SteamItemInstanceID_t);
+extern void cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SendItemDropHeartbeat(void *);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_TriggerItemDrop(void *, SteamInventoryResult_t *, SteamItemDef_t);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_TradeItems(void *, SteamInventoryResult_t *, CSteamID, const SteamItemInstanceID_t *, const uint32 *, uint32, const SteamItemInstanceID_t *, const uint32 *, uint32);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_LoadItemDefinitions(void *);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemDefinitionIDs(void *, SteamItemDef_t *, uint32 *);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemDefinitionProperty(void *, SteamItemDef_t, const char *, char *, uint32 *);
+extern SteamAPICall_t cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_RequestEligiblePromoItemDefinitionsIDs(void *, CSteamID);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetEligiblePromoItemDefinitionIDs(void *, CSteamID, SteamItemDef_t *, uint32 *);
+extern SteamAPICall_t cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_StartPurchase(void *, const SteamItemDef_t *, const uint32 *, uint32);
+extern SteamAPICall_t cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_RequestPrices(void *);
+extern uint32 cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetNumItemsWithPrices(void *);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemsWithPrices(void *, SteamItemDef_t *, uint64 *, uint32);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemPrice(void *, SteamItemDef_t, uint64 *);
+extern SteamInventoryUpdateHandle_t cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_StartUpdateProperties(void *);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_RemoveProperty(void *, SteamInventoryUpdateHandle_t, SteamItemInstanceID_t, const char *);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty(void *, SteamInventoryUpdateHandle_t, SteamItemInstanceID_t, const char *, const char *);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty_2(void *, SteamInventoryUpdateHandle_t, SteamItemInstanceID_t, const char *, bool);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty_3(void *, SteamInventoryUpdateHandle_t, SteamItemInstanceID_t, const char *, int64);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty_4(void *, SteamInventoryUpdateHandle_t, SteamItemInstanceID_t, const char *, float);
+extern bool cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SubmitUpdateProperties(void *, SteamInventoryUpdateHandle_t, SteamInventoryResult_t *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMasterServerUpdater_SteamMasterServerUpdater001.cpp b/lsteamclient/cppISteamMasterServerUpdater_SteamMasterServerUpdater001.cpp
new file mode 100644
index 00000000..ad8af6ee
--- /dev/null
+++ b/lsteamclient/cppISteamMasterServerUpdater_SteamMasterServerUpdater001.cpp
@@ -0,0 +1,81 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_116/steam_api.h"
+#include "steamworks_sdk_116/isteammasterserverupdater.h"
+#include "cppISteamMasterServerUpdater_SteamMasterServerUpdater001.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+void cppISteamMasterServerUpdater_SteamMasterServerUpdater001_SetActive(void *linux_side, bool bActive)
+{
+ ((ISteamMasterServerUpdater*)linux_side)->SetActive((bool)bActive);
+}
+
+void cppISteamMasterServerUpdater_SteamMasterServerUpdater001_SetHeartbeatInterval(void *linux_side, int iHeartbeatInterval)
+{
+ ((ISteamMasterServerUpdater*)linux_side)->SetHeartbeatInterval((int)iHeartbeatInterval);
+}
+
+bool cppISteamMasterServerUpdater_SteamMasterServerUpdater001_HandleIncomingPacket(void *linux_side, const void * pData, int cbData, uint32 srcIP, uint16 srcPort)
+{
+ return ((ISteamMasterServerUpdater*)linux_side)->HandleIncomingPacket((const void *)pData, (int)cbData, (uint32)srcIP, (uint16)srcPort);
+}
+
+int cppISteamMasterServerUpdater_SteamMasterServerUpdater001_GetNextOutgoingPacket(void *linux_side, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort)
+{
+ return ((ISteamMasterServerUpdater*)linux_side)->GetNextOutgoingPacket((void *)pOut, (int)cbMaxOut, (uint32 *)pNetAdr, (uint16 *)pPort);
+}
+
+void cppISteamMasterServerUpdater_SteamMasterServerUpdater001_SetBasicServerData(void *linux_side, unsigned short nProtocolVersion, bool bDedicatedServer, const char * pRegionName, const char * pProductName, unsigned short nMaxReportedClients, bool bPasswordProtected, const char * pGameDescription)
+{
+ ((ISteamMasterServerUpdater*)linux_side)->SetBasicServerData((unsigned short)nProtocolVersion, (bool)bDedicatedServer, (const char *)pRegionName, (const char *)pProductName, (unsigned short)nMaxReportedClients, (bool)bPasswordProtected, (const char *)pGameDescription);
+}
+
+void cppISteamMasterServerUpdater_SteamMasterServerUpdater001_ClearAllKeyValues(void *linux_side)
+{
+ ((ISteamMasterServerUpdater*)linux_side)->ClearAllKeyValues();
+}
+
+void cppISteamMasterServerUpdater_SteamMasterServerUpdater001_SetKeyValue(void *linux_side, const char * pKey, const char * pValue)
+{
+ ((ISteamMasterServerUpdater*)linux_side)->SetKeyValue((const char *)pKey, (const char *)pValue);
+}
+
+void cppISteamMasterServerUpdater_SteamMasterServerUpdater001_NotifyShutdown(void *linux_side)
+{
+ ((ISteamMasterServerUpdater*)linux_side)->NotifyShutdown();
+}
+
+bool cppISteamMasterServerUpdater_SteamMasterServerUpdater001_WasRestartRequested(void *linux_side)
+{
+ return ((ISteamMasterServerUpdater*)linux_side)->WasRestartRequested();
+}
+
+void cppISteamMasterServerUpdater_SteamMasterServerUpdater001_ForceHeartbeat(void *linux_side)
+{
+ ((ISteamMasterServerUpdater*)linux_side)->ForceHeartbeat();
+}
+
+bool cppISteamMasterServerUpdater_SteamMasterServerUpdater001_AddMasterServer(void *linux_side, const char * pServerAddress)
+{
+ return ((ISteamMasterServerUpdater*)linux_side)->AddMasterServer((const char *)pServerAddress);
+}
+
+bool cppISteamMasterServerUpdater_SteamMasterServerUpdater001_RemoveMasterServer(void *linux_side, const char * pServerAddress)
+{
+ return ((ISteamMasterServerUpdater*)linux_side)->RemoveMasterServer((const char *)pServerAddress);
+}
+
+int cppISteamMasterServerUpdater_SteamMasterServerUpdater001_GetNumMasterServers(void *linux_side)
+{
+ return ((ISteamMasterServerUpdater*)linux_side)->GetNumMasterServers();
+}
+
+int cppISteamMasterServerUpdater_SteamMasterServerUpdater001_GetMasterServerAddress(void *linux_side, int iServer, char * pOut, int outBufferSize)
+{
+ return ((ISteamMasterServerUpdater*)linux_side)->GetMasterServerAddress((int)iServer, (char *)pOut, (int)outBufferSize);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMasterServerUpdater_SteamMasterServerUpdater001.h b/lsteamclient/cppISteamMasterServerUpdater_SteamMasterServerUpdater001.h
new file mode 100644
index 00000000..58e60b1a
--- /dev/null
+++ b/lsteamclient/cppISteamMasterServerUpdater_SteamMasterServerUpdater001.h
@@ -0,0 +1,20 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern void cppISteamMasterServerUpdater_SteamMasterServerUpdater001_SetActive(void *, bool);
+extern void cppISteamMasterServerUpdater_SteamMasterServerUpdater001_SetHeartbeatInterval(void *, int);
+extern bool cppISteamMasterServerUpdater_SteamMasterServerUpdater001_HandleIncomingPacket(void *, const void *, int, uint32, uint16);
+extern int cppISteamMasterServerUpdater_SteamMasterServerUpdater001_GetNextOutgoingPacket(void *, void *, int, uint32 *, uint16 *);
+extern void cppISteamMasterServerUpdater_SteamMasterServerUpdater001_SetBasicServerData(void *, unsigned short, bool, const char *, const char *, unsigned short, bool, const char *);
+extern void cppISteamMasterServerUpdater_SteamMasterServerUpdater001_ClearAllKeyValues(void *);
+extern void cppISteamMasterServerUpdater_SteamMasterServerUpdater001_SetKeyValue(void *, const char *, const char *);
+extern void cppISteamMasterServerUpdater_SteamMasterServerUpdater001_NotifyShutdown(void *);
+extern bool cppISteamMasterServerUpdater_SteamMasterServerUpdater001_WasRestartRequested(void *);
+extern void cppISteamMasterServerUpdater_SteamMasterServerUpdater001_ForceHeartbeat(void *);
+extern bool cppISteamMasterServerUpdater_SteamMasterServerUpdater001_AddMasterServer(void *, const char *);
+extern bool cppISteamMasterServerUpdater_SteamMasterServerUpdater001_RemoveMasterServer(void *, const char *);
+extern int cppISteamMasterServerUpdater_SteamMasterServerUpdater001_GetNumMasterServers(void *);
+extern int cppISteamMasterServerUpdater_SteamMasterServerUpdater001_GetMasterServerAddress(void *, int, char *, int);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers001.cpp b/lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers001.cpp
new file mode 100644
index 00000000..2175312d
--- /dev/null
+++ b/lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers001.cpp
@@ -0,0 +1,90 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_105/steam_api.h"
+#include "cppISteamMatchmakingServers_SteamMatchMakingServers001.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+void cppISteamMatchmakingServers_SteamMatchMakingServers001_RequestInternetServerList(void *linux_side, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ ((ISteamMatchmakingServers*)linux_side)->RequestInternetServerList((AppId_t)iApp, (MatchMakingKeyValuePair_t **)ppchFilters, (uint32)nFilters, (ISteamMatchmakingServerListResponse *)pRequestServersResponse);
+}
+
+void cppISteamMatchmakingServers_SteamMatchMakingServers001_RequestLANServerList(void *linux_side, AppId_t iApp, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ ((ISteamMatchmakingServers*)linux_side)->RequestLANServerList((AppId_t)iApp, (ISteamMatchmakingServerListResponse *)pRequestServersResponse);
+}
+
+void cppISteamMatchmakingServers_SteamMatchMakingServers001_RequestFriendsServerList(void *linux_side, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ ((ISteamMatchmakingServers*)linux_side)->RequestFriendsServerList((AppId_t)iApp, (MatchMakingKeyValuePair_t **)ppchFilters, (uint32)nFilters, (ISteamMatchmakingServerListResponse *)pRequestServersResponse);
+}
+
+void cppISteamMatchmakingServers_SteamMatchMakingServers001_RequestFavoritesServerList(void *linux_side, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ ((ISteamMatchmakingServers*)linux_side)->RequestFavoritesServerList((AppId_t)iApp, (MatchMakingKeyValuePair_t **)ppchFilters, (uint32)nFilters, (ISteamMatchmakingServerListResponse *)pRequestServersResponse);
+}
+
+void cppISteamMatchmakingServers_SteamMatchMakingServers001_RequestHistoryServerList(void *linux_side, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ ((ISteamMatchmakingServers*)linux_side)->RequestHistoryServerList((AppId_t)iApp, (MatchMakingKeyValuePair_t **)ppchFilters, (uint32)nFilters, (ISteamMatchmakingServerListResponse *)pRequestServersResponse);
+}
+
+void cppISteamMatchmakingServers_SteamMatchMakingServers001_RequestSpectatorServerList(void *linux_side, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ ((ISteamMatchmakingServers*)linux_side)->RequestSpectatorServerList((AppId_t)iApp, (MatchMakingKeyValuePair_t **)ppchFilters, (uint32)nFilters, (ISteamMatchmakingServerListResponse *)pRequestServersResponse);
+}
+
+gameserveritem_t * cppISteamMatchmakingServers_SteamMatchMakingServers001_GetServerDetails(void *linux_side, EMatchMakingType eType, int iServer)
+{
+ return ((ISteamMatchmakingServers*)linux_side)->GetServerDetails((EMatchMakingType)eType, (int)iServer);
+}
+
+void cppISteamMatchmakingServers_SteamMatchMakingServers001_CancelQuery(void *linux_side, EMatchMakingType eType)
+{
+ ((ISteamMatchmakingServers*)linux_side)->CancelQuery((EMatchMakingType)eType);
+}
+
+void cppISteamMatchmakingServers_SteamMatchMakingServers001_RefreshQuery(void *linux_side, EMatchMakingType eType)
+{
+ ((ISteamMatchmakingServers*)linux_side)->RefreshQuery((EMatchMakingType)eType);
+}
+
+bool cppISteamMatchmakingServers_SteamMatchMakingServers001_IsRefreshing(void *linux_side, EMatchMakingType eType)
+{
+ return ((ISteamMatchmakingServers*)linux_side)->IsRefreshing((EMatchMakingType)eType);
+}
+
+int cppISteamMatchmakingServers_SteamMatchMakingServers001_GetServerCount(void *linux_side, EMatchMakingType eType)
+{
+ return ((ISteamMatchmakingServers*)linux_side)->GetServerCount((EMatchMakingType)eType);
+}
+
+void cppISteamMatchmakingServers_SteamMatchMakingServers001_RefreshServer(void *linux_side, EMatchMakingType eType, int iServer)
+{
+ ((ISteamMatchmakingServers*)linux_side)->RefreshServer((EMatchMakingType)eType, (int)iServer);
+}
+
+HServerQuery cppISteamMatchmakingServers_SteamMatchMakingServers001_PingServer(void *linux_side, uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse * pRequestServersResponse)
+{
+ return ((ISteamMatchmakingServers*)linux_side)->PingServer((uint32)unIP, (uint16)usPort, (ISteamMatchmakingPingResponse *)pRequestServersResponse);
+}
+
+HServerQuery cppISteamMatchmakingServers_SteamMatchMakingServers001_PlayerDetails(void *linux_side, uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse * pRequestServersResponse)
+{
+ return ((ISteamMatchmakingServers*)linux_side)->PlayerDetails((uint32)unIP, (uint16)usPort, (ISteamMatchmakingPlayersResponse *)pRequestServersResponse);
+}
+
+HServerQuery cppISteamMatchmakingServers_SteamMatchMakingServers001_ServerRules(void *linux_side, uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse * pRequestServersResponse)
+{
+ return ((ISteamMatchmakingServers*)linux_side)->ServerRules((uint32)unIP, (uint16)usPort, (ISteamMatchmakingRulesResponse *)pRequestServersResponse);
+}
+
+void cppISteamMatchmakingServers_SteamMatchMakingServers001_CancelServerQuery(void *linux_side, HServerQuery hServerQuery)
+{
+ ((ISteamMatchmakingServers*)linux_side)->CancelServerQuery((HServerQuery)hServerQuery);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers001.h b/lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers001.h
new file mode 100644
index 00000000..4010ba30
--- /dev/null
+++ b/lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers001.h
@@ -0,0 +1,22 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern void cppISteamMatchmakingServers_SteamMatchMakingServers001_RequestInternetServerList(void *, AppId_t, MatchMakingKeyValuePair_t **, uint32, ISteamMatchmakingServerListResponse *);
+extern void cppISteamMatchmakingServers_SteamMatchMakingServers001_RequestLANServerList(void *, AppId_t, ISteamMatchmakingServerListResponse *);
+extern void cppISteamMatchmakingServers_SteamMatchMakingServers001_RequestFriendsServerList(void *, AppId_t, MatchMakingKeyValuePair_t **, uint32, ISteamMatchmakingServerListResponse *);
+extern void cppISteamMatchmakingServers_SteamMatchMakingServers001_RequestFavoritesServerList(void *, AppId_t, MatchMakingKeyValuePair_t **, uint32, ISteamMatchmakingServerListResponse *);
+extern void cppISteamMatchmakingServers_SteamMatchMakingServers001_RequestHistoryServerList(void *, AppId_t, MatchMakingKeyValuePair_t **, uint32, ISteamMatchmakingServerListResponse *);
+extern void cppISteamMatchmakingServers_SteamMatchMakingServers001_RequestSpectatorServerList(void *, AppId_t, MatchMakingKeyValuePair_t **, uint32, ISteamMatchmakingServerListResponse *);
+extern gameserveritem_t * cppISteamMatchmakingServers_SteamMatchMakingServers001_GetServerDetails(void *, EMatchMakingType, int);
+extern void cppISteamMatchmakingServers_SteamMatchMakingServers001_CancelQuery(void *, EMatchMakingType);
+extern void cppISteamMatchmakingServers_SteamMatchMakingServers001_RefreshQuery(void *, EMatchMakingType);
+extern bool cppISteamMatchmakingServers_SteamMatchMakingServers001_IsRefreshing(void *, EMatchMakingType);
+extern int cppISteamMatchmakingServers_SteamMatchMakingServers001_GetServerCount(void *, EMatchMakingType);
+extern void cppISteamMatchmakingServers_SteamMatchMakingServers001_RefreshServer(void *, EMatchMakingType, int);
+extern HServerQuery cppISteamMatchmakingServers_SteamMatchMakingServers001_PingServer(void *, uint32, uint16, ISteamMatchmakingPingResponse *);
+extern HServerQuery cppISteamMatchmakingServers_SteamMatchMakingServers001_PlayerDetails(void *, uint32, uint16, ISteamMatchmakingPlayersResponse *);
+extern HServerQuery cppISteamMatchmakingServers_SteamMatchMakingServers001_ServerRules(void *, uint32, uint16, ISteamMatchmakingRulesResponse *);
+extern void cppISteamMatchmakingServers_SteamMatchMakingServers001_CancelServerQuery(void *, HServerQuery);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers002.cpp b/lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers002.cpp
new file mode 100644
index 00000000..603c21fc
--- /dev/null
+++ b/lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers002.cpp
@@ -0,0 +1,95 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamMatchmakingServers_SteamMatchMakingServers002.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HServerListRequest cppISteamMatchmakingServers_SteamMatchMakingServers002_RequestInternetServerList(void *linux_side, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ return ((ISteamMatchmakingServers*)linux_side)->RequestInternetServerList((AppId_t)iApp, (MatchMakingKeyValuePair_t **)ppchFilters, (uint32)nFilters, (ISteamMatchmakingServerListResponse *)pRequestServersResponse);
+}
+
+HServerListRequest cppISteamMatchmakingServers_SteamMatchMakingServers002_RequestLANServerList(void *linux_side, AppId_t iApp, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ return ((ISteamMatchmakingServers*)linux_side)->RequestLANServerList((AppId_t)iApp, (ISteamMatchmakingServerListResponse *)pRequestServersResponse);
+}
+
+HServerListRequest cppISteamMatchmakingServers_SteamMatchMakingServers002_RequestFriendsServerList(void *linux_side, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ return ((ISteamMatchmakingServers*)linux_side)->RequestFriendsServerList((AppId_t)iApp, (MatchMakingKeyValuePair_t **)ppchFilters, (uint32)nFilters, (ISteamMatchmakingServerListResponse *)pRequestServersResponse);
+}
+
+HServerListRequest cppISteamMatchmakingServers_SteamMatchMakingServers002_RequestFavoritesServerList(void *linux_side, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ return ((ISteamMatchmakingServers*)linux_side)->RequestFavoritesServerList((AppId_t)iApp, (MatchMakingKeyValuePair_t **)ppchFilters, (uint32)nFilters, (ISteamMatchmakingServerListResponse *)pRequestServersResponse);
+}
+
+HServerListRequest cppISteamMatchmakingServers_SteamMatchMakingServers002_RequestHistoryServerList(void *linux_side, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ return ((ISteamMatchmakingServers*)linux_side)->RequestHistoryServerList((AppId_t)iApp, (MatchMakingKeyValuePair_t **)ppchFilters, (uint32)nFilters, (ISteamMatchmakingServerListResponse *)pRequestServersResponse);
+}
+
+HServerListRequest cppISteamMatchmakingServers_SteamMatchMakingServers002_RequestSpectatorServerList(void *linux_side, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ return ((ISteamMatchmakingServers*)linux_side)->RequestSpectatorServerList((AppId_t)iApp, (MatchMakingKeyValuePair_t **)ppchFilters, (uint32)nFilters, (ISteamMatchmakingServerListResponse *)pRequestServersResponse);
+}
+
+void cppISteamMatchmakingServers_SteamMatchMakingServers002_ReleaseRequest(void *linux_side, HServerListRequest hServerListRequest)
+{
+ ((ISteamMatchmakingServers*)linux_side)->ReleaseRequest((HServerListRequest)hServerListRequest);
+}
+
+gameserveritem_t * cppISteamMatchmakingServers_SteamMatchMakingServers002_GetServerDetails(void *linux_side, HServerListRequest hRequest, int iServer)
+{
+ return ((ISteamMatchmakingServers*)linux_side)->GetServerDetails((HServerListRequest)hRequest, (int)iServer);
+}
+
+void cppISteamMatchmakingServers_SteamMatchMakingServers002_CancelQuery(void *linux_side, HServerListRequest hRequest)
+{
+ ((ISteamMatchmakingServers*)linux_side)->CancelQuery((HServerListRequest)hRequest);
+}
+
+void cppISteamMatchmakingServers_SteamMatchMakingServers002_RefreshQuery(void *linux_side, HServerListRequest hRequest)
+{
+ ((ISteamMatchmakingServers*)linux_side)->RefreshQuery((HServerListRequest)hRequest);
+}
+
+bool cppISteamMatchmakingServers_SteamMatchMakingServers002_IsRefreshing(void *linux_side, HServerListRequest hRequest)
+{
+ return ((ISteamMatchmakingServers*)linux_side)->IsRefreshing((HServerListRequest)hRequest);
+}
+
+int cppISteamMatchmakingServers_SteamMatchMakingServers002_GetServerCount(void *linux_side, HServerListRequest hRequest)
+{
+ return ((ISteamMatchmakingServers*)linux_side)->GetServerCount((HServerListRequest)hRequest);
+}
+
+void cppISteamMatchmakingServers_SteamMatchMakingServers002_RefreshServer(void *linux_side, HServerListRequest hRequest, int iServer)
+{
+ ((ISteamMatchmakingServers*)linux_side)->RefreshServer((HServerListRequest)hRequest, (int)iServer);
+}
+
+HServerQuery cppISteamMatchmakingServers_SteamMatchMakingServers002_PingServer(void *linux_side, uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse * pRequestServersResponse)
+{
+ return ((ISteamMatchmakingServers*)linux_side)->PingServer((uint32)unIP, (uint16)usPort, (ISteamMatchmakingPingResponse *)pRequestServersResponse);
+}
+
+HServerQuery cppISteamMatchmakingServers_SteamMatchMakingServers002_PlayerDetails(void *linux_side, uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse * pRequestServersResponse)
+{
+ return ((ISteamMatchmakingServers*)linux_side)->PlayerDetails((uint32)unIP, (uint16)usPort, (ISteamMatchmakingPlayersResponse *)pRequestServersResponse);
+}
+
+HServerQuery cppISteamMatchmakingServers_SteamMatchMakingServers002_ServerRules(void *linux_side, uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse * pRequestServersResponse)
+{
+ return ((ISteamMatchmakingServers*)linux_side)->ServerRules((uint32)unIP, (uint16)usPort, (ISteamMatchmakingRulesResponse *)pRequestServersResponse);
+}
+
+void cppISteamMatchmakingServers_SteamMatchMakingServers002_CancelServerQuery(void *linux_side, HServerQuery hServerQuery)
+{
+ ((ISteamMatchmakingServers*)linux_side)->CancelServerQuery((HServerQuery)hServerQuery);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers002.h b/lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers002.h
new file mode 100644
index 00000000..b32cc46a
--- /dev/null
+++ b/lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers002.h
@@ -0,0 +1,23 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HServerListRequest cppISteamMatchmakingServers_SteamMatchMakingServers002_RequestInternetServerList(void *, AppId_t, MatchMakingKeyValuePair_t **, uint32, ISteamMatchmakingServerListResponse *);
+extern HServerListRequest cppISteamMatchmakingServers_SteamMatchMakingServers002_RequestLANServerList(void *, AppId_t, ISteamMatchmakingServerListResponse *);
+extern HServerListRequest cppISteamMatchmakingServers_SteamMatchMakingServers002_RequestFriendsServerList(void *, AppId_t, MatchMakingKeyValuePair_t **, uint32, ISteamMatchmakingServerListResponse *);
+extern HServerListRequest cppISteamMatchmakingServers_SteamMatchMakingServers002_RequestFavoritesServerList(void *, AppId_t, MatchMakingKeyValuePair_t **, uint32, ISteamMatchmakingServerListResponse *);
+extern HServerListRequest cppISteamMatchmakingServers_SteamMatchMakingServers002_RequestHistoryServerList(void *, AppId_t, MatchMakingKeyValuePair_t **, uint32, ISteamMatchmakingServerListResponse *);
+extern HServerListRequest cppISteamMatchmakingServers_SteamMatchMakingServers002_RequestSpectatorServerList(void *, AppId_t, MatchMakingKeyValuePair_t **, uint32, ISteamMatchmakingServerListResponse *);
+extern void cppISteamMatchmakingServers_SteamMatchMakingServers002_ReleaseRequest(void *, HServerListRequest);
+extern gameserveritem_t * cppISteamMatchmakingServers_SteamMatchMakingServers002_GetServerDetails(void *, HServerListRequest, int);
+extern void cppISteamMatchmakingServers_SteamMatchMakingServers002_CancelQuery(void *, HServerListRequest);
+extern void cppISteamMatchmakingServers_SteamMatchMakingServers002_RefreshQuery(void *, HServerListRequest);
+extern bool cppISteamMatchmakingServers_SteamMatchMakingServers002_IsRefreshing(void *, HServerListRequest);
+extern int cppISteamMatchmakingServers_SteamMatchMakingServers002_GetServerCount(void *, HServerListRequest);
+extern void cppISteamMatchmakingServers_SteamMatchMakingServers002_RefreshServer(void *, HServerListRequest, int);
+extern HServerQuery cppISteamMatchmakingServers_SteamMatchMakingServers002_PingServer(void *, uint32, uint16, ISteamMatchmakingPingResponse *);
+extern HServerQuery cppISteamMatchmakingServers_SteamMatchMakingServers002_PlayerDetails(void *, uint32, uint16, ISteamMatchmakingPlayersResponse *);
+extern HServerQuery cppISteamMatchmakingServers_SteamMatchMakingServers002_ServerRules(void *, uint32, uint16, ISteamMatchmakingRulesResponse *);
+extern void cppISteamMatchmakingServers_SteamMatchMakingServers002_CancelServerQuery(void *, HServerQuery);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMatchmaking_SteamMatchMaking002.cpp b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking002.cpp
new file mode 100644
index 00000000..6b335c6b
--- /dev/null
+++ b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking002.cpp
@@ -0,0 +1,110 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_101/steam_api.h"
+#include "cppISteamMatchmaking_SteamMatchMaking002.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+int cppISteamMatchmaking_SteamMatchMaking002_GetFavoriteGameCount(void *linux_side)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetFavoriteGameCount();
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking002_GetFavoriteGame(void *linux_side, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetFavoriteGame((int)iGame, (AppId_t *)pnAppID, (uint32 *)pnIP, (uint16 *)pnConnPort, (uint16 *)pnQueryPort, (uint32 *)punFlags, (uint32 *)pRTime32LastPlayedOnServer);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking002_AddFavoriteGame(void *linux_side, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer)
+{
+ return ((ISteamMatchmaking*)linux_side)->AddFavoriteGame((AppId_t)nAppID, (uint32)nIP, (uint16)nConnPort, (uint16)nQueryPort, (uint32)unFlags, (uint32)rTime32LastPlayedOnServer);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking002_RemoveFavoriteGame(void *linux_side, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags)
+{
+ return ((ISteamMatchmaking*)linux_side)->RemoveFavoriteGame((AppId_t)nAppID, (uint32)nIP, (uint16)nConnPort, (uint16)nQueryPort, (uint32)unFlags);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking002_RequestLobbyList(void *linux_side)
+{
+ ((ISteamMatchmaking*)linux_side)->RequestLobbyList();
+}
+
+CSteamID cppISteamMatchmaking_SteamMatchMaking002_GetLobbyByIndex(void *linux_side, int iLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyByIndex((int)iLobby);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking002_CreateLobby(void *linux_side, bool bPrivate)
+{
+ ((ISteamMatchmaking*)linux_side)->CreateLobby((bool)bPrivate);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking002_JoinLobby(void *linux_side, CSteamID steamIDLobby)
+{
+ ((ISteamMatchmaking*)linux_side)->JoinLobby((CSteamID)steamIDLobby);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking002_LeaveLobby(void *linux_side, CSteamID steamIDLobby)
+{
+ ((ISteamMatchmaking*)linux_side)->LeaveLobby((CSteamID)steamIDLobby);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking002_InviteUserToLobby(void *linux_side, CSteamID steamIDLobby, CSteamID steamIDInvitee)
+{
+ return ((ISteamMatchmaking*)linux_side)->InviteUserToLobby((CSteamID)steamIDLobby, (CSteamID)steamIDInvitee);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking002_GetNumLobbyMembers(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetNumLobbyMembers((CSteamID)steamIDLobby);
+}
+
+CSteamID cppISteamMatchmaking_SteamMatchMaking002_GetLobbyMemberByIndex(void *linux_side, CSteamID steamIDLobby, int iMember)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyMemberByIndex((CSteamID)steamIDLobby, (int)iMember);
+}
+
+const char * cppISteamMatchmaking_SteamMatchMaking002_GetLobbyData(void *linux_side, CSteamID steamIDLobby, const char * pchKey)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyData((CSteamID)steamIDLobby, (const char *)pchKey);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking002_SetLobbyData(void *linux_side, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyData((CSteamID)steamIDLobby, (const char *)pchKey, (const char *)pchValue);
+}
+
+const char * cppISteamMatchmaking_SteamMatchMaking002_GetLobbyMemberData(void *linux_side, CSteamID steamIDLobby, CSteamID steamIDUser, const char * pchKey)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyMemberData((CSteamID)steamIDLobby, (CSteamID)steamIDUser, (const char *)pchKey);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking002_SetLobbyMemberData(void *linux_side, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ ((ISteamMatchmaking*)linux_side)->SetLobbyMemberData((CSteamID)steamIDLobby, (const char *)pchKey, (const char *)pchValue);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking002_SendLobbyChatMsg(void *linux_side, CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody)
+{
+ return ((ISteamMatchmaking*)linux_side)->SendLobbyChatMsg((CSteamID)steamIDLobby, (const void *)pvMsgBody, (int)cubMsgBody);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking002_GetLobbyChatEntry(void *linux_side, CSteamID steamIDLobby, int iChatID, CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyChatEntry((CSteamID)steamIDLobby, (int)iChatID, (CSteamID *)pSteamIDUser, (void *)pvData, (int)cubData, (EChatEntryType *)peChatEntryType);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking002_RequestLobbyData(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->RequestLobbyData((CSteamID)steamIDLobby);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking002_SetLobbyGameServer(void *linux_side, CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer)
+{
+ ((ISteamMatchmaking*)linux_side)->SetLobbyGameServer((CSteamID)steamIDLobby, (uint32)unGameServerIP, (uint16)unGameServerPort, (CSteamID)steamIDGameServer);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMatchmaking_SteamMatchMaking002.h b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking002.h
new file mode 100644
index 00000000..a4219b66
--- /dev/null
+++ b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking002.h
@@ -0,0 +1,26 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern int cppISteamMatchmaking_SteamMatchMaking002_GetFavoriteGameCount(void *);
+extern bool cppISteamMatchmaking_SteamMatchMaking002_GetFavoriteGame(void *, int, AppId_t *, uint32 *, uint16 *, uint16 *, uint32 *, uint32 *);
+extern int cppISteamMatchmaking_SteamMatchMaking002_AddFavoriteGame(void *, AppId_t, uint32, uint16, uint16, uint32, uint32);
+extern bool cppISteamMatchmaking_SteamMatchMaking002_RemoveFavoriteGame(void *, AppId_t, uint32, uint16, uint16, uint32);
+extern void cppISteamMatchmaking_SteamMatchMaking002_RequestLobbyList(void *);
+extern CSteamID cppISteamMatchmaking_SteamMatchMaking002_GetLobbyByIndex(void *, int);
+extern void cppISteamMatchmaking_SteamMatchMaking002_CreateLobby(void *, bool);
+extern void cppISteamMatchmaking_SteamMatchMaking002_JoinLobby(void *, CSteamID);
+extern void cppISteamMatchmaking_SteamMatchMaking002_LeaveLobby(void *, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking002_InviteUserToLobby(void *, CSteamID, CSteamID);
+extern int cppISteamMatchmaking_SteamMatchMaking002_GetNumLobbyMembers(void *, CSteamID);
+extern CSteamID cppISteamMatchmaking_SteamMatchMaking002_GetLobbyMemberByIndex(void *, CSteamID, int);
+extern const char * cppISteamMatchmaking_SteamMatchMaking002_GetLobbyData(void *, CSteamID, const char *);
+extern bool cppISteamMatchmaking_SteamMatchMaking002_SetLobbyData(void *, CSteamID, const char *, const char *);
+extern const char * cppISteamMatchmaking_SteamMatchMaking002_GetLobbyMemberData(void *, CSteamID, CSteamID, const char *);
+extern void cppISteamMatchmaking_SteamMatchMaking002_SetLobbyMemberData(void *, CSteamID, const char *, const char *);
+extern bool cppISteamMatchmaking_SteamMatchMaking002_SendLobbyChatMsg(void *, CSteamID, const void *, int);
+extern int cppISteamMatchmaking_SteamMatchMaking002_GetLobbyChatEntry(void *, CSteamID, int, CSteamID *, void *, int, EChatEntryType *);
+extern bool cppISteamMatchmaking_SteamMatchMaking002_RequestLobbyData(void *, CSteamID);
+extern void cppISteamMatchmaking_SteamMatchMaking002_SetLobbyGameServer(void *, CSteamID, uint32, uint16, CSteamID);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMatchmaking_SteamMatchMaking004.cpp b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking004.cpp
new file mode 100644
index 00000000..b6bcd1ec
--- /dev/null
+++ b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking004.cpp
@@ -0,0 +1,145 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_102/steam_api.h"
+#include "cppISteamMatchmaking_SteamMatchMaking004.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+int cppISteamMatchmaking_SteamMatchMaking004_GetFavoriteGameCount(void *linux_side)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetFavoriteGameCount();
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking004_GetFavoriteGame(void *linux_side, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetFavoriteGame((int)iGame, (AppId_t *)pnAppID, (uint32 *)pnIP, (uint16 *)pnConnPort, (uint16 *)pnQueryPort, (uint32 *)punFlags, (uint32 *)pRTime32LastPlayedOnServer);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking004_AddFavoriteGame(void *linux_side, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer)
+{
+ return ((ISteamMatchmaking*)linux_side)->AddFavoriteGame((AppId_t)nAppID, (uint32)nIP, (uint16)nConnPort, (uint16)nQueryPort, (uint32)unFlags, (uint32)rTime32LastPlayedOnServer);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking004_RemoveFavoriteGame(void *linux_side, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags)
+{
+ return ((ISteamMatchmaking*)linux_side)->RemoveFavoriteGame((AppId_t)nAppID, (uint32)nIP, (uint16)nConnPort, (uint16)nQueryPort, (uint32)unFlags);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking004_RequestLobbyList(void *linux_side)
+{
+ ((ISteamMatchmaking*)linux_side)->RequestLobbyList();
+}
+
+void cppISteamMatchmaking_SteamMatchMaking004_AddRequestLobbyListFilter(void *linux_side, const char * pchKeyToMatch, const char * pchValueToMatch)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListFilter((const char *)pchKeyToMatch, (const char *)pchValueToMatch);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking004_AddRequestLobbyListNumericalFilter(void *linux_side, const char * pchKeyToMatch, int nValueToMatch, int nComparisonType)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListNumericalFilter((const char *)pchKeyToMatch, (int)nValueToMatch, (int)nComparisonType);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking004_AddRequestLobbyListSlotsAvailableFilter(void *linux_side)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListSlotsAvailableFilter();
+}
+
+CSteamID cppISteamMatchmaking_SteamMatchMaking004_GetLobbyByIndex(void *linux_side, int iLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyByIndex((int)iLobby);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking004_CreateLobby(void *linux_side, bool bPrivate)
+{
+ ((ISteamMatchmaking*)linux_side)->CreateLobby((bool)bPrivate);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking004_JoinLobby(void *linux_side, CSteamID steamIDLobby)
+{
+ ((ISteamMatchmaking*)linux_side)->JoinLobby((CSteamID)steamIDLobby);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking004_LeaveLobby(void *linux_side, CSteamID steamIDLobby)
+{
+ ((ISteamMatchmaking*)linux_side)->LeaveLobby((CSteamID)steamIDLobby);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking004_InviteUserToLobby(void *linux_side, CSteamID steamIDLobby, CSteamID steamIDInvitee)
+{
+ return ((ISteamMatchmaking*)linux_side)->InviteUserToLobby((CSteamID)steamIDLobby, (CSteamID)steamIDInvitee);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking004_GetNumLobbyMembers(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetNumLobbyMembers((CSteamID)steamIDLobby);
+}
+
+CSteamID cppISteamMatchmaking_SteamMatchMaking004_GetLobbyMemberByIndex(void *linux_side, CSteamID steamIDLobby, int iMember)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyMemberByIndex((CSteamID)steamIDLobby, (int)iMember);
+}
+
+const char * cppISteamMatchmaking_SteamMatchMaking004_GetLobbyData(void *linux_side, CSteamID steamIDLobby, const char * pchKey)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyData((CSteamID)steamIDLobby, (const char *)pchKey);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking004_SetLobbyData(void *linux_side, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyData((CSteamID)steamIDLobby, (const char *)pchKey, (const char *)pchValue);
+}
+
+const char * cppISteamMatchmaking_SteamMatchMaking004_GetLobbyMemberData(void *linux_side, CSteamID steamIDLobby, CSteamID steamIDUser, const char * pchKey)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyMemberData((CSteamID)steamIDLobby, (CSteamID)steamIDUser, (const char *)pchKey);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking004_SetLobbyMemberData(void *linux_side, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ ((ISteamMatchmaking*)linux_side)->SetLobbyMemberData((CSteamID)steamIDLobby, (const char *)pchKey, (const char *)pchValue);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking004_SendLobbyChatMsg(void *linux_side, CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody)
+{
+ return ((ISteamMatchmaking*)linux_side)->SendLobbyChatMsg((CSteamID)steamIDLobby, (const void *)pvMsgBody, (int)cubMsgBody);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking004_GetLobbyChatEntry(void *linux_side, CSteamID steamIDLobby, int iChatID, CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyChatEntry((CSteamID)steamIDLobby, (int)iChatID, (CSteamID *)pSteamIDUser, (void *)pvData, (int)cubData, (EChatEntryType *)peChatEntryType);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking004_RequestLobbyData(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->RequestLobbyData((CSteamID)steamIDLobby);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking004_SetLobbyGameServer(void *linux_side, CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer)
+{
+ ((ISteamMatchmaking*)linux_side)->SetLobbyGameServer((CSteamID)steamIDLobby, (uint32)unGameServerIP, (uint16)unGameServerPort, (CSteamID)steamIDGameServer);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking004_GetLobbyGameServer(void *linux_side, CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, CSteamID * psteamIDGameServer)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyGameServer((CSteamID)steamIDLobby, (uint32 *)punGameServerIP, (uint16 *)punGameServerPort, (CSteamID *)psteamIDGameServer);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking004_SetLobbyMemberLimit(void *linux_side, CSteamID steamIDLobby, int cMaxMembers)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyMemberLimit((CSteamID)steamIDLobby, (int)cMaxMembers);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking004_GetLobbyMemberLimit(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyMemberLimit((CSteamID)steamIDLobby);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking004_RequestFriendsLobbies(void *linux_side)
+{
+ return ((ISteamMatchmaking*)linux_side)->RequestFriendsLobbies();
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMatchmaking_SteamMatchMaking004.h b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking004.h
new file mode 100644
index 00000000..5d1bb35e
--- /dev/null
+++ b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking004.h
@@ -0,0 +1,33 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern int cppISteamMatchmaking_SteamMatchMaking004_GetFavoriteGameCount(void *);
+extern bool cppISteamMatchmaking_SteamMatchMaking004_GetFavoriteGame(void *, int, AppId_t *, uint32 *, uint16 *, uint16 *, uint32 *, uint32 *);
+extern int cppISteamMatchmaking_SteamMatchMaking004_AddFavoriteGame(void *, AppId_t, uint32, uint16, uint16, uint32, uint32);
+extern bool cppISteamMatchmaking_SteamMatchMaking004_RemoveFavoriteGame(void *, AppId_t, uint32, uint16, uint16, uint32);
+extern void cppISteamMatchmaking_SteamMatchMaking004_RequestLobbyList(void *);
+extern void cppISteamMatchmaking_SteamMatchMaking004_AddRequestLobbyListFilter(void *, const char *, const char *);
+extern void cppISteamMatchmaking_SteamMatchMaking004_AddRequestLobbyListNumericalFilter(void *, const char *, int, int);
+extern void cppISteamMatchmaking_SteamMatchMaking004_AddRequestLobbyListSlotsAvailableFilter(void *);
+extern CSteamID cppISteamMatchmaking_SteamMatchMaking004_GetLobbyByIndex(void *, int);
+extern void cppISteamMatchmaking_SteamMatchMaking004_CreateLobby(void *, bool);
+extern void cppISteamMatchmaking_SteamMatchMaking004_JoinLobby(void *, CSteamID);
+extern void cppISteamMatchmaking_SteamMatchMaking004_LeaveLobby(void *, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking004_InviteUserToLobby(void *, CSteamID, CSteamID);
+extern int cppISteamMatchmaking_SteamMatchMaking004_GetNumLobbyMembers(void *, CSteamID);
+extern CSteamID cppISteamMatchmaking_SteamMatchMaking004_GetLobbyMemberByIndex(void *, CSteamID, int);
+extern const char * cppISteamMatchmaking_SteamMatchMaking004_GetLobbyData(void *, CSteamID, const char *);
+extern bool cppISteamMatchmaking_SteamMatchMaking004_SetLobbyData(void *, CSteamID, const char *, const char *);
+extern const char * cppISteamMatchmaking_SteamMatchMaking004_GetLobbyMemberData(void *, CSteamID, CSteamID, const char *);
+extern void cppISteamMatchmaking_SteamMatchMaking004_SetLobbyMemberData(void *, CSteamID, const char *, const char *);
+extern bool cppISteamMatchmaking_SteamMatchMaking004_SendLobbyChatMsg(void *, CSteamID, const void *, int);
+extern int cppISteamMatchmaking_SteamMatchMaking004_GetLobbyChatEntry(void *, CSteamID, int, CSteamID *, void *, int, EChatEntryType *);
+extern bool cppISteamMatchmaking_SteamMatchMaking004_RequestLobbyData(void *, CSteamID);
+extern void cppISteamMatchmaking_SteamMatchMaking004_SetLobbyGameServer(void *, CSteamID, uint32, uint16, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking004_GetLobbyGameServer(void *, CSteamID, uint32 *, uint16 *, CSteamID *);
+extern bool cppISteamMatchmaking_SteamMatchMaking004_SetLobbyMemberLimit(void *, CSteamID, int);
+extern int cppISteamMatchmaking_SteamMatchMaking004_GetLobbyMemberLimit(void *, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking004_RequestFriendsLobbies(void *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMatchmaking_SteamMatchMaking006.cpp b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking006.cpp
new file mode 100644
index 00000000..2390417e
--- /dev/null
+++ b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking006.cpp
@@ -0,0 +1,150 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_104/steam_api.h"
+#include "cppISteamMatchmaking_SteamMatchMaking006.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+int cppISteamMatchmaking_SteamMatchMaking006_GetFavoriteGameCount(void *linux_side)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetFavoriteGameCount();
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking006_GetFavoriteGame(void *linux_side, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetFavoriteGame((int)iGame, (AppId_t *)pnAppID, (uint32 *)pnIP, (uint16 *)pnConnPort, (uint16 *)pnQueryPort, (uint32 *)punFlags, (uint32 *)pRTime32LastPlayedOnServer);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking006_AddFavoriteGame(void *linux_side, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer)
+{
+ return ((ISteamMatchmaking*)linux_side)->AddFavoriteGame((AppId_t)nAppID, (uint32)nIP, (uint16)nConnPort, (uint16)nQueryPort, (uint32)unFlags, (uint32)rTime32LastPlayedOnServer);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking006_RemoveFavoriteGame(void *linux_side, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags)
+{
+ return ((ISteamMatchmaking*)linux_side)->RemoveFavoriteGame((AppId_t)nAppID, (uint32)nIP, (uint16)nConnPort, (uint16)nQueryPort, (uint32)unFlags);
+}
+
+SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking006_RequestLobbyList(void *linux_side)
+{
+ return ((ISteamMatchmaking*)linux_side)->RequestLobbyList();
+}
+
+void cppISteamMatchmaking_SteamMatchMaking006_AddRequestLobbyListFilter(void *linux_side, const char * pchKeyToMatch, const char * pchValueToMatch)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListFilter((const char *)pchKeyToMatch, (const char *)pchValueToMatch);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking006_AddRequestLobbyListNumericalFilter(void *linux_side, const char * pchKeyToMatch, int nValueToMatch, int nComparisonType)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListNumericalFilter((const char *)pchKeyToMatch, (int)nValueToMatch, (int)nComparisonType);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking006_AddRequestLobbyListNearValueFilter(void *linux_side, const char * pchKeyToMatch, int nValueToBeCloseTo)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListNearValueFilter((const char *)pchKeyToMatch, (int)nValueToBeCloseTo);
+}
+
+CSteamID cppISteamMatchmaking_SteamMatchMaking006_GetLobbyByIndex(void *linux_side, int iLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyByIndex((int)iLobby);
+}
+
+SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking006_CreateLobby(void *linux_side, ELobbyType eLobbyType)
+{
+ return ((ISteamMatchmaking*)linux_side)->CreateLobby((ELobbyType)eLobbyType);
+}
+
+SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking006_JoinLobby(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->JoinLobby((CSteamID)steamIDLobby);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking006_LeaveLobby(void *linux_side, CSteamID steamIDLobby)
+{
+ ((ISteamMatchmaking*)linux_side)->LeaveLobby((CSteamID)steamIDLobby);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking006_InviteUserToLobby(void *linux_side, CSteamID steamIDLobby, CSteamID steamIDInvitee)
+{
+ return ((ISteamMatchmaking*)linux_side)->InviteUserToLobby((CSteamID)steamIDLobby, (CSteamID)steamIDInvitee);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking006_GetNumLobbyMembers(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetNumLobbyMembers((CSteamID)steamIDLobby);
+}
+
+CSteamID cppISteamMatchmaking_SteamMatchMaking006_GetLobbyMemberByIndex(void *linux_side, CSteamID steamIDLobby, int iMember)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyMemberByIndex((CSteamID)steamIDLobby, (int)iMember);
+}
+
+const char * cppISteamMatchmaking_SteamMatchMaking006_GetLobbyData(void *linux_side, CSteamID steamIDLobby, const char * pchKey)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyData((CSteamID)steamIDLobby, (const char *)pchKey);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking006_SetLobbyData(void *linux_side, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyData((CSteamID)steamIDLobby, (const char *)pchKey, (const char *)pchValue);
+}
+
+const char * cppISteamMatchmaking_SteamMatchMaking006_GetLobbyMemberData(void *linux_side, CSteamID steamIDLobby, CSteamID steamIDUser, const char * pchKey)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyMemberData((CSteamID)steamIDLobby, (CSteamID)steamIDUser, (const char *)pchKey);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking006_SetLobbyMemberData(void *linux_side, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ ((ISteamMatchmaking*)linux_side)->SetLobbyMemberData((CSteamID)steamIDLobby, (const char *)pchKey, (const char *)pchValue);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking006_SendLobbyChatMsg(void *linux_side, CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody)
+{
+ return ((ISteamMatchmaking*)linux_side)->SendLobbyChatMsg((CSteamID)steamIDLobby, (const void *)pvMsgBody, (int)cubMsgBody);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking006_GetLobbyChatEntry(void *linux_side, CSteamID steamIDLobby, int iChatID, CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyChatEntry((CSteamID)steamIDLobby, (int)iChatID, (CSteamID *)pSteamIDUser, (void *)pvData, (int)cubData, (EChatEntryType *)peChatEntryType);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking006_RequestLobbyData(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->RequestLobbyData((CSteamID)steamIDLobby);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking006_SetLobbyGameServer(void *linux_side, CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer)
+{
+ ((ISteamMatchmaking*)linux_side)->SetLobbyGameServer((CSteamID)steamIDLobby, (uint32)unGameServerIP, (uint16)unGameServerPort, (CSteamID)steamIDGameServer);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking006_GetLobbyGameServer(void *linux_side, CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, CSteamID * psteamIDGameServer)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyGameServer((CSteamID)steamIDLobby, (uint32 *)punGameServerIP, (uint16 *)punGameServerPort, (CSteamID *)psteamIDGameServer);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking006_SetLobbyMemberLimit(void *linux_side, CSteamID steamIDLobby, int cMaxMembers)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyMemberLimit((CSteamID)steamIDLobby, (int)cMaxMembers);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking006_GetLobbyMemberLimit(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyMemberLimit((CSteamID)steamIDLobby);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking006_SetLobbyType(void *linux_side, CSteamID steamIDLobby, ELobbyType eLobbyType)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyType((CSteamID)steamIDLobby, (ELobbyType)eLobbyType);
+}
+
+CSteamID cppISteamMatchmaking_SteamMatchMaking006_GetLobbyOwner(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyOwner((CSteamID)steamIDLobby);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMatchmaking_SteamMatchMaking006.h b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking006.h
new file mode 100644
index 00000000..74766006
--- /dev/null
+++ b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking006.h
@@ -0,0 +1,34 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern int cppISteamMatchmaking_SteamMatchMaking006_GetFavoriteGameCount(void *);
+extern bool cppISteamMatchmaking_SteamMatchMaking006_GetFavoriteGame(void *, int, AppId_t *, uint32 *, uint16 *, uint16 *, uint32 *, uint32 *);
+extern int cppISteamMatchmaking_SteamMatchMaking006_AddFavoriteGame(void *, AppId_t, uint32, uint16, uint16, uint32, uint32);
+extern bool cppISteamMatchmaking_SteamMatchMaking006_RemoveFavoriteGame(void *, AppId_t, uint32, uint16, uint16, uint32);
+extern SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking006_RequestLobbyList(void *);
+extern void cppISteamMatchmaking_SteamMatchMaking006_AddRequestLobbyListFilter(void *, const char *, const char *);
+extern void cppISteamMatchmaking_SteamMatchMaking006_AddRequestLobbyListNumericalFilter(void *, const char *, int, int);
+extern void cppISteamMatchmaking_SteamMatchMaking006_AddRequestLobbyListNearValueFilter(void *, const char *, int);
+extern CSteamID cppISteamMatchmaking_SteamMatchMaking006_GetLobbyByIndex(void *, int);
+extern SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking006_CreateLobby(void *, ELobbyType);
+extern SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking006_JoinLobby(void *, CSteamID);
+extern void cppISteamMatchmaking_SteamMatchMaking006_LeaveLobby(void *, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking006_InviteUserToLobby(void *, CSteamID, CSteamID);
+extern int cppISteamMatchmaking_SteamMatchMaking006_GetNumLobbyMembers(void *, CSteamID);
+extern CSteamID cppISteamMatchmaking_SteamMatchMaking006_GetLobbyMemberByIndex(void *, CSteamID, int);
+extern const char * cppISteamMatchmaking_SteamMatchMaking006_GetLobbyData(void *, CSteamID, const char *);
+extern bool cppISteamMatchmaking_SteamMatchMaking006_SetLobbyData(void *, CSteamID, const char *, const char *);
+extern const char * cppISteamMatchmaking_SteamMatchMaking006_GetLobbyMemberData(void *, CSteamID, CSteamID, const char *);
+extern void cppISteamMatchmaking_SteamMatchMaking006_SetLobbyMemberData(void *, CSteamID, const char *, const char *);
+extern bool cppISteamMatchmaking_SteamMatchMaking006_SendLobbyChatMsg(void *, CSteamID, const void *, int);
+extern int cppISteamMatchmaking_SteamMatchMaking006_GetLobbyChatEntry(void *, CSteamID, int, CSteamID *, void *, int, EChatEntryType *);
+extern bool cppISteamMatchmaking_SteamMatchMaking006_RequestLobbyData(void *, CSteamID);
+extern void cppISteamMatchmaking_SteamMatchMaking006_SetLobbyGameServer(void *, CSteamID, uint32, uint16, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking006_GetLobbyGameServer(void *, CSteamID, uint32 *, uint16 *, CSteamID *);
+extern bool cppISteamMatchmaking_SteamMatchMaking006_SetLobbyMemberLimit(void *, CSteamID, int);
+extern int cppISteamMatchmaking_SteamMatchMaking006_GetLobbyMemberLimit(void *, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking006_SetLobbyType(void *, CSteamID, ELobbyType);
+extern CSteamID cppISteamMatchmaking_SteamMatchMaking006_GetLobbyOwner(void *, CSteamID);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMatchmaking_SteamMatchMaking007.cpp b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking007.cpp
new file mode 100644
index 00000000..c99e53c4
--- /dev/null
+++ b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking007.cpp
@@ -0,0 +1,180 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_107/steam_api.h"
+#include "cppISteamMatchmaking_SteamMatchMaking007.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+int cppISteamMatchmaking_SteamMatchMaking007_GetFavoriteGameCount(void *linux_side)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetFavoriteGameCount();
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking007_GetFavoriteGame(void *linux_side, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetFavoriteGame((int)iGame, (AppId_t *)pnAppID, (uint32 *)pnIP, (uint16 *)pnConnPort, (uint16 *)pnQueryPort, (uint32 *)punFlags, (uint32 *)pRTime32LastPlayedOnServer);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking007_AddFavoriteGame(void *linux_side, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer)
+{
+ return ((ISteamMatchmaking*)linux_side)->AddFavoriteGame((AppId_t)nAppID, (uint32)nIP, (uint16)nConnPort, (uint16)nQueryPort, (uint32)unFlags, (uint32)rTime32LastPlayedOnServer);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking007_RemoveFavoriteGame(void *linux_side, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags)
+{
+ return ((ISteamMatchmaking*)linux_side)->RemoveFavoriteGame((AppId_t)nAppID, (uint32)nIP, (uint16)nConnPort, (uint16)nQueryPort, (uint32)unFlags);
+}
+
+SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking007_RequestLobbyList(void *linux_side)
+{
+ return ((ISteamMatchmaking*)linux_side)->RequestLobbyList();
+}
+
+void cppISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListStringFilter(void *linux_side, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListStringFilter((const char *)pchKeyToMatch, (const char *)pchValueToMatch, (ELobbyComparison)eComparisonType);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListNumericalFilter(void *linux_side, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListNumericalFilter((const char *)pchKeyToMatch, (int)nValueToMatch, (ELobbyComparison)eComparisonType);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListNearValueFilter(void *linux_side, const char * pchKeyToMatch, int nValueToBeCloseTo)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListNearValueFilter((const char *)pchKeyToMatch, (int)nValueToBeCloseTo);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListFilterSlotsAvailable(void *linux_side, int nSlotsAvailable)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListFilterSlotsAvailable((int)nSlotsAvailable);
+}
+
+CSteamID cppISteamMatchmaking_SteamMatchMaking007_GetLobbyByIndex(void *linux_side, int iLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyByIndex((int)iLobby);
+}
+
+SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking007_CreateLobby(void *linux_side, ELobbyType eLobbyType, int cMaxMembers)
+{
+ return ((ISteamMatchmaking*)linux_side)->CreateLobby((ELobbyType)eLobbyType, (int)cMaxMembers);
+}
+
+SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking007_JoinLobby(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->JoinLobby((CSteamID)steamIDLobby);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking007_LeaveLobby(void *linux_side, CSteamID steamIDLobby)
+{
+ ((ISteamMatchmaking*)linux_side)->LeaveLobby((CSteamID)steamIDLobby);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking007_InviteUserToLobby(void *linux_side, CSteamID steamIDLobby, CSteamID steamIDInvitee)
+{
+ return ((ISteamMatchmaking*)linux_side)->InviteUserToLobby((CSteamID)steamIDLobby, (CSteamID)steamIDInvitee);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking007_GetNumLobbyMembers(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetNumLobbyMembers((CSteamID)steamIDLobby);
+}
+
+CSteamID cppISteamMatchmaking_SteamMatchMaking007_GetLobbyMemberByIndex(void *linux_side, CSteamID steamIDLobby, int iMember)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyMemberByIndex((CSteamID)steamIDLobby, (int)iMember);
+}
+
+const char * cppISteamMatchmaking_SteamMatchMaking007_GetLobbyData(void *linux_side, CSteamID steamIDLobby, const char * pchKey)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyData((CSteamID)steamIDLobby, (const char *)pchKey);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking007_SetLobbyData(void *linux_side, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyData((CSteamID)steamIDLobby, (const char *)pchKey, (const char *)pchValue);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking007_GetLobbyDataCount(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyDataCount((CSteamID)steamIDLobby);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking007_GetLobbyDataByIndex(void *linux_side, CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyDataByIndex((CSteamID)steamIDLobby, (int)iLobbyData, (char *)pchKey, (int)cchKeyBufferSize, (char *)pchValue, (int)cchValueBufferSize);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking007_DeleteLobbyData(void *linux_side, CSteamID steamIDLobby, const char * pchKey)
+{
+ return ((ISteamMatchmaking*)linux_side)->DeleteLobbyData((CSteamID)steamIDLobby, (const char *)pchKey);
+}
+
+const char * cppISteamMatchmaking_SteamMatchMaking007_GetLobbyMemberData(void *linux_side, CSteamID steamIDLobby, CSteamID steamIDUser, const char * pchKey)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyMemberData((CSteamID)steamIDLobby, (CSteamID)steamIDUser, (const char *)pchKey);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking007_SetLobbyMemberData(void *linux_side, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ ((ISteamMatchmaking*)linux_side)->SetLobbyMemberData((CSteamID)steamIDLobby, (const char *)pchKey, (const char *)pchValue);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking007_SendLobbyChatMsg(void *linux_side, CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody)
+{
+ return ((ISteamMatchmaking*)linux_side)->SendLobbyChatMsg((CSteamID)steamIDLobby, (const void *)pvMsgBody, (int)cubMsgBody);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking007_GetLobbyChatEntry(void *linux_side, CSteamID steamIDLobby, int iChatID, CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyChatEntry((CSteamID)steamIDLobby, (int)iChatID, (CSteamID *)pSteamIDUser, (void *)pvData, (int)cubData, (EChatEntryType *)peChatEntryType);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking007_RequestLobbyData(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->RequestLobbyData((CSteamID)steamIDLobby);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking007_SetLobbyGameServer(void *linux_side, CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer)
+{
+ ((ISteamMatchmaking*)linux_side)->SetLobbyGameServer((CSteamID)steamIDLobby, (uint32)unGameServerIP, (uint16)unGameServerPort, (CSteamID)steamIDGameServer);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking007_GetLobbyGameServer(void *linux_side, CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, CSteamID * psteamIDGameServer)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyGameServer((CSteamID)steamIDLobby, (uint32 *)punGameServerIP, (uint16 *)punGameServerPort, (CSteamID *)psteamIDGameServer);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking007_SetLobbyMemberLimit(void *linux_side, CSteamID steamIDLobby, int cMaxMembers)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyMemberLimit((CSteamID)steamIDLobby, (int)cMaxMembers);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking007_GetLobbyMemberLimit(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyMemberLimit((CSteamID)steamIDLobby);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking007_SetLobbyType(void *linux_side, CSteamID steamIDLobby, ELobbyType eLobbyType)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyType((CSteamID)steamIDLobby, (ELobbyType)eLobbyType);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking007_SetLobbyJoinable(void *linux_side, CSteamID steamIDLobby, bool bLobbyJoinable)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyJoinable((CSteamID)steamIDLobby, (bool)bLobbyJoinable);
+}
+
+CSteamID cppISteamMatchmaking_SteamMatchMaking007_GetLobbyOwner(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyOwner((CSteamID)steamIDLobby);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking007_SetLobbyOwner(void *linux_side, CSteamID steamIDLobby, CSteamID steamIDNewOwner)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyOwner((CSteamID)steamIDLobby, (CSteamID)steamIDNewOwner);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMatchmaking_SteamMatchMaking007.h b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking007.h
new file mode 100644
index 00000000..dc2429dc
--- /dev/null
+++ b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking007.h
@@ -0,0 +1,40 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern int cppISteamMatchmaking_SteamMatchMaking007_GetFavoriteGameCount(void *);
+extern bool cppISteamMatchmaking_SteamMatchMaking007_GetFavoriteGame(void *, int, AppId_t *, uint32 *, uint16 *, uint16 *, uint32 *, uint32 *);
+extern int cppISteamMatchmaking_SteamMatchMaking007_AddFavoriteGame(void *, AppId_t, uint32, uint16, uint16, uint32, uint32);
+extern bool cppISteamMatchmaking_SteamMatchMaking007_RemoveFavoriteGame(void *, AppId_t, uint32, uint16, uint16, uint32);
+extern SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking007_RequestLobbyList(void *);
+extern void cppISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListStringFilter(void *, const char *, const char *, ELobbyComparison);
+extern void cppISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListNumericalFilter(void *, const char *, int, ELobbyComparison);
+extern void cppISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListNearValueFilter(void *, const char *, int);
+extern void cppISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListFilterSlotsAvailable(void *, int);
+extern CSteamID cppISteamMatchmaking_SteamMatchMaking007_GetLobbyByIndex(void *, int);
+extern SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking007_CreateLobby(void *, ELobbyType, int);
+extern SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking007_JoinLobby(void *, CSteamID);
+extern void cppISteamMatchmaking_SteamMatchMaking007_LeaveLobby(void *, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking007_InviteUserToLobby(void *, CSteamID, CSteamID);
+extern int cppISteamMatchmaking_SteamMatchMaking007_GetNumLobbyMembers(void *, CSteamID);
+extern CSteamID cppISteamMatchmaking_SteamMatchMaking007_GetLobbyMemberByIndex(void *, CSteamID, int);
+extern const char * cppISteamMatchmaking_SteamMatchMaking007_GetLobbyData(void *, CSteamID, const char *);
+extern bool cppISteamMatchmaking_SteamMatchMaking007_SetLobbyData(void *, CSteamID, const char *, const char *);
+extern int cppISteamMatchmaking_SteamMatchMaking007_GetLobbyDataCount(void *, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking007_GetLobbyDataByIndex(void *, CSteamID, int, char *, int, char *, int);
+extern bool cppISteamMatchmaking_SteamMatchMaking007_DeleteLobbyData(void *, CSteamID, const char *);
+extern const char * cppISteamMatchmaking_SteamMatchMaking007_GetLobbyMemberData(void *, CSteamID, CSteamID, const char *);
+extern void cppISteamMatchmaking_SteamMatchMaking007_SetLobbyMemberData(void *, CSteamID, const char *, const char *);
+extern bool cppISteamMatchmaking_SteamMatchMaking007_SendLobbyChatMsg(void *, CSteamID, const void *, int);
+extern int cppISteamMatchmaking_SteamMatchMaking007_GetLobbyChatEntry(void *, CSteamID, int, CSteamID *, void *, int, EChatEntryType *);
+extern bool cppISteamMatchmaking_SteamMatchMaking007_RequestLobbyData(void *, CSteamID);
+extern void cppISteamMatchmaking_SteamMatchMaking007_SetLobbyGameServer(void *, CSteamID, uint32, uint16, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking007_GetLobbyGameServer(void *, CSteamID, uint32 *, uint16 *, CSteamID *);
+extern bool cppISteamMatchmaking_SteamMatchMaking007_SetLobbyMemberLimit(void *, CSteamID, int);
+extern int cppISteamMatchmaking_SteamMatchMaking007_GetLobbyMemberLimit(void *, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking007_SetLobbyType(void *, CSteamID, ELobbyType);
+extern bool cppISteamMatchmaking_SteamMatchMaking007_SetLobbyJoinable(void *, CSteamID, bool);
+extern CSteamID cppISteamMatchmaking_SteamMatchMaking007_GetLobbyOwner(void *, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking007_SetLobbyOwner(void *, CSteamID, CSteamID);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMatchmaking_SteamMatchMaking008.cpp b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking008.cpp
new file mode 100644
index 00000000..ed746e14
--- /dev/null
+++ b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking008.cpp
@@ -0,0 +1,190 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_116/steam_api.h"
+#include "cppISteamMatchmaking_SteamMatchMaking008.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+int cppISteamMatchmaking_SteamMatchMaking008_GetFavoriteGameCount(void *linux_side)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetFavoriteGameCount();
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking008_GetFavoriteGame(void *linux_side, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetFavoriteGame((int)iGame, (AppId_t *)pnAppID, (uint32 *)pnIP, (uint16 *)pnConnPort, (uint16 *)pnQueryPort, (uint32 *)punFlags, (uint32 *)pRTime32LastPlayedOnServer);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking008_AddFavoriteGame(void *linux_side, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer)
+{
+ return ((ISteamMatchmaking*)linux_side)->AddFavoriteGame((AppId_t)nAppID, (uint32)nIP, (uint16)nConnPort, (uint16)nQueryPort, (uint32)unFlags, (uint32)rTime32LastPlayedOnServer);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking008_RemoveFavoriteGame(void *linux_side, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags)
+{
+ return ((ISteamMatchmaking*)linux_side)->RemoveFavoriteGame((AppId_t)nAppID, (uint32)nIP, (uint16)nConnPort, (uint16)nQueryPort, (uint32)unFlags);
+}
+
+SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking008_RequestLobbyList(void *linux_side)
+{
+ return ((ISteamMatchmaking*)linux_side)->RequestLobbyList();
+}
+
+void cppISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListStringFilter(void *linux_side, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListStringFilter((const char *)pchKeyToMatch, (const char *)pchValueToMatch, (ELobbyComparison)eComparisonType);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListNumericalFilter(void *linux_side, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListNumericalFilter((const char *)pchKeyToMatch, (int)nValueToMatch, (ELobbyComparison)eComparisonType);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListNearValueFilter(void *linux_side, const char * pchKeyToMatch, int nValueToBeCloseTo)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListNearValueFilter((const char *)pchKeyToMatch, (int)nValueToBeCloseTo);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListFilterSlotsAvailable(void *linux_side, int nSlotsAvailable)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListFilterSlotsAvailable((int)nSlotsAvailable);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListDistanceFilter(void *linux_side, ELobbyDistanceFilter eLobbyDistanceFilter)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListDistanceFilter((ELobbyDistanceFilter)eLobbyDistanceFilter);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListResultCountFilter(void *linux_side, int cMaxResults)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListResultCountFilter((int)cMaxResults);
+}
+
+CSteamID cppISteamMatchmaking_SteamMatchMaking008_GetLobbyByIndex(void *linux_side, int iLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyByIndex((int)iLobby);
+}
+
+SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking008_CreateLobby(void *linux_side, ELobbyType eLobbyType, int cMaxMembers)
+{
+ return ((ISteamMatchmaking*)linux_side)->CreateLobby((ELobbyType)eLobbyType, (int)cMaxMembers);
+}
+
+SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking008_JoinLobby(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->JoinLobby((CSteamID)steamIDLobby);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking008_LeaveLobby(void *linux_side, CSteamID steamIDLobby)
+{
+ ((ISteamMatchmaking*)linux_side)->LeaveLobby((CSteamID)steamIDLobby);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking008_InviteUserToLobby(void *linux_side, CSteamID steamIDLobby, CSteamID steamIDInvitee)
+{
+ return ((ISteamMatchmaking*)linux_side)->InviteUserToLobby((CSteamID)steamIDLobby, (CSteamID)steamIDInvitee);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking008_GetNumLobbyMembers(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetNumLobbyMembers((CSteamID)steamIDLobby);
+}
+
+CSteamID cppISteamMatchmaking_SteamMatchMaking008_GetLobbyMemberByIndex(void *linux_side, CSteamID steamIDLobby, int iMember)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyMemberByIndex((CSteamID)steamIDLobby, (int)iMember);
+}
+
+const char * cppISteamMatchmaking_SteamMatchMaking008_GetLobbyData(void *linux_side, CSteamID steamIDLobby, const char * pchKey)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyData((CSteamID)steamIDLobby, (const char *)pchKey);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking008_SetLobbyData(void *linux_side, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyData((CSteamID)steamIDLobby, (const char *)pchKey, (const char *)pchValue);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking008_GetLobbyDataCount(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyDataCount((CSteamID)steamIDLobby);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking008_GetLobbyDataByIndex(void *linux_side, CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyDataByIndex((CSteamID)steamIDLobby, (int)iLobbyData, (char *)pchKey, (int)cchKeyBufferSize, (char *)pchValue, (int)cchValueBufferSize);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking008_DeleteLobbyData(void *linux_side, CSteamID steamIDLobby, const char * pchKey)
+{
+ return ((ISteamMatchmaking*)linux_side)->DeleteLobbyData((CSteamID)steamIDLobby, (const char *)pchKey);
+}
+
+const char * cppISteamMatchmaking_SteamMatchMaking008_GetLobbyMemberData(void *linux_side, CSteamID steamIDLobby, CSteamID steamIDUser, const char * pchKey)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyMemberData((CSteamID)steamIDLobby, (CSteamID)steamIDUser, (const char *)pchKey);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking008_SetLobbyMemberData(void *linux_side, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ ((ISteamMatchmaking*)linux_side)->SetLobbyMemberData((CSteamID)steamIDLobby, (const char *)pchKey, (const char *)pchValue);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking008_SendLobbyChatMsg(void *linux_side, CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody)
+{
+ return ((ISteamMatchmaking*)linux_side)->SendLobbyChatMsg((CSteamID)steamIDLobby, (const void *)pvMsgBody, (int)cubMsgBody);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking008_GetLobbyChatEntry(void *linux_side, CSteamID steamIDLobby, int iChatID, CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyChatEntry((CSteamID)steamIDLobby, (int)iChatID, (CSteamID *)pSteamIDUser, (void *)pvData, (int)cubData, (EChatEntryType *)peChatEntryType);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking008_RequestLobbyData(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->RequestLobbyData((CSteamID)steamIDLobby);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking008_SetLobbyGameServer(void *linux_side, CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer)
+{
+ ((ISteamMatchmaking*)linux_side)->SetLobbyGameServer((CSteamID)steamIDLobby, (uint32)unGameServerIP, (uint16)unGameServerPort, (CSteamID)steamIDGameServer);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking008_GetLobbyGameServer(void *linux_side, CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, CSteamID * psteamIDGameServer)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyGameServer((CSteamID)steamIDLobby, (uint32 *)punGameServerIP, (uint16 *)punGameServerPort, (CSteamID *)psteamIDGameServer);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking008_SetLobbyMemberLimit(void *linux_side, CSteamID steamIDLobby, int cMaxMembers)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyMemberLimit((CSteamID)steamIDLobby, (int)cMaxMembers);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking008_GetLobbyMemberLimit(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyMemberLimit((CSteamID)steamIDLobby);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking008_SetLobbyType(void *linux_side, CSteamID steamIDLobby, ELobbyType eLobbyType)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyType((CSteamID)steamIDLobby, (ELobbyType)eLobbyType);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking008_SetLobbyJoinable(void *linux_side, CSteamID steamIDLobby, bool bLobbyJoinable)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyJoinable((CSteamID)steamIDLobby, (bool)bLobbyJoinable);
+}
+
+CSteamID cppISteamMatchmaking_SteamMatchMaking008_GetLobbyOwner(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyOwner((CSteamID)steamIDLobby);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking008_SetLobbyOwner(void *linux_side, CSteamID steamIDLobby, CSteamID steamIDNewOwner)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyOwner((CSteamID)steamIDLobby, (CSteamID)steamIDNewOwner);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMatchmaking_SteamMatchMaking008.h b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking008.h
new file mode 100644
index 00000000..8c449c3b
--- /dev/null
+++ b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking008.h
@@ -0,0 +1,42 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern int cppISteamMatchmaking_SteamMatchMaking008_GetFavoriteGameCount(void *);
+extern bool cppISteamMatchmaking_SteamMatchMaking008_GetFavoriteGame(void *, int, AppId_t *, uint32 *, uint16 *, uint16 *, uint32 *, uint32 *);
+extern int cppISteamMatchmaking_SteamMatchMaking008_AddFavoriteGame(void *, AppId_t, uint32, uint16, uint16, uint32, uint32);
+extern bool cppISteamMatchmaking_SteamMatchMaking008_RemoveFavoriteGame(void *, AppId_t, uint32, uint16, uint16, uint32);
+extern SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking008_RequestLobbyList(void *);
+extern void cppISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListStringFilter(void *, const char *, const char *, ELobbyComparison);
+extern void cppISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListNumericalFilter(void *, const char *, int, ELobbyComparison);
+extern void cppISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListNearValueFilter(void *, const char *, int);
+extern void cppISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListFilterSlotsAvailable(void *, int);
+extern void cppISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListDistanceFilter(void *, ELobbyDistanceFilter);
+extern void cppISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListResultCountFilter(void *, int);
+extern CSteamID cppISteamMatchmaking_SteamMatchMaking008_GetLobbyByIndex(void *, int);
+extern SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking008_CreateLobby(void *, ELobbyType, int);
+extern SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking008_JoinLobby(void *, CSteamID);
+extern void cppISteamMatchmaking_SteamMatchMaking008_LeaveLobby(void *, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking008_InviteUserToLobby(void *, CSteamID, CSteamID);
+extern int cppISteamMatchmaking_SteamMatchMaking008_GetNumLobbyMembers(void *, CSteamID);
+extern CSteamID cppISteamMatchmaking_SteamMatchMaking008_GetLobbyMemberByIndex(void *, CSteamID, int);
+extern const char * cppISteamMatchmaking_SteamMatchMaking008_GetLobbyData(void *, CSteamID, const char *);
+extern bool cppISteamMatchmaking_SteamMatchMaking008_SetLobbyData(void *, CSteamID, const char *, const char *);
+extern int cppISteamMatchmaking_SteamMatchMaking008_GetLobbyDataCount(void *, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking008_GetLobbyDataByIndex(void *, CSteamID, int, char *, int, char *, int);
+extern bool cppISteamMatchmaking_SteamMatchMaking008_DeleteLobbyData(void *, CSteamID, const char *);
+extern const char * cppISteamMatchmaking_SteamMatchMaking008_GetLobbyMemberData(void *, CSteamID, CSteamID, const char *);
+extern void cppISteamMatchmaking_SteamMatchMaking008_SetLobbyMemberData(void *, CSteamID, const char *, const char *);
+extern bool cppISteamMatchmaking_SteamMatchMaking008_SendLobbyChatMsg(void *, CSteamID, const void *, int);
+extern int cppISteamMatchmaking_SteamMatchMaking008_GetLobbyChatEntry(void *, CSteamID, int, CSteamID *, void *, int, EChatEntryType *);
+extern bool cppISteamMatchmaking_SteamMatchMaking008_RequestLobbyData(void *, CSteamID);
+extern void cppISteamMatchmaking_SteamMatchMaking008_SetLobbyGameServer(void *, CSteamID, uint32, uint16, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking008_GetLobbyGameServer(void *, CSteamID, uint32 *, uint16 *, CSteamID *);
+extern bool cppISteamMatchmaking_SteamMatchMaking008_SetLobbyMemberLimit(void *, CSteamID, int);
+extern int cppISteamMatchmaking_SteamMatchMaking008_GetLobbyMemberLimit(void *, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking008_SetLobbyType(void *, CSteamID, ELobbyType);
+extern bool cppISteamMatchmaking_SteamMatchMaking008_SetLobbyJoinable(void *, CSteamID, bool);
+extern CSteamID cppISteamMatchmaking_SteamMatchMaking008_GetLobbyOwner(void *, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking008_SetLobbyOwner(void *, CSteamID, CSteamID);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMatchmaking_SteamMatchMaking009.cpp b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking009.cpp
new file mode 100644
index 00000000..41299b89
--- /dev/null
+++ b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking009.cpp
@@ -0,0 +1,200 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamMatchmaking_SteamMatchMaking009.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+int cppISteamMatchmaking_SteamMatchMaking009_GetFavoriteGameCount(void *linux_side)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetFavoriteGameCount();
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking009_GetFavoriteGame(void *linux_side, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetFavoriteGame((int)iGame, (AppId_t *)pnAppID, (uint32 *)pnIP, (uint16 *)pnConnPort, (uint16 *)pnQueryPort, (uint32 *)punFlags, (uint32 *)pRTime32LastPlayedOnServer);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking009_AddFavoriteGame(void *linux_side, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer)
+{
+ return ((ISteamMatchmaking*)linux_side)->AddFavoriteGame((AppId_t)nAppID, (uint32)nIP, (uint16)nConnPort, (uint16)nQueryPort, (uint32)unFlags, (uint32)rTime32LastPlayedOnServer);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking009_RemoveFavoriteGame(void *linux_side, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags)
+{
+ return ((ISteamMatchmaking*)linux_side)->RemoveFavoriteGame((AppId_t)nAppID, (uint32)nIP, (uint16)nConnPort, (uint16)nQueryPort, (uint32)unFlags);
+}
+
+SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking009_RequestLobbyList(void *linux_side)
+{
+ return ((ISteamMatchmaking*)linux_side)->RequestLobbyList();
+}
+
+void cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListStringFilter(void *linux_side, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListStringFilter((const char *)pchKeyToMatch, (const char *)pchValueToMatch, (ELobbyComparison)eComparisonType);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListNumericalFilter(void *linux_side, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListNumericalFilter((const char *)pchKeyToMatch, (int)nValueToMatch, (ELobbyComparison)eComparisonType);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListNearValueFilter(void *linux_side, const char * pchKeyToMatch, int nValueToBeCloseTo)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListNearValueFilter((const char *)pchKeyToMatch, (int)nValueToBeCloseTo);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListFilterSlotsAvailable(void *linux_side, int nSlotsAvailable)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListFilterSlotsAvailable((int)nSlotsAvailable);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListDistanceFilter(void *linux_side, ELobbyDistanceFilter eLobbyDistanceFilter)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListDistanceFilter((ELobbyDistanceFilter)eLobbyDistanceFilter);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListResultCountFilter(void *linux_side, int cMaxResults)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListResultCountFilter((int)cMaxResults);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListCompatibleMembersFilter(void *linux_side, CSteamID steamIDLobby)
+{
+ ((ISteamMatchmaking*)linux_side)->AddRequestLobbyListCompatibleMembersFilter((CSteamID)steamIDLobby);
+}
+
+CSteamID cppISteamMatchmaking_SteamMatchMaking009_GetLobbyByIndex(void *linux_side, int iLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyByIndex((int)iLobby);
+}
+
+SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking009_CreateLobby(void *linux_side, ELobbyType eLobbyType, int cMaxMembers)
+{
+ return ((ISteamMatchmaking*)linux_side)->CreateLobby((ELobbyType)eLobbyType, (int)cMaxMembers);
+}
+
+SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking009_JoinLobby(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->JoinLobby((CSteamID)steamIDLobby);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking009_LeaveLobby(void *linux_side, CSteamID steamIDLobby)
+{
+ ((ISteamMatchmaking*)linux_side)->LeaveLobby((CSteamID)steamIDLobby);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking009_InviteUserToLobby(void *linux_side, CSteamID steamIDLobby, CSteamID steamIDInvitee)
+{
+ return ((ISteamMatchmaking*)linux_side)->InviteUserToLobby((CSteamID)steamIDLobby, (CSteamID)steamIDInvitee);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking009_GetNumLobbyMembers(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetNumLobbyMembers((CSteamID)steamIDLobby);
+}
+
+CSteamID cppISteamMatchmaking_SteamMatchMaking009_GetLobbyMemberByIndex(void *linux_side, CSteamID steamIDLobby, int iMember)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyMemberByIndex((CSteamID)steamIDLobby, (int)iMember);
+}
+
+const char * cppISteamMatchmaking_SteamMatchMaking009_GetLobbyData(void *linux_side, CSteamID steamIDLobby, const char * pchKey)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyData((CSteamID)steamIDLobby, (const char *)pchKey);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking009_SetLobbyData(void *linux_side, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyData((CSteamID)steamIDLobby, (const char *)pchKey, (const char *)pchValue);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking009_GetLobbyDataCount(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyDataCount((CSteamID)steamIDLobby);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking009_GetLobbyDataByIndex(void *linux_side, CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyDataByIndex((CSteamID)steamIDLobby, (int)iLobbyData, (char *)pchKey, (int)cchKeyBufferSize, (char *)pchValue, (int)cchValueBufferSize);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking009_DeleteLobbyData(void *linux_side, CSteamID steamIDLobby, const char * pchKey)
+{
+ return ((ISteamMatchmaking*)linux_side)->DeleteLobbyData((CSteamID)steamIDLobby, (const char *)pchKey);
+}
+
+const char * cppISteamMatchmaking_SteamMatchMaking009_GetLobbyMemberData(void *linux_side, CSteamID steamIDLobby, CSteamID steamIDUser, const char * pchKey)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyMemberData((CSteamID)steamIDLobby, (CSteamID)steamIDUser, (const char *)pchKey);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking009_SetLobbyMemberData(void *linux_side, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ ((ISteamMatchmaking*)linux_side)->SetLobbyMemberData((CSteamID)steamIDLobby, (const char *)pchKey, (const char *)pchValue);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking009_SendLobbyChatMsg(void *linux_side, CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody)
+{
+ return ((ISteamMatchmaking*)linux_side)->SendLobbyChatMsg((CSteamID)steamIDLobby, (const void *)pvMsgBody, (int)cubMsgBody);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking009_GetLobbyChatEntry(void *linux_side, CSteamID steamIDLobby, int iChatID, CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyChatEntry((CSteamID)steamIDLobby, (int)iChatID, (CSteamID *)pSteamIDUser, (void *)pvData, (int)cubData, (EChatEntryType *)peChatEntryType);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking009_RequestLobbyData(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->RequestLobbyData((CSteamID)steamIDLobby);
+}
+
+void cppISteamMatchmaking_SteamMatchMaking009_SetLobbyGameServer(void *linux_side, CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer)
+{
+ ((ISteamMatchmaking*)linux_side)->SetLobbyGameServer((CSteamID)steamIDLobby, (uint32)unGameServerIP, (uint16)unGameServerPort, (CSteamID)steamIDGameServer);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking009_GetLobbyGameServer(void *linux_side, CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, CSteamID * psteamIDGameServer)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyGameServer((CSteamID)steamIDLobby, (uint32 *)punGameServerIP, (uint16 *)punGameServerPort, (CSteamID *)psteamIDGameServer);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking009_SetLobbyMemberLimit(void *linux_side, CSteamID steamIDLobby, int cMaxMembers)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyMemberLimit((CSteamID)steamIDLobby, (int)cMaxMembers);
+}
+
+int cppISteamMatchmaking_SteamMatchMaking009_GetLobbyMemberLimit(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyMemberLimit((CSteamID)steamIDLobby);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking009_SetLobbyType(void *linux_side, CSteamID steamIDLobby, ELobbyType eLobbyType)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyType((CSteamID)steamIDLobby, (ELobbyType)eLobbyType);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking009_SetLobbyJoinable(void *linux_side, CSteamID steamIDLobby, bool bLobbyJoinable)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyJoinable((CSteamID)steamIDLobby, (bool)bLobbyJoinable);
+}
+
+CSteamID cppISteamMatchmaking_SteamMatchMaking009_GetLobbyOwner(void *linux_side, CSteamID steamIDLobby)
+{
+ return ((ISteamMatchmaking*)linux_side)->GetLobbyOwner((CSteamID)steamIDLobby);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking009_SetLobbyOwner(void *linux_side, CSteamID steamIDLobby, CSteamID steamIDNewOwner)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLobbyOwner((CSteamID)steamIDLobby, (CSteamID)steamIDNewOwner);
+}
+
+bool cppISteamMatchmaking_SteamMatchMaking009_SetLinkedLobby(void *linux_side, CSteamID steamIDLobby, CSteamID steamIDLobbyDependent)
+{
+ return ((ISteamMatchmaking*)linux_side)->SetLinkedLobby((CSteamID)steamIDLobby, (CSteamID)steamIDLobbyDependent);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMatchmaking_SteamMatchMaking009.h b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking009.h
new file mode 100644
index 00000000..415f28dc
--- /dev/null
+++ b/lsteamclient/cppISteamMatchmaking_SteamMatchMaking009.h
@@ -0,0 +1,44 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern int cppISteamMatchmaking_SteamMatchMaking009_GetFavoriteGameCount(void *);
+extern bool cppISteamMatchmaking_SteamMatchMaking009_GetFavoriteGame(void *, int, AppId_t *, uint32 *, uint16 *, uint16 *, uint32 *, uint32 *);
+extern int cppISteamMatchmaking_SteamMatchMaking009_AddFavoriteGame(void *, AppId_t, uint32, uint16, uint16, uint32, uint32);
+extern bool cppISteamMatchmaking_SteamMatchMaking009_RemoveFavoriteGame(void *, AppId_t, uint32, uint16, uint16, uint32);
+extern SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking009_RequestLobbyList(void *);
+extern void cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListStringFilter(void *, const char *, const char *, ELobbyComparison);
+extern void cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListNumericalFilter(void *, const char *, int, ELobbyComparison);
+extern void cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListNearValueFilter(void *, const char *, int);
+extern void cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListFilterSlotsAvailable(void *, int);
+extern void cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListDistanceFilter(void *, ELobbyDistanceFilter);
+extern void cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListResultCountFilter(void *, int);
+extern void cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListCompatibleMembersFilter(void *, CSteamID);
+extern CSteamID cppISteamMatchmaking_SteamMatchMaking009_GetLobbyByIndex(void *, int);
+extern SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking009_CreateLobby(void *, ELobbyType, int);
+extern SteamAPICall_t cppISteamMatchmaking_SteamMatchMaking009_JoinLobby(void *, CSteamID);
+extern void cppISteamMatchmaking_SteamMatchMaking009_LeaveLobby(void *, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking009_InviteUserToLobby(void *, CSteamID, CSteamID);
+extern int cppISteamMatchmaking_SteamMatchMaking009_GetNumLobbyMembers(void *, CSteamID);
+extern CSteamID cppISteamMatchmaking_SteamMatchMaking009_GetLobbyMemberByIndex(void *, CSteamID, int);
+extern const char * cppISteamMatchmaking_SteamMatchMaking009_GetLobbyData(void *, CSteamID, const char *);
+extern bool cppISteamMatchmaking_SteamMatchMaking009_SetLobbyData(void *, CSteamID, const char *, const char *);
+extern int cppISteamMatchmaking_SteamMatchMaking009_GetLobbyDataCount(void *, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking009_GetLobbyDataByIndex(void *, CSteamID, int, char *, int, char *, int);
+extern bool cppISteamMatchmaking_SteamMatchMaking009_DeleteLobbyData(void *, CSteamID, const char *);
+extern const char * cppISteamMatchmaking_SteamMatchMaking009_GetLobbyMemberData(void *, CSteamID, CSteamID, const char *);
+extern void cppISteamMatchmaking_SteamMatchMaking009_SetLobbyMemberData(void *, CSteamID, const char *, const char *);
+extern bool cppISteamMatchmaking_SteamMatchMaking009_SendLobbyChatMsg(void *, CSteamID, const void *, int);
+extern int cppISteamMatchmaking_SteamMatchMaking009_GetLobbyChatEntry(void *, CSteamID, int, CSteamID *, void *, int, EChatEntryType *);
+extern bool cppISteamMatchmaking_SteamMatchMaking009_RequestLobbyData(void *, CSteamID);
+extern void cppISteamMatchmaking_SteamMatchMaking009_SetLobbyGameServer(void *, CSteamID, uint32, uint16, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking009_GetLobbyGameServer(void *, CSteamID, uint32 *, uint16 *, CSteamID *);
+extern bool cppISteamMatchmaking_SteamMatchMaking009_SetLobbyMemberLimit(void *, CSteamID, int);
+extern int cppISteamMatchmaking_SteamMatchMaking009_GetLobbyMemberLimit(void *, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking009_SetLobbyType(void *, CSteamID, ELobbyType);
+extern bool cppISteamMatchmaking_SteamMatchMaking009_SetLobbyJoinable(void *, CSteamID, bool);
+extern CSteamID cppISteamMatchmaking_SteamMatchMaking009_GetLobbyOwner(void *, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking009_SetLobbyOwner(void *, CSteamID, CSteamID);
+extern bool cppISteamMatchmaking_SteamMatchMaking009_SetLinkedLobby(void *, CSteamID, CSteamID);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001.cpp b/lsteamclient/cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001.cpp
new file mode 100644
index 00000000..7ee363c9
--- /dev/null
+++ b/lsteamclient/cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001.cpp
@@ -0,0 +1,170 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_RegisterSteamMusicRemote(void *linux_side, const char * pchName)
+{
+ return ((ISteamMusicRemote*)linux_side)->RegisterSteamMusicRemote((const char *)pchName);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_DeregisterSteamMusicRemote(void *linux_side)
+{
+ return ((ISteamMusicRemote*)linux_side)->DeregisterSteamMusicRemote();
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_BIsCurrentMusicRemote(void *linux_side)
+{
+ return ((ISteamMusicRemote*)linux_side)->BIsCurrentMusicRemote();
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_BActivationSuccess(void *linux_side, bool bValue)
+{
+ return ((ISteamMusicRemote*)linux_side)->BActivationSuccess((bool)bValue);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetDisplayName(void *linux_side, const char * pchDisplayName)
+{
+ return ((ISteamMusicRemote*)linux_side)->SetDisplayName((const char *)pchDisplayName);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetPNGIcon_64x64(void *linux_side, void * pvBuffer, uint32 cbBufferLength)
+{
+ return ((ISteamMusicRemote*)linux_side)->SetPNGIcon_64x64((void *)pvBuffer, (uint32)cbBufferLength);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnablePlayPrevious(void *linux_side, bool bValue)
+{
+ return ((ISteamMusicRemote*)linux_side)->EnablePlayPrevious((bool)bValue);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnablePlayNext(void *linux_side, bool bValue)
+{
+ return ((ISteamMusicRemote*)linux_side)->EnablePlayNext((bool)bValue);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnableShuffled(void *linux_side, bool bValue)
+{
+ return ((ISteamMusicRemote*)linux_side)->EnableShuffled((bool)bValue);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnableLooped(void *linux_side, bool bValue)
+{
+ return ((ISteamMusicRemote*)linux_side)->EnableLooped((bool)bValue);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnableQueue(void *linux_side, bool bValue)
+{
+ return ((ISteamMusicRemote*)linux_side)->EnableQueue((bool)bValue);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnablePlaylists(void *linux_side, bool bValue)
+{
+ return ((ISteamMusicRemote*)linux_side)->EnablePlaylists((bool)bValue);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdatePlaybackStatus(void *linux_side, AudioPlayback_Status nStatus)
+{
+ return ((ISteamMusicRemote*)linux_side)->UpdatePlaybackStatus((AudioPlayback_Status)nStatus);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateShuffled(void *linux_side, bool bValue)
+{
+ return ((ISteamMusicRemote*)linux_side)->UpdateShuffled((bool)bValue);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateLooped(void *linux_side, bool bValue)
+{
+ return ((ISteamMusicRemote*)linux_side)->UpdateLooped((bool)bValue);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateVolume(void *linux_side, float flValue)
+{
+ return ((ISteamMusicRemote*)linux_side)->UpdateVolume((float)flValue);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_CurrentEntryWillChange(void *linux_side)
+{
+ return ((ISteamMusicRemote*)linux_side)->CurrentEntryWillChange();
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_CurrentEntryIsAvailable(void *linux_side, bool bAvailable)
+{
+ return ((ISteamMusicRemote*)linux_side)->CurrentEntryIsAvailable((bool)bAvailable);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateCurrentEntryText(void *linux_side, const char * pchText)
+{
+ return ((ISteamMusicRemote*)linux_side)->UpdateCurrentEntryText((const char *)pchText);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateCurrentEntryElapsedSeconds(void *linux_side, int nValue)
+{
+ return ((ISteamMusicRemote*)linux_side)->UpdateCurrentEntryElapsedSeconds((int)nValue);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateCurrentEntryCoverArt(void *linux_side, void * pvBuffer, uint32 cbBufferLength)
+{
+ return ((ISteamMusicRemote*)linux_side)->UpdateCurrentEntryCoverArt((void *)pvBuffer, (uint32)cbBufferLength);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_CurrentEntryDidChange(void *linux_side)
+{
+ return ((ISteamMusicRemote*)linux_side)->CurrentEntryDidChange();
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_QueueWillChange(void *linux_side)
+{
+ return ((ISteamMusicRemote*)linux_side)->QueueWillChange();
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_ResetQueueEntries(void *linux_side)
+{
+ return ((ISteamMusicRemote*)linux_side)->ResetQueueEntries();
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetQueueEntry(void *linux_side, int nID, int nPosition, const char * pchEntryText)
+{
+ return ((ISteamMusicRemote*)linux_side)->SetQueueEntry((int)nID, (int)nPosition, (const char *)pchEntryText);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetCurrentQueueEntry(void *linux_side, int nID)
+{
+ return ((ISteamMusicRemote*)linux_side)->SetCurrentQueueEntry((int)nID);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_QueueDidChange(void *linux_side)
+{
+ return ((ISteamMusicRemote*)linux_side)->QueueDidChange();
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_PlaylistWillChange(void *linux_side)
+{
+ return ((ISteamMusicRemote*)linux_side)->PlaylistWillChange();
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_ResetPlaylistEntries(void *linux_side)
+{
+ return ((ISteamMusicRemote*)linux_side)->ResetPlaylistEntries();
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetPlaylistEntry(void *linux_side, int nID, int nPosition, const char * pchEntryText)
+{
+ return ((ISteamMusicRemote*)linux_side)->SetPlaylistEntry((int)nID, (int)nPosition, (const char *)pchEntryText);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetCurrentPlaylistEntry(void *linux_side, int nID)
+{
+ return ((ISteamMusicRemote*)linux_side)->SetCurrentPlaylistEntry((int)nID);
+}
+
+bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_PlaylistDidChange(void *linux_side)
+{
+ return ((ISteamMusicRemote*)linux_side)->PlaylistDidChange();
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001.h b/lsteamclient/cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001.h
new file mode 100644
index 00000000..47cfb5de
--- /dev/null
+++ b/lsteamclient/cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001.h
@@ -0,0 +1,38 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_RegisterSteamMusicRemote(void *, const char *);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_DeregisterSteamMusicRemote(void *);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_BIsCurrentMusicRemote(void *);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_BActivationSuccess(void *, bool);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetDisplayName(void *, const char *);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetPNGIcon_64x64(void *, void *, uint32);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnablePlayPrevious(void *, bool);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnablePlayNext(void *, bool);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnableShuffled(void *, bool);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnableLooped(void *, bool);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnableQueue(void *, bool);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnablePlaylists(void *, bool);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdatePlaybackStatus(void *, AudioPlayback_Status);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateShuffled(void *, bool);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateLooped(void *, bool);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateVolume(void *, float);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_CurrentEntryWillChange(void *);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_CurrentEntryIsAvailable(void *, bool);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateCurrentEntryText(void *, const char *);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateCurrentEntryElapsedSeconds(void *, int);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateCurrentEntryCoverArt(void *, void *, uint32);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_CurrentEntryDidChange(void *);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_QueueWillChange(void *);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_ResetQueueEntries(void *);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetQueueEntry(void *, int, int, const char *);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetCurrentQueueEntry(void *, int);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_QueueDidChange(void *);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_PlaylistWillChange(void *);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_ResetPlaylistEntries(void *);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetPlaylistEntry(void *, int, int, const char *);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetCurrentPlaylistEntry(void *, int);
+extern bool cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_PlaylistDidChange(void *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001.cpp b/lsteamclient/cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001.cpp
new file mode 100644
index 00000000..e344a02d
--- /dev/null
+++ b/lsteamclient/cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001.cpp
@@ -0,0 +1,55 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_BIsEnabled(void *linux_side)
+{
+ return ((ISteamMusic*)linux_side)->BIsEnabled();
+}
+
+bool cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_BIsPlaying(void *linux_side)
+{
+ return ((ISteamMusic*)linux_side)->BIsPlaying();
+}
+
+AudioPlayback_Status cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_GetPlaybackStatus(void *linux_side)
+{
+ return ((ISteamMusic*)linux_side)->GetPlaybackStatus();
+}
+
+void cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_Play(void *linux_side)
+{
+ ((ISteamMusic*)linux_side)->Play();
+}
+
+void cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_Pause(void *linux_side)
+{
+ ((ISteamMusic*)linux_side)->Pause();
+}
+
+void cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_PlayPrevious(void *linux_side)
+{
+ ((ISteamMusic*)linux_side)->PlayPrevious();
+}
+
+void cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_PlayNext(void *linux_side)
+{
+ ((ISteamMusic*)linux_side)->PlayNext();
+}
+
+void cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_SetVolume(void *linux_side, float flVolume)
+{
+ ((ISteamMusic*)linux_side)->SetVolume((float)flVolume);
+}
+
+float cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_GetVolume(void *linux_side)
+{
+ return ((ISteamMusic*)linux_side)->GetVolume();
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001.h b/lsteamclient/cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001.h
new file mode 100644
index 00000000..e6bfdfce
--- /dev/null
+++ b/lsteamclient/cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001.h
@@ -0,0 +1,15 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_BIsEnabled(void *);
+extern bool cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_BIsPlaying(void *);
+extern AudioPlayback_Status cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_GetPlaybackStatus(void *);
+extern void cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_Play(void *);
+extern void cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_Pause(void *);
+extern void cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_PlayPrevious(void *);
+extern void cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_PlayNext(void *);
+extern void cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_SetVolume(void *, float);
+extern float cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_GetVolume(void *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamNetworking_SteamNetworking001.cpp b/lsteamclient/cppISteamNetworking_SteamNetworking001.cpp
new file mode 100644
index 00000000..0833deef
--- /dev/null
+++ b/lsteamclient/cppISteamNetworking_SteamNetworking001.cpp
@@ -0,0 +1,70 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_102/steam_api.h"
+#include "cppISteamNetworking_SteamNetworking001.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+SNetListenSocket_t cppISteamNetworking_SteamNetworking001_CreateListenSocket(void *linux_side, int nVirtualP2PPort, uint32 nIP, uint16 nPort)
+{
+ return ((ISteamNetworking*)linux_side)->CreateListenSocket((int)nVirtualP2PPort, (uint32)nIP, (uint16)nPort);
+}
+
+SNetSocket_t cppISteamNetworking_SteamNetworking001_CreateP2PConnectionSocket(void *linux_side, CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec)
+{
+ return ((ISteamNetworking*)linux_side)->CreateP2PConnectionSocket((CSteamID)steamIDTarget, (int)nVirtualPort, (int)nTimeoutSec);
+}
+
+SNetSocket_t cppISteamNetworking_SteamNetworking001_CreateConnectionSocket(void *linux_side, uint32 nIP, uint16 nPort, int nTimeoutSec)
+{
+ return ((ISteamNetworking*)linux_side)->CreateConnectionSocket((uint32)nIP, (uint16)nPort, (int)nTimeoutSec);
+}
+
+bool cppISteamNetworking_SteamNetworking001_DestroySocket(void *linux_side, SNetSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ return ((ISteamNetworking*)linux_side)->DestroySocket((SNetSocket_t)hSocket, (bool)bNotifyRemoteEnd);
+}
+
+bool cppISteamNetworking_SteamNetworking001_DestroyListenSocket(void *linux_side, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ return ((ISteamNetworking*)linux_side)->DestroyListenSocket((SNetListenSocket_t)hSocket, (bool)bNotifyRemoteEnd);
+}
+
+bool cppISteamNetworking_SteamNetworking001_SendDataOnSocket(void *linux_side, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable)
+{
+ return ((ISteamNetworking*)linux_side)->SendDataOnSocket((SNetSocket_t)hSocket, (void *)pubData, (uint32)cubData, (bool)bReliable);
+}
+
+bool cppISteamNetworking_SteamNetworking001_IsDataAvailableOnSocket(void *linux_side, SNetSocket_t hSocket, uint32 * pcubMsgSize)
+{
+ return ((ISteamNetworking*)linux_side)->IsDataAvailableOnSocket((SNetSocket_t)hSocket, (uint32 *)pcubMsgSize);
+}
+
+bool cppISteamNetworking_SteamNetworking001_RetrieveDataFromSocket(void *linux_side, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize)
+{
+ return ((ISteamNetworking*)linux_side)->RetrieveDataFromSocket((SNetSocket_t)hSocket, (void *)pubDest, (uint32)cubDest, (uint32 *)pcubMsgSize);
+}
+
+bool cppISteamNetworking_SteamNetworking001_IsDataAvailable(void *linux_side, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ return ((ISteamNetworking*)linux_side)->IsDataAvailable((SNetListenSocket_t)hListenSocket, (uint32 *)pcubMsgSize, (SNetSocket_t *)phSocket);
+}
+
+bool cppISteamNetworking_SteamNetworking001_RetrieveData(void *linux_side, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ return ((ISteamNetworking*)linux_side)->RetrieveData((SNetListenSocket_t)hListenSocket, (void *)pubDest, (uint32)cubDest, (uint32 *)pcubMsgSize, (SNetSocket_t *)phSocket);
+}
+
+bool cppISteamNetworking_SteamNetworking001_GetSocketInfo(void *linux_side, SNetSocket_t hSocket, CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote)
+{
+ return ((ISteamNetworking*)linux_side)->GetSocketInfo((SNetSocket_t)hSocket, (CSteamID *)pSteamIDRemote, (int *)peSocketStatus, (uint32 *)punIPRemote, (uint16 *)punPortRemote);
+}
+
+bool cppISteamNetworking_SteamNetworking001_GetListenSocketInfo(void *linux_side, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort)
+{
+ return ((ISteamNetworking*)linux_side)->GetListenSocketInfo((SNetListenSocket_t)hListenSocket, (uint32 *)pnIP, (uint16 *)pnPort);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamNetworking_SteamNetworking001.h b/lsteamclient/cppISteamNetworking_SteamNetworking001.h
new file mode 100644
index 00000000..abb5e7a7
--- /dev/null
+++ b/lsteamclient/cppISteamNetworking_SteamNetworking001.h
@@ -0,0 +1,18 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern SNetListenSocket_t cppISteamNetworking_SteamNetworking001_CreateListenSocket(void *, int, uint32, uint16);
+extern SNetSocket_t cppISteamNetworking_SteamNetworking001_CreateP2PConnectionSocket(void *, CSteamID, int, int);
+extern SNetSocket_t cppISteamNetworking_SteamNetworking001_CreateConnectionSocket(void *, uint32, uint16, int);
+extern bool cppISteamNetworking_SteamNetworking001_DestroySocket(void *, SNetSocket_t, bool);
+extern bool cppISteamNetworking_SteamNetworking001_DestroyListenSocket(void *, SNetListenSocket_t, bool);
+extern bool cppISteamNetworking_SteamNetworking001_SendDataOnSocket(void *, SNetSocket_t, void *, uint32, bool);
+extern bool cppISteamNetworking_SteamNetworking001_IsDataAvailableOnSocket(void *, SNetSocket_t, uint32 *);
+extern bool cppISteamNetworking_SteamNetworking001_RetrieveDataFromSocket(void *, SNetSocket_t, void *, uint32, uint32 *);
+extern bool cppISteamNetworking_SteamNetworking001_IsDataAvailable(void *, SNetListenSocket_t, uint32 *, SNetSocket_t *);
+extern bool cppISteamNetworking_SteamNetworking001_RetrieveData(void *, SNetListenSocket_t, void *, uint32, uint32 *, SNetSocket_t *);
+extern bool cppISteamNetworking_SteamNetworking001_GetSocketInfo(void *, SNetSocket_t, CSteamID *, int *, uint32 *, uint16 *);
+extern bool cppISteamNetworking_SteamNetworking001_GetListenSocketInfo(void *, SNetListenSocket_t, uint32 *, uint16 *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamNetworking_SteamNetworking002.cpp b/lsteamclient/cppISteamNetworking_SteamNetworking002.cpp
new file mode 100644
index 00000000..7505e900
--- /dev/null
+++ b/lsteamclient/cppISteamNetworking_SteamNetworking002.cpp
@@ -0,0 +1,80 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_104/steam_api.h"
+#include "cppISteamNetworking_SteamNetworking002.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+SNetListenSocket_t cppISteamNetworking_SteamNetworking002_CreateListenSocket(void *linux_side, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay)
+{
+ return ((ISteamNetworking*)linux_side)->CreateListenSocket((int)nVirtualP2PPort, (uint32)nIP, (uint16)nPort, (bool)bAllowUseOfPacketRelay);
+}
+
+SNetSocket_t cppISteamNetworking_SteamNetworking002_CreateP2PConnectionSocket(void *linux_side, CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay)
+{
+ return ((ISteamNetworking*)linux_side)->CreateP2PConnectionSocket((CSteamID)steamIDTarget, (int)nVirtualPort, (int)nTimeoutSec, (bool)bAllowUseOfPacketRelay);
+}
+
+SNetSocket_t cppISteamNetworking_SteamNetworking002_CreateConnectionSocket(void *linux_side, uint32 nIP, uint16 nPort, int nTimeoutSec)
+{
+ return ((ISteamNetworking*)linux_side)->CreateConnectionSocket((uint32)nIP, (uint16)nPort, (int)nTimeoutSec);
+}
+
+bool cppISteamNetworking_SteamNetworking002_DestroySocket(void *linux_side, SNetSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ return ((ISteamNetworking*)linux_side)->DestroySocket((SNetSocket_t)hSocket, (bool)bNotifyRemoteEnd);
+}
+
+bool cppISteamNetworking_SteamNetworking002_DestroyListenSocket(void *linux_side, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ return ((ISteamNetworking*)linux_side)->DestroyListenSocket((SNetListenSocket_t)hSocket, (bool)bNotifyRemoteEnd);
+}
+
+bool cppISteamNetworking_SteamNetworking002_SendDataOnSocket(void *linux_side, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable)
+{
+ return ((ISteamNetworking*)linux_side)->SendDataOnSocket((SNetSocket_t)hSocket, (void *)pubData, (uint32)cubData, (bool)bReliable);
+}
+
+bool cppISteamNetworking_SteamNetworking002_IsDataAvailableOnSocket(void *linux_side, SNetSocket_t hSocket, uint32 * pcubMsgSize)
+{
+ return ((ISteamNetworking*)linux_side)->IsDataAvailableOnSocket((SNetSocket_t)hSocket, (uint32 *)pcubMsgSize);
+}
+
+bool cppISteamNetworking_SteamNetworking002_RetrieveDataFromSocket(void *linux_side, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize)
+{
+ return ((ISteamNetworking*)linux_side)->RetrieveDataFromSocket((SNetSocket_t)hSocket, (void *)pubDest, (uint32)cubDest, (uint32 *)pcubMsgSize);
+}
+
+bool cppISteamNetworking_SteamNetworking002_IsDataAvailable(void *linux_side, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ return ((ISteamNetworking*)linux_side)->IsDataAvailable((SNetListenSocket_t)hListenSocket, (uint32 *)pcubMsgSize, (SNetSocket_t *)phSocket);
+}
+
+bool cppISteamNetworking_SteamNetworking002_RetrieveData(void *linux_side, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ return ((ISteamNetworking*)linux_side)->RetrieveData((SNetListenSocket_t)hListenSocket, (void *)pubDest, (uint32)cubDest, (uint32 *)pcubMsgSize, (SNetSocket_t *)phSocket);
+}
+
+bool cppISteamNetworking_SteamNetworking002_GetSocketInfo(void *linux_side, SNetSocket_t hSocket, CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote)
+{
+ return ((ISteamNetworking*)linux_side)->GetSocketInfo((SNetSocket_t)hSocket, (CSteamID *)pSteamIDRemote, (int *)peSocketStatus, (uint32 *)punIPRemote, (uint16 *)punPortRemote);
+}
+
+bool cppISteamNetworking_SteamNetworking002_GetListenSocketInfo(void *linux_side, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort)
+{
+ return ((ISteamNetworking*)linux_side)->GetListenSocketInfo((SNetListenSocket_t)hListenSocket, (uint32 *)pnIP, (uint16 *)pnPort);
+}
+
+ESNetSocketConnectionType cppISteamNetworking_SteamNetworking002_GetSocketConnectionType(void *linux_side, SNetSocket_t hSocket)
+{
+ return ((ISteamNetworking*)linux_side)->GetSocketConnectionType((SNetSocket_t)hSocket);
+}
+
+int cppISteamNetworking_SteamNetworking002_GetMaxPacketSize(void *linux_side, SNetSocket_t hSocket)
+{
+ return ((ISteamNetworking*)linux_side)->GetMaxPacketSize((SNetSocket_t)hSocket);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamNetworking_SteamNetworking002.h b/lsteamclient/cppISteamNetworking_SteamNetworking002.h
new file mode 100644
index 00000000..421a45d7
--- /dev/null
+++ b/lsteamclient/cppISteamNetworking_SteamNetworking002.h
@@ -0,0 +1,20 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern SNetListenSocket_t cppISteamNetworking_SteamNetworking002_CreateListenSocket(void *, int, uint32, uint16, bool);
+extern SNetSocket_t cppISteamNetworking_SteamNetworking002_CreateP2PConnectionSocket(void *, CSteamID, int, int, bool);
+extern SNetSocket_t cppISteamNetworking_SteamNetworking002_CreateConnectionSocket(void *, uint32, uint16, int);
+extern bool cppISteamNetworking_SteamNetworking002_DestroySocket(void *, SNetSocket_t, bool);
+extern bool cppISteamNetworking_SteamNetworking002_DestroyListenSocket(void *, SNetListenSocket_t, bool);
+extern bool cppISteamNetworking_SteamNetworking002_SendDataOnSocket(void *, SNetSocket_t, void *, uint32, bool);
+extern bool cppISteamNetworking_SteamNetworking002_IsDataAvailableOnSocket(void *, SNetSocket_t, uint32 *);
+extern bool cppISteamNetworking_SteamNetworking002_RetrieveDataFromSocket(void *, SNetSocket_t, void *, uint32, uint32 *);
+extern bool cppISteamNetworking_SteamNetworking002_IsDataAvailable(void *, SNetListenSocket_t, uint32 *, SNetSocket_t *);
+extern bool cppISteamNetworking_SteamNetworking002_RetrieveData(void *, SNetListenSocket_t, void *, uint32, uint32 *, SNetSocket_t *);
+extern bool cppISteamNetworking_SteamNetworking002_GetSocketInfo(void *, SNetSocket_t, CSteamID *, int *, uint32 *, uint16 *);
+extern bool cppISteamNetworking_SteamNetworking002_GetListenSocketInfo(void *, SNetListenSocket_t, uint32 *, uint16 *);
+extern ESNetSocketConnectionType cppISteamNetworking_SteamNetworking002_GetSocketConnectionType(void *, SNetSocket_t);
+extern int cppISteamNetworking_SteamNetworking002_GetMaxPacketSize(void *, SNetSocket_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamNetworking_SteamNetworking003.cpp b/lsteamclient/cppISteamNetworking_SteamNetworking003.cpp
new file mode 100644
index 00000000..4c317827
--- /dev/null
+++ b/lsteamclient/cppISteamNetworking_SteamNetworking003.cpp
@@ -0,0 +1,110 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_110/steam_api.h"
+#include "cppISteamNetworking_SteamNetworking003.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamNetworking_SteamNetworking003_SendP2PPacket(void *linux_side, CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType)
+{
+ return ((ISteamNetworking*)linux_side)->SendP2PPacket((CSteamID)steamIDRemote, (const void *)pubData, (uint32)cubData, (EP2PSend)eP2PSendType);
+}
+
+bool cppISteamNetworking_SteamNetworking003_IsP2PPacketAvailable(void *linux_side, uint32 * pcubMsgSize)
+{
+ return ((ISteamNetworking*)linux_side)->IsP2PPacketAvailable((uint32 *)pcubMsgSize);
+}
+
+bool cppISteamNetworking_SteamNetworking003_ReadP2PPacket(void *linux_side, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, CSteamID * psteamIDRemote)
+{
+ return ((ISteamNetworking*)linux_side)->ReadP2PPacket((void *)pubDest, (uint32)cubDest, (uint32 *)pcubMsgSize, (CSteamID *)psteamIDRemote);
+}
+
+bool cppISteamNetworking_SteamNetworking003_AcceptP2PSessionWithUser(void *linux_side, CSteamID steamIDRemote)
+{
+ return ((ISteamNetworking*)linux_side)->AcceptP2PSessionWithUser((CSteamID)steamIDRemote);
+}
+
+bool cppISteamNetworking_SteamNetworking003_CloseP2PSessionWithUser(void *linux_side, CSteamID steamIDRemote)
+{
+ return ((ISteamNetworking*)linux_side)->CloseP2PSessionWithUser((CSteamID)steamIDRemote);
+}
+
+bool cppISteamNetworking_SteamNetworking003_GetP2PSessionState(void *linux_side, CSteamID steamIDRemote, P2PSessionState_t * pConnectionState)
+{
+ return ((ISteamNetworking*)linux_side)->GetP2PSessionState((CSteamID)steamIDRemote, (P2PSessionState_t *)pConnectionState);
+}
+
+SNetListenSocket_t cppISteamNetworking_SteamNetworking003_CreateListenSocket(void *linux_side, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay)
+{
+ return ((ISteamNetworking*)linux_side)->CreateListenSocket((int)nVirtualP2PPort, (uint32)nIP, (uint16)nPort, (bool)bAllowUseOfPacketRelay);
+}
+
+SNetSocket_t cppISteamNetworking_SteamNetworking003_CreateP2PConnectionSocket(void *linux_side, CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay)
+{
+ return ((ISteamNetworking*)linux_side)->CreateP2PConnectionSocket((CSteamID)steamIDTarget, (int)nVirtualPort, (int)nTimeoutSec, (bool)bAllowUseOfPacketRelay);
+}
+
+SNetSocket_t cppISteamNetworking_SteamNetworking003_CreateConnectionSocket(void *linux_side, uint32 nIP, uint16 nPort, int nTimeoutSec)
+{
+ return ((ISteamNetworking*)linux_side)->CreateConnectionSocket((uint32)nIP, (uint16)nPort, (int)nTimeoutSec);
+}
+
+bool cppISteamNetworking_SteamNetworking003_DestroySocket(void *linux_side, SNetSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ return ((ISteamNetworking*)linux_side)->DestroySocket((SNetSocket_t)hSocket, (bool)bNotifyRemoteEnd);
+}
+
+bool cppISteamNetworking_SteamNetworking003_DestroyListenSocket(void *linux_side, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ return ((ISteamNetworking*)linux_side)->DestroyListenSocket((SNetListenSocket_t)hSocket, (bool)bNotifyRemoteEnd);
+}
+
+bool cppISteamNetworking_SteamNetworking003_SendDataOnSocket(void *linux_side, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable)
+{
+ return ((ISteamNetworking*)linux_side)->SendDataOnSocket((SNetSocket_t)hSocket, (void *)pubData, (uint32)cubData, (bool)bReliable);
+}
+
+bool cppISteamNetworking_SteamNetworking003_IsDataAvailableOnSocket(void *linux_side, SNetSocket_t hSocket, uint32 * pcubMsgSize)
+{
+ return ((ISteamNetworking*)linux_side)->IsDataAvailableOnSocket((SNetSocket_t)hSocket, (uint32 *)pcubMsgSize);
+}
+
+bool cppISteamNetworking_SteamNetworking003_RetrieveDataFromSocket(void *linux_side, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize)
+{
+ return ((ISteamNetworking*)linux_side)->RetrieveDataFromSocket((SNetSocket_t)hSocket, (void *)pubDest, (uint32)cubDest, (uint32 *)pcubMsgSize);
+}
+
+bool cppISteamNetworking_SteamNetworking003_IsDataAvailable(void *linux_side, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ return ((ISteamNetworking*)linux_side)->IsDataAvailable((SNetListenSocket_t)hListenSocket, (uint32 *)pcubMsgSize, (SNetSocket_t *)phSocket);
+}
+
+bool cppISteamNetworking_SteamNetworking003_RetrieveData(void *linux_side, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ return ((ISteamNetworking*)linux_side)->RetrieveData((SNetListenSocket_t)hListenSocket, (void *)pubDest, (uint32)cubDest, (uint32 *)pcubMsgSize, (SNetSocket_t *)phSocket);
+}
+
+bool cppISteamNetworking_SteamNetworking003_GetSocketInfo(void *linux_side, SNetSocket_t hSocket, CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote)
+{
+ return ((ISteamNetworking*)linux_side)->GetSocketInfo((SNetSocket_t)hSocket, (CSteamID *)pSteamIDRemote, (int *)peSocketStatus, (uint32 *)punIPRemote, (uint16 *)punPortRemote);
+}
+
+bool cppISteamNetworking_SteamNetworking003_GetListenSocketInfo(void *linux_side, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort)
+{
+ return ((ISteamNetworking*)linux_side)->GetListenSocketInfo((SNetListenSocket_t)hListenSocket, (uint32 *)pnIP, (uint16 *)pnPort);
+}
+
+ESNetSocketConnectionType cppISteamNetworking_SteamNetworking003_GetSocketConnectionType(void *linux_side, SNetSocket_t hSocket)
+{
+ return ((ISteamNetworking*)linux_side)->GetSocketConnectionType((SNetSocket_t)hSocket);
+}
+
+int cppISteamNetworking_SteamNetworking003_GetMaxPacketSize(void *linux_side, SNetSocket_t hSocket)
+{
+ return ((ISteamNetworking*)linux_side)->GetMaxPacketSize((SNetSocket_t)hSocket);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamNetworking_SteamNetworking003.h b/lsteamclient/cppISteamNetworking_SteamNetworking003.h
new file mode 100644
index 00000000..098a58dd
--- /dev/null
+++ b/lsteamclient/cppISteamNetworking_SteamNetworking003.h
@@ -0,0 +1,26 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamNetworking_SteamNetworking003_SendP2PPacket(void *, CSteamID, const void *, uint32, EP2PSend);
+extern bool cppISteamNetworking_SteamNetworking003_IsP2PPacketAvailable(void *, uint32 *);
+extern bool cppISteamNetworking_SteamNetworking003_ReadP2PPacket(void *, void *, uint32, uint32 *, CSteamID *);
+extern bool cppISteamNetworking_SteamNetworking003_AcceptP2PSessionWithUser(void *, CSteamID);
+extern bool cppISteamNetworking_SteamNetworking003_CloseP2PSessionWithUser(void *, CSteamID);
+extern bool cppISteamNetworking_SteamNetworking003_GetP2PSessionState(void *, CSteamID, P2PSessionState_t *);
+extern SNetListenSocket_t cppISteamNetworking_SteamNetworking003_CreateListenSocket(void *, int, uint32, uint16, bool);
+extern SNetSocket_t cppISteamNetworking_SteamNetworking003_CreateP2PConnectionSocket(void *, CSteamID, int, int, bool);
+extern SNetSocket_t cppISteamNetworking_SteamNetworking003_CreateConnectionSocket(void *, uint32, uint16, int);
+extern bool cppISteamNetworking_SteamNetworking003_DestroySocket(void *, SNetSocket_t, bool);
+extern bool cppISteamNetworking_SteamNetworking003_DestroyListenSocket(void *, SNetListenSocket_t, bool);
+extern bool cppISteamNetworking_SteamNetworking003_SendDataOnSocket(void *, SNetSocket_t, void *, uint32, bool);
+extern bool cppISteamNetworking_SteamNetworking003_IsDataAvailableOnSocket(void *, SNetSocket_t, uint32 *);
+extern bool cppISteamNetworking_SteamNetworking003_RetrieveDataFromSocket(void *, SNetSocket_t, void *, uint32, uint32 *);
+extern bool cppISteamNetworking_SteamNetworking003_IsDataAvailable(void *, SNetListenSocket_t, uint32 *, SNetSocket_t *);
+extern bool cppISteamNetworking_SteamNetworking003_RetrieveData(void *, SNetListenSocket_t, void *, uint32, uint32 *, SNetSocket_t *);
+extern bool cppISteamNetworking_SteamNetworking003_GetSocketInfo(void *, SNetSocket_t, CSteamID *, int *, uint32 *, uint16 *);
+extern bool cppISteamNetworking_SteamNetworking003_GetListenSocketInfo(void *, SNetListenSocket_t, uint32 *, uint16 *);
+extern ESNetSocketConnectionType cppISteamNetworking_SteamNetworking003_GetSocketConnectionType(void *, SNetSocket_t);
+extern int cppISteamNetworking_SteamNetworking003_GetMaxPacketSize(void *, SNetSocket_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamNetworking_SteamNetworking004.cpp b/lsteamclient/cppISteamNetworking_SteamNetworking004.cpp
new file mode 100644
index 00000000..7e192b6f
--- /dev/null
+++ b/lsteamclient/cppISteamNetworking_SteamNetworking004.cpp
@@ -0,0 +1,110 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_112/steam_api.h"
+#include "cppISteamNetworking_SteamNetworking004.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamNetworking_SteamNetworking004_SendP2PPacket(void *linux_side, CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nVirtualPort)
+{
+ return ((ISteamNetworking*)linux_side)->SendP2PPacket((CSteamID)steamIDRemote, (const void *)pubData, (uint32)cubData, (EP2PSend)eP2PSendType, (int)nVirtualPort);
+}
+
+bool cppISteamNetworking_SteamNetworking004_IsP2PPacketAvailable(void *linux_side, uint32 * pcubMsgSize, int nVirtualPort)
+{
+ return ((ISteamNetworking*)linux_side)->IsP2PPacketAvailable((uint32 *)pcubMsgSize, (int)nVirtualPort);
+}
+
+bool cppISteamNetworking_SteamNetworking004_ReadP2PPacket(void *linux_side, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, CSteamID * psteamIDRemote, int nVirtualPort)
+{
+ return ((ISteamNetworking*)linux_side)->ReadP2PPacket((void *)pubDest, (uint32)cubDest, (uint32 *)pcubMsgSize, (CSteamID *)psteamIDRemote, (int)nVirtualPort);
+}
+
+bool cppISteamNetworking_SteamNetworking004_AcceptP2PSessionWithUser(void *linux_side, CSteamID steamIDRemote)
+{
+ return ((ISteamNetworking*)linux_side)->AcceptP2PSessionWithUser((CSteamID)steamIDRemote);
+}
+
+bool cppISteamNetworking_SteamNetworking004_CloseP2PSessionWithUser(void *linux_side, CSteamID steamIDRemote)
+{
+ return ((ISteamNetworking*)linux_side)->CloseP2PSessionWithUser((CSteamID)steamIDRemote);
+}
+
+bool cppISteamNetworking_SteamNetworking004_GetP2PSessionState(void *linux_side, CSteamID steamIDRemote, P2PSessionState_t * pConnectionState)
+{
+ return ((ISteamNetworking*)linux_side)->GetP2PSessionState((CSteamID)steamIDRemote, (P2PSessionState_t *)pConnectionState);
+}
+
+SNetListenSocket_t cppISteamNetworking_SteamNetworking004_CreateListenSocket(void *linux_side, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay)
+{
+ return ((ISteamNetworking*)linux_side)->CreateListenSocket((int)nVirtualP2PPort, (uint32)nIP, (uint16)nPort, (bool)bAllowUseOfPacketRelay);
+}
+
+SNetSocket_t cppISteamNetworking_SteamNetworking004_CreateP2PConnectionSocket(void *linux_side, CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay)
+{
+ return ((ISteamNetworking*)linux_side)->CreateP2PConnectionSocket((CSteamID)steamIDTarget, (int)nVirtualPort, (int)nTimeoutSec, (bool)bAllowUseOfPacketRelay);
+}
+
+SNetSocket_t cppISteamNetworking_SteamNetworking004_CreateConnectionSocket(void *linux_side, uint32 nIP, uint16 nPort, int nTimeoutSec)
+{
+ return ((ISteamNetworking*)linux_side)->CreateConnectionSocket((uint32)nIP, (uint16)nPort, (int)nTimeoutSec);
+}
+
+bool cppISteamNetworking_SteamNetworking004_DestroySocket(void *linux_side, SNetSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ return ((ISteamNetworking*)linux_side)->DestroySocket((SNetSocket_t)hSocket, (bool)bNotifyRemoteEnd);
+}
+
+bool cppISteamNetworking_SteamNetworking004_DestroyListenSocket(void *linux_side, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ return ((ISteamNetworking*)linux_side)->DestroyListenSocket((SNetListenSocket_t)hSocket, (bool)bNotifyRemoteEnd);
+}
+
+bool cppISteamNetworking_SteamNetworking004_SendDataOnSocket(void *linux_side, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable)
+{
+ return ((ISteamNetworking*)linux_side)->SendDataOnSocket((SNetSocket_t)hSocket, (void *)pubData, (uint32)cubData, (bool)bReliable);
+}
+
+bool cppISteamNetworking_SteamNetworking004_IsDataAvailableOnSocket(void *linux_side, SNetSocket_t hSocket, uint32 * pcubMsgSize)
+{
+ return ((ISteamNetworking*)linux_side)->IsDataAvailableOnSocket((SNetSocket_t)hSocket, (uint32 *)pcubMsgSize);
+}
+
+bool cppISteamNetworking_SteamNetworking004_RetrieveDataFromSocket(void *linux_side, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize)
+{
+ return ((ISteamNetworking*)linux_side)->RetrieveDataFromSocket((SNetSocket_t)hSocket, (void *)pubDest, (uint32)cubDest, (uint32 *)pcubMsgSize);
+}
+
+bool cppISteamNetworking_SteamNetworking004_IsDataAvailable(void *linux_side, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ return ((ISteamNetworking*)linux_side)->IsDataAvailable((SNetListenSocket_t)hListenSocket, (uint32 *)pcubMsgSize, (SNetSocket_t *)phSocket);
+}
+
+bool cppISteamNetworking_SteamNetworking004_RetrieveData(void *linux_side, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ return ((ISteamNetworking*)linux_side)->RetrieveData((SNetListenSocket_t)hListenSocket, (void *)pubDest, (uint32)cubDest, (uint32 *)pcubMsgSize, (SNetSocket_t *)phSocket);
+}
+
+bool cppISteamNetworking_SteamNetworking004_GetSocketInfo(void *linux_side, SNetSocket_t hSocket, CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote)
+{
+ return ((ISteamNetworking*)linux_side)->GetSocketInfo((SNetSocket_t)hSocket, (CSteamID *)pSteamIDRemote, (int *)peSocketStatus, (uint32 *)punIPRemote, (uint16 *)punPortRemote);
+}
+
+bool cppISteamNetworking_SteamNetworking004_GetListenSocketInfo(void *linux_side, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort)
+{
+ return ((ISteamNetworking*)linux_side)->GetListenSocketInfo((SNetListenSocket_t)hListenSocket, (uint32 *)pnIP, (uint16 *)pnPort);
+}
+
+ESNetSocketConnectionType cppISteamNetworking_SteamNetworking004_GetSocketConnectionType(void *linux_side, SNetSocket_t hSocket)
+{
+ return ((ISteamNetworking*)linux_side)->GetSocketConnectionType((SNetSocket_t)hSocket);
+}
+
+int cppISteamNetworking_SteamNetworking004_GetMaxPacketSize(void *linux_side, SNetSocket_t hSocket)
+{
+ return ((ISteamNetworking*)linux_side)->GetMaxPacketSize((SNetSocket_t)hSocket);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamNetworking_SteamNetworking004.h b/lsteamclient/cppISteamNetworking_SteamNetworking004.h
new file mode 100644
index 00000000..521bddfa
--- /dev/null
+++ b/lsteamclient/cppISteamNetworking_SteamNetworking004.h
@@ -0,0 +1,26 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamNetworking_SteamNetworking004_SendP2PPacket(void *, CSteamID, const void *, uint32, EP2PSend, int);
+extern bool cppISteamNetworking_SteamNetworking004_IsP2PPacketAvailable(void *, uint32 *, int);
+extern bool cppISteamNetworking_SteamNetworking004_ReadP2PPacket(void *, void *, uint32, uint32 *, CSteamID *, int);
+extern bool cppISteamNetworking_SteamNetworking004_AcceptP2PSessionWithUser(void *, CSteamID);
+extern bool cppISteamNetworking_SteamNetworking004_CloseP2PSessionWithUser(void *, CSteamID);
+extern bool cppISteamNetworking_SteamNetworking004_GetP2PSessionState(void *, CSteamID, P2PSessionState_t *);
+extern SNetListenSocket_t cppISteamNetworking_SteamNetworking004_CreateListenSocket(void *, int, uint32, uint16, bool);
+extern SNetSocket_t cppISteamNetworking_SteamNetworking004_CreateP2PConnectionSocket(void *, CSteamID, int, int, bool);
+extern SNetSocket_t cppISteamNetworking_SteamNetworking004_CreateConnectionSocket(void *, uint32, uint16, int);
+extern bool cppISteamNetworking_SteamNetworking004_DestroySocket(void *, SNetSocket_t, bool);
+extern bool cppISteamNetworking_SteamNetworking004_DestroyListenSocket(void *, SNetListenSocket_t, bool);
+extern bool cppISteamNetworking_SteamNetworking004_SendDataOnSocket(void *, SNetSocket_t, void *, uint32, bool);
+extern bool cppISteamNetworking_SteamNetworking004_IsDataAvailableOnSocket(void *, SNetSocket_t, uint32 *);
+extern bool cppISteamNetworking_SteamNetworking004_RetrieveDataFromSocket(void *, SNetSocket_t, void *, uint32, uint32 *);
+extern bool cppISteamNetworking_SteamNetworking004_IsDataAvailable(void *, SNetListenSocket_t, uint32 *, SNetSocket_t *);
+extern bool cppISteamNetworking_SteamNetworking004_RetrieveData(void *, SNetListenSocket_t, void *, uint32, uint32 *, SNetSocket_t *);
+extern bool cppISteamNetworking_SteamNetworking004_GetSocketInfo(void *, SNetSocket_t, CSteamID *, int *, uint32 *, uint16 *);
+extern bool cppISteamNetworking_SteamNetworking004_GetListenSocketInfo(void *, SNetListenSocket_t, uint32 *, uint16 *);
+extern ESNetSocketConnectionType cppISteamNetworking_SteamNetworking004_GetSocketConnectionType(void *, SNetSocket_t);
+extern int cppISteamNetworking_SteamNetworking004_GetMaxPacketSize(void *, SNetSocket_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamNetworking_SteamNetworking005.cpp b/lsteamclient/cppISteamNetworking_SteamNetworking005.cpp
new file mode 100644
index 00000000..f681bccd
--- /dev/null
+++ b/lsteamclient/cppISteamNetworking_SteamNetworking005.cpp
@@ -0,0 +1,120 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamNetworking_SteamNetworking005.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamNetworking_SteamNetworking005_SendP2PPacket(void *linux_side, CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel)
+{
+ return ((ISteamNetworking*)linux_side)->SendP2PPacket((CSteamID)steamIDRemote, (const void *)pubData, (uint32)cubData, (EP2PSend)eP2PSendType, (int)nChannel);
+}
+
+bool cppISteamNetworking_SteamNetworking005_IsP2PPacketAvailable(void *linux_side, uint32 * pcubMsgSize, int nChannel)
+{
+ return ((ISteamNetworking*)linux_side)->IsP2PPacketAvailable((uint32 *)pcubMsgSize, (int)nChannel);
+}
+
+bool cppISteamNetworking_SteamNetworking005_ReadP2PPacket(void *linux_side, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, CSteamID * psteamIDRemote, int nChannel)
+{
+ return ((ISteamNetworking*)linux_side)->ReadP2PPacket((void *)pubDest, (uint32)cubDest, (uint32 *)pcubMsgSize, (CSteamID *)psteamIDRemote, (int)nChannel);
+}
+
+bool cppISteamNetworking_SteamNetworking005_AcceptP2PSessionWithUser(void *linux_side, CSteamID steamIDRemote)
+{
+ return ((ISteamNetworking*)linux_side)->AcceptP2PSessionWithUser((CSteamID)steamIDRemote);
+}
+
+bool cppISteamNetworking_SteamNetworking005_CloseP2PSessionWithUser(void *linux_side, CSteamID steamIDRemote)
+{
+ return ((ISteamNetworking*)linux_side)->CloseP2PSessionWithUser((CSteamID)steamIDRemote);
+}
+
+bool cppISteamNetworking_SteamNetworking005_CloseP2PChannelWithUser(void *linux_side, CSteamID steamIDRemote, int nChannel)
+{
+ return ((ISteamNetworking*)linux_side)->CloseP2PChannelWithUser((CSteamID)steamIDRemote, (int)nChannel);
+}
+
+bool cppISteamNetworking_SteamNetworking005_GetP2PSessionState(void *linux_side, CSteamID steamIDRemote, P2PSessionState_t * pConnectionState)
+{
+ return ((ISteamNetworking*)linux_side)->GetP2PSessionState((CSteamID)steamIDRemote, (P2PSessionState_t *)pConnectionState);
+}
+
+bool cppISteamNetworking_SteamNetworking005_AllowP2PPacketRelay(void *linux_side, bool bAllow)
+{
+ return ((ISteamNetworking*)linux_side)->AllowP2PPacketRelay((bool)bAllow);
+}
+
+SNetListenSocket_t cppISteamNetworking_SteamNetworking005_CreateListenSocket(void *linux_side, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay)
+{
+ return ((ISteamNetworking*)linux_side)->CreateListenSocket((int)nVirtualP2PPort, (uint32)nIP, (uint16)nPort, (bool)bAllowUseOfPacketRelay);
+}
+
+SNetSocket_t cppISteamNetworking_SteamNetworking005_CreateP2PConnectionSocket(void *linux_side, CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay)
+{
+ return ((ISteamNetworking*)linux_side)->CreateP2PConnectionSocket((CSteamID)steamIDTarget, (int)nVirtualPort, (int)nTimeoutSec, (bool)bAllowUseOfPacketRelay);
+}
+
+SNetSocket_t cppISteamNetworking_SteamNetworking005_CreateConnectionSocket(void *linux_side, uint32 nIP, uint16 nPort, int nTimeoutSec)
+{
+ return ((ISteamNetworking*)linux_side)->CreateConnectionSocket((uint32)nIP, (uint16)nPort, (int)nTimeoutSec);
+}
+
+bool cppISteamNetworking_SteamNetworking005_DestroySocket(void *linux_side, SNetSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ return ((ISteamNetworking*)linux_side)->DestroySocket((SNetSocket_t)hSocket, (bool)bNotifyRemoteEnd);
+}
+
+bool cppISteamNetworking_SteamNetworking005_DestroyListenSocket(void *linux_side, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ return ((ISteamNetworking*)linux_side)->DestroyListenSocket((SNetListenSocket_t)hSocket, (bool)bNotifyRemoteEnd);
+}
+
+bool cppISteamNetworking_SteamNetworking005_SendDataOnSocket(void *linux_side, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable)
+{
+ return ((ISteamNetworking*)linux_side)->SendDataOnSocket((SNetSocket_t)hSocket, (void *)pubData, (uint32)cubData, (bool)bReliable);
+}
+
+bool cppISteamNetworking_SteamNetworking005_IsDataAvailableOnSocket(void *linux_side, SNetSocket_t hSocket, uint32 * pcubMsgSize)
+{
+ return ((ISteamNetworking*)linux_side)->IsDataAvailableOnSocket((SNetSocket_t)hSocket, (uint32 *)pcubMsgSize);
+}
+
+bool cppISteamNetworking_SteamNetworking005_RetrieveDataFromSocket(void *linux_side, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize)
+{
+ return ((ISteamNetworking*)linux_side)->RetrieveDataFromSocket((SNetSocket_t)hSocket, (void *)pubDest, (uint32)cubDest, (uint32 *)pcubMsgSize);
+}
+
+bool cppISteamNetworking_SteamNetworking005_IsDataAvailable(void *linux_side, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ return ((ISteamNetworking*)linux_side)->IsDataAvailable((SNetListenSocket_t)hListenSocket, (uint32 *)pcubMsgSize, (SNetSocket_t *)phSocket);
+}
+
+bool cppISteamNetworking_SteamNetworking005_RetrieveData(void *linux_side, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ return ((ISteamNetworking*)linux_side)->RetrieveData((SNetListenSocket_t)hListenSocket, (void *)pubDest, (uint32)cubDest, (uint32 *)pcubMsgSize, (SNetSocket_t *)phSocket);
+}
+
+bool cppISteamNetworking_SteamNetworking005_GetSocketInfo(void *linux_side, SNetSocket_t hSocket, CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote)
+{
+ return ((ISteamNetworking*)linux_side)->GetSocketInfo((SNetSocket_t)hSocket, (CSteamID *)pSteamIDRemote, (int *)peSocketStatus, (uint32 *)punIPRemote, (uint16 *)punPortRemote);
+}
+
+bool cppISteamNetworking_SteamNetworking005_GetListenSocketInfo(void *linux_side, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort)
+{
+ return ((ISteamNetworking*)linux_side)->GetListenSocketInfo((SNetListenSocket_t)hListenSocket, (uint32 *)pnIP, (uint16 *)pnPort);
+}
+
+ESNetSocketConnectionType cppISteamNetworking_SteamNetworking005_GetSocketConnectionType(void *linux_side, SNetSocket_t hSocket)
+{
+ return ((ISteamNetworking*)linux_side)->GetSocketConnectionType((SNetSocket_t)hSocket);
+}
+
+int cppISteamNetworking_SteamNetworking005_GetMaxPacketSize(void *linux_side, SNetSocket_t hSocket)
+{
+ return ((ISteamNetworking*)linux_side)->GetMaxPacketSize((SNetSocket_t)hSocket);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamNetworking_SteamNetworking005.h b/lsteamclient/cppISteamNetworking_SteamNetworking005.h
new file mode 100644
index 00000000..6b841e72
--- /dev/null
+++ b/lsteamclient/cppISteamNetworking_SteamNetworking005.h
@@ -0,0 +1,28 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamNetworking_SteamNetworking005_SendP2PPacket(void *, CSteamID, const void *, uint32, EP2PSend, int);
+extern bool cppISteamNetworking_SteamNetworking005_IsP2PPacketAvailable(void *, uint32 *, int);
+extern bool cppISteamNetworking_SteamNetworking005_ReadP2PPacket(void *, void *, uint32, uint32 *, CSteamID *, int);
+extern bool cppISteamNetworking_SteamNetworking005_AcceptP2PSessionWithUser(void *, CSteamID);
+extern bool cppISteamNetworking_SteamNetworking005_CloseP2PSessionWithUser(void *, CSteamID);
+extern bool cppISteamNetworking_SteamNetworking005_CloseP2PChannelWithUser(void *, CSteamID, int);
+extern bool cppISteamNetworking_SteamNetworking005_GetP2PSessionState(void *, CSteamID, P2PSessionState_t *);
+extern bool cppISteamNetworking_SteamNetworking005_AllowP2PPacketRelay(void *, bool);
+extern SNetListenSocket_t cppISteamNetworking_SteamNetworking005_CreateListenSocket(void *, int, uint32, uint16, bool);
+extern SNetSocket_t cppISteamNetworking_SteamNetworking005_CreateP2PConnectionSocket(void *, CSteamID, int, int, bool);
+extern SNetSocket_t cppISteamNetworking_SteamNetworking005_CreateConnectionSocket(void *, uint32, uint16, int);
+extern bool cppISteamNetworking_SteamNetworking005_DestroySocket(void *, SNetSocket_t, bool);
+extern bool cppISteamNetworking_SteamNetworking005_DestroyListenSocket(void *, SNetListenSocket_t, bool);
+extern bool cppISteamNetworking_SteamNetworking005_SendDataOnSocket(void *, SNetSocket_t, void *, uint32, bool);
+extern bool cppISteamNetworking_SteamNetworking005_IsDataAvailableOnSocket(void *, SNetSocket_t, uint32 *);
+extern bool cppISteamNetworking_SteamNetworking005_RetrieveDataFromSocket(void *, SNetSocket_t, void *, uint32, uint32 *);
+extern bool cppISteamNetworking_SteamNetworking005_IsDataAvailable(void *, SNetListenSocket_t, uint32 *, SNetSocket_t *);
+extern bool cppISteamNetworking_SteamNetworking005_RetrieveData(void *, SNetListenSocket_t, void *, uint32, uint32 *, SNetSocket_t *);
+extern bool cppISteamNetworking_SteamNetworking005_GetSocketInfo(void *, SNetSocket_t, CSteamID *, int *, uint32 *, uint16 *);
+extern bool cppISteamNetworking_SteamNetworking005_GetListenSocketInfo(void *, SNetListenSocket_t, uint32 *, uint16 *);
+extern ESNetSocketConnectionType cppISteamNetworking_SteamNetworking005_GetSocketConnectionType(void *, SNetSocket_t);
+extern int cppISteamNetworking_SteamNetworking005_GetMaxPacketSize(void *, SNetSocket_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001.cpp b/lsteamclient/cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001.cpp
new file mode 100644
index 00000000..228ec0d7
--- /dev/null
+++ b/lsteamclient/cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001.cpp
@@ -0,0 +1,41 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "steamworks_sdk_142/isteamparentalsettings.h"
+#include "cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsParentalLockEnabled(void *linux_side)
+{
+ return ((ISteamParentalSettings*)linux_side)->BIsParentalLockEnabled();
+}
+
+bool cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsParentalLockLocked(void *linux_side)
+{
+ return ((ISteamParentalSettings*)linux_side)->BIsParentalLockLocked();
+}
+
+bool cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsAppBlocked(void *linux_side, AppId_t nAppID)
+{
+ return ((ISteamParentalSettings*)linux_side)->BIsAppBlocked((AppId_t)nAppID);
+}
+
+bool cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsAppInBlockList(void *linux_side, AppId_t nAppID)
+{
+ return ((ISteamParentalSettings*)linux_side)->BIsAppInBlockList((AppId_t)nAppID);
+}
+
+bool cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsFeatureBlocked(void *linux_side, EParentalFeature eFeature)
+{
+ return ((ISteamParentalSettings*)linux_side)->BIsFeatureBlocked((EParentalFeature)eFeature);
+}
+
+bool cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsFeatureInBlockList(void *linux_side, EParentalFeature eFeature)
+{
+ return ((ISteamParentalSettings*)linux_side)->BIsFeatureInBlockList((EParentalFeature)eFeature);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001.h b/lsteamclient/cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001.h
new file mode 100644
index 00000000..91e33110
--- /dev/null
+++ b/lsteamclient/cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001.h
@@ -0,0 +1,12 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsParentalLockEnabled(void *);
+extern bool cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsParentalLockLocked(void *);
+extern bool cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsAppBlocked(void *, AppId_t);
+extern bool cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsAppInBlockList(void *, AppId_t);
+extern bool cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsFeatureBlocked(void *, EParentalFeature);
+extern bool cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsFeatureInBlockList(void *, EParentalFeature);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002.cpp b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002.cpp
new file mode 100644
index 00000000..6c17bfe9
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002.cpp
@@ -0,0 +1,45 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_111/steam_api.h"
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_FileWrite(void *linux_side, const char * pchFile, const void * pvData, int32 cubData)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWrite((const char *)pchFile, (const void *)pvData, (int32)cubData);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetFileSize(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileSize((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_FileRead(void *linux_side, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileRead((const char *)pchFile, (void *)pvData, (int32)cubDataToRead);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_FileExists(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileExists((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetFileCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileCount();
+}
+
+const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetFileNameAndSize(void *linux_side, int iFile, int32 * pnFileSizeInBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileNameAndSize((int)iFile, (int32 *)pnFileSizeInBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetQuota(void *linux_side, int32 * pnTotalBytes, int32 * puAvailableBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetQuota((int32 *)pnTotalBytes, (int32 *)puAvailableBytes);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002.h b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002.h
new file mode 100644
index 00000000..709e2849
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002.h
@@ -0,0 +1,13 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_FileWrite(void *, const char *, const void *, int32);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetFileSize(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_FileRead(void *, const char *, void *, int32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_FileExists(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetFileCount(void *);
+extern const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetFileNameAndSize(void *, int, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetQuota(void *, int32 *, int32 *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004.cpp b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004.cpp
new file mode 100644
index 00000000..b1a6190c
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004.cpp
@@ -0,0 +1,120 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_116/steam_api.h"
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileWrite(void *linux_side, const char * pchFile, const void * pvData, int32 cubData)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWrite((const char *)pchFile, (const void *)pvData, (int32)cubData);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileRead(void *linux_side, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileRead((const char *)pchFile, (void *)pvData, (int32)cubDataToRead);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileForget(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileForget((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileDelete(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileDelete((const char *)pchFile);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileShare(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileShare((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_SetSyncPlatforms(void *linux_side, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SetSyncPlatforms((const char *)pchFile, (ERemoteStoragePlatform)eRemoteStoragePlatform);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileExists(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileExists((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FilePersisted(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FilePersisted((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileSize(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileSize((const char *)pchFile);
+}
+
+int64 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileTimestamp(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileTimestamp((const char *)pchFile);
+}
+
+ERemoteStoragePlatform cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetSyncPlatforms(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetSyncPlatforms((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileCount();
+}
+
+const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileNameAndSize(void *linux_side, int iFile, int32 * pnFileSizeInBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileNameAndSize((int)iFile, (int32 *)pnFileSizeInBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetQuota(void *linux_side, int32 * pnTotalBytes, int32 * puAvailableBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetQuota((int32 *)pnTotalBytes, (int32 *)puAvailableBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_IsCloudEnabledForAccount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->IsCloudEnabledForAccount();
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_IsCloudEnabledForApp(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->IsCloudEnabledForApp();
+}
+
+void cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_SetCloudEnabledForApp(void *linux_side, bool bEnabled)
+{
+ ((ISteamRemoteStorage*)linux_side)->SetCloudEnabledForApp((bool)bEnabled);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_UGCDownload(void *linux_side, UGCHandle_t hContent)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCDownload((UGCHandle_t)hContent);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetUGCDetails(void *linux_side, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, CSteamID * pSteamIDOwner)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUGCDetails((UGCHandle_t)hContent, (AppId_t *)pnAppID, (char **)ppchName, (int32 *)pnFileSizeInBytes, (CSteamID *)pSteamIDOwner);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_UGCRead(void *linux_side, UGCHandle_t hContent, void * pvData, int32 cubDataToRead)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCRead((UGCHandle_t)hContent, (void *)pvData, (int32)cubDataToRead);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetCachedUGCCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetCachedUGCCount();
+}
+
+UGCHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetCachedUGCHandle(void *linux_side, int32 iCachedContent)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetCachedUGCHandle((int32)iCachedContent);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004.h b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004.h
new file mode 100644
index 00000000..e26d3f91
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004.h
@@ -0,0 +1,28 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileWrite(void *, const char *, const void *, int32);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileRead(void *, const char *, void *, int32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileForget(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileDelete(void *, const char *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileShare(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_SetSyncPlatforms(void *, const char *, ERemoteStoragePlatform);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileExists(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FilePersisted(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileSize(void *, const char *);
+extern int64 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileTimestamp(void *, const char *);
+extern ERemoteStoragePlatform cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetSyncPlatforms(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileCount(void *);
+extern const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileNameAndSize(void *, int, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetQuota(void *, int32 *, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_IsCloudEnabledForAccount(void *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_IsCloudEnabledForApp(void *);
+extern void cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_SetCloudEnabledForApp(void *, bool);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_UGCDownload(void *, UGCHandle_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetUGCDetails(void *, UGCHandle_t, AppId_t *, char **, int32 *, CSteamID *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_UGCRead(void *, UGCHandle_t, void *, int32);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetCachedUGCCount(void *);
+extern UGCHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetCachedUGCHandle(void *, int32);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005.cpp b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005.cpp
new file mode 100644
index 00000000..9516d601
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005.cpp
@@ -0,0 +1,165 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_117/steam_api.h"
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileWrite(void *linux_side, const char * pchFile, const void * pvData, int32 cubData)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWrite((const char *)pchFile, (const void *)pvData, (int32)cubData);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileRead(void *linux_side, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileRead((const char *)pchFile, (void *)pvData, (int32)cubDataToRead);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileForget(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileForget((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileDelete(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileDelete((const char *)pchFile);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileShare(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileShare((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_SetSyncPlatforms(void *linux_side, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SetSyncPlatforms((const char *)pchFile, (ERemoteStoragePlatform)eRemoteStoragePlatform);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileExists(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileExists((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FilePersisted(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FilePersisted((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileSize(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileSize((const char *)pchFile);
+}
+
+int64 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileTimestamp(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileTimestamp((const char *)pchFile);
+}
+
+ERemoteStoragePlatform cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetSyncPlatforms(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetSyncPlatforms((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileCount();
+}
+
+const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileNameAndSize(void *linux_side, int iFile, int32 * pnFileSizeInBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileNameAndSize((int)iFile, (int32 *)pnFileSizeInBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetQuota(void *linux_side, int32 * pnTotalBytes, int32 * puAvailableBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetQuota((int32 *)pnTotalBytes, (int32 *)puAvailableBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_IsCloudEnabledForAccount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->IsCloudEnabledForAccount();
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_IsCloudEnabledForApp(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->IsCloudEnabledForApp();
+}
+
+void cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_SetCloudEnabledForApp(void *linux_side, bool bEnabled)
+{
+ ((ISteamRemoteStorage*)linux_side)->SetCloudEnabledForApp((bool)bEnabled);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UGCDownload(void *linux_side, UGCHandle_t hContent)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCDownload((UGCHandle_t)hContent);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetUGCDetails(void *linux_side, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, CSteamID * pSteamIDOwner)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUGCDetails((UGCHandle_t)hContent, (AppId_t *)pnAppID, (char **)ppchName, (int32 *)pnFileSizeInBytes, (CSteamID *)pSteamIDOwner);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UGCRead(void *linux_side, UGCHandle_t hContent, void * pvData, int32 cubDataToRead)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCRead((UGCHandle_t)hContent, (void *)pvData, (int32)cubDataToRead);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetCachedUGCCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetCachedUGCCount();
+}
+
+UGCHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetCachedUGCHandle(void *linux_side, int32 iCachedContent)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetCachedUGCHandle((int32)iCachedContent);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_PublishFile(void *linux_side, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->PublishFile((const char *)pchFile, (const char *)pchPreviewFile, (AppId_t)nConsumerAppId, (const char *)pchTitle, (const char *)pchDescription, (ERemoteStoragePublishedFileVisibility)eVisibility, (SteamParamStringArray_t *)pTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_PublishWorkshopFile(void *linux_side, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, SteamParamStringArray_t * pTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->PublishWorkshopFile((const char *)pchFile, (const char *)pchPreviewFile, (AppId_t)nConsumerAppId, (const char *)pchTitle, (const char *)pchDescription, (SteamParamStringArray_t *)pTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UpdatePublishedFile(void *linux_side, RemoteStorageUpdatePublishedFileRequest_t updatePublishedFileRequest)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFile((RemoteStorageUpdatePublishedFileRequest_t)updatePublishedFileRequest);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetPublishedFileDetails(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetPublishedFileDetails((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_DeletePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->DeletePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_EnumerateUserPublishedFiles(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserPublishedFiles((uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_SubscribePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SubscribePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_EnumerateUserSubscribedFiles(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserSubscribedFiles((uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UnsubscribePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UnsubscribePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005.h b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005.h
new file mode 100644
index 00000000..2d3d6053
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005.h
@@ -0,0 +1,37 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileWrite(void *, const char *, const void *, int32);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileRead(void *, const char *, void *, int32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileForget(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileDelete(void *, const char *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileShare(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_SetSyncPlatforms(void *, const char *, ERemoteStoragePlatform);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileExists(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FilePersisted(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileSize(void *, const char *);
+extern int64 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileTimestamp(void *, const char *);
+extern ERemoteStoragePlatform cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetSyncPlatforms(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileCount(void *);
+extern const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileNameAndSize(void *, int, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetQuota(void *, int32 *, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_IsCloudEnabledForAccount(void *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_IsCloudEnabledForApp(void *);
+extern void cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_SetCloudEnabledForApp(void *, bool);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UGCDownload(void *, UGCHandle_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetUGCDetails(void *, UGCHandle_t, AppId_t *, char **, int32 *, CSteamID *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UGCRead(void *, UGCHandle_t, void *, int32);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetCachedUGCCount(void *);
+extern UGCHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetCachedUGCHandle(void *, int32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_PublishFile(void *, const char *, const char *, AppId_t, const char *, const char *, ERemoteStoragePublishedFileVisibility, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_PublishWorkshopFile(void *, const char *, const char *, AppId_t, const char *, const char *, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UpdatePublishedFile(void *, RemoteStorageUpdatePublishedFileRequest_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetPublishedFileDetails(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_DeletePublishedFile(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_EnumerateUserPublishedFiles(void *, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_SubscribePublishedFile(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_EnumerateUserSubscribedFiles(void *, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UnsubscribePublishedFile(void *, PublishedFileId_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006.cpp b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006.cpp
new file mode 100644
index 00000000..40599327
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006.cpp
@@ -0,0 +1,245 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_119/steam_api.h"
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileWrite(void *linux_side, const char * pchFile, const void * pvData, int32 cubData)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWrite((const char *)pchFile, (const void *)pvData, (int32)cubData);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileRead(void *linux_side, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileRead((const char *)pchFile, (void *)pvData, (int32)cubDataToRead);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileForget(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileForget((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileDelete(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileDelete((const char *)pchFile);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileShare(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileShare((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SetSyncPlatforms(void *linux_side, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SetSyncPlatforms((const char *)pchFile, (ERemoteStoragePlatform)eRemoteStoragePlatform);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileExists(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileExists((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FilePersisted(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FilePersisted((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileSize(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileSize((const char *)pchFile);
+}
+
+int64 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileTimestamp(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileTimestamp((const char *)pchFile);
+}
+
+ERemoteStoragePlatform cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetSyncPlatforms(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetSyncPlatforms((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileCount();
+}
+
+const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileNameAndSize(void *linux_side, int iFile, int32 * pnFileSizeInBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileNameAndSize((int)iFile, (int32 *)pnFileSizeInBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetQuota(void *linux_side, int32 * pnTotalBytes, int32 * puAvailableBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetQuota((int32 *)pnTotalBytes, (int32 *)puAvailableBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_IsCloudEnabledForAccount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->IsCloudEnabledForAccount();
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_IsCloudEnabledForApp(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->IsCloudEnabledForApp();
+}
+
+void cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SetCloudEnabledForApp(void *linux_side, bool bEnabled)
+{
+ ((ISteamRemoteStorage*)linux_side)->SetCloudEnabledForApp((bool)bEnabled);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UGCDownload(void *linux_side, UGCHandle_t hContent)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCDownload((UGCHandle_t)hContent);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetUGCDownloadProgress(void *linux_side, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUGCDownloadProgress((UGCHandle_t)hContent, (int32 *)pnBytesDownloaded, (int32 *)pnBytesExpected);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetUGCDetails(void *linux_side, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, CSteamID * pSteamIDOwner)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUGCDetails((UGCHandle_t)hContent, (AppId_t *)pnAppID, (char **)ppchName, (int32 *)pnFileSizeInBytes, (CSteamID *)pSteamIDOwner);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UGCRead(void *linux_side, UGCHandle_t hContent, void * pvData, int32 cubDataToRead)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCRead((UGCHandle_t)hContent, (void *)pvData, (int32)cubDataToRead);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetCachedUGCCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetCachedUGCCount();
+}
+
+UGCHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetCachedUGCHandle(void *linux_side, int32 iCachedContent)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetCachedUGCHandle((int32)iCachedContent);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_PublishWorkshopFile(void *linux_side, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType)
+{
+ return ((ISteamRemoteStorage*)linux_side)->PublishWorkshopFile((const char *)pchFile, (const char *)pchPreviewFile, (AppId_t)nConsumerAppId, (const char *)pchTitle, (const char *)pchDescription, (ERemoteStoragePublishedFileVisibility)eVisibility, (SteamParamStringArray_t *)pTags, (EWorkshopFileType)eWorkshopFileType);
+}
+
+PublishedFileUpdateHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_CreatePublishedFileUpdateRequest(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->CreatePublishedFileUpdateRequest((PublishedFileId_t)unPublishedFileId);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileFile(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileFile((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFilePreviewFile(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFilePreviewFile((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchPreviewFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileTitle(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileTitle((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchTitle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileDescription(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileDescription((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchDescription);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileVisibility(void *linux_side, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileVisibility((PublishedFileUpdateHandle_t)updateHandle, (ERemoteStoragePublishedFileVisibility)eVisibility);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileTags(void *linux_side, PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t * pTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileTags((PublishedFileUpdateHandle_t)updateHandle, (SteamParamStringArray_t *)pTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_CommitPublishedFileUpdate(void *linux_side, PublishedFileUpdateHandle_t updateHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->CommitPublishedFileUpdate((PublishedFileUpdateHandle_t)updateHandle);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetPublishedFileDetails(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetPublishedFileDetails((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_DeletePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->DeletePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumerateUserPublishedFiles(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserPublishedFiles((uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SubscribePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SubscribePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumerateUserSubscribedFiles(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserSubscribedFiles((uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UnsubscribePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UnsubscribePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileSetChangeDescription(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileSetChangeDescription((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchChangeDescription);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetPublishedItemVoteDetails(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetPublishedItemVoteDetails((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdateUserPublishedItemVote(void *linux_side, PublishedFileId_t unPublishedFileId, bool bVoteUp)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdateUserPublishedItemVote((PublishedFileId_t)unPublishedFileId, (bool)bVoteUp);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetUserPublishedItemVoteDetails(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUserPublishedItemVoteDetails((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumerateUserSharedWorkshopFiles(void *linux_side, CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t * pRequiredTags, SteamParamStringArray_t * pExcludedTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserSharedWorkshopFiles((CSteamID)steamId, (uint32)unStartIndex, (SteamParamStringArray_t *)pRequiredTags, (SteamParamStringArray_t *)pExcludedTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_PublishVideo(void *linux_side, const char * pchVideoURL, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->PublishVideo((const char *)pchVideoURL, (const char *)pchPreviewFile, (AppId_t)nConsumerAppId, (const char *)pchTitle, (const char *)pchDescription, (ERemoteStoragePublishedFileVisibility)eVisibility, (SteamParamStringArray_t *)pTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SetUserPublishedFileAction(void *linux_side, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SetUserPublishedFileAction((PublishedFileId_t)unPublishedFileId, (EWorkshopFileAction)eAction);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumeratePublishedFilesByUserAction(void *linux_side, EWorkshopFileAction eAction, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumeratePublishedFilesByUserAction((EWorkshopFileAction)eAction, (uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumeratePublishedWorkshopFiles(void *linux_side, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t * pTags, SteamParamStringArray_t * pUserTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumeratePublishedWorkshopFiles((EWorkshopEnumerationType)eEnumerationType, (uint32)unStartIndex, (uint32)unCount, (uint32)unDays, (SteamParamStringArray_t *)pTags, (SteamParamStringArray_t *)pUserTags);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006.h b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006.h
new file mode 100644
index 00000000..9d5f4450
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006.h
@@ -0,0 +1,53 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileWrite(void *, const char *, const void *, int32);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileRead(void *, const char *, void *, int32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileForget(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileDelete(void *, const char *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileShare(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SetSyncPlatforms(void *, const char *, ERemoteStoragePlatform);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileExists(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FilePersisted(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileSize(void *, const char *);
+extern int64 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileTimestamp(void *, const char *);
+extern ERemoteStoragePlatform cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetSyncPlatforms(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileCount(void *);
+extern const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileNameAndSize(void *, int, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetQuota(void *, int32 *, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_IsCloudEnabledForAccount(void *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_IsCloudEnabledForApp(void *);
+extern void cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SetCloudEnabledForApp(void *, bool);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UGCDownload(void *, UGCHandle_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetUGCDownloadProgress(void *, UGCHandle_t, int32 *, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetUGCDetails(void *, UGCHandle_t, AppId_t *, char **, int32 *, CSteamID *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UGCRead(void *, UGCHandle_t, void *, int32);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetCachedUGCCount(void *);
+extern UGCHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetCachedUGCHandle(void *, int32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_PublishWorkshopFile(void *, const char *, const char *, AppId_t, const char *, const char *, ERemoteStoragePublishedFileVisibility, SteamParamStringArray_t *, EWorkshopFileType);
+extern PublishedFileUpdateHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_CreatePublishedFileUpdateRequest(void *, PublishedFileId_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileFile(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFilePreviewFile(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileTitle(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileDescription(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileVisibility(void *, PublishedFileUpdateHandle_t, ERemoteStoragePublishedFileVisibility);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileTags(void *, PublishedFileUpdateHandle_t, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_CommitPublishedFileUpdate(void *, PublishedFileUpdateHandle_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetPublishedFileDetails(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_DeletePublishedFile(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumerateUserPublishedFiles(void *, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SubscribePublishedFile(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumerateUserSubscribedFiles(void *, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UnsubscribePublishedFile(void *, PublishedFileId_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileSetChangeDescription(void *, PublishedFileUpdateHandle_t, const char *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetPublishedItemVoteDetails(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdateUserPublishedItemVote(void *, PublishedFileId_t, bool);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetUserPublishedItemVoteDetails(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumerateUserSharedWorkshopFiles(void *, CSteamID, uint32, SteamParamStringArray_t *, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_PublishVideo(void *, const char *, const char *, AppId_t, const char *, const char *, ERemoteStoragePublishedFileVisibility, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SetUserPublishedFileAction(void *, PublishedFileId_t, EWorkshopFileAction);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumeratePublishedFilesByUserAction(void *, EWorkshopFileAction, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumeratePublishedWorkshopFiles(void *, EWorkshopEnumerationType, uint32, uint32, uint32, SteamParamStringArray_t *, SteamParamStringArray_t *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008.cpp b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008.cpp
new file mode 100644
index 00000000..badbf028
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008.cpp
@@ -0,0 +1,265 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_121/steam_api.h"
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWrite(void *linux_side, const char * pchFile, const void * pvData, int32 cubData)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWrite((const char *)pchFile, (const void *)pvData, (int32)cubData);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileRead(void *linux_side, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileRead((const char *)pchFile, (void *)pvData, (int32)cubDataToRead);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileForget(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileForget((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileDelete(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileDelete((const char *)pchFile);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileShare(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileShare((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SetSyncPlatforms(void *linux_side, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SetSyncPlatforms((const char *)pchFile, (ERemoteStoragePlatform)eRemoteStoragePlatform);
+}
+
+UGCFileWriteStreamHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamOpen(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamOpen((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamWriteChunk(void *linux_side, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamWriteChunk((UGCFileWriteStreamHandle_t)writeHandle, (const void *)pvData, (int32)cubData);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamClose(void *linux_side, UGCFileWriteStreamHandle_t writeHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamClose((UGCFileWriteStreamHandle_t)writeHandle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamCancel(void *linux_side, UGCFileWriteStreamHandle_t writeHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamCancel((UGCFileWriteStreamHandle_t)writeHandle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileExists(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileExists((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FilePersisted(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FilePersisted((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileSize(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileSize((const char *)pchFile);
+}
+
+int64 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileTimestamp(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileTimestamp((const char *)pchFile);
+}
+
+ERemoteStoragePlatform cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetSyncPlatforms(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetSyncPlatforms((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileCount();
+}
+
+const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileNameAndSize(void *linux_side, int iFile, int32 * pnFileSizeInBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileNameAndSize((int)iFile, (int32 *)pnFileSizeInBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetQuota(void *linux_side, int32 * pnTotalBytes, int32 * puAvailableBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetQuota((int32 *)pnTotalBytes, (int32 *)puAvailableBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_IsCloudEnabledForAccount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->IsCloudEnabledForAccount();
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_IsCloudEnabledForApp(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->IsCloudEnabledForApp();
+}
+
+void cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SetCloudEnabledForApp(void *linux_side, bool bEnabled)
+{
+ ((ISteamRemoteStorage*)linux_side)->SetCloudEnabledForApp((bool)bEnabled);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UGCDownload(void *linux_side, UGCHandle_t hContent)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCDownload((UGCHandle_t)hContent);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetUGCDownloadProgress(void *linux_side, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUGCDownloadProgress((UGCHandle_t)hContent, (int32 *)pnBytesDownloaded, (int32 *)pnBytesExpected);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetUGCDetails(void *linux_side, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, CSteamID * pSteamIDOwner)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUGCDetails((UGCHandle_t)hContent, (AppId_t *)pnAppID, (char **)ppchName, (int32 *)pnFileSizeInBytes, (CSteamID *)pSteamIDOwner);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UGCRead(void *linux_side, UGCHandle_t hContent, void * pvData, int32 cubDataToRead)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCRead((UGCHandle_t)hContent, (void *)pvData, (int32)cubDataToRead);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetCachedUGCCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetCachedUGCCount();
+}
+
+UGCHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetCachedUGCHandle(void *linux_side, int32 iCachedContent)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetCachedUGCHandle((int32)iCachedContent);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_PublishWorkshopFile(void *linux_side, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType)
+{
+ return ((ISteamRemoteStorage*)linux_side)->PublishWorkshopFile((const char *)pchFile, (const char *)pchPreviewFile, (AppId_t)nConsumerAppId, (const char *)pchTitle, (const char *)pchDescription, (ERemoteStoragePublishedFileVisibility)eVisibility, (SteamParamStringArray_t *)pTags, (EWorkshopFileType)eWorkshopFileType);
+}
+
+PublishedFileUpdateHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_CreatePublishedFileUpdateRequest(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->CreatePublishedFileUpdateRequest((PublishedFileId_t)unPublishedFileId);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileFile(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileFile((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFilePreviewFile(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFilePreviewFile((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchPreviewFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileTitle(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileTitle((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchTitle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileDescription(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileDescription((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchDescription);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileVisibility(void *linux_side, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileVisibility((PublishedFileUpdateHandle_t)updateHandle, (ERemoteStoragePublishedFileVisibility)eVisibility);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileTags(void *linux_side, PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t * pTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileTags((PublishedFileUpdateHandle_t)updateHandle, (SteamParamStringArray_t *)pTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_CommitPublishedFileUpdate(void *linux_side, PublishedFileUpdateHandle_t updateHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->CommitPublishedFileUpdate((PublishedFileUpdateHandle_t)updateHandle);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetPublishedFileDetails(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetPublishedFileDetails((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_DeletePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->DeletePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumerateUserPublishedFiles(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserPublishedFiles((uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SubscribePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SubscribePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumerateUserSubscribedFiles(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserSubscribedFiles((uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UnsubscribePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UnsubscribePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileSetChangeDescription(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileSetChangeDescription((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchChangeDescription);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetPublishedItemVoteDetails(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetPublishedItemVoteDetails((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdateUserPublishedItemVote(void *linux_side, PublishedFileId_t unPublishedFileId, bool bVoteUp)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdateUserPublishedItemVote((PublishedFileId_t)unPublishedFileId, (bool)bVoteUp);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetUserPublishedItemVoteDetails(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUserPublishedItemVoteDetails((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumerateUserSharedWorkshopFiles(void *linux_side, CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t * pRequiredTags, SteamParamStringArray_t * pExcludedTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserSharedWorkshopFiles((CSteamID)steamId, (uint32)unStartIndex, (SteamParamStringArray_t *)pRequiredTags, (SteamParamStringArray_t *)pExcludedTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_PublishVideo(void *linux_side, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->PublishVideo((EWorkshopVideoProvider)eVideoProvider, (const char *)pchVideoAccount, (const char *)pchVideoIdentifier, (const char *)pchPreviewFile, (AppId_t)nConsumerAppId, (const char *)pchTitle, (const char *)pchDescription, (ERemoteStoragePublishedFileVisibility)eVisibility, (SteamParamStringArray_t *)pTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SetUserPublishedFileAction(void *linux_side, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SetUserPublishedFileAction((PublishedFileId_t)unPublishedFileId, (EWorkshopFileAction)eAction);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumeratePublishedFilesByUserAction(void *linux_side, EWorkshopFileAction eAction, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumeratePublishedFilesByUserAction((EWorkshopFileAction)eAction, (uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumeratePublishedWorkshopFiles(void *linux_side, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t * pTags, SteamParamStringArray_t * pUserTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumeratePublishedWorkshopFiles((EWorkshopEnumerationType)eEnumerationType, (uint32)unStartIndex, (uint32)unCount, (uint32)unDays, (SteamParamStringArray_t *)pTags, (SteamParamStringArray_t *)pUserTags);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008.h b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008.h
new file mode 100644
index 00000000..094b347b
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008.h
@@ -0,0 +1,57 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWrite(void *, const char *, const void *, int32);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileRead(void *, const char *, void *, int32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileForget(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileDelete(void *, const char *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileShare(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SetSyncPlatforms(void *, const char *, ERemoteStoragePlatform);
+extern UGCFileWriteStreamHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamOpen(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamWriteChunk(void *, UGCFileWriteStreamHandle_t, const void *, int32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamClose(void *, UGCFileWriteStreamHandle_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamCancel(void *, UGCFileWriteStreamHandle_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileExists(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FilePersisted(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileSize(void *, const char *);
+extern int64 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileTimestamp(void *, const char *);
+extern ERemoteStoragePlatform cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetSyncPlatforms(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileCount(void *);
+extern const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileNameAndSize(void *, int, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetQuota(void *, int32 *, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_IsCloudEnabledForAccount(void *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_IsCloudEnabledForApp(void *);
+extern void cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SetCloudEnabledForApp(void *, bool);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UGCDownload(void *, UGCHandle_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetUGCDownloadProgress(void *, UGCHandle_t, int32 *, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetUGCDetails(void *, UGCHandle_t, AppId_t *, char **, int32 *, CSteamID *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UGCRead(void *, UGCHandle_t, void *, int32);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetCachedUGCCount(void *);
+extern UGCHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetCachedUGCHandle(void *, int32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_PublishWorkshopFile(void *, const char *, const char *, AppId_t, const char *, const char *, ERemoteStoragePublishedFileVisibility, SteamParamStringArray_t *, EWorkshopFileType);
+extern PublishedFileUpdateHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_CreatePublishedFileUpdateRequest(void *, PublishedFileId_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileFile(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFilePreviewFile(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileTitle(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileDescription(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileVisibility(void *, PublishedFileUpdateHandle_t, ERemoteStoragePublishedFileVisibility);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileTags(void *, PublishedFileUpdateHandle_t, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_CommitPublishedFileUpdate(void *, PublishedFileUpdateHandle_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetPublishedFileDetails(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_DeletePublishedFile(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumerateUserPublishedFiles(void *, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SubscribePublishedFile(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumerateUserSubscribedFiles(void *, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UnsubscribePublishedFile(void *, PublishedFileId_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileSetChangeDescription(void *, PublishedFileUpdateHandle_t, const char *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetPublishedItemVoteDetails(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdateUserPublishedItemVote(void *, PublishedFileId_t, bool);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetUserPublishedItemVoteDetails(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumerateUserSharedWorkshopFiles(void *, CSteamID, uint32, SteamParamStringArray_t *, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_PublishVideo(void *, EWorkshopVideoProvider, const char *, const char *, const char *, AppId_t, const char *, const char *, ERemoteStoragePublishedFileVisibility, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SetUserPublishedFileAction(void *, PublishedFileId_t, EWorkshopFileAction);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumeratePublishedFilesByUserAction(void *, EWorkshopFileAction, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumeratePublishedWorkshopFiles(void *, EWorkshopEnumerationType, uint32, uint32, uint32, SteamParamStringArray_t *, SteamParamStringArray_t *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010.cpp b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010.cpp
new file mode 100644
index 00000000..e99efddf
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010.cpp
@@ -0,0 +1,270 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_124/steam_api.h"
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWrite(void *linux_side, const char * pchFile, const void * pvData, int32 cubData)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWrite((const char *)pchFile, (const void *)pvData, (int32)cubData);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileRead(void *linux_side, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileRead((const char *)pchFile, (void *)pvData, (int32)cubDataToRead);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileForget(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileForget((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileDelete(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileDelete((const char *)pchFile);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileShare(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileShare((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SetSyncPlatforms(void *linux_side, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SetSyncPlatforms((const char *)pchFile, (ERemoteStoragePlatform)eRemoteStoragePlatform);
+}
+
+UGCFileWriteStreamHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamOpen(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamOpen((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamWriteChunk(void *linux_side, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamWriteChunk((UGCFileWriteStreamHandle_t)writeHandle, (const void *)pvData, (int32)cubData);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamClose(void *linux_side, UGCFileWriteStreamHandle_t writeHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamClose((UGCFileWriteStreamHandle_t)writeHandle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamCancel(void *linux_side, UGCFileWriteStreamHandle_t writeHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamCancel((UGCFileWriteStreamHandle_t)writeHandle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileExists(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileExists((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FilePersisted(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FilePersisted((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileSize(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileSize((const char *)pchFile);
+}
+
+int64 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileTimestamp(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileTimestamp((const char *)pchFile);
+}
+
+ERemoteStoragePlatform cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetSyncPlatforms(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetSyncPlatforms((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileCount();
+}
+
+const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileNameAndSize(void *linux_side, int iFile, int32 * pnFileSizeInBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileNameAndSize((int)iFile, (int32 *)pnFileSizeInBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetQuota(void *linux_side, int32 * pnTotalBytes, int32 * puAvailableBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetQuota((int32 *)pnTotalBytes, (int32 *)puAvailableBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_IsCloudEnabledForAccount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->IsCloudEnabledForAccount();
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_IsCloudEnabledForApp(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->IsCloudEnabledForApp();
+}
+
+void cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SetCloudEnabledForApp(void *linux_side, bool bEnabled)
+{
+ ((ISteamRemoteStorage*)linux_side)->SetCloudEnabledForApp((bool)bEnabled);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UGCDownload(void *linux_side, UGCHandle_t hContent, uint32 unPriority)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCDownload((UGCHandle_t)hContent, (uint32)unPriority);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetUGCDownloadProgress(void *linux_side, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUGCDownloadProgress((UGCHandle_t)hContent, (int32 *)pnBytesDownloaded, (int32 *)pnBytesExpected);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetUGCDetails(void *linux_side, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, CSteamID * pSteamIDOwner)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUGCDetails((UGCHandle_t)hContent, (AppId_t *)pnAppID, (char **)ppchName, (int32 *)pnFileSizeInBytes, (CSteamID *)pSteamIDOwner);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UGCRead(void *linux_side, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCRead((UGCHandle_t)hContent, (void *)pvData, (int32)cubDataToRead, (uint32)cOffset);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetCachedUGCCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetCachedUGCCount();
+}
+
+UGCHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetCachedUGCHandle(void *linux_side, int32 iCachedContent)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetCachedUGCHandle((int32)iCachedContent);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_PublishWorkshopFile(void *linux_side, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType)
+{
+ return ((ISteamRemoteStorage*)linux_side)->PublishWorkshopFile((const char *)pchFile, (const char *)pchPreviewFile, (AppId_t)nConsumerAppId, (const char *)pchTitle, (const char *)pchDescription, (ERemoteStoragePublishedFileVisibility)eVisibility, (SteamParamStringArray_t *)pTags, (EWorkshopFileType)eWorkshopFileType);
+}
+
+PublishedFileUpdateHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_CreatePublishedFileUpdateRequest(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->CreatePublishedFileUpdateRequest((PublishedFileId_t)unPublishedFileId);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileFile(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileFile((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFilePreviewFile(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFilePreviewFile((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchPreviewFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileTitle(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileTitle((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchTitle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileDescription(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileDescription((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchDescription);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileVisibility(void *linux_side, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileVisibility((PublishedFileUpdateHandle_t)updateHandle, (ERemoteStoragePublishedFileVisibility)eVisibility);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileTags(void *linux_side, PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t * pTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileTags((PublishedFileUpdateHandle_t)updateHandle, (SteamParamStringArray_t *)pTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_CommitPublishedFileUpdate(void *linux_side, PublishedFileUpdateHandle_t updateHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->CommitPublishedFileUpdate((PublishedFileUpdateHandle_t)updateHandle);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetPublishedFileDetails(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetPublishedFileDetails((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_DeletePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->DeletePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumerateUserPublishedFiles(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserPublishedFiles((uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SubscribePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SubscribePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumerateUserSubscribedFiles(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserSubscribedFiles((uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UnsubscribePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UnsubscribePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileSetChangeDescription(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileSetChangeDescription((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchChangeDescription);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetPublishedItemVoteDetails(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetPublishedItemVoteDetails((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdateUserPublishedItemVote(void *linux_side, PublishedFileId_t unPublishedFileId, bool bVoteUp)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdateUserPublishedItemVote((PublishedFileId_t)unPublishedFileId, (bool)bVoteUp);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetUserPublishedItemVoteDetails(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUserPublishedItemVoteDetails((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumerateUserSharedWorkshopFiles(void *linux_side, CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t * pRequiredTags, SteamParamStringArray_t * pExcludedTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserSharedWorkshopFiles((CSteamID)steamId, (uint32)unStartIndex, (SteamParamStringArray_t *)pRequiredTags, (SteamParamStringArray_t *)pExcludedTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_PublishVideo(void *linux_side, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->PublishVideo((EWorkshopVideoProvider)eVideoProvider, (const char *)pchVideoAccount, (const char *)pchVideoIdentifier, (const char *)pchPreviewFile, (AppId_t)nConsumerAppId, (const char *)pchTitle, (const char *)pchDescription, (ERemoteStoragePublishedFileVisibility)eVisibility, (SteamParamStringArray_t *)pTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SetUserPublishedFileAction(void *linux_side, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SetUserPublishedFileAction((PublishedFileId_t)unPublishedFileId, (EWorkshopFileAction)eAction);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumeratePublishedFilesByUserAction(void *linux_side, EWorkshopFileAction eAction, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumeratePublishedFilesByUserAction((EWorkshopFileAction)eAction, (uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumeratePublishedWorkshopFiles(void *linux_side, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t * pTags, SteamParamStringArray_t * pUserTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumeratePublishedWorkshopFiles((EWorkshopEnumerationType)eEnumerationType, (uint32)unStartIndex, (uint32)unCount, (uint32)unDays, (SteamParamStringArray_t *)pTags, (SteamParamStringArray_t *)pUserTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UGCDownloadToLocation(void *linux_side, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCDownloadToLocation((UGCHandle_t)hContent, (const char *)pchLocation, (uint32)unPriority);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010.h b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010.h
new file mode 100644
index 00000000..a003454c
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010.h
@@ -0,0 +1,58 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWrite(void *, const char *, const void *, int32);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileRead(void *, const char *, void *, int32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileForget(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileDelete(void *, const char *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileShare(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SetSyncPlatforms(void *, const char *, ERemoteStoragePlatform);
+extern UGCFileWriteStreamHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamOpen(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamWriteChunk(void *, UGCFileWriteStreamHandle_t, const void *, int32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamClose(void *, UGCFileWriteStreamHandle_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamCancel(void *, UGCFileWriteStreamHandle_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileExists(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FilePersisted(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileSize(void *, const char *);
+extern int64 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileTimestamp(void *, const char *);
+extern ERemoteStoragePlatform cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetSyncPlatforms(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileCount(void *);
+extern const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileNameAndSize(void *, int, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetQuota(void *, int32 *, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_IsCloudEnabledForAccount(void *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_IsCloudEnabledForApp(void *);
+extern void cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SetCloudEnabledForApp(void *, bool);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UGCDownload(void *, UGCHandle_t, uint32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetUGCDownloadProgress(void *, UGCHandle_t, int32 *, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetUGCDetails(void *, UGCHandle_t, AppId_t *, char **, int32 *, CSteamID *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UGCRead(void *, UGCHandle_t, void *, int32, uint32);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetCachedUGCCount(void *);
+extern UGCHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetCachedUGCHandle(void *, int32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_PublishWorkshopFile(void *, const char *, const char *, AppId_t, const char *, const char *, ERemoteStoragePublishedFileVisibility, SteamParamStringArray_t *, EWorkshopFileType);
+extern PublishedFileUpdateHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_CreatePublishedFileUpdateRequest(void *, PublishedFileId_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileFile(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFilePreviewFile(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileTitle(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileDescription(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileVisibility(void *, PublishedFileUpdateHandle_t, ERemoteStoragePublishedFileVisibility);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileTags(void *, PublishedFileUpdateHandle_t, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_CommitPublishedFileUpdate(void *, PublishedFileUpdateHandle_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetPublishedFileDetails(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_DeletePublishedFile(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumerateUserPublishedFiles(void *, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SubscribePublishedFile(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumerateUserSubscribedFiles(void *, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UnsubscribePublishedFile(void *, PublishedFileId_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileSetChangeDescription(void *, PublishedFileUpdateHandle_t, const char *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetPublishedItemVoteDetails(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdateUserPublishedItemVote(void *, PublishedFileId_t, bool);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetUserPublishedItemVoteDetails(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumerateUserSharedWorkshopFiles(void *, CSteamID, uint32, SteamParamStringArray_t *, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_PublishVideo(void *, EWorkshopVideoProvider, const char *, const char *, const char *, AppId_t, const char *, const char *, ERemoteStoragePublishedFileVisibility, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SetUserPublishedFileAction(void *, PublishedFileId_t, EWorkshopFileAction);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumeratePublishedFilesByUserAction(void *, EWorkshopFileAction, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumeratePublishedWorkshopFiles(void *, EWorkshopEnumerationType, uint32, uint32, uint32, SteamParamStringArray_t *, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UGCDownloadToLocation(void *, UGCHandle_t, const char *, uint32);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011.cpp b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011.cpp
new file mode 100644
index 00000000..11f61f34
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011.cpp
@@ -0,0 +1,270 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_125/steam_api.h"
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWrite(void *linux_side, const char * pchFile, const void * pvData, int32 cubData)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWrite((const char *)pchFile, (const void *)pvData, (int32)cubData);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileRead(void *linux_side, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileRead((const char *)pchFile, (void *)pvData, (int32)cubDataToRead);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileForget(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileForget((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileDelete(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileDelete((const char *)pchFile);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileShare(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileShare((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SetSyncPlatforms(void *linux_side, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SetSyncPlatforms((const char *)pchFile, (ERemoteStoragePlatform)eRemoteStoragePlatform);
+}
+
+UGCFileWriteStreamHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamOpen(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamOpen((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamWriteChunk(void *linux_side, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamWriteChunk((UGCFileWriteStreamHandle_t)writeHandle, (const void *)pvData, (int32)cubData);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamClose(void *linux_side, UGCFileWriteStreamHandle_t writeHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamClose((UGCFileWriteStreamHandle_t)writeHandle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamCancel(void *linux_side, UGCFileWriteStreamHandle_t writeHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamCancel((UGCFileWriteStreamHandle_t)writeHandle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileExists(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileExists((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FilePersisted(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FilePersisted((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileSize(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileSize((const char *)pchFile);
+}
+
+int64 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileTimestamp(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileTimestamp((const char *)pchFile);
+}
+
+ERemoteStoragePlatform cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetSyncPlatforms(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetSyncPlatforms((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileCount();
+}
+
+const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileNameAndSize(void *linux_side, int iFile, int32 * pnFileSizeInBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileNameAndSize((int)iFile, (int32 *)pnFileSizeInBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetQuota(void *linux_side, int32 * pnTotalBytes, int32 * puAvailableBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetQuota((int32 *)pnTotalBytes, (int32 *)puAvailableBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_IsCloudEnabledForAccount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->IsCloudEnabledForAccount();
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_IsCloudEnabledForApp(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->IsCloudEnabledForApp();
+}
+
+void cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SetCloudEnabledForApp(void *linux_side, bool bEnabled)
+{
+ ((ISteamRemoteStorage*)linux_side)->SetCloudEnabledForApp((bool)bEnabled);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UGCDownload(void *linux_side, UGCHandle_t hContent, uint32 unPriority)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCDownload((UGCHandle_t)hContent, (uint32)unPriority);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetUGCDownloadProgress(void *linux_side, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUGCDownloadProgress((UGCHandle_t)hContent, (int32 *)pnBytesDownloaded, (int32 *)pnBytesExpected);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetUGCDetails(void *linux_side, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, CSteamID * pSteamIDOwner)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUGCDetails((UGCHandle_t)hContent, (AppId_t *)pnAppID, (char **)ppchName, (int32 *)pnFileSizeInBytes, (CSteamID *)pSteamIDOwner);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UGCRead(void *linux_side, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCRead((UGCHandle_t)hContent, (void *)pvData, (int32)cubDataToRead, (uint32)cOffset);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetCachedUGCCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetCachedUGCCount();
+}
+
+UGCHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetCachedUGCHandle(void *linux_side, int32 iCachedContent)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetCachedUGCHandle((int32)iCachedContent);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_PublishWorkshopFile(void *linux_side, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType)
+{
+ return ((ISteamRemoteStorage*)linux_side)->PublishWorkshopFile((const char *)pchFile, (const char *)pchPreviewFile, (AppId_t)nConsumerAppId, (const char *)pchTitle, (const char *)pchDescription, (ERemoteStoragePublishedFileVisibility)eVisibility, (SteamParamStringArray_t *)pTags, (EWorkshopFileType)eWorkshopFileType);
+}
+
+PublishedFileUpdateHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_CreatePublishedFileUpdateRequest(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->CreatePublishedFileUpdateRequest((PublishedFileId_t)unPublishedFileId);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileFile(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileFile((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFilePreviewFile(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFilePreviewFile((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchPreviewFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileTitle(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileTitle((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchTitle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileDescription(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileDescription((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchDescription);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileVisibility(void *linux_side, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileVisibility((PublishedFileUpdateHandle_t)updateHandle, (ERemoteStoragePublishedFileVisibility)eVisibility);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileTags(void *linux_side, PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t * pTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileTags((PublishedFileUpdateHandle_t)updateHandle, (SteamParamStringArray_t *)pTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_CommitPublishedFileUpdate(void *linux_side, PublishedFileUpdateHandle_t updateHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->CommitPublishedFileUpdate((PublishedFileUpdateHandle_t)updateHandle);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetPublishedFileDetails(void *linux_side, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetPublishedFileDetails((PublishedFileId_t)unPublishedFileId, (uint32)unMaxSecondsOld);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_DeletePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->DeletePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumerateUserPublishedFiles(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserPublishedFiles((uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SubscribePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SubscribePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumerateUserSubscribedFiles(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserSubscribedFiles((uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UnsubscribePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UnsubscribePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileSetChangeDescription(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileSetChangeDescription((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchChangeDescription);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetPublishedItemVoteDetails(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetPublishedItemVoteDetails((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdateUserPublishedItemVote(void *linux_side, PublishedFileId_t unPublishedFileId, bool bVoteUp)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdateUserPublishedItemVote((PublishedFileId_t)unPublishedFileId, (bool)bVoteUp);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetUserPublishedItemVoteDetails(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUserPublishedItemVoteDetails((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumerateUserSharedWorkshopFiles(void *linux_side, CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t * pRequiredTags, SteamParamStringArray_t * pExcludedTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserSharedWorkshopFiles((CSteamID)steamId, (uint32)unStartIndex, (SteamParamStringArray_t *)pRequiredTags, (SteamParamStringArray_t *)pExcludedTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_PublishVideo(void *linux_side, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->PublishVideo((EWorkshopVideoProvider)eVideoProvider, (const char *)pchVideoAccount, (const char *)pchVideoIdentifier, (const char *)pchPreviewFile, (AppId_t)nConsumerAppId, (const char *)pchTitle, (const char *)pchDescription, (ERemoteStoragePublishedFileVisibility)eVisibility, (SteamParamStringArray_t *)pTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SetUserPublishedFileAction(void *linux_side, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SetUserPublishedFileAction((PublishedFileId_t)unPublishedFileId, (EWorkshopFileAction)eAction);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumeratePublishedFilesByUserAction(void *linux_side, EWorkshopFileAction eAction, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumeratePublishedFilesByUserAction((EWorkshopFileAction)eAction, (uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumeratePublishedWorkshopFiles(void *linux_side, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t * pTags, SteamParamStringArray_t * pUserTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumeratePublishedWorkshopFiles((EWorkshopEnumerationType)eEnumerationType, (uint32)unStartIndex, (uint32)unCount, (uint32)unDays, (SteamParamStringArray_t *)pTags, (SteamParamStringArray_t *)pUserTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UGCDownloadToLocation(void *linux_side, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCDownloadToLocation((UGCHandle_t)hContent, (const char *)pchLocation, (uint32)unPriority);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011.h b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011.h
new file mode 100644
index 00000000..ca80fcbf
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011.h
@@ -0,0 +1,58 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWrite(void *, const char *, const void *, int32);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileRead(void *, const char *, void *, int32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileForget(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileDelete(void *, const char *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileShare(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SetSyncPlatforms(void *, const char *, ERemoteStoragePlatform);
+extern UGCFileWriteStreamHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamOpen(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamWriteChunk(void *, UGCFileWriteStreamHandle_t, const void *, int32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamClose(void *, UGCFileWriteStreamHandle_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamCancel(void *, UGCFileWriteStreamHandle_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileExists(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FilePersisted(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileSize(void *, const char *);
+extern int64 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileTimestamp(void *, const char *);
+extern ERemoteStoragePlatform cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetSyncPlatforms(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileCount(void *);
+extern const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileNameAndSize(void *, int, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetQuota(void *, int32 *, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_IsCloudEnabledForAccount(void *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_IsCloudEnabledForApp(void *);
+extern void cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SetCloudEnabledForApp(void *, bool);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UGCDownload(void *, UGCHandle_t, uint32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetUGCDownloadProgress(void *, UGCHandle_t, int32 *, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetUGCDetails(void *, UGCHandle_t, AppId_t *, char **, int32 *, CSteamID *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UGCRead(void *, UGCHandle_t, void *, int32, uint32);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetCachedUGCCount(void *);
+extern UGCHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetCachedUGCHandle(void *, int32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_PublishWorkshopFile(void *, const char *, const char *, AppId_t, const char *, const char *, ERemoteStoragePublishedFileVisibility, SteamParamStringArray_t *, EWorkshopFileType);
+extern PublishedFileUpdateHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_CreatePublishedFileUpdateRequest(void *, PublishedFileId_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileFile(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFilePreviewFile(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileTitle(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileDescription(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileVisibility(void *, PublishedFileUpdateHandle_t, ERemoteStoragePublishedFileVisibility);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileTags(void *, PublishedFileUpdateHandle_t, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_CommitPublishedFileUpdate(void *, PublishedFileUpdateHandle_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetPublishedFileDetails(void *, PublishedFileId_t, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_DeletePublishedFile(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumerateUserPublishedFiles(void *, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SubscribePublishedFile(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumerateUserSubscribedFiles(void *, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UnsubscribePublishedFile(void *, PublishedFileId_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileSetChangeDescription(void *, PublishedFileUpdateHandle_t, const char *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetPublishedItemVoteDetails(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdateUserPublishedItemVote(void *, PublishedFileId_t, bool);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetUserPublishedItemVoteDetails(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumerateUserSharedWorkshopFiles(void *, CSteamID, uint32, SteamParamStringArray_t *, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_PublishVideo(void *, EWorkshopVideoProvider, const char *, const char *, const char *, AppId_t, const char *, const char *, ERemoteStoragePublishedFileVisibility, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SetUserPublishedFileAction(void *, PublishedFileId_t, EWorkshopFileAction);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumeratePublishedFilesByUserAction(void *, EWorkshopFileAction, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumeratePublishedWorkshopFiles(void *, EWorkshopEnumerationType, uint32, uint32, uint32, SteamParamStringArray_t *, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UGCDownloadToLocation(void *, UGCHandle_t, const char *, uint32);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012.cpp b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012.cpp
new file mode 100644
index 00000000..14d149ac
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012.cpp
@@ -0,0 +1,270 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_134/steam_api.h"
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWrite(void *linux_side, const char * pchFile, const void * pvData, int32 cubData)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWrite((const char *)pchFile, (const void *)pvData, (int32)cubData);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileRead(void *linux_side, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileRead((const char *)pchFile, (void *)pvData, (int32)cubDataToRead);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileForget(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileForget((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileDelete(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileDelete((const char *)pchFile);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileShare(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileShare((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SetSyncPlatforms(void *linux_side, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SetSyncPlatforms((const char *)pchFile, (ERemoteStoragePlatform)eRemoteStoragePlatform);
+}
+
+UGCFileWriteStreamHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamOpen(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamOpen((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamWriteChunk(void *linux_side, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamWriteChunk((UGCFileWriteStreamHandle_t)writeHandle, (const void *)pvData, (int32)cubData);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamClose(void *linux_side, UGCFileWriteStreamHandle_t writeHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamClose((UGCFileWriteStreamHandle_t)writeHandle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamCancel(void *linux_side, UGCFileWriteStreamHandle_t writeHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamCancel((UGCFileWriteStreamHandle_t)writeHandle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileExists(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileExists((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FilePersisted(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FilePersisted((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileSize(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileSize((const char *)pchFile);
+}
+
+int64 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileTimestamp(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileTimestamp((const char *)pchFile);
+}
+
+ERemoteStoragePlatform cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetSyncPlatforms(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetSyncPlatforms((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileCount();
+}
+
+const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileNameAndSize(void *linux_side, int iFile, int32 * pnFileSizeInBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileNameAndSize((int)iFile, (int32 *)pnFileSizeInBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetQuota(void *linux_side, int32 * pnTotalBytes, int32 * puAvailableBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetQuota((int32 *)pnTotalBytes, (int32 *)puAvailableBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_IsCloudEnabledForAccount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->IsCloudEnabledForAccount();
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_IsCloudEnabledForApp(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->IsCloudEnabledForApp();
+}
+
+void cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SetCloudEnabledForApp(void *linux_side, bool bEnabled)
+{
+ ((ISteamRemoteStorage*)linux_side)->SetCloudEnabledForApp((bool)bEnabled);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UGCDownload(void *linux_side, UGCHandle_t hContent, uint32 unPriority)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCDownload((UGCHandle_t)hContent, (uint32)unPriority);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetUGCDownloadProgress(void *linux_side, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUGCDownloadProgress((UGCHandle_t)hContent, (int32 *)pnBytesDownloaded, (int32 *)pnBytesExpected);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetUGCDetails(void *linux_side, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, CSteamID * pSteamIDOwner)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUGCDetails((UGCHandle_t)hContent, (AppId_t *)pnAppID, (char **)ppchName, (int32 *)pnFileSizeInBytes, (CSteamID *)pSteamIDOwner);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UGCRead(void *linux_side, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCRead((UGCHandle_t)hContent, (void *)pvData, (int32)cubDataToRead, (uint32)cOffset, (EUGCReadAction)eAction);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetCachedUGCCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetCachedUGCCount();
+}
+
+UGCHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetCachedUGCHandle(void *linux_side, int32 iCachedContent)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetCachedUGCHandle((int32)iCachedContent);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_PublishWorkshopFile(void *linux_side, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType)
+{
+ return ((ISteamRemoteStorage*)linux_side)->PublishWorkshopFile((const char *)pchFile, (const char *)pchPreviewFile, (AppId_t)nConsumerAppId, (const char *)pchTitle, (const char *)pchDescription, (ERemoteStoragePublishedFileVisibility)eVisibility, (SteamParamStringArray_t *)pTags, (EWorkshopFileType)eWorkshopFileType);
+}
+
+PublishedFileUpdateHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_CreatePublishedFileUpdateRequest(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->CreatePublishedFileUpdateRequest((PublishedFileId_t)unPublishedFileId);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileFile(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileFile((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFilePreviewFile(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFilePreviewFile((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchPreviewFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileTitle(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileTitle((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchTitle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileDescription(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileDescription((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchDescription);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileVisibility(void *linux_side, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileVisibility((PublishedFileUpdateHandle_t)updateHandle, (ERemoteStoragePublishedFileVisibility)eVisibility);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileTags(void *linux_side, PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t * pTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileTags((PublishedFileUpdateHandle_t)updateHandle, (SteamParamStringArray_t *)pTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_CommitPublishedFileUpdate(void *linux_side, PublishedFileUpdateHandle_t updateHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->CommitPublishedFileUpdate((PublishedFileUpdateHandle_t)updateHandle);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetPublishedFileDetails(void *linux_side, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetPublishedFileDetails((PublishedFileId_t)unPublishedFileId, (uint32)unMaxSecondsOld);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_DeletePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->DeletePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumerateUserPublishedFiles(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserPublishedFiles((uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SubscribePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SubscribePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumerateUserSubscribedFiles(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserSubscribedFiles((uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UnsubscribePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UnsubscribePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileSetChangeDescription(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileSetChangeDescription((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchChangeDescription);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetPublishedItemVoteDetails(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetPublishedItemVoteDetails((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdateUserPublishedItemVote(void *linux_side, PublishedFileId_t unPublishedFileId, bool bVoteUp)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdateUserPublishedItemVote((PublishedFileId_t)unPublishedFileId, (bool)bVoteUp);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetUserPublishedItemVoteDetails(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUserPublishedItemVoteDetails((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumerateUserSharedWorkshopFiles(void *linux_side, CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t * pRequiredTags, SteamParamStringArray_t * pExcludedTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserSharedWorkshopFiles((CSteamID)steamId, (uint32)unStartIndex, (SteamParamStringArray_t *)pRequiredTags, (SteamParamStringArray_t *)pExcludedTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_PublishVideo(void *linux_side, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->PublishVideo((EWorkshopVideoProvider)eVideoProvider, (const char *)pchVideoAccount, (const char *)pchVideoIdentifier, (const char *)pchPreviewFile, (AppId_t)nConsumerAppId, (const char *)pchTitle, (const char *)pchDescription, (ERemoteStoragePublishedFileVisibility)eVisibility, (SteamParamStringArray_t *)pTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SetUserPublishedFileAction(void *linux_side, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SetUserPublishedFileAction((PublishedFileId_t)unPublishedFileId, (EWorkshopFileAction)eAction);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumeratePublishedFilesByUserAction(void *linux_side, EWorkshopFileAction eAction, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumeratePublishedFilesByUserAction((EWorkshopFileAction)eAction, (uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumeratePublishedWorkshopFiles(void *linux_side, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t * pTags, SteamParamStringArray_t * pUserTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumeratePublishedWorkshopFiles((EWorkshopEnumerationType)eEnumerationType, (uint32)unStartIndex, (uint32)unCount, (uint32)unDays, (SteamParamStringArray_t *)pTags, (SteamParamStringArray_t *)pUserTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UGCDownloadToLocation(void *linux_side, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCDownloadToLocation((UGCHandle_t)hContent, (const char *)pchLocation, (uint32)unPriority);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012.h b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012.h
new file mode 100644
index 00000000..24222ba1
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012.h
@@ -0,0 +1,58 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWrite(void *, const char *, const void *, int32);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileRead(void *, const char *, void *, int32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileForget(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileDelete(void *, const char *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileShare(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SetSyncPlatforms(void *, const char *, ERemoteStoragePlatform);
+extern UGCFileWriteStreamHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamOpen(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamWriteChunk(void *, UGCFileWriteStreamHandle_t, const void *, int32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamClose(void *, UGCFileWriteStreamHandle_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamCancel(void *, UGCFileWriteStreamHandle_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileExists(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FilePersisted(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileSize(void *, const char *);
+extern int64 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileTimestamp(void *, const char *);
+extern ERemoteStoragePlatform cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetSyncPlatforms(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileCount(void *);
+extern const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileNameAndSize(void *, int, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetQuota(void *, int32 *, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_IsCloudEnabledForAccount(void *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_IsCloudEnabledForApp(void *);
+extern void cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SetCloudEnabledForApp(void *, bool);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UGCDownload(void *, UGCHandle_t, uint32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetUGCDownloadProgress(void *, UGCHandle_t, int32 *, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetUGCDetails(void *, UGCHandle_t, AppId_t *, char **, int32 *, CSteamID *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UGCRead(void *, UGCHandle_t, void *, int32, uint32, EUGCReadAction);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetCachedUGCCount(void *);
+extern UGCHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetCachedUGCHandle(void *, int32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_PublishWorkshopFile(void *, const char *, const char *, AppId_t, const char *, const char *, ERemoteStoragePublishedFileVisibility, SteamParamStringArray_t *, EWorkshopFileType);
+extern PublishedFileUpdateHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_CreatePublishedFileUpdateRequest(void *, PublishedFileId_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileFile(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFilePreviewFile(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileTitle(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileDescription(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileVisibility(void *, PublishedFileUpdateHandle_t, ERemoteStoragePublishedFileVisibility);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileTags(void *, PublishedFileUpdateHandle_t, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_CommitPublishedFileUpdate(void *, PublishedFileUpdateHandle_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetPublishedFileDetails(void *, PublishedFileId_t, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_DeletePublishedFile(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumerateUserPublishedFiles(void *, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SubscribePublishedFile(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumerateUserSubscribedFiles(void *, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UnsubscribePublishedFile(void *, PublishedFileId_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileSetChangeDescription(void *, PublishedFileUpdateHandle_t, const char *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetPublishedItemVoteDetails(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdateUserPublishedItemVote(void *, PublishedFileId_t, bool);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetUserPublishedItemVoteDetails(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumerateUserSharedWorkshopFiles(void *, CSteamID, uint32, SteamParamStringArray_t *, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_PublishVideo(void *, EWorkshopVideoProvider, const char *, const char *, const char *, AppId_t, const char *, const char *, ERemoteStoragePublishedFileVisibility, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SetUserPublishedFileAction(void *, PublishedFileId_t, EWorkshopFileAction);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumeratePublishedFilesByUserAction(void *, EWorkshopFileAction, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumeratePublishedWorkshopFiles(void *, EWorkshopEnumerationType, uint32, uint32, uint32, SteamParamStringArray_t *, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UGCDownloadToLocation(void *, UGCHandle_t, const char *, uint32);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013.cpp b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013.cpp
new file mode 100644
index 00000000..b45cffd1
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013.cpp
@@ -0,0 +1,285 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_137/steam_api.h"
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWrite(void *linux_side, const char * pchFile, const void * pvData, int32 cubData)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWrite((const char *)pchFile, (const void *)pvData, (int32)cubData);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileRead(void *linux_side, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileRead((const char *)pchFile, (void *)pvData, (int32)cubDataToRead);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteAsync(void *linux_side, const char * pchFile, const void * pvData, uint32 cubData)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteAsync((const char *)pchFile, (const void *)pvData, (uint32)cubData);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileReadAsync(void *linux_side, const char * pchFile, uint32 nOffset, uint32 cubToRead)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileReadAsync((const char *)pchFile, (uint32)nOffset, (uint32)cubToRead);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileReadAsyncComplete(void *linux_side, SteamAPICall_t hReadCall, void * pvBuffer, uint32 cubToRead)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileReadAsyncComplete((SteamAPICall_t)hReadCall, (void *)pvBuffer, (uint32)cubToRead);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileForget(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileForget((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileDelete(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileDelete((const char *)pchFile);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileShare(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileShare((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SetSyncPlatforms(void *linux_side, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SetSyncPlatforms((const char *)pchFile, (ERemoteStoragePlatform)eRemoteStoragePlatform);
+}
+
+UGCFileWriteStreamHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamOpen(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamOpen((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamWriteChunk(void *linux_side, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamWriteChunk((UGCFileWriteStreamHandle_t)writeHandle, (const void *)pvData, (int32)cubData);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamClose(void *linux_side, UGCFileWriteStreamHandle_t writeHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamClose((UGCFileWriteStreamHandle_t)writeHandle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamCancel(void *linux_side, UGCFileWriteStreamHandle_t writeHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamCancel((UGCFileWriteStreamHandle_t)writeHandle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileExists(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileExists((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FilePersisted(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FilePersisted((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileSize(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileSize((const char *)pchFile);
+}
+
+int64 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileTimestamp(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileTimestamp((const char *)pchFile);
+}
+
+ERemoteStoragePlatform cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetSyncPlatforms(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetSyncPlatforms((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileCount();
+}
+
+const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileNameAndSize(void *linux_side, int iFile, int32 * pnFileSizeInBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileNameAndSize((int)iFile, (int32 *)pnFileSizeInBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetQuota(void *linux_side, int32 * pnTotalBytes, int32 * puAvailableBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetQuota((int32 *)pnTotalBytes, (int32 *)puAvailableBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_IsCloudEnabledForAccount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->IsCloudEnabledForAccount();
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_IsCloudEnabledForApp(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->IsCloudEnabledForApp();
+}
+
+void cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SetCloudEnabledForApp(void *linux_side, bool bEnabled)
+{
+ ((ISteamRemoteStorage*)linux_side)->SetCloudEnabledForApp((bool)bEnabled);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UGCDownload(void *linux_side, UGCHandle_t hContent, uint32 unPriority)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCDownload((UGCHandle_t)hContent, (uint32)unPriority);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetUGCDownloadProgress(void *linux_side, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUGCDownloadProgress((UGCHandle_t)hContent, (int32 *)pnBytesDownloaded, (int32 *)pnBytesExpected);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetUGCDetails(void *linux_side, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, CSteamID * pSteamIDOwner)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUGCDetails((UGCHandle_t)hContent, (AppId_t *)pnAppID, (char **)ppchName, (int32 *)pnFileSizeInBytes, (CSteamID *)pSteamIDOwner);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UGCRead(void *linux_side, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCRead((UGCHandle_t)hContent, (void *)pvData, (int32)cubDataToRead, (uint32)cOffset, (EUGCReadAction)eAction);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetCachedUGCCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetCachedUGCCount();
+}
+
+UGCHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetCachedUGCHandle(void *linux_side, int32 iCachedContent)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetCachedUGCHandle((int32)iCachedContent);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_PublishWorkshopFile(void *linux_side, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType)
+{
+ return ((ISteamRemoteStorage*)linux_side)->PublishWorkshopFile((const char *)pchFile, (const char *)pchPreviewFile, (AppId_t)nConsumerAppId, (const char *)pchTitle, (const char *)pchDescription, (ERemoteStoragePublishedFileVisibility)eVisibility, (SteamParamStringArray_t *)pTags, (EWorkshopFileType)eWorkshopFileType);
+}
+
+PublishedFileUpdateHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_CreatePublishedFileUpdateRequest(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->CreatePublishedFileUpdateRequest((PublishedFileId_t)unPublishedFileId);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileFile(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileFile((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFilePreviewFile(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFilePreviewFile((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchPreviewFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileTitle(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileTitle((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchTitle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileDescription(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileDescription((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchDescription);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileVisibility(void *linux_side, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileVisibility((PublishedFileUpdateHandle_t)updateHandle, (ERemoteStoragePublishedFileVisibility)eVisibility);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileTags(void *linux_side, PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t * pTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileTags((PublishedFileUpdateHandle_t)updateHandle, (SteamParamStringArray_t *)pTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_CommitPublishedFileUpdate(void *linux_side, PublishedFileUpdateHandle_t updateHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->CommitPublishedFileUpdate((PublishedFileUpdateHandle_t)updateHandle);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetPublishedFileDetails(void *linux_side, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetPublishedFileDetails((PublishedFileId_t)unPublishedFileId, (uint32)unMaxSecondsOld);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_DeletePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->DeletePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumerateUserPublishedFiles(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserPublishedFiles((uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SubscribePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SubscribePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumerateUserSubscribedFiles(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserSubscribedFiles((uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UnsubscribePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UnsubscribePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileSetChangeDescription(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileSetChangeDescription((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchChangeDescription);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetPublishedItemVoteDetails(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetPublishedItemVoteDetails((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdateUserPublishedItemVote(void *linux_side, PublishedFileId_t unPublishedFileId, bool bVoteUp)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdateUserPublishedItemVote((PublishedFileId_t)unPublishedFileId, (bool)bVoteUp);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetUserPublishedItemVoteDetails(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUserPublishedItemVoteDetails((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumerateUserSharedWorkshopFiles(void *linux_side, CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t * pRequiredTags, SteamParamStringArray_t * pExcludedTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserSharedWorkshopFiles((CSteamID)steamId, (uint32)unStartIndex, (SteamParamStringArray_t *)pRequiredTags, (SteamParamStringArray_t *)pExcludedTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_PublishVideo(void *linux_side, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->PublishVideo((EWorkshopVideoProvider)eVideoProvider, (const char *)pchVideoAccount, (const char *)pchVideoIdentifier, (const char *)pchPreviewFile, (AppId_t)nConsumerAppId, (const char *)pchTitle, (const char *)pchDescription, (ERemoteStoragePublishedFileVisibility)eVisibility, (SteamParamStringArray_t *)pTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SetUserPublishedFileAction(void *linux_side, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SetUserPublishedFileAction((PublishedFileId_t)unPublishedFileId, (EWorkshopFileAction)eAction);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumeratePublishedFilesByUserAction(void *linux_side, EWorkshopFileAction eAction, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumeratePublishedFilesByUserAction((EWorkshopFileAction)eAction, (uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumeratePublishedWorkshopFiles(void *linux_side, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t * pTags, SteamParamStringArray_t * pUserTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumeratePublishedWorkshopFiles((EWorkshopEnumerationType)eEnumerationType, (uint32)unStartIndex, (uint32)unCount, (uint32)unDays, (SteamParamStringArray_t *)pTags, (SteamParamStringArray_t *)pUserTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UGCDownloadToLocation(void *linux_side, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCDownloadToLocation((UGCHandle_t)hContent, (const char *)pchLocation, (uint32)unPriority);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013.h b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013.h
new file mode 100644
index 00000000..d5d43a87
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013.h
@@ -0,0 +1,61 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWrite(void *, const char *, const void *, int32);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileRead(void *, const char *, void *, int32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteAsync(void *, const char *, const void *, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileReadAsync(void *, const char *, uint32, uint32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileReadAsyncComplete(void *, SteamAPICall_t, void *, uint32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileForget(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileDelete(void *, const char *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileShare(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SetSyncPlatforms(void *, const char *, ERemoteStoragePlatform);
+extern UGCFileWriteStreamHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamOpen(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamWriteChunk(void *, UGCFileWriteStreamHandle_t, const void *, int32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamClose(void *, UGCFileWriteStreamHandle_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamCancel(void *, UGCFileWriteStreamHandle_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileExists(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FilePersisted(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileSize(void *, const char *);
+extern int64 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileTimestamp(void *, const char *);
+extern ERemoteStoragePlatform cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetSyncPlatforms(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileCount(void *);
+extern const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileNameAndSize(void *, int, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetQuota(void *, int32 *, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_IsCloudEnabledForAccount(void *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_IsCloudEnabledForApp(void *);
+extern void cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SetCloudEnabledForApp(void *, bool);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UGCDownload(void *, UGCHandle_t, uint32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetUGCDownloadProgress(void *, UGCHandle_t, int32 *, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetUGCDetails(void *, UGCHandle_t, AppId_t *, char **, int32 *, CSteamID *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UGCRead(void *, UGCHandle_t, void *, int32, uint32, EUGCReadAction);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetCachedUGCCount(void *);
+extern UGCHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetCachedUGCHandle(void *, int32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_PublishWorkshopFile(void *, const char *, const char *, AppId_t, const char *, const char *, ERemoteStoragePublishedFileVisibility, SteamParamStringArray_t *, EWorkshopFileType);
+extern PublishedFileUpdateHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_CreatePublishedFileUpdateRequest(void *, PublishedFileId_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileFile(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFilePreviewFile(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileTitle(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileDescription(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileVisibility(void *, PublishedFileUpdateHandle_t, ERemoteStoragePublishedFileVisibility);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileTags(void *, PublishedFileUpdateHandle_t, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_CommitPublishedFileUpdate(void *, PublishedFileUpdateHandle_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetPublishedFileDetails(void *, PublishedFileId_t, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_DeletePublishedFile(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumerateUserPublishedFiles(void *, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SubscribePublishedFile(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumerateUserSubscribedFiles(void *, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UnsubscribePublishedFile(void *, PublishedFileId_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileSetChangeDescription(void *, PublishedFileUpdateHandle_t, const char *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetPublishedItemVoteDetails(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdateUserPublishedItemVote(void *, PublishedFileId_t, bool);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetUserPublishedItemVoteDetails(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumerateUserSharedWorkshopFiles(void *, CSteamID, uint32, SteamParamStringArray_t *, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_PublishVideo(void *, EWorkshopVideoProvider, const char *, const char *, const char *, AppId_t, const char *, const char *, ERemoteStoragePublishedFileVisibility, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SetUserPublishedFileAction(void *, PublishedFileId_t, EWorkshopFileAction);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumeratePublishedFilesByUserAction(void *, EWorkshopFileAction, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumeratePublishedWorkshopFiles(void *, EWorkshopEnumerationType, uint32, uint32, uint32, SteamParamStringArray_t *, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UGCDownloadToLocation(void *, UGCHandle_t, const char *, uint32);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014.cpp b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014.cpp
new file mode 100644
index 00000000..f1abad61
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014.cpp
@@ -0,0 +1,285 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWrite(void *linux_side, const char * pchFile, const void * pvData, int32 cubData)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWrite((const char *)pchFile, (const void *)pvData, (int32)cubData);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileRead(void *linux_side, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileRead((const char *)pchFile, (void *)pvData, (int32)cubDataToRead);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteAsync(void *linux_side, const char * pchFile, const void * pvData, uint32 cubData)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteAsync((const char *)pchFile, (const void *)pvData, (uint32)cubData);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileReadAsync(void *linux_side, const char * pchFile, uint32 nOffset, uint32 cubToRead)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileReadAsync((const char *)pchFile, (uint32)nOffset, (uint32)cubToRead);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileReadAsyncComplete(void *linux_side, SteamAPICall_t hReadCall, void * pvBuffer, uint32 cubToRead)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileReadAsyncComplete((SteamAPICall_t)hReadCall, (void *)pvBuffer, (uint32)cubToRead);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileForget(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileForget((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileDelete(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileDelete((const char *)pchFile);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileShare(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileShare((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SetSyncPlatforms(void *linux_side, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SetSyncPlatforms((const char *)pchFile, (ERemoteStoragePlatform)eRemoteStoragePlatform);
+}
+
+UGCFileWriteStreamHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamOpen(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamOpen((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamWriteChunk(void *linux_side, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamWriteChunk((UGCFileWriteStreamHandle_t)writeHandle, (const void *)pvData, (int32)cubData);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamClose(void *linux_side, UGCFileWriteStreamHandle_t writeHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamClose((UGCFileWriteStreamHandle_t)writeHandle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamCancel(void *linux_side, UGCFileWriteStreamHandle_t writeHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileWriteStreamCancel((UGCFileWriteStreamHandle_t)writeHandle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileExists(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FileExists((const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FilePersisted(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->FilePersisted((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileSize(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileSize((const char *)pchFile);
+}
+
+int64 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileTimestamp(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileTimestamp((const char *)pchFile);
+}
+
+ERemoteStoragePlatform cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetSyncPlatforms(void *linux_side, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetSyncPlatforms((const char *)pchFile);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileCount();
+}
+
+const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileNameAndSize(void *linux_side, int iFile, int32 * pnFileSizeInBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetFileNameAndSize((int)iFile, (int32 *)pnFileSizeInBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetQuota(void *linux_side, uint64 * pnTotalBytes, uint64 * puAvailableBytes)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetQuota((uint64 *)pnTotalBytes, (uint64 *)puAvailableBytes);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_IsCloudEnabledForAccount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->IsCloudEnabledForAccount();
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_IsCloudEnabledForApp(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->IsCloudEnabledForApp();
+}
+
+void cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SetCloudEnabledForApp(void *linux_side, bool bEnabled)
+{
+ ((ISteamRemoteStorage*)linux_side)->SetCloudEnabledForApp((bool)bEnabled);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UGCDownload(void *linux_side, UGCHandle_t hContent, uint32 unPriority)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCDownload((UGCHandle_t)hContent, (uint32)unPriority);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetUGCDownloadProgress(void *linux_side, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUGCDownloadProgress((UGCHandle_t)hContent, (int32 *)pnBytesDownloaded, (int32 *)pnBytesExpected);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetUGCDetails(void *linux_side, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, CSteamID * pSteamIDOwner)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUGCDetails((UGCHandle_t)hContent, (AppId_t *)pnAppID, (char **)ppchName, (int32 *)pnFileSizeInBytes, (CSteamID *)pSteamIDOwner);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UGCRead(void *linux_side, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCRead((UGCHandle_t)hContent, (void *)pvData, (int32)cubDataToRead, (uint32)cOffset, (EUGCReadAction)eAction);
+}
+
+int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetCachedUGCCount(void *linux_side)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetCachedUGCCount();
+}
+
+UGCHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetCachedUGCHandle(void *linux_side, int32 iCachedContent)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetCachedUGCHandle((int32)iCachedContent);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_PublishWorkshopFile(void *linux_side, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType)
+{
+ return ((ISteamRemoteStorage*)linux_side)->PublishWorkshopFile((const char *)pchFile, (const char *)pchPreviewFile, (AppId_t)nConsumerAppId, (const char *)pchTitle, (const char *)pchDescription, (ERemoteStoragePublishedFileVisibility)eVisibility, (SteamParamStringArray_t *)pTags, (EWorkshopFileType)eWorkshopFileType);
+}
+
+PublishedFileUpdateHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_CreatePublishedFileUpdateRequest(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->CreatePublishedFileUpdateRequest((PublishedFileId_t)unPublishedFileId);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileFile(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileFile((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFilePreviewFile(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFilePreviewFile((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchPreviewFile);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileTitle(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileTitle((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchTitle);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileDescription(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileDescription((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchDescription);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileVisibility(void *linux_side, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileVisibility((PublishedFileUpdateHandle_t)updateHandle, (ERemoteStoragePublishedFileVisibility)eVisibility);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileTags(void *linux_side, PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t * pTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileTags((PublishedFileUpdateHandle_t)updateHandle, (SteamParamStringArray_t *)pTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_CommitPublishedFileUpdate(void *linux_side, PublishedFileUpdateHandle_t updateHandle)
+{
+ return ((ISteamRemoteStorage*)linux_side)->CommitPublishedFileUpdate((PublishedFileUpdateHandle_t)updateHandle);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetPublishedFileDetails(void *linux_side, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetPublishedFileDetails((PublishedFileId_t)unPublishedFileId, (uint32)unMaxSecondsOld);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_DeletePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->DeletePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumerateUserPublishedFiles(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserPublishedFiles((uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SubscribePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SubscribePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumerateUserSubscribedFiles(void *linux_side, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserSubscribedFiles((uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UnsubscribePublishedFile(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UnsubscribePublishedFile((PublishedFileId_t)unPublishedFileId);
+}
+
+bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileSetChangeDescription(void *linux_side, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdatePublishedFileSetChangeDescription((PublishedFileUpdateHandle_t)updateHandle, (const char *)pchChangeDescription);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetPublishedItemVoteDetails(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetPublishedItemVoteDetails((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdateUserPublishedItemVote(void *linux_side, PublishedFileId_t unPublishedFileId, bool bVoteUp)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UpdateUserPublishedItemVote((PublishedFileId_t)unPublishedFileId, (bool)bVoteUp);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetUserPublishedItemVoteDetails(void *linux_side, PublishedFileId_t unPublishedFileId)
+{
+ return ((ISteamRemoteStorage*)linux_side)->GetUserPublishedItemVoteDetails((PublishedFileId_t)unPublishedFileId);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumerateUserSharedWorkshopFiles(void *linux_side, CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t * pRequiredTags, SteamParamStringArray_t * pExcludedTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumerateUserSharedWorkshopFiles((CSteamID)steamId, (uint32)unStartIndex, (SteamParamStringArray_t *)pRequiredTags, (SteamParamStringArray_t *)pExcludedTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_PublishVideo(void *linux_side, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->PublishVideo((EWorkshopVideoProvider)eVideoProvider, (const char *)pchVideoAccount, (const char *)pchVideoIdentifier, (const char *)pchPreviewFile, (AppId_t)nConsumerAppId, (const char *)pchTitle, (const char *)pchDescription, (ERemoteStoragePublishedFileVisibility)eVisibility, (SteamParamStringArray_t *)pTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SetUserPublishedFileAction(void *linux_side, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction)
+{
+ return ((ISteamRemoteStorage*)linux_side)->SetUserPublishedFileAction((PublishedFileId_t)unPublishedFileId, (EWorkshopFileAction)eAction);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumeratePublishedFilesByUserAction(void *linux_side, EWorkshopFileAction eAction, uint32 unStartIndex)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumeratePublishedFilesByUserAction((EWorkshopFileAction)eAction, (uint32)unStartIndex);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumeratePublishedWorkshopFiles(void *linux_side, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t * pTags, SteamParamStringArray_t * pUserTags)
+{
+ return ((ISteamRemoteStorage*)linux_side)->EnumeratePublishedWorkshopFiles((EWorkshopEnumerationType)eEnumerationType, (uint32)unStartIndex, (uint32)unCount, (uint32)unDays, (SteamParamStringArray_t *)pTags, (SteamParamStringArray_t *)pUserTags);
+}
+
+SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UGCDownloadToLocation(void *linux_side, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority)
+{
+ return ((ISteamRemoteStorage*)linux_side)->UGCDownloadToLocation((UGCHandle_t)hContent, (const char *)pchLocation, (uint32)unPriority);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014.h b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014.h
new file mode 100644
index 00000000..2a80f8b8
--- /dev/null
+++ b/lsteamclient/cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014.h
@@ -0,0 +1,61 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWrite(void *, const char *, const void *, int32);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileRead(void *, const char *, void *, int32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteAsync(void *, const char *, const void *, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileReadAsync(void *, const char *, uint32, uint32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileReadAsyncComplete(void *, SteamAPICall_t, void *, uint32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileForget(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileDelete(void *, const char *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileShare(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SetSyncPlatforms(void *, const char *, ERemoteStoragePlatform);
+extern UGCFileWriteStreamHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamOpen(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamWriteChunk(void *, UGCFileWriteStreamHandle_t, const void *, int32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamClose(void *, UGCFileWriteStreamHandle_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamCancel(void *, UGCFileWriteStreamHandle_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileExists(void *, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FilePersisted(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileSize(void *, const char *);
+extern int64 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileTimestamp(void *, const char *);
+extern ERemoteStoragePlatform cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetSyncPlatforms(void *, const char *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileCount(void *);
+extern const char * cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileNameAndSize(void *, int, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetQuota(void *, uint64 *, uint64 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_IsCloudEnabledForAccount(void *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_IsCloudEnabledForApp(void *);
+extern void cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SetCloudEnabledForApp(void *, bool);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UGCDownload(void *, UGCHandle_t, uint32);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetUGCDownloadProgress(void *, UGCHandle_t, int32 *, int32 *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetUGCDetails(void *, UGCHandle_t, AppId_t *, char **, int32 *, CSteamID *);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UGCRead(void *, UGCHandle_t, void *, int32, uint32, EUGCReadAction);
+extern int32 cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetCachedUGCCount(void *);
+extern UGCHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetCachedUGCHandle(void *, int32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_PublishWorkshopFile(void *, const char *, const char *, AppId_t, const char *, const char *, ERemoteStoragePublishedFileVisibility, SteamParamStringArray_t *, EWorkshopFileType);
+extern PublishedFileUpdateHandle_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_CreatePublishedFileUpdateRequest(void *, PublishedFileId_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileFile(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFilePreviewFile(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileTitle(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileDescription(void *, PublishedFileUpdateHandle_t, const char *);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileVisibility(void *, PublishedFileUpdateHandle_t, ERemoteStoragePublishedFileVisibility);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileTags(void *, PublishedFileUpdateHandle_t, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_CommitPublishedFileUpdate(void *, PublishedFileUpdateHandle_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetPublishedFileDetails(void *, PublishedFileId_t, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_DeletePublishedFile(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumerateUserPublishedFiles(void *, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SubscribePublishedFile(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumerateUserSubscribedFiles(void *, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UnsubscribePublishedFile(void *, PublishedFileId_t);
+extern bool cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileSetChangeDescription(void *, PublishedFileUpdateHandle_t, const char *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetPublishedItemVoteDetails(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdateUserPublishedItemVote(void *, PublishedFileId_t, bool);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetUserPublishedItemVoteDetails(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumerateUserSharedWorkshopFiles(void *, CSteamID, uint32, SteamParamStringArray_t *, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_PublishVideo(void *, EWorkshopVideoProvider, const char *, const char *, const char *, AppId_t, const char *, const char *, ERemoteStoragePublishedFileVisibility, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SetUserPublishedFileAction(void *, PublishedFileId_t, EWorkshopFileAction);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumeratePublishedFilesByUserAction(void *, EWorkshopFileAction, uint32);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumeratePublishedWorkshopFiles(void *, EWorkshopEnumerationType, uint32, uint32, uint32, SteamParamStringArray_t *, SteamParamStringArray_t *);
+extern SteamAPICall_t cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UGCDownloadToLocation(void *, UGCHandle_t, const char *, uint32);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001.cpp b/lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001.cpp
new file mode 100644
index 00000000..4d70ff91
--- /dev/null
+++ b/lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001.cpp
@@ -0,0 +1,40 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_122/steam_api.h"
+#include "cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+ScreenshotHandle cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_WriteScreenshot(void *linux_side, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight)
+{
+ return ((ISteamScreenshots*)linux_side)->WriteScreenshot((void *)pubRGB, (uint32)cubRGB, (int)nWidth, (int)nHeight);
+}
+
+ScreenshotHandle cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_AddScreenshotToLibrary(void *linux_side, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight)
+{
+ return ((ISteamScreenshots*)linux_side)->AddScreenshotToLibrary((const char *)pchFilename, (const char *)pchThumbnailFilename, (int)nWidth, (int)nHeight);
+}
+
+void cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_TriggerScreenshot(void *linux_side)
+{
+ ((ISteamScreenshots*)linux_side)->TriggerScreenshot();
+}
+
+void cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_HookScreenshots(void *linux_side, bool bHook)
+{
+ ((ISteamScreenshots*)linux_side)->HookScreenshots((bool)bHook);
+}
+
+bool cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_SetLocation(void *linux_side, ScreenshotHandle hScreenshot, const char * pchLocation)
+{
+ return ((ISteamScreenshots*)linux_side)->SetLocation((ScreenshotHandle)hScreenshot, (const char *)pchLocation);
+}
+
+bool cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_TagUser(void *linux_side, ScreenshotHandle hScreenshot, CSteamID steamID)
+{
+ return ((ISteamScreenshots*)linux_side)->TagUser((ScreenshotHandle)hScreenshot, (CSteamID)steamID);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001.h b/lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001.h
new file mode 100644
index 00000000..2c85eb18
--- /dev/null
+++ b/lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001.h
@@ -0,0 +1,12 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern ScreenshotHandle cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_WriteScreenshot(void *, void *, uint32, int, int);
+extern ScreenshotHandle cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_AddScreenshotToLibrary(void *, const char *, const char *, int, int);
+extern void cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_TriggerScreenshot(void *);
+extern void cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_HookScreenshots(void *, bool);
+extern bool cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_SetLocation(void *, ScreenshotHandle, const char *);
+extern bool cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_TagUser(void *, ScreenshotHandle, CSteamID);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002.cpp b/lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002.cpp
new file mode 100644
index 00000000..2a800cf8
--- /dev/null
+++ b/lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002.cpp
@@ -0,0 +1,45 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_137/steam_api.h"
+#include "cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+ScreenshotHandle cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_WriteScreenshot(void *linux_side, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight)
+{
+ return ((ISteamScreenshots*)linux_side)->WriteScreenshot((void *)pubRGB, (uint32)cubRGB, (int)nWidth, (int)nHeight);
+}
+
+ScreenshotHandle cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_AddScreenshotToLibrary(void *linux_side, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight)
+{
+ return ((ISteamScreenshots*)linux_side)->AddScreenshotToLibrary((const char *)pchFilename, (const char *)pchThumbnailFilename, (int)nWidth, (int)nHeight);
+}
+
+void cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_TriggerScreenshot(void *linux_side)
+{
+ ((ISteamScreenshots*)linux_side)->TriggerScreenshot();
+}
+
+void cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_HookScreenshots(void *linux_side, bool bHook)
+{
+ ((ISteamScreenshots*)linux_side)->HookScreenshots((bool)bHook);
+}
+
+bool cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_SetLocation(void *linux_side, ScreenshotHandle hScreenshot, const char * pchLocation)
+{
+ return ((ISteamScreenshots*)linux_side)->SetLocation((ScreenshotHandle)hScreenshot, (const char *)pchLocation);
+}
+
+bool cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_TagUser(void *linux_side, ScreenshotHandle hScreenshot, CSteamID steamID)
+{
+ return ((ISteamScreenshots*)linux_side)->TagUser((ScreenshotHandle)hScreenshot, (CSteamID)steamID);
+}
+
+bool cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_TagPublishedFile(void *linux_side, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID)
+{
+ return ((ISteamScreenshots*)linux_side)->TagPublishedFile((ScreenshotHandle)hScreenshot, (PublishedFileId_t)unPublishedFileID);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002.h b/lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002.h
new file mode 100644
index 00000000..999684c3
--- /dev/null
+++ b/lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002.h
@@ -0,0 +1,13 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern ScreenshotHandle cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_WriteScreenshot(void *, void *, uint32, int, int);
+extern ScreenshotHandle cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_AddScreenshotToLibrary(void *, const char *, const char *, int, int);
+extern void cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_TriggerScreenshot(void *);
+extern void cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_HookScreenshots(void *, bool);
+extern bool cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_SetLocation(void *, ScreenshotHandle, const char *);
+extern bool cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_TagUser(void *, ScreenshotHandle, CSteamID);
+extern bool cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_TagPublishedFile(void *, ScreenshotHandle, PublishedFileId_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003.cpp b/lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003.cpp
new file mode 100644
index 00000000..67548c1c
--- /dev/null
+++ b/lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003.cpp
@@ -0,0 +1,55 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+ScreenshotHandle cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_WriteScreenshot(void *linux_side, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight)
+{
+ return ((ISteamScreenshots*)linux_side)->WriteScreenshot((void *)pubRGB, (uint32)cubRGB, (int)nWidth, (int)nHeight);
+}
+
+ScreenshotHandle cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_AddScreenshotToLibrary(void *linux_side, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight)
+{
+ return ((ISteamScreenshots*)linux_side)->AddScreenshotToLibrary((const char *)pchFilename, (const char *)pchThumbnailFilename, (int)nWidth, (int)nHeight);
+}
+
+void cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_TriggerScreenshot(void *linux_side)
+{
+ ((ISteamScreenshots*)linux_side)->TriggerScreenshot();
+}
+
+void cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_HookScreenshots(void *linux_side, bool bHook)
+{
+ ((ISteamScreenshots*)linux_side)->HookScreenshots((bool)bHook);
+}
+
+bool cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_SetLocation(void *linux_side, ScreenshotHandle hScreenshot, const char * pchLocation)
+{
+ return ((ISteamScreenshots*)linux_side)->SetLocation((ScreenshotHandle)hScreenshot, (const char *)pchLocation);
+}
+
+bool cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_TagUser(void *linux_side, ScreenshotHandle hScreenshot, CSteamID steamID)
+{
+ return ((ISteamScreenshots*)linux_side)->TagUser((ScreenshotHandle)hScreenshot, (CSteamID)steamID);
+}
+
+bool cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_TagPublishedFile(void *linux_side, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID)
+{
+ return ((ISteamScreenshots*)linux_side)->TagPublishedFile((ScreenshotHandle)hScreenshot, (PublishedFileId_t)unPublishedFileID);
+}
+
+bool cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_IsScreenshotsHooked(void *linux_side)
+{
+ return ((ISteamScreenshots*)linux_side)->IsScreenshotsHooked();
+}
+
+ScreenshotHandle cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_AddVRScreenshotToLibrary(void *linux_side, EVRScreenshotType eType, const char * pchFilename, const char * pchVRFilename)
+{
+ return ((ISteamScreenshots*)linux_side)->AddVRScreenshotToLibrary((EVRScreenshotType)eType, (const char *)pchFilename, (const char *)pchVRFilename);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003.h b/lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003.h
new file mode 100644
index 00000000..7bfb193c
--- /dev/null
+++ b/lsteamclient/cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003.h
@@ -0,0 +1,15 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern ScreenshotHandle cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_WriteScreenshot(void *, void *, uint32, int, int);
+extern ScreenshotHandle cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_AddScreenshotToLibrary(void *, const char *, const char *, int, int);
+extern void cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_TriggerScreenshot(void *);
+extern void cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_HookScreenshots(void *, bool);
+extern bool cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_SetLocation(void *, ScreenshotHandle, const char *);
+extern bool cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_TagUser(void *, ScreenshotHandle, CSteamID);
+extern bool cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_TagPublishedFile(void *, ScreenshotHandle, PublishedFileId_t);
+extern bool cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_IsScreenshotsHooked(void *);
+extern ScreenshotHandle cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_AddVRScreenshotToLibrary(void *, EVRScreenshotType, const char *, const char *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION001.cpp b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION001.cpp
new file mode 100644
index 00000000..ecfefa19
--- /dev/null
+++ b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION001.cpp
@@ -0,0 +1,80 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_128/steam_api.h"
+#include "cppISteamUGC_STEAMUGC_INTERFACE_VERSION001.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_CreateQueryUserUGCRequest(void *linux_side, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryUserUGCRequest((AccountID_t)unAccountID, (EUserUGCList)eListType, (EUGCMatchingUGCType)eMatchingUGCType, (EUserUGCListSortOrder)eSortOrder, (AppId_t)nCreatorAppID, (AppId_t)nConsumerAppID, (uint32)unPage);
+}
+
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_CreateQueryAllUGCRequest(void *linux_side, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryAllUGCRequest((EUGCQuery)eQueryType, (EUGCMatchingUGCType)eMatchingeMatchingUGCTypeFileType, (AppId_t)nCreatorAppID, (AppId_t)nConsumerAppID, (uint32)unPage);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SendQueryUGCRequest(void *linux_side, UGCQueryHandle_t handle)
+{
+ return ((ISteamUGC*)linux_side)->SendQueryUGCRequest((UGCQueryHandle_t)handle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_GetQueryUGCResult(void *linux_side, UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t * pDetails)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCResult((UGCQueryHandle_t)handle, (uint32)index, (SteamUGCDetails_t *)pDetails);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_ReleaseQueryUGCRequest(void *linux_side, UGCQueryHandle_t handle)
+{
+ return ((ISteamUGC*)linux_side)->ReleaseQueryUGCRequest((UGCQueryHandle_t)handle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_AddRequiredTag(void *linux_side, UGCQueryHandle_t handle, const char * pTagName)
+{
+ return ((ISteamUGC*)linux_side)->AddRequiredTag((UGCQueryHandle_t)handle, (const char *)pTagName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_AddExcludedTag(void *linux_side, UGCQueryHandle_t handle, const char * pTagName)
+{
+ return ((ISteamUGC*)linux_side)->AddExcludedTag((UGCQueryHandle_t)handle, (const char *)pTagName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetReturnLongDescription(void *linux_side, UGCQueryHandle_t handle, bool bReturnLongDescription)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnLongDescription((UGCQueryHandle_t)handle, (bool)bReturnLongDescription);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetReturnTotalOnly(void *linux_side, UGCQueryHandle_t handle, bool bReturnTotalOnly)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnTotalOnly((UGCQueryHandle_t)handle, (bool)bReturnTotalOnly);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetCloudFileNameFilter(void *linux_side, UGCQueryHandle_t handle, const char * pMatchCloudFileName)
+{
+ return ((ISteamUGC*)linux_side)->SetCloudFileNameFilter((UGCQueryHandle_t)handle, (const char *)pMatchCloudFileName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetMatchAnyTag(void *linux_side, UGCQueryHandle_t handle, bool bMatchAnyTag)
+{
+ return ((ISteamUGC*)linux_side)->SetMatchAnyTag((UGCQueryHandle_t)handle, (bool)bMatchAnyTag);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetSearchText(void *linux_side, UGCQueryHandle_t handle, const char * pSearchText)
+{
+ return ((ISteamUGC*)linux_side)->SetSearchText((UGCQueryHandle_t)handle, (const char *)pSearchText);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetRankedByTrendDays(void *linux_side, UGCQueryHandle_t handle, uint32 unDays)
+{
+ return ((ISteamUGC*)linux_side)->SetRankedByTrendDays((UGCQueryHandle_t)handle, (uint32)unDays);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_RequestUGCDetails(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->RequestUGCDetails((PublishedFileId_t)nPublishedFileID);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION001.h b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION001.h
new file mode 100644
index 00000000..2f69e72a
--- /dev/null
+++ b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION001.h
@@ -0,0 +1,20 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_CreateQueryUserUGCRequest(void *, AccountID_t, EUserUGCList, EUGCMatchingUGCType, EUserUGCListSortOrder, AppId_t, AppId_t, uint32);
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_CreateQueryAllUGCRequest(void *, EUGCQuery, EUGCMatchingUGCType, AppId_t, AppId_t, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SendQueryUGCRequest(void *, UGCQueryHandle_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_GetQueryUGCResult(void *, UGCQueryHandle_t, uint32, SteamUGCDetails_t *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_ReleaseQueryUGCRequest(void *, UGCQueryHandle_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_AddRequiredTag(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_AddExcludedTag(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetReturnLongDescription(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetReturnTotalOnly(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetCloudFileNameFilter(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetMatchAnyTag(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetSearchText(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetRankedByTrendDays(void *, UGCQueryHandle_t, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_RequestUGCDetails(void *, PublishedFileId_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION002.cpp b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION002.cpp
new file mode 100644
index 00000000..50c0fb9f
--- /dev/null
+++ b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION002.cpp
@@ -0,0 +1,165 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_130/steam_api.h"
+#include "cppISteamUGC_STEAMUGC_INTERFACE_VERSION002.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_CreateQueryUserUGCRequest(void *linux_side, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryUserUGCRequest((AccountID_t)unAccountID, (EUserUGCList)eListType, (EUGCMatchingUGCType)eMatchingUGCType, (EUserUGCListSortOrder)eSortOrder, (AppId_t)nCreatorAppID, (AppId_t)nConsumerAppID, (uint32)unPage);
+}
+
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_CreateQueryAllUGCRequest(void *linux_side, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryAllUGCRequest((EUGCQuery)eQueryType, (EUGCMatchingUGCType)eMatchingeMatchingUGCTypeFileType, (AppId_t)nCreatorAppID, (AppId_t)nConsumerAppID, (uint32)unPage);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SendQueryUGCRequest(void *linux_side, UGCQueryHandle_t handle)
+{
+ return ((ISteamUGC*)linux_side)->SendQueryUGCRequest((UGCQueryHandle_t)handle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetQueryUGCResult(void *linux_side, UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t * pDetails)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCResult((UGCQueryHandle_t)handle, (uint32)index, (SteamUGCDetails_t *)pDetails);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_ReleaseQueryUGCRequest(void *linux_side, UGCQueryHandle_t handle)
+{
+ return ((ISteamUGC*)linux_side)->ReleaseQueryUGCRequest((UGCQueryHandle_t)handle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_AddRequiredTag(void *linux_side, UGCQueryHandle_t handle, const char * pTagName)
+{
+ return ((ISteamUGC*)linux_side)->AddRequiredTag((UGCQueryHandle_t)handle, (const char *)pTagName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_AddExcludedTag(void *linux_side, UGCQueryHandle_t handle, const char * pTagName)
+{
+ return ((ISteamUGC*)linux_side)->AddExcludedTag((UGCQueryHandle_t)handle, (const char *)pTagName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetReturnLongDescription(void *linux_side, UGCQueryHandle_t handle, bool bReturnLongDescription)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnLongDescription((UGCQueryHandle_t)handle, (bool)bReturnLongDescription);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetReturnTotalOnly(void *linux_side, UGCQueryHandle_t handle, bool bReturnTotalOnly)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnTotalOnly((UGCQueryHandle_t)handle, (bool)bReturnTotalOnly);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetAllowCachedResponse(void *linux_side, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds)
+{
+ return ((ISteamUGC*)linux_side)->SetAllowCachedResponse((UGCQueryHandle_t)handle, (uint32)unMaxAgeSeconds);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetCloudFileNameFilter(void *linux_side, UGCQueryHandle_t handle, const char * pMatchCloudFileName)
+{
+ return ((ISteamUGC*)linux_side)->SetCloudFileNameFilter((UGCQueryHandle_t)handle, (const char *)pMatchCloudFileName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetMatchAnyTag(void *linux_side, UGCQueryHandle_t handle, bool bMatchAnyTag)
+{
+ return ((ISteamUGC*)linux_side)->SetMatchAnyTag((UGCQueryHandle_t)handle, (bool)bMatchAnyTag);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetSearchText(void *linux_side, UGCQueryHandle_t handle, const char * pSearchText)
+{
+ return ((ISteamUGC*)linux_side)->SetSearchText((UGCQueryHandle_t)handle, (const char *)pSearchText);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetRankedByTrendDays(void *linux_side, UGCQueryHandle_t handle, uint32 unDays)
+{
+ return ((ISteamUGC*)linux_side)->SetRankedByTrendDays((UGCQueryHandle_t)handle, (uint32)unDays);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_RequestUGCDetails(void *linux_side, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds)
+{
+ return ((ISteamUGC*)linux_side)->RequestUGCDetails((PublishedFileId_t)nPublishedFileID, (uint32)unMaxAgeSeconds);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_CreateItem(void *linux_side, AppId_t nConsumerAppId, EWorkshopFileType eFileType)
+{
+ return ((ISteamUGC*)linux_side)->CreateItem((AppId_t)nConsumerAppId, (EWorkshopFileType)eFileType);
+}
+
+UGCUpdateHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_StartItemUpdate(void *linux_side, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->StartItemUpdate((AppId_t)nConsumerAppId, (PublishedFileId_t)nPublishedFileID);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemTitle(void *linux_side, UGCUpdateHandle_t handle, const char * pchTitle)
+{
+ return ((ISteamUGC*)linux_side)->SetItemTitle((UGCUpdateHandle_t)handle, (const char *)pchTitle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemDescription(void *linux_side, UGCUpdateHandle_t handle, const char * pchDescription)
+{
+ return ((ISteamUGC*)linux_side)->SetItemDescription((UGCUpdateHandle_t)handle, (const char *)pchDescription);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemVisibility(void *linux_side, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ return ((ISteamUGC*)linux_side)->SetItemVisibility((UGCUpdateHandle_t)handle, (ERemoteStoragePublishedFileVisibility)eVisibility);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemTags(void *linux_side, UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t * pTags)
+{
+ return ((ISteamUGC*)linux_side)->SetItemTags((UGCUpdateHandle_t)updateHandle, (const SteamParamStringArray_t *)pTags);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemContent(void *linux_side, UGCUpdateHandle_t handle, const char * pszContentFolder)
+{
+ return ((ISteamUGC*)linux_side)->SetItemContent((UGCUpdateHandle_t)handle, (const char *)pszContentFolder);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemPreview(void *linux_side, UGCUpdateHandle_t handle, const char * pszPreviewFile)
+{
+ return ((ISteamUGC*)linux_side)->SetItemPreview((UGCUpdateHandle_t)handle, (const char *)pszPreviewFile);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SubmitItemUpdate(void *linux_side, UGCUpdateHandle_t handle, const char * pchChangeNote)
+{
+ return ((ISteamUGC*)linux_side)->SubmitItemUpdate((UGCUpdateHandle_t)handle, (const char *)pchChangeNote);
+}
+
+EItemUpdateStatus cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetItemUpdateProgress(void *linux_side, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal)
+{
+ return ((ISteamUGC*)linux_side)->GetItemUpdateProgress((UGCUpdateHandle_t)handle, (uint64 *)punBytesProcessed, (uint64 *)punBytesTotal);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SubscribeItem(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->SubscribeItem((PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_UnsubscribeItem(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->UnsubscribeItem((PublishedFileId_t)nPublishedFileID);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetNumSubscribedItems(void *linux_side)
+{
+ return ((ISteamUGC*)linux_side)->GetNumSubscribedItems();
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetSubscribedItems(void *linux_side, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ return ((ISteamUGC*)linux_side)->GetSubscribedItems((PublishedFileId_t *)pvecPublishedFileID, (uint32)cMaxEntries);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetItemInstallInfo(void *linux_side, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize)
+{
+ return ((ISteamUGC*)linux_side)->GetItemInstallInfo((PublishedFileId_t)nPublishedFileID, (uint64 *)punSizeOnDisk, (char *)pchFolder, (uint32)cchFolderSize);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetItemUpdateInfo(void *linux_side, PublishedFileId_t nPublishedFileID, bool * pbNeedsUpdate, bool * pbIsDownloading, uint64 * punBytesDownloaded, uint64 * punBytesTotal)
+{
+ return ((ISteamUGC*)linux_side)->GetItemUpdateInfo((PublishedFileId_t)nPublishedFileID, (bool *)pbNeedsUpdate, (bool *)pbIsDownloading, (uint64 *)punBytesDownloaded, (uint64 *)punBytesTotal);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION002.h b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION002.h
new file mode 100644
index 00000000..fe2d11f5
--- /dev/null
+++ b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION002.h
@@ -0,0 +1,37 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_CreateQueryUserUGCRequest(void *, AccountID_t, EUserUGCList, EUGCMatchingUGCType, EUserUGCListSortOrder, AppId_t, AppId_t, uint32);
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_CreateQueryAllUGCRequest(void *, EUGCQuery, EUGCMatchingUGCType, AppId_t, AppId_t, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SendQueryUGCRequest(void *, UGCQueryHandle_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetQueryUGCResult(void *, UGCQueryHandle_t, uint32, SteamUGCDetails_t *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_ReleaseQueryUGCRequest(void *, UGCQueryHandle_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_AddRequiredTag(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_AddExcludedTag(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetReturnLongDescription(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetReturnTotalOnly(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetAllowCachedResponse(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetCloudFileNameFilter(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetMatchAnyTag(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetSearchText(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetRankedByTrendDays(void *, UGCQueryHandle_t, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_RequestUGCDetails(void *, PublishedFileId_t, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_CreateItem(void *, AppId_t, EWorkshopFileType);
+extern UGCUpdateHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_StartItemUpdate(void *, AppId_t, PublishedFileId_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemTitle(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemDescription(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemVisibility(void *, UGCUpdateHandle_t, ERemoteStoragePublishedFileVisibility);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemTags(void *, UGCUpdateHandle_t, const SteamParamStringArray_t *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemContent(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemPreview(void *, UGCUpdateHandle_t, const char *);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SubmitItemUpdate(void *, UGCUpdateHandle_t, const char *);
+extern EItemUpdateStatus cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetItemUpdateProgress(void *, UGCUpdateHandle_t, uint64 *, uint64 *);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SubscribeItem(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_UnsubscribeItem(void *, PublishedFileId_t);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetNumSubscribedItems(void *);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetSubscribedItems(void *, PublishedFileId_t *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetItemInstallInfo(void *, PublishedFileId_t, uint64 *, char *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetItemUpdateInfo(void *, PublishedFileId_t, bool *, bool *, uint64 *, uint64 *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION003.cpp b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION003.cpp
new file mode 100644
index 00000000..1d195a70
--- /dev/null
+++ b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION003.cpp
@@ -0,0 +1,165 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_132/steam_api.h"
+#include "cppISteamUGC_STEAMUGC_INTERFACE_VERSION003.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_CreateQueryUserUGCRequest(void *linux_side, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryUserUGCRequest((AccountID_t)unAccountID, (EUserUGCList)eListType, (EUGCMatchingUGCType)eMatchingUGCType, (EUserUGCListSortOrder)eSortOrder, (AppId_t)nCreatorAppID, (AppId_t)nConsumerAppID, (uint32)unPage);
+}
+
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_CreateQueryAllUGCRequest(void *linux_side, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryAllUGCRequest((EUGCQuery)eQueryType, (EUGCMatchingUGCType)eMatchingeMatchingUGCTypeFileType, (AppId_t)nCreatorAppID, (AppId_t)nConsumerAppID, (uint32)unPage);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SendQueryUGCRequest(void *linux_side, UGCQueryHandle_t handle)
+{
+ return ((ISteamUGC*)linux_side)->SendQueryUGCRequest((UGCQueryHandle_t)handle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetQueryUGCResult(void *linux_side, UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t * pDetails)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCResult((UGCQueryHandle_t)handle, (uint32)index, (SteamUGCDetails_t *)pDetails);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_ReleaseQueryUGCRequest(void *linux_side, UGCQueryHandle_t handle)
+{
+ return ((ISteamUGC*)linux_side)->ReleaseQueryUGCRequest((UGCQueryHandle_t)handle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_AddRequiredTag(void *linux_side, UGCQueryHandle_t handle, const char * pTagName)
+{
+ return ((ISteamUGC*)linux_side)->AddRequiredTag((UGCQueryHandle_t)handle, (const char *)pTagName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_AddExcludedTag(void *linux_side, UGCQueryHandle_t handle, const char * pTagName)
+{
+ return ((ISteamUGC*)linux_side)->AddExcludedTag((UGCQueryHandle_t)handle, (const char *)pTagName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetReturnLongDescription(void *linux_side, UGCQueryHandle_t handle, bool bReturnLongDescription)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnLongDescription((UGCQueryHandle_t)handle, (bool)bReturnLongDescription);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetReturnTotalOnly(void *linux_side, UGCQueryHandle_t handle, bool bReturnTotalOnly)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnTotalOnly((UGCQueryHandle_t)handle, (bool)bReturnTotalOnly);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetAllowCachedResponse(void *linux_side, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds)
+{
+ return ((ISteamUGC*)linux_side)->SetAllowCachedResponse((UGCQueryHandle_t)handle, (uint32)unMaxAgeSeconds);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetCloudFileNameFilter(void *linux_side, UGCQueryHandle_t handle, const char * pMatchCloudFileName)
+{
+ return ((ISteamUGC*)linux_side)->SetCloudFileNameFilter((UGCQueryHandle_t)handle, (const char *)pMatchCloudFileName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetMatchAnyTag(void *linux_side, UGCQueryHandle_t handle, bool bMatchAnyTag)
+{
+ return ((ISteamUGC*)linux_side)->SetMatchAnyTag((UGCQueryHandle_t)handle, (bool)bMatchAnyTag);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetSearchText(void *linux_side, UGCQueryHandle_t handle, const char * pSearchText)
+{
+ return ((ISteamUGC*)linux_side)->SetSearchText((UGCQueryHandle_t)handle, (const char *)pSearchText);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetRankedByTrendDays(void *linux_side, UGCQueryHandle_t handle, uint32 unDays)
+{
+ return ((ISteamUGC*)linux_side)->SetRankedByTrendDays((UGCQueryHandle_t)handle, (uint32)unDays);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_RequestUGCDetails(void *linux_side, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds)
+{
+ return ((ISteamUGC*)linux_side)->RequestUGCDetails((PublishedFileId_t)nPublishedFileID, (uint32)unMaxAgeSeconds);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_CreateItem(void *linux_side, AppId_t nConsumerAppId, EWorkshopFileType eFileType)
+{
+ return ((ISteamUGC*)linux_side)->CreateItem((AppId_t)nConsumerAppId, (EWorkshopFileType)eFileType);
+}
+
+UGCUpdateHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_StartItemUpdate(void *linux_side, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->StartItemUpdate((AppId_t)nConsumerAppId, (PublishedFileId_t)nPublishedFileID);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemTitle(void *linux_side, UGCUpdateHandle_t handle, const char * pchTitle)
+{
+ return ((ISteamUGC*)linux_side)->SetItemTitle((UGCUpdateHandle_t)handle, (const char *)pchTitle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemDescription(void *linux_side, UGCUpdateHandle_t handle, const char * pchDescription)
+{
+ return ((ISteamUGC*)linux_side)->SetItemDescription((UGCUpdateHandle_t)handle, (const char *)pchDescription);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemVisibility(void *linux_side, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ return ((ISteamUGC*)linux_side)->SetItemVisibility((UGCUpdateHandle_t)handle, (ERemoteStoragePublishedFileVisibility)eVisibility);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemTags(void *linux_side, UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t * pTags)
+{
+ return ((ISteamUGC*)linux_side)->SetItemTags((UGCUpdateHandle_t)updateHandle, (const SteamParamStringArray_t *)pTags);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemContent(void *linux_side, UGCUpdateHandle_t handle, const char * pszContentFolder)
+{
+ return ((ISteamUGC*)linux_side)->SetItemContent((UGCUpdateHandle_t)handle, (const char *)pszContentFolder);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemPreview(void *linux_side, UGCUpdateHandle_t handle, const char * pszPreviewFile)
+{
+ return ((ISteamUGC*)linux_side)->SetItemPreview((UGCUpdateHandle_t)handle, (const char *)pszPreviewFile);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SubmitItemUpdate(void *linux_side, UGCUpdateHandle_t handle, const char * pchChangeNote)
+{
+ return ((ISteamUGC*)linux_side)->SubmitItemUpdate((UGCUpdateHandle_t)handle, (const char *)pchChangeNote);
+}
+
+EItemUpdateStatus cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetItemUpdateProgress(void *linux_side, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal)
+{
+ return ((ISteamUGC*)linux_side)->GetItemUpdateProgress((UGCUpdateHandle_t)handle, (uint64 *)punBytesProcessed, (uint64 *)punBytesTotal);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SubscribeItem(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->SubscribeItem((PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_UnsubscribeItem(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->UnsubscribeItem((PublishedFileId_t)nPublishedFileID);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetNumSubscribedItems(void *linux_side)
+{
+ return ((ISteamUGC*)linux_side)->GetNumSubscribedItems();
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetSubscribedItems(void *linux_side, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ return ((ISteamUGC*)linux_side)->GetSubscribedItems((PublishedFileId_t *)pvecPublishedFileID, (uint32)cMaxEntries);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetItemInstallInfo(void *linux_side, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, bool * pbLegacyItem)
+{
+ return ((ISteamUGC*)linux_side)->GetItemInstallInfo((PublishedFileId_t)nPublishedFileID, (uint64 *)punSizeOnDisk, (char *)pchFolder, (uint32)cchFolderSize, (bool *)pbLegacyItem);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetItemUpdateInfo(void *linux_side, PublishedFileId_t nPublishedFileID, bool * pbNeedsUpdate, bool * pbIsDownloading, uint64 * punBytesDownloaded, uint64 * punBytesTotal)
+{
+ return ((ISteamUGC*)linux_side)->GetItemUpdateInfo((PublishedFileId_t)nPublishedFileID, (bool *)pbNeedsUpdate, (bool *)pbIsDownloading, (uint64 *)punBytesDownloaded, (uint64 *)punBytesTotal);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION003.h b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION003.h
new file mode 100644
index 00000000..3127ed93
--- /dev/null
+++ b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION003.h
@@ -0,0 +1,37 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_CreateQueryUserUGCRequest(void *, AccountID_t, EUserUGCList, EUGCMatchingUGCType, EUserUGCListSortOrder, AppId_t, AppId_t, uint32);
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_CreateQueryAllUGCRequest(void *, EUGCQuery, EUGCMatchingUGCType, AppId_t, AppId_t, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SendQueryUGCRequest(void *, UGCQueryHandle_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetQueryUGCResult(void *, UGCQueryHandle_t, uint32, SteamUGCDetails_t *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_ReleaseQueryUGCRequest(void *, UGCQueryHandle_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_AddRequiredTag(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_AddExcludedTag(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetReturnLongDescription(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetReturnTotalOnly(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetAllowCachedResponse(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetCloudFileNameFilter(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetMatchAnyTag(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetSearchText(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetRankedByTrendDays(void *, UGCQueryHandle_t, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_RequestUGCDetails(void *, PublishedFileId_t, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_CreateItem(void *, AppId_t, EWorkshopFileType);
+extern UGCUpdateHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_StartItemUpdate(void *, AppId_t, PublishedFileId_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemTitle(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemDescription(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemVisibility(void *, UGCUpdateHandle_t, ERemoteStoragePublishedFileVisibility);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemTags(void *, UGCUpdateHandle_t, const SteamParamStringArray_t *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemContent(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemPreview(void *, UGCUpdateHandle_t, const char *);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SubmitItemUpdate(void *, UGCUpdateHandle_t, const char *);
+extern EItemUpdateStatus cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetItemUpdateProgress(void *, UGCUpdateHandle_t, uint64 *, uint64 *);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SubscribeItem(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_UnsubscribeItem(void *, PublishedFileId_t);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetNumSubscribedItems(void *);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetSubscribedItems(void *, PublishedFileId_t *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetItemInstallInfo(void *, PublishedFileId_t, uint64 *, char *, uint32, bool *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetItemUpdateInfo(void *, PublishedFileId_t, bool *, bool *, uint64 *, uint64 *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION005.cpp b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION005.cpp
new file mode 100644
index 00000000..6b9a3ca7
--- /dev/null
+++ b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION005.cpp
@@ -0,0 +1,240 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_133b/steam_api.h"
+#include "cppISteamUGC_STEAMUGC_INTERFACE_VERSION005.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateQueryUserUGCRequest(void *linux_side, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryUserUGCRequest((AccountID_t)unAccountID, (EUserUGCList)eListType, (EUGCMatchingUGCType)eMatchingUGCType, (EUserUGCListSortOrder)eSortOrder, (AppId_t)nCreatorAppID, (AppId_t)nConsumerAppID, (uint32)unPage);
+}
+
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateQueryAllUGCRequest(void *linux_side, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryAllUGCRequest((EUGCQuery)eQueryType, (EUGCMatchingUGCType)eMatchingeMatchingUGCTypeFileType, (AppId_t)nCreatorAppID, (AppId_t)nConsumerAppID, (uint32)unPage);
+}
+
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateQueryUGCDetailsRequest(void *linux_side, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryUGCDetailsRequest((PublishedFileId_t *)pvecPublishedFileID, (uint32)unNumPublishedFileIDs);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SendQueryUGCRequest(void *linux_side, UGCQueryHandle_t handle)
+{
+ return ((ISteamUGC*)linux_side)->SendQueryUGCRequest((UGCQueryHandle_t)handle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCResult(void *linux_side, UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t * pDetails)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCResult((UGCQueryHandle_t)handle, (uint32)index, (SteamUGCDetails_t *)pDetails);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCPreviewURL(void *linux_side, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCPreviewURL((UGCQueryHandle_t)handle, (uint32)index, (char *)pchURL, (uint32)cchURLSize);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCMetadata(void *linux_side, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCMetadata((UGCQueryHandle_t)handle, (uint32)index, (char *)pchMetadata, (uint32)cchMetadatasize);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCChildren(void *linux_side, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCChildren((UGCQueryHandle_t)handle, (uint32)index, (PublishedFileId_t *)pvecPublishedFileID, (uint32)cMaxEntries);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCStatistic(void *linux_side, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 * pStatValue)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCStatistic((UGCQueryHandle_t)handle, (uint32)index, (EItemStatistic)eStatType, (uint32 *)pStatValue);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCNumAdditionalPreviews(void *linux_side, UGCQueryHandle_t handle, uint32 index)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCNumAdditionalPreviews((UGCQueryHandle_t)handle, (uint32)index);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCAdditionalPreview(void *linux_side, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, bool * pbIsImage)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCAdditionalPreview((UGCQueryHandle_t)handle, (uint32)index, (uint32)previewIndex, (char *)pchURLOrVideoID, (uint32)cchURLSize, (bool *)pbIsImage);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_ReleaseQueryUGCRequest(void *linux_side, UGCQueryHandle_t handle)
+{
+ return ((ISteamUGC*)linux_side)->ReleaseQueryUGCRequest((UGCQueryHandle_t)handle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_AddRequiredTag(void *linux_side, UGCQueryHandle_t handle, const char * pTagName)
+{
+ return ((ISteamUGC*)linux_side)->AddRequiredTag((UGCQueryHandle_t)handle, (const char *)pTagName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_AddExcludedTag(void *linux_side, UGCQueryHandle_t handle, const char * pTagName)
+{
+ return ((ISteamUGC*)linux_side)->AddExcludedTag((UGCQueryHandle_t)handle, (const char *)pTagName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnLongDescription(void *linux_side, UGCQueryHandle_t handle, bool bReturnLongDescription)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnLongDescription((UGCQueryHandle_t)handle, (bool)bReturnLongDescription);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnMetadata(void *linux_side, UGCQueryHandle_t handle, bool bReturnMetadata)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnMetadata((UGCQueryHandle_t)handle, (bool)bReturnMetadata);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnChildren(void *linux_side, UGCQueryHandle_t handle, bool bReturnChildren)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnChildren((UGCQueryHandle_t)handle, (bool)bReturnChildren);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnAdditionalPreviews(void *linux_side, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnAdditionalPreviews((UGCQueryHandle_t)handle, (bool)bReturnAdditionalPreviews);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnTotalOnly(void *linux_side, UGCQueryHandle_t handle, bool bReturnTotalOnly)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnTotalOnly((UGCQueryHandle_t)handle, (bool)bReturnTotalOnly);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetAllowCachedResponse(void *linux_side, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds)
+{
+ return ((ISteamUGC*)linux_side)->SetAllowCachedResponse((UGCQueryHandle_t)handle, (uint32)unMaxAgeSeconds);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetCloudFileNameFilter(void *linux_side, UGCQueryHandle_t handle, const char * pMatchCloudFileName)
+{
+ return ((ISteamUGC*)linux_side)->SetCloudFileNameFilter((UGCQueryHandle_t)handle, (const char *)pMatchCloudFileName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetMatchAnyTag(void *linux_side, UGCQueryHandle_t handle, bool bMatchAnyTag)
+{
+ return ((ISteamUGC*)linux_side)->SetMatchAnyTag((UGCQueryHandle_t)handle, (bool)bMatchAnyTag);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetSearchText(void *linux_side, UGCQueryHandle_t handle, const char * pSearchText)
+{
+ return ((ISteamUGC*)linux_side)->SetSearchText((UGCQueryHandle_t)handle, (const char *)pSearchText);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetRankedByTrendDays(void *linux_side, UGCQueryHandle_t handle, uint32 unDays)
+{
+ return ((ISteamUGC*)linux_side)->SetRankedByTrendDays((UGCQueryHandle_t)handle, (uint32)unDays);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_RequestUGCDetails(void *linux_side, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds)
+{
+ return ((ISteamUGC*)linux_side)->RequestUGCDetails((PublishedFileId_t)nPublishedFileID, (uint32)unMaxAgeSeconds);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateItem(void *linux_side, AppId_t nConsumerAppId, EWorkshopFileType eFileType)
+{
+ return ((ISteamUGC*)linux_side)->CreateItem((AppId_t)nConsumerAppId, (EWorkshopFileType)eFileType);
+}
+
+UGCUpdateHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_StartItemUpdate(void *linux_side, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->StartItemUpdate((AppId_t)nConsumerAppId, (PublishedFileId_t)nPublishedFileID);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemTitle(void *linux_side, UGCUpdateHandle_t handle, const char * pchTitle)
+{
+ return ((ISteamUGC*)linux_side)->SetItemTitle((UGCUpdateHandle_t)handle, (const char *)pchTitle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemDescription(void *linux_side, UGCUpdateHandle_t handle, const char * pchDescription)
+{
+ return ((ISteamUGC*)linux_side)->SetItemDescription((UGCUpdateHandle_t)handle, (const char *)pchDescription);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemMetadata(void *linux_side, UGCUpdateHandle_t handle, const char * pchMetaData)
+{
+ return ((ISteamUGC*)linux_side)->SetItemMetadata((UGCUpdateHandle_t)handle, (const char *)pchMetaData);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemVisibility(void *linux_side, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ return ((ISteamUGC*)linux_side)->SetItemVisibility((UGCUpdateHandle_t)handle, (ERemoteStoragePublishedFileVisibility)eVisibility);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemTags(void *linux_side, UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t * pTags)
+{
+ return ((ISteamUGC*)linux_side)->SetItemTags((UGCUpdateHandle_t)updateHandle, (const SteamParamStringArray_t *)pTags);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemContent(void *linux_side, UGCUpdateHandle_t handle, const char * pszContentFolder)
+{
+ return ((ISteamUGC*)linux_side)->SetItemContent((UGCUpdateHandle_t)handle, (const char *)pszContentFolder);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemPreview(void *linux_side, UGCUpdateHandle_t handle, const char * pszPreviewFile)
+{
+ return ((ISteamUGC*)linux_side)->SetItemPreview((UGCUpdateHandle_t)handle, (const char *)pszPreviewFile);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SubmitItemUpdate(void *linux_side, UGCUpdateHandle_t handle, const char * pchChangeNote)
+{
+ return ((ISteamUGC*)linux_side)->SubmitItemUpdate((UGCUpdateHandle_t)handle, (const char *)pchChangeNote);
+}
+
+EItemUpdateStatus cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemUpdateProgress(void *linux_side, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal)
+{
+ return ((ISteamUGC*)linux_side)->GetItemUpdateProgress((UGCUpdateHandle_t)handle, (uint64 *)punBytesProcessed, (uint64 *)punBytesTotal);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_AddItemToFavorites(void *linux_side, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->AddItemToFavorites((AppId_t)nAppId, (PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_RemoveItemFromFavorites(void *linux_side, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->RemoveItemFromFavorites((AppId_t)nAppId, (PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SubscribeItem(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->SubscribeItem((PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_UnsubscribeItem(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->UnsubscribeItem((PublishedFileId_t)nPublishedFileID);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetNumSubscribedItems(void *linux_side)
+{
+ return ((ISteamUGC*)linux_side)->GetNumSubscribedItems();
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetSubscribedItems(void *linux_side, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ return ((ISteamUGC*)linux_side)->GetSubscribedItems((PublishedFileId_t *)pvecPublishedFileID, (uint32)cMaxEntries);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemState(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->GetItemState((PublishedFileId_t)nPublishedFileID);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemInstallInfo(void *linux_side, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp)
+{
+ return ((ISteamUGC*)linux_side)->GetItemInstallInfo((PublishedFileId_t)nPublishedFileID, (uint64 *)punSizeOnDisk, (char *)pchFolder, (uint32)cchFolderSize, (uint32 *)punTimeStamp);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemDownloadInfo(void *linux_side, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal)
+{
+ return ((ISteamUGC*)linux_side)->GetItemDownloadInfo((PublishedFileId_t)nPublishedFileID, (uint64 *)punBytesDownloaded, (uint64 *)punBytesTotal);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_DownloadItem(void *linux_side, PublishedFileId_t nPublishedFileID, bool bHighPriority)
+{
+ return ((ISteamUGC*)linux_side)->DownloadItem((PublishedFileId_t)nPublishedFileID, (bool)bHighPriority);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION005.h b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION005.h
new file mode 100644
index 00000000..f3cbc6e7
--- /dev/null
+++ b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION005.h
@@ -0,0 +1,52 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateQueryUserUGCRequest(void *, AccountID_t, EUserUGCList, EUGCMatchingUGCType, EUserUGCListSortOrder, AppId_t, AppId_t, uint32);
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateQueryAllUGCRequest(void *, EUGCQuery, EUGCMatchingUGCType, AppId_t, AppId_t, uint32);
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateQueryUGCDetailsRequest(void *, PublishedFileId_t *, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SendQueryUGCRequest(void *, UGCQueryHandle_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCResult(void *, UGCQueryHandle_t, uint32, SteamUGCDetails_t *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCPreviewURL(void *, UGCQueryHandle_t, uint32, char *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCMetadata(void *, UGCQueryHandle_t, uint32, char *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCChildren(void *, UGCQueryHandle_t, uint32, PublishedFileId_t *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCStatistic(void *, UGCQueryHandle_t, uint32, EItemStatistic, uint32 *);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCNumAdditionalPreviews(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCAdditionalPreview(void *, UGCQueryHandle_t, uint32, uint32, char *, uint32, bool *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_ReleaseQueryUGCRequest(void *, UGCQueryHandle_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_AddRequiredTag(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_AddExcludedTag(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnLongDescription(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnMetadata(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnChildren(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnAdditionalPreviews(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnTotalOnly(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetAllowCachedResponse(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetCloudFileNameFilter(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetMatchAnyTag(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetSearchText(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetRankedByTrendDays(void *, UGCQueryHandle_t, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_RequestUGCDetails(void *, PublishedFileId_t, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateItem(void *, AppId_t, EWorkshopFileType);
+extern UGCUpdateHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_StartItemUpdate(void *, AppId_t, PublishedFileId_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemTitle(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemDescription(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemMetadata(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemVisibility(void *, UGCUpdateHandle_t, ERemoteStoragePublishedFileVisibility);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemTags(void *, UGCUpdateHandle_t, const SteamParamStringArray_t *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemContent(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemPreview(void *, UGCUpdateHandle_t, const char *);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SubmitItemUpdate(void *, UGCUpdateHandle_t, const char *);
+extern EItemUpdateStatus cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemUpdateProgress(void *, UGCUpdateHandle_t, uint64 *, uint64 *);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_AddItemToFavorites(void *, AppId_t, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_RemoveItemFromFavorites(void *, AppId_t, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SubscribeItem(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_UnsubscribeItem(void *, PublishedFileId_t);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetNumSubscribedItems(void *);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetSubscribedItems(void *, PublishedFileId_t *, uint32);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemState(void *, PublishedFileId_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemInstallInfo(void *, PublishedFileId_t, uint64 *, char *, uint32, uint32 *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemDownloadInfo(void *, PublishedFileId_t, uint64 *, uint64 *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_DownloadItem(void *, PublishedFileId_t, bool);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION007.cpp b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION007.cpp
new file mode 100644
index 00000000..f4248be7
--- /dev/null
+++ b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION007.cpp
@@ -0,0 +1,300 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_136/steam_api.h"
+#include "cppISteamUGC_STEAMUGC_INTERFACE_VERSION007.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateQueryUserUGCRequest(void *linux_side, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryUserUGCRequest((AccountID_t)unAccountID, (EUserUGCList)eListType, (EUGCMatchingUGCType)eMatchingUGCType, (EUserUGCListSortOrder)eSortOrder, (AppId_t)nCreatorAppID, (AppId_t)nConsumerAppID, (uint32)unPage);
+}
+
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateQueryAllUGCRequest(void *linux_side, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryAllUGCRequest((EUGCQuery)eQueryType, (EUGCMatchingUGCType)eMatchingeMatchingUGCTypeFileType, (AppId_t)nCreatorAppID, (AppId_t)nConsumerAppID, (uint32)unPage);
+}
+
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateQueryUGCDetailsRequest(void *linux_side, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryUGCDetailsRequest((PublishedFileId_t *)pvecPublishedFileID, (uint32)unNumPublishedFileIDs);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SendQueryUGCRequest(void *linux_side, UGCQueryHandle_t handle)
+{
+ return ((ISteamUGC*)linux_side)->SendQueryUGCRequest((UGCQueryHandle_t)handle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCResult(void *linux_side, UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t * pDetails)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCResult((UGCQueryHandle_t)handle, (uint32)index, (SteamUGCDetails_t *)pDetails);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCPreviewURL(void *linux_side, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCPreviewURL((UGCQueryHandle_t)handle, (uint32)index, (char *)pchURL, (uint32)cchURLSize);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCMetadata(void *linux_side, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCMetadata((UGCQueryHandle_t)handle, (uint32)index, (char *)pchMetadata, (uint32)cchMetadatasize);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCChildren(void *linux_side, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCChildren((UGCQueryHandle_t)handle, (uint32)index, (PublishedFileId_t *)pvecPublishedFileID, (uint32)cMaxEntries);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCStatistic(void *linux_side, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 * pStatValue)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCStatistic((UGCQueryHandle_t)handle, (uint32)index, (EItemStatistic)eStatType, (uint32 *)pStatValue);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCNumAdditionalPreviews(void *linux_side, UGCQueryHandle_t handle, uint32 index)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCNumAdditionalPreviews((UGCQueryHandle_t)handle, (uint32)index);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCAdditionalPreview(void *linux_side, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, bool * pbIsImage)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCAdditionalPreview((UGCQueryHandle_t)handle, (uint32)index, (uint32)previewIndex, (char *)pchURLOrVideoID, (uint32)cchURLSize, (bool *)pbIsImage);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCNumKeyValueTags(void *linux_side, UGCQueryHandle_t handle, uint32 index)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCNumKeyValueTags((UGCQueryHandle_t)handle, (uint32)index);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCKeyValueTag(void *linux_side, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCKeyValueTag((UGCQueryHandle_t)handle, (uint32)index, (uint32)keyValueTagIndex, (char *)pchKey, (uint32)cchKeySize, (char *)pchValue, (uint32)cchValueSize);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_ReleaseQueryUGCRequest(void *linux_side, UGCQueryHandle_t handle)
+{
+ return ((ISteamUGC*)linux_side)->ReleaseQueryUGCRequest((UGCQueryHandle_t)handle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddRequiredTag(void *linux_side, UGCQueryHandle_t handle, const char * pTagName)
+{
+ return ((ISteamUGC*)linux_side)->AddRequiredTag((UGCQueryHandle_t)handle, (const char *)pTagName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddExcludedTag(void *linux_side, UGCQueryHandle_t handle, const char * pTagName)
+{
+ return ((ISteamUGC*)linux_side)->AddExcludedTag((UGCQueryHandle_t)handle, (const char *)pTagName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnKeyValueTags(void *linux_side, UGCQueryHandle_t handle, bool bReturnKeyValueTags)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnKeyValueTags((UGCQueryHandle_t)handle, (bool)bReturnKeyValueTags);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnLongDescription(void *linux_side, UGCQueryHandle_t handle, bool bReturnLongDescription)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnLongDescription((UGCQueryHandle_t)handle, (bool)bReturnLongDescription);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnMetadata(void *linux_side, UGCQueryHandle_t handle, bool bReturnMetadata)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnMetadata((UGCQueryHandle_t)handle, (bool)bReturnMetadata);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnChildren(void *linux_side, UGCQueryHandle_t handle, bool bReturnChildren)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnChildren((UGCQueryHandle_t)handle, (bool)bReturnChildren);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnAdditionalPreviews(void *linux_side, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnAdditionalPreviews((UGCQueryHandle_t)handle, (bool)bReturnAdditionalPreviews);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnTotalOnly(void *linux_side, UGCQueryHandle_t handle, bool bReturnTotalOnly)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnTotalOnly((UGCQueryHandle_t)handle, (bool)bReturnTotalOnly);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetLanguage(void *linux_side, UGCQueryHandle_t handle, const char * pchLanguage)
+{
+ return ((ISteamUGC*)linux_side)->SetLanguage((UGCQueryHandle_t)handle, (const char *)pchLanguage);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetAllowCachedResponse(void *linux_side, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds)
+{
+ return ((ISteamUGC*)linux_side)->SetAllowCachedResponse((UGCQueryHandle_t)handle, (uint32)unMaxAgeSeconds);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetCloudFileNameFilter(void *linux_side, UGCQueryHandle_t handle, const char * pMatchCloudFileName)
+{
+ return ((ISteamUGC*)linux_side)->SetCloudFileNameFilter((UGCQueryHandle_t)handle, (const char *)pMatchCloudFileName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetMatchAnyTag(void *linux_side, UGCQueryHandle_t handle, bool bMatchAnyTag)
+{
+ return ((ISteamUGC*)linux_side)->SetMatchAnyTag((UGCQueryHandle_t)handle, (bool)bMatchAnyTag);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetSearchText(void *linux_side, UGCQueryHandle_t handle, const char * pSearchText)
+{
+ return ((ISteamUGC*)linux_side)->SetSearchText((UGCQueryHandle_t)handle, (const char *)pSearchText);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetRankedByTrendDays(void *linux_side, UGCQueryHandle_t handle, uint32 unDays)
+{
+ return ((ISteamUGC*)linux_side)->SetRankedByTrendDays((UGCQueryHandle_t)handle, (uint32)unDays);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddRequiredKeyValueTag(void *linux_side, UGCQueryHandle_t handle, const char * pKey, const char * pValue)
+{
+ return ((ISteamUGC*)linux_side)->AddRequiredKeyValueTag((UGCQueryHandle_t)handle, (const char *)pKey, (const char *)pValue);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_RequestUGCDetails(void *linux_side, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds)
+{
+ return ((ISteamUGC*)linux_side)->RequestUGCDetails((PublishedFileId_t)nPublishedFileID, (uint32)unMaxAgeSeconds);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateItem(void *linux_side, AppId_t nConsumerAppId, EWorkshopFileType eFileType)
+{
+ return ((ISteamUGC*)linux_side)->CreateItem((AppId_t)nConsumerAppId, (EWorkshopFileType)eFileType);
+}
+
+UGCUpdateHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_StartItemUpdate(void *linux_side, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->StartItemUpdate((AppId_t)nConsumerAppId, (PublishedFileId_t)nPublishedFileID);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemTitle(void *linux_side, UGCUpdateHandle_t handle, const char * pchTitle)
+{
+ return ((ISteamUGC*)linux_side)->SetItemTitle((UGCUpdateHandle_t)handle, (const char *)pchTitle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemDescription(void *linux_side, UGCUpdateHandle_t handle, const char * pchDescription)
+{
+ return ((ISteamUGC*)linux_side)->SetItemDescription((UGCUpdateHandle_t)handle, (const char *)pchDescription);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemUpdateLanguage(void *linux_side, UGCUpdateHandle_t handle, const char * pchLanguage)
+{
+ return ((ISteamUGC*)linux_side)->SetItemUpdateLanguage((UGCUpdateHandle_t)handle, (const char *)pchLanguage);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemMetadata(void *linux_side, UGCUpdateHandle_t handle, const char * pchMetaData)
+{
+ return ((ISteamUGC*)linux_side)->SetItemMetadata((UGCUpdateHandle_t)handle, (const char *)pchMetaData);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemVisibility(void *linux_side, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ return ((ISteamUGC*)linux_side)->SetItemVisibility((UGCUpdateHandle_t)handle, (ERemoteStoragePublishedFileVisibility)eVisibility);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemTags(void *linux_side, UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t * pTags)
+{
+ return ((ISteamUGC*)linux_side)->SetItemTags((UGCUpdateHandle_t)updateHandle, (const SteamParamStringArray_t *)pTags);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemContent(void *linux_side, UGCUpdateHandle_t handle, const char * pszContentFolder)
+{
+ return ((ISteamUGC*)linux_side)->SetItemContent((UGCUpdateHandle_t)handle, (const char *)pszContentFolder);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemPreview(void *linux_side, UGCUpdateHandle_t handle, const char * pszPreviewFile)
+{
+ return ((ISteamUGC*)linux_side)->SetItemPreview((UGCUpdateHandle_t)handle, (const char *)pszPreviewFile);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_RemoveItemKeyValueTags(void *linux_side, UGCUpdateHandle_t handle, const char * pchKey)
+{
+ return ((ISteamUGC*)linux_side)->RemoveItemKeyValueTags((UGCUpdateHandle_t)handle, (const char *)pchKey);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddItemKeyValueTag(void *linux_side, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue)
+{
+ return ((ISteamUGC*)linux_side)->AddItemKeyValueTag((UGCUpdateHandle_t)handle, (const char *)pchKey, (const char *)pchValue);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SubmitItemUpdate(void *linux_side, UGCUpdateHandle_t handle, const char * pchChangeNote)
+{
+ return ((ISteamUGC*)linux_side)->SubmitItemUpdate((UGCUpdateHandle_t)handle, (const char *)pchChangeNote);
+}
+
+EItemUpdateStatus cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemUpdateProgress(void *linux_side, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal)
+{
+ return ((ISteamUGC*)linux_side)->GetItemUpdateProgress((UGCUpdateHandle_t)handle, (uint64 *)punBytesProcessed, (uint64 *)punBytesTotal);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetUserItemVote(void *linux_side, PublishedFileId_t nPublishedFileID, bool bVoteUp)
+{
+ return ((ISteamUGC*)linux_side)->SetUserItemVote((PublishedFileId_t)nPublishedFileID, (bool)bVoteUp);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetUserItemVote(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->GetUserItemVote((PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddItemToFavorites(void *linux_side, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->AddItemToFavorites((AppId_t)nAppId, (PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_RemoveItemFromFavorites(void *linux_side, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->RemoveItemFromFavorites((AppId_t)nAppId, (PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SubscribeItem(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->SubscribeItem((PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_UnsubscribeItem(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->UnsubscribeItem((PublishedFileId_t)nPublishedFileID);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetNumSubscribedItems(void *linux_side)
+{
+ return ((ISteamUGC*)linux_side)->GetNumSubscribedItems();
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetSubscribedItems(void *linux_side, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ return ((ISteamUGC*)linux_side)->GetSubscribedItems((PublishedFileId_t *)pvecPublishedFileID, (uint32)cMaxEntries);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemState(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->GetItemState((PublishedFileId_t)nPublishedFileID);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemInstallInfo(void *linux_side, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp)
+{
+ return ((ISteamUGC*)linux_side)->GetItemInstallInfo((PublishedFileId_t)nPublishedFileID, (uint64 *)punSizeOnDisk, (char *)pchFolder, (uint32)cchFolderSize, (uint32 *)punTimeStamp);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemDownloadInfo(void *linux_side, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal)
+{
+ return ((ISteamUGC*)linux_side)->GetItemDownloadInfo((PublishedFileId_t)nPublishedFileID, (uint64 *)punBytesDownloaded, (uint64 *)punBytesTotal);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_DownloadItem(void *linux_side, PublishedFileId_t nPublishedFileID, bool bHighPriority)
+{
+ return ((ISteamUGC*)linux_side)->DownloadItem((PublishedFileId_t)nPublishedFileID, (bool)bHighPriority);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_BInitWorkshopForGameServer(void *linux_side, DepotId_t unWorkshopDepotID, const char * pszFolder)
+{
+ return ((ISteamUGC*)linux_side)->BInitWorkshopForGameServer((DepotId_t)unWorkshopDepotID, (const char *)pszFolder);
+}
+
+void cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SuspendDownloads(void *linux_side, bool bSuspend)
+{
+ ((ISteamUGC*)linux_side)->SuspendDownloads((bool)bSuspend);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION007.h b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION007.h
new file mode 100644
index 00000000..710a3569
--- /dev/null
+++ b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION007.h
@@ -0,0 +1,64 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateQueryUserUGCRequest(void *, AccountID_t, EUserUGCList, EUGCMatchingUGCType, EUserUGCListSortOrder, AppId_t, AppId_t, uint32);
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateQueryAllUGCRequest(void *, EUGCQuery, EUGCMatchingUGCType, AppId_t, AppId_t, uint32);
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateQueryUGCDetailsRequest(void *, PublishedFileId_t *, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SendQueryUGCRequest(void *, UGCQueryHandle_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCResult(void *, UGCQueryHandle_t, uint32, SteamUGCDetails_t *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCPreviewURL(void *, UGCQueryHandle_t, uint32, char *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCMetadata(void *, UGCQueryHandle_t, uint32, char *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCChildren(void *, UGCQueryHandle_t, uint32, PublishedFileId_t *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCStatistic(void *, UGCQueryHandle_t, uint32, EItemStatistic, uint32 *);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCNumAdditionalPreviews(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCAdditionalPreview(void *, UGCQueryHandle_t, uint32, uint32, char *, uint32, bool *);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCNumKeyValueTags(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCKeyValueTag(void *, UGCQueryHandle_t, uint32, uint32, char *, uint32, char *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_ReleaseQueryUGCRequest(void *, UGCQueryHandle_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddRequiredTag(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddExcludedTag(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnKeyValueTags(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnLongDescription(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnMetadata(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnChildren(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnAdditionalPreviews(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnTotalOnly(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetLanguage(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetAllowCachedResponse(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetCloudFileNameFilter(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetMatchAnyTag(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetSearchText(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetRankedByTrendDays(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddRequiredKeyValueTag(void *, UGCQueryHandle_t, const char *, const char *);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_RequestUGCDetails(void *, PublishedFileId_t, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateItem(void *, AppId_t, EWorkshopFileType);
+extern UGCUpdateHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_StartItemUpdate(void *, AppId_t, PublishedFileId_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemTitle(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemDescription(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemUpdateLanguage(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemMetadata(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemVisibility(void *, UGCUpdateHandle_t, ERemoteStoragePublishedFileVisibility);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemTags(void *, UGCUpdateHandle_t, const SteamParamStringArray_t *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemContent(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemPreview(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_RemoveItemKeyValueTags(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddItemKeyValueTag(void *, UGCUpdateHandle_t, const char *, const char *);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SubmitItemUpdate(void *, UGCUpdateHandle_t, const char *);
+extern EItemUpdateStatus cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemUpdateProgress(void *, UGCUpdateHandle_t, uint64 *, uint64 *);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetUserItemVote(void *, PublishedFileId_t, bool);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetUserItemVote(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddItemToFavorites(void *, AppId_t, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_RemoveItemFromFavorites(void *, AppId_t, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SubscribeItem(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_UnsubscribeItem(void *, PublishedFileId_t);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetNumSubscribedItems(void *);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetSubscribedItems(void *, PublishedFileId_t *, uint32);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemState(void *, PublishedFileId_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemInstallInfo(void *, PublishedFileId_t, uint64 *, char *, uint32, uint32 *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemDownloadInfo(void *, PublishedFileId_t, uint64 *, uint64 *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_DownloadItem(void *, PublishedFileId_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_BInitWorkshopForGameServer(void *, DepotId_t, const char *);
+extern void cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SuspendDownloads(void *, bool);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION008.cpp b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION008.cpp
new file mode 100644
index 00000000..df0566a0
--- /dev/null
+++ b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION008.cpp
@@ -0,0 +1,325 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_137/steam_api.h"
+#include "cppISteamUGC_STEAMUGC_INTERFACE_VERSION008.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateQueryUserUGCRequest(void *linux_side, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryUserUGCRequest((AccountID_t)unAccountID, (EUserUGCList)eListType, (EUGCMatchingUGCType)eMatchingUGCType, (EUserUGCListSortOrder)eSortOrder, (AppId_t)nCreatorAppID, (AppId_t)nConsumerAppID, (uint32)unPage);
+}
+
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateQueryAllUGCRequest(void *linux_side, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryAllUGCRequest((EUGCQuery)eQueryType, (EUGCMatchingUGCType)eMatchingeMatchingUGCTypeFileType, (AppId_t)nCreatorAppID, (AppId_t)nConsumerAppID, (uint32)unPage);
+}
+
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateQueryUGCDetailsRequest(void *linux_side, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryUGCDetailsRequest((PublishedFileId_t *)pvecPublishedFileID, (uint32)unNumPublishedFileIDs);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SendQueryUGCRequest(void *linux_side, UGCQueryHandle_t handle)
+{
+ return ((ISteamUGC*)linux_side)->SendQueryUGCRequest((UGCQueryHandle_t)handle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCResult(void *linux_side, UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t * pDetails)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCResult((UGCQueryHandle_t)handle, (uint32)index, (SteamUGCDetails_t *)pDetails);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCPreviewURL(void *linux_side, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCPreviewURL((UGCQueryHandle_t)handle, (uint32)index, (char *)pchURL, (uint32)cchURLSize);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCMetadata(void *linux_side, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCMetadata((UGCQueryHandle_t)handle, (uint32)index, (char *)pchMetadata, (uint32)cchMetadatasize);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCChildren(void *linux_side, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCChildren((UGCQueryHandle_t)handle, (uint32)index, (PublishedFileId_t *)pvecPublishedFileID, (uint32)cMaxEntries);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCStatistic(void *linux_side, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 * pStatValue)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCStatistic((UGCQueryHandle_t)handle, (uint32)index, (EItemStatistic)eStatType, (uint32 *)pStatValue);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCNumAdditionalPreviews(void *linux_side, UGCQueryHandle_t handle, uint32 index)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCNumAdditionalPreviews((UGCQueryHandle_t)handle, (uint32)index);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCAdditionalPreview(void *linux_side, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, char * pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType * pPreviewType)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCAdditionalPreview((UGCQueryHandle_t)handle, (uint32)index, (uint32)previewIndex, (char *)pchURLOrVideoID, (uint32)cchURLSize, (char *)pchOriginalFileName, (uint32)cchOriginalFileNameSize, (EItemPreviewType *)pPreviewType);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCNumKeyValueTags(void *linux_side, UGCQueryHandle_t handle, uint32 index)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCNumKeyValueTags((UGCQueryHandle_t)handle, (uint32)index);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCKeyValueTag(void *linux_side, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCKeyValueTag((UGCQueryHandle_t)handle, (uint32)index, (uint32)keyValueTagIndex, (char *)pchKey, (uint32)cchKeySize, (char *)pchValue, (uint32)cchValueSize);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_ReleaseQueryUGCRequest(void *linux_side, UGCQueryHandle_t handle)
+{
+ return ((ISteamUGC*)linux_side)->ReleaseQueryUGCRequest((UGCQueryHandle_t)handle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddRequiredTag(void *linux_side, UGCQueryHandle_t handle, const char * pTagName)
+{
+ return ((ISteamUGC*)linux_side)->AddRequiredTag((UGCQueryHandle_t)handle, (const char *)pTagName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddExcludedTag(void *linux_side, UGCQueryHandle_t handle, const char * pTagName)
+{
+ return ((ISteamUGC*)linux_side)->AddExcludedTag((UGCQueryHandle_t)handle, (const char *)pTagName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnKeyValueTags(void *linux_side, UGCQueryHandle_t handle, bool bReturnKeyValueTags)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnKeyValueTags((UGCQueryHandle_t)handle, (bool)bReturnKeyValueTags);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnLongDescription(void *linux_side, UGCQueryHandle_t handle, bool bReturnLongDescription)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnLongDescription((UGCQueryHandle_t)handle, (bool)bReturnLongDescription);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnMetadata(void *linux_side, UGCQueryHandle_t handle, bool bReturnMetadata)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnMetadata((UGCQueryHandle_t)handle, (bool)bReturnMetadata);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnChildren(void *linux_side, UGCQueryHandle_t handle, bool bReturnChildren)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnChildren((UGCQueryHandle_t)handle, (bool)bReturnChildren);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnAdditionalPreviews(void *linux_side, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnAdditionalPreviews((UGCQueryHandle_t)handle, (bool)bReturnAdditionalPreviews);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnTotalOnly(void *linux_side, UGCQueryHandle_t handle, bool bReturnTotalOnly)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnTotalOnly((UGCQueryHandle_t)handle, (bool)bReturnTotalOnly);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetLanguage(void *linux_side, UGCQueryHandle_t handle, const char * pchLanguage)
+{
+ return ((ISteamUGC*)linux_side)->SetLanguage((UGCQueryHandle_t)handle, (const char *)pchLanguage);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetAllowCachedResponse(void *linux_side, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds)
+{
+ return ((ISteamUGC*)linux_side)->SetAllowCachedResponse((UGCQueryHandle_t)handle, (uint32)unMaxAgeSeconds);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetCloudFileNameFilter(void *linux_side, UGCQueryHandle_t handle, const char * pMatchCloudFileName)
+{
+ return ((ISteamUGC*)linux_side)->SetCloudFileNameFilter((UGCQueryHandle_t)handle, (const char *)pMatchCloudFileName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetMatchAnyTag(void *linux_side, UGCQueryHandle_t handle, bool bMatchAnyTag)
+{
+ return ((ISteamUGC*)linux_side)->SetMatchAnyTag((UGCQueryHandle_t)handle, (bool)bMatchAnyTag);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetSearchText(void *linux_side, UGCQueryHandle_t handle, const char * pSearchText)
+{
+ return ((ISteamUGC*)linux_side)->SetSearchText((UGCQueryHandle_t)handle, (const char *)pSearchText);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetRankedByTrendDays(void *linux_side, UGCQueryHandle_t handle, uint32 unDays)
+{
+ return ((ISteamUGC*)linux_side)->SetRankedByTrendDays((UGCQueryHandle_t)handle, (uint32)unDays);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddRequiredKeyValueTag(void *linux_side, UGCQueryHandle_t handle, const char * pKey, const char * pValue)
+{
+ return ((ISteamUGC*)linux_side)->AddRequiredKeyValueTag((UGCQueryHandle_t)handle, (const char *)pKey, (const char *)pValue);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_RequestUGCDetails(void *linux_side, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds)
+{
+ return ((ISteamUGC*)linux_side)->RequestUGCDetails((PublishedFileId_t)nPublishedFileID, (uint32)unMaxAgeSeconds);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateItem(void *linux_side, AppId_t nConsumerAppId, EWorkshopFileType eFileType)
+{
+ return ((ISteamUGC*)linux_side)->CreateItem((AppId_t)nConsumerAppId, (EWorkshopFileType)eFileType);
+}
+
+UGCUpdateHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_StartItemUpdate(void *linux_side, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->StartItemUpdate((AppId_t)nConsumerAppId, (PublishedFileId_t)nPublishedFileID);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemTitle(void *linux_side, UGCUpdateHandle_t handle, const char * pchTitle)
+{
+ return ((ISteamUGC*)linux_side)->SetItemTitle((UGCUpdateHandle_t)handle, (const char *)pchTitle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemDescription(void *linux_side, UGCUpdateHandle_t handle, const char * pchDescription)
+{
+ return ((ISteamUGC*)linux_side)->SetItemDescription((UGCUpdateHandle_t)handle, (const char *)pchDescription);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemUpdateLanguage(void *linux_side, UGCUpdateHandle_t handle, const char * pchLanguage)
+{
+ return ((ISteamUGC*)linux_side)->SetItemUpdateLanguage((UGCUpdateHandle_t)handle, (const char *)pchLanguage);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemMetadata(void *linux_side, UGCUpdateHandle_t handle, const char * pchMetaData)
+{
+ return ((ISteamUGC*)linux_side)->SetItemMetadata((UGCUpdateHandle_t)handle, (const char *)pchMetaData);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemVisibility(void *linux_side, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ return ((ISteamUGC*)linux_side)->SetItemVisibility((UGCUpdateHandle_t)handle, (ERemoteStoragePublishedFileVisibility)eVisibility);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemTags(void *linux_side, UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t * pTags)
+{
+ return ((ISteamUGC*)linux_side)->SetItemTags((UGCUpdateHandle_t)updateHandle, (const SteamParamStringArray_t *)pTags);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemContent(void *linux_side, UGCUpdateHandle_t handle, const char * pszContentFolder)
+{
+ return ((ISteamUGC*)linux_side)->SetItemContent((UGCUpdateHandle_t)handle, (const char *)pszContentFolder);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemPreview(void *linux_side, UGCUpdateHandle_t handle, const char * pszPreviewFile)
+{
+ return ((ISteamUGC*)linux_side)->SetItemPreview((UGCUpdateHandle_t)handle, (const char *)pszPreviewFile);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_RemoveItemKeyValueTags(void *linux_side, UGCUpdateHandle_t handle, const char * pchKey)
+{
+ return ((ISteamUGC*)linux_side)->RemoveItemKeyValueTags((UGCUpdateHandle_t)handle, (const char *)pchKey);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemKeyValueTag(void *linux_side, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue)
+{
+ return ((ISteamUGC*)linux_side)->AddItemKeyValueTag((UGCUpdateHandle_t)handle, (const char *)pchKey, (const char *)pchValue);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemPreviewFile(void *linux_side, UGCUpdateHandle_t handle, const char * pszPreviewFile, EItemPreviewType type)
+{
+ return ((ISteamUGC*)linux_side)->AddItemPreviewFile((UGCUpdateHandle_t)handle, (const char *)pszPreviewFile, (EItemPreviewType)type);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemPreviewVideo(void *linux_side, UGCUpdateHandle_t handle, const char * pszVideoID)
+{
+ return ((ISteamUGC*)linux_side)->AddItemPreviewVideo((UGCUpdateHandle_t)handle, (const char *)pszVideoID);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_UpdateItemPreviewFile(void *linux_side, UGCUpdateHandle_t handle, uint32 index, const char * pszPreviewFile)
+{
+ return ((ISteamUGC*)linux_side)->UpdateItemPreviewFile((UGCUpdateHandle_t)handle, (uint32)index, (const char *)pszPreviewFile);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_UpdateItemPreviewVideo(void *linux_side, UGCUpdateHandle_t handle, uint32 index, const char * pszVideoID)
+{
+ return ((ISteamUGC*)linux_side)->UpdateItemPreviewVideo((UGCUpdateHandle_t)handle, (uint32)index, (const char *)pszVideoID);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_RemoveItemPreview(void *linux_side, UGCUpdateHandle_t handle, uint32 index)
+{
+ return ((ISteamUGC*)linux_side)->RemoveItemPreview((UGCUpdateHandle_t)handle, (uint32)index);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SubmitItemUpdate(void *linux_side, UGCUpdateHandle_t handle, const char * pchChangeNote)
+{
+ return ((ISteamUGC*)linux_side)->SubmitItemUpdate((UGCUpdateHandle_t)handle, (const char *)pchChangeNote);
+}
+
+EItemUpdateStatus cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemUpdateProgress(void *linux_side, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal)
+{
+ return ((ISteamUGC*)linux_side)->GetItemUpdateProgress((UGCUpdateHandle_t)handle, (uint64 *)punBytesProcessed, (uint64 *)punBytesTotal);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetUserItemVote(void *linux_side, PublishedFileId_t nPublishedFileID, bool bVoteUp)
+{
+ return ((ISteamUGC*)linux_side)->SetUserItemVote((PublishedFileId_t)nPublishedFileID, (bool)bVoteUp);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetUserItemVote(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->GetUserItemVote((PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemToFavorites(void *linux_side, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->AddItemToFavorites((AppId_t)nAppId, (PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_RemoveItemFromFavorites(void *linux_side, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->RemoveItemFromFavorites((AppId_t)nAppId, (PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SubscribeItem(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->SubscribeItem((PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_UnsubscribeItem(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->UnsubscribeItem((PublishedFileId_t)nPublishedFileID);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetNumSubscribedItems(void *linux_side)
+{
+ return ((ISteamUGC*)linux_side)->GetNumSubscribedItems();
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetSubscribedItems(void *linux_side, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ return ((ISteamUGC*)linux_side)->GetSubscribedItems((PublishedFileId_t *)pvecPublishedFileID, (uint32)cMaxEntries);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemState(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->GetItemState((PublishedFileId_t)nPublishedFileID);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemInstallInfo(void *linux_side, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp)
+{
+ return ((ISteamUGC*)linux_side)->GetItemInstallInfo((PublishedFileId_t)nPublishedFileID, (uint64 *)punSizeOnDisk, (char *)pchFolder, (uint32)cchFolderSize, (uint32 *)punTimeStamp);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemDownloadInfo(void *linux_side, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal)
+{
+ return ((ISteamUGC*)linux_side)->GetItemDownloadInfo((PublishedFileId_t)nPublishedFileID, (uint64 *)punBytesDownloaded, (uint64 *)punBytesTotal);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_DownloadItem(void *linux_side, PublishedFileId_t nPublishedFileID, bool bHighPriority)
+{
+ return ((ISteamUGC*)linux_side)->DownloadItem((PublishedFileId_t)nPublishedFileID, (bool)bHighPriority);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_BInitWorkshopForGameServer(void *linux_side, DepotId_t unWorkshopDepotID, const char * pszFolder)
+{
+ return ((ISteamUGC*)linux_side)->BInitWorkshopForGameServer((DepotId_t)unWorkshopDepotID, (const char *)pszFolder);
+}
+
+void cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SuspendDownloads(void *linux_side, bool bSuspend)
+{
+ ((ISteamUGC*)linux_side)->SuspendDownloads((bool)bSuspend);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION008.h b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION008.h
new file mode 100644
index 00000000..b3d62039
--- /dev/null
+++ b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION008.h
@@ -0,0 +1,69 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateQueryUserUGCRequest(void *, AccountID_t, EUserUGCList, EUGCMatchingUGCType, EUserUGCListSortOrder, AppId_t, AppId_t, uint32);
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateQueryAllUGCRequest(void *, EUGCQuery, EUGCMatchingUGCType, AppId_t, AppId_t, uint32);
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateQueryUGCDetailsRequest(void *, PublishedFileId_t *, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SendQueryUGCRequest(void *, UGCQueryHandle_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCResult(void *, UGCQueryHandle_t, uint32, SteamUGCDetails_t *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCPreviewURL(void *, UGCQueryHandle_t, uint32, char *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCMetadata(void *, UGCQueryHandle_t, uint32, char *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCChildren(void *, UGCQueryHandle_t, uint32, PublishedFileId_t *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCStatistic(void *, UGCQueryHandle_t, uint32, EItemStatistic, uint32 *);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCNumAdditionalPreviews(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCAdditionalPreview(void *, UGCQueryHandle_t, uint32, uint32, char *, uint32, char *, uint32, EItemPreviewType *);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCNumKeyValueTags(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCKeyValueTag(void *, UGCQueryHandle_t, uint32, uint32, char *, uint32, char *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_ReleaseQueryUGCRequest(void *, UGCQueryHandle_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddRequiredTag(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddExcludedTag(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnKeyValueTags(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnLongDescription(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnMetadata(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnChildren(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnAdditionalPreviews(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnTotalOnly(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetLanguage(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetAllowCachedResponse(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetCloudFileNameFilter(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetMatchAnyTag(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetSearchText(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetRankedByTrendDays(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddRequiredKeyValueTag(void *, UGCQueryHandle_t, const char *, const char *);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_RequestUGCDetails(void *, PublishedFileId_t, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateItem(void *, AppId_t, EWorkshopFileType);
+extern UGCUpdateHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_StartItemUpdate(void *, AppId_t, PublishedFileId_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemTitle(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemDescription(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemUpdateLanguage(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemMetadata(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemVisibility(void *, UGCUpdateHandle_t, ERemoteStoragePublishedFileVisibility);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemTags(void *, UGCUpdateHandle_t, const SteamParamStringArray_t *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemContent(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemPreview(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_RemoveItemKeyValueTags(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemKeyValueTag(void *, UGCUpdateHandle_t, const char *, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemPreviewFile(void *, UGCUpdateHandle_t, const char *, EItemPreviewType);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemPreviewVideo(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_UpdateItemPreviewFile(void *, UGCUpdateHandle_t, uint32, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_UpdateItemPreviewVideo(void *, UGCUpdateHandle_t, uint32, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_RemoveItemPreview(void *, UGCUpdateHandle_t, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SubmitItemUpdate(void *, UGCUpdateHandle_t, const char *);
+extern EItemUpdateStatus cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemUpdateProgress(void *, UGCUpdateHandle_t, uint64 *, uint64 *);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetUserItemVote(void *, PublishedFileId_t, bool);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetUserItemVote(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemToFavorites(void *, AppId_t, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_RemoveItemFromFavorites(void *, AppId_t, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SubscribeItem(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_UnsubscribeItem(void *, PublishedFileId_t);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetNumSubscribedItems(void *);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetSubscribedItems(void *, PublishedFileId_t *, uint32);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemState(void *, PublishedFileId_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemInstallInfo(void *, PublishedFileId_t, uint64 *, char *, uint32, uint32 *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemDownloadInfo(void *, PublishedFileId_t, uint64 *, uint64 *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_DownloadItem(void *, PublishedFileId_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_BInitWorkshopForGameServer(void *, DepotId_t, const char *);
+extern void cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SuspendDownloads(void *, bool);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION009.cpp b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION009.cpp
new file mode 100644
index 00000000..bd4e7776
--- /dev/null
+++ b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION009.cpp
@@ -0,0 +1,345 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_139/steam_api.h"
+#include "cppISteamUGC_STEAMUGC_INTERFACE_VERSION009.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateQueryUserUGCRequest(void *linux_side, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryUserUGCRequest((AccountID_t)unAccountID, (EUserUGCList)eListType, (EUGCMatchingUGCType)eMatchingUGCType, (EUserUGCListSortOrder)eSortOrder, (AppId_t)nCreatorAppID, (AppId_t)nConsumerAppID, (uint32)unPage);
+}
+
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateQueryAllUGCRequest(void *linux_side, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryAllUGCRequest((EUGCQuery)eQueryType, (EUGCMatchingUGCType)eMatchingeMatchingUGCTypeFileType, (AppId_t)nCreatorAppID, (AppId_t)nConsumerAppID, (uint32)unPage);
+}
+
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateQueryUGCDetailsRequest(void *linux_side, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryUGCDetailsRequest((PublishedFileId_t *)pvecPublishedFileID, (uint32)unNumPublishedFileIDs);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SendQueryUGCRequest(void *linux_side, UGCQueryHandle_t handle)
+{
+ return ((ISteamUGC*)linux_side)->SendQueryUGCRequest((UGCQueryHandle_t)handle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCResult(void *linux_side, UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t * pDetails)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCResult((UGCQueryHandle_t)handle, (uint32)index, (SteamUGCDetails_t *)pDetails);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCPreviewURL(void *linux_side, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCPreviewURL((UGCQueryHandle_t)handle, (uint32)index, (char *)pchURL, (uint32)cchURLSize);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCMetadata(void *linux_side, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCMetadata((UGCQueryHandle_t)handle, (uint32)index, (char *)pchMetadata, (uint32)cchMetadatasize);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCChildren(void *linux_side, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCChildren((UGCQueryHandle_t)handle, (uint32)index, (PublishedFileId_t *)pvecPublishedFileID, (uint32)cMaxEntries);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCStatistic(void *linux_side, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint64 * pStatValue)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCStatistic((UGCQueryHandle_t)handle, (uint32)index, (EItemStatistic)eStatType, (uint64 *)pStatValue);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCNumAdditionalPreviews(void *linux_side, UGCQueryHandle_t handle, uint32 index)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCNumAdditionalPreviews((UGCQueryHandle_t)handle, (uint32)index);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCAdditionalPreview(void *linux_side, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, char * pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType * pPreviewType)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCAdditionalPreview((UGCQueryHandle_t)handle, (uint32)index, (uint32)previewIndex, (char *)pchURLOrVideoID, (uint32)cchURLSize, (char *)pchOriginalFileName, (uint32)cchOriginalFileNameSize, (EItemPreviewType *)pPreviewType);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCNumKeyValueTags(void *linux_side, UGCQueryHandle_t handle, uint32 index)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCNumKeyValueTags((UGCQueryHandle_t)handle, (uint32)index);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCKeyValueTag(void *linux_side, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCKeyValueTag((UGCQueryHandle_t)handle, (uint32)index, (uint32)keyValueTagIndex, (char *)pchKey, (uint32)cchKeySize, (char *)pchValue, (uint32)cchValueSize);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_ReleaseQueryUGCRequest(void *linux_side, UGCQueryHandle_t handle)
+{
+ return ((ISteamUGC*)linux_side)->ReleaseQueryUGCRequest((UGCQueryHandle_t)handle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddRequiredTag(void *linux_side, UGCQueryHandle_t handle, const char * pTagName)
+{
+ return ((ISteamUGC*)linux_side)->AddRequiredTag((UGCQueryHandle_t)handle, (const char *)pTagName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddExcludedTag(void *linux_side, UGCQueryHandle_t handle, const char * pTagName)
+{
+ return ((ISteamUGC*)linux_side)->AddExcludedTag((UGCQueryHandle_t)handle, (const char *)pTagName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnOnlyIDs(void *linux_side, UGCQueryHandle_t handle, bool bReturnOnlyIDs)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnOnlyIDs((UGCQueryHandle_t)handle, (bool)bReturnOnlyIDs);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnKeyValueTags(void *linux_side, UGCQueryHandle_t handle, bool bReturnKeyValueTags)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnKeyValueTags((UGCQueryHandle_t)handle, (bool)bReturnKeyValueTags);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnLongDescription(void *linux_side, UGCQueryHandle_t handle, bool bReturnLongDescription)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnLongDescription((UGCQueryHandle_t)handle, (bool)bReturnLongDescription);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnMetadata(void *linux_side, UGCQueryHandle_t handle, bool bReturnMetadata)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnMetadata((UGCQueryHandle_t)handle, (bool)bReturnMetadata);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnChildren(void *linux_side, UGCQueryHandle_t handle, bool bReturnChildren)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnChildren((UGCQueryHandle_t)handle, (bool)bReturnChildren);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnAdditionalPreviews(void *linux_side, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnAdditionalPreviews((UGCQueryHandle_t)handle, (bool)bReturnAdditionalPreviews);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnTotalOnly(void *linux_side, UGCQueryHandle_t handle, bool bReturnTotalOnly)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnTotalOnly((UGCQueryHandle_t)handle, (bool)bReturnTotalOnly);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetLanguage(void *linux_side, UGCQueryHandle_t handle, const char * pchLanguage)
+{
+ return ((ISteamUGC*)linux_side)->SetLanguage((UGCQueryHandle_t)handle, (const char *)pchLanguage);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetAllowCachedResponse(void *linux_side, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds)
+{
+ return ((ISteamUGC*)linux_side)->SetAllowCachedResponse((UGCQueryHandle_t)handle, (uint32)unMaxAgeSeconds);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetCloudFileNameFilter(void *linux_side, UGCQueryHandle_t handle, const char * pMatchCloudFileName)
+{
+ return ((ISteamUGC*)linux_side)->SetCloudFileNameFilter((UGCQueryHandle_t)handle, (const char *)pMatchCloudFileName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetMatchAnyTag(void *linux_side, UGCQueryHandle_t handle, bool bMatchAnyTag)
+{
+ return ((ISteamUGC*)linux_side)->SetMatchAnyTag((UGCQueryHandle_t)handle, (bool)bMatchAnyTag);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetSearchText(void *linux_side, UGCQueryHandle_t handle, const char * pSearchText)
+{
+ return ((ISteamUGC*)linux_side)->SetSearchText((UGCQueryHandle_t)handle, (const char *)pSearchText);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetRankedByTrendDays(void *linux_side, UGCQueryHandle_t handle, uint32 unDays)
+{
+ return ((ISteamUGC*)linux_side)->SetRankedByTrendDays((UGCQueryHandle_t)handle, (uint32)unDays);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddRequiredKeyValueTag(void *linux_side, UGCQueryHandle_t handle, const char * pKey, const char * pValue)
+{
+ return ((ISteamUGC*)linux_side)->AddRequiredKeyValueTag((UGCQueryHandle_t)handle, (const char *)pKey, (const char *)pValue);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_RequestUGCDetails(void *linux_side, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds)
+{
+ return ((ISteamUGC*)linux_side)->RequestUGCDetails((PublishedFileId_t)nPublishedFileID, (uint32)unMaxAgeSeconds);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateItem(void *linux_side, AppId_t nConsumerAppId, EWorkshopFileType eFileType)
+{
+ return ((ISteamUGC*)linux_side)->CreateItem((AppId_t)nConsumerAppId, (EWorkshopFileType)eFileType);
+}
+
+UGCUpdateHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_StartItemUpdate(void *linux_side, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->StartItemUpdate((AppId_t)nConsumerAppId, (PublishedFileId_t)nPublishedFileID);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemTitle(void *linux_side, UGCUpdateHandle_t handle, const char * pchTitle)
+{
+ return ((ISteamUGC*)linux_side)->SetItemTitle((UGCUpdateHandle_t)handle, (const char *)pchTitle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemDescription(void *linux_side, UGCUpdateHandle_t handle, const char * pchDescription)
+{
+ return ((ISteamUGC*)linux_side)->SetItemDescription((UGCUpdateHandle_t)handle, (const char *)pchDescription);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemUpdateLanguage(void *linux_side, UGCUpdateHandle_t handle, const char * pchLanguage)
+{
+ return ((ISteamUGC*)linux_side)->SetItemUpdateLanguage((UGCUpdateHandle_t)handle, (const char *)pchLanguage);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemMetadata(void *linux_side, UGCUpdateHandle_t handle, const char * pchMetaData)
+{
+ return ((ISteamUGC*)linux_side)->SetItemMetadata((UGCUpdateHandle_t)handle, (const char *)pchMetaData);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemVisibility(void *linux_side, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ return ((ISteamUGC*)linux_side)->SetItemVisibility((UGCUpdateHandle_t)handle, (ERemoteStoragePublishedFileVisibility)eVisibility);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemTags(void *linux_side, UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t * pTags)
+{
+ return ((ISteamUGC*)linux_side)->SetItemTags((UGCUpdateHandle_t)updateHandle, (const SteamParamStringArray_t *)pTags);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemContent(void *linux_side, UGCUpdateHandle_t handle, const char * pszContentFolder)
+{
+ return ((ISteamUGC*)linux_side)->SetItemContent((UGCUpdateHandle_t)handle, (const char *)pszContentFolder);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemPreview(void *linux_side, UGCUpdateHandle_t handle, const char * pszPreviewFile)
+{
+ return ((ISteamUGC*)linux_side)->SetItemPreview((UGCUpdateHandle_t)handle, (const char *)pszPreviewFile);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_RemoveItemKeyValueTags(void *linux_side, UGCUpdateHandle_t handle, const char * pchKey)
+{
+ return ((ISteamUGC*)linux_side)->RemoveItemKeyValueTags((UGCUpdateHandle_t)handle, (const char *)pchKey);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemKeyValueTag(void *linux_side, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue)
+{
+ return ((ISteamUGC*)linux_side)->AddItemKeyValueTag((UGCUpdateHandle_t)handle, (const char *)pchKey, (const char *)pchValue);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemPreviewFile(void *linux_side, UGCUpdateHandle_t handle, const char * pszPreviewFile, EItemPreviewType type)
+{
+ return ((ISteamUGC*)linux_side)->AddItemPreviewFile((UGCUpdateHandle_t)handle, (const char *)pszPreviewFile, (EItemPreviewType)type);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemPreviewVideo(void *linux_side, UGCUpdateHandle_t handle, const char * pszVideoID)
+{
+ return ((ISteamUGC*)linux_side)->AddItemPreviewVideo((UGCUpdateHandle_t)handle, (const char *)pszVideoID);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_UpdateItemPreviewFile(void *linux_side, UGCUpdateHandle_t handle, uint32 index, const char * pszPreviewFile)
+{
+ return ((ISteamUGC*)linux_side)->UpdateItemPreviewFile((UGCUpdateHandle_t)handle, (uint32)index, (const char *)pszPreviewFile);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_UpdateItemPreviewVideo(void *linux_side, UGCUpdateHandle_t handle, uint32 index, const char * pszVideoID)
+{
+ return ((ISteamUGC*)linux_side)->UpdateItemPreviewVideo((UGCUpdateHandle_t)handle, (uint32)index, (const char *)pszVideoID);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_RemoveItemPreview(void *linux_side, UGCUpdateHandle_t handle, uint32 index)
+{
+ return ((ISteamUGC*)linux_side)->RemoveItemPreview((UGCUpdateHandle_t)handle, (uint32)index);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SubmitItemUpdate(void *linux_side, UGCUpdateHandle_t handle, const char * pchChangeNote)
+{
+ return ((ISteamUGC*)linux_side)->SubmitItemUpdate((UGCUpdateHandle_t)handle, (const char *)pchChangeNote);
+}
+
+EItemUpdateStatus cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemUpdateProgress(void *linux_side, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal)
+{
+ return ((ISteamUGC*)linux_side)->GetItemUpdateProgress((UGCUpdateHandle_t)handle, (uint64 *)punBytesProcessed, (uint64 *)punBytesTotal);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetUserItemVote(void *linux_side, PublishedFileId_t nPublishedFileID, bool bVoteUp)
+{
+ return ((ISteamUGC*)linux_side)->SetUserItemVote((PublishedFileId_t)nPublishedFileID, (bool)bVoteUp);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetUserItemVote(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->GetUserItemVote((PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemToFavorites(void *linux_side, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->AddItemToFavorites((AppId_t)nAppId, (PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_RemoveItemFromFavorites(void *linux_side, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->RemoveItemFromFavorites((AppId_t)nAppId, (PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SubscribeItem(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->SubscribeItem((PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_UnsubscribeItem(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->UnsubscribeItem((PublishedFileId_t)nPublishedFileID);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetNumSubscribedItems(void *linux_side)
+{
+ return ((ISteamUGC*)linux_side)->GetNumSubscribedItems();
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetSubscribedItems(void *linux_side, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ return ((ISteamUGC*)linux_side)->GetSubscribedItems((PublishedFileId_t *)pvecPublishedFileID, (uint32)cMaxEntries);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemState(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->GetItemState((PublishedFileId_t)nPublishedFileID);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemInstallInfo(void *linux_side, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp)
+{
+ return ((ISteamUGC*)linux_side)->GetItemInstallInfo((PublishedFileId_t)nPublishedFileID, (uint64 *)punSizeOnDisk, (char *)pchFolder, (uint32)cchFolderSize, (uint32 *)punTimeStamp);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemDownloadInfo(void *linux_side, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal)
+{
+ return ((ISteamUGC*)linux_side)->GetItemDownloadInfo((PublishedFileId_t)nPublishedFileID, (uint64 *)punBytesDownloaded, (uint64 *)punBytesTotal);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_DownloadItem(void *linux_side, PublishedFileId_t nPublishedFileID, bool bHighPriority)
+{
+ return ((ISteamUGC*)linux_side)->DownloadItem((PublishedFileId_t)nPublishedFileID, (bool)bHighPriority);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_BInitWorkshopForGameServer(void *linux_side, DepotId_t unWorkshopDepotID, const char * pszFolder)
+{
+ return ((ISteamUGC*)linux_side)->BInitWorkshopForGameServer((DepotId_t)unWorkshopDepotID, (const char *)pszFolder);
+}
+
+void cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SuspendDownloads(void *linux_side, bool bSuspend)
+{
+ ((ISteamUGC*)linux_side)->SuspendDownloads((bool)bSuspend);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_StartPlaytimeTracking(void *linux_side, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs)
+{
+ return ((ISteamUGC*)linux_side)->StartPlaytimeTracking((PublishedFileId_t *)pvecPublishedFileID, (uint32)unNumPublishedFileIDs);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_StopPlaytimeTracking(void *linux_side, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs)
+{
+ return ((ISteamUGC*)linux_side)->StopPlaytimeTracking((PublishedFileId_t *)pvecPublishedFileID, (uint32)unNumPublishedFileIDs);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_StopPlaytimeTrackingForAllItems(void *linux_side)
+{
+ return ((ISteamUGC*)linux_side)->StopPlaytimeTrackingForAllItems();
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION009.h b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION009.h
new file mode 100644
index 00000000..ccb97956
--- /dev/null
+++ b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION009.h
@@ -0,0 +1,73 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateQueryUserUGCRequest(void *, AccountID_t, EUserUGCList, EUGCMatchingUGCType, EUserUGCListSortOrder, AppId_t, AppId_t, uint32);
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateQueryAllUGCRequest(void *, EUGCQuery, EUGCMatchingUGCType, AppId_t, AppId_t, uint32);
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateQueryUGCDetailsRequest(void *, PublishedFileId_t *, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SendQueryUGCRequest(void *, UGCQueryHandle_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCResult(void *, UGCQueryHandle_t, uint32, SteamUGCDetails_t *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCPreviewURL(void *, UGCQueryHandle_t, uint32, char *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCMetadata(void *, UGCQueryHandle_t, uint32, char *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCChildren(void *, UGCQueryHandle_t, uint32, PublishedFileId_t *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCStatistic(void *, UGCQueryHandle_t, uint32, EItemStatistic, uint64 *);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCNumAdditionalPreviews(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCAdditionalPreview(void *, UGCQueryHandle_t, uint32, uint32, char *, uint32, char *, uint32, EItemPreviewType *);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCNumKeyValueTags(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCKeyValueTag(void *, UGCQueryHandle_t, uint32, uint32, char *, uint32, char *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_ReleaseQueryUGCRequest(void *, UGCQueryHandle_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddRequiredTag(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddExcludedTag(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnOnlyIDs(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnKeyValueTags(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnLongDescription(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnMetadata(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnChildren(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnAdditionalPreviews(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnTotalOnly(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetLanguage(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetAllowCachedResponse(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetCloudFileNameFilter(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetMatchAnyTag(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetSearchText(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetRankedByTrendDays(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddRequiredKeyValueTag(void *, UGCQueryHandle_t, const char *, const char *);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_RequestUGCDetails(void *, PublishedFileId_t, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateItem(void *, AppId_t, EWorkshopFileType);
+extern UGCUpdateHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_StartItemUpdate(void *, AppId_t, PublishedFileId_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemTitle(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemDescription(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemUpdateLanguage(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemMetadata(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemVisibility(void *, UGCUpdateHandle_t, ERemoteStoragePublishedFileVisibility);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemTags(void *, UGCUpdateHandle_t, const SteamParamStringArray_t *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemContent(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemPreview(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_RemoveItemKeyValueTags(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemKeyValueTag(void *, UGCUpdateHandle_t, const char *, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemPreviewFile(void *, UGCUpdateHandle_t, const char *, EItemPreviewType);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemPreviewVideo(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_UpdateItemPreviewFile(void *, UGCUpdateHandle_t, uint32, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_UpdateItemPreviewVideo(void *, UGCUpdateHandle_t, uint32, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_RemoveItemPreview(void *, UGCUpdateHandle_t, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SubmitItemUpdate(void *, UGCUpdateHandle_t, const char *);
+extern EItemUpdateStatus cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemUpdateProgress(void *, UGCUpdateHandle_t, uint64 *, uint64 *);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetUserItemVote(void *, PublishedFileId_t, bool);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetUserItemVote(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemToFavorites(void *, AppId_t, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_RemoveItemFromFavorites(void *, AppId_t, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SubscribeItem(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_UnsubscribeItem(void *, PublishedFileId_t);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetNumSubscribedItems(void *);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetSubscribedItems(void *, PublishedFileId_t *, uint32);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemState(void *, PublishedFileId_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemInstallInfo(void *, PublishedFileId_t, uint64 *, char *, uint32, uint32 *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemDownloadInfo(void *, PublishedFileId_t, uint64 *, uint64 *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_DownloadItem(void *, PublishedFileId_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_BInitWorkshopForGameServer(void *, DepotId_t, const char *);
+extern void cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SuspendDownloads(void *, bool);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_StartPlaytimeTracking(void *, PublishedFileId_t *, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_StopPlaytimeTracking(void *, PublishedFileId_t *, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_StopPlaytimeTrackingForAllItems(void *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION010.cpp b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION010.cpp
new file mode 100644
index 00000000..c087ed00
--- /dev/null
+++ b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION010.cpp
@@ -0,0 +1,380 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamUGC_STEAMUGC_INTERFACE_VERSION010.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateQueryUserUGCRequest(void *linux_side, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryUserUGCRequest((AccountID_t)unAccountID, (EUserUGCList)eListType, (EUGCMatchingUGCType)eMatchingUGCType, (EUserUGCListSortOrder)eSortOrder, (AppId_t)nCreatorAppID, (AppId_t)nConsumerAppID, (uint32)unPage);
+}
+
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateQueryAllUGCRequest(void *linux_side, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryAllUGCRequest((EUGCQuery)eQueryType, (EUGCMatchingUGCType)eMatchingeMatchingUGCTypeFileType, (AppId_t)nCreatorAppID, (AppId_t)nConsumerAppID, (uint32)unPage);
+}
+
+UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateQueryUGCDetailsRequest(void *linux_side, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs)
+{
+ return ((ISteamUGC*)linux_side)->CreateQueryUGCDetailsRequest((PublishedFileId_t *)pvecPublishedFileID, (uint32)unNumPublishedFileIDs);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SendQueryUGCRequest(void *linux_side, UGCQueryHandle_t handle)
+{
+ return ((ISteamUGC*)linux_side)->SendQueryUGCRequest((UGCQueryHandle_t)handle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCResult(void *linux_side, UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t * pDetails)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCResult((UGCQueryHandle_t)handle, (uint32)index, (SteamUGCDetails_t *)pDetails);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCPreviewURL(void *linux_side, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCPreviewURL((UGCQueryHandle_t)handle, (uint32)index, (char *)pchURL, (uint32)cchURLSize);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCMetadata(void *linux_side, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCMetadata((UGCQueryHandle_t)handle, (uint32)index, (char *)pchMetadata, (uint32)cchMetadatasize);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCChildren(void *linux_side, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCChildren((UGCQueryHandle_t)handle, (uint32)index, (PublishedFileId_t *)pvecPublishedFileID, (uint32)cMaxEntries);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCStatistic(void *linux_side, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint64 * pStatValue)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCStatistic((UGCQueryHandle_t)handle, (uint32)index, (EItemStatistic)eStatType, (uint64 *)pStatValue);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCNumAdditionalPreviews(void *linux_side, UGCQueryHandle_t handle, uint32 index)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCNumAdditionalPreviews((UGCQueryHandle_t)handle, (uint32)index);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCAdditionalPreview(void *linux_side, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, char * pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType * pPreviewType)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCAdditionalPreview((UGCQueryHandle_t)handle, (uint32)index, (uint32)previewIndex, (char *)pchURLOrVideoID, (uint32)cchURLSize, (char *)pchOriginalFileName, (uint32)cchOriginalFileNameSize, (EItemPreviewType *)pPreviewType);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCNumKeyValueTags(void *linux_side, UGCQueryHandle_t handle, uint32 index)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCNumKeyValueTags((UGCQueryHandle_t)handle, (uint32)index);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCKeyValueTag(void *linux_side, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize)
+{
+ return ((ISteamUGC*)linux_side)->GetQueryUGCKeyValueTag((UGCQueryHandle_t)handle, (uint32)index, (uint32)keyValueTagIndex, (char *)pchKey, (uint32)cchKeySize, (char *)pchValue, (uint32)cchValueSize);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_ReleaseQueryUGCRequest(void *linux_side, UGCQueryHandle_t handle)
+{
+ return ((ISteamUGC*)linux_side)->ReleaseQueryUGCRequest((UGCQueryHandle_t)handle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddRequiredTag(void *linux_side, UGCQueryHandle_t handle, const char * pTagName)
+{
+ return ((ISteamUGC*)linux_side)->AddRequiredTag((UGCQueryHandle_t)handle, (const char *)pTagName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddExcludedTag(void *linux_side, UGCQueryHandle_t handle, const char * pTagName)
+{
+ return ((ISteamUGC*)linux_side)->AddExcludedTag((UGCQueryHandle_t)handle, (const char *)pTagName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnOnlyIDs(void *linux_side, UGCQueryHandle_t handle, bool bReturnOnlyIDs)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnOnlyIDs((UGCQueryHandle_t)handle, (bool)bReturnOnlyIDs);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnKeyValueTags(void *linux_side, UGCQueryHandle_t handle, bool bReturnKeyValueTags)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnKeyValueTags((UGCQueryHandle_t)handle, (bool)bReturnKeyValueTags);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnLongDescription(void *linux_side, UGCQueryHandle_t handle, bool bReturnLongDescription)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnLongDescription((UGCQueryHandle_t)handle, (bool)bReturnLongDescription);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnMetadata(void *linux_side, UGCQueryHandle_t handle, bool bReturnMetadata)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnMetadata((UGCQueryHandle_t)handle, (bool)bReturnMetadata);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnChildren(void *linux_side, UGCQueryHandle_t handle, bool bReturnChildren)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnChildren((UGCQueryHandle_t)handle, (bool)bReturnChildren);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnAdditionalPreviews(void *linux_side, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnAdditionalPreviews((UGCQueryHandle_t)handle, (bool)bReturnAdditionalPreviews);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnTotalOnly(void *linux_side, UGCQueryHandle_t handle, bool bReturnTotalOnly)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnTotalOnly((UGCQueryHandle_t)handle, (bool)bReturnTotalOnly);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnPlaytimeStats(void *linux_side, UGCQueryHandle_t handle, uint32 unDays)
+{
+ return ((ISteamUGC*)linux_side)->SetReturnPlaytimeStats((UGCQueryHandle_t)handle, (uint32)unDays);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetLanguage(void *linux_side, UGCQueryHandle_t handle, const char * pchLanguage)
+{
+ return ((ISteamUGC*)linux_side)->SetLanguage((UGCQueryHandle_t)handle, (const char *)pchLanguage);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetAllowCachedResponse(void *linux_side, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds)
+{
+ return ((ISteamUGC*)linux_side)->SetAllowCachedResponse((UGCQueryHandle_t)handle, (uint32)unMaxAgeSeconds);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetCloudFileNameFilter(void *linux_side, UGCQueryHandle_t handle, const char * pMatchCloudFileName)
+{
+ return ((ISteamUGC*)linux_side)->SetCloudFileNameFilter((UGCQueryHandle_t)handle, (const char *)pMatchCloudFileName);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetMatchAnyTag(void *linux_side, UGCQueryHandle_t handle, bool bMatchAnyTag)
+{
+ return ((ISteamUGC*)linux_side)->SetMatchAnyTag((UGCQueryHandle_t)handle, (bool)bMatchAnyTag);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetSearchText(void *linux_side, UGCQueryHandle_t handle, const char * pSearchText)
+{
+ return ((ISteamUGC*)linux_side)->SetSearchText((UGCQueryHandle_t)handle, (const char *)pSearchText);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetRankedByTrendDays(void *linux_side, UGCQueryHandle_t handle, uint32 unDays)
+{
+ return ((ISteamUGC*)linux_side)->SetRankedByTrendDays((UGCQueryHandle_t)handle, (uint32)unDays);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddRequiredKeyValueTag(void *linux_side, UGCQueryHandle_t handle, const char * pKey, const char * pValue)
+{
+ return ((ISteamUGC*)linux_side)->AddRequiredKeyValueTag((UGCQueryHandle_t)handle, (const char *)pKey, (const char *)pValue);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_RequestUGCDetails(void *linux_side, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds)
+{
+ return ((ISteamUGC*)linux_side)->RequestUGCDetails((PublishedFileId_t)nPublishedFileID, (uint32)unMaxAgeSeconds);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateItem(void *linux_side, AppId_t nConsumerAppId, EWorkshopFileType eFileType)
+{
+ return ((ISteamUGC*)linux_side)->CreateItem((AppId_t)nConsumerAppId, (EWorkshopFileType)eFileType);
+}
+
+UGCUpdateHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_StartItemUpdate(void *linux_side, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->StartItemUpdate((AppId_t)nConsumerAppId, (PublishedFileId_t)nPublishedFileID);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemTitle(void *linux_side, UGCUpdateHandle_t handle, const char * pchTitle)
+{
+ return ((ISteamUGC*)linux_side)->SetItemTitle((UGCUpdateHandle_t)handle, (const char *)pchTitle);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemDescription(void *linux_side, UGCUpdateHandle_t handle, const char * pchDescription)
+{
+ return ((ISteamUGC*)linux_side)->SetItemDescription((UGCUpdateHandle_t)handle, (const char *)pchDescription);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemUpdateLanguage(void *linux_side, UGCUpdateHandle_t handle, const char * pchLanguage)
+{
+ return ((ISteamUGC*)linux_side)->SetItemUpdateLanguage((UGCUpdateHandle_t)handle, (const char *)pchLanguage);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemMetadata(void *linux_side, UGCUpdateHandle_t handle, const char * pchMetaData)
+{
+ return ((ISteamUGC*)linux_side)->SetItemMetadata((UGCUpdateHandle_t)handle, (const char *)pchMetaData);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemVisibility(void *linux_side, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ return ((ISteamUGC*)linux_side)->SetItemVisibility((UGCUpdateHandle_t)handle, (ERemoteStoragePublishedFileVisibility)eVisibility);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemTags(void *linux_side, UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t * pTags)
+{
+ return ((ISteamUGC*)linux_side)->SetItemTags((UGCUpdateHandle_t)updateHandle, (const SteamParamStringArray_t *)pTags);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemContent(void *linux_side, UGCUpdateHandle_t handle, const char * pszContentFolder)
+{
+ return ((ISteamUGC*)linux_side)->SetItemContent((UGCUpdateHandle_t)handle, (const char *)pszContentFolder);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemPreview(void *linux_side, UGCUpdateHandle_t handle, const char * pszPreviewFile)
+{
+ return ((ISteamUGC*)linux_side)->SetItemPreview((UGCUpdateHandle_t)handle, (const char *)pszPreviewFile);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveItemKeyValueTags(void *linux_side, UGCUpdateHandle_t handle, const char * pchKey)
+{
+ return ((ISteamUGC*)linux_side)->RemoveItemKeyValueTags((UGCUpdateHandle_t)handle, (const char *)pchKey);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemKeyValueTag(void *linux_side, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue)
+{
+ return ((ISteamUGC*)linux_side)->AddItemKeyValueTag((UGCUpdateHandle_t)handle, (const char *)pchKey, (const char *)pchValue);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemPreviewFile(void *linux_side, UGCUpdateHandle_t handle, const char * pszPreviewFile, EItemPreviewType type)
+{
+ return ((ISteamUGC*)linux_side)->AddItemPreviewFile((UGCUpdateHandle_t)handle, (const char *)pszPreviewFile, (EItemPreviewType)type);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemPreviewVideo(void *linux_side, UGCUpdateHandle_t handle, const char * pszVideoID)
+{
+ return ((ISteamUGC*)linux_side)->AddItemPreviewVideo((UGCUpdateHandle_t)handle, (const char *)pszVideoID);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_UpdateItemPreviewFile(void *linux_side, UGCUpdateHandle_t handle, uint32 index, const char * pszPreviewFile)
+{
+ return ((ISteamUGC*)linux_side)->UpdateItemPreviewFile((UGCUpdateHandle_t)handle, (uint32)index, (const char *)pszPreviewFile);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_UpdateItemPreviewVideo(void *linux_side, UGCUpdateHandle_t handle, uint32 index, const char * pszVideoID)
+{
+ return ((ISteamUGC*)linux_side)->UpdateItemPreviewVideo((UGCUpdateHandle_t)handle, (uint32)index, (const char *)pszVideoID);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveItemPreview(void *linux_side, UGCUpdateHandle_t handle, uint32 index)
+{
+ return ((ISteamUGC*)linux_side)->RemoveItemPreview((UGCUpdateHandle_t)handle, (uint32)index);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SubmitItemUpdate(void *linux_side, UGCUpdateHandle_t handle, const char * pchChangeNote)
+{
+ return ((ISteamUGC*)linux_side)->SubmitItemUpdate((UGCUpdateHandle_t)handle, (const char *)pchChangeNote);
+}
+
+EItemUpdateStatus cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemUpdateProgress(void *linux_side, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal)
+{
+ return ((ISteamUGC*)linux_side)->GetItemUpdateProgress((UGCUpdateHandle_t)handle, (uint64 *)punBytesProcessed, (uint64 *)punBytesTotal);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetUserItemVote(void *linux_side, PublishedFileId_t nPublishedFileID, bool bVoteUp)
+{
+ return ((ISteamUGC*)linux_side)->SetUserItemVote((PublishedFileId_t)nPublishedFileID, (bool)bVoteUp);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetUserItemVote(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->GetUserItemVote((PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemToFavorites(void *linux_side, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->AddItemToFavorites((AppId_t)nAppId, (PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveItemFromFavorites(void *linux_side, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->RemoveItemFromFavorites((AppId_t)nAppId, (PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SubscribeItem(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->SubscribeItem((PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_UnsubscribeItem(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->UnsubscribeItem((PublishedFileId_t)nPublishedFileID);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetNumSubscribedItems(void *linux_side)
+{
+ return ((ISteamUGC*)linux_side)->GetNumSubscribedItems();
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetSubscribedItems(void *linux_side, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ return ((ISteamUGC*)linux_side)->GetSubscribedItems((PublishedFileId_t *)pvecPublishedFileID, (uint32)cMaxEntries);
+}
+
+uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemState(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->GetItemState((PublishedFileId_t)nPublishedFileID);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemInstallInfo(void *linux_side, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp)
+{
+ return ((ISteamUGC*)linux_side)->GetItemInstallInfo((PublishedFileId_t)nPublishedFileID, (uint64 *)punSizeOnDisk, (char *)pchFolder, (uint32)cchFolderSize, (uint32 *)punTimeStamp);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemDownloadInfo(void *linux_side, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal)
+{
+ return ((ISteamUGC*)linux_side)->GetItemDownloadInfo((PublishedFileId_t)nPublishedFileID, (uint64 *)punBytesDownloaded, (uint64 *)punBytesTotal);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_DownloadItem(void *linux_side, PublishedFileId_t nPublishedFileID, bool bHighPriority)
+{
+ return ((ISteamUGC*)linux_side)->DownloadItem((PublishedFileId_t)nPublishedFileID, (bool)bHighPriority);
+}
+
+bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_BInitWorkshopForGameServer(void *linux_side, DepotId_t unWorkshopDepotID, const char * pszFolder)
+{
+ return ((ISteamUGC*)linux_side)->BInitWorkshopForGameServer((DepotId_t)unWorkshopDepotID, (const char *)pszFolder);
+}
+
+void cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SuspendDownloads(void *linux_side, bool bSuspend)
+{
+ ((ISteamUGC*)linux_side)->SuspendDownloads((bool)bSuspend);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_StartPlaytimeTracking(void *linux_side, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs)
+{
+ return ((ISteamUGC*)linux_side)->StartPlaytimeTracking((PublishedFileId_t *)pvecPublishedFileID, (uint32)unNumPublishedFileIDs);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_StopPlaytimeTracking(void *linux_side, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs)
+{
+ return ((ISteamUGC*)linux_side)->StopPlaytimeTracking((PublishedFileId_t *)pvecPublishedFileID, (uint32)unNumPublishedFileIDs);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_StopPlaytimeTrackingForAllItems(void *linux_side)
+{
+ return ((ISteamUGC*)linux_side)->StopPlaytimeTrackingForAllItems();
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddDependency(void *linux_side, PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->AddDependency((PublishedFileId_t)nParentPublishedFileID, (PublishedFileId_t)nChildPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveDependency(void *linux_side, PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->RemoveDependency((PublishedFileId_t)nParentPublishedFileID, (PublishedFileId_t)nChildPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddAppDependency(void *linux_side, PublishedFileId_t nPublishedFileID, AppId_t nAppID)
+{
+ return ((ISteamUGC*)linux_side)->AddAppDependency((PublishedFileId_t)nPublishedFileID, (AppId_t)nAppID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveAppDependency(void *linux_side, PublishedFileId_t nPublishedFileID, AppId_t nAppID)
+{
+ return ((ISteamUGC*)linux_side)->RemoveAppDependency((PublishedFileId_t)nPublishedFileID, (AppId_t)nAppID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetAppDependencies(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->GetAppDependencies((PublishedFileId_t)nPublishedFileID);
+}
+
+SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_DeleteItem(void *linux_side, PublishedFileId_t nPublishedFileID)
+{
+ return ((ISteamUGC*)linux_side)->DeleteItem((PublishedFileId_t)nPublishedFileID);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION010.h b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION010.h
new file mode 100644
index 00000000..8deadaf6
--- /dev/null
+++ b/lsteamclient/cppISteamUGC_STEAMUGC_INTERFACE_VERSION010.h
@@ -0,0 +1,80 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateQueryUserUGCRequest(void *, AccountID_t, EUserUGCList, EUGCMatchingUGCType, EUserUGCListSortOrder, AppId_t, AppId_t, uint32);
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateQueryAllUGCRequest(void *, EUGCQuery, EUGCMatchingUGCType, AppId_t, AppId_t, uint32);
+extern UGCQueryHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateQueryUGCDetailsRequest(void *, PublishedFileId_t *, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SendQueryUGCRequest(void *, UGCQueryHandle_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCResult(void *, UGCQueryHandle_t, uint32, SteamUGCDetails_t *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCPreviewURL(void *, UGCQueryHandle_t, uint32, char *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCMetadata(void *, UGCQueryHandle_t, uint32, char *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCChildren(void *, UGCQueryHandle_t, uint32, PublishedFileId_t *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCStatistic(void *, UGCQueryHandle_t, uint32, EItemStatistic, uint64 *);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCNumAdditionalPreviews(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCAdditionalPreview(void *, UGCQueryHandle_t, uint32, uint32, char *, uint32, char *, uint32, EItemPreviewType *);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCNumKeyValueTags(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCKeyValueTag(void *, UGCQueryHandle_t, uint32, uint32, char *, uint32, char *, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_ReleaseQueryUGCRequest(void *, UGCQueryHandle_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddRequiredTag(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddExcludedTag(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnOnlyIDs(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnKeyValueTags(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnLongDescription(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnMetadata(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnChildren(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnAdditionalPreviews(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnTotalOnly(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnPlaytimeStats(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetLanguage(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetAllowCachedResponse(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetCloudFileNameFilter(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetMatchAnyTag(void *, UGCQueryHandle_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetSearchText(void *, UGCQueryHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetRankedByTrendDays(void *, UGCQueryHandle_t, uint32);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddRequiredKeyValueTag(void *, UGCQueryHandle_t, const char *, const char *);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_RequestUGCDetails(void *, PublishedFileId_t, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateItem(void *, AppId_t, EWorkshopFileType);
+extern UGCUpdateHandle_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_StartItemUpdate(void *, AppId_t, PublishedFileId_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemTitle(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemDescription(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemUpdateLanguage(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemMetadata(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemVisibility(void *, UGCUpdateHandle_t, ERemoteStoragePublishedFileVisibility);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemTags(void *, UGCUpdateHandle_t, const SteamParamStringArray_t *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemContent(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemPreview(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveItemKeyValueTags(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemKeyValueTag(void *, UGCUpdateHandle_t, const char *, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemPreviewFile(void *, UGCUpdateHandle_t, const char *, EItemPreviewType);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemPreviewVideo(void *, UGCUpdateHandle_t, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_UpdateItemPreviewFile(void *, UGCUpdateHandle_t, uint32, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_UpdateItemPreviewVideo(void *, UGCUpdateHandle_t, uint32, const char *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveItemPreview(void *, UGCUpdateHandle_t, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SubmitItemUpdate(void *, UGCUpdateHandle_t, const char *);
+extern EItemUpdateStatus cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemUpdateProgress(void *, UGCUpdateHandle_t, uint64 *, uint64 *);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetUserItemVote(void *, PublishedFileId_t, bool);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetUserItemVote(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemToFavorites(void *, AppId_t, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveItemFromFavorites(void *, AppId_t, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SubscribeItem(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_UnsubscribeItem(void *, PublishedFileId_t);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetNumSubscribedItems(void *);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetSubscribedItems(void *, PublishedFileId_t *, uint32);
+extern uint32 cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemState(void *, PublishedFileId_t);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemInstallInfo(void *, PublishedFileId_t, uint64 *, char *, uint32, uint32 *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemDownloadInfo(void *, PublishedFileId_t, uint64 *, uint64 *);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_DownloadItem(void *, PublishedFileId_t, bool);
+extern bool cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_BInitWorkshopForGameServer(void *, DepotId_t, const char *);
+extern void cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SuspendDownloads(void *, bool);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_StartPlaytimeTracking(void *, PublishedFileId_t *, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_StopPlaytimeTracking(void *, PublishedFileId_t *, uint32);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_StopPlaytimeTrackingForAllItems(void *);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddDependency(void *, PublishedFileId_t, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveDependency(void *, PublishedFileId_t, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddAppDependency(void *, PublishedFileId_t, AppId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveAppDependency(void *, PublishedFileId_t, AppId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetAppDependencies(void *, PublishedFileId_t);
+extern SteamAPICall_t cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_DeleteItem(void *, PublishedFileId_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001.cpp b/lsteamclient/cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001.cpp
new file mode 100644
index 00000000..9d9e8926
--- /dev/null
+++ b/lsteamclient/cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001.cpp
@@ -0,0 +1,35 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_141/steam_api.h"
+#include "cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+ClientUnifiedMessageHandle cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_SendMethod(void *linux_side, const char * pchServiceMethod, const void * pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext)
+{
+ return ((ISteamUnifiedMessages*)linux_side)->SendMethod((const char *)pchServiceMethod, (const void *)pRequestBuffer, (uint32)unRequestBufferSize, (uint64)unContext);
+}
+
+bool cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_GetMethodResponseInfo(void *linux_side, ClientUnifiedMessageHandle hHandle, uint32 * punResponseSize, EResult * peResult)
+{
+ return ((ISteamUnifiedMessages*)linux_side)->GetMethodResponseInfo((ClientUnifiedMessageHandle)hHandle, (uint32 *)punResponseSize, (EResult *)peResult);
+}
+
+bool cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_GetMethodResponseData(void *linux_side, ClientUnifiedMessageHandle hHandle, void * pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease)
+{
+ return ((ISteamUnifiedMessages*)linux_side)->GetMethodResponseData((ClientUnifiedMessageHandle)hHandle, (void *)pResponseBuffer, (uint32)unResponseBufferSize, (bool)bAutoRelease);
+}
+
+bool cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_ReleaseMethod(void *linux_side, ClientUnifiedMessageHandle hHandle)
+{
+ return ((ISteamUnifiedMessages*)linux_side)->ReleaseMethod((ClientUnifiedMessageHandle)hHandle);
+}
+
+bool cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_SendNotification(void *linux_side, const char * pchServiceNotification, const void * pNotificationBuffer, uint32 unNotificationBufferSize)
+{
+ return ((ISteamUnifiedMessages*)linux_side)->SendNotification((const char *)pchServiceNotification, (const void *)pNotificationBuffer, (uint32)unNotificationBufferSize);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001.h b/lsteamclient/cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001.h
new file mode 100644
index 00000000..2c6b7657
--- /dev/null
+++ b/lsteamclient/cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001.h
@@ -0,0 +1,11 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern ClientUnifiedMessageHandle cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_SendMethod(void *, const char *, const void *, uint32, uint64);
+extern bool cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_GetMethodResponseInfo(void *, ClientUnifiedMessageHandle, uint32 *, EResult *);
+extern bool cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_GetMethodResponseData(void *, ClientUnifiedMessageHandle, void *, uint32, bool);
+extern bool cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_ReleaseMethod(void *, ClientUnifiedMessageHandle);
+extern bool cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_SendNotification(void *, const char *, const void *, uint32);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003.cpp b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003.cpp
new file mode 100644
index 00000000..4b13b948
--- /dev/null
+++ b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003.cpp
@@ -0,0 +1,75 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_102/steam_api.h"
+#include "cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_RequestCurrentStats(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->RequestCurrentStats();
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetStat(void *linux_side, const char * pchName, int32 * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetStat((const char *)pchName, (int32 *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetStat_2(void *linux_side, const char * pchName, float * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetStat((const char *)pchName, (float *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_SetStat(void *linux_side, const char * pchName, int32 nData)
+{
+ return ((ISteamUserStats*)linux_side)->SetStat((const char *)pchName, (int32)nData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_SetStat_2(void *linux_side, const char * pchName, float fData)
+{
+ return ((ISteamUserStats*)linux_side)->SetStat((const char *)pchName, (float)fData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_UpdateAvgRateStat(void *linux_side, const char * pchName, float flCountThisSession, double dSessionLength)
+{
+ return ((ISteamUserStats*)linux_side)->UpdateAvgRateStat((const char *)pchName, (float)flCountThisSession, (double)dSessionLength);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetAchievement(void *linux_side, const char * pchName, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievement((const char *)pchName, (bool *)pbAchieved);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_SetAchievement(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->SetAchievement((const char *)pchName);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_ClearAchievement(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->ClearAchievement((const char *)pchName);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_StoreStats(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->StoreStats();
+}
+
+int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetAchievementIcon(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementIcon((const char *)pchName);
+}
+
+const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetAchievementDisplayAttribute(void *linux_side, const char * pchName, const char * pchKey)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementDisplayAttribute((const char *)pchName, (const char *)pchKey);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_IndicateAchievementProgress(void *linux_side, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress)
+{
+ return ((ISteamUserStats*)linux_side)->IndicateAchievementProgress((const char *)pchName, (uint32)nCurProgress, (uint32)nMaxProgress);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003.h b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003.h
new file mode 100644
index 00000000..16b3071c
--- /dev/null
+++ b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003.h
@@ -0,0 +1,19 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_RequestCurrentStats(void *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetStat(void *, const char *, int32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetStat_2(void *, const char *, float *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_SetStat(void *, const char *, int32);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_SetStat_2(void *, const char *, float);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_UpdateAvgRateStat(void *, const char *, float, double);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetAchievement(void *, const char *, bool *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_SetAchievement(void *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_ClearAchievement(void *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_StoreStats(void *);
+extern int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetAchievementIcon(void *, const char *);
+extern const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetAchievementDisplayAttribute(void *, const char *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_IndicateAchievementProgress(void *, const char *, uint32, uint32);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004.cpp b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004.cpp
new file mode 100644
index 00000000..cbe8c598
--- /dev/null
+++ b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004.cpp
@@ -0,0 +1,95 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_103/steam_api.h"
+#include "cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_RequestCurrentStats(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->RequestCurrentStats();
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetStat(void *linux_side, const char * pchName, int32 * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetStat((const char *)pchName, (int32 *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetStat_2(void *linux_side, const char * pchName, float * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetStat((const char *)pchName, (float *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_SetStat(void *linux_side, const char * pchName, int32 nData)
+{
+ return ((ISteamUserStats*)linux_side)->SetStat((const char *)pchName, (int32)nData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_SetStat_2(void *linux_side, const char * pchName, float fData)
+{
+ return ((ISteamUserStats*)linux_side)->SetStat((const char *)pchName, (float)fData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_UpdateAvgRateStat(void *linux_side, const char * pchName, float flCountThisSession, double dSessionLength)
+{
+ return ((ISteamUserStats*)linux_side)->UpdateAvgRateStat((const char *)pchName, (float)flCountThisSession, (double)dSessionLength);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetAchievement(void *linux_side, const char * pchName, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievement((const char *)pchName, (bool *)pbAchieved);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_SetAchievement(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->SetAchievement((const char *)pchName);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_ClearAchievement(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->ClearAchievement((const char *)pchName);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_StoreStats(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->StoreStats();
+}
+
+int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetAchievementIcon(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementIcon((const char *)pchName);
+}
+
+const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetAchievementDisplayAttribute(void *linux_side, const char * pchName, const char * pchKey)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementDisplayAttribute((const char *)pchName, (const char *)pchKey);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_IndicateAchievementProgress(void *linux_side, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress)
+{
+ return ((ISteamUserStats*)linux_side)->IndicateAchievementProgress((const char *)pchName, (uint32)nCurProgress, (uint32)nMaxProgress);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_RequestUserStats(void *linux_side, CSteamID steamIDUser)
+{
+ return ((ISteamUserStats*)linux_side)->RequestUserStats((CSteamID)steamIDUser);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetUserStat(void *linux_side, CSteamID steamIDUser, const char * pchName, int32 * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserStat((CSteamID)steamIDUser, (const char *)pchName, (int32 *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetUserStat_2(void *linux_side, CSteamID steamIDUser, const char * pchName, float * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserStat((CSteamID)steamIDUser, (const char *)pchName, (float *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetUserAchievement(void *linux_side, CSteamID steamIDUser, const char * pchName, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserAchievement((CSteamID)steamIDUser, (const char *)pchName, (bool *)pbAchieved);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004.h b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004.h
new file mode 100644
index 00000000..b2febe57
--- /dev/null
+++ b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004.h
@@ -0,0 +1,23 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_RequestCurrentStats(void *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetStat(void *, const char *, int32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetStat_2(void *, const char *, float *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_SetStat(void *, const char *, int32);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_SetStat_2(void *, const char *, float);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_UpdateAvgRateStat(void *, const char *, float, double);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetAchievement(void *, const char *, bool *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_SetAchievement(void *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_ClearAchievement(void *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_StoreStats(void *);
+extern int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetAchievementIcon(void *, const char *);
+extern const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetAchievementDisplayAttribute(void *, const char *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_IndicateAchievementProgress(void *, const char *, uint32, uint32);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_RequestUserStats(void *, CSteamID);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetUserStat(void *, CSteamID, const char *, int32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetUserStat_2(void *, CSteamID, const char *, float *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetUserAchievement(void *, CSteamID, const char *, bool *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005.cpp b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005.cpp
new file mode 100644
index 00000000..c3dc0754
--- /dev/null
+++ b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005.cpp
@@ -0,0 +1,145 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_104/steam_api.h"
+#include "cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_RequestCurrentStats(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->RequestCurrentStats();
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetStat(void *linux_side, const char * pchName, int32 * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetStat((const char *)pchName, (int32 *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetStat_2(void *linux_side, const char * pchName, float * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetStat((const char *)pchName, (float *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_SetStat(void *linux_side, const char * pchName, int32 nData)
+{
+ return ((ISteamUserStats*)linux_side)->SetStat((const char *)pchName, (int32)nData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_SetStat_2(void *linux_side, const char * pchName, float fData)
+{
+ return ((ISteamUserStats*)linux_side)->SetStat((const char *)pchName, (float)fData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_UpdateAvgRateStat(void *linux_side, const char * pchName, float flCountThisSession, double dSessionLength)
+{
+ return ((ISteamUserStats*)linux_side)->UpdateAvgRateStat((const char *)pchName, (float)flCountThisSession, (double)dSessionLength);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetAchievement(void *linux_side, const char * pchName, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievement((const char *)pchName, (bool *)pbAchieved);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_SetAchievement(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->SetAchievement((const char *)pchName);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_ClearAchievement(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->ClearAchievement((const char *)pchName);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_StoreStats(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->StoreStats();
+}
+
+int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetAchievementIcon(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementIcon((const char *)pchName);
+}
+
+const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetAchievementDisplayAttribute(void *linux_side, const char * pchName, const char * pchKey)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementDisplayAttribute((const char *)pchName, (const char *)pchKey);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_IndicateAchievementProgress(void *linux_side, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress)
+{
+ return ((ISteamUserStats*)linux_side)->IndicateAchievementProgress((const char *)pchName, (uint32)nCurProgress, (uint32)nMaxProgress);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_RequestUserStats(void *linux_side, CSteamID steamIDUser)
+{
+ return ((ISteamUserStats*)linux_side)->RequestUserStats((CSteamID)steamIDUser);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetUserStat(void *linux_side, CSteamID steamIDUser, const char * pchName, int32 * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserStat((CSteamID)steamIDUser, (const char *)pchName, (int32 *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetUserStat_2(void *linux_side, CSteamID steamIDUser, const char * pchName, float * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserStat((CSteamID)steamIDUser, (const char *)pchName, (float *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetUserAchievement(void *linux_side, CSteamID steamIDUser, const char * pchName, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserAchievement((CSteamID)steamIDUser, (const char *)pchName, (bool *)pbAchieved);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_ResetAllStats(void *linux_side, bool bAchievementsToo)
+{
+ return ((ISteamUserStats*)linux_side)->ResetAllStats((bool)bAchievementsToo);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_FindOrCreateLeaderboard(void *linux_side, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType)
+{
+ return ((ISteamUserStats*)linux_side)->FindOrCreateLeaderboard((const char *)pchLeaderboardName, (ELeaderboardSortMethod)eLeaderboardSortMethod, (ELeaderboardDisplayType)eLeaderboardDisplayType);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_FindLeaderboard(void *linux_side, const char * pchLeaderboardName)
+{
+ return ((ISteamUserStats*)linux_side)->FindLeaderboard((const char *)pchLeaderboardName);
+}
+
+const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardName(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardName((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardEntryCount(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardEntryCount((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+ELeaderboardSortMethod cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardSortMethod(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardSortMethod((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+ELeaderboardDisplayType cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardDisplayType(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardDisplayType((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_DownloadLeaderboardEntries(void *linux_side, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd)
+{
+ return ((ISteamUserStats*)linux_side)->DownloadLeaderboardEntries((SteamLeaderboard_t)hSteamLeaderboard, (ELeaderboardDataRequest)eLeaderboardDataRequest, (int)nRangeStart, (int)nRangeEnd);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetDownloadedLeaderboardEntry(void *linux_side, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax)
+{
+ return ((ISteamUserStats*)linux_side)->GetDownloadedLeaderboardEntry((SteamLeaderboardEntries_t)hSteamLeaderboardEntries, (int)index, (LeaderboardEntry_t *)pLeaderboardEntry, (int32 *)pDetails, (int)cDetailsMax);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_UploadLeaderboardScore(void *linux_side, SteamLeaderboard_t hSteamLeaderboard, int32 nScore, int32 * pScoreDetails, int cScoreDetailsCount)
+{
+ return ((ISteamUserStats*)linux_side)->UploadLeaderboardScore((SteamLeaderboard_t)hSteamLeaderboard, (int32)nScore, (int32 *)pScoreDetails, (int)cScoreDetailsCount);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005.h b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005.h
new file mode 100644
index 00000000..41339622
--- /dev/null
+++ b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005.h
@@ -0,0 +1,33 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_RequestCurrentStats(void *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetStat(void *, const char *, int32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetStat_2(void *, const char *, float *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_SetStat(void *, const char *, int32);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_SetStat_2(void *, const char *, float);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_UpdateAvgRateStat(void *, const char *, float, double);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetAchievement(void *, const char *, bool *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_SetAchievement(void *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_ClearAchievement(void *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_StoreStats(void *);
+extern int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetAchievementIcon(void *, const char *);
+extern const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetAchievementDisplayAttribute(void *, const char *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_IndicateAchievementProgress(void *, const char *, uint32, uint32);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_RequestUserStats(void *, CSteamID);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetUserStat(void *, CSteamID, const char *, int32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetUserStat_2(void *, CSteamID, const char *, float *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetUserAchievement(void *, CSteamID, const char *, bool *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_ResetAllStats(void *, bool);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_FindOrCreateLeaderboard(void *, const char *, ELeaderboardSortMethod, ELeaderboardDisplayType);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_FindLeaderboard(void *, const char *);
+extern const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardName(void *, SteamLeaderboard_t);
+extern int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardEntryCount(void *, SteamLeaderboard_t);
+extern ELeaderboardSortMethod cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardSortMethod(void *, SteamLeaderboard_t);
+extern ELeaderboardDisplayType cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardDisplayType(void *, SteamLeaderboard_t);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_DownloadLeaderboardEntries(void *, SteamLeaderboard_t, ELeaderboardDataRequest, int, int);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetDownloadedLeaderboardEntry(void *, SteamLeaderboardEntries_t, int, LeaderboardEntry_t *, int32 *, int);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_UploadLeaderboardScore(void *, SteamLeaderboard_t, int32, int32 *, int);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006.cpp b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006.cpp
new file mode 100644
index 00000000..a32c0db2
--- /dev/null
+++ b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006.cpp
@@ -0,0 +1,150 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_107/steam_api.h"
+#include "cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_RequestCurrentStats(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->RequestCurrentStats();
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetStat(void *linux_side, const char * pchName, int32 * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetStat((const char *)pchName, (int32 *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetStat_2(void *linux_side, const char * pchName, float * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetStat((const char *)pchName, (float *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_SetStat(void *linux_side, const char * pchName, int32 nData)
+{
+ return ((ISteamUserStats*)linux_side)->SetStat((const char *)pchName, (int32)nData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_SetStat_2(void *linux_side, const char * pchName, float fData)
+{
+ return ((ISteamUserStats*)linux_side)->SetStat((const char *)pchName, (float)fData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_UpdateAvgRateStat(void *linux_side, const char * pchName, float flCountThisSession, double dSessionLength)
+{
+ return ((ISteamUserStats*)linux_side)->UpdateAvgRateStat((const char *)pchName, (float)flCountThisSession, (double)dSessionLength);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetAchievement(void *linux_side, const char * pchName, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievement((const char *)pchName, (bool *)pbAchieved);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_SetAchievement(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->SetAchievement((const char *)pchName);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_ClearAchievement(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->ClearAchievement((const char *)pchName);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_StoreStats(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->StoreStats();
+}
+
+int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetAchievementIcon(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementIcon((const char *)pchName);
+}
+
+const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetAchievementDisplayAttribute(void *linux_side, const char * pchName, const char * pchKey)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementDisplayAttribute((const char *)pchName, (const char *)pchKey);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_IndicateAchievementProgress(void *linux_side, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress)
+{
+ return ((ISteamUserStats*)linux_side)->IndicateAchievementProgress((const char *)pchName, (uint32)nCurProgress, (uint32)nMaxProgress);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_RequestUserStats(void *linux_side, CSteamID steamIDUser)
+{
+ return ((ISteamUserStats*)linux_side)->RequestUserStats((CSteamID)steamIDUser);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetUserStat(void *linux_side, CSteamID steamIDUser, const char * pchName, int32 * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserStat((CSteamID)steamIDUser, (const char *)pchName, (int32 *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetUserStat_2(void *linux_side, CSteamID steamIDUser, const char * pchName, float * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserStat((CSteamID)steamIDUser, (const char *)pchName, (float *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetUserAchievement(void *linux_side, CSteamID steamIDUser, const char * pchName, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserAchievement((CSteamID)steamIDUser, (const char *)pchName, (bool *)pbAchieved);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_ResetAllStats(void *linux_side, bool bAchievementsToo)
+{
+ return ((ISteamUserStats*)linux_side)->ResetAllStats((bool)bAchievementsToo);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_FindOrCreateLeaderboard(void *linux_side, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType)
+{
+ return ((ISteamUserStats*)linux_side)->FindOrCreateLeaderboard((const char *)pchLeaderboardName, (ELeaderboardSortMethod)eLeaderboardSortMethod, (ELeaderboardDisplayType)eLeaderboardDisplayType);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_FindLeaderboard(void *linux_side, const char * pchLeaderboardName)
+{
+ return ((ISteamUserStats*)linux_side)->FindLeaderboard((const char *)pchLeaderboardName);
+}
+
+const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardName(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardName((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardEntryCount(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardEntryCount((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+ELeaderboardSortMethod cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardSortMethod(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardSortMethod((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+ELeaderboardDisplayType cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardDisplayType(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardDisplayType((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_DownloadLeaderboardEntries(void *linux_side, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd)
+{
+ return ((ISteamUserStats*)linux_side)->DownloadLeaderboardEntries((SteamLeaderboard_t)hSteamLeaderboard, (ELeaderboardDataRequest)eLeaderboardDataRequest, (int)nRangeStart, (int)nRangeEnd);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetDownloadedLeaderboardEntry(void *linux_side, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax)
+{
+ return ((ISteamUserStats*)linux_side)->GetDownloadedLeaderboardEntry((SteamLeaderboardEntries_t)hSteamLeaderboardEntries, (int)index, (LeaderboardEntry_t *)pLeaderboardEntry, (int32 *)pDetails, (int)cDetailsMax);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_UploadLeaderboardScore(void *linux_side, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount)
+{
+ return ((ISteamUserStats*)linux_side)->UploadLeaderboardScore((SteamLeaderboard_t)hSteamLeaderboard, (ELeaderboardUploadScoreMethod)eLeaderboardUploadScoreMethod, (int32)nScore, (const int32 *)pScoreDetails, (int)cScoreDetailsCount);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetNumberOfCurrentPlayers(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->GetNumberOfCurrentPlayers();
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006.h b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006.h
new file mode 100644
index 00000000..c3724bd8
--- /dev/null
+++ b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006.h
@@ -0,0 +1,34 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_RequestCurrentStats(void *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetStat(void *, const char *, int32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetStat_2(void *, const char *, float *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_SetStat(void *, const char *, int32);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_SetStat_2(void *, const char *, float);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_UpdateAvgRateStat(void *, const char *, float, double);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetAchievement(void *, const char *, bool *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_SetAchievement(void *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_ClearAchievement(void *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_StoreStats(void *);
+extern int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetAchievementIcon(void *, const char *);
+extern const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetAchievementDisplayAttribute(void *, const char *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_IndicateAchievementProgress(void *, const char *, uint32, uint32);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_RequestUserStats(void *, CSteamID);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetUserStat(void *, CSteamID, const char *, int32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetUserStat_2(void *, CSteamID, const char *, float *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetUserAchievement(void *, CSteamID, const char *, bool *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_ResetAllStats(void *, bool);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_FindOrCreateLeaderboard(void *, const char *, ELeaderboardSortMethod, ELeaderboardDisplayType);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_FindLeaderboard(void *, const char *);
+extern const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardName(void *, SteamLeaderboard_t);
+extern int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardEntryCount(void *, SteamLeaderboard_t);
+extern ELeaderboardSortMethod cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardSortMethod(void *, SteamLeaderboard_t);
+extern ELeaderboardDisplayType cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardDisplayType(void *, SteamLeaderboard_t);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_DownloadLeaderboardEntries(void *, SteamLeaderboard_t, ELeaderboardDataRequest, int, int);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetDownloadedLeaderboardEntry(void *, SteamLeaderboardEntries_t, int, LeaderboardEntry_t *, int32 *, int);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_UploadLeaderboardScore(void *, SteamLeaderboard_t, ELeaderboardUploadScoreMethod, int32, const int32 *, int);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetNumberOfCurrentPlayers(void *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007.cpp b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007.cpp
new file mode 100644
index 00000000..5a7b43e0
--- /dev/null
+++ b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007.cpp
@@ -0,0 +1,160 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_111/steam_api.h"
+#include "cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_RequestCurrentStats(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->RequestCurrentStats();
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetStat(void *linux_side, const char * pchName, int32 * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetStat((const char *)pchName, (int32 *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetStat_2(void *linux_side, const char * pchName, float * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetStat((const char *)pchName, (float *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_SetStat(void *linux_side, const char * pchName, int32 nData)
+{
+ return ((ISteamUserStats*)linux_side)->SetStat((const char *)pchName, (int32)nData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_SetStat_2(void *linux_side, const char * pchName, float fData)
+{
+ return ((ISteamUserStats*)linux_side)->SetStat((const char *)pchName, (float)fData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_UpdateAvgRateStat(void *linux_side, const char * pchName, float flCountThisSession, double dSessionLength)
+{
+ return ((ISteamUserStats*)linux_side)->UpdateAvgRateStat((const char *)pchName, (float)flCountThisSession, (double)dSessionLength);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievement(void *linux_side, const char * pchName, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievement((const char *)pchName, (bool *)pbAchieved);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_SetAchievement(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->SetAchievement((const char *)pchName);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_ClearAchievement(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->ClearAchievement((const char *)pchName);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievementAndUnlockTime(void *linux_side, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementAndUnlockTime((const char *)pchName, (bool *)pbAchieved, (uint32 *)punUnlockTime);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_StoreStats(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->StoreStats();
+}
+
+int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievementIcon(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementIcon((const char *)pchName);
+}
+
+const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievementDisplayAttribute(void *linux_side, const char * pchName, const char * pchKey)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementDisplayAttribute((const char *)pchName, (const char *)pchKey);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_IndicateAchievementProgress(void *linux_side, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress)
+{
+ return ((ISteamUserStats*)linux_side)->IndicateAchievementProgress((const char *)pchName, (uint32)nCurProgress, (uint32)nMaxProgress);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_RequestUserStats(void *linux_side, CSteamID steamIDUser)
+{
+ return ((ISteamUserStats*)linux_side)->RequestUserStats((CSteamID)steamIDUser);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserStat(void *linux_side, CSteamID steamIDUser, const char * pchName, int32 * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserStat((CSteamID)steamIDUser, (const char *)pchName, (int32 *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserStat_2(void *linux_side, CSteamID steamIDUser, const char * pchName, float * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserStat((CSteamID)steamIDUser, (const char *)pchName, (float *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserAchievement(void *linux_side, CSteamID steamIDUser, const char * pchName, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserAchievement((CSteamID)steamIDUser, (const char *)pchName, (bool *)pbAchieved);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserAchievementAndUnlockTime(void *linux_side, CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserAchievementAndUnlockTime((CSteamID)steamIDUser, (const char *)pchName, (bool *)pbAchieved, (uint32 *)punUnlockTime);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_ResetAllStats(void *linux_side, bool bAchievementsToo)
+{
+ return ((ISteamUserStats*)linux_side)->ResetAllStats((bool)bAchievementsToo);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_FindOrCreateLeaderboard(void *linux_side, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType)
+{
+ return ((ISteamUserStats*)linux_side)->FindOrCreateLeaderboard((const char *)pchLeaderboardName, (ELeaderboardSortMethod)eLeaderboardSortMethod, (ELeaderboardDisplayType)eLeaderboardDisplayType);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_FindLeaderboard(void *linux_side, const char * pchLeaderboardName)
+{
+ return ((ISteamUserStats*)linux_side)->FindLeaderboard((const char *)pchLeaderboardName);
+}
+
+const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardName(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardName((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardEntryCount(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardEntryCount((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+ELeaderboardSortMethod cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardSortMethod(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardSortMethod((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+ELeaderboardDisplayType cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardDisplayType(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardDisplayType((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_DownloadLeaderboardEntries(void *linux_side, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd)
+{
+ return ((ISteamUserStats*)linux_side)->DownloadLeaderboardEntries((SteamLeaderboard_t)hSteamLeaderboard, (ELeaderboardDataRequest)eLeaderboardDataRequest, (int)nRangeStart, (int)nRangeEnd);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetDownloadedLeaderboardEntry(void *linux_side, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax)
+{
+ return ((ISteamUserStats*)linux_side)->GetDownloadedLeaderboardEntry((SteamLeaderboardEntries_t)hSteamLeaderboardEntries, (int)index, (LeaderboardEntry_t *)pLeaderboardEntry, (int32 *)pDetails, (int)cDetailsMax);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_UploadLeaderboardScore(void *linux_side, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount)
+{
+ return ((ISteamUserStats*)linux_side)->UploadLeaderboardScore((SteamLeaderboard_t)hSteamLeaderboard, (ELeaderboardUploadScoreMethod)eLeaderboardUploadScoreMethod, (int32)nScore, (const int32 *)pScoreDetails, (int)cScoreDetailsCount);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetNumberOfCurrentPlayers(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->GetNumberOfCurrentPlayers();
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007.h b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007.h
new file mode 100644
index 00000000..ff1b8b1c
--- /dev/null
+++ b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007.h
@@ -0,0 +1,36 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_RequestCurrentStats(void *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetStat(void *, const char *, int32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetStat_2(void *, const char *, float *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_SetStat(void *, const char *, int32);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_SetStat_2(void *, const char *, float);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_UpdateAvgRateStat(void *, const char *, float, double);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievement(void *, const char *, bool *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_SetAchievement(void *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_ClearAchievement(void *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievementAndUnlockTime(void *, const char *, bool *, uint32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_StoreStats(void *);
+extern int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievementIcon(void *, const char *);
+extern const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievementDisplayAttribute(void *, const char *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_IndicateAchievementProgress(void *, const char *, uint32, uint32);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_RequestUserStats(void *, CSteamID);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserStat(void *, CSteamID, const char *, int32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserStat_2(void *, CSteamID, const char *, float *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserAchievement(void *, CSteamID, const char *, bool *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserAchievementAndUnlockTime(void *, CSteamID, const char *, bool *, uint32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_ResetAllStats(void *, bool);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_FindOrCreateLeaderboard(void *, const char *, ELeaderboardSortMethod, ELeaderboardDisplayType);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_FindLeaderboard(void *, const char *);
+extern const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardName(void *, SteamLeaderboard_t);
+extern int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardEntryCount(void *, SteamLeaderboard_t);
+extern ELeaderboardSortMethod cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardSortMethod(void *, SteamLeaderboard_t);
+extern ELeaderboardDisplayType cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardDisplayType(void *, SteamLeaderboard_t);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_DownloadLeaderboardEntries(void *, SteamLeaderboard_t, ELeaderboardDataRequest, int, int);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetDownloadedLeaderboardEntry(void *, SteamLeaderboardEntries_t, int, LeaderboardEntry_t *, int32 *, int);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_UploadLeaderboardScore(void *, SteamLeaderboard_t, ELeaderboardUploadScoreMethod, int32, const int32 *, int);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetNumberOfCurrentPlayers(void *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009.cpp b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009.cpp
new file mode 100644
index 00000000..d6a0720c
--- /dev/null
+++ b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009.cpp
@@ -0,0 +1,170 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_113/steam_api.h"
+#include "cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_RequestCurrentStats(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->RequestCurrentStats();
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetStat(void *linux_side, const char * pchName, int32 * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetStat((const char *)pchName, (int32 *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetStat_2(void *linux_side, const char * pchName, float * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetStat((const char *)pchName, (float *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_SetStat(void *linux_side, const char * pchName, int32 nData)
+{
+ return ((ISteamUserStats*)linux_side)->SetStat((const char *)pchName, (int32)nData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_SetStat_2(void *linux_side, const char * pchName, float fData)
+{
+ return ((ISteamUserStats*)linux_side)->SetStat((const char *)pchName, (float)fData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_UpdateAvgRateStat(void *linux_side, const char * pchName, float flCountThisSession, double dSessionLength)
+{
+ return ((ISteamUserStats*)linux_side)->UpdateAvgRateStat((const char *)pchName, (float)flCountThisSession, (double)dSessionLength);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievement(void *linux_side, const char * pchName, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievement((const char *)pchName, (bool *)pbAchieved);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_SetAchievement(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->SetAchievement((const char *)pchName);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_ClearAchievement(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->ClearAchievement((const char *)pchName);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievementAndUnlockTime(void *linux_side, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementAndUnlockTime((const char *)pchName, (bool *)pbAchieved, (uint32 *)punUnlockTime);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_StoreStats(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->StoreStats();
+}
+
+int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievementIcon(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementIcon((const char *)pchName);
+}
+
+const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievementDisplayAttribute(void *linux_side, const char * pchName, const char * pchKey)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementDisplayAttribute((const char *)pchName, (const char *)pchKey);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_IndicateAchievementProgress(void *linux_side, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress)
+{
+ return ((ISteamUserStats*)linux_side)->IndicateAchievementProgress((const char *)pchName, (uint32)nCurProgress, (uint32)nMaxProgress);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_RequestUserStats(void *linux_side, CSteamID steamIDUser)
+{
+ return ((ISteamUserStats*)linux_side)->RequestUserStats((CSteamID)steamIDUser);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserStat(void *linux_side, CSteamID steamIDUser, const char * pchName, int32 * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserStat((CSteamID)steamIDUser, (const char *)pchName, (int32 *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserStat_2(void *linux_side, CSteamID steamIDUser, const char * pchName, float * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserStat((CSteamID)steamIDUser, (const char *)pchName, (float *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserAchievement(void *linux_side, CSteamID steamIDUser, const char * pchName, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserAchievement((CSteamID)steamIDUser, (const char *)pchName, (bool *)pbAchieved);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserAchievementAndUnlockTime(void *linux_side, CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserAchievementAndUnlockTime((CSteamID)steamIDUser, (const char *)pchName, (bool *)pbAchieved, (uint32 *)punUnlockTime);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_ResetAllStats(void *linux_side, bool bAchievementsToo)
+{
+ return ((ISteamUserStats*)linux_side)->ResetAllStats((bool)bAchievementsToo);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_FindOrCreateLeaderboard(void *linux_side, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType)
+{
+ return ((ISteamUserStats*)linux_side)->FindOrCreateLeaderboard((const char *)pchLeaderboardName, (ELeaderboardSortMethod)eLeaderboardSortMethod, (ELeaderboardDisplayType)eLeaderboardDisplayType);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_FindLeaderboard(void *linux_side, const char * pchLeaderboardName)
+{
+ return ((ISteamUserStats*)linux_side)->FindLeaderboard((const char *)pchLeaderboardName);
+}
+
+const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardName(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardName((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardEntryCount(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardEntryCount((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+ELeaderboardSortMethod cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardSortMethod(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardSortMethod((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+ELeaderboardDisplayType cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardDisplayType(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardDisplayType((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_DownloadLeaderboardEntries(void *linux_side, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd)
+{
+ return ((ISteamUserStats*)linux_side)->DownloadLeaderboardEntries((SteamLeaderboard_t)hSteamLeaderboard, (ELeaderboardDataRequest)eLeaderboardDataRequest, (int)nRangeStart, (int)nRangeEnd);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_DownloadLeaderboardEntriesForUsers(void *linux_side, SteamLeaderboard_t hSteamLeaderboard, CSteamID * prgUsers, int cUsers)
+{
+ return ((ISteamUserStats*)linux_side)->DownloadLeaderboardEntriesForUsers((SteamLeaderboard_t)hSteamLeaderboard, (CSteamID *)prgUsers, (int)cUsers);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetDownloadedLeaderboardEntry(void *linux_side, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax)
+{
+ return ((ISteamUserStats*)linux_side)->GetDownloadedLeaderboardEntry((SteamLeaderboardEntries_t)hSteamLeaderboardEntries, (int)index, (LeaderboardEntry_t *)pLeaderboardEntry, (int32 *)pDetails, (int)cDetailsMax);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_UploadLeaderboardScore(void *linux_side, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount)
+{
+ return ((ISteamUserStats*)linux_side)->UploadLeaderboardScore((SteamLeaderboard_t)hSteamLeaderboard, (ELeaderboardUploadScoreMethod)eLeaderboardUploadScoreMethod, (int32)nScore, (const int32 *)pScoreDetails, (int)cScoreDetailsCount);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_AttachLeaderboardUGC(void *linux_side, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC)
+{
+ return ((ISteamUserStats*)linux_side)->AttachLeaderboardUGC((SteamLeaderboard_t)hSteamLeaderboard, (UGCHandle_t)hUGC);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetNumberOfCurrentPlayers(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->GetNumberOfCurrentPlayers();
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009.h b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009.h
new file mode 100644
index 00000000..43542cf8
--- /dev/null
+++ b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009.h
@@ -0,0 +1,38 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_RequestCurrentStats(void *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetStat(void *, const char *, int32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetStat_2(void *, const char *, float *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_SetStat(void *, const char *, int32);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_SetStat_2(void *, const char *, float);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_UpdateAvgRateStat(void *, const char *, float, double);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievement(void *, const char *, bool *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_SetAchievement(void *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_ClearAchievement(void *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievementAndUnlockTime(void *, const char *, bool *, uint32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_StoreStats(void *);
+extern int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievementIcon(void *, const char *);
+extern const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievementDisplayAttribute(void *, const char *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_IndicateAchievementProgress(void *, const char *, uint32, uint32);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_RequestUserStats(void *, CSteamID);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserStat(void *, CSteamID, const char *, int32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserStat_2(void *, CSteamID, const char *, float *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserAchievement(void *, CSteamID, const char *, bool *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserAchievementAndUnlockTime(void *, CSteamID, const char *, bool *, uint32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_ResetAllStats(void *, bool);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_FindOrCreateLeaderboard(void *, const char *, ELeaderboardSortMethod, ELeaderboardDisplayType);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_FindLeaderboard(void *, const char *);
+extern const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardName(void *, SteamLeaderboard_t);
+extern int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardEntryCount(void *, SteamLeaderboard_t);
+extern ELeaderboardSortMethod cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardSortMethod(void *, SteamLeaderboard_t);
+extern ELeaderboardDisplayType cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardDisplayType(void *, SteamLeaderboard_t);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_DownloadLeaderboardEntries(void *, SteamLeaderboard_t, ELeaderboardDataRequest, int, int);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_DownloadLeaderboardEntriesForUsers(void *, SteamLeaderboard_t, CSteamID *, int);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetDownloadedLeaderboardEntry(void *, SteamLeaderboardEntries_t, int, LeaderboardEntry_t *, int32 *, int);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_UploadLeaderboardScore(void *, SteamLeaderboard_t, ELeaderboardUploadScoreMethod, int32, const int32 *, int);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_AttachLeaderboardUGC(void *, SteamLeaderboard_t, UGCHandle_t);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetNumberOfCurrentPlayers(void *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010.cpp b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010.cpp
new file mode 100644
index 00000000..93ac7897
--- /dev/null
+++ b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010.cpp
@@ -0,0 +1,215 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_119/steam_api.h"
+#include "cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestCurrentStats(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->RequestCurrentStats();
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetStat(void *linux_side, const char * pchName, int32 * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetStat((const char *)pchName, (int32 *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetStat_2(void *linux_side, const char * pchName, float * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetStat((const char *)pchName, (float *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_SetStat(void *linux_side, const char * pchName, int32 nData)
+{
+ return ((ISteamUserStats*)linux_side)->SetStat((const char *)pchName, (int32)nData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_SetStat_2(void *linux_side, const char * pchName, float fData)
+{
+ return ((ISteamUserStats*)linux_side)->SetStat((const char *)pchName, (float)fData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_UpdateAvgRateStat(void *linux_side, const char * pchName, float flCountThisSession, double dSessionLength)
+{
+ return ((ISteamUserStats*)linux_side)->UpdateAvgRateStat((const char *)pchName, (float)flCountThisSession, (double)dSessionLength);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievement(void *linux_side, const char * pchName, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievement((const char *)pchName, (bool *)pbAchieved);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_SetAchievement(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->SetAchievement((const char *)pchName);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_ClearAchievement(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->ClearAchievement((const char *)pchName);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementAndUnlockTime(void *linux_side, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementAndUnlockTime((const char *)pchName, (bool *)pbAchieved, (uint32 *)punUnlockTime);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_StoreStats(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->StoreStats();
+}
+
+int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementIcon(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementIcon((const char *)pchName);
+}
+
+const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementDisplayAttribute(void *linux_side, const char * pchName, const char * pchKey)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementDisplayAttribute((const char *)pchName, (const char *)pchKey);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_IndicateAchievementProgress(void *linux_side, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress)
+{
+ return ((ISteamUserStats*)linux_side)->IndicateAchievementProgress((const char *)pchName, (uint32)nCurProgress, (uint32)nMaxProgress);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestUserStats(void *linux_side, CSteamID steamIDUser)
+{
+ return ((ISteamUserStats*)linux_side)->RequestUserStats((CSteamID)steamIDUser);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserStat(void *linux_side, CSteamID steamIDUser, const char * pchName, int32 * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserStat((CSteamID)steamIDUser, (const char *)pchName, (int32 *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserStat_2(void *linux_side, CSteamID steamIDUser, const char * pchName, float * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserStat((CSteamID)steamIDUser, (const char *)pchName, (float *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserAchievement(void *linux_side, CSteamID steamIDUser, const char * pchName, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserAchievement((CSteamID)steamIDUser, (const char *)pchName, (bool *)pbAchieved);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserAchievementAndUnlockTime(void *linux_side, CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserAchievementAndUnlockTime((CSteamID)steamIDUser, (const char *)pchName, (bool *)pbAchieved, (uint32 *)punUnlockTime);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_ResetAllStats(void *linux_side, bool bAchievementsToo)
+{
+ return ((ISteamUserStats*)linux_side)->ResetAllStats((bool)bAchievementsToo);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_FindOrCreateLeaderboard(void *linux_side, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType)
+{
+ return ((ISteamUserStats*)linux_side)->FindOrCreateLeaderboard((const char *)pchLeaderboardName, (ELeaderboardSortMethod)eLeaderboardSortMethod, (ELeaderboardDisplayType)eLeaderboardDisplayType);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_FindLeaderboard(void *linux_side, const char * pchLeaderboardName)
+{
+ return ((ISteamUserStats*)linux_side)->FindLeaderboard((const char *)pchLeaderboardName);
+}
+
+const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardName(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardName((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardEntryCount(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardEntryCount((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+ELeaderboardSortMethod cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardSortMethod(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardSortMethod((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+ELeaderboardDisplayType cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardDisplayType(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardDisplayType((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_DownloadLeaderboardEntries(void *linux_side, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd)
+{
+ return ((ISteamUserStats*)linux_side)->DownloadLeaderboardEntries((SteamLeaderboard_t)hSteamLeaderboard, (ELeaderboardDataRequest)eLeaderboardDataRequest, (int)nRangeStart, (int)nRangeEnd);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_DownloadLeaderboardEntriesForUsers(void *linux_side, SteamLeaderboard_t hSteamLeaderboard, CSteamID * prgUsers, int cUsers)
+{
+ return ((ISteamUserStats*)linux_side)->DownloadLeaderboardEntriesForUsers((SteamLeaderboard_t)hSteamLeaderboard, (CSteamID *)prgUsers, (int)cUsers);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetDownloadedLeaderboardEntry(void *linux_side, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax)
+{
+ return ((ISteamUserStats*)linux_side)->GetDownloadedLeaderboardEntry((SteamLeaderboardEntries_t)hSteamLeaderboardEntries, (int)index, (LeaderboardEntry_t *)pLeaderboardEntry, (int32 *)pDetails, (int)cDetailsMax);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_UploadLeaderboardScore(void *linux_side, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount)
+{
+ return ((ISteamUserStats*)linux_side)->UploadLeaderboardScore((SteamLeaderboard_t)hSteamLeaderboard, (ELeaderboardUploadScoreMethod)eLeaderboardUploadScoreMethod, (int32)nScore, (const int32 *)pScoreDetails, (int)cScoreDetailsCount);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_AttachLeaderboardUGC(void *linux_side, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC)
+{
+ return ((ISteamUserStats*)linux_side)->AttachLeaderboardUGC((SteamLeaderboard_t)hSteamLeaderboard, (UGCHandle_t)hUGC);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetNumberOfCurrentPlayers(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->GetNumberOfCurrentPlayers();
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestGlobalAchievementPercentages(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->RequestGlobalAchievementPercentages();
+}
+
+int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetMostAchievedAchievementInfo(void *linux_side, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetMostAchievedAchievementInfo((char *)pchName, (uint32)unNameBufLen, (float *)pflPercent, (bool *)pbAchieved);
+}
+
+int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetNextMostAchievedAchievementInfo(void *linux_side, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetNextMostAchievedAchievementInfo((int)iIteratorPrevious, (char *)pchName, (uint32)unNameBufLen, (float *)pflPercent, (bool *)pbAchieved);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementAchievedPercent(void *linux_side, const char * pchName, float * pflPercent)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementAchievedPercent((const char *)pchName, (float *)pflPercent);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestGlobalStats(void *linux_side, int nHistoryDays)
+{
+ return ((ISteamUserStats*)linux_side)->RequestGlobalStats((int)nHistoryDays);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStat(void *linux_side, const char * pchStatName, int64 * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetGlobalStat((const char *)pchStatName, (int64 *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStat_2(void *linux_side, const char * pchStatName, double * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetGlobalStat((const char *)pchStatName, (double *)pData);
+}
+
+int32 cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStatHistory(void *linux_side, const char * pchStatName, int64 * pData, uint32 cubData)
+{
+ return ((ISteamUserStats*)linux_side)->GetGlobalStatHistory((const char *)pchStatName, (int64 *)pData, (uint32)cubData);
+}
+
+int32 cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStatHistory_2(void *linux_side, const char * pchStatName, double * pData, uint32 cubData)
+{
+ return ((ISteamUserStats*)linux_side)->GetGlobalStatHistory((const char *)pchStatName, (double *)pData, (uint32)cubData);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010.h b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010.h
new file mode 100644
index 00000000..a9daea22
--- /dev/null
+++ b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010.h
@@ -0,0 +1,47 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestCurrentStats(void *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetStat(void *, const char *, int32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetStat_2(void *, const char *, float *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_SetStat(void *, const char *, int32);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_SetStat_2(void *, const char *, float);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_UpdateAvgRateStat(void *, const char *, float, double);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievement(void *, const char *, bool *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_SetAchievement(void *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_ClearAchievement(void *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementAndUnlockTime(void *, const char *, bool *, uint32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_StoreStats(void *);
+extern int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementIcon(void *, const char *);
+extern const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementDisplayAttribute(void *, const char *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_IndicateAchievementProgress(void *, const char *, uint32, uint32);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestUserStats(void *, CSteamID);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserStat(void *, CSteamID, const char *, int32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserStat_2(void *, CSteamID, const char *, float *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserAchievement(void *, CSteamID, const char *, bool *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserAchievementAndUnlockTime(void *, CSteamID, const char *, bool *, uint32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_ResetAllStats(void *, bool);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_FindOrCreateLeaderboard(void *, const char *, ELeaderboardSortMethod, ELeaderboardDisplayType);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_FindLeaderboard(void *, const char *);
+extern const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardName(void *, SteamLeaderboard_t);
+extern int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardEntryCount(void *, SteamLeaderboard_t);
+extern ELeaderboardSortMethod cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardSortMethod(void *, SteamLeaderboard_t);
+extern ELeaderboardDisplayType cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardDisplayType(void *, SteamLeaderboard_t);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_DownloadLeaderboardEntries(void *, SteamLeaderboard_t, ELeaderboardDataRequest, int, int);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_DownloadLeaderboardEntriesForUsers(void *, SteamLeaderboard_t, CSteamID *, int);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetDownloadedLeaderboardEntry(void *, SteamLeaderboardEntries_t, int, LeaderboardEntry_t *, int32 *, int);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_UploadLeaderboardScore(void *, SteamLeaderboard_t, ELeaderboardUploadScoreMethod, int32, const int32 *, int);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_AttachLeaderboardUGC(void *, SteamLeaderboard_t, UGCHandle_t);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetNumberOfCurrentPlayers(void *);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestGlobalAchievementPercentages(void *);
+extern int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetMostAchievedAchievementInfo(void *, char *, uint32, float *, bool *);
+extern int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetNextMostAchievedAchievementInfo(void *, int, char *, uint32, float *, bool *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementAchievedPercent(void *, const char *, float *);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestGlobalStats(void *, int);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStat(void *, const char *, int64 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStat_2(void *, const char *, double *);
+extern int32 cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStatHistory(void *, const char *, int64 *, uint32);
+extern int32 cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStatHistory_2(void *, const char *, double *, uint32);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011.cpp b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011.cpp
new file mode 100644
index 00000000..9a01c135
--- /dev/null
+++ b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011.cpp
@@ -0,0 +1,225 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestCurrentStats(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->RequestCurrentStats();
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetStat(void *linux_side, const char * pchName, int32 * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetStat((const char *)pchName, (int32 *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetStat_2(void *linux_side, const char * pchName, float * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetStat((const char *)pchName, (float *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_SetStat(void *linux_side, const char * pchName, int32 nData)
+{
+ return ((ISteamUserStats*)linux_side)->SetStat((const char *)pchName, (int32)nData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_SetStat_2(void *linux_side, const char * pchName, float fData)
+{
+ return ((ISteamUserStats*)linux_side)->SetStat((const char *)pchName, (float)fData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_UpdateAvgRateStat(void *linux_side, const char * pchName, float flCountThisSession, double dSessionLength)
+{
+ return ((ISteamUserStats*)linux_side)->UpdateAvgRateStat((const char *)pchName, (float)flCountThisSession, (double)dSessionLength);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievement(void *linux_side, const char * pchName, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievement((const char *)pchName, (bool *)pbAchieved);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_SetAchievement(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->SetAchievement((const char *)pchName);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_ClearAchievement(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->ClearAchievement((const char *)pchName);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementAndUnlockTime(void *linux_side, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementAndUnlockTime((const char *)pchName, (bool *)pbAchieved, (uint32 *)punUnlockTime);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_StoreStats(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->StoreStats();
+}
+
+int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementIcon(void *linux_side, const char * pchName)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementIcon((const char *)pchName);
+}
+
+const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementDisplayAttribute(void *linux_side, const char * pchName, const char * pchKey)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementDisplayAttribute((const char *)pchName, (const char *)pchKey);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_IndicateAchievementProgress(void *linux_side, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress)
+{
+ return ((ISteamUserStats*)linux_side)->IndicateAchievementProgress((const char *)pchName, (uint32)nCurProgress, (uint32)nMaxProgress);
+}
+
+uint32 cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetNumAchievements(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->GetNumAchievements();
+}
+
+const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementName(void *linux_side, uint32 iAchievement)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementName((uint32)iAchievement);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestUserStats(void *linux_side, CSteamID steamIDUser)
+{
+ return ((ISteamUserStats*)linux_side)->RequestUserStats((CSteamID)steamIDUser);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserStat(void *linux_side, CSteamID steamIDUser, const char * pchName, int32 * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserStat((CSteamID)steamIDUser, (const char *)pchName, (int32 *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserStat_2(void *linux_side, CSteamID steamIDUser, const char * pchName, float * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserStat((CSteamID)steamIDUser, (const char *)pchName, (float *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserAchievement(void *linux_side, CSteamID steamIDUser, const char * pchName, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserAchievement((CSteamID)steamIDUser, (const char *)pchName, (bool *)pbAchieved);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserAchievementAndUnlockTime(void *linux_side, CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime)
+{
+ return ((ISteamUserStats*)linux_side)->GetUserAchievementAndUnlockTime((CSteamID)steamIDUser, (const char *)pchName, (bool *)pbAchieved, (uint32 *)punUnlockTime);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_ResetAllStats(void *linux_side, bool bAchievementsToo)
+{
+ return ((ISteamUserStats*)linux_side)->ResetAllStats((bool)bAchievementsToo);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_FindOrCreateLeaderboard(void *linux_side, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType)
+{
+ return ((ISteamUserStats*)linux_side)->FindOrCreateLeaderboard((const char *)pchLeaderboardName, (ELeaderboardSortMethod)eLeaderboardSortMethod, (ELeaderboardDisplayType)eLeaderboardDisplayType);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_FindLeaderboard(void *linux_side, const char * pchLeaderboardName)
+{
+ return ((ISteamUserStats*)linux_side)->FindLeaderboard((const char *)pchLeaderboardName);
+}
+
+const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardName(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardName((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardEntryCount(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardEntryCount((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+ELeaderboardSortMethod cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardSortMethod(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardSortMethod((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+ELeaderboardDisplayType cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardDisplayType(void *linux_side, SteamLeaderboard_t hSteamLeaderboard)
+{
+ return ((ISteamUserStats*)linux_side)->GetLeaderboardDisplayType((SteamLeaderboard_t)hSteamLeaderboard);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_DownloadLeaderboardEntries(void *linux_side, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd)
+{
+ return ((ISteamUserStats*)linux_side)->DownloadLeaderboardEntries((SteamLeaderboard_t)hSteamLeaderboard, (ELeaderboardDataRequest)eLeaderboardDataRequest, (int)nRangeStart, (int)nRangeEnd);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_DownloadLeaderboardEntriesForUsers(void *linux_side, SteamLeaderboard_t hSteamLeaderboard, CSteamID * prgUsers, int cUsers)
+{
+ return ((ISteamUserStats*)linux_side)->DownloadLeaderboardEntriesForUsers((SteamLeaderboard_t)hSteamLeaderboard, (CSteamID *)prgUsers, (int)cUsers);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetDownloadedLeaderboardEntry(void *linux_side, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax)
+{
+ return ((ISteamUserStats*)linux_side)->GetDownloadedLeaderboardEntry((SteamLeaderboardEntries_t)hSteamLeaderboardEntries, (int)index, (LeaderboardEntry_t *)pLeaderboardEntry, (int32 *)pDetails, (int)cDetailsMax);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_UploadLeaderboardScore(void *linux_side, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount)
+{
+ return ((ISteamUserStats*)linux_side)->UploadLeaderboardScore((SteamLeaderboard_t)hSteamLeaderboard, (ELeaderboardUploadScoreMethod)eLeaderboardUploadScoreMethod, (int32)nScore, (const int32 *)pScoreDetails, (int)cScoreDetailsCount);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_AttachLeaderboardUGC(void *linux_side, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC)
+{
+ return ((ISteamUserStats*)linux_side)->AttachLeaderboardUGC((SteamLeaderboard_t)hSteamLeaderboard, (UGCHandle_t)hUGC);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetNumberOfCurrentPlayers(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->GetNumberOfCurrentPlayers();
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestGlobalAchievementPercentages(void *linux_side)
+{
+ return ((ISteamUserStats*)linux_side)->RequestGlobalAchievementPercentages();
+}
+
+int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetMostAchievedAchievementInfo(void *linux_side, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetMostAchievedAchievementInfo((char *)pchName, (uint32)unNameBufLen, (float *)pflPercent, (bool *)pbAchieved);
+}
+
+int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetNextMostAchievedAchievementInfo(void *linux_side, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved)
+{
+ return ((ISteamUserStats*)linux_side)->GetNextMostAchievedAchievementInfo((int)iIteratorPrevious, (char *)pchName, (uint32)unNameBufLen, (float *)pflPercent, (bool *)pbAchieved);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementAchievedPercent(void *linux_side, const char * pchName, float * pflPercent)
+{
+ return ((ISteamUserStats*)linux_side)->GetAchievementAchievedPercent((const char *)pchName, (float *)pflPercent);
+}
+
+SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestGlobalStats(void *linux_side, int nHistoryDays)
+{
+ return ((ISteamUserStats*)linux_side)->RequestGlobalStats((int)nHistoryDays);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStat(void *linux_side, const char * pchStatName, int64 * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetGlobalStat((const char *)pchStatName, (int64 *)pData);
+}
+
+bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStat_2(void *linux_side, const char * pchStatName, double * pData)
+{
+ return ((ISteamUserStats*)linux_side)->GetGlobalStat((const char *)pchStatName, (double *)pData);
+}
+
+int32 cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStatHistory(void *linux_side, const char * pchStatName, int64 * pData, uint32 cubData)
+{
+ return ((ISteamUserStats*)linux_side)->GetGlobalStatHistory((const char *)pchStatName, (int64 *)pData, (uint32)cubData);
+}
+
+int32 cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStatHistory_2(void *linux_side, const char * pchStatName, double * pData, uint32 cubData)
+{
+ return ((ISteamUserStats*)linux_side)->GetGlobalStatHistory((const char *)pchStatName, (double *)pData, (uint32)cubData);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011.h b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011.h
new file mode 100644
index 00000000..9142eb31
--- /dev/null
+++ b/lsteamclient/cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011.h
@@ -0,0 +1,49 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestCurrentStats(void *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetStat(void *, const char *, int32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetStat_2(void *, const char *, float *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_SetStat(void *, const char *, int32);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_SetStat_2(void *, const char *, float);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_UpdateAvgRateStat(void *, const char *, float, double);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievement(void *, const char *, bool *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_SetAchievement(void *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_ClearAchievement(void *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementAndUnlockTime(void *, const char *, bool *, uint32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_StoreStats(void *);
+extern int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementIcon(void *, const char *);
+extern const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementDisplayAttribute(void *, const char *, const char *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_IndicateAchievementProgress(void *, const char *, uint32, uint32);
+extern uint32 cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetNumAchievements(void *);
+extern const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementName(void *, uint32);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestUserStats(void *, CSteamID);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserStat(void *, CSteamID, const char *, int32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserStat_2(void *, CSteamID, const char *, float *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserAchievement(void *, CSteamID, const char *, bool *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserAchievementAndUnlockTime(void *, CSteamID, const char *, bool *, uint32 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_ResetAllStats(void *, bool);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_FindOrCreateLeaderboard(void *, const char *, ELeaderboardSortMethod, ELeaderboardDisplayType);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_FindLeaderboard(void *, const char *);
+extern const char * cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardName(void *, SteamLeaderboard_t);
+extern int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardEntryCount(void *, SteamLeaderboard_t);
+extern ELeaderboardSortMethod cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardSortMethod(void *, SteamLeaderboard_t);
+extern ELeaderboardDisplayType cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardDisplayType(void *, SteamLeaderboard_t);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_DownloadLeaderboardEntries(void *, SteamLeaderboard_t, ELeaderboardDataRequest, int, int);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_DownloadLeaderboardEntriesForUsers(void *, SteamLeaderboard_t, CSteamID *, int);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetDownloadedLeaderboardEntry(void *, SteamLeaderboardEntries_t, int, LeaderboardEntry_t *, int32 *, int);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_UploadLeaderboardScore(void *, SteamLeaderboard_t, ELeaderboardUploadScoreMethod, int32, const int32 *, int);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_AttachLeaderboardUGC(void *, SteamLeaderboard_t, UGCHandle_t);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetNumberOfCurrentPlayers(void *);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestGlobalAchievementPercentages(void *);
+extern int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetMostAchievedAchievementInfo(void *, char *, uint32, float *, bool *);
+extern int cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetNextMostAchievedAchievementInfo(void *, int, char *, uint32, float *, bool *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementAchievedPercent(void *, const char *, float *);
+extern SteamAPICall_t cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestGlobalStats(void *, int);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStat(void *, const char *, int64 *);
+extern bool cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStat_2(void *, const char *, double *);
+extern int32 cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStatHistory(void *, const char *, int64 *, uint32);
+extern int32 cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStatHistory_2(void *, const char *, double *, uint32);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser009.cpp b/lsteamclient/cppISteamUser_SteamUser009.cpp
new file mode 100644
index 00000000..d85e9444
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser009.cpp
@@ -0,0 +1,45 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_100/steam_api.h"
+#include "cppISteamUser_SteamUser009.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamUser cppISteamUser_SteamUser009_GetHSteamUser(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetHSteamUser();
+}
+
+bool cppISteamUser_SteamUser009_BLoggedOn(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BLoggedOn();
+}
+
+CSteamID cppISteamUser_SteamUser009_GetSteamID(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetSteamID();
+}
+
+int cppISteamUser_SteamUser009_InitiateGameConnection(void *linux_side, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, CGameID gameID, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ return ((ISteamUser*)linux_side)->InitiateGameConnection((void *)pAuthBlob, (int)cbMaxAuthBlob, (CSteamID)steamIDGameServer, (CGameID)gameID, (uint32)unIPServer, (uint16)usPortServer, (bool)bSecure);
+}
+
+void cppISteamUser_SteamUser009_TerminateGameConnection(void *linux_side, uint32 unIPServer, uint16 usPortServer)
+{
+ ((ISteamUser*)linux_side)->TerminateGameConnection((uint32)unIPServer, (uint16)usPortServer);
+}
+
+void cppISteamUser_SteamUser009_TrackAppUsageEvent(void *linux_side, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ ((ISteamUser*)linux_side)->TrackAppUsageEvent((CGameID)gameID, (int)eAppUsageEvent, (const char *)pchExtraInfo);
+}
+
+void cppISteamUser_SteamUser009_RefreshSteam2Login(void *linux_side)
+{
+ ((ISteamUser*)linux_side)->RefreshSteam2Login();
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser009.h b/lsteamclient/cppISteamUser_SteamUser009.h
new file mode 100644
index 00000000..851e22c4
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser009.h
@@ -0,0 +1,13 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamUser cppISteamUser_SteamUser009_GetHSteamUser(void *);
+extern bool cppISteamUser_SteamUser009_BLoggedOn(void *);
+extern CSteamID cppISteamUser_SteamUser009_GetSteamID(void *);
+extern int cppISteamUser_SteamUser009_InitiateGameConnection(void *, void *, int, CSteamID, CGameID, uint32, uint16, bool);
+extern void cppISteamUser_SteamUser009_TerminateGameConnection(void *, uint32, uint16);
+extern void cppISteamUser_SteamUser009_TrackAppUsageEvent(void *, CGameID, int, const char *);
+extern void cppISteamUser_SteamUser009_RefreshSteam2Login(void *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser010.cpp b/lsteamclient/cppISteamUser_SteamUser010.cpp
new file mode 100644
index 00000000..6bda9191
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser010.cpp
@@ -0,0 +1,40 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_101/steam_api.h"
+#include "cppISteamUser_SteamUser010.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamUser cppISteamUser_SteamUser010_GetHSteamUser(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetHSteamUser();
+}
+
+bool cppISteamUser_SteamUser010_BLoggedOn(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BLoggedOn();
+}
+
+CSteamID cppISteamUser_SteamUser010_GetSteamID(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetSteamID();
+}
+
+int cppISteamUser_SteamUser010_InitiateGameConnection(void *linux_side, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ return ((ISteamUser*)linux_side)->InitiateGameConnection((void *)pAuthBlob, (int)cbMaxAuthBlob, (CSteamID)steamIDGameServer, (uint32)unIPServer, (uint16)usPortServer, (bool)bSecure);
+}
+
+void cppISteamUser_SteamUser010_TerminateGameConnection(void *linux_side, uint32 unIPServer, uint16 usPortServer)
+{
+ ((ISteamUser*)linux_side)->TerminateGameConnection((uint32)unIPServer, (uint16)usPortServer);
+}
+
+void cppISteamUser_SteamUser010_TrackAppUsageEvent(void *linux_side, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ ((ISteamUser*)linux_side)->TrackAppUsageEvent((CGameID)gameID, (int)eAppUsageEvent, (const char *)pchExtraInfo);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser010.h b/lsteamclient/cppISteamUser_SteamUser010.h
new file mode 100644
index 00000000..fdf00d3c
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser010.h
@@ -0,0 +1,12 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamUser cppISteamUser_SteamUser010_GetHSteamUser(void *);
+extern bool cppISteamUser_SteamUser010_BLoggedOn(void *);
+extern CSteamID cppISteamUser_SteamUser010_GetSteamID(void *);
+extern int cppISteamUser_SteamUser010_InitiateGameConnection(void *, void *, int, CSteamID, uint32, uint16, bool);
+extern void cppISteamUser_SteamUser010_TerminateGameConnection(void *, uint32, uint16);
+extern void cppISteamUser_SteamUser010_TrackAppUsageEvent(void *, CGameID, int, const char *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser011.cpp b/lsteamclient/cppISteamUser_SteamUser011.cpp
new file mode 100644
index 00000000..9e2147e7
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser011.cpp
@@ -0,0 +1,65 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_103/steam_api.h"
+#include "cppISteamUser_SteamUser011.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamUser cppISteamUser_SteamUser011_GetHSteamUser(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetHSteamUser();
+}
+
+bool cppISteamUser_SteamUser011_BLoggedOn(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BLoggedOn();
+}
+
+CSteamID cppISteamUser_SteamUser011_GetSteamID(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetSteamID();
+}
+
+int cppISteamUser_SteamUser011_InitiateGameConnection(void *linux_side, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ return ((ISteamUser*)linux_side)->InitiateGameConnection((void *)pAuthBlob, (int)cbMaxAuthBlob, (CSteamID)steamIDGameServer, (uint32)unIPServer, (uint16)usPortServer, (bool)bSecure);
+}
+
+void cppISteamUser_SteamUser011_TerminateGameConnection(void *linux_side, uint32 unIPServer, uint16 usPortServer)
+{
+ ((ISteamUser*)linux_side)->TerminateGameConnection((uint32)unIPServer, (uint16)usPortServer);
+}
+
+void cppISteamUser_SteamUser011_TrackAppUsageEvent(void *linux_side, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ ((ISteamUser*)linux_side)->TrackAppUsageEvent((CGameID)gameID, (int)eAppUsageEvent, (const char *)pchExtraInfo);
+}
+
+bool cppISteamUser_SteamUser011_GetUserDataFolder(void *linux_side, char * pchBuffer, int cubBuffer)
+{
+ return ((ISteamUser*)linux_side)->GetUserDataFolder((char *)pchBuffer, (int)cubBuffer);
+}
+
+void cppISteamUser_SteamUser011_StartVoiceRecording(void *linux_side)
+{
+ ((ISteamUser*)linux_side)->StartVoiceRecording();
+}
+
+void cppISteamUser_SteamUser011_StopVoiceRecording(void *linux_side)
+{
+ ((ISteamUser*)linux_side)->StopVoiceRecording();
+}
+
+EVoiceResult cppISteamUser_SteamUser011_GetCompressedVoice(void *linux_side, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten)
+{
+ return ((ISteamUser*)linux_side)->GetCompressedVoice((void *)pDestBuffer, (uint32)cbDestBufferSize, (uint32 *)nBytesWritten);
+}
+
+EVoiceResult cppISteamUser_SteamUser011_DecompressVoice(void *linux_side, void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten)
+{
+ return ((ISteamUser*)linux_side)->DecompressVoice((void *)pCompressed, (uint32)cbCompressed, (void *)pDestBuffer, (uint32)cbDestBufferSize, (uint32 *)nBytesWritten);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser011.h b/lsteamclient/cppISteamUser_SteamUser011.h
new file mode 100644
index 00000000..4b69cdc5
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser011.h
@@ -0,0 +1,17 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamUser cppISteamUser_SteamUser011_GetHSteamUser(void *);
+extern bool cppISteamUser_SteamUser011_BLoggedOn(void *);
+extern CSteamID cppISteamUser_SteamUser011_GetSteamID(void *);
+extern int cppISteamUser_SteamUser011_InitiateGameConnection(void *, void *, int, CSteamID, uint32, uint16, bool);
+extern void cppISteamUser_SteamUser011_TerminateGameConnection(void *, uint32, uint16);
+extern void cppISteamUser_SteamUser011_TrackAppUsageEvent(void *, CGameID, int, const char *);
+extern bool cppISteamUser_SteamUser011_GetUserDataFolder(void *, char *, int);
+extern void cppISteamUser_SteamUser011_StartVoiceRecording(void *);
+extern void cppISteamUser_SteamUser011_StopVoiceRecording(void *);
+extern EVoiceResult cppISteamUser_SteamUser011_GetCompressedVoice(void *, void *, uint32, uint32 *);
+extern EVoiceResult cppISteamUser_SteamUser011_DecompressVoice(void *, void *, uint32, void *, uint32, uint32 *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser012.cpp b/lsteamclient/cppISteamUser_SteamUser012.cpp
new file mode 100644
index 00000000..b09dbd8a
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser012.cpp
@@ -0,0 +1,90 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_105/steam_api.h"
+#include "cppISteamUser_SteamUser012.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamUser cppISteamUser_SteamUser012_GetHSteamUser(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetHSteamUser();
+}
+
+bool cppISteamUser_SteamUser012_BLoggedOn(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BLoggedOn();
+}
+
+CSteamID cppISteamUser_SteamUser012_GetSteamID(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetSteamID();
+}
+
+int cppISteamUser_SteamUser012_InitiateGameConnection(void *linux_side, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ return ((ISteamUser*)linux_side)->InitiateGameConnection((void *)pAuthBlob, (int)cbMaxAuthBlob, (CSteamID)steamIDGameServer, (uint32)unIPServer, (uint16)usPortServer, (bool)bSecure);
+}
+
+void cppISteamUser_SteamUser012_TerminateGameConnection(void *linux_side, uint32 unIPServer, uint16 usPortServer)
+{
+ ((ISteamUser*)linux_side)->TerminateGameConnection((uint32)unIPServer, (uint16)usPortServer);
+}
+
+void cppISteamUser_SteamUser012_TrackAppUsageEvent(void *linux_side, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ ((ISteamUser*)linux_side)->TrackAppUsageEvent((CGameID)gameID, (int)eAppUsageEvent, (const char *)pchExtraInfo);
+}
+
+bool cppISteamUser_SteamUser012_GetUserDataFolder(void *linux_side, char * pchBuffer, int cubBuffer)
+{
+ return ((ISteamUser*)linux_side)->GetUserDataFolder((char *)pchBuffer, (int)cubBuffer);
+}
+
+void cppISteamUser_SteamUser012_StartVoiceRecording(void *linux_side)
+{
+ ((ISteamUser*)linux_side)->StartVoiceRecording();
+}
+
+void cppISteamUser_SteamUser012_StopVoiceRecording(void *linux_side)
+{
+ ((ISteamUser*)linux_side)->StopVoiceRecording();
+}
+
+EVoiceResult cppISteamUser_SteamUser012_GetCompressedVoice(void *linux_side, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten)
+{
+ return ((ISteamUser*)linux_side)->GetCompressedVoice((void *)pDestBuffer, (uint32)cbDestBufferSize, (uint32 *)nBytesWritten);
+}
+
+EVoiceResult cppISteamUser_SteamUser012_DecompressVoice(void *linux_side, void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten)
+{
+ return ((ISteamUser*)linux_side)->DecompressVoice((void *)pCompressed, (uint32)cbCompressed, (void *)pDestBuffer, (uint32)cbDestBufferSize, (uint32 *)nBytesWritten);
+}
+
+HAuthTicket cppISteamUser_SteamUser012_GetAuthSessionTicket(void *linux_side, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ return ((ISteamUser*)linux_side)->GetAuthSessionTicket((void *)pTicket, (int)cbMaxTicket, (uint32 *)pcbTicket);
+}
+
+EBeginAuthSessionResult cppISteamUser_SteamUser012_BeginAuthSession(void *linux_side, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ return ((ISteamUser*)linux_side)->BeginAuthSession((const void *)pAuthTicket, (int)cbAuthTicket, (CSteamID)steamID);
+}
+
+void cppISteamUser_SteamUser012_EndAuthSession(void *linux_side, CSteamID steamID)
+{
+ ((ISteamUser*)linux_side)->EndAuthSession((CSteamID)steamID);
+}
+
+void cppISteamUser_SteamUser012_CancelAuthTicket(void *linux_side, HAuthTicket hAuthTicket)
+{
+ ((ISteamUser*)linux_side)->CancelAuthTicket((HAuthTicket)hAuthTicket);
+}
+
+EUserHasLicenseForAppResult cppISteamUser_SteamUser012_UserHasLicenseForApp(void *linux_side, CSteamID steamID, AppId_t appID)
+{
+ return ((ISteamUser*)linux_side)->UserHasLicenseForApp((CSteamID)steamID, (AppId_t)appID);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser012.h b/lsteamclient/cppISteamUser_SteamUser012.h
new file mode 100644
index 00000000..bc643e97
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser012.h
@@ -0,0 +1,22 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamUser cppISteamUser_SteamUser012_GetHSteamUser(void *);
+extern bool cppISteamUser_SteamUser012_BLoggedOn(void *);
+extern CSteamID cppISteamUser_SteamUser012_GetSteamID(void *);
+extern int cppISteamUser_SteamUser012_InitiateGameConnection(void *, void *, int, CSteamID, uint32, uint16, bool);
+extern void cppISteamUser_SteamUser012_TerminateGameConnection(void *, uint32, uint16);
+extern void cppISteamUser_SteamUser012_TrackAppUsageEvent(void *, CGameID, int, const char *);
+extern bool cppISteamUser_SteamUser012_GetUserDataFolder(void *, char *, int);
+extern void cppISteamUser_SteamUser012_StartVoiceRecording(void *);
+extern void cppISteamUser_SteamUser012_StopVoiceRecording(void *);
+extern EVoiceResult cppISteamUser_SteamUser012_GetCompressedVoice(void *, void *, uint32, uint32 *);
+extern EVoiceResult cppISteamUser_SteamUser012_DecompressVoice(void *, void *, uint32, void *, uint32, uint32 *);
+extern HAuthTicket cppISteamUser_SteamUser012_GetAuthSessionTicket(void *, void *, int, uint32 *);
+extern EBeginAuthSessionResult cppISteamUser_SteamUser012_BeginAuthSession(void *, const void *, int, CSteamID);
+extern void cppISteamUser_SteamUser012_EndAuthSession(void *, CSteamID);
+extern void cppISteamUser_SteamUser012_CancelAuthTicket(void *, HAuthTicket);
+extern EUserHasLicenseForAppResult cppISteamUser_SteamUser012_UserHasLicenseForApp(void *, CSteamID, AppId_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser013.cpp b/lsteamclient/cppISteamUser_SteamUser013.cpp
new file mode 100644
index 00000000..42e20932
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser013.cpp
@@ -0,0 +1,95 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_110/steam_api.h"
+#include "cppISteamUser_SteamUser013.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamUser cppISteamUser_SteamUser013_GetHSteamUser(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetHSteamUser();
+}
+
+bool cppISteamUser_SteamUser013_BLoggedOn(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BLoggedOn();
+}
+
+CSteamID cppISteamUser_SteamUser013_GetSteamID(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetSteamID();
+}
+
+int cppISteamUser_SteamUser013_InitiateGameConnection(void *linux_side, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ return ((ISteamUser*)linux_side)->InitiateGameConnection((void *)pAuthBlob, (int)cbMaxAuthBlob, (CSteamID)steamIDGameServer, (uint32)unIPServer, (uint16)usPortServer, (bool)bSecure);
+}
+
+void cppISteamUser_SteamUser013_TerminateGameConnection(void *linux_side, uint32 unIPServer, uint16 usPortServer)
+{
+ ((ISteamUser*)linux_side)->TerminateGameConnection((uint32)unIPServer, (uint16)usPortServer);
+}
+
+void cppISteamUser_SteamUser013_TrackAppUsageEvent(void *linux_side, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ ((ISteamUser*)linux_side)->TrackAppUsageEvent((CGameID)gameID, (int)eAppUsageEvent, (const char *)pchExtraInfo);
+}
+
+bool cppISteamUser_SteamUser013_GetUserDataFolder(void *linux_side, char * pchBuffer, int cubBuffer)
+{
+ return ((ISteamUser*)linux_side)->GetUserDataFolder((char *)pchBuffer, (int)cubBuffer);
+}
+
+void cppISteamUser_SteamUser013_StartVoiceRecording(void *linux_side)
+{
+ ((ISteamUser*)linux_side)->StartVoiceRecording();
+}
+
+void cppISteamUser_SteamUser013_StopVoiceRecording(void *linux_side)
+{
+ ((ISteamUser*)linux_side)->StopVoiceRecording();
+}
+
+EVoiceResult cppISteamUser_SteamUser013_GetAvailableVoice(void *linux_side, uint32 * pcbCompressed, uint32 * pcbUncompressed)
+{
+ return ((ISteamUser*)linux_side)->GetAvailableVoice((uint32 *)pcbCompressed, (uint32 *)pcbUncompressed);
+}
+
+EVoiceResult cppISteamUser_SteamUser013_GetVoice(void *linux_side, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten)
+{
+ return ((ISteamUser*)linux_side)->GetVoice((bool)bWantCompressed, (void *)pDestBuffer, (uint32)cbDestBufferSize, (uint32 *)nBytesWritten, (bool)bWantUncompressed, (void *)pUncompressedDestBuffer, (uint32)cbUncompressedDestBufferSize, (uint32 *)nUncompressBytesWritten);
+}
+
+EVoiceResult cppISteamUser_SteamUser013_DecompressVoice(void *linux_side, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten)
+{
+ return ((ISteamUser*)linux_side)->DecompressVoice((const void *)pCompressed, (uint32)cbCompressed, (void *)pDestBuffer, (uint32)cbDestBufferSize, (uint32 *)nBytesWritten);
+}
+
+HAuthTicket cppISteamUser_SteamUser013_GetAuthSessionTicket(void *linux_side, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ return ((ISteamUser*)linux_side)->GetAuthSessionTicket((void *)pTicket, (int)cbMaxTicket, (uint32 *)pcbTicket);
+}
+
+EBeginAuthSessionResult cppISteamUser_SteamUser013_BeginAuthSession(void *linux_side, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ return ((ISteamUser*)linux_side)->BeginAuthSession((const void *)pAuthTicket, (int)cbAuthTicket, (CSteamID)steamID);
+}
+
+void cppISteamUser_SteamUser013_EndAuthSession(void *linux_side, CSteamID steamID)
+{
+ ((ISteamUser*)linux_side)->EndAuthSession((CSteamID)steamID);
+}
+
+void cppISteamUser_SteamUser013_CancelAuthTicket(void *linux_side, HAuthTicket hAuthTicket)
+{
+ ((ISteamUser*)linux_side)->CancelAuthTicket((HAuthTicket)hAuthTicket);
+}
+
+EUserHasLicenseForAppResult cppISteamUser_SteamUser013_UserHasLicenseForApp(void *linux_side, CSteamID steamID, AppId_t appID)
+{
+ return ((ISteamUser*)linux_side)->UserHasLicenseForApp((CSteamID)steamID, (AppId_t)appID);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser013.h b/lsteamclient/cppISteamUser_SteamUser013.h
new file mode 100644
index 00000000..dfe59836
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser013.h
@@ -0,0 +1,23 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamUser cppISteamUser_SteamUser013_GetHSteamUser(void *);
+extern bool cppISteamUser_SteamUser013_BLoggedOn(void *);
+extern CSteamID cppISteamUser_SteamUser013_GetSteamID(void *);
+extern int cppISteamUser_SteamUser013_InitiateGameConnection(void *, void *, int, CSteamID, uint32, uint16, bool);
+extern void cppISteamUser_SteamUser013_TerminateGameConnection(void *, uint32, uint16);
+extern void cppISteamUser_SteamUser013_TrackAppUsageEvent(void *, CGameID, int, const char *);
+extern bool cppISteamUser_SteamUser013_GetUserDataFolder(void *, char *, int);
+extern void cppISteamUser_SteamUser013_StartVoiceRecording(void *);
+extern void cppISteamUser_SteamUser013_StopVoiceRecording(void *);
+extern EVoiceResult cppISteamUser_SteamUser013_GetAvailableVoice(void *, uint32 *, uint32 *);
+extern EVoiceResult cppISteamUser_SteamUser013_GetVoice(void *, bool, void *, uint32, uint32 *, bool, void *, uint32, uint32 *);
+extern EVoiceResult cppISteamUser_SteamUser013_DecompressVoice(void *, const void *, uint32, void *, uint32, uint32 *);
+extern HAuthTicket cppISteamUser_SteamUser013_GetAuthSessionTicket(void *, void *, int, uint32 *);
+extern EBeginAuthSessionResult cppISteamUser_SteamUser013_BeginAuthSession(void *, const void *, int, CSteamID);
+extern void cppISteamUser_SteamUser013_EndAuthSession(void *, CSteamID);
+extern void cppISteamUser_SteamUser013_CancelAuthTicket(void *, HAuthTicket);
+extern EUserHasLicenseForAppResult cppISteamUser_SteamUser013_UserHasLicenseForApp(void *, CSteamID, AppId_t);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser014.cpp b/lsteamclient/cppISteamUser_SteamUser014.cpp
new file mode 100644
index 00000000..1747b1f0
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser014.cpp
@@ -0,0 +1,115 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_112/steam_api.h"
+#include "cppISteamUser_SteamUser014.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamUser cppISteamUser_SteamUser014_GetHSteamUser(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetHSteamUser();
+}
+
+bool cppISteamUser_SteamUser014_BLoggedOn(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BLoggedOn();
+}
+
+CSteamID cppISteamUser_SteamUser014_GetSteamID(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetSteamID();
+}
+
+int cppISteamUser_SteamUser014_InitiateGameConnection(void *linux_side, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ return ((ISteamUser*)linux_side)->InitiateGameConnection((void *)pAuthBlob, (int)cbMaxAuthBlob, (CSteamID)steamIDGameServer, (uint32)unIPServer, (uint16)usPortServer, (bool)bSecure);
+}
+
+void cppISteamUser_SteamUser014_TerminateGameConnection(void *linux_side, uint32 unIPServer, uint16 usPortServer)
+{
+ ((ISteamUser*)linux_side)->TerminateGameConnection((uint32)unIPServer, (uint16)usPortServer);
+}
+
+void cppISteamUser_SteamUser014_TrackAppUsageEvent(void *linux_side, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ ((ISteamUser*)linux_side)->TrackAppUsageEvent((CGameID)gameID, (int)eAppUsageEvent, (const char *)pchExtraInfo);
+}
+
+bool cppISteamUser_SteamUser014_GetUserDataFolder(void *linux_side, char * pchBuffer, int cubBuffer)
+{
+ return ((ISteamUser*)linux_side)->GetUserDataFolder((char *)pchBuffer, (int)cubBuffer);
+}
+
+void cppISteamUser_SteamUser014_StartVoiceRecording(void *linux_side)
+{
+ ((ISteamUser*)linux_side)->StartVoiceRecording();
+}
+
+void cppISteamUser_SteamUser014_StopVoiceRecording(void *linux_side)
+{
+ ((ISteamUser*)linux_side)->StopVoiceRecording();
+}
+
+EVoiceResult cppISteamUser_SteamUser014_GetAvailableVoice(void *linux_side, uint32 * pcbCompressed, uint32 * pcbUncompressed)
+{
+ return ((ISteamUser*)linux_side)->GetAvailableVoice((uint32 *)pcbCompressed, (uint32 *)pcbUncompressed);
+}
+
+EVoiceResult cppISteamUser_SteamUser014_GetVoice(void *linux_side, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten)
+{
+ return ((ISteamUser*)linux_side)->GetVoice((bool)bWantCompressed, (void *)pDestBuffer, (uint32)cbDestBufferSize, (uint32 *)nBytesWritten, (bool)bWantUncompressed, (void *)pUncompressedDestBuffer, (uint32)cbUncompressedDestBufferSize, (uint32 *)nUncompressBytesWritten);
+}
+
+EVoiceResult cppISteamUser_SteamUser014_DecompressVoice(void *linux_side, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten)
+{
+ return ((ISteamUser*)linux_side)->DecompressVoice((const void *)pCompressed, (uint32)cbCompressed, (void *)pDestBuffer, (uint32)cbDestBufferSize, (uint32 *)nBytesWritten);
+}
+
+HAuthTicket cppISteamUser_SteamUser014_GetAuthSessionTicket(void *linux_side, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ return ((ISteamUser*)linux_side)->GetAuthSessionTicket((void *)pTicket, (int)cbMaxTicket, (uint32 *)pcbTicket);
+}
+
+EBeginAuthSessionResult cppISteamUser_SteamUser014_BeginAuthSession(void *linux_side, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ return ((ISteamUser*)linux_side)->BeginAuthSession((const void *)pAuthTicket, (int)cbAuthTicket, (CSteamID)steamID);
+}
+
+void cppISteamUser_SteamUser014_EndAuthSession(void *linux_side, CSteamID steamID)
+{
+ ((ISteamUser*)linux_side)->EndAuthSession((CSteamID)steamID);
+}
+
+void cppISteamUser_SteamUser014_CancelAuthTicket(void *linux_side, HAuthTicket hAuthTicket)
+{
+ ((ISteamUser*)linux_side)->CancelAuthTicket((HAuthTicket)hAuthTicket);
+}
+
+EUserHasLicenseForAppResult cppISteamUser_SteamUser014_UserHasLicenseForApp(void *linux_side, CSteamID steamID, AppId_t appID)
+{
+ return ((ISteamUser*)linux_side)->UserHasLicenseForApp((CSteamID)steamID, (AppId_t)appID);
+}
+
+bool cppISteamUser_SteamUser014_BIsBehindNAT(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BIsBehindNAT();
+}
+
+void cppISteamUser_SteamUser014_AdvertiseGame(void *linux_side, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer)
+{
+ ((ISteamUser*)linux_side)->AdvertiseGame((CSteamID)steamIDGameServer, (uint32)unIPServer, (uint16)usPortServer);
+}
+
+SteamAPICall_t cppISteamUser_SteamUser014_RequestEncryptedAppTicket(void *linux_side, void * pDataToInclude, int cbDataToInclude)
+{
+ return ((ISteamUser*)linux_side)->RequestEncryptedAppTicket((void *)pDataToInclude, (int)cbDataToInclude);
+}
+
+bool cppISteamUser_SteamUser014_GetEncryptedAppTicket(void *linux_side, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ return ((ISteamUser*)linux_side)->GetEncryptedAppTicket((void *)pTicket, (int)cbMaxTicket, (uint32 *)pcbTicket);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser014.h b/lsteamclient/cppISteamUser_SteamUser014.h
new file mode 100644
index 00000000..28426016
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser014.h
@@ -0,0 +1,27 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamUser cppISteamUser_SteamUser014_GetHSteamUser(void *);
+extern bool cppISteamUser_SteamUser014_BLoggedOn(void *);
+extern CSteamID cppISteamUser_SteamUser014_GetSteamID(void *);
+extern int cppISteamUser_SteamUser014_InitiateGameConnection(void *, void *, int, CSteamID, uint32, uint16, bool);
+extern void cppISteamUser_SteamUser014_TerminateGameConnection(void *, uint32, uint16);
+extern void cppISteamUser_SteamUser014_TrackAppUsageEvent(void *, CGameID, int, const char *);
+extern bool cppISteamUser_SteamUser014_GetUserDataFolder(void *, char *, int);
+extern void cppISteamUser_SteamUser014_StartVoiceRecording(void *);
+extern void cppISteamUser_SteamUser014_StopVoiceRecording(void *);
+extern EVoiceResult cppISteamUser_SteamUser014_GetAvailableVoice(void *, uint32 *, uint32 *);
+extern EVoiceResult cppISteamUser_SteamUser014_GetVoice(void *, bool, void *, uint32, uint32 *, bool, void *, uint32, uint32 *);
+extern EVoiceResult cppISteamUser_SteamUser014_DecompressVoice(void *, const void *, uint32, void *, uint32, uint32 *);
+extern HAuthTicket cppISteamUser_SteamUser014_GetAuthSessionTicket(void *, void *, int, uint32 *);
+extern EBeginAuthSessionResult cppISteamUser_SteamUser014_BeginAuthSession(void *, const void *, int, CSteamID);
+extern void cppISteamUser_SteamUser014_EndAuthSession(void *, CSteamID);
+extern void cppISteamUser_SteamUser014_CancelAuthTicket(void *, HAuthTicket);
+extern EUserHasLicenseForAppResult cppISteamUser_SteamUser014_UserHasLicenseForApp(void *, CSteamID, AppId_t);
+extern bool cppISteamUser_SteamUser014_BIsBehindNAT(void *);
+extern void cppISteamUser_SteamUser014_AdvertiseGame(void *, CSteamID, uint32, uint16);
+extern SteamAPICall_t cppISteamUser_SteamUser014_RequestEncryptedAppTicket(void *, void *, int);
+extern bool cppISteamUser_SteamUser014_GetEncryptedAppTicket(void *, void *, int, uint32 *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser016.cpp b/lsteamclient/cppISteamUser_SteamUser016.cpp
new file mode 100644
index 00000000..45c2f570
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser016.cpp
@@ -0,0 +1,120 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_123a/steam_api.h"
+#include "cppISteamUser_SteamUser016.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamUser cppISteamUser_SteamUser016_GetHSteamUser(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetHSteamUser();
+}
+
+bool cppISteamUser_SteamUser016_BLoggedOn(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BLoggedOn();
+}
+
+CSteamID cppISteamUser_SteamUser016_GetSteamID(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetSteamID();
+}
+
+int cppISteamUser_SteamUser016_InitiateGameConnection(void *linux_side, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ return ((ISteamUser*)linux_side)->InitiateGameConnection((void *)pAuthBlob, (int)cbMaxAuthBlob, (CSteamID)steamIDGameServer, (uint32)unIPServer, (uint16)usPortServer, (bool)bSecure);
+}
+
+void cppISteamUser_SteamUser016_TerminateGameConnection(void *linux_side, uint32 unIPServer, uint16 usPortServer)
+{
+ ((ISteamUser*)linux_side)->TerminateGameConnection((uint32)unIPServer, (uint16)usPortServer);
+}
+
+void cppISteamUser_SteamUser016_TrackAppUsageEvent(void *linux_side, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ ((ISteamUser*)linux_side)->TrackAppUsageEvent((CGameID)gameID, (int)eAppUsageEvent, (const char *)pchExtraInfo);
+}
+
+bool cppISteamUser_SteamUser016_GetUserDataFolder(void *linux_side, char * pchBuffer, int cubBuffer)
+{
+ return ((ISteamUser*)linux_side)->GetUserDataFolder((char *)pchBuffer, (int)cubBuffer);
+}
+
+void cppISteamUser_SteamUser016_StartVoiceRecording(void *linux_side)
+{
+ ((ISteamUser*)linux_side)->StartVoiceRecording();
+}
+
+void cppISteamUser_SteamUser016_StopVoiceRecording(void *linux_side)
+{
+ ((ISteamUser*)linux_side)->StopVoiceRecording();
+}
+
+EVoiceResult cppISteamUser_SteamUser016_GetAvailableVoice(void *linux_side, uint32 * pcbCompressed, uint32 * pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate)
+{
+ return ((ISteamUser*)linux_side)->GetAvailableVoice((uint32 *)pcbCompressed, (uint32 *)pcbUncompressed, (uint32)nUncompressedVoiceDesiredSampleRate);
+}
+
+EVoiceResult cppISteamUser_SteamUser016_GetVoice(void *linux_side, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate)
+{
+ return ((ISteamUser*)linux_side)->GetVoice((bool)bWantCompressed, (void *)pDestBuffer, (uint32)cbDestBufferSize, (uint32 *)nBytesWritten, (bool)bWantUncompressed, (void *)pUncompressedDestBuffer, (uint32)cbUncompressedDestBufferSize, (uint32 *)nUncompressBytesWritten, (uint32)nUncompressedVoiceDesiredSampleRate);
+}
+
+EVoiceResult cppISteamUser_SteamUser016_DecompressVoice(void *linux_side, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate)
+{
+ return ((ISteamUser*)linux_side)->DecompressVoice((const void *)pCompressed, (uint32)cbCompressed, (void *)pDestBuffer, (uint32)cbDestBufferSize, (uint32 *)nBytesWritten, (uint32)nDesiredSampleRate);
+}
+
+uint32 cppISteamUser_SteamUser016_GetVoiceOptimalSampleRate(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetVoiceOptimalSampleRate();
+}
+
+HAuthTicket cppISteamUser_SteamUser016_GetAuthSessionTicket(void *linux_side, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ return ((ISteamUser*)linux_side)->GetAuthSessionTicket((void *)pTicket, (int)cbMaxTicket, (uint32 *)pcbTicket);
+}
+
+EBeginAuthSessionResult cppISteamUser_SteamUser016_BeginAuthSession(void *linux_side, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ return ((ISteamUser*)linux_side)->BeginAuthSession((const void *)pAuthTicket, (int)cbAuthTicket, (CSteamID)steamID);
+}
+
+void cppISteamUser_SteamUser016_EndAuthSession(void *linux_side, CSteamID steamID)
+{
+ ((ISteamUser*)linux_side)->EndAuthSession((CSteamID)steamID);
+}
+
+void cppISteamUser_SteamUser016_CancelAuthTicket(void *linux_side, HAuthTicket hAuthTicket)
+{
+ ((ISteamUser*)linux_side)->CancelAuthTicket((HAuthTicket)hAuthTicket);
+}
+
+EUserHasLicenseForAppResult cppISteamUser_SteamUser016_UserHasLicenseForApp(void *linux_side, CSteamID steamID, AppId_t appID)
+{
+ return ((ISteamUser*)linux_side)->UserHasLicenseForApp((CSteamID)steamID, (AppId_t)appID);
+}
+
+bool cppISteamUser_SteamUser016_BIsBehindNAT(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BIsBehindNAT();
+}
+
+void cppISteamUser_SteamUser016_AdvertiseGame(void *linux_side, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer)
+{
+ ((ISteamUser*)linux_side)->AdvertiseGame((CSteamID)steamIDGameServer, (uint32)unIPServer, (uint16)usPortServer);
+}
+
+SteamAPICall_t cppISteamUser_SteamUser016_RequestEncryptedAppTicket(void *linux_side, void * pDataToInclude, int cbDataToInclude)
+{
+ return ((ISteamUser*)linux_side)->RequestEncryptedAppTicket((void *)pDataToInclude, (int)cbDataToInclude);
+}
+
+bool cppISteamUser_SteamUser016_GetEncryptedAppTicket(void *linux_side, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ return ((ISteamUser*)linux_side)->GetEncryptedAppTicket((void *)pTicket, (int)cbMaxTicket, (uint32 *)pcbTicket);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser016.h b/lsteamclient/cppISteamUser_SteamUser016.h
new file mode 100644
index 00000000..3cbb33af
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser016.h
@@ -0,0 +1,28 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamUser cppISteamUser_SteamUser016_GetHSteamUser(void *);
+extern bool cppISteamUser_SteamUser016_BLoggedOn(void *);
+extern CSteamID cppISteamUser_SteamUser016_GetSteamID(void *);
+extern int cppISteamUser_SteamUser016_InitiateGameConnection(void *, void *, int, CSteamID, uint32, uint16, bool);
+extern void cppISteamUser_SteamUser016_TerminateGameConnection(void *, uint32, uint16);
+extern void cppISteamUser_SteamUser016_TrackAppUsageEvent(void *, CGameID, int, const char *);
+extern bool cppISteamUser_SteamUser016_GetUserDataFolder(void *, char *, int);
+extern void cppISteamUser_SteamUser016_StartVoiceRecording(void *);
+extern void cppISteamUser_SteamUser016_StopVoiceRecording(void *);
+extern EVoiceResult cppISteamUser_SteamUser016_GetAvailableVoice(void *, uint32 *, uint32 *, uint32);
+extern EVoiceResult cppISteamUser_SteamUser016_GetVoice(void *, bool, void *, uint32, uint32 *, bool, void *, uint32, uint32 *, uint32);
+extern EVoiceResult cppISteamUser_SteamUser016_DecompressVoice(void *, const void *, uint32, void *, uint32, uint32 *, uint32);
+extern uint32 cppISteamUser_SteamUser016_GetVoiceOptimalSampleRate(void *);
+extern HAuthTicket cppISteamUser_SteamUser016_GetAuthSessionTicket(void *, void *, int, uint32 *);
+extern EBeginAuthSessionResult cppISteamUser_SteamUser016_BeginAuthSession(void *, const void *, int, CSteamID);
+extern void cppISteamUser_SteamUser016_EndAuthSession(void *, CSteamID);
+extern void cppISteamUser_SteamUser016_CancelAuthTicket(void *, HAuthTicket);
+extern EUserHasLicenseForAppResult cppISteamUser_SteamUser016_UserHasLicenseForApp(void *, CSteamID, AppId_t);
+extern bool cppISteamUser_SteamUser016_BIsBehindNAT(void *);
+extern void cppISteamUser_SteamUser016_AdvertiseGame(void *, CSteamID, uint32, uint16);
+extern SteamAPICall_t cppISteamUser_SteamUser016_RequestEncryptedAppTicket(void *, void *, int);
+extern bool cppISteamUser_SteamUser016_GetEncryptedAppTicket(void *, void *, int, uint32 *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser017.cpp b/lsteamclient/cppISteamUser_SteamUser017.cpp
new file mode 100644
index 00000000..e998154a
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser017.cpp
@@ -0,0 +1,130 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_131/steam_api.h"
+#include "cppISteamUser_SteamUser017.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamUser cppISteamUser_SteamUser017_GetHSteamUser(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetHSteamUser();
+}
+
+bool cppISteamUser_SteamUser017_BLoggedOn(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BLoggedOn();
+}
+
+CSteamID cppISteamUser_SteamUser017_GetSteamID(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetSteamID();
+}
+
+int cppISteamUser_SteamUser017_InitiateGameConnection(void *linux_side, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ return ((ISteamUser*)linux_side)->InitiateGameConnection((void *)pAuthBlob, (int)cbMaxAuthBlob, (CSteamID)steamIDGameServer, (uint32)unIPServer, (uint16)usPortServer, (bool)bSecure);
+}
+
+void cppISteamUser_SteamUser017_TerminateGameConnection(void *linux_side, uint32 unIPServer, uint16 usPortServer)
+{
+ ((ISteamUser*)linux_side)->TerminateGameConnection((uint32)unIPServer, (uint16)usPortServer);
+}
+
+void cppISteamUser_SteamUser017_TrackAppUsageEvent(void *linux_side, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ ((ISteamUser*)linux_side)->TrackAppUsageEvent((CGameID)gameID, (int)eAppUsageEvent, (const char *)pchExtraInfo);
+}
+
+bool cppISteamUser_SteamUser017_GetUserDataFolder(void *linux_side, char * pchBuffer, int cubBuffer)
+{
+ return ((ISteamUser*)linux_side)->GetUserDataFolder((char *)pchBuffer, (int)cubBuffer);
+}
+
+void cppISteamUser_SteamUser017_StartVoiceRecording(void *linux_side)
+{
+ ((ISteamUser*)linux_side)->StartVoiceRecording();
+}
+
+void cppISteamUser_SteamUser017_StopVoiceRecording(void *linux_side)
+{
+ ((ISteamUser*)linux_side)->StopVoiceRecording();
+}
+
+EVoiceResult cppISteamUser_SteamUser017_GetAvailableVoice(void *linux_side, uint32 * pcbCompressed, uint32 * pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate)
+{
+ return ((ISteamUser*)linux_side)->GetAvailableVoice((uint32 *)pcbCompressed, (uint32 *)pcbUncompressed, (uint32)nUncompressedVoiceDesiredSampleRate);
+}
+
+EVoiceResult cppISteamUser_SteamUser017_GetVoice(void *linux_side, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate)
+{
+ return ((ISteamUser*)linux_side)->GetVoice((bool)bWantCompressed, (void *)pDestBuffer, (uint32)cbDestBufferSize, (uint32 *)nBytesWritten, (bool)bWantUncompressed, (void *)pUncompressedDestBuffer, (uint32)cbUncompressedDestBufferSize, (uint32 *)nUncompressBytesWritten, (uint32)nUncompressedVoiceDesiredSampleRate);
+}
+
+EVoiceResult cppISteamUser_SteamUser017_DecompressVoice(void *linux_side, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate)
+{
+ return ((ISteamUser*)linux_side)->DecompressVoice((const void *)pCompressed, (uint32)cbCompressed, (void *)pDestBuffer, (uint32)cbDestBufferSize, (uint32 *)nBytesWritten, (uint32)nDesiredSampleRate);
+}
+
+uint32 cppISteamUser_SteamUser017_GetVoiceOptimalSampleRate(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetVoiceOptimalSampleRate();
+}
+
+HAuthTicket cppISteamUser_SteamUser017_GetAuthSessionTicket(void *linux_side, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ return ((ISteamUser*)linux_side)->GetAuthSessionTicket((void *)pTicket, (int)cbMaxTicket, (uint32 *)pcbTicket);
+}
+
+EBeginAuthSessionResult cppISteamUser_SteamUser017_BeginAuthSession(void *linux_side, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ return ((ISteamUser*)linux_side)->BeginAuthSession((const void *)pAuthTicket, (int)cbAuthTicket, (CSteamID)steamID);
+}
+
+void cppISteamUser_SteamUser017_EndAuthSession(void *linux_side, CSteamID steamID)
+{
+ ((ISteamUser*)linux_side)->EndAuthSession((CSteamID)steamID);
+}
+
+void cppISteamUser_SteamUser017_CancelAuthTicket(void *linux_side, HAuthTicket hAuthTicket)
+{
+ ((ISteamUser*)linux_side)->CancelAuthTicket((HAuthTicket)hAuthTicket);
+}
+
+EUserHasLicenseForAppResult cppISteamUser_SteamUser017_UserHasLicenseForApp(void *linux_side, CSteamID steamID, AppId_t appID)
+{
+ return ((ISteamUser*)linux_side)->UserHasLicenseForApp((CSteamID)steamID, (AppId_t)appID);
+}
+
+bool cppISteamUser_SteamUser017_BIsBehindNAT(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BIsBehindNAT();
+}
+
+void cppISteamUser_SteamUser017_AdvertiseGame(void *linux_side, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer)
+{
+ ((ISteamUser*)linux_side)->AdvertiseGame((CSteamID)steamIDGameServer, (uint32)unIPServer, (uint16)usPortServer);
+}
+
+SteamAPICall_t cppISteamUser_SteamUser017_RequestEncryptedAppTicket(void *linux_side, void * pDataToInclude, int cbDataToInclude)
+{
+ return ((ISteamUser*)linux_side)->RequestEncryptedAppTicket((void *)pDataToInclude, (int)cbDataToInclude);
+}
+
+bool cppISteamUser_SteamUser017_GetEncryptedAppTicket(void *linux_side, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ return ((ISteamUser*)linux_side)->GetEncryptedAppTicket((void *)pTicket, (int)cbMaxTicket, (uint32 *)pcbTicket);
+}
+
+int cppISteamUser_SteamUser017_GetGameBadgeLevel(void *linux_side, int nSeries, bool bFoil)
+{
+ return ((ISteamUser*)linux_side)->GetGameBadgeLevel((int)nSeries, (bool)bFoil);
+}
+
+int cppISteamUser_SteamUser017_GetPlayerSteamLevel(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetPlayerSteamLevel();
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser017.h b/lsteamclient/cppISteamUser_SteamUser017.h
new file mode 100644
index 00000000..57a583e6
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser017.h
@@ -0,0 +1,30 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamUser cppISteamUser_SteamUser017_GetHSteamUser(void *);
+extern bool cppISteamUser_SteamUser017_BLoggedOn(void *);
+extern CSteamID cppISteamUser_SteamUser017_GetSteamID(void *);
+extern int cppISteamUser_SteamUser017_InitiateGameConnection(void *, void *, int, CSteamID, uint32, uint16, bool);
+extern void cppISteamUser_SteamUser017_TerminateGameConnection(void *, uint32, uint16);
+extern void cppISteamUser_SteamUser017_TrackAppUsageEvent(void *, CGameID, int, const char *);
+extern bool cppISteamUser_SteamUser017_GetUserDataFolder(void *, char *, int);
+extern void cppISteamUser_SteamUser017_StartVoiceRecording(void *);
+extern void cppISteamUser_SteamUser017_StopVoiceRecording(void *);
+extern EVoiceResult cppISteamUser_SteamUser017_GetAvailableVoice(void *, uint32 *, uint32 *, uint32);
+extern EVoiceResult cppISteamUser_SteamUser017_GetVoice(void *, bool, void *, uint32, uint32 *, bool, void *, uint32, uint32 *, uint32);
+extern EVoiceResult cppISteamUser_SteamUser017_DecompressVoice(void *, const void *, uint32, void *, uint32, uint32 *, uint32);
+extern uint32 cppISteamUser_SteamUser017_GetVoiceOptimalSampleRate(void *);
+extern HAuthTicket cppISteamUser_SteamUser017_GetAuthSessionTicket(void *, void *, int, uint32 *);
+extern EBeginAuthSessionResult cppISteamUser_SteamUser017_BeginAuthSession(void *, const void *, int, CSteamID);
+extern void cppISteamUser_SteamUser017_EndAuthSession(void *, CSteamID);
+extern void cppISteamUser_SteamUser017_CancelAuthTicket(void *, HAuthTicket);
+extern EUserHasLicenseForAppResult cppISteamUser_SteamUser017_UserHasLicenseForApp(void *, CSteamID, AppId_t);
+extern bool cppISteamUser_SteamUser017_BIsBehindNAT(void *);
+extern void cppISteamUser_SteamUser017_AdvertiseGame(void *, CSteamID, uint32, uint16);
+extern SteamAPICall_t cppISteamUser_SteamUser017_RequestEncryptedAppTicket(void *, void *, int);
+extern bool cppISteamUser_SteamUser017_GetEncryptedAppTicket(void *, void *, int, uint32 *);
+extern int cppISteamUser_SteamUser017_GetGameBadgeLevel(void *, int, bool);
+extern int cppISteamUser_SteamUser017_GetPlayerSteamLevel(void *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser018.cpp b/lsteamclient/cppISteamUser_SteamUser018.cpp
new file mode 100644
index 00000000..361919a9
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser018.cpp
@@ -0,0 +1,135 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_136/steam_api.h"
+#include "cppISteamUser_SteamUser018.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamUser cppISteamUser_SteamUser018_GetHSteamUser(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetHSteamUser();
+}
+
+bool cppISteamUser_SteamUser018_BLoggedOn(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BLoggedOn();
+}
+
+CSteamID cppISteamUser_SteamUser018_GetSteamID(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetSteamID();
+}
+
+int cppISteamUser_SteamUser018_InitiateGameConnection(void *linux_side, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ return ((ISteamUser*)linux_side)->InitiateGameConnection((void *)pAuthBlob, (int)cbMaxAuthBlob, (CSteamID)steamIDGameServer, (uint32)unIPServer, (uint16)usPortServer, (bool)bSecure);
+}
+
+void cppISteamUser_SteamUser018_TerminateGameConnection(void *linux_side, uint32 unIPServer, uint16 usPortServer)
+{
+ ((ISteamUser*)linux_side)->TerminateGameConnection((uint32)unIPServer, (uint16)usPortServer);
+}
+
+void cppISteamUser_SteamUser018_TrackAppUsageEvent(void *linux_side, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ ((ISteamUser*)linux_side)->TrackAppUsageEvent((CGameID)gameID, (int)eAppUsageEvent, (const char *)pchExtraInfo);
+}
+
+bool cppISteamUser_SteamUser018_GetUserDataFolder(void *linux_side, char * pchBuffer, int cubBuffer)
+{
+ return ((ISteamUser*)linux_side)->GetUserDataFolder((char *)pchBuffer, (int)cubBuffer);
+}
+
+void cppISteamUser_SteamUser018_StartVoiceRecording(void *linux_side)
+{
+ ((ISteamUser*)linux_side)->StartVoiceRecording();
+}
+
+void cppISteamUser_SteamUser018_StopVoiceRecording(void *linux_side)
+{
+ ((ISteamUser*)linux_side)->StopVoiceRecording();
+}
+
+EVoiceResult cppISteamUser_SteamUser018_GetAvailableVoice(void *linux_side, uint32 * pcbCompressed, uint32 * pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate)
+{
+ return ((ISteamUser*)linux_side)->GetAvailableVoice((uint32 *)pcbCompressed, (uint32 *)pcbUncompressed, (uint32)nUncompressedVoiceDesiredSampleRate);
+}
+
+EVoiceResult cppISteamUser_SteamUser018_GetVoice(void *linux_side, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate)
+{
+ return ((ISteamUser*)linux_side)->GetVoice((bool)bWantCompressed, (void *)pDestBuffer, (uint32)cbDestBufferSize, (uint32 *)nBytesWritten, (bool)bWantUncompressed, (void *)pUncompressedDestBuffer, (uint32)cbUncompressedDestBufferSize, (uint32 *)nUncompressBytesWritten, (uint32)nUncompressedVoiceDesiredSampleRate);
+}
+
+EVoiceResult cppISteamUser_SteamUser018_DecompressVoice(void *linux_side, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate)
+{
+ return ((ISteamUser*)linux_side)->DecompressVoice((const void *)pCompressed, (uint32)cbCompressed, (void *)pDestBuffer, (uint32)cbDestBufferSize, (uint32 *)nBytesWritten, (uint32)nDesiredSampleRate);
+}
+
+uint32 cppISteamUser_SteamUser018_GetVoiceOptimalSampleRate(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetVoiceOptimalSampleRate();
+}
+
+HAuthTicket cppISteamUser_SteamUser018_GetAuthSessionTicket(void *linux_side, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ return ((ISteamUser*)linux_side)->GetAuthSessionTicket((void *)pTicket, (int)cbMaxTicket, (uint32 *)pcbTicket);
+}
+
+EBeginAuthSessionResult cppISteamUser_SteamUser018_BeginAuthSession(void *linux_side, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ return ((ISteamUser*)linux_side)->BeginAuthSession((const void *)pAuthTicket, (int)cbAuthTicket, (CSteamID)steamID);
+}
+
+void cppISteamUser_SteamUser018_EndAuthSession(void *linux_side, CSteamID steamID)
+{
+ ((ISteamUser*)linux_side)->EndAuthSession((CSteamID)steamID);
+}
+
+void cppISteamUser_SteamUser018_CancelAuthTicket(void *linux_side, HAuthTicket hAuthTicket)
+{
+ ((ISteamUser*)linux_side)->CancelAuthTicket((HAuthTicket)hAuthTicket);
+}
+
+EUserHasLicenseForAppResult cppISteamUser_SteamUser018_UserHasLicenseForApp(void *linux_side, CSteamID steamID, AppId_t appID)
+{
+ return ((ISteamUser*)linux_side)->UserHasLicenseForApp((CSteamID)steamID, (AppId_t)appID);
+}
+
+bool cppISteamUser_SteamUser018_BIsBehindNAT(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BIsBehindNAT();
+}
+
+void cppISteamUser_SteamUser018_AdvertiseGame(void *linux_side, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer)
+{
+ ((ISteamUser*)linux_side)->AdvertiseGame((CSteamID)steamIDGameServer, (uint32)unIPServer, (uint16)usPortServer);
+}
+
+SteamAPICall_t cppISteamUser_SteamUser018_RequestEncryptedAppTicket(void *linux_side, void * pDataToInclude, int cbDataToInclude)
+{
+ return ((ISteamUser*)linux_side)->RequestEncryptedAppTicket((void *)pDataToInclude, (int)cbDataToInclude);
+}
+
+bool cppISteamUser_SteamUser018_GetEncryptedAppTicket(void *linux_side, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ return ((ISteamUser*)linux_side)->GetEncryptedAppTicket((void *)pTicket, (int)cbMaxTicket, (uint32 *)pcbTicket);
+}
+
+int cppISteamUser_SteamUser018_GetGameBadgeLevel(void *linux_side, int nSeries, bool bFoil)
+{
+ return ((ISteamUser*)linux_side)->GetGameBadgeLevel((int)nSeries, (bool)bFoil);
+}
+
+int cppISteamUser_SteamUser018_GetPlayerSteamLevel(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetPlayerSteamLevel();
+}
+
+SteamAPICall_t cppISteamUser_SteamUser018_RequestStoreAuthURL(void *linux_side, const char * pchRedirectURL)
+{
+ return ((ISteamUser*)linux_side)->RequestStoreAuthURL((const char *)pchRedirectURL);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser018.h b/lsteamclient/cppISteamUser_SteamUser018.h
new file mode 100644
index 00000000..1d7e140c
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser018.h
@@ -0,0 +1,31 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamUser cppISteamUser_SteamUser018_GetHSteamUser(void *);
+extern bool cppISteamUser_SteamUser018_BLoggedOn(void *);
+extern CSteamID cppISteamUser_SteamUser018_GetSteamID(void *);
+extern int cppISteamUser_SteamUser018_InitiateGameConnection(void *, void *, int, CSteamID, uint32, uint16, bool);
+extern void cppISteamUser_SteamUser018_TerminateGameConnection(void *, uint32, uint16);
+extern void cppISteamUser_SteamUser018_TrackAppUsageEvent(void *, CGameID, int, const char *);
+extern bool cppISteamUser_SteamUser018_GetUserDataFolder(void *, char *, int);
+extern void cppISteamUser_SteamUser018_StartVoiceRecording(void *);
+extern void cppISteamUser_SteamUser018_StopVoiceRecording(void *);
+extern EVoiceResult cppISteamUser_SteamUser018_GetAvailableVoice(void *, uint32 *, uint32 *, uint32);
+extern EVoiceResult cppISteamUser_SteamUser018_GetVoice(void *, bool, void *, uint32, uint32 *, bool, void *, uint32, uint32 *, uint32);
+extern EVoiceResult cppISteamUser_SteamUser018_DecompressVoice(void *, const void *, uint32, void *, uint32, uint32 *, uint32);
+extern uint32 cppISteamUser_SteamUser018_GetVoiceOptimalSampleRate(void *);
+extern HAuthTicket cppISteamUser_SteamUser018_GetAuthSessionTicket(void *, void *, int, uint32 *);
+extern EBeginAuthSessionResult cppISteamUser_SteamUser018_BeginAuthSession(void *, const void *, int, CSteamID);
+extern void cppISteamUser_SteamUser018_EndAuthSession(void *, CSteamID);
+extern void cppISteamUser_SteamUser018_CancelAuthTicket(void *, HAuthTicket);
+extern EUserHasLicenseForAppResult cppISteamUser_SteamUser018_UserHasLicenseForApp(void *, CSteamID, AppId_t);
+extern bool cppISteamUser_SteamUser018_BIsBehindNAT(void *);
+extern void cppISteamUser_SteamUser018_AdvertiseGame(void *, CSteamID, uint32, uint16);
+extern SteamAPICall_t cppISteamUser_SteamUser018_RequestEncryptedAppTicket(void *, void *, int);
+extern bool cppISteamUser_SteamUser018_GetEncryptedAppTicket(void *, void *, int, uint32 *);
+extern int cppISteamUser_SteamUser018_GetGameBadgeLevel(void *, int, bool);
+extern int cppISteamUser_SteamUser018_GetPlayerSteamLevel(void *);
+extern SteamAPICall_t cppISteamUser_SteamUser018_RequestStoreAuthURL(void *, const char *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser019.cpp b/lsteamclient/cppISteamUser_SteamUser019.cpp
new file mode 100644
index 00000000..233a9505
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser019.cpp
@@ -0,0 +1,155 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamUser_SteamUser019.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+HSteamUser cppISteamUser_SteamUser019_GetHSteamUser(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetHSteamUser();
+}
+
+bool cppISteamUser_SteamUser019_BLoggedOn(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BLoggedOn();
+}
+
+CSteamID cppISteamUser_SteamUser019_GetSteamID(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetSteamID();
+}
+
+int cppISteamUser_SteamUser019_InitiateGameConnection(void *linux_side, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ return ((ISteamUser*)linux_side)->InitiateGameConnection((void *)pAuthBlob, (int)cbMaxAuthBlob, (CSteamID)steamIDGameServer, (uint32)unIPServer, (uint16)usPortServer, (bool)bSecure);
+}
+
+void cppISteamUser_SteamUser019_TerminateGameConnection(void *linux_side, uint32 unIPServer, uint16 usPortServer)
+{
+ ((ISteamUser*)linux_side)->TerminateGameConnection((uint32)unIPServer, (uint16)usPortServer);
+}
+
+void cppISteamUser_SteamUser019_TrackAppUsageEvent(void *linux_side, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ ((ISteamUser*)linux_side)->TrackAppUsageEvent((CGameID)gameID, (int)eAppUsageEvent, (const char *)pchExtraInfo);
+}
+
+bool cppISteamUser_SteamUser019_GetUserDataFolder(void *linux_side, char * pchBuffer, int cubBuffer)
+{
+ return ((ISteamUser*)linux_side)->GetUserDataFolder((char *)pchBuffer, (int)cubBuffer);
+}
+
+void cppISteamUser_SteamUser019_StartVoiceRecording(void *linux_side)
+{
+ ((ISteamUser*)linux_side)->StartVoiceRecording();
+}
+
+void cppISteamUser_SteamUser019_StopVoiceRecording(void *linux_side)
+{
+ ((ISteamUser*)linux_side)->StopVoiceRecording();
+}
+
+EVoiceResult cppISteamUser_SteamUser019_GetAvailableVoice(void *linux_side, uint32 * pcbCompressed, uint32 * pcbUncompressed_Deprecated, uint32 nUncompressedVoiceDesiredSampleRate_Deprecated)
+{
+ return ((ISteamUser*)linux_side)->GetAvailableVoice((uint32 *)pcbCompressed, (uint32 *)pcbUncompressed_Deprecated, (uint32)nUncompressedVoiceDesiredSampleRate_Deprecated);
+}
+
+EVoiceResult cppISteamUser_SteamUser019_GetVoice(void *linux_side, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed_Deprecated, void * pUncompressedDestBuffer_Deprecated, uint32 cbUncompressedDestBufferSize_Deprecated, uint32 * nUncompressBytesWritten_Deprecated, uint32 nUncompressedVoiceDesiredSampleRate_Deprecated)
+{
+ return ((ISteamUser*)linux_side)->GetVoice((bool)bWantCompressed, (void *)pDestBuffer, (uint32)cbDestBufferSize, (uint32 *)nBytesWritten, (bool)bWantUncompressed_Deprecated, (void *)pUncompressedDestBuffer_Deprecated, (uint32)cbUncompressedDestBufferSize_Deprecated, (uint32 *)nUncompressBytesWritten_Deprecated, (uint32)nUncompressedVoiceDesiredSampleRate_Deprecated);
+}
+
+EVoiceResult cppISteamUser_SteamUser019_DecompressVoice(void *linux_side, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate)
+{
+ return ((ISteamUser*)linux_side)->DecompressVoice((const void *)pCompressed, (uint32)cbCompressed, (void *)pDestBuffer, (uint32)cbDestBufferSize, (uint32 *)nBytesWritten, (uint32)nDesiredSampleRate);
+}
+
+uint32 cppISteamUser_SteamUser019_GetVoiceOptimalSampleRate(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetVoiceOptimalSampleRate();
+}
+
+HAuthTicket cppISteamUser_SteamUser019_GetAuthSessionTicket(void *linux_side, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ return ((ISteamUser*)linux_side)->GetAuthSessionTicket((void *)pTicket, (int)cbMaxTicket, (uint32 *)pcbTicket);
+}
+
+EBeginAuthSessionResult cppISteamUser_SteamUser019_BeginAuthSession(void *linux_side, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ return ((ISteamUser*)linux_side)->BeginAuthSession((const void *)pAuthTicket, (int)cbAuthTicket, (CSteamID)steamID);
+}
+
+void cppISteamUser_SteamUser019_EndAuthSession(void *linux_side, CSteamID steamID)
+{
+ ((ISteamUser*)linux_side)->EndAuthSession((CSteamID)steamID);
+}
+
+void cppISteamUser_SteamUser019_CancelAuthTicket(void *linux_side, HAuthTicket hAuthTicket)
+{
+ ((ISteamUser*)linux_side)->CancelAuthTicket((HAuthTicket)hAuthTicket);
+}
+
+EUserHasLicenseForAppResult cppISteamUser_SteamUser019_UserHasLicenseForApp(void *linux_side, CSteamID steamID, AppId_t appID)
+{
+ return ((ISteamUser*)linux_side)->UserHasLicenseForApp((CSteamID)steamID, (AppId_t)appID);
+}
+
+bool cppISteamUser_SteamUser019_BIsBehindNAT(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BIsBehindNAT();
+}
+
+void cppISteamUser_SteamUser019_AdvertiseGame(void *linux_side, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer)
+{
+ ((ISteamUser*)linux_side)->AdvertiseGame((CSteamID)steamIDGameServer, (uint32)unIPServer, (uint16)usPortServer);
+}
+
+SteamAPICall_t cppISteamUser_SteamUser019_RequestEncryptedAppTicket(void *linux_side, void * pDataToInclude, int cbDataToInclude)
+{
+ return ((ISteamUser*)linux_side)->RequestEncryptedAppTicket((void *)pDataToInclude, (int)cbDataToInclude);
+}
+
+bool cppISteamUser_SteamUser019_GetEncryptedAppTicket(void *linux_side, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ return ((ISteamUser*)linux_side)->GetEncryptedAppTicket((void *)pTicket, (int)cbMaxTicket, (uint32 *)pcbTicket);
+}
+
+int cppISteamUser_SteamUser019_GetGameBadgeLevel(void *linux_side, int nSeries, bool bFoil)
+{
+ return ((ISteamUser*)linux_side)->GetGameBadgeLevel((int)nSeries, (bool)bFoil);
+}
+
+int cppISteamUser_SteamUser019_GetPlayerSteamLevel(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->GetPlayerSteamLevel();
+}
+
+SteamAPICall_t cppISteamUser_SteamUser019_RequestStoreAuthURL(void *linux_side, const char * pchRedirectURL)
+{
+ return ((ISteamUser*)linux_side)->RequestStoreAuthURL((const char *)pchRedirectURL);
+}
+
+bool cppISteamUser_SteamUser019_BIsPhoneVerified(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BIsPhoneVerified();
+}
+
+bool cppISteamUser_SteamUser019_BIsTwoFactorEnabled(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BIsTwoFactorEnabled();
+}
+
+bool cppISteamUser_SteamUser019_BIsPhoneIdentifying(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BIsPhoneIdentifying();
+}
+
+bool cppISteamUser_SteamUser019_BIsPhoneRequiringVerification(void *linux_side)
+{
+ return ((ISteamUser*)linux_side)->BIsPhoneRequiringVerification();
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUser_SteamUser019.h b/lsteamclient/cppISteamUser_SteamUser019.h
new file mode 100644
index 00000000..112d56c3
--- /dev/null
+++ b/lsteamclient/cppISteamUser_SteamUser019.h
@@ -0,0 +1,35 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern HSteamUser cppISteamUser_SteamUser019_GetHSteamUser(void *);
+extern bool cppISteamUser_SteamUser019_BLoggedOn(void *);
+extern CSteamID cppISteamUser_SteamUser019_GetSteamID(void *);
+extern int cppISteamUser_SteamUser019_InitiateGameConnection(void *, void *, int, CSteamID, uint32, uint16, bool);
+extern void cppISteamUser_SteamUser019_TerminateGameConnection(void *, uint32, uint16);
+extern void cppISteamUser_SteamUser019_TrackAppUsageEvent(void *, CGameID, int, const char *);
+extern bool cppISteamUser_SteamUser019_GetUserDataFolder(void *, char *, int);
+extern void cppISteamUser_SteamUser019_StartVoiceRecording(void *);
+extern void cppISteamUser_SteamUser019_StopVoiceRecording(void *);
+extern EVoiceResult cppISteamUser_SteamUser019_GetAvailableVoice(void *, uint32 *, uint32 *, uint32);
+extern EVoiceResult cppISteamUser_SteamUser019_GetVoice(void *, bool, void *, uint32, uint32 *, bool, void *, uint32, uint32 *, uint32);
+extern EVoiceResult cppISteamUser_SteamUser019_DecompressVoice(void *, const void *, uint32, void *, uint32, uint32 *, uint32);
+extern uint32 cppISteamUser_SteamUser019_GetVoiceOptimalSampleRate(void *);
+extern HAuthTicket cppISteamUser_SteamUser019_GetAuthSessionTicket(void *, void *, int, uint32 *);
+extern EBeginAuthSessionResult cppISteamUser_SteamUser019_BeginAuthSession(void *, const void *, int, CSteamID);
+extern void cppISteamUser_SteamUser019_EndAuthSession(void *, CSteamID);
+extern void cppISteamUser_SteamUser019_CancelAuthTicket(void *, HAuthTicket);
+extern EUserHasLicenseForAppResult cppISteamUser_SteamUser019_UserHasLicenseForApp(void *, CSteamID, AppId_t);
+extern bool cppISteamUser_SteamUser019_BIsBehindNAT(void *);
+extern void cppISteamUser_SteamUser019_AdvertiseGame(void *, CSteamID, uint32, uint16);
+extern SteamAPICall_t cppISteamUser_SteamUser019_RequestEncryptedAppTicket(void *, void *, int);
+extern bool cppISteamUser_SteamUser019_GetEncryptedAppTicket(void *, void *, int, uint32 *);
+extern int cppISteamUser_SteamUser019_GetGameBadgeLevel(void *, int, bool);
+extern int cppISteamUser_SteamUser019_GetPlayerSteamLevel(void *);
+extern SteamAPICall_t cppISteamUser_SteamUser019_RequestStoreAuthURL(void *, const char *);
+extern bool cppISteamUser_SteamUser019_BIsPhoneVerified(void *);
+extern bool cppISteamUser_SteamUser019_BIsTwoFactorEnabled(void *);
+extern bool cppISteamUser_SteamUser019_BIsPhoneIdentifying(void *);
+extern bool cppISteamUser_SteamUser019_BIsPhoneRequiringVerification(void *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUtils_SteamUtils002.cpp b/lsteamclient/cppISteamUtils_SteamUtils002.cpp
new file mode 100644
index 00000000..330f8ea9
--- /dev/null
+++ b/lsteamclient/cppISteamUtils_SteamUtils002.cpp
@@ -0,0 +1,80 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_103/steam_api.h"
+#include "cppISteamUtils_SteamUtils002.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+uint32 cppISteamUtils_SteamUtils002_GetSecondsSinceAppActive(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetSecondsSinceAppActive();
+}
+
+uint32 cppISteamUtils_SteamUtils002_GetSecondsSinceComputerActive(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetSecondsSinceComputerActive();
+}
+
+EUniverse cppISteamUtils_SteamUtils002_GetConnectedUniverse(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetConnectedUniverse();
+}
+
+uint32 cppISteamUtils_SteamUtils002_GetServerRealTime(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetServerRealTime();
+}
+
+const char * cppISteamUtils_SteamUtils002_GetIPCountry(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetIPCountry();
+}
+
+bool cppISteamUtils_SteamUtils002_GetImageSize(void *linux_side, int iImage, uint32 * pnWidth, uint32 * pnHeight)
+{
+ return ((ISteamUtils*)linux_side)->GetImageSize((int)iImage, (uint32 *)pnWidth, (uint32 *)pnHeight);
+}
+
+bool cppISteamUtils_SteamUtils002_GetImageRGBA(void *linux_side, int iImage, uint8 * pubDest, int nDestBufferSize)
+{
+ return ((ISteamUtils*)linux_side)->GetImageRGBA((int)iImage, (uint8 *)pubDest, (int)nDestBufferSize);
+}
+
+bool cppISteamUtils_SteamUtils002_GetCSERIPPort(void *linux_side, uint32 * unIP, uint16 * usPort)
+{
+ return ((ISteamUtils*)linux_side)->GetCSERIPPort((uint32 *)unIP, (uint16 *)usPort);
+}
+
+uint8 cppISteamUtils_SteamUtils002_GetCurrentBatteryPower(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetCurrentBatteryPower();
+}
+
+uint32 cppISteamUtils_SteamUtils002_GetAppID(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetAppID();
+}
+
+void cppISteamUtils_SteamUtils002_SetOverlayNotificationPosition(void *linux_side, ENotificationPosition eNotificationPosition)
+{
+ ((ISteamUtils*)linux_side)->SetOverlayNotificationPosition((ENotificationPosition)eNotificationPosition);
+}
+
+bool cppISteamUtils_SteamUtils002_IsAPICallCompleted(void *linux_side, SteamAPICall_t hSteamAPICall, bool * pbFailed)
+{
+ return ((ISteamUtils*)linux_side)->IsAPICallCompleted((SteamAPICall_t)hSteamAPICall, (bool *)pbFailed);
+}
+
+ESteamAPICallFailure cppISteamUtils_SteamUtils002_GetAPICallFailureReason(void *linux_side, SteamAPICall_t hSteamAPICall)
+{
+ return ((ISteamUtils*)linux_side)->GetAPICallFailureReason((SteamAPICall_t)hSteamAPICall);
+}
+
+bool cppISteamUtils_SteamUtils002_GetAPICallResult(void *linux_side, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed)
+{
+ return ((ISteamUtils*)linux_side)->GetAPICallResult((SteamAPICall_t)hSteamAPICall, (void *)pCallback, (int)cubCallback, (int)iCallbackExpected, (bool *)pbFailed);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUtils_SteamUtils002.h b/lsteamclient/cppISteamUtils_SteamUtils002.h
new file mode 100644
index 00000000..9f603a49
--- /dev/null
+++ b/lsteamclient/cppISteamUtils_SteamUtils002.h
@@ -0,0 +1,20 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern uint32 cppISteamUtils_SteamUtils002_GetSecondsSinceAppActive(void *);
+extern uint32 cppISteamUtils_SteamUtils002_GetSecondsSinceComputerActive(void *);
+extern EUniverse cppISteamUtils_SteamUtils002_GetConnectedUniverse(void *);
+extern uint32 cppISteamUtils_SteamUtils002_GetServerRealTime(void *);
+extern const char * cppISteamUtils_SteamUtils002_GetIPCountry(void *);
+extern bool cppISteamUtils_SteamUtils002_GetImageSize(void *, int, uint32 *, uint32 *);
+extern bool cppISteamUtils_SteamUtils002_GetImageRGBA(void *, int, uint8 *, int);
+extern bool cppISteamUtils_SteamUtils002_GetCSERIPPort(void *, uint32 *, uint16 *);
+extern uint8 cppISteamUtils_SteamUtils002_GetCurrentBatteryPower(void *);
+extern uint32 cppISteamUtils_SteamUtils002_GetAppID(void *);
+extern void cppISteamUtils_SteamUtils002_SetOverlayNotificationPosition(void *, ENotificationPosition);
+extern bool cppISteamUtils_SteamUtils002_IsAPICallCompleted(void *, SteamAPICall_t, bool *);
+extern ESteamAPICallFailure cppISteamUtils_SteamUtils002_GetAPICallFailureReason(void *, SteamAPICall_t);
+extern bool cppISteamUtils_SteamUtils002_GetAPICallResult(void *, SteamAPICall_t, void *, int, int, bool *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUtils_SteamUtils004.cpp b/lsteamclient/cppISteamUtils_SteamUtils004.cpp
new file mode 100644
index 00000000..c1741a2a
--- /dev/null
+++ b/lsteamclient/cppISteamUtils_SteamUtils004.cpp
@@ -0,0 +1,100 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_106/steam_api.h"
+#include "cppISteamUtils_SteamUtils004.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+uint32 cppISteamUtils_SteamUtils004_GetSecondsSinceAppActive(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetSecondsSinceAppActive();
+}
+
+uint32 cppISteamUtils_SteamUtils004_GetSecondsSinceComputerActive(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetSecondsSinceComputerActive();
+}
+
+EUniverse cppISteamUtils_SteamUtils004_GetConnectedUniverse(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetConnectedUniverse();
+}
+
+uint32 cppISteamUtils_SteamUtils004_GetServerRealTime(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetServerRealTime();
+}
+
+const char * cppISteamUtils_SteamUtils004_GetIPCountry(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetIPCountry();
+}
+
+bool cppISteamUtils_SteamUtils004_GetImageSize(void *linux_side, int iImage, uint32 * pnWidth, uint32 * pnHeight)
+{
+ return ((ISteamUtils*)linux_side)->GetImageSize((int)iImage, (uint32 *)pnWidth, (uint32 *)pnHeight);
+}
+
+bool cppISteamUtils_SteamUtils004_GetImageRGBA(void *linux_side, int iImage, uint8 * pubDest, int nDestBufferSize)
+{
+ return ((ISteamUtils*)linux_side)->GetImageRGBA((int)iImage, (uint8 *)pubDest, (int)nDestBufferSize);
+}
+
+bool cppISteamUtils_SteamUtils004_GetCSERIPPort(void *linux_side, uint32 * unIP, uint16 * usPort)
+{
+ return ((ISteamUtils*)linux_side)->GetCSERIPPort((uint32 *)unIP, (uint16 *)usPort);
+}
+
+uint8 cppISteamUtils_SteamUtils004_GetCurrentBatteryPower(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetCurrentBatteryPower();
+}
+
+uint32 cppISteamUtils_SteamUtils004_GetAppID(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetAppID();
+}
+
+void cppISteamUtils_SteamUtils004_SetOverlayNotificationPosition(void *linux_side, ENotificationPosition eNotificationPosition)
+{
+ ((ISteamUtils*)linux_side)->SetOverlayNotificationPosition((ENotificationPosition)eNotificationPosition);
+}
+
+bool cppISteamUtils_SteamUtils004_IsAPICallCompleted(void *linux_side, SteamAPICall_t hSteamAPICall, bool * pbFailed)
+{
+ return ((ISteamUtils*)linux_side)->IsAPICallCompleted((SteamAPICall_t)hSteamAPICall, (bool *)pbFailed);
+}
+
+ESteamAPICallFailure cppISteamUtils_SteamUtils004_GetAPICallFailureReason(void *linux_side, SteamAPICall_t hSteamAPICall)
+{
+ return ((ISteamUtils*)linux_side)->GetAPICallFailureReason((SteamAPICall_t)hSteamAPICall);
+}
+
+bool cppISteamUtils_SteamUtils004_GetAPICallResult(void *linux_side, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed)
+{
+ return ((ISteamUtils*)linux_side)->GetAPICallResult((SteamAPICall_t)hSteamAPICall, (void *)pCallback, (int)cubCallback, (int)iCallbackExpected, (bool *)pbFailed);
+}
+
+void cppISteamUtils_SteamUtils004_RunFrame(void *linux_side)
+{
+ ((ISteamUtils*)linux_side)->RunFrame();
+}
+
+uint32 cppISteamUtils_SteamUtils004_GetIPCCallCount(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetIPCCallCount();
+}
+
+void cppISteamUtils_SteamUtils004_SetWarningMessageHook(void *linux_side, SteamAPIWarningMessageHook_t pFunction)
+{
+ ((ISteamUtils*)linux_side)->SetWarningMessageHook((SteamAPIWarningMessageHook_t)pFunction);
+}
+
+bool cppISteamUtils_SteamUtils004_IsOverlayEnabled(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->IsOverlayEnabled();
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUtils_SteamUtils004.h b/lsteamclient/cppISteamUtils_SteamUtils004.h
new file mode 100644
index 00000000..a7f6c6d1
--- /dev/null
+++ b/lsteamclient/cppISteamUtils_SteamUtils004.h
@@ -0,0 +1,24 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern uint32 cppISteamUtils_SteamUtils004_GetSecondsSinceAppActive(void *);
+extern uint32 cppISteamUtils_SteamUtils004_GetSecondsSinceComputerActive(void *);
+extern EUniverse cppISteamUtils_SteamUtils004_GetConnectedUniverse(void *);
+extern uint32 cppISteamUtils_SteamUtils004_GetServerRealTime(void *);
+extern const char * cppISteamUtils_SteamUtils004_GetIPCountry(void *);
+extern bool cppISteamUtils_SteamUtils004_GetImageSize(void *, int, uint32 *, uint32 *);
+extern bool cppISteamUtils_SteamUtils004_GetImageRGBA(void *, int, uint8 *, int);
+extern bool cppISteamUtils_SteamUtils004_GetCSERIPPort(void *, uint32 *, uint16 *);
+extern uint8 cppISteamUtils_SteamUtils004_GetCurrentBatteryPower(void *);
+extern uint32 cppISteamUtils_SteamUtils004_GetAppID(void *);
+extern void cppISteamUtils_SteamUtils004_SetOverlayNotificationPosition(void *, ENotificationPosition);
+extern bool cppISteamUtils_SteamUtils004_IsAPICallCompleted(void *, SteamAPICall_t, bool *);
+extern ESteamAPICallFailure cppISteamUtils_SteamUtils004_GetAPICallFailureReason(void *, SteamAPICall_t);
+extern bool cppISteamUtils_SteamUtils004_GetAPICallResult(void *, SteamAPICall_t, void *, int, int, bool *);
+extern void cppISteamUtils_SteamUtils004_RunFrame(void *);
+extern uint32 cppISteamUtils_SteamUtils004_GetIPCCallCount(void *);
+extern void cppISteamUtils_SteamUtils004_SetWarningMessageHook(void *, SteamAPIWarningMessageHook_t);
+extern bool cppISteamUtils_SteamUtils004_IsOverlayEnabled(void *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUtils_SteamUtils005.cpp b/lsteamclient/cppISteamUtils_SteamUtils005.cpp
new file mode 100644
index 00000000..88431c76
--- /dev/null
+++ b/lsteamclient/cppISteamUtils_SteamUtils005.cpp
@@ -0,0 +1,125 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_123a/steam_api.h"
+#include "cppISteamUtils_SteamUtils005.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+uint32 cppISteamUtils_SteamUtils005_GetSecondsSinceAppActive(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetSecondsSinceAppActive();
+}
+
+uint32 cppISteamUtils_SteamUtils005_GetSecondsSinceComputerActive(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetSecondsSinceComputerActive();
+}
+
+EUniverse cppISteamUtils_SteamUtils005_GetConnectedUniverse(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetConnectedUniverse();
+}
+
+uint32 cppISteamUtils_SteamUtils005_GetServerRealTime(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetServerRealTime();
+}
+
+const char * cppISteamUtils_SteamUtils005_GetIPCountry(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetIPCountry();
+}
+
+bool cppISteamUtils_SteamUtils005_GetImageSize(void *linux_side, int iImage, uint32 * pnWidth, uint32 * pnHeight)
+{
+ return ((ISteamUtils*)linux_side)->GetImageSize((int)iImage, (uint32 *)pnWidth, (uint32 *)pnHeight);
+}
+
+bool cppISteamUtils_SteamUtils005_GetImageRGBA(void *linux_side, int iImage, uint8 * pubDest, int nDestBufferSize)
+{
+ return ((ISteamUtils*)linux_side)->GetImageRGBA((int)iImage, (uint8 *)pubDest, (int)nDestBufferSize);
+}
+
+bool cppISteamUtils_SteamUtils005_GetCSERIPPort(void *linux_side, uint32 * unIP, uint16 * usPort)
+{
+ return ((ISteamUtils*)linux_side)->GetCSERIPPort((uint32 *)unIP, (uint16 *)usPort);
+}
+
+uint8 cppISteamUtils_SteamUtils005_GetCurrentBatteryPower(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetCurrentBatteryPower();
+}
+
+uint32 cppISteamUtils_SteamUtils005_GetAppID(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetAppID();
+}
+
+void cppISteamUtils_SteamUtils005_SetOverlayNotificationPosition(void *linux_side, ENotificationPosition eNotificationPosition)
+{
+ ((ISteamUtils*)linux_side)->SetOverlayNotificationPosition((ENotificationPosition)eNotificationPosition);
+}
+
+bool cppISteamUtils_SteamUtils005_IsAPICallCompleted(void *linux_side, SteamAPICall_t hSteamAPICall, bool * pbFailed)
+{
+ return ((ISteamUtils*)linux_side)->IsAPICallCompleted((SteamAPICall_t)hSteamAPICall, (bool *)pbFailed);
+}
+
+ESteamAPICallFailure cppISteamUtils_SteamUtils005_GetAPICallFailureReason(void *linux_side, SteamAPICall_t hSteamAPICall)
+{
+ return ((ISteamUtils*)linux_side)->GetAPICallFailureReason((SteamAPICall_t)hSteamAPICall);
+}
+
+bool cppISteamUtils_SteamUtils005_GetAPICallResult(void *linux_side, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed)
+{
+ return ((ISteamUtils*)linux_side)->GetAPICallResult((SteamAPICall_t)hSteamAPICall, (void *)pCallback, (int)cubCallback, (int)iCallbackExpected, (bool *)pbFailed);
+}
+
+void cppISteamUtils_SteamUtils005_RunFrame(void *linux_side)
+{
+ ((ISteamUtils*)linux_side)->RunFrame();
+}
+
+uint32 cppISteamUtils_SteamUtils005_GetIPCCallCount(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetIPCCallCount();
+}
+
+void cppISteamUtils_SteamUtils005_SetWarningMessageHook(void *linux_side, SteamAPIWarningMessageHook_t pFunction)
+{
+ ((ISteamUtils*)linux_side)->SetWarningMessageHook((SteamAPIWarningMessageHook_t)pFunction);
+}
+
+bool cppISteamUtils_SteamUtils005_IsOverlayEnabled(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->IsOverlayEnabled();
+}
+
+bool cppISteamUtils_SteamUtils005_BOverlayNeedsPresent(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->BOverlayNeedsPresent();
+}
+
+SteamAPICall_t cppISteamUtils_SteamUtils005_CheckFileSignature(void *linux_side, const char * szFileName)
+{
+ return ((ISteamUtils*)linux_side)->CheckFileSignature((const char *)szFileName);
+}
+
+bool cppISteamUtils_SteamUtils005_ShowGamepadTextInput(void *linux_side, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax)
+{
+ return ((ISteamUtils*)linux_side)->ShowGamepadTextInput((EGamepadTextInputMode)eInputMode, (EGamepadTextInputLineMode)eLineInputMode, (const char *)pchDescription, (uint32)unCharMax);
+}
+
+uint32 cppISteamUtils_SteamUtils005_GetEnteredGamepadTextLength(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetEnteredGamepadTextLength();
+}
+
+bool cppISteamUtils_SteamUtils005_GetEnteredGamepadTextInput(void *linux_side, char * pchText, uint32 cchText)
+{
+ return ((ISteamUtils*)linux_side)->GetEnteredGamepadTextInput((char *)pchText, (uint32)cchText);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUtils_SteamUtils005.h b/lsteamclient/cppISteamUtils_SteamUtils005.h
new file mode 100644
index 00000000..cba80609
--- /dev/null
+++ b/lsteamclient/cppISteamUtils_SteamUtils005.h
@@ -0,0 +1,29 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern uint32 cppISteamUtils_SteamUtils005_GetSecondsSinceAppActive(void *);
+extern uint32 cppISteamUtils_SteamUtils005_GetSecondsSinceComputerActive(void *);
+extern EUniverse cppISteamUtils_SteamUtils005_GetConnectedUniverse(void *);
+extern uint32 cppISteamUtils_SteamUtils005_GetServerRealTime(void *);
+extern const char * cppISteamUtils_SteamUtils005_GetIPCountry(void *);
+extern bool cppISteamUtils_SteamUtils005_GetImageSize(void *, int, uint32 *, uint32 *);
+extern bool cppISteamUtils_SteamUtils005_GetImageRGBA(void *, int, uint8 *, int);
+extern bool cppISteamUtils_SteamUtils005_GetCSERIPPort(void *, uint32 *, uint16 *);
+extern uint8 cppISteamUtils_SteamUtils005_GetCurrentBatteryPower(void *);
+extern uint32 cppISteamUtils_SteamUtils005_GetAppID(void *);
+extern void cppISteamUtils_SteamUtils005_SetOverlayNotificationPosition(void *, ENotificationPosition);
+extern bool cppISteamUtils_SteamUtils005_IsAPICallCompleted(void *, SteamAPICall_t, bool *);
+extern ESteamAPICallFailure cppISteamUtils_SteamUtils005_GetAPICallFailureReason(void *, SteamAPICall_t);
+extern bool cppISteamUtils_SteamUtils005_GetAPICallResult(void *, SteamAPICall_t, void *, int, int, bool *);
+extern void cppISteamUtils_SteamUtils005_RunFrame(void *);
+extern uint32 cppISteamUtils_SteamUtils005_GetIPCCallCount(void *);
+extern void cppISteamUtils_SteamUtils005_SetWarningMessageHook(void *, SteamAPIWarningMessageHook_t);
+extern bool cppISteamUtils_SteamUtils005_IsOverlayEnabled(void *);
+extern bool cppISteamUtils_SteamUtils005_BOverlayNeedsPresent(void *);
+extern SteamAPICall_t cppISteamUtils_SteamUtils005_CheckFileSignature(void *, const char *);
+extern bool cppISteamUtils_SteamUtils005_ShowGamepadTextInput(void *, EGamepadTextInputMode, EGamepadTextInputLineMode, const char *, uint32);
+extern uint32 cppISteamUtils_SteamUtils005_GetEnteredGamepadTextLength(void *);
+extern bool cppISteamUtils_SteamUtils005_GetEnteredGamepadTextInput(void *, char *, uint32);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUtils_SteamUtils006.cpp b/lsteamclient/cppISteamUtils_SteamUtils006.cpp
new file mode 100644
index 00000000..ac0f5561
--- /dev/null
+++ b/lsteamclient/cppISteamUtils_SteamUtils006.cpp
@@ -0,0 +1,135 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_128/steam_api.h"
+#include "cppISteamUtils_SteamUtils006.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+uint32 cppISteamUtils_SteamUtils006_GetSecondsSinceAppActive(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetSecondsSinceAppActive();
+}
+
+uint32 cppISteamUtils_SteamUtils006_GetSecondsSinceComputerActive(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetSecondsSinceComputerActive();
+}
+
+EUniverse cppISteamUtils_SteamUtils006_GetConnectedUniverse(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetConnectedUniverse();
+}
+
+uint32 cppISteamUtils_SteamUtils006_GetServerRealTime(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetServerRealTime();
+}
+
+const char * cppISteamUtils_SteamUtils006_GetIPCountry(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetIPCountry();
+}
+
+bool cppISteamUtils_SteamUtils006_GetImageSize(void *linux_side, int iImage, uint32 * pnWidth, uint32 * pnHeight)
+{
+ return ((ISteamUtils*)linux_side)->GetImageSize((int)iImage, (uint32 *)pnWidth, (uint32 *)pnHeight);
+}
+
+bool cppISteamUtils_SteamUtils006_GetImageRGBA(void *linux_side, int iImage, uint8 * pubDest, int nDestBufferSize)
+{
+ return ((ISteamUtils*)linux_side)->GetImageRGBA((int)iImage, (uint8 *)pubDest, (int)nDestBufferSize);
+}
+
+bool cppISteamUtils_SteamUtils006_GetCSERIPPort(void *linux_side, uint32 * unIP, uint16 * usPort)
+{
+ return ((ISteamUtils*)linux_side)->GetCSERIPPort((uint32 *)unIP, (uint16 *)usPort);
+}
+
+uint8 cppISteamUtils_SteamUtils006_GetCurrentBatteryPower(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetCurrentBatteryPower();
+}
+
+uint32 cppISteamUtils_SteamUtils006_GetAppID(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetAppID();
+}
+
+void cppISteamUtils_SteamUtils006_SetOverlayNotificationPosition(void *linux_side, ENotificationPosition eNotificationPosition)
+{
+ ((ISteamUtils*)linux_side)->SetOverlayNotificationPosition((ENotificationPosition)eNotificationPosition);
+}
+
+bool cppISteamUtils_SteamUtils006_IsAPICallCompleted(void *linux_side, SteamAPICall_t hSteamAPICall, bool * pbFailed)
+{
+ return ((ISteamUtils*)linux_side)->IsAPICallCompleted((SteamAPICall_t)hSteamAPICall, (bool *)pbFailed);
+}
+
+ESteamAPICallFailure cppISteamUtils_SteamUtils006_GetAPICallFailureReason(void *linux_side, SteamAPICall_t hSteamAPICall)
+{
+ return ((ISteamUtils*)linux_side)->GetAPICallFailureReason((SteamAPICall_t)hSteamAPICall);
+}
+
+bool cppISteamUtils_SteamUtils006_GetAPICallResult(void *linux_side, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed)
+{
+ return ((ISteamUtils*)linux_side)->GetAPICallResult((SteamAPICall_t)hSteamAPICall, (void *)pCallback, (int)cubCallback, (int)iCallbackExpected, (bool *)pbFailed);
+}
+
+void cppISteamUtils_SteamUtils006_RunFrame(void *linux_side)
+{
+ ((ISteamUtils*)linux_side)->RunFrame();
+}
+
+uint32 cppISteamUtils_SteamUtils006_GetIPCCallCount(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetIPCCallCount();
+}
+
+void cppISteamUtils_SteamUtils006_SetWarningMessageHook(void *linux_side, SteamAPIWarningMessageHook_t pFunction)
+{
+ ((ISteamUtils*)linux_side)->SetWarningMessageHook((SteamAPIWarningMessageHook_t)pFunction);
+}
+
+bool cppISteamUtils_SteamUtils006_IsOverlayEnabled(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->IsOverlayEnabled();
+}
+
+bool cppISteamUtils_SteamUtils006_BOverlayNeedsPresent(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->BOverlayNeedsPresent();
+}
+
+SteamAPICall_t cppISteamUtils_SteamUtils006_CheckFileSignature(void *linux_side, const char * szFileName)
+{
+ return ((ISteamUtils*)linux_side)->CheckFileSignature((const char *)szFileName);
+}
+
+bool cppISteamUtils_SteamUtils006_ShowGamepadTextInput(void *linux_side, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax)
+{
+ return ((ISteamUtils*)linux_side)->ShowGamepadTextInput((EGamepadTextInputMode)eInputMode, (EGamepadTextInputLineMode)eLineInputMode, (const char *)pchDescription, (uint32)unCharMax);
+}
+
+uint32 cppISteamUtils_SteamUtils006_GetEnteredGamepadTextLength(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetEnteredGamepadTextLength();
+}
+
+bool cppISteamUtils_SteamUtils006_GetEnteredGamepadTextInput(void *linux_side, char * pchText, uint32 cchText)
+{
+ return ((ISteamUtils*)linux_side)->GetEnteredGamepadTextInput((char *)pchText, (uint32)cchText);
+}
+
+const char * cppISteamUtils_SteamUtils006_GetSteamUILanguage(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetSteamUILanguage();
+}
+
+bool cppISteamUtils_SteamUtils006_IsSteamRunningInVR(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->IsSteamRunningInVR();
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUtils_SteamUtils006.h b/lsteamclient/cppISteamUtils_SteamUtils006.h
new file mode 100644
index 00000000..3084c55a
--- /dev/null
+++ b/lsteamclient/cppISteamUtils_SteamUtils006.h
@@ -0,0 +1,31 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern uint32 cppISteamUtils_SteamUtils006_GetSecondsSinceAppActive(void *);
+extern uint32 cppISteamUtils_SteamUtils006_GetSecondsSinceComputerActive(void *);
+extern EUniverse cppISteamUtils_SteamUtils006_GetConnectedUniverse(void *);
+extern uint32 cppISteamUtils_SteamUtils006_GetServerRealTime(void *);
+extern const char * cppISteamUtils_SteamUtils006_GetIPCountry(void *);
+extern bool cppISteamUtils_SteamUtils006_GetImageSize(void *, int, uint32 *, uint32 *);
+extern bool cppISteamUtils_SteamUtils006_GetImageRGBA(void *, int, uint8 *, int);
+extern bool cppISteamUtils_SteamUtils006_GetCSERIPPort(void *, uint32 *, uint16 *);
+extern uint8 cppISteamUtils_SteamUtils006_GetCurrentBatteryPower(void *);
+extern uint32 cppISteamUtils_SteamUtils006_GetAppID(void *);
+extern void cppISteamUtils_SteamUtils006_SetOverlayNotificationPosition(void *, ENotificationPosition);
+extern bool cppISteamUtils_SteamUtils006_IsAPICallCompleted(void *, SteamAPICall_t, bool *);
+extern ESteamAPICallFailure cppISteamUtils_SteamUtils006_GetAPICallFailureReason(void *, SteamAPICall_t);
+extern bool cppISteamUtils_SteamUtils006_GetAPICallResult(void *, SteamAPICall_t, void *, int, int, bool *);
+extern void cppISteamUtils_SteamUtils006_RunFrame(void *);
+extern uint32 cppISteamUtils_SteamUtils006_GetIPCCallCount(void *);
+extern void cppISteamUtils_SteamUtils006_SetWarningMessageHook(void *, SteamAPIWarningMessageHook_t);
+extern bool cppISteamUtils_SteamUtils006_IsOverlayEnabled(void *);
+extern bool cppISteamUtils_SteamUtils006_BOverlayNeedsPresent(void *);
+extern SteamAPICall_t cppISteamUtils_SteamUtils006_CheckFileSignature(void *, const char *);
+extern bool cppISteamUtils_SteamUtils006_ShowGamepadTextInput(void *, EGamepadTextInputMode, EGamepadTextInputLineMode, const char *, uint32);
+extern uint32 cppISteamUtils_SteamUtils006_GetEnteredGamepadTextLength(void *);
+extern bool cppISteamUtils_SteamUtils006_GetEnteredGamepadTextInput(void *, char *, uint32);
+extern const char * cppISteamUtils_SteamUtils006_GetSteamUILanguage(void *);
+extern bool cppISteamUtils_SteamUtils006_IsSteamRunningInVR(void *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUtils_SteamUtils007.cpp b/lsteamclient/cppISteamUtils_SteamUtils007.cpp
new file mode 100644
index 00000000..cc8c0c14
--- /dev/null
+++ b/lsteamclient/cppISteamUtils_SteamUtils007.cpp
@@ -0,0 +1,140 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_136/steam_api.h"
+#include "cppISteamUtils_SteamUtils007.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+uint32 cppISteamUtils_SteamUtils007_GetSecondsSinceAppActive(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetSecondsSinceAppActive();
+}
+
+uint32 cppISteamUtils_SteamUtils007_GetSecondsSinceComputerActive(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetSecondsSinceComputerActive();
+}
+
+EUniverse cppISteamUtils_SteamUtils007_GetConnectedUniverse(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetConnectedUniverse();
+}
+
+uint32 cppISteamUtils_SteamUtils007_GetServerRealTime(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetServerRealTime();
+}
+
+const char * cppISteamUtils_SteamUtils007_GetIPCountry(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetIPCountry();
+}
+
+bool cppISteamUtils_SteamUtils007_GetImageSize(void *linux_side, int iImage, uint32 * pnWidth, uint32 * pnHeight)
+{
+ return ((ISteamUtils*)linux_side)->GetImageSize((int)iImage, (uint32 *)pnWidth, (uint32 *)pnHeight);
+}
+
+bool cppISteamUtils_SteamUtils007_GetImageRGBA(void *linux_side, int iImage, uint8 * pubDest, int nDestBufferSize)
+{
+ return ((ISteamUtils*)linux_side)->GetImageRGBA((int)iImage, (uint8 *)pubDest, (int)nDestBufferSize);
+}
+
+bool cppISteamUtils_SteamUtils007_GetCSERIPPort(void *linux_side, uint32 * unIP, uint16 * usPort)
+{
+ return ((ISteamUtils*)linux_side)->GetCSERIPPort((uint32 *)unIP, (uint16 *)usPort);
+}
+
+uint8 cppISteamUtils_SteamUtils007_GetCurrentBatteryPower(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetCurrentBatteryPower();
+}
+
+uint32 cppISteamUtils_SteamUtils007_GetAppID(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetAppID();
+}
+
+void cppISteamUtils_SteamUtils007_SetOverlayNotificationPosition(void *linux_side, ENotificationPosition eNotificationPosition)
+{
+ ((ISteamUtils*)linux_side)->SetOverlayNotificationPosition((ENotificationPosition)eNotificationPosition);
+}
+
+bool cppISteamUtils_SteamUtils007_IsAPICallCompleted(void *linux_side, SteamAPICall_t hSteamAPICall, bool * pbFailed)
+{
+ return ((ISteamUtils*)linux_side)->IsAPICallCompleted((SteamAPICall_t)hSteamAPICall, (bool *)pbFailed);
+}
+
+ESteamAPICallFailure cppISteamUtils_SteamUtils007_GetAPICallFailureReason(void *linux_side, SteamAPICall_t hSteamAPICall)
+{
+ return ((ISteamUtils*)linux_side)->GetAPICallFailureReason((SteamAPICall_t)hSteamAPICall);
+}
+
+bool cppISteamUtils_SteamUtils007_GetAPICallResult(void *linux_side, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed)
+{
+ return ((ISteamUtils*)linux_side)->GetAPICallResult((SteamAPICall_t)hSteamAPICall, (void *)pCallback, (int)cubCallback, (int)iCallbackExpected, (bool *)pbFailed);
+}
+
+void cppISteamUtils_SteamUtils007_RunFrame(void *linux_side)
+{
+ ((ISteamUtils*)linux_side)->RunFrame();
+}
+
+uint32 cppISteamUtils_SteamUtils007_GetIPCCallCount(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetIPCCallCount();
+}
+
+void cppISteamUtils_SteamUtils007_SetWarningMessageHook(void *linux_side, SteamAPIWarningMessageHook_t pFunction)
+{
+ ((ISteamUtils*)linux_side)->SetWarningMessageHook((SteamAPIWarningMessageHook_t)pFunction);
+}
+
+bool cppISteamUtils_SteamUtils007_IsOverlayEnabled(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->IsOverlayEnabled();
+}
+
+bool cppISteamUtils_SteamUtils007_BOverlayNeedsPresent(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->BOverlayNeedsPresent();
+}
+
+SteamAPICall_t cppISteamUtils_SteamUtils007_CheckFileSignature(void *linux_side, const char * szFileName)
+{
+ return ((ISteamUtils*)linux_side)->CheckFileSignature((const char *)szFileName);
+}
+
+bool cppISteamUtils_SteamUtils007_ShowGamepadTextInput(void *linux_side, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText)
+{
+ return ((ISteamUtils*)linux_side)->ShowGamepadTextInput((EGamepadTextInputMode)eInputMode, (EGamepadTextInputLineMode)eLineInputMode, (const char *)pchDescription, (uint32)unCharMax, (const char *)pchExistingText);
+}
+
+uint32 cppISteamUtils_SteamUtils007_GetEnteredGamepadTextLength(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetEnteredGamepadTextLength();
+}
+
+bool cppISteamUtils_SteamUtils007_GetEnteredGamepadTextInput(void *linux_side, char * pchText, uint32 cchText)
+{
+ return ((ISteamUtils*)linux_side)->GetEnteredGamepadTextInput((char *)pchText, (uint32)cchText);
+}
+
+const char * cppISteamUtils_SteamUtils007_GetSteamUILanguage(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetSteamUILanguage();
+}
+
+bool cppISteamUtils_SteamUtils007_IsSteamRunningInVR(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->IsSteamRunningInVR();
+}
+
+void cppISteamUtils_SteamUtils007_SetOverlayNotificationInset(void *linux_side, int nHorizontalInset, int nVerticalInset)
+{
+ ((ISteamUtils*)linux_side)->SetOverlayNotificationInset((int)nHorizontalInset, (int)nVerticalInset);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUtils_SteamUtils007.h b/lsteamclient/cppISteamUtils_SteamUtils007.h
new file mode 100644
index 00000000..b2964623
--- /dev/null
+++ b/lsteamclient/cppISteamUtils_SteamUtils007.h
@@ -0,0 +1,32 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern uint32 cppISteamUtils_SteamUtils007_GetSecondsSinceAppActive(void *);
+extern uint32 cppISteamUtils_SteamUtils007_GetSecondsSinceComputerActive(void *);
+extern EUniverse cppISteamUtils_SteamUtils007_GetConnectedUniverse(void *);
+extern uint32 cppISteamUtils_SteamUtils007_GetServerRealTime(void *);
+extern const char * cppISteamUtils_SteamUtils007_GetIPCountry(void *);
+extern bool cppISteamUtils_SteamUtils007_GetImageSize(void *, int, uint32 *, uint32 *);
+extern bool cppISteamUtils_SteamUtils007_GetImageRGBA(void *, int, uint8 *, int);
+extern bool cppISteamUtils_SteamUtils007_GetCSERIPPort(void *, uint32 *, uint16 *);
+extern uint8 cppISteamUtils_SteamUtils007_GetCurrentBatteryPower(void *);
+extern uint32 cppISteamUtils_SteamUtils007_GetAppID(void *);
+extern void cppISteamUtils_SteamUtils007_SetOverlayNotificationPosition(void *, ENotificationPosition);
+extern bool cppISteamUtils_SteamUtils007_IsAPICallCompleted(void *, SteamAPICall_t, bool *);
+extern ESteamAPICallFailure cppISteamUtils_SteamUtils007_GetAPICallFailureReason(void *, SteamAPICall_t);
+extern bool cppISteamUtils_SteamUtils007_GetAPICallResult(void *, SteamAPICall_t, void *, int, int, bool *);
+extern void cppISteamUtils_SteamUtils007_RunFrame(void *);
+extern uint32 cppISteamUtils_SteamUtils007_GetIPCCallCount(void *);
+extern void cppISteamUtils_SteamUtils007_SetWarningMessageHook(void *, SteamAPIWarningMessageHook_t);
+extern bool cppISteamUtils_SteamUtils007_IsOverlayEnabled(void *);
+extern bool cppISteamUtils_SteamUtils007_BOverlayNeedsPresent(void *);
+extern SteamAPICall_t cppISteamUtils_SteamUtils007_CheckFileSignature(void *, const char *);
+extern bool cppISteamUtils_SteamUtils007_ShowGamepadTextInput(void *, EGamepadTextInputMode, EGamepadTextInputLineMode, const char *, uint32, const char *);
+extern uint32 cppISteamUtils_SteamUtils007_GetEnteredGamepadTextLength(void *);
+extern bool cppISteamUtils_SteamUtils007_GetEnteredGamepadTextInput(void *, char *, uint32);
+extern const char * cppISteamUtils_SteamUtils007_GetSteamUILanguage(void *);
+extern bool cppISteamUtils_SteamUtils007_IsSteamRunningInVR(void *);
+extern void cppISteamUtils_SteamUtils007_SetOverlayNotificationInset(void *, int, int);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUtils_SteamUtils008.cpp b/lsteamclient/cppISteamUtils_SteamUtils008.cpp
new file mode 100644
index 00000000..4efd508c
--- /dev/null
+++ b/lsteamclient/cppISteamUtils_SteamUtils008.cpp
@@ -0,0 +1,150 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_139/steam_api.h"
+#include "cppISteamUtils_SteamUtils008.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+uint32 cppISteamUtils_SteamUtils008_GetSecondsSinceAppActive(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetSecondsSinceAppActive();
+}
+
+uint32 cppISteamUtils_SteamUtils008_GetSecondsSinceComputerActive(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetSecondsSinceComputerActive();
+}
+
+EUniverse cppISteamUtils_SteamUtils008_GetConnectedUniverse(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetConnectedUniverse();
+}
+
+uint32 cppISteamUtils_SteamUtils008_GetServerRealTime(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetServerRealTime();
+}
+
+const char * cppISteamUtils_SteamUtils008_GetIPCountry(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetIPCountry();
+}
+
+bool cppISteamUtils_SteamUtils008_GetImageSize(void *linux_side, int iImage, uint32 * pnWidth, uint32 * pnHeight)
+{
+ return ((ISteamUtils*)linux_side)->GetImageSize((int)iImage, (uint32 *)pnWidth, (uint32 *)pnHeight);
+}
+
+bool cppISteamUtils_SteamUtils008_GetImageRGBA(void *linux_side, int iImage, uint8 * pubDest, int nDestBufferSize)
+{
+ return ((ISteamUtils*)linux_side)->GetImageRGBA((int)iImage, (uint8 *)pubDest, (int)nDestBufferSize);
+}
+
+bool cppISteamUtils_SteamUtils008_GetCSERIPPort(void *linux_side, uint32 * unIP, uint16 * usPort)
+{
+ return ((ISteamUtils*)linux_side)->GetCSERIPPort((uint32 *)unIP, (uint16 *)usPort);
+}
+
+uint8 cppISteamUtils_SteamUtils008_GetCurrentBatteryPower(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetCurrentBatteryPower();
+}
+
+uint32 cppISteamUtils_SteamUtils008_GetAppID(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetAppID();
+}
+
+void cppISteamUtils_SteamUtils008_SetOverlayNotificationPosition(void *linux_side, ENotificationPosition eNotificationPosition)
+{
+ ((ISteamUtils*)linux_side)->SetOverlayNotificationPosition((ENotificationPosition)eNotificationPosition);
+}
+
+bool cppISteamUtils_SteamUtils008_IsAPICallCompleted(void *linux_side, SteamAPICall_t hSteamAPICall, bool * pbFailed)
+{
+ return ((ISteamUtils*)linux_side)->IsAPICallCompleted((SteamAPICall_t)hSteamAPICall, (bool *)pbFailed);
+}
+
+ESteamAPICallFailure cppISteamUtils_SteamUtils008_GetAPICallFailureReason(void *linux_side, SteamAPICall_t hSteamAPICall)
+{
+ return ((ISteamUtils*)linux_side)->GetAPICallFailureReason((SteamAPICall_t)hSteamAPICall);
+}
+
+bool cppISteamUtils_SteamUtils008_GetAPICallResult(void *linux_side, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed)
+{
+ return ((ISteamUtils*)linux_side)->GetAPICallResult((SteamAPICall_t)hSteamAPICall, (void *)pCallback, (int)cubCallback, (int)iCallbackExpected, (bool *)pbFailed);
+}
+
+void cppISteamUtils_SteamUtils008_RunFrame(void *linux_side)
+{
+ ((ISteamUtils*)linux_side)->RunFrame();
+}
+
+uint32 cppISteamUtils_SteamUtils008_GetIPCCallCount(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetIPCCallCount();
+}
+
+void cppISteamUtils_SteamUtils008_SetWarningMessageHook(void *linux_side, SteamAPIWarningMessageHook_t pFunction)
+{
+ ((ISteamUtils*)linux_side)->SetWarningMessageHook((SteamAPIWarningMessageHook_t)pFunction);
+}
+
+bool cppISteamUtils_SteamUtils008_IsOverlayEnabled(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->IsOverlayEnabled();
+}
+
+bool cppISteamUtils_SteamUtils008_BOverlayNeedsPresent(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->BOverlayNeedsPresent();
+}
+
+SteamAPICall_t cppISteamUtils_SteamUtils008_CheckFileSignature(void *linux_side, const char * szFileName)
+{
+ return ((ISteamUtils*)linux_side)->CheckFileSignature((const char *)szFileName);
+}
+
+bool cppISteamUtils_SteamUtils008_ShowGamepadTextInput(void *linux_side, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText)
+{
+ return ((ISteamUtils*)linux_side)->ShowGamepadTextInput((EGamepadTextInputMode)eInputMode, (EGamepadTextInputLineMode)eLineInputMode, (const char *)pchDescription, (uint32)unCharMax, (const char *)pchExistingText);
+}
+
+uint32 cppISteamUtils_SteamUtils008_GetEnteredGamepadTextLength(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetEnteredGamepadTextLength();
+}
+
+bool cppISteamUtils_SteamUtils008_GetEnteredGamepadTextInput(void *linux_side, char * pchText, uint32 cchText)
+{
+ return ((ISteamUtils*)linux_side)->GetEnteredGamepadTextInput((char *)pchText, (uint32)cchText);
+}
+
+const char * cppISteamUtils_SteamUtils008_GetSteamUILanguage(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetSteamUILanguage();
+}
+
+bool cppISteamUtils_SteamUtils008_IsSteamRunningInVR(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->IsSteamRunningInVR();
+}
+
+void cppISteamUtils_SteamUtils008_SetOverlayNotificationInset(void *linux_side, int nHorizontalInset, int nVerticalInset)
+{
+ ((ISteamUtils*)linux_side)->SetOverlayNotificationInset((int)nHorizontalInset, (int)nVerticalInset);
+}
+
+bool cppISteamUtils_SteamUtils008_IsSteamInBigPictureMode(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->IsSteamInBigPictureMode();
+}
+
+void cppISteamUtils_SteamUtils008_StartVRDashboard(void *linux_side)
+{
+ ((ISteamUtils*)linux_side)->StartVRDashboard();
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUtils_SteamUtils008.h b/lsteamclient/cppISteamUtils_SteamUtils008.h
new file mode 100644
index 00000000..017b1b48
--- /dev/null
+++ b/lsteamclient/cppISteamUtils_SteamUtils008.h
@@ -0,0 +1,34 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern uint32 cppISteamUtils_SteamUtils008_GetSecondsSinceAppActive(void *);
+extern uint32 cppISteamUtils_SteamUtils008_GetSecondsSinceComputerActive(void *);
+extern EUniverse cppISteamUtils_SteamUtils008_GetConnectedUniverse(void *);
+extern uint32 cppISteamUtils_SteamUtils008_GetServerRealTime(void *);
+extern const char * cppISteamUtils_SteamUtils008_GetIPCountry(void *);
+extern bool cppISteamUtils_SteamUtils008_GetImageSize(void *, int, uint32 *, uint32 *);
+extern bool cppISteamUtils_SteamUtils008_GetImageRGBA(void *, int, uint8 *, int);
+extern bool cppISteamUtils_SteamUtils008_GetCSERIPPort(void *, uint32 *, uint16 *);
+extern uint8 cppISteamUtils_SteamUtils008_GetCurrentBatteryPower(void *);
+extern uint32 cppISteamUtils_SteamUtils008_GetAppID(void *);
+extern void cppISteamUtils_SteamUtils008_SetOverlayNotificationPosition(void *, ENotificationPosition);
+extern bool cppISteamUtils_SteamUtils008_IsAPICallCompleted(void *, SteamAPICall_t, bool *);
+extern ESteamAPICallFailure cppISteamUtils_SteamUtils008_GetAPICallFailureReason(void *, SteamAPICall_t);
+extern bool cppISteamUtils_SteamUtils008_GetAPICallResult(void *, SteamAPICall_t, void *, int, int, bool *);
+extern void cppISteamUtils_SteamUtils008_RunFrame(void *);
+extern uint32 cppISteamUtils_SteamUtils008_GetIPCCallCount(void *);
+extern void cppISteamUtils_SteamUtils008_SetWarningMessageHook(void *, SteamAPIWarningMessageHook_t);
+extern bool cppISteamUtils_SteamUtils008_IsOverlayEnabled(void *);
+extern bool cppISteamUtils_SteamUtils008_BOverlayNeedsPresent(void *);
+extern SteamAPICall_t cppISteamUtils_SteamUtils008_CheckFileSignature(void *, const char *);
+extern bool cppISteamUtils_SteamUtils008_ShowGamepadTextInput(void *, EGamepadTextInputMode, EGamepadTextInputLineMode, const char *, uint32, const char *);
+extern uint32 cppISteamUtils_SteamUtils008_GetEnteredGamepadTextLength(void *);
+extern bool cppISteamUtils_SteamUtils008_GetEnteredGamepadTextInput(void *, char *, uint32);
+extern const char * cppISteamUtils_SteamUtils008_GetSteamUILanguage(void *);
+extern bool cppISteamUtils_SteamUtils008_IsSteamRunningInVR(void *);
+extern void cppISteamUtils_SteamUtils008_SetOverlayNotificationInset(void *, int, int);
+extern bool cppISteamUtils_SteamUtils008_IsSteamInBigPictureMode(void *);
+extern void cppISteamUtils_SteamUtils008_StartVRDashboard(void *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUtils_SteamUtils009.cpp b/lsteamclient/cppISteamUtils_SteamUtils009.cpp
new file mode 100644
index 00000000..d7466407
--- /dev/null
+++ b/lsteamclient/cppISteamUtils_SteamUtils009.cpp
@@ -0,0 +1,160 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamUtils_SteamUtils009.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+uint32 cppISteamUtils_SteamUtils009_GetSecondsSinceAppActive(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetSecondsSinceAppActive();
+}
+
+uint32 cppISteamUtils_SteamUtils009_GetSecondsSinceComputerActive(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetSecondsSinceComputerActive();
+}
+
+EUniverse cppISteamUtils_SteamUtils009_GetConnectedUniverse(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetConnectedUniverse();
+}
+
+uint32 cppISteamUtils_SteamUtils009_GetServerRealTime(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetServerRealTime();
+}
+
+const char * cppISteamUtils_SteamUtils009_GetIPCountry(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetIPCountry();
+}
+
+bool cppISteamUtils_SteamUtils009_GetImageSize(void *linux_side, int iImage, uint32 * pnWidth, uint32 * pnHeight)
+{
+ return ((ISteamUtils*)linux_side)->GetImageSize((int)iImage, (uint32 *)pnWidth, (uint32 *)pnHeight);
+}
+
+bool cppISteamUtils_SteamUtils009_GetImageRGBA(void *linux_side, int iImage, uint8 * pubDest, int nDestBufferSize)
+{
+ return ((ISteamUtils*)linux_side)->GetImageRGBA((int)iImage, (uint8 *)pubDest, (int)nDestBufferSize);
+}
+
+bool cppISteamUtils_SteamUtils009_GetCSERIPPort(void *linux_side, uint32 * unIP, uint16 * usPort)
+{
+ return ((ISteamUtils*)linux_side)->GetCSERIPPort((uint32 *)unIP, (uint16 *)usPort);
+}
+
+uint8 cppISteamUtils_SteamUtils009_GetCurrentBatteryPower(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetCurrentBatteryPower();
+}
+
+uint32 cppISteamUtils_SteamUtils009_GetAppID(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetAppID();
+}
+
+void cppISteamUtils_SteamUtils009_SetOverlayNotificationPosition(void *linux_side, ENotificationPosition eNotificationPosition)
+{
+ ((ISteamUtils*)linux_side)->SetOverlayNotificationPosition((ENotificationPosition)eNotificationPosition);
+}
+
+bool cppISteamUtils_SteamUtils009_IsAPICallCompleted(void *linux_side, SteamAPICall_t hSteamAPICall, bool * pbFailed)
+{
+ return ((ISteamUtils*)linux_side)->IsAPICallCompleted((SteamAPICall_t)hSteamAPICall, (bool *)pbFailed);
+}
+
+ESteamAPICallFailure cppISteamUtils_SteamUtils009_GetAPICallFailureReason(void *linux_side, SteamAPICall_t hSteamAPICall)
+{
+ return ((ISteamUtils*)linux_side)->GetAPICallFailureReason((SteamAPICall_t)hSteamAPICall);
+}
+
+bool cppISteamUtils_SteamUtils009_GetAPICallResult(void *linux_side, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed)
+{
+ return ((ISteamUtils*)linux_side)->GetAPICallResult((SteamAPICall_t)hSteamAPICall, (void *)pCallback, (int)cubCallback, (int)iCallbackExpected, (bool *)pbFailed);
+}
+
+void cppISteamUtils_SteamUtils009_RunFrame(void *linux_side)
+{
+ ((ISteamUtils*)linux_side)->RunFrame();
+}
+
+uint32 cppISteamUtils_SteamUtils009_GetIPCCallCount(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetIPCCallCount();
+}
+
+void cppISteamUtils_SteamUtils009_SetWarningMessageHook(void *linux_side, SteamAPIWarningMessageHook_t pFunction)
+{
+ ((ISteamUtils*)linux_side)->SetWarningMessageHook((SteamAPIWarningMessageHook_t)pFunction);
+}
+
+bool cppISteamUtils_SteamUtils009_IsOverlayEnabled(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->IsOverlayEnabled();
+}
+
+bool cppISteamUtils_SteamUtils009_BOverlayNeedsPresent(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->BOverlayNeedsPresent();
+}
+
+SteamAPICall_t cppISteamUtils_SteamUtils009_CheckFileSignature(void *linux_side, const char * szFileName)
+{
+ return ((ISteamUtils*)linux_side)->CheckFileSignature((const char *)szFileName);
+}
+
+bool cppISteamUtils_SteamUtils009_ShowGamepadTextInput(void *linux_side, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText)
+{
+ return ((ISteamUtils*)linux_side)->ShowGamepadTextInput((EGamepadTextInputMode)eInputMode, (EGamepadTextInputLineMode)eLineInputMode, (const char *)pchDescription, (uint32)unCharMax, (const char *)pchExistingText);
+}
+
+uint32 cppISteamUtils_SteamUtils009_GetEnteredGamepadTextLength(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetEnteredGamepadTextLength();
+}
+
+bool cppISteamUtils_SteamUtils009_GetEnteredGamepadTextInput(void *linux_side, char * pchText, uint32 cchText)
+{
+ return ((ISteamUtils*)linux_side)->GetEnteredGamepadTextInput((char *)pchText, (uint32)cchText);
+}
+
+const char * cppISteamUtils_SteamUtils009_GetSteamUILanguage(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->GetSteamUILanguage();
+}
+
+bool cppISteamUtils_SteamUtils009_IsSteamRunningInVR(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->IsSteamRunningInVR();
+}
+
+void cppISteamUtils_SteamUtils009_SetOverlayNotificationInset(void *linux_side, int nHorizontalInset, int nVerticalInset)
+{
+ ((ISteamUtils*)linux_side)->SetOverlayNotificationInset((int)nHorizontalInset, (int)nVerticalInset);
+}
+
+bool cppISteamUtils_SteamUtils009_IsSteamInBigPictureMode(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->IsSteamInBigPictureMode();
+}
+
+void cppISteamUtils_SteamUtils009_StartVRDashboard(void *linux_side)
+{
+ ((ISteamUtils*)linux_side)->StartVRDashboard();
+}
+
+bool cppISteamUtils_SteamUtils009_IsVRHeadsetStreamingEnabled(void *linux_side)
+{
+ return ((ISteamUtils*)linux_side)->IsVRHeadsetStreamingEnabled();
+}
+
+void cppISteamUtils_SteamUtils009_SetVRHeadsetStreamingEnabled(void *linux_side, bool bEnabled)
+{
+ ((ISteamUtils*)linux_side)->SetVRHeadsetStreamingEnabled((bool)bEnabled);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamUtils_SteamUtils009.h b/lsteamclient/cppISteamUtils_SteamUtils009.h
new file mode 100644
index 00000000..34a66c34
--- /dev/null
+++ b/lsteamclient/cppISteamUtils_SteamUtils009.h
@@ -0,0 +1,36 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern uint32 cppISteamUtils_SteamUtils009_GetSecondsSinceAppActive(void *);
+extern uint32 cppISteamUtils_SteamUtils009_GetSecondsSinceComputerActive(void *);
+extern EUniverse cppISteamUtils_SteamUtils009_GetConnectedUniverse(void *);
+extern uint32 cppISteamUtils_SteamUtils009_GetServerRealTime(void *);
+extern const char * cppISteamUtils_SteamUtils009_GetIPCountry(void *);
+extern bool cppISteamUtils_SteamUtils009_GetImageSize(void *, int, uint32 *, uint32 *);
+extern bool cppISteamUtils_SteamUtils009_GetImageRGBA(void *, int, uint8 *, int);
+extern bool cppISteamUtils_SteamUtils009_GetCSERIPPort(void *, uint32 *, uint16 *);
+extern uint8 cppISteamUtils_SteamUtils009_GetCurrentBatteryPower(void *);
+extern uint32 cppISteamUtils_SteamUtils009_GetAppID(void *);
+extern void cppISteamUtils_SteamUtils009_SetOverlayNotificationPosition(void *, ENotificationPosition);
+extern bool cppISteamUtils_SteamUtils009_IsAPICallCompleted(void *, SteamAPICall_t, bool *);
+extern ESteamAPICallFailure cppISteamUtils_SteamUtils009_GetAPICallFailureReason(void *, SteamAPICall_t);
+extern bool cppISteamUtils_SteamUtils009_GetAPICallResult(void *, SteamAPICall_t, void *, int, int, bool *);
+extern void cppISteamUtils_SteamUtils009_RunFrame(void *);
+extern uint32 cppISteamUtils_SteamUtils009_GetIPCCallCount(void *);
+extern void cppISteamUtils_SteamUtils009_SetWarningMessageHook(void *, SteamAPIWarningMessageHook_t);
+extern bool cppISteamUtils_SteamUtils009_IsOverlayEnabled(void *);
+extern bool cppISteamUtils_SteamUtils009_BOverlayNeedsPresent(void *);
+extern SteamAPICall_t cppISteamUtils_SteamUtils009_CheckFileSignature(void *, const char *);
+extern bool cppISteamUtils_SteamUtils009_ShowGamepadTextInput(void *, EGamepadTextInputMode, EGamepadTextInputLineMode, const char *, uint32, const char *);
+extern uint32 cppISteamUtils_SteamUtils009_GetEnteredGamepadTextLength(void *);
+extern bool cppISteamUtils_SteamUtils009_GetEnteredGamepadTextInput(void *, char *, uint32);
+extern const char * cppISteamUtils_SteamUtils009_GetSteamUILanguage(void *);
+extern bool cppISteamUtils_SteamUtils009_IsSteamRunningInVR(void *);
+extern void cppISteamUtils_SteamUtils009_SetOverlayNotificationInset(void *, int, int);
+extern bool cppISteamUtils_SteamUtils009_IsSteamInBigPictureMode(void *);
+extern void cppISteamUtils_SteamUtils009_StartVRDashboard(void *);
+extern bool cppISteamUtils_SteamUtils009_IsVRHeadsetStreamingEnabled(void *);
+extern void cppISteamUtils_SteamUtils009_SetVRHeadsetStreamingEnabled(void *, bool);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamVideo_STEAMVIDEO_INTERFACE_V001.cpp b/lsteamclient/cppISteamVideo_STEAMVIDEO_INTERFACE_V001.cpp
new file mode 100644
index 00000000..01136100
--- /dev/null
+++ b/lsteamclient/cppISteamVideo_STEAMVIDEO_INTERFACE_V001.cpp
@@ -0,0 +1,20 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_139/steam_api.h"
+#include "cppISteamVideo_STEAMVIDEO_INTERFACE_V001.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+void cppISteamVideo_STEAMVIDEO_INTERFACE_V001_GetVideoURL(void *linux_side, AppId_t unVideoAppID)
+{
+ ((ISteamVideo*)linux_side)->GetVideoURL((AppId_t)unVideoAppID);
+}
+
+bool cppISteamVideo_STEAMVIDEO_INTERFACE_V001_IsBroadcasting(void *linux_side, int * pnNumViewers)
+{
+ return ((ISteamVideo*)linux_side)->IsBroadcasting((int *)pnNumViewers);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamVideo_STEAMVIDEO_INTERFACE_V001.h b/lsteamclient/cppISteamVideo_STEAMVIDEO_INTERFACE_V001.h
new file mode 100644
index 00000000..eb8ed0c7
--- /dev/null
+++ b/lsteamclient/cppISteamVideo_STEAMVIDEO_INTERFACE_V001.h
@@ -0,0 +1,8 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern void cppISteamVideo_STEAMVIDEO_INTERFACE_V001_GetVideoURL(void *, AppId_t);
+extern bool cppISteamVideo_STEAMVIDEO_INTERFACE_V001_IsBroadcasting(void *, int *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamVideo_STEAMVIDEO_INTERFACE_V002.cpp b/lsteamclient/cppISteamVideo_STEAMVIDEO_INTERFACE_V002.cpp
new file mode 100644
index 00000000..84e6ed69
--- /dev/null
+++ b/lsteamclient/cppISteamVideo_STEAMVIDEO_INTERFACE_V002.cpp
@@ -0,0 +1,30 @@
+#include "steamclient_private.h"
+#include "steam_defs.h"
+#include "steamworks_sdk_142/steam_api.h"
+#include "cppISteamVideo_STEAMVIDEO_INTERFACE_V002.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+void cppISteamVideo_STEAMVIDEO_INTERFACE_V002_GetVideoURL(void *linux_side, AppId_t unVideoAppID)
+{
+ ((ISteamVideo*)linux_side)->GetVideoURL((AppId_t)unVideoAppID);
+}
+
+bool cppISteamVideo_STEAMVIDEO_INTERFACE_V002_IsBroadcasting(void *linux_side, int * pnNumViewers)
+{
+ return ((ISteamVideo*)linux_side)->IsBroadcasting((int *)pnNumViewers);
+}
+
+void cppISteamVideo_STEAMVIDEO_INTERFACE_V002_GetOPFSettings(void *linux_side, AppId_t unVideoAppID)
+{
+ ((ISteamVideo*)linux_side)->GetOPFSettings((AppId_t)unVideoAppID);
+}
+
+bool cppISteamVideo_STEAMVIDEO_INTERFACE_V002_GetOPFStringForApp(void *linux_side, AppId_t unVideoAppID, char * pchBuffer, int32 * pnBufferSize)
+{
+ return ((ISteamVideo*)linux_side)->GetOPFStringForApp((AppId_t)unVideoAppID, (char *)pchBuffer, (int32 *)pnBufferSize);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cppISteamVideo_STEAMVIDEO_INTERFACE_V002.h b/lsteamclient/cppISteamVideo_STEAMVIDEO_INTERFACE_V002.h
new file mode 100644
index 00000000..755175b5
--- /dev/null
+++ b/lsteamclient/cppISteamVideo_STEAMVIDEO_INTERFACE_V002.h
@@ -0,0 +1,10 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern void cppISteamVideo_STEAMVIDEO_INTERFACE_V002_GetVideoURL(void *, AppId_t);
+extern bool cppISteamVideo_STEAMVIDEO_INTERFACE_V002_IsBroadcasting(void *, int *);
+extern void cppISteamVideo_STEAMVIDEO_INTERFACE_V002_GetOPFSettings(void *, AppId_t);
+extern bool cppISteamVideo_STEAMVIDEO_INTERFACE_V002_GetOPFStringForApp(void *, AppId_t, char *, int32 *);
+#ifdef __cplusplus
+}
+#endif
diff --git a/lsteamclient/cxx.h b/lsteamclient/cxx.h
new file mode 100644
index 00000000..a2f59d7c
--- /dev/null
+++ b/lsteamclient/cxx.h
@@ -0,0 +1,449 @@
+/*
+ * Copyright 2012 Piotr Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/* Copied from dlls/msvcrt/cxx.h */
+#undef __thiscall
+#ifdef __i386__ /* thiscall functions are i386-specific */
+
+#define THISCALL(func) __thiscall_ ## func
+#define THISCALL_NAME(func) __ASM_NAME("__thiscall_" #func)
+#define __thiscall __stdcall
+#define DEFINE_THISCALL_WRAPPER(func,args) \
+ extern void THISCALL(func)(void); \
+ __ASM_GLOBAL_FUNC(__thiscall_ ## func, \
+ "popl %eax\n\t" \
+ "pushl %ecx\n\t" \
+ "pushl %eax\n\t" \
+ "jmp " __ASM_NAME(#func) __ASM_STDCALL(args) )
+#else /* __i386__ */
+
+#define THISCALL(func) func
+#define THISCALL_NAME(func) __ASM_NAME(#func)
+#define __thiscall __cdecl
+#define DEFINE_THISCALL_WRAPPER(func,args) /* nothing */
+
+#endif /* __i386__ */
+
+#ifdef _WIN64
+
+#define VTABLE_ADD_FUNC(name) "\t.quad " THISCALL_NAME(name) "\n"
+
+#define __ASM_VTABLE(name,funcs) \
+ __asm__(".data\n" \
+ "\t.align 8\n" \
+ "\t.quad 0\n" \
+ "\t.globl " __ASM_NAME(#name "_vtable") "\n" \
+ __ASM_NAME(#name "_vtable") ":\n" \
+ funcs "\n\t.text")
+
+#else
+
+#define VTABLE_ADD_FUNC(name) "\t.long " THISCALL_NAME(name) "\n"
+
+#define __ASM_VTABLE(name,funcs) \
+ __asm__(".data\n" \
+ "\t.align 4\n" \
+ "\t.long 0\n" \
+ "\t.globl " __ASM_NAME(#name "_vtable") "\n" \
+ __ASM_NAME(#name "_vtable") ":\n" \
+ funcs "\n\t.text")
+
+#endif /* _WIN64 */
+
+#ifndef __x86_64__
+
+#define DEFINE_RTTI_DATA(name, off, base_classes_no, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, cl9, mangled_name) \
+ static const type_info name ## _type_info = { \
+ &MSVCP_type_info_vtable, \
+ NULL, \
+ mangled_name \
+ }; \
+\
+static const rtti_base_descriptor name ## _rtti_base_descriptor = { \
+ &name ##_type_info, \
+ base_classes_no, \
+ { 0, -1, 0}, \
+ 64 \
+}; \
+\
+static const rtti_base_array name ## _rtti_base_array = { \
+ { \
+ &name ## _rtti_base_descriptor, \
+ cl1, \
+ cl2, \
+ cl3, \
+ cl4, \
+ cl5, \
+ cl6, \
+ cl7, \
+ cl8, \
+ cl9, \
+ } \
+}; \
+\
+static const rtti_object_hierarchy name ## _hierarchy = { \
+ 0, \
+ 0, \
+ base_classes_no+1, \
+ &name ## _rtti_base_array \
+}; \
+\
+const rtti_object_locator name ## _rtti = { \
+ 0, \
+ off, \
+ 0, \
+ &name ## _type_info, \
+ &name ## _hierarchy \
+};
+
+#define DEFINE_CXX_DATA(type, base_no, cl1, cl2, dtor) \
+\
+static const cxx_type_info type ## _cxx_type_info = { \
+ 0, \
+ & type ##_type_info, \
+ { 0, -1, 0 }, \
+ sizeof(type), \
+ (cxx_copy_ctor)THISCALL(MSVCP_ ## type ##_copy_ctor) \
+}; \
+\
+static const cxx_type_info_table type ## _cxx_type_table = { \
+ base_no+1, \
+ { \
+ & type ## _cxx_type_info, \
+ cl1, \
+ cl2 \
+ } \
+}; \
+\
+static const cxx_exception_type type ## _cxx_type = { \
+ 0, \
+ (cxx_copy_ctor)THISCALL(dtor), \
+ NULL, \
+ & type ## _cxx_type_table \
+};
+
+#else
+
+#define DEFINE_RTTI_DATA(name, off, base_classes_no, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, cl9, mangled_name) \
+ static const type_info name ## _type_info = { \
+ &MSVCP_type_info_vtable, \
+ NULL, \
+ mangled_name \
+ }; \
+\
+static rtti_base_descriptor name ## _rtti_base_descriptor = { \
+ 0xdeadbeef, \
+ base_classes_no, \
+ { 0, -1, 0}, \
+ 64 \
+}; \
+\
+static rtti_base_array name ## _rtti_base_array = { \
+ { \
+ 0xdeadbeef, \
+ 0xdeadbeef, \
+ 0xdeadbeef, \
+ 0xdeadbeef, \
+ 0xdeadbeef, \
+ 0xdeadbeef, \
+ 0xdeadbeef, \
+ 0xdeadbeef, \
+ 0xdeadbeef, \
+ 0xdeadbeef, \
+ } \
+}; \
+\
+static rtti_object_hierarchy name ## _hierarchy = { \
+ 0, \
+ 0, \
+ base_classes_no+1, \
+ 0xdeadbeef \
+}; \
+\
+rtti_object_locator name ## _rtti = { \
+ 1, \
+ off, \
+ 0, \
+ 0xdeadbeef, \
+ 0xdeadbeef, \
+ 0xdeadbeef \
+};\
+\
+static void init_ ## name ## _rtti(char *base) \
+{ \
+ name ## _rtti_base_descriptor.type_descriptor = (char*)&name ## _type_info - base; \
+ name ## _rtti_base_array.bases[0] = (char*)&name ## _rtti_base_descriptor - base; \
+ name ## _rtti_base_array.bases[1] = (char*)cl1 - base; \
+ name ## _rtti_base_array.bases[2] = (char*)cl2 - base; \
+ name ## _rtti_base_array.bases[3] = (char*)cl3 - base; \
+ name ## _rtti_base_array.bases[4] = (char*)cl4 - base; \
+ name ## _rtti_base_array.bases[5] = (char*)cl5 - base; \
+ name ## _rtti_base_array.bases[6] = (char*)cl6 - base; \
+ name ## _rtti_base_array.bases[7] = (char*)cl7 - base; \
+ name ## _rtti_base_array.bases[8] = (char*)cl8 - base; \
+ name ## _rtti_base_array.bases[9] = (char*)cl9 - base; \
+ name ## _hierarchy.base_classes = (char*)&name ## _rtti_base_array - base; \
+ name ## _rtti.type_descriptor = (char*)&name ## _type_info - base; \
+ name ## _rtti.type_hierarchy = (char*)&name ## _hierarchy - base; \
+ name ## _rtti.object_locator = (char*)&name ## _rtti - base; \
+}
+
+#define DEFINE_CXX_DATA(type, base_no, cl1, cl2, dtor) \
+\
+static cxx_type_info type ## _cxx_type_info = { \
+ 0, \
+ 0xdeadbeef, \
+ { 0, -1, 0 }, \
+ sizeof(type), \
+ 0xdeadbeef \
+}; \
+\
+static cxx_type_info_table type ## _cxx_type_table = { \
+ base_no+1, \
+ { \
+ 0xdeadbeef, \
+ 0xdeadbeef, \
+ 0xdeadbeef \
+ } \
+}; \
+\
+static cxx_exception_type type ##_cxx_type = { \
+ 0, \
+ 0xdeadbeef, \
+ 0, \
+ 0xdeadbeef \
+}; \
+\
+static void init_ ## type ## _cxx(char *base) \
+{ \
+ type ## _cxx_type_info.type_info = (char *)&type ## _type_info - base; \
+ type ## _cxx_type_info.copy_ctor = (char *)MSVCP_ ## type ## _copy_ctor - base; \
+ type ## _cxx_type_table.info[0] = (char *)&type ## _cxx_type_info - base; \
+ type ## _cxx_type_table.info[1] = (char *)cl1 - base; \
+ type ## _cxx_type_table.info[2] = (char *)cl2 - base; \
+ type ## _cxx_type.destructor = (char *)dtor - base; \
+ type ## _cxx_type.type_info_table = (char *)&type ## _cxx_type_table - base; \
+}
+
+#endif
+
+#define DEFINE_RTTI_DATA0(name, off, mangled_name) \
+ DEFINE_RTTI_DATA(name, off, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, mangled_name)
+#define DEFINE_RTTI_DATA1(name, off, cl1, mangled_name) \
+ DEFINE_RTTI_DATA(name, off, 1, cl1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, mangled_name)
+#define DEFINE_RTTI_DATA2(name, off, cl1, cl2, mangled_name) \
+ DEFINE_RTTI_DATA(name, off, 2, cl1, cl2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, mangled_name)
+#define DEFINE_RTTI_DATA3(name, off, cl1, cl2, cl3, mangled_name) \
+ DEFINE_RTTI_DATA(name, off, 3, cl1, cl2, cl3, NULL, NULL, NULL, NULL, NULL, NULL, mangled_name)
+#define DEFINE_RTTI_DATA4(name, off, cl1, cl2, cl3, cl4, mangled_name) \
+ DEFINE_RTTI_DATA(name, off, 4, cl1, cl2, cl3, cl4, NULL, NULL, NULL, NULL, NULL, mangled_name)
+#define DEFINE_RTTI_DATA8(name, off, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, mangled_name) \
+ DEFINE_RTTI_DATA(name, off, 8, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, NULL, mangled_name)
+#define DEFINE_RTTI_DATA9(name, off, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, cl9, mangled_name) \
+ DEFINE_RTTI_DATA(name, off, 9, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, cl9, mangled_name)
+
+#define DEFINE_CXX_DATA0(name, dtor) \
+ DEFINE_CXX_DATA(name, 0, NULL, NULL, dtor)
+#define DEFINE_CXX_DATA1(name, cl1, dtor) \
+ DEFINE_CXX_DATA(name, 1, cl1, NULL, dtor)
+#define DEFINE_CXX_DATA2(name, cl1, cl2, dtor) \
+ DEFINE_CXX_DATA(name, 2, cl1, cl2, dtor)
+
+#ifdef __i386__
+
+#define CALL_VTBL_FUNC(this, off, ret, type, args) ((ret (WINAPI*)type)&vtbl_wrapper_##off)args
+
+extern void *vtbl_wrapper_0;
+extern void *vtbl_wrapper_4;
+extern void *vtbl_wrapper_8;
+extern void *vtbl_wrapper_12;
+extern void *vtbl_wrapper_16;
+extern void *vtbl_wrapper_20;
+extern void *vtbl_wrapper_24;
+extern void *vtbl_wrapper_28;
+extern void *vtbl_wrapper_32;
+extern void *vtbl_wrapper_36;
+extern void *vtbl_wrapper_40;
+extern void *vtbl_wrapper_44;
+extern void *vtbl_wrapper_48;
+extern void *vtbl_wrapper_52;
+extern void *vtbl_wrapper_56;
+
+#else
+
+#define CALL_VTBL_FUNC(this, off, ret, type, args) ((ret (__cdecl***)type)this)[0][off/4]args
+
+#endif
+
+/* exception object */
+typedef void (*vtable_ptr)(void);
+typedef struct __exception
+{
+ const vtable_ptr *vtable;
+ char *name; /* Name of this exception, always a new copy for each object */
+ int do_free; /* Whether to free 'name' in our dtor */
+} exception;
+
+/* Internal: throws selected exception */
+typedef enum __exception_type {
+ EXCEPTION_RERAISE,
+ EXCEPTION,
+ EXCEPTION_BAD_ALLOC,
+ EXCEPTION_BAD_CAST,
+ EXCEPTION_LOGIC_ERROR,
+ EXCEPTION_LENGTH_ERROR,
+ EXCEPTION_OUT_OF_RANGE,
+ EXCEPTION_INVALID_ARGUMENT,
+ EXCEPTION_RUNTIME_ERROR,
+ EXCEPTION_FAILURE,
+} exception_type;
+void throw_exception(exception_type, const char *);
+
+/* rtti */
+typedef struct __type_info
+{
+ const vtable_ptr *vtable;
+ char *name; /* Unmangled name, allocated lazily */
+ char mangled[128]; /* Variable length, but we declare it large enough for static RTTI */
+} type_info;
+
+extern const vtable_ptr MSVCP_type_info_vtable;
+
+/* offsets for computing the this pointer */
+typedef struct
+{
+ int this_offset; /* offset of base class this pointer from start of object */
+ int vbase_descr; /* offset of virtual base class descriptor */
+ int vbase_offset; /* offset of this pointer offset in virtual base class descriptor */
+} this_ptr_offsets;
+
+/* dlls/msvcrt/cppexcept.h */
+typedef void (*cxx_copy_ctor)(void);
+
+#ifndef __x86_64__
+
+typedef struct _rtti_base_descriptor
+{
+ const type_info *type_descriptor;
+ int num_base_classes;
+ this_ptr_offsets offsets; /* offsets for computing the this pointer */
+ unsigned int attributes;
+} rtti_base_descriptor;
+
+typedef struct _rtti_base_array
+{
+ const rtti_base_descriptor *bases[10]; /* First element is the class itself */
+} rtti_base_array;
+
+typedef struct _rtti_object_hierarchy
+{
+ unsigned int signature;
+ unsigned int attributes;
+ int array_len; /* Size of the array pointed to by 'base_classes' */
+ const rtti_base_array *base_classes;
+} rtti_object_hierarchy;
+
+typedef struct _rtti_object_locator
+{
+ unsigned int signature;
+ int base_class_offset;
+ unsigned int flags;
+ const type_info *type_descriptor;
+ const rtti_object_hierarchy *type_hierarchy;
+} rtti_object_locator;
+
+typedef struct
+{
+ UINT flags;
+ const type_info *type_info;
+ this_ptr_offsets offsets;
+ unsigned int size;
+ cxx_copy_ctor copy_ctor;
+} cxx_type_info;
+
+typedef struct
+{
+ UINT count;
+ const cxx_type_info *info[3];
+} cxx_type_info_table;
+
+typedef struct
+{
+ UINT flags;
+ void (*destructor)(void);
+ void* /*cxx_exc_custom_handler*/ custom_handler;
+ const cxx_type_info_table *type_info_table;
+} cxx_exception_type;
+
+#else
+
+typedef struct
+{
+ unsigned int type_descriptor;
+ int num_base_classes;
+ this_ptr_offsets offsets; /* offsets for computing the this pointer */
+ unsigned int attributes;
+} rtti_base_descriptor;
+
+typedef struct
+{
+ unsigned int bases[10]; /* First element is the class itself */
+} rtti_base_array;
+
+typedef struct
+{
+ unsigned int signature;
+ unsigned int attributes;
+ int array_len; /* Size of the array pointed to by 'base_classes' */
+ unsigned int base_classes;
+} rtti_object_hierarchy;
+
+typedef struct
+{
+ unsigned int signature;
+ int base_class_offset;
+ unsigned int flags;
+ unsigned int type_descriptor;
+ unsigned int type_hierarchy;
+ unsigned int object_locator;
+} rtti_object_locator;
+
+typedef struct
+{
+ UINT flags;
+ unsigned int type_info;
+ this_ptr_offsets offsets;
+ unsigned int size;
+ unsigned int copy_ctor;
+} cxx_type_info;
+
+typedef struct
+{
+ UINT count;
+ unsigned int info[3];
+} cxx_type_info_table;
+
+typedef struct
+{
+ UINT flags;
+ unsigned int destructor;
+ unsigned int custom_handler;
+ unsigned int type_info_table;
+} cxx_exception_type;
+
+#endif
diff --git a/lsteamclient/gen.sh b/lsteamclient/gen.sh
new file mode 100755
index 00000000..5df06cb2
--- /dev/null
+++ b/lsteamclient/gen.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+rm win*.h
+rm win*.c
+rm win*.dat
+rm cpp*.cpp
+rm cpp*.h
+rm cb*.h
+rm cb*.cpp
+rm cb*.dat
+
+h=$(md5sum Makefile.in)
+cp Makefile.in.orig Makefile.in
+
+./gen_wrapper.py
+if [ "$h" != "$(md5sum Makefile.in)" ]; then
+ echo "Don't forget to \"make depend\" at the top of the tree!"
+fi
diff --git a/lsteamclient/gen_wrapper.py b/lsteamclient/gen_wrapper.py
new file mode 100755
index 00000000..833489d2
--- /dev/null
+++ b/lsteamclient/gen_wrapper.py
@@ -0,0 +1,543 @@
+#!/usr/bin/python2
+
+#NOTE: If you make modifications here, consider whether they should
+#be duplicated in ../vrclient/gen_wrapper.py
+
+import pprint
+import sys
+import clang.cindex
+import os
+import re
+
+sdk_versions = [
+ "142",
+ "141",
+ "140",
+ "139",
+ "138a",
+ "138",
+ "137",
+ "136",
+ "135a",
+ "135",
+ "134",
+ "133b",
+ "133a",
+ "133",
+ "132",
+ "131",
+ "130",
+ "129a",
+ "129",
+ "128",
+ "127",
+ "126a",
+ "126",
+ "125",
+ "124",
+ "123a",
+ "123",
+ "122",
+ "121",
+ "120",
+ "119",
+ "118",
+ "117",
+ "116",
+ "115",
+ "114",
+ "113",
+ "112",
+ "111",
+ "110",
+ "109",
+ "108",
+ "107",
+ "106",
+ "105",
+ "104",
+ "103",
+ "102",
+ "101",
+ "100",
+]
+
+files = [
+ ("steam_api.h", [
+ "ISteamApps",
+ "ISteamAppList",
+ "ISteamClient",
+ "ISteamController",
+ "ISteamFriends",
+ "ISteamHTMLSurface",
+ "ISteamHTTP",
+ "ISteamInventory",
+ "ISteamMatchmaking",
+ "ISteamMatchmakingServers",
+ "ISteamMusic",
+ "ISteamMusicRemote",
+ "ISteamNetworking",
+ "ISteamRemoteStorage",
+ "ISteamScreenshots",
+ "ISteamUGC",
+ "ISteamUnifiedMessages",
+ "ISteamUser",
+ "ISteamUserStats",
+ "ISteamUtils",
+ "ISteamVideo"
+ ]),
+ ("isteamappticket.h", [
+ "ISteamAppTicket"
+ ]),
+ ("isteamgameserver.h", [
+ "ISteamGameServer"
+ ]),
+ ("isteamgameserverstats.h", [
+ "ISteamGameServerStats"
+ ]),
+ ("isteammasterserverupdater.h", [
+ "ISteamMasterServerUpdater"
+ ]),
+ ("isteamgamecoordinator.h", [
+ "ISteamGameCoordinator"
+ ]),
+ ("isteamparentalsettings.h", [
+ "ISteamParentalSettings"
+ ]),
+]
+
+aliases = {
+ #Some interface versions are not present in the public SDK
+ #headers, but are actually requested by games. It would be nice
+ #to verify that these interface versions are actually binary
+ #compatible. Lacking that, we hope the next highest version
+ #is compatible.
+ "SteamClient012":["SteamClient013"],
+ "SteamUtils004":["SteamUtils003"], # TimeShift uses SteamUtils003
+
+
+ #leaving these commented-out. let's see if they turn up in practice,
+ #and handle them correctly if so.
+
+# "SteamFriends011":["SteamFriends010"],
+# "SteamFriends013":["SteamFriends012"],
+# "SteamGameServer008":["SteamGameServer007", "SteamGameServer006"],
+# "SteamMatchMaking004":["SteamMatchMaking003"],
+# "SteamMatchMaking006":["SteamMatchMaking005"],
+# "STEAMREMOTESTORAGE_INTERFACE_VERSION004":["STEAMREMOTESTORAGE_INTERFACE_VERSION003"],
+# "STEAMREMOTESTORAGE_INTERFACE_VERSION008":["STEAMREMOTESTORAGE_INTERFACE_VERSION007"],
+# "STEAMREMOTESTORAGE_INTERFACE_VERSION010":["STEAMREMOTESTORAGE_INTERFACE_VERSION009"],
+# "STEAMUGC_INTERFACE_VERSION005":["STEAMUGC_INTERFACE_VERSION004"],
+# "STEAMUGC_INTERFACE_VERSION007":["STEAMUGC_INTERFACE_VERSION006"],
+# "SteamUser016":["SteamUser015"],
+# "STEAMUSERSTATS_INTERFACE_VERSION009":["STEAMUSERSTATS_INTERFACE_VERSION008"],
+}
+
+# TODO: we could do this automatically by creating temp files and
+# having clang parse those and detect when the MS-style padding results
+# in identical struct widths. But there's only a couple, so let's cheat...
+skip_structs = [
+ "RemoteStorageGetPublishedFileDetailsResult_t_9740",
+ "SteamUGCQueryCompleted_t_20",
+ "SteamUGCRequestUGCDetailsResult_t_9764"
+]
+
+print_sizes = []
+
+class_versions = {}
+
+def handle_method(cfile, classname, winclassname, cppname, method, cpp, cpp_h, existing_methods):
+ used_name = method.spelling
+ idx = '2'
+ while used_name in existing_methods:
+ used_name = "%s_%s" % (method.spelling, idx)
+ idx = chr(ord(idx) + 1)
+ returns_record = method.result_type.get_canonical().kind == clang.cindex.TypeKind.RECORD
+ if returns_record:
+ parambytes = 8 #_this + return pointer
+ else:
+ parambytes = 4 #_this
+ for param in list(method.get_children()):
+ if param.kind == clang.cindex.CursorKind.PARM_DECL:
+ parambytes += param.type.get_size()
+ cfile.write("DEFINE_THISCALL_WRAPPER(%s_%s, %s)\n" % (winclassname, used_name, parambytes))
+ cpp_h.write("extern ")
+ if method.result_type.spelling.startswith("ISteam"):
+ cfile.write("win%s " % (method.result_type.spelling))
+ cpp.write("void *")
+ cpp_h.write("void *")
+ elif returns_record:
+ cfile.write("%s *" % method.result_type.spelling)
+ cpp.write("%s " % (method.result_type.spelling))
+ cpp_h.write("%s " % (method.result_type.spelling))
+ else:
+ cfile.write("%s " % (method.result_type.spelling))
+ cpp.write("%s " % (method.result_type.spelling))
+ cpp_h.write("%s " % (method.result_type.spelling))
+ cfile.write('__thiscall %s_%s(%s *_this' % (winclassname, used_name, winclassname))
+ cpp.write("%s_%s(void *linux_side" % (cppname, used_name))
+ cpp_h.write("%s_%s(void *" % (cppname, used_name))
+ if returns_record:
+ cfile.write(", %s *_r" % method.result_type.spelling)
+ unnamed = 'a'
+ for param in list(method.get_children()):
+ if param.kind == clang.cindex.CursorKind.PARM_DECL:
+ if param.type.kind == clang.cindex.TypeKind.POINTER and \
+ param.type.get_pointee().kind == clang.cindex.TypeKind.UNEXPOSED:
+ #unspecified function pointer
+ typename = "void *"
+ else:
+ typename = param.type.spelling.split("::")[-1];
+ if param.spelling == "":
+ cfile.write(", %s _%s" % (typename, unnamed))
+ cpp.write(", %s _%s" % (typename, unnamed))
+ cpp_h.write(", %s" % typename)
+ unnamed = chr(ord(unnamed) + 1)
+ else:
+ cfile.write(", %s %s" % (typename, param.spelling))
+ cpp.write(", %s %s" % (typename, param.spelling))
+ cpp_h.write(", %s" % (typename))
+ cfile.write(")\n{\n")
+ cpp.write(")\n{\n")
+ cpp_h.write(");\n")
+
+ char_param_is_unix_path = "GetAppInstallDir" in used_name or \
+ "GetItemInstallInfo" in used_name
+ path_param_name = None
+ path_size_param_name = None
+
+ if char_param_is_unix_path:
+ cfile.write(" uint32 path_result;\n")
+
+ cfile.write(" TRACE(\"%p\\n\", _this);\n")
+
+ if method.result_type.kind == clang.cindex.TypeKind.VOID:
+ cfile.write(" ")
+ cpp.write(" ")
+ elif char_param_is_unix_path:
+ cfile.write(" path_result = ")
+ cpp.write(" return ")
+ elif returns_record:
+ cfile.write(" *_r = ")
+ cpp.write(" return ")
+ else:
+ cfile.write(" return ")
+ cpp.write(" return ")
+
+ should_gen_wrapper = method.result_type.spelling.startswith("ISteam") or \
+ used_name.startswith("GetISteamGenericInterface")
+ if should_gen_wrapper:
+ cfile.write("create_win_interface(pchVersion,\n ")
+
+ cfile.write("%s_%s(_this->linux_side" % (cppname, used_name))
+ cpp.write("((%s*)linux_side)->%s(" % (classname, method.spelling))
+ unnamed = 'a'
+ first = True
+ for param in list(method.get_children()):
+ if param.kind == clang.cindex.CursorKind.PARM_DECL:
+ if not first:
+ cpp.write(", ")
+ else:
+ first = False
+ if char_param_is_unix_path:
+ if param.type.spelling == "char *":
+ path_param_name = param.spelling
+ elif not path_param_name is None and \
+ (param.type.spelling == "uint32" or
+ param.type.spelling == "int"):
+ path_size_param_name = param.spelling
+ if param.spelling == "":
+ cfile.write(", _%s" % unnamed)
+ cpp.write("(%s)_%s" % (param.type.spelling, unnamed))
+ unnamed = chr(ord(unnamed) + 1)
+ elif "ISteamMatchmakingServerListResponse" in param.type.spelling:
+ cfile.write(", create_LinuxMatchmakingServerListResponse(%s)" % param.spelling)
+ cpp.write("(%s)%s" % (param.type.spelling, param.spelling))
+ else:
+ cfile.write(", %s" % param.spelling)
+ cpp.write("(%s)%s" % (param.type.spelling, param.spelling))
+ if should_gen_wrapper:
+ cfile.write(")")
+ cfile.write(");\n")
+ cpp.write(");\n")
+ if returns_record:
+ cfile.write(" return _r;\n")
+ if char_param_is_unix_path and not path_param_name is None and not path_size_param_name is None:
+ cfile.write(" return steamclient_unix_path_to_dos_path(path_result, %s, %s);\n" % (path_param_name, path_size_param_name))
+ cfile.write("}\n\n")
+ cpp.write("}\n\n")
+ return used_name
+
+def get_iface_version(classname):
+ # ISteamClient -> STEAMCLIENT_INTERFACE_VERSION
+ defname = "%s_INTERFACE_VERSION" % classname[1:].upper()
+ if defname in iface_versions.keys():
+ ver = iface_versions[defname]
+ else:
+ ver = "UNVERSIONED"
+ if classname in class_versions.keys() and ver in class_versions[classname]:
+ return (ver, True)
+ if not classname in class_versions.keys():
+ class_versions[classname] = []
+ class_versions[classname].append(ver)
+ return (ver, False)
+
+def handle_class(sdkver, classnode):
+ children = list(classnode.get_children())
+ if len(children) == 0:
+ return
+ (iface_version, already_generated) = get_iface_version(classnode.spelling)
+ if already_generated:
+ return
+ winname = "win%s" % classnode.spelling
+ if not winname in generated_c_files:
+ generated_c_files.append(winname)
+ cppname = "cpp%s_%s" % (classnode.spelling, iface_version)
+ generated_cpp_files.append(cppname)
+
+ file_exists = os.path.isfile("%s.c" % winname)
+ cfile = open("%s.c" % winname, "a")
+ if not file_exists:
+ cfile.write("""/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+""")
+
+ cpp = open("%s.cpp" % cppname, "w")
+ cpp.write("#include \"steamclient_private.h\"\n")
+ cpp.write("#include \"steam_defs.h\"\n")
+ cpp.write("#include \"steamworks_sdk_%s/steam_api.h\"\n" % sdkver)
+ if not fname == "steam_api.h":
+ cpp.write("#include \"steamworks_sdk_%s/%s\"\n" % (sdkver, fname))
+ cpp.write("#include \"%s.h\"\n" % cppname)
+ cpp.write("#ifdef __cplusplus\nextern \"C\" {\n#endif\n")
+
+ cpp_h = open("%s.h" % cppname, "w")
+ cpp_h.write("#ifdef __cplusplus\nextern \"C\" {\n#endif\n")
+
+ winclassname = "win%s_%s" % (classnode.spelling, iface_version)
+ cfile.write("#include \"%s.h\"\n\n" % cppname)
+ cfile.write("typedef struct __%s {\n" % winclassname)
+ cfile.write(" vtable_ptr *vtable;\n")
+ cfile.write(" void *linux_side;\n")
+ cfile.write("} %s;\n\n" % winclassname)
+ methods = []
+ for child in children:
+ if child.kind == clang.cindex.CursorKind.CXX_METHOD:
+ methods.append(handle_method(cfile, classnode.spelling, winclassname, cppname, child, cpp, cpp_h, methods))
+
+ cfile.write("extern vtable_ptr %s_vtable;\n\n" % winclassname)
+ cfile.write("#ifndef __GNUC__\n")
+ cfile.write("void __asm_dummy_vtables(void) {\n")
+ cfile.write("#endif\n")
+ cfile.write(" __ASM_VTABLE(%s,\n" % winclassname)
+ for method in methods:
+ cfile.write(" VTABLE_ADD_FUNC(%s_%s)\n" % (winclassname, method))
+ cfile.write(" );\n")
+ cfile.write("#ifndef __GNUC__\n")
+ cfile.write("}\n")
+ cfile.write("#endif\n\n")
+ cfile.write("%s *create_%s(void *linux_side)\n{\n" % (winclassname, winclassname))
+ cfile.write(" %s *r = HeapAlloc(GetProcessHeap(), 0, sizeof(%s));\n" % (winclassname, winclassname))
+ cfile.write(" TRACE(\"-> %p\\n\", r);\n")
+ cfile.write(" r->vtable = &%s_vtable;\n" % winclassname)
+ cfile.write(" r->linux_side = linux_side;\n")
+ cfile.write(" return r;\n}\n\n")
+
+ cpp.write("#ifdef __cplusplus\n}\n#endif\n")
+ cpp_h.write("#ifdef __cplusplus\n}\n#endif\n")
+
+ constructors = open("win_constructors.h", "a")
+ constructors.write("extern void *create_%s(void *);\n" % winclassname)
+
+ constructors = open("win_constructors_table.dat", "a")
+ constructors.write(" {\"%s\", &create_%s},\n" % (iface_version, winclassname))
+ if iface_version in aliases.keys():
+ for alias in aliases[iface_version]:
+ constructors.write(" {\"%s\", &create_%s}, /* alias */\n" % (alias, winclassname))
+
+
+generated_cb_handlers = []
+generated_cb_ids = []
+cpp_files_need_close_brace = []
+cb_table = {}
+
+#because of struct packing differences between win32 and linux, we
+#need to convert these structs from their linux layout to the win32
+#layout.
+#TODO: could we optimize this by detecting if the structs are the
+#same layout at generation-time?
+def handle_callback_struct(sdkver, callback, cb_num):
+ handler_name = "%s_%s" % (callback.displayname, callback.type.get_size())
+
+ if handler_name in generated_cb_handlers:
+ # we already have a handler for the callback struct of this size
+ return
+
+ if handler_name in skip_structs:
+ # due to padding, some structs have the same width across versions of
+ # the SDK. since we key our lin->win conversion on the win struct size,
+ # we can skip the smaller structs and just write into the padding on
+ # older versions
+ # TODO: we could automate this. see comment near skip_structs declaration
+ return
+
+ cb_id = cb_num | (callback.type.get_size() << 16)
+ if cb_id in generated_cb_ids:
+ # either this cb changed name, or steam used the same ID for different structs
+ return
+
+ generated_cb_ids.append(cb_id)
+
+ filename_base = "cb_converters_%s" % sdkver
+ cppname = "%s.cpp" % filename_base
+ file_exists = os.path.isfile(cppname)
+ cppfile = open(cppname, "a")
+ if not file_exists:
+ generated_cpp_files.append(filename_base)
+ cppfile.write("#include \"steamclient_private.h\"\n")
+ cppfile.write("#include \"steam_defs.h\"\n")
+ cppfile.write("#include \"steamworks_sdk_%s/steam_api.h\"\n" % sdkver)
+ cppfile.write("#include \"steamworks_sdk_%s/isteamgameserver.h\"\n" % (sdkver))
+ if os.path.isfile("steamworks_sdk_%s/isteamgameserverstats.h" % sdkver):
+ cppfile.write("#include \"steamworks_sdk_%s/isteamgameserverstats.h\"\n" % (sdkver))
+ if os.path.isfile("steamworks_sdk_%s/isteamgamecoordinator.h" % sdkver):
+ cppfile.write("#include \"steamworks_sdk_%s/isteamgamecoordinator.h\"\n" % sdkver)
+ cppfile.write("extern \"C\" {\n")
+ cpp_files_need_close_brace.append(cppname)
+
+ datfile = open("cb_converters.dat", "a")
+ datfile.write("case 0x%08x: win_msg->m_cubParam = sizeof(struct win%s); win_msg->m_pubParam = HeapAlloc(GetProcessHeap(), 0, win_msg->m_cubParam); cb_%s(lin_msg.m_pubParam, win_msg->m_pubParam); break;\n" % (cb_id, handler_name, handler_name))
+
+ hfile = open("cb_converters.h", "a")
+ hfile.write("struct win%s {\n" % handler_name)
+ for m in callback.get_children():
+ if m.kind == clang.cindex.CursorKind.FIELD_DECL:
+ if m.type.kind == clang.cindex.TypeKind.CONSTANTARRAY:
+ hfile.write(" %s %s[%u];\n" % (m.type.element_type.spelling, m.displayname, m.type.element_count))
+ else:
+ hfile.write(" %s %s;\n" % (m.type.spelling, m.displayname))
+ hfile.write("} __attribute__ ((ms_struct));\n")
+ hfile.write("extern void cb_%s(void *l, void *w);\n" % handler_name)
+
+ cppfile.write("struct win%s {\n" % handler_name)
+ for m in callback.get_children():
+ if m.kind == clang.cindex.CursorKind.FIELD_DECL:
+ if m.type.kind == clang.cindex.TypeKind.CONSTANTARRAY:
+ cppfile.write(" %s %s[%u];\n" % (m.type.element_type.spelling, m.displayname, m.type.element_count))
+ else:
+ cppfile.write(" %s %s;\n" % (m.type.spelling, m.displayname))
+ cppfile.write("} __attribute__ ((ms_struct));\n")
+
+ cppfile.write("void cb_%s(void *l, void *w)\n{\n" % handler_name)
+ cppfile.write(" %s *lin = (%s *)l;\n" % (callback.displayname, callback.displayname))
+ cppfile.write(" struct win%s *win = (struct win%s *)w;\n" % (handler_name, handler_name))
+ for m in callback.get_children():
+ if m.kind == clang.cindex.CursorKind.FIELD_DECL:
+ if m.type.kind == clang.cindex.TypeKind.CONSTANTARRAY:
+ #TODO: if this is a struct, or packed differently, we'll have to
+ # copy each element in a for-loop
+ cppfile.write(" memcpy(win->%s, lin->%s, sizeof(win->%s));\n" % (m.displayname, m.displayname, m.displayname))
+ else:
+ cppfile.write(" win->%s = lin->%s;\n" % (m.displayname, m.displayname))
+ cppfile.write("}\n\n")
+
+ generated_cb_handlers.append(handler_name)
+
+ if not cb_num in cb_table.keys():
+ # latest SDK linux size, list of windows struct names
+ cb_table[cb_num] = (callback.type.get_size(), [])
+ cb_table[cb_num][1].append(handler_name)
+
+
+def handle_callback_maybe(sdkver, callback):
+ members = callback.get_children()
+ for c in members:
+ if c.kind == clang.cindex.CursorKind.ENUM_DECL:
+ enums = c.get_children()
+ for e in enums:
+ if e.displayname == "k_iCallback":
+ handle_callback_struct(sdkver, callback, e.enum_value)
+
+
+
+
+#clang.cindex.Config.set_library_file("/usr/lib/llvm-3.8/lib/libclang-3.8.so.1");
+
+generated_c_files = []
+generated_cpp_files = []
+
+prog = re.compile("^#define\s*(\w*)\s*\"(.*)\"")
+for sdkver in sdk_versions:
+ iface_versions = {}
+ for f in os.listdir("steamworks_sdk_%s" % sdkver):
+ x = open("steamworks_sdk_%s/%s" % (sdkver, f), "r")
+ for l in x:
+ if "INTERFACE_VERSION" in l:
+ result = prog.match(l)
+ if result:
+ iface, version = result.group(1, 2)
+ iface_versions[iface] = version
+
+ for fname, classes in files:
+ # Parse as 32-bit C++
+ input_name = "steamworks_sdk_%s/%s" % (sdkver, fname)
+ sys.stdout.write("about to parse %s\n" % input_name)
+ if not os.path.isfile(input_name):
+ continue
+ index = clang.cindex.Index.create()
+ tu = index.parse(input_name, args=['-x', 'c++', '-m32', '-Isteamworks_sdk_%s/' % sdkver, '-I/usr/lib/clang/5.0.1/include/'])
+
+ diagnostics = list(tu.diagnostics)
+ if len(diagnostics) > 0:
+ print 'There were parse errors'
+ pprint.pprint(diagnostics)
+ else:
+ children = list(tu.cursor.get_children())
+ for child in children:
+ if child.kind == clang.cindex.CursorKind.CLASS_DECL and child.displayname in classes:
+ handle_class(sdkver, child)
+ if child.kind == clang.cindex.CursorKind.STRUCT_DECL or \
+ child.kind == clang.cindex.CursorKind.CLASS_DECL:
+ handle_callback_maybe(sdkver, child)
+ if child.displayname in print_sizes:
+ sys.stdout.write("size of %s is %u\n" % (child.displayname, child.type.get_size()))
+
+for f in cpp_files_need_close_brace:
+ m = open(f, "a")
+ m.write("\n}\n")
+
+getapifile = open("cb_getapi_table.dat", "w")
+cbsizefile = open("cb_getapi_sizes.dat", "w")
+for cb in cb_table.keys():
+ cbsizefile.write("case %u: /* %s */\n" % (cb, cb_table[cb][1][0]))
+ cbsizefile.write(" return %u;\n" % cb_table[cb][0])
+ getapifile.write("case %u:\n" % cb)
+ getapifile.write(" switch(callback_len){\n")
+ getapifile.write(" default:\n") # the first one should be the latest, should best support future SDK versions
+ for struct in cb_table[cb][1]:
+ getapifile.write(" case sizeof(struct win%s): cb_%s(lin_callback, callback); break;\n" % (struct, struct))
+ getapifile.write(" }\n break;\n")
+
+m = open("Makefile.in", "a")
+for f in generated_c_files:
+ m.write("\t%s.c \\\n" % f)
+m.write("\nCPP_SRCS = \\\n")
+for f in generated_cpp_files:
+ m.write("\t%s.cpp \\\n" % f)
diff --git a/lsteamclient/lsteamclient.spec b/lsteamclient/lsteamclient.spec
new file mode 100644
index 00000000..7dfd6fca
--- /dev/null
+++ b/lsteamclient/lsteamclient.spec
@@ -0,0 +1,58 @@
+# Generated from /home/valve/steampfx/drive_c/Program Files/Steam/steamclient.dll by winedump
+
+1 cdecl Breakpad_SteamMiniDumpInit(long ptr ptr)
+2 cdecl Breakpad_SteamSetAppID(long)
+3 cdecl Breakpad_SteamSetSteamID(int64)
+4 cdecl Breakpad_SteamWriteMiniDumpSetComment(ptr)
+5 cdecl Breakpad_SteamWriteMiniDumpUsingExceptionInfoWithBuildId(long long)
+6 cdecl CreateInterface(ptr ptr)
+7 stub Steam_BConnected
+8 cdecl Steam_BGetCallback(long ptr ptr)
+9 stub Steam_BLoggedOn
+10 stub Steam_BReleaseSteamPipe
+11 stub Steam_ConnectToGlobalUser
+12 stub Steam_CreateGlobalUser
+13 stub Steam_CreateLocalUser
+14 stub Steam_CreateSteamPipe
+15 cdecl Steam_FreeLastCallback(long)
+16 stub Steam_GSBLoggedOn
+17 stub Steam_GSBSecure
+18 stub Steam_GSGetSteam2GetEncryptionKeyToSendToNewClient
+19 stub Steam_GSGetSteamID
+20 stub Steam_GSLogOff
+21 stub Steam_GSLogOn
+22 stub Steam_GSRemoveUserConnect
+23 stub Steam_GSSendSteam2UserConnect
+24 stub Steam_GSSendSteam3UserConnect
+25 stub Steam_GSSendUserDisconnect
+26 stub Steam_GSSendUserStatusResponse
+27 stub Steam_GSSetServerType
+28 stub Steam_GSSetSpawnCount
+29 stub Steam_GSUpdateStatus
+30 cdecl Steam_GetAPICallResult(long int64 ptr long long ptr)
+31 stub Steam_GetGSHandle
+32 stub Steam_InitiateGameConnection
+33 stub Steam_LogOff
+34 stub Steam_LogOn
+35 stub Steam_ReleaseThreadLocalMemory
+36 stub Steam_ReleaseUser
+37 stub Steam_SetLocalIPBinding
+38 stub Steam_TerminateGameConnection
+39 stub hid_close
+40 stub hid_enumerate
+41 stub hid_error
+42 stub hid_exit
+43 stub hid_free_enumeration
+44 stub hid_get_feature_report
+45 stub hid_get_indexed_string
+46 stub hid_get_manufacturer_string
+47 stub hid_get_product_string
+48 stub hid_get_serial_number_string
+49 stub hid_init
+50 stub hid_open
+51 stub hid_open_path
+52 stub hid_read
+53 stub hid_read_timeout
+54 stub hid_send_feature_report
+55 stub hid_set_nonblocking
+56 stub hid_write
diff --git a/lsteamclient/steam_defs.h b/lsteamclient/steam_defs.h
new file mode 100644
index 00000000..9dc50bc0
--- /dev/null
+++ b/lsteamclient/steam_defs.h
@@ -0,0 +1,162 @@
+typedef int EHTMLMouseButton, EHTMLKeyModifiers;
+
+#ifndef __cplusplus
+typedef char bool; /* 1 byte on modern visual studio c++ */
+
+typedef int EAccountType;
+typedef int EUniverse;
+typedef int ENotificationPosition;
+typedef int ESteamAPICallFailure;
+typedef int EGamepadTextInputMode;
+typedef int EGamepadTextInputLineMode;
+typedef int EVoiceResult;
+typedef int EBeginAuthSessionResult;
+typedef int EUserHasLicenseForAppResult;
+typedef int EPersonaState;
+typedef int EFriendRelationship;
+typedef int EPersonaState;
+typedef int EOverlayToStoreFlag;
+typedef int EChatEntryType;
+typedef int ELobbyType;
+typedef int ELobbyDistanceFilter;
+typedef int ELobbyComparison;
+typedef int EMatchMakingServerResponse;
+typedef int ELeaderboardSortMethod;
+typedef int ELeaderboardDisplayType;
+typedef int ELeaderboardDataRequest;
+typedef int ELeaderboardUploadScoreMethod;
+typedef int EP2PSend;
+typedef int ESNetSocketConnectionType;
+typedef int ERemoteStoragePublishedFileVisibility;
+typedef int EWorkshopFileAction;
+typedef int EWorkshopEnumerationType;
+typedef int ERemoteStoragePlatform;
+typedef int EUGCReadAction;
+typedef int EWorkshopFileType;
+typedef int EWorkshopVideoProvider;
+typedef int EVRScreenshotType;
+typedef int EHTTPMethod;
+typedef int EResult;
+typedef int ESteamControllerPad;
+typedef int EControllerActionOrigin;
+typedef int EUserUGCList,
+ EUGCMatchingUGCType,
+ EUserUGCListSortOrder,
+ EUGCQuery,
+ EUGCMatchingUGCType,
+ EItemUpdateStatus,
+ EItemStatistic,
+ EItemPreviewType,
+ EAuthSessionResponse,
+ EHTTPStatusCode,
+ EDenyReason,
+ ERegisterActivationCodeResult,
+ EWorkshopVote,
+ EChatRoomEnterResponse,
+ ECheckFileSignature,
+ EBroadcastUploadResult,
+ EGCResults,
+ ESteamInputType,
+ EParentalFeature
+;
+typedef int EMatchMakingType;
+typedef int AudioPlayback_Status;
+
+/* these are PODs, so just copy the data. hopefully the
+ * packing and alignment are the same... */
+typedef struct CSteamID { unsigned char a[8]; } CSteamID;
+typedef struct CGameID { unsigned char a[8]; } CGameID;
+typedef struct MatchMakingKeyValuePair_t { unsigned char a[64]; } MatchMakingKeyValuePair_t;
+typedef struct gameserveritem_t { unsigned char a[372]; } gameserveritem_t;
+typedef struct LeaderboardEntry_t { unsigned char a[28]; } LeaderboardEntry_t;
+typedef struct RemoteStorageUpdatePublishedFileRequest_t { unsigned char a[40]; } RemoteStorageUpdatePublishedFileRequest_t;
+typedef struct ControllerAnalogActionData_t { unsigned char a[13]; } ControllerAnalogActionData_t;
+typedef struct ControllerDigitalActionData_t { unsigned char a[2]; } ControllerDigitalActionData_t;
+typedef struct ControllerMotionData_t { unsigned char a[40]; } ControllerMotionData_t;
+typedef struct SteamUGCDetails_t { unsigned char a[9764]; } SteamUGCDetails_t;
+
+/* never dereferenced */
+typedef struct FriendGameInfo_t FriendGameInfo_t;
+typedef struct P2PSessionState_t P2PSessionState_t;
+typedef struct SteamParamStringArray_t SteamParamStringArray_t;
+typedef struct ISteamMatchmakingServerListResponse ISteamMatchmakingServerListResponse;
+typedef struct ISteamMatchmakingPingResponse ISteamMatchmakingPingResponse;
+typedef struct ISteamMatchmakingPlayersResponse ISteamMatchmakingPlayersResponse;
+typedef struct ISteamMatchmakingRulesResponse ISteamMatchmakingRulesResponse;
+typedef struct RemoteStorageUpdatePublishedFileRequest_t RemoteStorageUpdatePublishedFileRequest_t;
+typedef struct SteamControllerState001_t SteamControllerState001_t;
+typedef struct SteamItemDetails_t SteamItemDetails_t;
+
+/* FIXME: we don't care about fn pointer types, just pass 'em through */
+typedef void *SteamAPI_CheckCallbackRegistered_t;
+typedef void *SteamAPIWarningMessageHook_t;
+typedef void *SteamAPI_PostAPIResultInProcess_t;
+
+typedef unsigned char uint8;
+typedef unsigned char uint8;
+typedef signed char int8;
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+typedef int64 lint64;
+typedef uint64 ulint64;
+typedef uint8 Salt_t[8];
+typedef uint64 GID_t;
+typedef uint64 JobID_t;
+typedef GID_t TxnID_t;
+typedef uint32 PackageId_t;
+typedef uint32 BundleId_t;
+typedef uint32 AppId_t;
+typedef uint64 AssetClassId_t;
+typedef uint32 PhysicalItemId_t;
+typedef uint32 DepotId_t;
+typedef uint32 RTime32;
+typedef uint32 CellID_t;
+typedef uint64 SteamAPICall_t;
+typedef uint32 AccountID_t;
+typedef uint32 PartnerId_t;
+typedef uint64 ManifestId_t;
+typedef uint32 HAuthTicket;
+typedef uint64 SteamLeaderboard_t;
+typedef uint64 SteamLeaderboardEntries_t;
+typedef void * BREAKPAD_HANDLE;
+typedef char compile_time_assert_type[1];
+typedef int32 HSteamPipe;
+typedef int32 HSteamUser;
+typedef int16 FriendsGroupID_t;
+typedef void * HServerListRequest;
+typedef int HServerQuery;
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint32 SNetListenSocket_t;
+typedef uint32 SNetSocket_t;
+typedef uint64 PublishedFileId_t;
+typedef uint64 UGCFileWriteStreamHandle_t;
+typedef uint32 ScreenshotHandle;
+typedef uint32 HTTPRequestHandle;
+typedef uint32 HTTPCookieContainerHandle;
+typedef uint64 ClientUnifiedMessageHandle;
+typedef uint64 ControllerHandle_t;
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+typedef uint32 HHTMLBrowser;
+typedef int32 SteamInventoryResult_t, SteamItemDef_t;
+typedef uint64 SteamItemInstanceID_t;
+typedef uint64 SteamInventoryUpdateHandle_t;
+
+#pragma pack( push, 4 )
+typedef struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+} CallbackMsg_t;
+#pragma pack( pop )
+#endif
diff --git a/lsteamclient/steamclient_main.c b/lsteamclient/steamclient_main.c
new file mode 100644
index 00000000..83714de8
--- /dev/null
+++ b/lsteamclient/steamclient_main.c
@@ -0,0 +1,275 @@
+#include "config.h"
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <dlfcn.h>
+#include <limits.h>
+#include <stdint.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "winnls.h"
+#include "wine/debug.h"
+#include "wine/library.h"
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved)
+{
+ TRACE("(%p, %u, %p)\n", instance, reason, reserved);
+
+ switch (reason)
+ {
+ case DLL_WINE_PREATTACH:
+ return FALSE; /* prefer native version */
+ case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(instance);
+ break;
+ }
+
+ return TRUE;
+}
+
+uint32 steamclient_unix_path_to_dos_path(uint32 api_result, char *inout, uint32 inout_bytes)
+{
+ WCHAR *converted;
+ uint32 r;
+
+ if(api_result == 0)
+ return 0;
+
+ converted = wine_get_dos_file_name(inout);
+ if(!converted){
+ WARN("Unable to convert unix filename to DOS: %s\n", inout);
+ *inout = 0;
+ return 0;
+ }
+
+ r = WideCharToMultiByte(CP_ACP, 0, converted, -1, inout, inout_bytes,
+ NULL, NULL);
+
+ HeapFree(GetProcessHeap(), 0, converted);
+
+ if(r > 0)
+ return r - 1;
+
+ return 0;
+}
+
+#include "win_constructors.h"
+
+static const struct {
+ const char *iface_version;
+ void *(*ctor)(void *);
+} constructors[] = {
+#include "win_constructors_table.dat"
+};
+
+void *create_win_interface(const char *name, void *linux_side)
+{
+ int i;
+
+ TRACE("trying to create %s\n", name);
+
+ if(!linux_side)
+ return NULL;
+
+ for(i = 0; i < sizeof(constructors) / sizeof(*constructors); ++i){
+ if(!strcmp(name, constructors[i].iface_version))
+ return constructors[i].ctor(linux_side);
+ }
+
+ ERR("Don't recognize interface name: %s\n", name);
+
+ return NULL;
+}
+
+static void *steamclient_lib;
+static void *(*steamclient_CreateInterface)(const char *name, int *return_code);
+static bool (*steamclient_BGetCallback)(HSteamPipe a, CallbackMsg_t *b, int32 *c);
+static bool (*steamclient_GetAPICallResult)(HSteamPipe, SteamAPICall_t, void *, int, int, bool *);
+static bool (*steamclient_FreeLastCallback)(HSteamPipe);
+
+static int load_steamclient(void)
+{
+ char path[PATH_MAX];
+
+ if(steamclient_lib)
+ return 1;
+
+#ifdef _WIN64
+ snprintf(path, PATH_MAX, "%s/.steam/sdk64/steamclient.so", getenv("HOME"));
+#else
+ snprintf(path, PATH_MAX, "%s/.steam/sdk32/steamclient.so", getenv("HOME"));
+#endif
+ steamclient_lib = wine_dlopen(path, RTLD_NOW, NULL, 0);
+ if(!steamclient_lib){
+ ERR("unable to load steamclient.so\n");
+ return 0;
+ }
+
+ steamclient_CreateInterface = wine_dlsym(steamclient_lib, "CreateInterface", NULL, 0);
+ if(!steamclient_CreateInterface){
+ ERR("unable to load CreateInterface method\n");
+ return 0;
+ }
+
+ steamclient_BGetCallback = wine_dlsym(steamclient_lib, "Steam_BGetCallback", NULL, 0);
+ if(!steamclient_BGetCallback){
+ ERR("unable to load BGetCallback method\n");
+ return 0;
+ }
+
+ steamclient_GetAPICallResult = wine_dlsym(steamclient_lib, "Steam_GetAPICallResult", NULL, 0);
+ if(!steamclient_GetAPICallResult){
+ ERR("unable to load GetAPICallResult method\n");
+ return 0;
+ }
+
+ steamclient_FreeLastCallback = wine_dlsym(steamclient_lib, "Steam_FreeLastCallback", NULL, 0);
+ if(!steamclient_FreeLastCallback){
+ ERR("unable to load FreeLastCallback method\n");
+ return 0;
+ }
+
+ return 1;
+}
+
+void *CDECL CreateInterface(const char *name, int *return_code)
+{
+ TRACE("name: %s, return_code: %p\n", name, return_code);
+
+ if(!load_steamclient())
+ return NULL;
+
+ return create_win_interface(name, steamclient_CreateInterface(name, return_code));
+}
+
+#include "cb_converters.h"
+
+#include <pshpack8.h>
+struct winCallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#include <poppack.h>
+
+static void *last_cb = NULL;
+
+bool CDECL Steam_BGetCallback(HSteamPipe pipe, struct winCallbackMsg_t *win_msg, int32 *ignored)
+{
+ bool ret;
+ CallbackMsg_t lin_msg;
+
+ TRACE("%u, %p, %p\n", pipe, win_msg, ignored);
+
+ if(!load_steamclient())
+ return 0;
+
+ ret = steamclient_BGetCallback(pipe, &lin_msg, ignored);
+
+ if(ret){
+ win_msg->m_hSteamUser = lin_msg.m_hSteamUser;
+ win_msg->m_iCallback = lin_msg.m_iCallback;
+ switch(win_msg->m_iCallback | (lin_msg.m_cubParam << 16)){
+#include "cb_converters.dat"
+ default:
+ /* drop undocumented callbacks, games can't use them anyway */
+ WARN("Unable to convert callback %u with Linux size %u\n",
+ lin_msg.m_iCallback, lin_msg.m_cubParam);
+ steamclient_FreeLastCallback(pipe);
+ return 0;
+ }
+ last_cb = win_msg->m_pubParam;
+ }
+
+ return ret;
+}
+
+static int get_callback_len(int cb)
+{
+ switch(cb){
+#include "cb_getapi_sizes.dat"
+ }
+ WARN("Unrecognized expected callback: %u\n", cb);
+ return 0;
+}
+
+bool CDECL Steam_GetAPICallResult(HSteamPipe pipe, SteamAPICall_t call,
+ void *callback, int callback_len, int cb_expected, bool *failed)
+{
+ void *lin_callback;
+ int lin_callback_len;
+ bool ret;
+
+ TRACE("%u, x, %p, %u, %u, %p\n", pipe, callback, callback_len, cb_expected, failed);
+
+ if(!load_steamclient())
+ return 0;
+
+ lin_callback_len = get_callback_len(cb_expected);
+ if(!lin_callback_len)
+ lin_callback_len = callback_len;
+ lin_callback = HeapAlloc(GetProcessHeap(), 0, lin_callback_len);
+
+ ret = steamclient_GetAPICallResult(pipe, call, lin_callback, lin_callback_len, cb_expected, failed);
+
+ if(ret){
+ switch(cb_expected){
+#include "cb_getapi_table.dat"
+ default:
+ WARN("Unknown callback\n");
+ memcpy(callback, lin_callback, lin_callback_len);
+ break;
+ }
+ }
+
+ return ret;
+}
+
+bool CDECL Steam_FreeLastCallback(HSteamPipe pipe)
+{
+ TRACE("%u\n", pipe);
+
+ if(!load_steamclient())
+ return 0;
+
+ HeapFree(GetProcessHeap(), 0, last_cb);
+ last_cb = NULL;
+
+ return steamclient_FreeLastCallback(pipe);
+}
+
+void CDECL Breakpad_SteamMiniDumpInit(uint32_t a, const char *b, const char *c)
+{
+ TRACE("\n");
+}
+
+void CDECL Breakpad_SteamSetAppID(uint32_t appid)
+{
+ TRACE("\n");
+}
+
+int CDECL Breakpad_SteamSetSteamID(uint64_t steamid)
+{
+ TRACE("\n");
+ return 1;
+}
+
+int CDECL Breakpad_SteamWriteMiniDumpSetComment(const char *comment)
+{
+ TRACE("\n");
+ return 1;
+}
+
+void CDECL Breakpad_SteamWriteMiniDumpUsingExceptionInfoWithBuildId(int a, int b)
+{
+ TRACE("\n");
+}
diff --git a/lsteamclient/steamclient_private.h b/lsteamclient/steamclient_private.h
new file mode 100644
index 00000000..5ef97a12
--- /dev/null
+++ b/lsteamclient/steamclient_private.h
@@ -0,0 +1,33 @@
+/* TODO these should be generated */
+typedef struct __winISteamClient winISteamClient;
+typedef struct __winISteamUser winISteamUser;
+typedef struct __winISteamGameServer winISteamGameServer;
+typedef struct __winISteamFriends winISteamFriends;
+typedef struct __winISteamUtils winISteamUtils;
+typedef struct __winISteamMatchmaking winISteamMatchmaking;
+typedef struct __winISteamMatchmakingServers winISteamMatchmakingServers;
+typedef struct __winISteamUserStats winISteamUserStats;
+typedef struct __winISteamGameServerStats winISteamGameServerStats;
+typedef struct __winISteamApps winISteamApps;
+typedef struct __winISteamNetworking winISteamNetworking;
+typedef struct __winISteamRemoteStorage winISteamRemoteStorage;
+typedef struct __winISteamRemoteScreenshots winISteamRemoteScreenshots;
+typedef struct __winISteamScreenshots winISteamScreenshots;
+typedef struct __winISteamHTTP winISteamHTTP;
+typedef struct __winISteamUnifiedMessages winISteamUnifiedMessages;
+typedef struct __winISteamController winISteamController;
+typedef struct __winISteamUGC winISteamUGC;
+typedef struct __winISteamAppList winISteamAppList;
+typedef struct __winISteamMusic winISteamMusic;
+typedef struct __winISteamMusicRemote winISteamMusicRemote;
+typedef struct __winISteamHTMLSurface winISteamHTMLSurface;
+typedef struct __winISteamInventory winISteamInventory;
+typedef struct __winISteamVideo winISteamVideo;
+typedef struct __winISteamMasterServerUpdater winISteamMasterServerUpdater;
+typedef struct __winISteamContentServer winISteamContentServer;
+typedef struct __winISteamParentalSettings winISteamParentalSettings;
+typedef struct __winX winX;
+
+void *create_win_interface(const char *name, void *linux_side);
+unsigned int steamclient_unix_path_to_dos_path(unsigned int api_result, char *inout, unsigned int inout_bytes);
+void *create_LinuxMatchmakingServerListResponse(void *win);
diff --git a/lsteamclient/steamclient_wrappers.c b/lsteamclient/steamclient_wrappers.c
new file mode 100644
index 00000000..593e0c01
--- /dev/null
+++ b/lsteamclient/steamclient_wrappers.c
@@ -0,0 +1,95 @@
+/* Linux-to-Windows conversions (i.e. callbacks) here. */
+
+#include "config.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#ifdef __i386__
+
+#define DEFINE_VTBL_WRAPPER(off) \
+ __ASM_GLOBAL_FUNC(vtbl_wrapper_ ## off, \
+ "popl %eax\n\t" \
+ "popl %ecx\n\t" \
+ "pushl %eax\n\t" \
+ "movl 0(%ecx), %eax\n\t" \
+ "jmp *" #off "(%eax)\n\t")
+
+DEFINE_VTBL_WRAPPER(0);
+DEFINE_VTBL_WRAPPER(4);
+DEFINE_VTBL_WRAPPER(8);
+DEFINE_VTBL_WRAPPER(12);
+DEFINE_VTBL_WRAPPER(16);
+DEFINE_VTBL_WRAPPER(20);
+DEFINE_VTBL_WRAPPER(24);
+DEFINE_VTBL_WRAPPER(28);
+DEFINE_VTBL_WRAPPER(32);
+DEFINE_VTBL_WRAPPER(36);
+DEFINE_VTBL_WRAPPER(40);
+DEFINE_VTBL_WRAPPER(44);
+DEFINE_VTBL_WRAPPER(48);
+
+#endif
+
+typedef struct winServerListResponse {
+ const vtable_ptr *vtable;
+} winServerListResponse;
+
+struct gccServerListResponse {
+ void *vtable;
+ struct winServerListResponse *win_side;
+};
+
+void gccServerListResponse_ServerResponded(struct gccServerListResponse *_this, HServerListRequest hRequest, int iServer)
+{
+ TRACE("%p/%p\n", _this, _this->win_side);
+ CALL_VTBL_FUNC(_this->win_side, 0, void, (winServerListResponse *, HServerListRequest, int), (_this->win_side, hRequest, iServer));
+}
+
+void gccServerListResponse_ServerFailedToRespond(struct gccServerListResponse *_this, HServerListRequest hRequest, int iServer)
+{
+ TRACE("%p/%p\n", _this, _this->win_side);
+ CALL_VTBL_FUNC(_this->win_side, 4, void, (winServerListResponse *, HServerListRequest, int), (_this->win_side, hRequest, iServer));
+}
+
+void gccServerListResponse_RefreshComplete(struct gccServerListResponse *_this, HServerListRequest hRequest, EMatchMakingServerResponse response)
+{
+ TRACE("%p/%p\n", _this, _this->win_side);
+ CALL_VTBL_FUNC(_this->win_side, 8, void, (winServerListResponse *, HServerListRequest, EMatchMakingServerResponse), (_this->win_side, hRequest, response));
+}
+
+struct gccServerListResponseVtbl {
+ void (*ServerResponded)(struct gccServerListResponse *, HServerListRequest, int);
+
+ void (*ServerFailedToRespond)(struct gccServerListResponse *, HServerListRequest, int);
+
+ void (*RefreshComplete)(struct gccServerListResponse *, HServerListRequest, EMatchMakingServerResponse);
+} gccServerListResponse_vtbl = {
+ gccServerListResponse_ServerResponded,
+ gccServerListResponse_ServerFailedToRespond,
+ gccServerListResponse_RefreshComplete
+};
+
+void *create_LinuxMatchmakingServerListResponse(void *win)
+{
+ struct gccServerListResponse *ret;
+
+ ret = (struct gccServerListResponse *)HeapAlloc(GetProcessHeap(), 0, sizeof(*ret));
+ if(!ret)
+ return NULL;
+
+ ret->vtable = &gccServerListResponse_vtbl;
+ ret->win_side = (struct winServerListResponse*)win;
+
+ return ret;
+}
diff --git a/lsteamclient/steamworks_sdk_100/isteamapps.h b/lsteamclient/steamworks_sdk_100/isteamapps.h
new file mode 100644
index 00000000..540d417c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_100/isteamapps.h
@@ -0,0 +1,38 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ // returns 0 if the key does not exist
+ // this may be true on first call, since the app data may not be cached locally yet
+ // If you expect it to exists wait for the AppDataChanged_t after the first failure and ask again
+ virtual int GetAppData( AppId_t nAppID, const char *pchKey, char *pchValue, int cchValueMax ) = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION001"
+
+//-----------------------------------------------------------------------------
+// Purpose: called when new information about an app has arrived
+//-----------------------------------------------------------------------------
+struct AppDataChanged_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 1 };
+ uint32 m_nAppID; // appid that changed
+ bool m_bBySteamUI; // change came from SteamUI
+ bool m_bCDDBUpdate; // the cddb entry for this app changed
+};
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_100/isteamclient.h b/lsteamclient/steamworks_sdk_100/isteamclient.h
new file mode 100644
index 00000000..faf4d0bd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_100/isteamclient.h
@@ -0,0 +1,145 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX ) && !defined( _CYGWIN )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMasterServerUpdater;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamContentServer interface
+ virtual ISteamContentServer *GetISteamContentServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMasterServerUpdater interface
+ virtual ISteamMasterServerUpdater *GetISteamMasterServerUpdater( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient007"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_100/isteamfriends.h b/lsteamclient/steamworks_sdk_100/isteamfriends.h
new file mode 100644
index 00000000..612027ef
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_100/isteamfriends.h
@@ -0,0 +1,200 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum k_EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+// maximum number of characters in a users name
+enum { k_cchPersonaNameMax = 128 };
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 4096;
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // gets the avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetFriendAvatar( CSteamID steamIDFriend ) = 0;
+ // returns true if the friend is actually in a game
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, uint64 *pulGameID, uint32 *punGameIP, uint16 *pusGamePort, uint16 *pusQueryPort ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( 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
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open ("Friends", "Community", "Players", "Settings")
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends003"
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_100/isteamgameserver.h b/lsteamclient/steamworks_sdk_100/isteamgameserver.h
new file mode 100644
index 00000000..89185edc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_100/isteamgameserver.h
@@ -0,0 +1,160 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+ // connection functions
+ virtual void LogOn() = 0;
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: true/false depending on whether the call succeeds. If the call succeeds then you
+ // should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed.
+ virtual void SendUserConnectAndAuthenticate( CSteamID steamIDUser, uint32 unIPClient, void *pvAuthBlob, uint32 cubAuthBlobSize ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // You shouldn't need to call this as it is called internally by SteamGameServer_Init() and can only be called once.
+ //
+ // To update the data in this call which may change during the servers lifetime see UpdateServerStatus() below.
+ //
+ // Input: nGameAppID - The Steam assigned AppID for the game
+ // unServerFlags - Any applicable combination of flags (see k_unServerFlag____ constants below)
+ // unGameIP - The IP Address the server is listening for client connections on (might be INADDR_ANY)
+ // unGamePort - The port which the server is listening for client connections on
+ // unSpectatorPort - the port on which spectators can join to observe the server, 0 if spectating is not supported
+ // usQueryPort - The port which the ISteamMasterServerUpdater API should use in order to listen for matchmaking requests
+ // pchGameDir - A unique string identifier for your game
+ // pchVersion - The current version of the server as a string like 1.0.0.0
+ // bLanMode - Is this a LAN only server?
+ //
+ // bugbug jmccaskey - figure out how to remove this from the API and only expose via SteamGameServer_Init... or make this actually used,
+ // and stop calling it in SteamGameServer_Init()?
+ virtual bool BSetServerType( int32 nGameAppId, uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort,
+ uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0;
+
+ // Updates server status values which shows up in the server browser and matchmaking APIs
+ virtual void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers,
+ const char *pchServerName, const char *pSpectatorServerName,
+ const char *pchMapName ) = 0;
+
+ // This can be called if spectator goes away or comes back (passing 0 means there is no spectator server now).
+ virtual void UpdateSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ // Sets a string defining the "gametype" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ virtual void SetGameType( const char *pchGameType ) = 0;
+
+ // Ask if a user has a specific achievement for this game, will get a callback on reply
+ virtual bool BGetUserAchievementStatus( CSteamID steamID, const char *pchAchievementName ) = 0;
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer004"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+
+// callbacks
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_100/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_100/isteammasterserverupdater.h
new file mode 100644
index 00000000..9ea09a8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_100/isteammasterserverupdater.h
@@ -0,0 +1,103 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for retrieving list of game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMMASTERSERVERUPDATER_H
+#define ISTEAMMASTERSERVERUPDATER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game engines use this to tell the Steam master servers
+// about their games so their games can show up in the server browser.
+//-----------------------------------------------------------------------------
+class ISteamMasterServerUpdater
+{
+public:
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void SetActive( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+
+// These are in GameSocketShare mode, where instead of ISteamMasterServerUpdater creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+
+// Functions to set various fields that are used to respond to queries.
+
+ // Call this to set basic data that is passed to the server browser.
+ virtual void SetBasicServerData(
+ unsigned short nProtocolVersion,
+ bool bDedicatedServer,
+ const char *pRegionName,
+ const char *pProductName,
+ unsigned short nMaxReportedClients,
+ bool bPasswordProtected,
+ const char *pGameDescription ) = 0;
+
+ // Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ // Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+
+ // You can call this upon shutdown to clear out data stored for this game server and
+ // to tell the master servers that this server is going away.
+ virtual void NotifyShutdown() = 0;
+
+ // Returns true if the master server has requested a restart.
+ // Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+ // Force it to request a heartbeat from the master servers.
+ virtual void ForceHeartbeat() = 0;
+
+ // Manually edit and query the master server list.
+ // It will provide name resolution and use the default master server port if none is provided.
+ virtual bool AddMasterServer( const char *pServerAddress ) = 0;
+ virtual bool RemoveMasterServer( const char *pServerAddress ) = 0;
+
+ virtual int GetNumMasterServers() = 0;
+
+ // Returns the # of bytes written to pOut.
+ virtual int GetMasterServerAddress( int iServer, char *pOut, int outBufferSize ) = 0;
+};
+
+#define STEAMMASTERSERVERUPDATER_INTERFACE_VERSION "SteamMasterServerUpdater001"
+
+#endif // ISTEAMMASTERSERVERUPDATER_H
diff --git a/lsteamclient/steamworks_sdk_100/isteammatchmaking.h b/lsteamclient/steamworks_sdk_100/isteammatchmaking.h
new file mode 100644
index 00000000..865b808a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_100/isteammatchmaking.h
@@ -0,0 +1,477 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback, with the number of servers requested
+ // if the user is not currently connected to Steam (i.e. SteamUser()->BLoggedOn() returns false) then
+ // a LobbyMatchList_t callback will be posted immediately with no servers
+ virtual void RequestLobbyList() = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If bPrivate is true, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback when the lobby has been created;
+ // local user will the join the lobby, resulting in an additional LobbyEnter_t callback being sent
+ // operations on the chat room can only proceed once the LobbyEnter_t has been received
+ virtual void CreateLobby( bool bPrivate ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback when the lobby has been joined
+ virtual void JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // As above, but gets per-user data for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Fetch metadata for a lobby you're not necessarily in right now
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will leave the lobby and join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking002"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ virtual void RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( EMatchMakingType eType, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ virtual void CancelQuery( EMatchMakingType eType ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ virtual void RefreshQuery( EMatchMakingType eType ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( EMatchMakingType eType ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( EMatchMakingType eType ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( EMatchMakingType eType, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamMasterServerUpdater->SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers001"
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking which go through the regular Steam callback registration system
+//-----------------------------------------------------------------------------
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a Lobby
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the lobby is being forcefully closed
+// lobby details functions will no longer be updated
+//-----------------------------------------------------------------------------
+struct LobbyClosing_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 11 };
+ uint64 m_ulSteamIDLobby; // Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the local user has been kicked from the lobby
+// lobby details functions will no longer be updated
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+ EResult m_eResult; // Result
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_100/isteamnetworking.h b/lsteamclient/steamworks_sdk_100/isteamnetworking.h
new file mode 100644
index 00000000..c81edf1e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_100/isteamnetworking.h
@@ -0,0 +1,135 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a socket
+typedef uint32 SNetSocket_t;
+typedef uint32 SNetListenSocket_t;
+
+
+// connection progress indicators
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketConnectCallback_t callback
+ // on failure or timeout will trigger a SocketConnectionFailureCallback_t callback
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data size cannot be more than 8k, although in UDP mode (default),
+ // it's recommended packets be no larger than 1300 bytes
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking001"
+
+
+// callback notification - status of a socket has changed
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_100/isteamuser.h b/lsteamclient/steamworks_sdk_100/isteamuser.h
new file mode 100644
index 00000000..c2b286ad
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_100/isteamuser.h
@@ -0,0 +1,150 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, CGameID gameID, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // legacy authentication support - need to be called if the game server rejects the user with a 'bad ticket' error
+ // this is only needed under very specific circumstances
+ virtual void RefreshSteam2Login() = 0;
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser009"
+
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct CallbackPipeFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+};
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_100/isteamuserstats.h b/lsteamclient/steamworks_sdk_100/isteamuserstats.h
new file mode 100644
index 00000000..4a68fae0
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_100/isteamuserstats.h
@@ -0,0 +1,98 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// size limit on stat or achievement name
+const uint32 k_cchStatNameMax = 128;
+
+class ISteamUserStats
+{
+public:
+
+ // Ask the server to send down this user's data and achievements for nGameID
+ virtual bool RequestCurrentStats( ) = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ virtual bool StoreStats( ) = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+ // Get general attributes (display name / text, etc) for an Achievement
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+};
+
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION003"
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_100/isteamutils.h b/lsteamclient/steamworks_sdk_100/isteamutils.h
new file mode 100644
index 00000000..1ed5ac5d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_100/isteamutils.h
@@ -0,0 +1,77 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils002"
+
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_100/matchmakingtypes.h b/lsteamclient/steamworks_sdk_100/matchmakingtypes.h
new file mode 100644
index 00000000..d0eedfe7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_100/matchmakingtypes.h
@@ -0,0 +1,239 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+#ifdef POSIX
+#define _snprintf snprintf
+#endif
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+enum EMatchMakingType
+{
+ eInternetServer = 0,
+ eLANServer,
+ eFriendsServer,
+ eFavoritesServer,
+ eHistoryServer,
+ eSpectatorServer,
+ eInvalidServer
+};
+
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ void Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort );
+ netadr_t& GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline void servernetadr_t::Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort )
+{
+ Init( ipAndQueryPort.GetIP(), ipAndQueryPort.GetPort(), usConnectionPort );
+}
+
+inline netadr_t& servernetadr_t::GetIPAndQueryPort()
+{
+ static netadr_t netAdr;
+ netAdr.SetIP( m_unIP );
+ netAdr.SetPort( m_usQueryPort );
+ return netAdr;
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; // IP/Query Port/Connection Port for this server
+ int m_nPing; // current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; // server has responded successfully in the past
+ bool m_bDoNotRefresh; // server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[32]; // current game directory
+ char m_szMap[32]; // current map
+ char m_szGameDescription[64]; // game description
+ int m_nAppID; // Steam App ID of this server
+ int m_nPlayers; // current number of players on the server
+ int m_nMaxPlayers; // Maximum players that can join this server
+ int m_nBotPlayers; // Number of bots (i.e simulated players) on this server
+ bool m_bPassword; // true if this server needs a password to join
+ bool m_bSecure; // Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; // time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; // server version as reported to Steam
+
+private:
+ char m_szServerName[64]; // Game server name
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ char m_szGameTags[128]; // the tags this server exposes
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_100/steam_api.h b/lsteamclient/steamworks_sdk_100/steam_api.h
new file mode 100644
index 00000000..f33746bd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_100/steam_api.h
@@ -0,0 +1,308 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( _LINUX )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+S_API bool SteamAPI_Init();
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+private:
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ //CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ m_pObj = pObj;
+ m_Func = func;
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = GetHSteamUser();
+ HSteamPipe hSteamPipe = GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamUser, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_100/steam_gameserver.h b/lsteamclient/steamworks_sdk_100/steam_gameserver.h
new file mode 100644
index 00000000..1f4970fa
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_100/steam_gameserver.h
@@ -0,0 +1,45 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteammasterserverupdater.h"
+
+enum EServerMode
+{
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Note: if you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it will use "GameSocketShare" mode,
+// which means that the game is responsible for sending and receiving UDP packets for the master
+// server updater. See references to GameSocketShare in isteammasterserverupdater.h.
+//
+// Pass 0 for usGamePort or usSpectatorPort if you're not using that. Then, the master server updater will report
+// what's running based on that.
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, int nGameAppId, const char *pchGameDir, const char *pchVersionString );
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamMasterServerUpdater *SteamMasterServerUpdater();
+S_API ISteamNetworking *SteamGameServerNetworking();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_100/steamclientpublic.h b/lsteamclient/steamworks_sdk_100/steamclientpublic.h
new file mode 100644
index 00000000..ffb4a543
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_100/steamclientpublic.h
@@ -0,0 +1,732 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+} EDenyReason;
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeP2PSuperSeeder = 9, // a fake steamid used by superpeers to seed content to users of Steam P2P stuff
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_unAccountID = 0;
+ m_EAccountType = k_EAccountTypeInvalid;
+ m_EUniverse = k_EUniverseInvalid;
+ m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( 1 != unAccountInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_unAccountID = unAccountID;
+ m_EUniverse = eUniverse;
+ m_EAccountType = eAccountType;
+ m_unAccountInstance = 1;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_unAccountID = unAccountID;
+ m_EUniverse = eUniverse;
+ m_EAccountType = eAccountType;
+ m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_unAccountID = ( ulIdentifier & 0xFFFFFFFF ); // account ID is low 32 bits
+ m_unAccountInstance = ( ( ulIdentifier >> 32 ) & 0xFFFFF ); // account instance is next 20 bits
+ m_EUniverse = eUniverse;
+ m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_unAccountID = ( ulSteamID & 0xFFFFFFFF ); // account ID is low 32 bits
+ m_unAccountInstance = ( ( ulSteamID >> 32 ) & 0xFFFFF ); // account instance is next 20 bits
+
+ m_EAccountType = ( EAccountType ) ( ( ulSteamID >> 52 ) & 0xF ); // type is next 4 bits
+ m_EUniverse = ( EUniverse ) ( ( ulSteamID >> 56 ) & 0xFF ); // universe is next 8 bits
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_EUniverse = eUniverse; // set the universe
+ m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_unAccountInstance = 1; // individual accounts always have an account instance ID of 1
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return (uint64) ( ( ( (uint64) m_EUniverse ) << 56 ) + ( ( (uint64) m_EAccountType ) << 52 ) +
+ ( ( (uint64) m_unAccountInstance ) << 32 ) + m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_EUniverse ) << 56 ) + ((uint64) m_EAccountType << 52 ) + m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_unAccountID = 0;
+ m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_EUniverse = eUniverse;
+ m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_unAccountID = 0;
+ m_EAccountType = k_EAccountTypeAnonUser;
+ m_EUniverse = eUniverse;
+ m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_unAccountID == 0 && BAnonAccount() && m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id?
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_EAccountType == k_EAccountTypeGameServer || m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_EAccountType == k_EAccountTypeChat;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_EAccountType == k_EAccountTypeIndividual;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_EAccountType == k_EAccountTypeAnonUser || m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_unAccountID = unAccountID; }
+ uint32 GetAccountID() const { return m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_EUniverse = eUniverse; }
+ bool IsValid() const { return ( m_EAccountType != k_EAccountTypeInvalid && m_EUniverse != k_EUniverseInvalid ); }
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ char * Render() const; // renders this steam ID to string
+ static char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ bool operator==( const CSteamID &val ) const
+ {
+ return ( ( val.m_unAccountID == m_unAccountID ) && ( val.m_unAccountInstance == m_unAccountInstance )
+ && ( val.m_EAccountType == m_EAccountType ) && ( val.m_EUniverse == m_EUniverse ) );
+ }
+
+ bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ bool operator<( const CSteamID &val ) const { return ConvertToUint64() < val.ConvertToUint64(); }
+ bool operator>( const CSteamID &val ) const { return ConvertToUint64() > val.ConvertToUint64(); }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+#ifdef _WIN32
+#pragma warning(push)
+#pragma warning(disable:4201) // nameless union is nonstandard
+ // 64 bits total
+ union
+ {
+ struct
+ {
+#endif
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID (used for multiseat type accounts only)
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#ifdef _WIN32
+ };
+
+ uint64 m_unAll64Bits;
+ };
+#pragma warning(pop) // no more anonymous unions until next time
+#endif
+};
+
+const int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const int k_unSteamAccountInstanceMask = 0x000FFFFF;
+
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+// generic invalid CSteamID
+const CSteamID k_steamIDNil;
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+const CSteamID k_steamIDOutofDateGS( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID comes from a user game connection to an sv_lan GS
+const CSteamID k_steamIDLanModeGS( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+const CSteamID k_steamIDNotInitYetGS( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+ CGameID()
+ {
+ m_ulGameID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ char * Render() const; // renders this Game ID to string
+ static char * Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = 0;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+#endif
+
+ void SetAsShortcut()
+ {
+ m_gameID.m_nAppID = 0;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+ }
+
+ void SetAsP2PFile()
+ {
+ m_gameID.m_nAppID = 0;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+ }
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ return ( m_ulGameID != 0 );
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+// Max number of credit cards stored for one account
+const int k_nMaxNumCardsPerAccount = 1;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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.
+
+#endif // STEAMCLIENTPUBLIC_H
diff --git a/lsteamclient/steamworks_sdk_100/steamtypes.h b/lsteamclient/steamworks_sdk_100/steamtypes.h
new file mode 100644
index 00000000..c87dd6a3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_100/steamtypes.h
@@ -0,0 +1,92 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubDigestSize = 20; // CryptoPP::SHA::DIGESTSIZE
+const int k_cubSaltSize = 8;
+
+typedef uint8 SHADigest_t[ k_cubDigestSize ];
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+typedef uint64 GID_t; // globally unique identifier
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0xFFFFFFFF;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_101/isteamapps.h b/lsteamclient/steamworks_sdk_101/isteamapps.h
new file mode 100644
index 00000000..29399d83
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_101/isteamapps.h
@@ -0,0 +1,32 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION002"
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_101/isteamclient.h b/lsteamclient/steamworks_sdk_101/isteamclient.h
new file mode 100644
index 00000000..6ac82428
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_101/isteamclient.h
@@ -0,0 +1,146 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX ) && !defined( _CYGWIN )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMasterServerUpdater;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamContentServer interface
+ virtual ISteamContentServer *GetISteamContentServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMasterServerUpdater interface
+ virtual ISteamMasterServerUpdater *GetISteamMasterServerUpdater( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient007"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_101/isteamfriends.h b/lsteamclient/steamworks_sdk_101/isteamfriends.h
new file mode 100644
index 00000000..4dabcb52
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_101/isteamfriends.h
@@ -0,0 +1,200 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum k_EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+// maximum number of characters in a users name
+enum { k_cchPersonaNameMax = 128 };
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // gets the avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetFriendAvatar( CSteamID steamIDFriend ) = 0;
+ // returns true if the friend is actually in a game
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, uint64 *pulGameID, uint32 *punGameIP, uint16 *pusGamePort, uint16 *pusQueryPort ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( 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
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open ("Friends", "Community", "Players", "Settings")
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends003"
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_101/isteamgameserver.h b/lsteamclient/steamworks_sdk_101/isteamgameserver.h
new file mode 100644
index 00000000..7083d8d9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_101/isteamgameserver.h
@@ -0,0 +1,161 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+ // connection functions
+ virtual void LogOn() = 0;
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // You shouldn't need to call this as it is called internally by SteamGameServer_Init() and can only be called once.
+ //
+ // To update the data in this call which may change during the servers lifetime see UpdateServerStatus() below.
+ //
+ // Input: nGameAppID - The Steam assigned AppID for the game
+ // unServerFlags - Any applicable combination of flags (see k_unServerFlag____ constants below)
+ // unGameIP - The IP Address the server is listening for client connections on (might be INADDR_ANY)
+ // unGamePort - The port which the server is listening for client connections on
+ // unSpectatorPort - the port on which spectators can join to observe the server, 0 if spectating is not supported
+ // usQueryPort - The port which the ISteamMasterServerUpdater API should use in order to listen for matchmaking requests
+ // pchGameDir - A unique string identifier for your game
+ // pchVersion - The current version of the server as a string like 1.0.0.0
+ // bLanMode - Is this a LAN only server?
+ //
+ // bugbug jmccaskey - figure out how to remove this from the API and only expose via SteamGameServer_Init... or make this actually used,
+ // and stop calling it in SteamGameServer_Init()?
+ virtual bool BSetServerType( uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort,
+ uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0;
+
+ // Updates server status values which shows up in the server browser and matchmaking APIs
+ virtual void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers,
+ const char *pchServerName, const char *pSpectatorServerName,
+ const char *pchMapName ) = 0;
+
+ // This can be called if spectator goes away or comes back (passing 0 means there is no spectator server now).
+ virtual void UpdateSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ // Sets a string defining the "gametype" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ virtual void SetGameType( const char *pchGameType ) = 0;
+
+ // Ask if a user has a specific achievement for this game, will get a callback on reply
+ virtual bool BGetUserAchievementStatus( CSteamID steamID, const char *pchAchievementName ) = 0;
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer005"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_101/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_101/isteammasterserverupdater.h
new file mode 100644
index 00000000..9ea09a8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_101/isteammasterserverupdater.h
@@ -0,0 +1,103 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for retrieving list of game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMMASTERSERVERUPDATER_H
+#define ISTEAMMASTERSERVERUPDATER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game engines use this to tell the Steam master servers
+// about their games so their games can show up in the server browser.
+//-----------------------------------------------------------------------------
+class ISteamMasterServerUpdater
+{
+public:
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void SetActive( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+
+// These are in GameSocketShare mode, where instead of ISteamMasterServerUpdater creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+
+// Functions to set various fields that are used to respond to queries.
+
+ // Call this to set basic data that is passed to the server browser.
+ virtual void SetBasicServerData(
+ unsigned short nProtocolVersion,
+ bool bDedicatedServer,
+ const char *pRegionName,
+ const char *pProductName,
+ unsigned short nMaxReportedClients,
+ bool bPasswordProtected,
+ const char *pGameDescription ) = 0;
+
+ // Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ // Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+
+ // You can call this upon shutdown to clear out data stored for this game server and
+ // to tell the master servers that this server is going away.
+ virtual void NotifyShutdown() = 0;
+
+ // Returns true if the master server has requested a restart.
+ // Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+ // Force it to request a heartbeat from the master servers.
+ virtual void ForceHeartbeat() = 0;
+
+ // Manually edit and query the master server list.
+ // It will provide name resolution and use the default master server port if none is provided.
+ virtual bool AddMasterServer( const char *pServerAddress ) = 0;
+ virtual bool RemoveMasterServer( const char *pServerAddress ) = 0;
+
+ virtual int GetNumMasterServers() = 0;
+
+ // Returns the # of bytes written to pOut.
+ virtual int GetMasterServerAddress( int iServer, char *pOut, int outBufferSize ) = 0;
+};
+
+#define STEAMMASTERSERVERUPDATER_INTERFACE_VERSION "SteamMasterServerUpdater001"
+
+#endif // ISTEAMMASTERSERVERUPDATER_H
diff --git a/lsteamclient/steamworks_sdk_101/isteammatchmaking.h b/lsteamclient/steamworks_sdk_101/isteammatchmaking.h
new file mode 100644
index 00000000..6b7da2d7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_101/isteammatchmaking.h
@@ -0,0 +1,509 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback, with the number of servers requested
+ // if the user is not currently connected to Steam (i.e. SteamUser()->BLoggedOn() returns false) then
+ // a LobbyMatchList_t callback will be posted immediately with no servers
+ virtual void RequestLobbyList() = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If bPrivate is true, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback when the lobby has been created;
+ // local user will the join the lobby, resulting in an additional LobbyEnter_t callback being sent
+ // operations on the chat room can only proceed once the LobbyEnter_t has been received
+ virtual void CreateLobby( bool bPrivate ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback when the lobby has been joined
+ virtual void JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // As above, but gets per-user data for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Fetch metadata for a lobby you're not necessarily in right now
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will leave the lobby and join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking002"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ virtual void RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( EMatchMakingType eType, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ virtual void CancelQuery( EMatchMakingType eType ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ virtual void RefreshQuery( EMatchMakingType eType ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( EMatchMakingType eType ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( EMatchMakingType eType ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( EMatchMakingType eType, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamMasterServerUpdater->SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers001"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x01, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x02, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x04, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x08, // User kicked
+ k_EChatMemberStateChangeBanned = 0x10, // User kicked and banned
+
+ k_EChatMemberInfoVoiceSpeaking = 0x20, // User started talking (using speaker slot)
+ k_EChatMemberInfoVoiceDoneSpeaking = 0x40, // User relinquished speaker slot
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a Lobby
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the lobby is being forcefully closed
+// lobby details functions will no longer be updated
+//-----------------------------------------------------------------------------
+struct LobbyClosing_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 11 };
+ uint64 m_ulSteamIDLobby; // Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the local user has been kicked from the lobby
+// lobby details functions will no longer be updated
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+ EResult m_eResult; // Result
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_101/isteamnetworking.h b/lsteamclient/steamworks_sdk_101/isteamnetworking.h
new file mode 100644
index 00000000..1645db4f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_101/isteamnetworking.h
@@ -0,0 +1,134 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a socket
+typedef uint32 SNetSocket_t;
+typedef uint32 SNetListenSocket_t;
+
+
+// connection progress indicators
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketConnectCallback_t callback
+ // on failure or timeout will trigger a SocketConnectionFailureCallback_t callback
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking001"
+
+
+// callback notification - status of a socket has changed
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_101/isteamuser.h b/lsteamclient/steamworks_sdk_101/isteamuser.h
new file mode 100644
index 00000000..25cac543
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_101/isteamuser.h
@@ -0,0 +1,146 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser010"
+
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct CallbackPipeFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+};
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_101/isteamuserstats.h b/lsteamclient/steamworks_sdk_101/isteamuserstats.h
new file mode 100644
index 00000000..4a68fae0
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_101/isteamuserstats.h
@@ -0,0 +1,98 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// size limit on stat or achievement name
+const uint32 k_cchStatNameMax = 128;
+
+class ISteamUserStats
+{
+public:
+
+ // Ask the server to send down this user's data and achievements for nGameID
+ virtual bool RequestCurrentStats( ) = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ virtual bool StoreStats( ) = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+ // Get general attributes (display name / text, etc) for an Achievement
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+};
+
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION003"
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_101/isteamutils.h b/lsteamclient/steamworks_sdk_101/isteamutils.h
new file mode 100644
index 00000000..1ed5ac5d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_101/isteamutils.h
@@ -0,0 +1,77 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils002"
+
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_101/matchmakingtypes.h b/lsteamclient/steamworks_sdk_101/matchmakingtypes.h
new file mode 100644
index 00000000..d0eedfe7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_101/matchmakingtypes.h
@@ -0,0 +1,239 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+#ifdef POSIX
+#define _snprintf snprintf
+#endif
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+enum EMatchMakingType
+{
+ eInternetServer = 0,
+ eLANServer,
+ eFriendsServer,
+ eFavoritesServer,
+ eHistoryServer,
+ eSpectatorServer,
+ eInvalidServer
+};
+
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ void Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort );
+ netadr_t& GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline void servernetadr_t::Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort )
+{
+ Init( ipAndQueryPort.GetIP(), ipAndQueryPort.GetPort(), usConnectionPort );
+}
+
+inline netadr_t& servernetadr_t::GetIPAndQueryPort()
+{
+ static netadr_t netAdr;
+ netAdr.SetIP( m_unIP );
+ netAdr.SetPort( m_usQueryPort );
+ return netAdr;
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; // IP/Query Port/Connection Port for this server
+ int m_nPing; // current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; // server has responded successfully in the past
+ bool m_bDoNotRefresh; // server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[32]; // current game directory
+ char m_szMap[32]; // current map
+ char m_szGameDescription[64]; // game description
+ int m_nAppID; // Steam App ID of this server
+ int m_nPlayers; // current number of players on the server
+ int m_nMaxPlayers; // Maximum players that can join this server
+ int m_nBotPlayers; // Number of bots (i.e simulated players) on this server
+ bool m_bPassword; // true if this server needs a password to join
+ bool m_bSecure; // Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; // time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; // server version as reported to Steam
+
+private:
+ char m_szServerName[64]; // Game server name
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ char m_szGameTags[128]; // the tags this server exposes
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_101/steam_api.h b/lsteamclient/steamworks_sdk_101/steam_api.h
new file mode 100644
index 00000000..199aa3e6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_101/steam_api.h
@@ -0,0 +1,318 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( _LINUX )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+S_API bool SteamAPI_Init();
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+private:
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ SteamAPI_UnregisterCallback( this );
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_101/steam_gameserver.h b/lsteamclient/steamworks_sdk_101/steam_gameserver.h
new file mode 100644
index 00000000..268194fc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_101/steam_gameserver.h
@@ -0,0 +1,134 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteammasterserverupdater.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Note: if you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it will use "GameSocketShare" mode,
+// which means that the game is responsible for sending and receiving UDP packets for the master
+// server updater. See references to GameSocketShare in isteammasterserverupdater.h.
+//
+// Pass 0 for usGamePort or usSpectatorPort if you're not using that. Then, the master server updater will report
+// what's running based on that.
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamMasterServerUpdater *SteamMasterServerUpdater();
+S_API ISteamNetworking *SteamGameServerNetworking();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamMasterServerUpdater *SteamMasterServerUpdater() { return m_pSteamMasterServerUpdater; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamMasterServerUpdater *m_pSteamMasterServerUpdater;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamMasterServerUpdater = NULL;
+ m_pSteamGameServerNetworking = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamMasterServerUpdater = g_pSteamClientGameServer->GetISteamMasterServerUpdater( hSteamUser, hSteamPipe, STEAMMASTERSERVERUPDATER_INTERFACE_VERSION );
+ if ( !m_pSteamMasterServerUpdater )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_101/steamclientpublic.h b/lsteamclient/steamworks_sdk_101/steamclientpublic.h
new file mode 100644
index 00000000..ed044e70
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_101/steamclientpublic.h
@@ -0,0 +1,768 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+} EDenyReason;
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeP2PSuperSeeder = 9, // a fake steamid used by superpeers to seed content to users of Steam P2P stuff
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_unAccountID = 0;
+ m_EAccountType = k_EAccountTypeInvalid;
+ m_EUniverse = k_EUniverseInvalid;
+ m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( 1 != unAccountInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_unAccountID = unAccountID;
+ m_EUniverse = eUniverse;
+ m_EAccountType = eAccountType;
+ m_unAccountInstance = 1;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_unAccountID = unAccountID;
+ m_EUniverse = eUniverse;
+ m_EAccountType = eAccountType;
+ m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_unAccountID = ( ulIdentifier & 0xFFFFFFFF ); // account ID is low 32 bits
+ m_unAccountInstance = ( ( ulIdentifier >> 32 ) & 0xFFFFF ); // account instance is next 20 bits
+ m_EUniverse = eUniverse;
+ m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_unAccountID = ( ulSteamID & 0xFFFFFFFF ); // account ID is low 32 bits
+ m_unAccountInstance = ( ( ulSteamID >> 32 ) & 0xFFFFF ); // account instance is next 20 bits
+
+ m_EAccountType = ( EAccountType ) ( ( ulSteamID >> 52 ) & 0xF ); // type is next 4 bits
+ m_EUniverse = ( EUniverse ) ( ( ulSteamID >> 56 ) & 0xFF ); // universe is next 8 bits
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_EUniverse = eUniverse; // set the universe
+ m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_unAccountInstance = 1; // individual accounts always have an account instance ID of 1
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return (uint64) ( ( ( (uint64) m_EUniverse ) << 56 ) + ( ( (uint64) m_EAccountType ) << 52 ) +
+ ( ( (uint64) m_unAccountInstance ) << 32 ) + m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_EUniverse ) << 56 ) + ((uint64) m_EAccountType << 52 ) + m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_unAccountID = 0;
+ m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_EUniverse = eUniverse;
+ m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_unAccountID = 0;
+ m_EAccountType = k_EAccountTypeAnonUser;
+ m_EUniverse = eUniverse;
+ m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_unAccountID == 0 && BAnonAccount() && m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id?
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_EAccountType == k_EAccountTypeGameServer || m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_EAccountType == k_EAccountTypeChat;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_EAccountType == k_EAccountTypeIndividual;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_EAccountType == k_EAccountTypeAnonUser || m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_unAccountID = unAccountID; }
+ uint32 GetAccountID() const { return m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_EUniverse = eUniverse; }
+ bool IsValid() const { return ( m_EAccountType != k_EAccountTypeInvalid && m_EUniverse != k_EUniverseInvalid ); }
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ char * Render() const; // renders this steam ID to string
+ static char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ bool operator==( const CSteamID &val ) const
+ {
+ return ( ( val.m_unAccountID == m_unAccountID ) && ( val.m_unAccountInstance == m_unAccountInstance )
+ && ( val.m_EAccountType == m_EAccountType ) && ( val.m_EUniverse == m_EUniverse ) );
+ }
+
+ bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ bool operator<( const CSteamID &val ) const { return ConvertToUint64() < val.ConvertToUint64(); }
+ bool operator>( const CSteamID &val ) const { return ConvertToUint64() > val.ConvertToUint64(); }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+#ifdef _WIN32
+#pragma warning(push)
+#pragma warning(disable:4201) // nameless union is nonstandard
+ // 64 bits total
+ union
+ {
+ struct
+ {
+#endif
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID (used for multiseat type accounts only)
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#ifdef _WIN32
+ };
+
+ uint64 m_unAll64Bits;
+ };
+#pragma warning(pop) // no more anonymous unions until next time
+#endif
+};
+
+const int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const int k_unSteamAccountInstanceMask = 0x000FFFFF;
+
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+// generic invalid CSteamID
+const CSteamID k_steamIDNil;
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+const CSteamID k_steamIDOutofDateGS( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID comes from a user game connection to an sv_lan GS
+const CSteamID k_steamIDLanModeGS( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+const CSteamID k_steamIDNotInitYetGS( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ char *Render() const; // render this Game ID to string
+ static char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+ break;
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ case k_EGameIDTypeShortcut:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+// Max number of credit cards stored for one account
+const int k_nMaxNumCardsPerAccount = 1;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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.
+
+#endif // STEAMCLIENTPUBLIC_H
diff --git a/lsteamclient/steamworks_sdk_101/steamtypes.h b/lsteamclient/steamworks_sdk_101/steamtypes.h
new file mode 100644
index 00000000..6b71ddd8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_101/steamtypes.h
@@ -0,0 +1,94 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubDigestSize = 20; // CryptoPP::SHA::DIGESTSIZE
+const int k_cubSaltSize = 8;
+
+typedef uint8 SHADigest_t[ k_cubDigestSize ];
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+typedef uint64 GID_t; // globally unique identifier
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_102/isteamapps.h b/lsteamclient/steamworks_sdk_102/isteamapps.h
new file mode 100644
index 00000000..29399d83
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_102/isteamapps.h
@@ -0,0 +1,32 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION002"
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_102/isteamclient.h b/lsteamclient/steamworks_sdk_102/isteamclient.h
new file mode 100644
index 00000000..a4b4abbf
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_102/isteamclient.h
@@ -0,0 +1,149 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX ) && !defined( _CYGWIN )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMasterServerUpdater;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamContentServer interface
+ virtual ISteamContentServer *GetISteamContentServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMasterServerUpdater interface
+ virtual ISteamMasterServerUpdater *GetISteamMasterServerUpdater( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient007"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_102/isteamfriends.h b/lsteamclient/steamworks_sdk_102/isteamfriends.h
new file mode 100644
index 00000000..4e585c70
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_102/isteamfriends.h
@@ -0,0 +1,212 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: avatar sizes, used in ISteamFriends::GetFriendAvatar()
+//-----------------------------------------------------------------------------
+enum EAvatarSize
+{
+ k_EAvatarSize32x32 = 0,
+ k_EAvatarSize64x64 = 1,
+};
+
+
+// maximum number of characters in a users name
+enum { k_cchPersonaNameMax = 128 };
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // gets the avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetFriendAvatar( CSteamID steamIDFriend, int eAvatarSize ) = 0;
+ // returns true if the friend is actually in a game
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, uint64 *pulGameID, uint32 *punGameIP, uint16 *pusGamePort, uint16 *pusQueryPort ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( 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
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open ("Friends", "Community", "Players", "Settings")
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends004"
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_102/isteamgameserver.h b/lsteamclient/steamworks_sdk_102/isteamgameserver.h
new file mode 100644
index 00000000..941f850f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_102/isteamgameserver.h
@@ -0,0 +1,161 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+ // connection functions
+ virtual void LogOn() = 0;
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // You shouldn't need to call this as it is called internally by SteamGameServer_Init() and can only be called once.
+ //
+ // To update the data in this call which may change during the servers lifetime see UpdateServerStatus() below.
+ //
+ // Input: nGameAppID - The Steam assigned AppID for the game
+ // unServerFlags - Any applicable combination of flags (see k_unServerFlag____ constants below)
+ // unGameIP - The IP Address the server is listening for client connections on (might be INADDR_ANY)
+ // unGamePort - The port which the server is listening for client connections on
+ // unSpectatorPort - the port on which spectators can join to observe the server, 0 if spectating is not supported
+ // usQueryPort - The port which the ISteamMasterServerUpdater API should use in order to listen for matchmaking requests
+ // pchGameDir - A unique string identifier for your game
+ // pchVersion - The current version of the server as a string like 1.0.0.0
+ // bLanMode - Is this a LAN only server?
+ //
+ // bugbug jmccaskey - figure out how to remove this from the API and only expose via SteamGameServer_Init... or make this actually used,
+ // and stop calling it in SteamGameServer_Init()?
+ virtual bool BSetServerType( uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort,
+ uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0;
+
+ // Updates server status values which shows up in the server browser and matchmaking APIs
+ virtual void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers,
+ const char *pchServerName, const char *pSpectatorServerName,
+ const char *pchMapName ) = 0;
+
+ // This can be called if spectator goes away or comes back (passing 0 means there is no spectator server now).
+ virtual void UpdateSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ // Sets a string defining the "gametype" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ virtual void SetGameType( const char *pchGameType ) = 0;
+
+ // Ask if a user has a specific achievement for this game, will get a callback on reply
+ virtual bool BGetUserAchievementStatus( CSteamID steamID, const char *pchAchievementName ) = 0;
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer005"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_102/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_102/isteammasterserverupdater.h
new file mode 100644
index 00000000..9ea09a8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_102/isteammasterserverupdater.h
@@ -0,0 +1,103 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for retrieving list of game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMMASTERSERVERUPDATER_H
+#define ISTEAMMASTERSERVERUPDATER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game engines use this to tell the Steam master servers
+// about their games so their games can show up in the server browser.
+//-----------------------------------------------------------------------------
+class ISteamMasterServerUpdater
+{
+public:
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void SetActive( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+
+// These are in GameSocketShare mode, where instead of ISteamMasterServerUpdater creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+
+// Functions to set various fields that are used to respond to queries.
+
+ // Call this to set basic data that is passed to the server browser.
+ virtual void SetBasicServerData(
+ unsigned short nProtocolVersion,
+ bool bDedicatedServer,
+ const char *pRegionName,
+ const char *pProductName,
+ unsigned short nMaxReportedClients,
+ bool bPasswordProtected,
+ const char *pGameDescription ) = 0;
+
+ // Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ // Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+
+ // You can call this upon shutdown to clear out data stored for this game server and
+ // to tell the master servers that this server is going away.
+ virtual void NotifyShutdown() = 0;
+
+ // Returns true if the master server has requested a restart.
+ // Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+ // Force it to request a heartbeat from the master servers.
+ virtual void ForceHeartbeat() = 0;
+
+ // Manually edit and query the master server list.
+ // It will provide name resolution and use the default master server port if none is provided.
+ virtual bool AddMasterServer( const char *pServerAddress ) = 0;
+ virtual bool RemoveMasterServer( const char *pServerAddress ) = 0;
+
+ virtual int GetNumMasterServers() = 0;
+
+ // Returns the # of bytes written to pOut.
+ virtual int GetMasterServerAddress( int iServer, char *pOut, int outBufferSize ) = 0;
+};
+
+#define STEAMMASTERSERVERUPDATER_INTERFACE_VERSION "SteamMasterServerUpdater001"
+
+#endif // ISTEAMMASTERSERVERUPDATER_H
diff --git a/lsteamclient/steamworks_sdk_102/isteammatchmaking.h b/lsteamclient/steamworks_sdk_102/isteammatchmaking.h
new file mode 100644
index 00000000..bac94feb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_102/isteammatchmaking.h
@@ -0,0 +1,553 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback, with the number of servers requested
+ // if the user is not currently connected to Steam (i.e. SteamUser()->BLoggedOn() returns false) then
+ // a LobbyMatchList_t callback will be posted immediately with no servers
+ virtual void RequestLobbyList() = 0;
+
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListFilter( const char *pchKeyToMatch, const char *pchValueToMatch ) = 0;
+ // numerical comparison - 0 is equal, -1 is the lobby value is less than nValueToMatch, 1 is the lobby value is greater than nValueToMatch
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, int nComparisonType /* 0 is equal, -1 is less than, 1 is greater than */ ) = 0;
+ // sets RequestLobbyList() to only returns lobbies which aren't yet full - needs SetLobbyMemberLimit() called on the lobby to set an initial limit
+ virtual void AddRequestLobbyListSlotsAvailableFilter() = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If bPrivate is true, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback when the lobby has been created;
+ // local user will the join the lobby, resulting in an additional LobbyEnter_t callback being sent
+ // operations on the chat room can only proceed once the LobbyEnter_t has been received
+ virtual void CreateLobby( bool bPrivate ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback when the lobby has been joined
+ // users already in the lobby will receive LobbyChatUpdate_t callback after this user has successfully joined
+ virtual void JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // As above, but gets per-user data for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Fetch metadata for a lobby you're not necessarily in right now
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will leave the lobby and join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // asks the Steam servers for a list of lobbies that friends are in
+ // returns results by posting one RequestFriendsLobbiesResponse_t callback per friend/lobby pair
+ // if no friends are in lobbies, RequestFriendsLobbiesResponse_t will be posted but with 0 results
+ // filters don't apply to lobbies (currently)
+ virtual bool RequestFriendsLobbies() = 0;
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking004"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ virtual void RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( EMatchMakingType eType, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ virtual void CancelQuery( EMatchMakingType eType ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ virtual void RefreshQuery( EMatchMakingType eType ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( EMatchMakingType eType ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( EMatchMakingType eType ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( EMatchMakingType eType, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamMasterServerUpdater->SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers001"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x01, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x02, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x04, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x08, // User kicked
+ k_EChatMemberStateChangeBanned = 0x10, // User kicked and banned
+
+ k_EChatMemberInfoVoiceSpeaking = 0x20, // User started talking (using speaker slot)
+ k_EChatMemberInfoVoiceDoneSpeaking = 0x40, // User relinquished speaker slot
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>"
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a Lobby
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the lobby is being forcefully closed
+// lobby details functions will no longer be updated
+//-----------------------------------------------------------------------------
+struct LobbyClosing_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 11 };
+ uint64 m_ulSteamIDLobby; // Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the local user has been kicked from the lobby
+// lobby details functions will no longer be updated
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+ EResult m_eResult; // Result
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Response to a RequestFriendsLobbies() call
+// One of these callbacks will be received per friend who is in a lobby
+// if no friends are in a lobby, then one of these will be called with 0 values
+//-----------------------------------------------------------------------------
+struct RequestFriendsLobbiesResponse_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+ uint64 m_ulSteamIDFriend; // friend who is in a lobby; 0 if no friends in lobbies are found
+ uint64 m_ulSteamIDLobby; // lobby that the friend is in; 0 if no friends in lobbies are found
+
+ int m_cResultIndex; // result #, [1, m_cResultsTotal] if any are found; 0 if no friends in lobbies are found
+ int m_cResultsTotal; // total number of results; 0 if no friends in lobbies are found
+};
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_102/isteamnetworking.h b/lsteamclient/steamworks_sdk_102/isteamnetworking.h
new file mode 100644
index 00000000..73d1c258
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_102/isteamnetworking.h
@@ -0,0 +1,134 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a socket
+typedef uint32 SNetSocket_t;
+typedef uint32 SNetListenSocket_t;
+
+
+// connection progress indicators
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking001"
+
+
+// callback notification - status of a socket has changed
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_102/isteamuser.h b/lsteamclient/steamworks_sdk_102/isteamuser.h
new file mode 100644
index 00000000..feb0fcab
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_102/isteamuser.h
@@ -0,0 +1,167 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetCompressedVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetCompressedVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Gets the latest voice data. It should be called as often as possible once recording has started.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ virtual EVoiceResult GetCompressedVoice( void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten ) = 0;
+
+ // Decompresses a chunk of data produced by GetCompressedVoice(). nBytesWritten is set to the
+ // number of bytes written to pDestBuffer. The output format of the data is 16-bit signed at
+ // 11025 samples per second.
+ virtual EVoiceResult DecompressVoice( void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten ) = 0;
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser011"
+
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct CallbackPipeFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+};
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_102/isteamuserstats.h b/lsteamclient/steamworks_sdk_102/isteamuserstats.h
new file mode 100644
index 00000000..4a68fae0
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_102/isteamuserstats.h
@@ -0,0 +1,98 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// size limit on stat or achievement name
+const uint32 k_cchStatNameMax = 128;
+
+class ISteamUserStats
+{
+public:
+
+ // Ask the server to send down this user's data and achievements for nGameID
+ virtual bool RequestCurrentStats( ) = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ virtual bool StoreStats( ) = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+ // Get general attributes (display name / text, etc) for an Achievement
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+};
+
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION003"
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_102/isteamutils.h b/lsteamclient/steamworks_sdk_102/isteamutils.h
new file mode 100644
index 00000000..5b1cb416
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_102/isteamutils.h
@@ -0,0 +1,81 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils002"
+
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_102/matchmakingtypes.h b/lsteamclient/steamworks_sdk_102/matchmakingtypes.h
new file mode 100644
index 00000000..470cd42e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_102/matchmakingtypes.h
@@ -0,0 +1,239 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#define _snprintf snprintf
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+enum EMatchMakingType
+{
+ eInternetServer = 0,
+ eLANServer,
+ eFriendsServer,
+ eFavoritesServer,
+ eHistoryServer,
+ eSpectatorServer,
+ eInvalidServer
+};
+
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ void Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort );
+ netadr_t& GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline void servernetadr_t::Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort )
+{
+ Init( ipAndQueryPort.GetIP(), ipAndQueryPort.GetPort(), usConnectionPort );
+}
+
+inline netadr_t& servernetadr_t::GetIPAndQueryPort()
+{
+ static netadr_t netAdr;
+ netAdr.SetIP( m_unIP );
+ netAdr.SetPort( m_usQueryPort );
+ return netAdr;
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; // IP/Query Port/Connection Port for this server
+ int m_nPing; // current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; // server has responded successfully in the past
+ bool m_bDoNotRefresh; // server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[32]; // current game directory
+ char m_szMap[32]; // current map
+ char m_szGameDescription[64]; // game description
+ int m_nAppID; // Steam App ID of this server
+ int m_nPlayers; // current number of players on the server
+ int m_nMaxPlayers; // Maximum players that can join this server
+ int m_nBotPlayers; // Number of bots (i.e simulated players) on this server
+ bool m_bPassword; // true if this server needs a password to join
+ bool m_bSecure; // Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; // time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; // server version as reported to Steam
+
+private:
+ char m_szServerName[64]; // Game server name
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ char m_szGameTags[128]; // the tags this server exposes
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_102/steam_api.h b/lsteamclient/steamworks_sdk_102/steam_api.h
new file mode 100644
index 00000000..fb1569f4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_102/steam_api.h
@@ -0,0 +1,318 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+S_API bool SteamAPI_Init();
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+private:
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ SteamAPI_UnregisterCallback( this );
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_102/steam_gameserver.h b/lsteamclient/steamworks_sdk_102/steam_gameserver.h
new file mode 100644
index 00000000..268194fc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_102/steam_gameserver.h
@@ -0,0 +1,134 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteammasterserverupdater.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Note: if you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it will use "GameSocketShare" mode,
+// which means that the game is responsible for sending and receiving UDP packets for the master
+// server updater. See references to GameSocketShare in isteammasterserverupdater.h.
+//
+// Pass 0 for usGamePort or usSpectatorPort if you're not using that. Then, the master server updater will report
+// what's running based on that.
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamMasterServerUpdater *SteamMasterServerUpdater();
+S_API ISteamNetworking *SteamGameServerNetworking();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamMasterServerUpdater *SteamMasterServerUpdater() { return m_pSteamMasterServerUpdater; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamMasterServerUpdater *m_pSteamMasterServerUpdater;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamMasterServerUpdater = NULL;
+ m_pSteamGameServerNetworking = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamMasterServerUpdater = g_pSteamClientGameServer->GetISteamMasterServerUpdater( hSteamUser, hSteamPipe, STEAMMASTERSERVERUPDATER_INTERFACE_VERSION );
+ if ( !m_pSteamMasterServerUpdater )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_102/steamclientpublic.h b/lsteamclient/steamworks_sdk_102/steamclientpublic.h
new file mode 100644
index 00000000..356a14c8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_102/steamclientpublic.h
@@ -0,0 +1,860 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeP2PSuperSeeder = 9, // a fake steamid used by superpeers to seed content to users of Steam P2P stuff
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Persistent item constants
+//-----------------------------------------------------------------------------
+typedef int32 HNewItemRequest; // Handle to an item generation request
+const int k_cchCreateItemLen = 64; // Maximum string length in item create APIs
+const uint64 INVALID_ITEM_ID = (uint64)-1;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Persistent item quality (rarity)
+//-----------------------------------------------------------------------------
+enum EItemQuality
+{
+ // If k_EItemQuality_Any is used in an item request a random quality will be chosen
+ k_EItemQuality_Any = -1,
+ k_EItemQuality_Normal = 0,
+ k_EItemQuality_Common = 1,
+ k_EItemQuality_Rare = 2,
+ k_EItemQuality_Unique = 3,
+
+ //Must be last
+ k_EItemQuality_Count = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result codes for SendNewItemReqeust
+//-----------------------------------------------------------------------------
+enum EItemRequestResult
+{
+ k_EItemRequestResultOK = 0, // Request succeeded
+ k_EItemRequestResultDenied = 1, // Request denied
+ k_EItemRequestResultServerError = 2, // Request failed due to a temporary server error
+ k_EItemRequestResultTimeout = 3, // Request timed out
+ k_EItemRequestResultInvalid = 4, // Request was corrupt
+ k_EItemRequestResultNoMatch = 5, // No item definition matched the request
+ k_EItemRequestResultUnknownError = 6, // Request failed with an unknown error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Valid operators for BAddNewItemCriteria
+//-----------------------------------------------------------------------------
+enum EItemCriteriaOperator
+{
+ k_EOperator_String_EQ = 0, // Field is string equal to value
+ k_EOperator_Not = 1, // Logical not
+ k_EOperator_String_Not_EQ = 1, // Field is not string equal to value
+ k_EOperator_Float_EQ = 2, // Field as a float is equal to value
+ k_EOperator_Float_Not_EQ = 3, // Field as a float is not equal to value
+ k_EOperator_Float_LT = 4, // Field as a float is less than value
+ k_EOperator_Float_Not_LT = 5, // Field as a float is not less than value
+ k_EOperator_Float_LTE = 6, // Field as a float is less than or equal value
+ k_EOperator_Float_Not_LTE = 7, // Field as a float is not less than or equal value
+ k_EOperator_Float_GT = 8, // Field as a float is greater than value
+ k_EOperator_Float_Not_GT = 9, // Field as a float is not greater than value
+ k_EOperator_Float_GTE = 10, // Field as a float is greater than or equal value
+ k_EOperator_Float_Not_GTE = 11, // Field as a float is not greater than or equal value
+ k_EOperator_Subkey_Contains = 12, // Field contains value as a subkey
+ k_EOperator_Subkey_Not_Contains = 13, // Field does not contain value as a subkey
+
+ // Must be last
+ k_EItemCriteriaOperator_Count = 14,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_unAccountID = 0;
+ m_EAccountType = k_EAccountTypeInvalid;
+ m_EUniverse = k_EUniverseInvalid;
+ m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( 1 != unAccountInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_unAccountID = unAccountID;
+ m_EUniverse = eUniverse;
+ m_EAccountType = eAccountType;
+ m_unAccountInstance = 1;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_unAccountID = unAccountID;
+ m_EUniverse = eUniverse;
+ m_EAccountType = eAccountType;
+ m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_unAccountID = ( ulIdentifier & 0xFFFFFFFF ); // account ID is low 32 bits
+ m_unAccountInstance = ( ( ulIdentifier >> 32 ) & 0xFFFFF ); // account instance is next 20 bits
+ m_EUniverse = eUniverse;
+ m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_unAccountID = ( ulSteamID & 0xFFFFFFFF ); // account ID is low 32 bits
+ m_unAccountInstance = ( ( ulSteamID >> 32 ) & 0xFFFFF ); // account instance is next 20 bits
+
+ m_EAccountType = ( EAccountType ) ( ( ulSteamID >> 52 ) & 0xF ); // type is next 4 bits
+ m_EUniverse = ( EUniverse ) ( ( ulSteamID >> 56 ) & 0xFF ); // universe is next 8 bits
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_EUniverse = eUniverse; // set the universe
+ m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_unAccountInstance = 1; // individual accounts always have an account instance ID of 1
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return (uint64) ( ( ( (uint64) m_EUniverse ) << 56 ) + ( ( (uint64) m_EAccountType ) << 52 ) +
+ ( ( (uint64) m_unAccountInstance ) << 32 ) + m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_EUniverse ) << 56 ) + ((uint64) m_EAccountType << 52 ) + m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_unAccountID = 0;
+ m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_EUniverse = eUniverse;
+ m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_unAccountID = 0;
+ m_EAccountType = k_EAccountTypeAnonUser;
+ m_EUniverse = eUniverse;
+ m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_unAccountID == 0 && BAnonAccount() && m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id?
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_EAccountType == k_EAccountTypeGameServer || m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_EAccountType == k_EAccountTypeChat;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_EAccountType == k_EAccountTypeIndividual;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_EAccountType == k_EAccountTypeAnonUser || m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_unAccountID = unAccountID; }
+ uint32 GetAccountID() const { return m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_EUniverse = eUniverse; }
+ bool IsValid() const { return ( m_EAccountType != k_EAccountTypeInvalid && m_EUniverse != k_EUniverseInvalid ); }
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ char * Render() const; // renders this steam ID to string
+ static char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ bool operator==( const CSteamID &val ) const
+ {
+ return ( ( val.m_unAccountID == m_unAccountID ) && ( val.m_unAccountInstance == m_unAccountInstance )
+ && ( val.m_EAccountType == m_EAccountType ) && ( val.m_EUniverse == m_EUniverse ) );
+ }
+
+ bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ bool operator<( const CSteamID &val ) const { return ConvertToUint64() < val.ConvertToUint64(); }
+ bool operator>( const CSteamID &val ) const { return ConvertToUint64() > val.ConvertToUint64(); }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+#ifdef _WIN32
+#pragma warning(push)
+#pragma warning(disable:4201) // nameless union is nonstandard
+ // 64 bits total
+ union
+ {
+ struct
+ {
+#endif
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID (used for multiseat type accounts only)
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#ifdef _WIN32
+ };
+
+ uint64 m_unAll64Bits;
+ };
+#pragma warning(pop) // no more anonymous unions until next time
+#endif
+};
+
+const int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const int k_unSteamAccountInstanceMask = 0x000FFFFF;
+
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+// generic invalid CSteamID
+const CSteamID k_steamIDNil;
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+const CSteamID k_steamIDOutofDateGS( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID comes from a user game connection to an sv_lan GS
+const CSteamID k_steamIDLanModeGS( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+const CSteamID k_steamIDNotInitYetGS( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+const CSteamID k_steamIDNonSteamGS( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ char *Render() const; // render this Game ID to string
+ static char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+ break;
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ case k_EGameIDTypeShortcut:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+// Max number of credit cards stored for one account
+const int k_nMaxNumCardsPerAccount = 1;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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.
+
+#endif // STEAMCLIENTPUBLIC_H
diff --git a/lsteamclient/steamworks_sdk_102/steamtypes.h b/lsteamclient/steamworks_sdk_102/steamtypes.h
new file mode 100644
index 00000000..68d5c23c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_102/steamtypes.h
@@ -0,0 +1,91 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+typedef uint64 GID_t; // globally unique identifier
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_103/isteamapps.h b/lsteamclient/steamworks_sdk_103/isteamapps.h
new file mode 100644
index 00000000..29399d83
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_103/isteamapps.h
@@ -0,0 +1,32 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION002"
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_103/isteamclient.h b/lsteamclient/steamworks_sdk_103/isteamclient.h
new file mode 100644
index 00000000..108bdf42
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_103/isteamclient.h
@@ -0,0 +1,154 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX ) && !defined( _CYGWIN )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMasterServerUpdater;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamContentServer interface
+ virtual ISteamContentServer *GetISteamContentServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMasterServerUpdater interface
+ virtual ISteamMasterServerUpdater *GetISteamMasterServerUpdater( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient007"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_103/isteamfriends.h b/lsteamclient/steamworks_sdk_103/isteamfriends.h
new file mode 100644
index 00000000..f8260079
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_103/isteamfriends.h
@@ -0,0 +1,247 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: avatar sizes, used in ISteamFriends::GetFriendAvatar()
+//-----------------------------------------------------------------------------
+enum EAvatarSize
+{
+ k_EAvatarSize32x32 = 0,
+ k_EAvatarSize64x64 = 1,
+};
+
+
+// friend game played information
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+
+
+// maximum number of characters in a users name
+enum { k_cchPersonaNameMax = 128 };
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // gets the avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetFriendAvatar( CSteamID steamIDFriend, int eAvatarSize ) = 0;
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( 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
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "LobbyInvite", "OfficialGameGroup"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends005"
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+};
+
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_103/isteamgameserver.h b/lsteamclient/steamworks_sdk_103/isteamgameserver.h
new file mode 100644
index 00000000..ab219473
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_103/isteamgameserver.h
@@ -0,0 +1,192 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+ // connection functions
+ virtual void LogOn() = 0;
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // You shouldn't need to call this as it is called internally by SteamGameServer_Init() and can only be called once.
+ //
+ // To update the data in this call which may change during the servers lifetime see UpdateServerStatus() below.
+ //
+ // Input: nGameAppID - The Steam assigned AppID for the game
+ // unServerFlags - Any applicable combination of flags (see k_unServerFlag____ constants below)
+ // unGameIP - The IP Address the server is listening for client connections on (might be INADDR_ANY)
+ // unGamePort - The port which the server is listening for client connections on
+ // unSpectatorPort - the port on which spectators can join to observe the server, 0 if spectating is not supported
+ // usQueryPort - The port which the ISteamMasterServerUpdater API should use in order to listen for matchmaking requests
+ // pchGameDir - A unique string identifier for your game
+ // pchVersion - The current version of the server as a string like 1.0.0.0
+ // bLanMode - Is this a LAN only server?
+ //
+ // bugbug jmccaskey - figure out how to remove this from the API and only expose via SteamGameServer_Init... or make this actually used,
+ // and stop calling it in SteamGameServer_Init()?
+ virtual bool BSetServerType( uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort,
+ uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0;
+
+ // Updates server status values which shows up in the server browser and matchmaking APIs
+ virtual void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers,
+ const char *pchServerName, const char *pSpectatorServerName,
+ const char *pchMapName ) = 0;
+
+ // This can be called if spectator goes away or comes back (passing 0 means there is no spectator server now).
+ virtual void UpdateSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ // Sets a string defining the "gametype" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ virtual void SetGameType( const char *pchGameType ) = 0;
+
+ // Ask if a user has a specific achievement for this game, will get a callback on reply
+ virtual bool BGetUserAchievementStatus( CSteamID steamID, const char *pchAchievementName ) = 0;
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer008"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_103/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_103/isteammasterserverupdater.h
new file mode 100644
index 00000000..9ea09a8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_103/isteammasterserverupdater.h
@@ -0,0 +1,103 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for retrieving list of game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMMASTERSERVERUPDATER_H
+#define ISTEAMMASTERSERVERUPDATER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game engines use this to tell the Steam master servers
+// about their games so their games can show up in the server browser.
+//-----------------------------------------------------------------------------
+class ISteamMasterServerUpdater
+{
+public:
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void SetActive( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+
+// These are in GameSocketShare mode, where instead of ISteamMasterServerUpdater creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+
+// Functions to set various fields that are used to respond to queries.
+
+ // Call this to set basic data that is passed to the server browser.
+ virtual void SetBasicServerData(
+ unsigned short nProtocolVersion,
+ bool bDedicatedServer,
+ const char *pRegionName,
+ const char *pProductName,
+ unsigned short nMaxReportedClients,
+ bool bPasswordProtected,
+ const char *pGameDescription ) = 0;
+
+ // Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ // Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+
+ // You can call this upon shutdown to clear out data stored for this game server and
+ // to tell the master servers that this server is going away.
+ virtual void NotifyShutdown() = 0;
+
+ // Returns true if the master server has requested a restart.
+ // Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+ // Force it to request a heartbeat from the master servers.
+ virtual void ForceHeartbeat() = 0;
+
+ // Manually edit and query the master server list.
+ // It will provide name resolution and use the default master server port if none is provided.
+ virtual bool AddMasterServer( const char *pServerAddress ) = 0;
+ virtual bool RemoveMasterServer( const char *pServerAddress ) = 0;
+
+ virtual int GetNumMasterServers() = 0;
+
+ // Returns the # of bytes written to pOut.
+ virtual int GetMasterServerAddress( int iServer, char *pOut, int outBufferSize ) = 0;
+};
+
+#define STEAMMASTERSERVERUPDATER_INTERFACE_VERSION "SteamMasterServerUpdater001"
+
+#endif // ISTEAMMASTERSERVERUPDATER_H
diff --git a/lsteamclient/steamworks_sdk_103/isteammatchmaking.h b/lsteamclient/steamworks_sdk_103/isteammatchmaking.h
new file mode 100644
index 00000000..839e12f4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_103/isteammatchmaking.h
@@ -0,0 +1,584 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+//-----------------------------------------------------------------------------
+enum ELobbyType
+{
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+};
+
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListFilter( const char *pchKeyToMatch, const char *pchValueToMatch ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, int nComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this pointer
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // As above, but gets per-user data for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // restart are returned by a LobbyDataUpdate_t callback
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking006"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ virtual void RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( EMatchMakingType eType, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ virtual void CancelQuery( EMatchMakingType eType ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ virtual void RefreshQuery( EMatchMakingType eType ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( EMatchMakingType eType ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( EMatchMakingType eType ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( EMatchMakingType eType, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamMasterServerUpdater->SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers001"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>"
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the lobby is being forcefully closed
+// lobby details functions will no longer be updated
+//-----------------------------------------------------------------------------
+struct LobbyClosing_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 11 };
+ uint64 m_ulSteamIDLobby; // Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the local user has been kicked from the lobby
+// lobby details functions will no longer be updated
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_103/isteamnetworking.h b/lsteamclient/steamworks_sdk_103/isteamnetworking.h
new file mode 100644
index 00000000..ce9cf159
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_103/isteamnetworking.h
@@ -0,0 +1,147 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a socket
+typedef uint32 SNetSocket_t;
+typedef uint32 SNetListenSocket_t;
+
+
+// connection progress indicators
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking002"
+
+
+// callback notification - status of a socket has changed
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_103/isteamremotestorage.h b/lsteamclient/steamworks_sdk_103/isteamremotestorage.h
new file mode 100644
index 00000000..8287228b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_103/isteamremotestorage.h
@@ -0,0 +1,45 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileExists( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // quota management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION002"
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_103/isteamuser.h b/lsteamclient/steamworks_sdk_103/isteamuser.h
new file mode 100644
index 00000000..f181f0cf
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_103/isteamuser.h
@@ -0,0 +1,172 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetCompressedVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetCompressedVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Gets the latest voice data. It should be called as often as possible once recording has started.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ virtual EVoiceResult GetCompressedVoice( void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten ) = 0;
+
+ // Decompresses a chunk of data produced by GetCompressedVoice(). nBytesWritten is set to the
+ // number of bytes written to pDestBuffer. The output format of the data is 16-bit signed at
+ // 11025 samples per second.
+ virtual EVoiceResult DecompressVoice( void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten ) = 0;
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser011"
+
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_103/isteamuserstats.h b/lsteamclient/steamworks_sdk_103/isteamuserstats.h
new file mode 100644
index 00000000..294801e5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_103/isteamuserstats.h
@@ -0,0 +1,111 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// size limit on stat or achievement name
+const uint32 k_cchStatNameMax = 128;
+
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+ // Get general attributes (display name / text, etc) for an Achievement
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION004"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_103/isteamutils.h b/lsteamclient/steamworks_sdk_103/isteamutils.h
new file mode 100644
index 00000000..331f792b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_103/isteamutils.h
@@ -0,0 +1,114 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils002"
+
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_103/matchmakingtypes.h b/lsteamclient/steamworks_sdk_103/matchmakingtypes.h
new file mode 100644
index 00000000..881632c8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_103/matchmakingtypes.h
@@ -0,0 +1,241 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+enum EMatchMakingType
+{
+ eInternetServer = 0,
+ eLANServer,
+ eFriendsServer,
+ eFavoritesServer,
+ eHistoryServer,
+ eSpectatorServer,
+ eInvalidServer
+};
+
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ void Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort );
+ netadr_t& GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline void servernetadr_t::Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort )
+{
+ Init( ipAndQueryPort.GetIP(), ipAndQueryPort.GetPort(), usConnectionPort );
+}
+
+inline netadr_t& servernetadr_t::GetIPAndQueryPort()
+{
+ static netadr_t netAdr;
+ netAdr.SetIP( m_unIP );
+ netAdr.SetPort( m_usQueryPort );
+ return netAdr;
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; // IP/Query Port/Connection Port for this server
+ int m_nPing; // current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; // server has responded successfully in the past
+ bool m_bDoNotRefresh; // server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[32]; // current game directory
+ char m_szMap[32]; // current map
+ char m_szGameDescription[64]; // game description
+ int m_nAppID; // Steam App ID of this server
+ int m_nPlayers; // current number of players on the server
+ int m_nMaxPlayers; // Maximum players that can join this server
+ int m_nBotPlayers; // Number of bots (i.e simulated players) on this server
+ bool m_bPassword; // true if this server needs a password to join
+ bool m_bSecure; // Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; // time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; // server version as reported to Steam
+
+private:
+ char m_szServerName[64]; // Game server name
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ char m_szGameTags[128]; // the tags this server exposes
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_103/steam_api.h b/lsteamclient/steamworks_sdk_103/steam_api.h
new file mode 100644
index 00000000..274f49de
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_103/steam_api.h
@@ -0,0 +1,414 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+S_API bool SteamAPI_Init();
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = 0;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive()
+ {
+ return ( m_hAPICall != 0 );
+ }
+
+ void Cancel()
+ {
+ m_hAPICall = 0;
+ }
+
+ ~CCallResult()
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ m_hAPICall = 0;
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ m_hAPICall = 0;
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ SteamAPI_UnregisterCallback( this );
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_103/steam_gameserver.h b/lsteamclient/steamworks_sdk_103/steam_gameserver.h
new file mode 100644
index 00000000..268194fc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_103/steam_gameserver.h
@@ -0,0 +1,134 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteammasterserverupdater.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Note: if you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it will use "GameSocketShare" mode,
+// which means that the game is responsible for sending and receiving UDP packets for the master
+// server updater. See references to GameSocketShare in isteammasterserverupdater.h.
+//
+// Pass 0 for usGamePort or usSpectatorPort if you're not using that. Then, the master server updater will report
+// what's running based on that.
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamMasterServerUpdater *SteamMasterServerUpdater();
+S_API ISteamNetworking *SteamGameServerNetworking();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamMasterServerUpdater *SteamMasterServerUpdater() { return m_pSteamMasterServerUpdater; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamMasterServerUpdater *m_pSteamMasterServerUpdater;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamMasterServerUpdater = NULL;
+ m_pSteamGameServerNetworking = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamMasterServerUpdater = g_pSteamClientGameServer->GetISteamMasterServerUpdater( hSteamUser, hSteamPipe, STEAMMASTERSERVERUPDATER_INTERFACE_VERSION );
+ if ( !m_pSteamMasterServerUpdater )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_103/steamclientpublic.h b/lsteamclient/steamworks_sdk_103/steamclientpublic.h
new file mode 100644
index 00000000..11cd5a74
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_103/steamclientpublic.h
@@ -0,0 +1,802 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeP2PSuperSeeder = 9, // a fake steamid used by superpeers to seed content to users of Steam P2P stuff
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const int k_unSteamAccountInstanceMask = 0x000FFFFF;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( 1 != unAccountInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ m_steamid.m_comp.m_unAccountInstance = 1;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & 0xFFFFFFFF ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & 0xFFFFF ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = 1; // individual accounts always have an account instance ID of 1
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id?
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ uint32 GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const { return ( m_steamid.m_comp.m_EAccountType != k_EAccountTypeInvalid && m_steamid.m_comp.m_EUniverse != k_EUniverseInvalid ); }
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID (used for multiseat type accounts only)
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+// generic invalid CSteamID
+const CSteamID k_steamIDNil;
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+const CSteamID k_steamIDOutofDateGS( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID comes from a user game connection to an sv_lan GS
+const CSteamID k_steamIDLanModeGS( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+const CSteamID k_steamIDNotInitYetGS( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+const CSteamID k_steamIDNonSteamGS( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+ break;
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ case k_EGameIDTypeShortcut:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+// Max number of credit cards stored for one account
+const int k_nMaxNumCardsPerAccount = 1;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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.
+
+#endif // STEAMCLIENTPUBLIC_H
diff --git a/lsteamclient/steamworks_sdk_103/steamtypes.h b/lsteamclient/steamworks_sdk_103/steamtypes.h
new file mode 100644
index 00000000..fc8eefdf
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_103/steamtypes.h
@@ -0,0 +1,97 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+typedef uint64 GID_t; // globally unique identifier
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_104/isteamapps.h b/lsteamclient/steamworks_sdk_104/isteamapps.h
new file mode 100644
index 00000000..9abb5888
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_104/isteamapps.h
@@ -0,0 +1,45 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION003"
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_104/isteamclient.h b/lsteamclient/steamworks_sdk_104/isteamclient.h
new file mode 100644
index 00000000..71408004
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_104/isteamclient.h
@@ -0,0 +1,151 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX ) && !defined( _CYGWIN )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMasterServerUpdater;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMasterServerUpdater interface
+ virtual ISteamMasterServerUpdater *GetISteamMasterServerUpdater( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient008"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_104/isteamfriends.h b/lsteamclient/steamworks_sdk_104/isteamfriends.h
new file mode 100644
index 00000000..de255cc0
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_104/isteamfriends.h
@@ -0,0 +1,250 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: avatar sizes, used in ISteamFriends::GetFriendAvatar()
+//-----------------------------------------------------------------------------
+enum EAvatarSize
+{
+ k_EAvatarSize32x32 = 0,
+ k_EAvatarSize64x64 = 1,
+};
+
+
+// friend game played information
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+
+
+// maximum number of characters in a users name
+enum { k_cchPersonaNameMax = 128 };
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // gets the avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetFriendAvatar( CSteamID steamIDFriend, int eAvatarSize ) = 0;
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( 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
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "LobbyInvite", "OfficialGameGroup"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends005"
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+};
+
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_104/isteamgameserver.h b/lsteamclient/steamworks_sdk_104/isteamgameserver.h
new file mode 100644
index 00000000..7c7f58ab
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_104/isteamgameserver.h
@@ -0,0 +1,193 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+ // connection functions
+ virtual void LogOn() = 0;
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // You shouldn't need to call this as it is called internally by SteamGameServer_Init() and can only be called once.
+ //
+ // To update the data in this call which may change during the servers lifetime see UpdateServerStatus() below.
+ //
+ // Input: nGameAppID - The Steam assigned AppID for the game
+ // unServerFlags - Any applicable combination of flags (see k_unServerFlag____ constants below)
+ // unGameIP - The IP Address the server is listening for client connections on (might be INADDR_ANY)
+ // unGamePort - The port which the server is listening for client connections on
+ // unSpectatorPort - the port on which spectators can join to observe the server, 0 if spectating is not supported
+ // usQueryPort - The port which the ISteamMasterServerUpdater API should use in order to listen for matchmaking requests
+ // pchGameDir - A unique string identifier for your game
+ // pchVersion - The current version of the server as a string like 1.0.0.0
+ // bLanMode - Is this a LAN only server?
+ //
+ // bugbug jmccaskey - figure out how to remove this from the API and only expose via SteamGameServer_Init... or make this actually used,
+ // and stop calling it in SteamGameServer_Init()?
+ virtual bool BSetServerType( uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort,
+ uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0;
+
+ // Updates server status values which shows up in the server browser and matchmaking APIs
+ virtual void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers,
+ const char *pchServerName, const char *pSpectatorServerName,
+ const char *pchMapName ) = 0;
+
+ // This can be called if spectator goes away or comes back (passing 0 means there is no spectator server now).
+ virtual void UpdateSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ // Sets a string defining the "gametype" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ virtual void SetGameType( const char *pchGameType ) = 0;
+
+ // Ask if a user has a specific achievement for this game, will get a callback on reply
+ virtual bool BGetUserAchievementStatus( CSteamID steamID, const char *pchAchievementName ) = 0;
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer008"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_104/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_104/isteammasterserverupdater.h
new file mode 100644
index 00000000..9ea09a8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_104/isteammasterserverupdater.h
@@ -0,0 +1,103 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for retrieving list of game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMMASTERSERVERUPDATER_H
+#define ISTEAMMASTERSERVERUPDATER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game engines use this to tell the Steam master servers
+// about their games so their games can show up in the server browser.
+//-----------------------------------------------------------------------------
+class ISteamMasterServerUpdater
+{
+public:
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void SetActive( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+
+// These are in GameSocketShare mode, where instead of ISteamMasterServerUpdater creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+
+// Functions to set various fields that are used to respond to queries.
+
+ // Call this to set basic data that is passed to the server browser.
+ virtual void SetBasicServerData(
+ unsigned short nProtocolVersion,
+ bool bDedicatedServer,
+ const char *pRegionName,
+ const char *pProductName,
+ unsigned short nMaxReportedClients,
+ bool bPasswordProtected,
+ const char *pGameDescription ) = 0;
+
+ // Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ // Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+
+ // You can call this upon shutdown to clear out data stored for this game server and
+ // to tell the master servers that this server is going away.
+ virtual void NotifyShutdown() = 0;
+
+ // Returns true if the master server has requested a restart.
+ // Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+ // Force it to request a heartbeat from the master servers.
+ virtual void ForceHeartbeat() = 0;
+
+ // Manually edit and query the master server list.
+ // It will provide name resolution and use the default master server port if none is provided.
+ virtual bool AddMasterServer( const char *pServerAddress ) = 0;
+ virtual bool RemoveMasterServer( const char *pServerAddress ) = 0;
+
+ virtual int GetNumMasterServers() = 0;
+
+ // Returns the # of bytes written to pOut.
+ virtual int GetMasterServerAddress( int iServer, char *pOut, int outBufferSize ) = 0;
+};
+
+#define STEAMMASTERSERVERUPDATER_INTERFACE_VERSION "SteamMasterServerUpdater001"
+
+#endif // ISTEAMMASTERSERVERUPDATER_H
diff --git a/lsteamclient/steamworks_sdk_104/isteammatchmaking.h b/lsteamclient/steamworks_sdk_104/isteammatchmaking.h
new file mode 100644
index 00000000..839e12f4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_104/isteammatchmaking.h
@@ -0,0 +1,584 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+//-----------------------------------------------------------------------------
+enum ELobbyType
+{
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+};
+
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListFilter( const char *pchKeyToMatch, const char *pchValueToMatch ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, int nComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this pointer
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // As above, but gets per-user data for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // restart are returned by a LobbyDataUpdate_t callback
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking006"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ virtual void RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( EMatchMakingType eType, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ virtual void CancelQuery( EMatchMakingType eType ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ virtual void RefreshQuery( EMatchMakingType eType ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( EMatchMakingType eType ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( EMatchMakingType eType ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( EMatchMakingType eType, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamMasterServerUpdater->SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers001"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>"
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the lobby is being forcefully closed
+// lobby details functions will no longer be updated
+//-----------------------------------------------------------------------------
+struct LobbyClosing_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 11 };
+ uint64 m_ulSteamIDLobby; // Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the local user has been kicked from the lobby
+// lobby details functions will no longer be updated
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_104/isteamnetworking.h b/lsteamclient/steamworks_sdk_104/isteamnetworking.h
new file mode 100644
index 00000000..ce9cf159
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_104/isteamnetworking.h
@@ -0,0 +1,147 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a socket
+typedef uint32 SNetSocket_t;
+typedef uint32 SNetListenSocket_t;
+
+
+// connection progress indicators
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking002"
+
+
+// callback notification - status of a socket has changed
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_104/isteamremotestorage.h b/lsteamclient/steamworks_sdk_104/isteamremotestorage.h
new file mode 100644
index 00000000..8287228b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_104/isteamremotestorage.h
@@ -0,0 +1,45 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileExists( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // quota management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION002"
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_104/isteamuser.h b/lsteamclient/steamworks_sdk_104/isteamuser.h
new file mode 100644
index 00000000..e90b72d9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_104/isteamuser.h
@@ -0,0 +1,199 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetCompressedVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetCompressedVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Gets the latest voice data. It should be called as often as possible once recording has started.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ virtual EVoiceResult GetCompressedVoice( void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten ) = 0;
+
+ // Decompresses a chunk of data produced by GetCompressedVoice(). nBytesWritten is set to the
+ // number of bytes written to pDestBuffer. The output format of the data is 16-bit signed at
+ // 11025 samples per second.
+ virtual EVoiceResult DecompressVoice( void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten ) = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser012"
+
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_104/isteamuserstats.h b/lsteamclient/steamworks_sdk_104/isteamuserstats.h
new file mode 100644
index 00000000..8dc19b13
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_104/isteamuserstats.h
@@ -0,0 +1,260 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+ // Get general attributes (display name / text, etc) for an Achievement
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // If the score passed in is no better than the existing score this user has in the leaderboard, then the leaderboard will not be updated.
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, int32 nScore, int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION005"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_104/isteamutils.h b/lsteamclient/steamworks_sdk_104/isteamutils.h
new file mode 100644
index 00000000..2b8623c7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_104/isteamutils.h
@@ -0,0 +1,146 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+// function prototype for warning message hook
+#if defined( POSIX ) && !defined( _CYGWIN )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils004"
+
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+struct SteamShutdown_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 4 };
+};
+
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_104/matchmakingtypes.h b/lsteamclient/steamworks_sdk_104/matchmakingtypes.h
new file mode 100644
index 00000000..881632c8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_104/matchmakingtypes.h
@@ -0,0 +1,241 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+enum EMatchMakingType
+{
+ eInternetServer = 0,
+ eLANServer,
+ eFriendsServer,
+ eFavoritesServer,
+ eHistoryServer,
+ eSpectatorServer,
+ eInvalidServer
+};
+
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ void Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort );
+ netadr_t& GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline void servernetadr_t::Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort )
+{
+ Init( ipAndQueryPort.GetIP(), ipAndQueryPort.GetPort(), usConnectionPort );
+}
+
+inline netadr_t& servernetadr_t::GetIPAndQueryPort()
+{
+ static netadr_t netAdr;
+ netAdr.SetIP( m_unIP );
+ netAdr.SetPort( m_usQueryPort );
+ return netAdr;
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; // IP/Query Port/Connection Port for this server
+ int m_nPing; // current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; // server has responded successfully in the past
+ bool m_bDoNotRefresh; // server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[32]; // current game directory
+ char m_szMap[32]; // current map
+ char m_szGameDescription[64]; // game description
+ int m_nAppID; // Steam App ID of this server
+ int m_nPlayers; // current number of players on the server
+ int m_nMaxPlayers; // Maximum players that can join this server
+ int m_nBotPlayers; // Number of bots (i.e simulated players) on this server
+ bool m_bPassword; // true if this server needs a password to join
+ bool m_bSecure; // Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; // time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; // server version as reported to Steam
+
+private:
+ char m_szServerName[64]; // Game server name
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ char m_szGameTags[128]; // the tags this server exposes
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_104/steam_api.h b/lsteamclient/steamworks_sdk_104/steam_api.h
new file mode 100644
index 00000000..c1300b9b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_104/steam_api.h
@@ -0,0 +1,421 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+S_API bool SteamAPI_Init();
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = 0;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive()
+ {
+ return ( m_hAPICall != 0 );
+ }
+
+ void Cancel()
+ {
+ m_hAPICall = 0;
+ }
+
+ ~CCallResult()
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = 0;
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = 0;
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ SteamAPI_UnregisterCallback( this );
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_104/steam_gameserver.h b/lsteamclient/steamworks_sdk_104/steam_gameserver.h
new file mode 100644
index 00000000..268194fc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_104/steam_gameserver.h
@@ -0,0 +1,134 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteammasterserverupdater.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Note: if you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it will use "GameSocketShare" mode,
+// which means that the game is responsible for sending and receiving UDP packets for the master
+// server updater. See references to GameSocketShare in isteammasterserverupdater.h.
+//
+// Pass 0 for usGamePort or usSpectatorPort if you're not using that. Then, the master server updater will report
+// what's running based on that.
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamMasterServerUpdater *SteamMasterServerUpdater();
+S_API ISteamNetworking *SteamGameServerNetworking();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamMasterServerUpdater *SteamMasterServerUpdater() { return m_pSteamMasterServerUpdater; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamMasterServerUpdater *m_pSteamMasterServerUpdater;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamMasterServerUpdater = NULL;
+ m_pSteamGameServerNetworking = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamMasterServerUpdater = g_pSteamClientGameServer->GetISteamMasterServerUpdater( hSteamUser, hSteamPipe, STEAMMASTERSERVERUPDATER_INTERFACE_VERSION );
+ if ( !m_pSteamMasterServerUpdater )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_104/steamclientpublic.h b/lsteamclient/steamworks_sdk_104/steamclientpublic.h
new file mode 100644
index 00000000..8626e96b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_104/steamclientpublic.h
@@ -0,0 +1,856 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeP2PSuperSeeder = 9, // a fake steamid used by superpeers to seed content to users of Steam P2P stuff
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const int k_unSteamAccountInstanceMask = 0x000FFFFF;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( 1 != unAccountInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ m_steamid.m_comp.m_unAccountInstance = 1;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & 0xFFFFFFFF ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & 0xFFFFF ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = 1; // individual accounts always have an account instance ID of 1
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id?
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ uint32 GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID (used for multiseat type accounts only)
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 1 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+ return true;
+}
+
+
+// generic invalid CSteamID
+const CSteamID k_steamIDNil;
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+const CSteamID k_steamIDOutofDateGS( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID comes from a user game connection to an sv_lan GS
+const CSteamID k_steamIDLanModeGS( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+const CSteamID k_steamIDNotInitYetGS( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+const CSteamID k_steamIDNonSteamGS( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+ break;
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+ break;
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+// Max number of credit cards stored for one account
+const int k_nMaxNumCardsPerAccount = 1;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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.
+
+#endif // STEAMCLIENTPUBLIC_H
diff --git a/lsteamclient/steamworks_sdk_104/steamtypes.h b/lsteamclient/steamworks_sdk_104/steamtypes.h
new file mode 100644
index 00000000..fc8eefdf
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_104/steamtypes.h
@@ -0,0 +1,97 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+typedef uint64 GID_t; // globally unique identifier
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_105/isteamapps.h b/lsteamclient/steamworks_sdk_105/isteamapps.h
new file mode 100644
index 00000000..9abb5888
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_105/isteamapps.h
@@ -0,0 +1,45 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION003"
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_105/isteamclient.h b/lsteamclient/steamworks_sdk_105/isteamclient.h
new file mode 100644
index 00000000..71408004
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_105/isteamclient.h
@@ -0,0 +1,151 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX ) && !defined( _CYGWIN )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMasterServerUpdater;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMasterServerUpdater interface
+ virtual ISteamMasterServerUpdater *GetISteamMasterServerUpdater( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient008"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_105/isteamfriends.h b/lsteamclient/steamworks_sdk_105/isteamfriends.h
new file mode 100644
index 00000000..9a16d20f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_105/isteamfriends.h
@@ -0,0 +1,251 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: avatar sizes, used in ISteamFriends::GetFriendAvatar()
+//-----------------------------------------------------------------------------
+enum EAvatarSize
+{
+ k_EAvatarSize32x32 = 0,
+ k_EAvatarSize64x64 = 1,
+};
+
+
+// friend game played information
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+
+
+// maximum number of characters in a users name
+enum { k_cchPersonaNameMax = 128 };
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // gets the avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetFriendAvatar( CSteamID steamIDFriend, int eAvatarSize ) = 0;
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( 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
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "LobbyInvite", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends005"
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+};
+
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_105/isteamgameserver.h b/lsteamclient/steamworks_sdk_105/isteamgameserver.h
new file mode 100644
index 00000000..961f2e20
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_105/isteamgameserver.h
@@ -0,0 +1,202 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+ // connection functions
+ virtual void LogOn() = 0;
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // You shouldn't need to call this as it is called internally by SteamGameServer_Init() and can only be called once.
+ //
+ // To update the data in this call which may change during the servers lifetime see UpdateServerStatus() below.
+ //
+ // Input: nGameAppID - The Steam assigned AppID for the game
+ // unServerFlags - Any applicable combination of flags (see k_unServerFlag____ constants below)
+ // unGameIP - The IP Address the server is listening for client connections on (might be INADDR_ANY)
+ // unGamePort - The port which the server is listening for client connections on
+ // unSpectatorPort - the port on which spectators can join to observe the server, 0 if spectating is not supported
+ // usQueryPort - The port which the ISteamMasterServerUpdater API should use in order to listen for matchmaking requests
+ // pchGameDir - A unique string identifier for your game
+ // pchVersion - The current version of the server as a string like 1.0.0.0
+ // bLanMode - Is this a LAN only server?
+ //
+ // bugbug jmccaskey - figure out how to remove this from the API and only expose via SteamGameServer_Init... or make this actually used,
+ // and stop calling it in SteamGameServer_Init()?
+ virtual bool BSetServerType( uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort,
+ uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0;
+
+ // Updates server status values which shows up in the server browser and matchmaking APIs
+ virtual void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers,
+ const char *pchServerName, const char *pSpectatorServerName,
+ const char *pchMapName ) = 0;
+
+ // This can be called if spectator goes away or comes back (passing 0 means there is no spectator server now).
+ virtual void UpdateSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ // Sets a string defining the "gametype" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ virtual void SetGameType( const char *pchGameType ) = 0;
+
+ // Ask if a user has a specific achievement for this game, will get a callback on reply
+ virtual bool BGetUserAchievementStatus( CSteamID steamID, const char *pchAchievementName ) = 0;
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+ // Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ // don't set this unless it actually changes, its only uploaded to the master once (when
+ // acknowledged)
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer009"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_105/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_105/isteammasterserverupdater.h
new file mode 100644
index 00000000..9ea09a8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_105/isteammasterserverupdater.h
@@ -0,0 +1,103 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for retrieving list of game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMMASTERSERVERUPDATER_H
+#define ISTEAMMASTERSERVERUPDATER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game engines use this to tell the Steam master servers
+// about their games so their games can show up in the server browser.
+//-----------------------------------------------------------------------------
+class ISteamMasterServerUpdater
+{
+public:
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void SetActive( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+
+// These are in GameSocketShare mode, where instead of ISteamMasterServerUpdater creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+
+// Functions to set various fields that are used to respond to queries.
+
+ // Call this to set basic data that is passed to the server browser.
+ virtual void SetBasicServerData(
+ unsigned short nProtocolVersion,
+ bool bDedicatedServer,
+ const char *pRegionName,
+ const char *pProductName,
+ unsigned short nMaxReportedClients,
+ bool bPasswordProtected,
+ const char *pGameDescription ) = 0;
+
+ // Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ // Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+
+ // You can call this upon shutdown to clear out data stored for this game server and
+ // to tell the master servers that this server is going away.
+ virtual void NotifyShutdown() = 0;
+
+ // Returns true if the master server has requested a restart.
+ // Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+ // Force it to request a heartbeat from the master servers.
+ virtual void ForceHeartbeat() = 0;
+
+ // Manually edit and query the master server list.
+ // It will provide name resolution and use the default master server port if none is provided.
+ virtual bool AddMasterServer( const char *pServerAddress ) = 0;
+ virtual bool RemoveMasterServer( const char *pServerAddress ) = 0;
+
+ virtual int GetNumMasterServers() = 0;
+
+ // Returns the # of bytes written to pOut.
+ virtual int GetMasterServerAddress( int iServer, char *pOut, int outBufferSize ) = 0;
+};
+
+#define STEAMMASTERSERVERUPDATER_INTERFACE_VERSION "SteamMasterServerUpdater001"
+
+#endif // ISTEAMMASTERSERVERUPDATER_H
diff --git a/lsteamclient/steamworks_sdk_105/isteammatchmaking.h b/lsteamclient/steamworks_sdk_105/isteammatchmaking.h
new file mode 100644
index 00000000..8152856c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_105/isteammatchmaking.h
@@ -0,0 +1,589 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this pointer
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // restart are returned by a LobbyDataUpdate_t callback
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking007"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ virtual void RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual void RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( EMatchMakingType eType, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ virtual void CancelQuery( EMatchMakingType eType ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ virtual void RefreshQuery( EMatchMakingType eType ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( EMatchMakingType eType ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( EMatchMakingType eType ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( EMatchMakingType eType, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamMasterServerUpdater->SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers001"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_105/isteamnetworking.h b/lsteamclient/steamworks_sdk_105/isteamnetworking.h
new file mode 100644
index 00000000..bd9b0c69
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_105/isteamnetworking.h
@@ -0,0 +1,271 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking003"
+
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_105/isteamremotestorage.h b/lsteamclient/steamworks_sdk_105/isteamremotestorage.h
new file mode 100644
index 00000000..8287228b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_105/isteamremotestorage.h
@@ -0,0 +1,45 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileExists( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // quota management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION002"
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_105/isteamuser.h b/lsteamclient/steamworks_sdk_105/isteamuser.h
new file mode 100644
index 00000000..57c1efc8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_105/isteamuser.h
@@ -0,0 +1,203 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetCompressedVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetCompressedVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Gets the latest voice data. It should be called as often as possible once recording has started.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ virtual EVoiceResult GetCompressedVoice( void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten ) = 0;
+
+ // Decompresses a chunk of data produced by GetCompressedVoice(). nBytesWritten is set to the
+ // number of bytes written to pDestBuffer. The output format of the data is 16-bit signed at
+ // 11025 samples per second.
+ virtual EVoiceResult DecompressVoice( void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten ) = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser012"
+
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_105/isteamuserstats.h b/lsteamclient/steamworks_sdk_105/isteamuserstats.h
new file mode 100644
index 00000000..9864875d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_105/isteamuserstats.h
@@ -0,0 +1,277 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+ // Get general attributes (display name / text, etc) for an Achievement
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION006"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_105/isteamutils.h b/lsteamclient/steamworks_sdk_105/isteamutils.h
new file mode 100644
index 00000000..2b8623c7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_105/isteamutils.h
@@ -0,0 +1,146 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+// function prototype for warning message hook
+#if defined( POSIX ) && !defined( _CYGWIN )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils004"
+
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+struct SteamShutdown_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 4 };
+};
+
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_105/matchmakingtypes.h b/lsteamclient/steamworks_sdk_105/matchmakingtypes.h
new file mode 100644
index 00000000..9675e3d0
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_105/matchmakingtypes.h
@@ -0,0 +1,242 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+enum EMatchMakingType
+{
+ eInternetServer = 0,
+ eLANServer,
+ eFriendsServer,
+ eFavoritesServer,
+ eHistoryServer,
+ eSpectatorServer,
+ eInvalidServer
+};
+
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ void Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort );
+ netadr_t& GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline void servernetadr_t::Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort )
+{
+ Init( ipAndQueryPort.GetIP(), ipAndQueryPort.GetPort(), usConnectionPort );
+}
+
+inline netadr_t& servernetadr_t::GetIPAndQueryPort()
+{
+ static netadr_t netAdr;
+ netAdr.SetIP( m_unIP );
+ netAdr.SetPort( m_usQueryPort );
+ return netAdr;
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; // IP/Query Port/Connection Port for this server
+ int m_nPing; // current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; // server has responded successfully in the past
+ bool m_bDoNotRefresh; // server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[32]; // current game directory
+ char m_szMap[32]; // current map
+ char m_szGameDescription[64]; // game description
+ int m_nAppID; // Steam App ID of this server
+ int m_nPlayers; // current number of players on the server
+ int m_nMaxPlayers; // Maximum players that can join this server
+ int m_nBotPlayers; // Number of bots (i.e simulated players) on this server
+ bool m_bPassword; // true if this server needs a password to join
+ bool m_bSecure; // Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; // time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; // server version as reported to Steam
+
+private:
+ char m_szServerName[64]; // Game server name
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ char m_szGameTags[128]; // the tags this server exposes
+ CSteamID m_steamID; // steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_105/steam_api.h b/lsteamclient/steamworks_sdk_105/steam_api.h
new file mode 100644
index 00000000..403fe5b7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_105/steam_api.h
@@ -0,0 +1,431 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+S_API bool SteamAPI_Init();
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = 0;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive()
+ {
+ return ( m_hAPICall != 0 );
+ }
+
+ void Cancel()
+ {
+ m_hAPICall = 0;
+ }
+
+ ~CCallResult()
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = 0;
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = 0;
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ SteamAPI_UnregisterCallback( this );
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_105/steam_gameserver.h b/lsteamclient/steamworks_sdk_105/steam_gameserver.h
new file mode 100644
index 00000000..268194fc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_105/steam_gameserver.h
@@ -0,0 +1,134 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteammasterserverupdater.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Note: if you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it will use "GameSocketShare" mode,
+// which means that the game is responsible for sending and receiving UDP packets for the master
+// server updater. See references to GameSocketShare in isteammasterserverupdater.h.
+//
+// Pass 0 for usGamePort or usSpectatorPort if you're not using that. Then, the master server updater will report
+// what's running based on that.
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamMasterServerUpdater *SteamMasterServerUpdater();
+S_API ISteamNetworking *SteamGameServerNetworking();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamMasterServerUpdater *SteamMasterServerUpdater() { return m_pSteamMasterServerUpdater; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamMasterServerUpdater *m_pSteamMasterServerUpdater;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamMasterServerUpdater = NULL;
+ m_pSteamGameServerNetworking = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamMasterServerUpdater = g_pSteamClientGameServer->GetISteamMasterServerUpdater( hSteamUser, hSteamPipe, STEAMMASTERSERVERUPDATER_INTERFACE_VERSION );
+ if ( !m_pSteamMasterServerUpdater )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_105/steamclientpublic.h b/lsteamclient/steamworks_sdk_105/steamclientpublic.h
new file mode 100644
index 00000000..fd2f2809
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_105/steamclientpublic.h
@@ -0,0 +1,883 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeP2PSuperSeeder = 9, // a fake steamid used by superpeers to seed content to users of Steam P2P stuff
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionCompleteDisabled = 1,
+ k_EStatusDepotVersionCompleteEnabledBeta = 2,
+ k_EStatusDepotVersionCompleteEnabledPublic = 3,
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const int k_unSteamAccountInstanceMask = 0x000FFFFF;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( 1 != unAccountInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ m_steamid.m_comp.m_unAccountInstance = 1;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & 0xFFFFFFFF ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & 0xFFFFF ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = 1; // individual accounts always have an account instance ID of 1
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id?
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ uint32 GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID (used for multiseat type accounts only)
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 1 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+ return true;
+}
+
+
+// generic invalid CSteamID
+const CSteamID k_steamIDNil;
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+const CSteamID k_steamIDOutofDateGS( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID comes from a user game connection to an sv_lan GS
+const CSteamID k_steamIDLanModeGS( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+const CSteamID k_steamIDNotInitYetGS( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+const CSteamID k_steamIDNonSteamGS( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+ break;
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+ break;
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+// Max number of credit cards stored for one account
+const int k_nMaxNumCardsPerAccount = 1;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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.
+
+#endif // STEAMCLIENTPUBLIC_H
diff --git a/lsteamclient/steamworks_sdk_105/steamtypes.h b/lsteamclient/steamworks_sdk_105/steamtypes.h
new file mode 100644
index 00000000..1a67e3f6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_105/steamtypes.h
@@ -0,0 +1,105 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+typedef uint64 GID_t; // globally unique identifier
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_106/isteamapps.h b/lsteamclient/steamworks_sdk_106/isteamapps.h
new file mode 100644
index 00000000..9abb5888
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_106/isteamapps.h
@@ -0,0 +1,45 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION003"
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_106/isteamclient.h b/lsteamclient/steamworks_sdk_106/isteamclient.h
new file mode 100644
index 00000000..098b45c7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_106/isteamclient.h
@@ -0,0 +1,152 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX ) && !defined( _CYGWIN )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMasterServerUpdater;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMasterServerUpdater interface
+ virtual ISteamMasterServerUpdater *GetISteamMasterServerUpdater( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient008"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_106/isteamfriends.h b/lsteamclient/steamworks_sdk_106/isteamfriends.h
new file mode 100644
index 00000000..9a16d20f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_106/isteamfriends.h
@@ -0,0 +1,251 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: avatar sizes, used in ISteamFriends::GetFriendAvatar()
+//-----------------------------------------------------------------------------
+enum EAvatarSize
+{
+ k_EAvatarSize32x32 = 0,
+ k_EAvatarSize64x64 = 1,
+};
+
+
+// friend game played information
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+
+
+// maximum number of characters in a users name
+enum { k_cchPersonaNameMax = 128 };
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // gets the avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetFriendAvatar( CSteamID steamIDFriend, int eAvatarSize ) = 0;
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( 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
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "LobbyInvite", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends005"
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+};
+
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_106/isteamgameserver.h b/lsteamclient/steamworks_sdk_106/isteamgameserver.h
new file mode 100644
index 00000000..961f2e20
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_106/isteamgameserver.h
@@ -0,0 +1,202 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+ // connection functions
+ virtual void LogOn() = 0;
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // You shouldn't need to call this as it is called internally by SteamGameServer_Init() and can only be called once.
+ //
+ // To update the data in this call which may change during the servers lifetime see UpdateServerStatus() below.
+ //
+ // Input: nGameAppID - The Steam assigned AppID for the game
+ // unServerFlags - Any applicable combination of flags (see k_unServerFlag____ constants below)
+ // unGameIP - The IP Address the server is listening for client connections on (might be INADDR_ANY)
+ // unGamePort - The port which the server is listening for client connections on
+ // unSpectatorPort - the port on which spectators can join to observe the server, 0 if spectating is not supported
+ // usQueryPort - The port which the ISteamMasterServerUpdater API should use in order to listen for matchmaking requests
+ // pchGameDir - A unique string identifier for your game
+ // pchVersion - The current version of the server as a string like 1.0.0.0
+ // bLanMode - Is this a LAN only server?
+ //
+ // bugbug jmccaskey - figure out how to remove this from the API and only expose via SteamGameServer_Init... or make this actually used,
+ // and stop calling it in SteamGameServer_Init()?
+ virtual bool BSetServerType( uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort,
+ uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0;
+
+ // Updates server status values which shows up in the server browser and matchmaking APIs
+ virtual void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers,
+ const char *pchServerName, const char *pSpectatorServerName,
+ const char *pchMapName ) = 0;
+
+ // This can be called if spectator goes away or comes back (passing 0 means there is no spectator server now).
+ virtual void UpdateSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ // Sets a string defining the "gametype" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ virtual void SetGameType( const char *pchGameType ) = 0;
+
+ // Ask if a user has a specific achievement for this game, will get a callback on reply
+ virtual bool BGetUserAchievementStatus( CSteamID steamID, const char *pchAchievementName ) = 0;
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+ // Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ // don't set this unless it actually changes, its only uploaded to the master once (when
+ // acknowledged)
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer009"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_106/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_106/isteammasterserverupdater.h
new file mode 100644
index 00000000..9ea09a8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_106/isteammasterserverupdater.h
@@ -0,0 +1,103 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for retrieving list of game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMMASTERSERVERUPDATER_H
+#define ISTEAMMASTERSERVERUPDATER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game engines use this to tell the Steam master servers
+// about their games so their games can show up in the server browser.
+//-----------------------------------------------------------------------------
+class ISteamMasterServerUpdater
+{
+public:
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void SetActive( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+
+// These are in GameSocketShare mode, where instead of ISteamMasterServerUpdater creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+
+// Functions to set various fields that are used to respond to queries.
+
+ // Call this to set basic data that is passed to the server browser.
+ virtual void SetBasicServerData(
+ unsigned short nProtocolVersion,
+ bool bDedicatedServer,
+ const char *pRegionName,
+ const char *pProductName,
+ unsigned short nMaxReportedClients,
+ bool bPasswordProtected,
+ const char *pGameDescription ) = 0;
+
+ // Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ // Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+
+ // You can call this upon shutdown to clear out data stored for this game server and
+ // to tell the master servers that this server is going away.
+ virtual void NotifyShutdown() = 0;
+
+ // Returns true if the master server has requested a restart.
+ // Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+ // Force it to request a heartbeat from the master servers.
+ virtual void ForceHeartbeat() = 0;
+
+ // Manually edit and query the master server list.
+ // It will provide name resolution and use the default master server port if none is provided.
+ virtual bool AddMasterServer( const char *pServerAddress ) = 0;
+ virtual bool RemoveMasterServer( const char *pServerAddress ) = 0;
+
+ virtual int GetNumMasterServers() = 0;
+
+ // Returns the # of bytes written to pOut.
+ virtual int GetMasterServerAddress( int iServer, char *pOut, int outBufferSize ) = 0;
+};
+
+#define STEAMMASTERSERVERUPDATER_INTERFACE_VERSION "SteamMasterServerUpdater001"
+
+#endif // ISTEAMMASTERSERVERUPDATER_H
diff --git a/lsteamclient/steamworks_sdk_106/isteammatchmaking.h b/lsteamclient/steamworks_sdk_106/isteammatchmaking.h
new file mode 100644
index 00000000..6ab1e8c4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_106/isteammatchmaking.h
@@ -0,0 +1,619 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this pointer
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // restart are returned by a LobbyDataUpdate_t callback
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking007"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamMasterServerUpdater->SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_106/isteamnetworking.h b/lsteamclient/steamworks_sdk_106/isteamnetworking.h
new file mode 100644
index 00000000..bd9b0c69
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_106/isteamnetworking.h
@@ -0,0 +1,271 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking003"
+
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_106/isteamremotestorage.h b/lsteamclient/steamworks_sdk_106/isteamremotestorage.h
new file mode 100644
index 00000000..8287228b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_106/isteamremotestorage.h
@@ -0,0 +1,45 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileExists( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // quota management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION002"
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_106/isteamuser.h b/lsteamclient/steamworks_sdk_106/isteamuser.h
new file mode 100644
index 00000000..27945462
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_106/isteamuser.h
@@ -0,0 +1,217 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at 11025 samples per second.
+ virtual EVoiceResult DecompressVoice( void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten ) = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser013"
+
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_106/isteamuserstats.h b/lsteamclient/steamworks_sdk_106/isteamuserstats.h
new file mode 100644
index 00000000..9864875d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_106/isteamuserstats.h
@@ -0,0 +1,277 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+ // Get general attributes (display name / text, etc) for an Achievement
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION006"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_106/isteamutils.h b/lsteamclient/steamworks_sdk_106/isteamutils.h
new file mode 100644
index 00000000..2b8623c7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_106/isteamutils.h
@@ -0,0 +1,146 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+// function prototype for warning message hook
+#if defined( POSIX ) && !defined( _CYGWIN )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils004"
+
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+struct SteamShutdown_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 4 };
+};
+
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_106/matchmakingtypes.h b/lsteamclient/steamworks_sdk_106/matchmakingtypes.h
new file mode 100644
index 00000000..96ff999c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_106/matchmakingtypes.h
@@ -0,0 +1,230 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ void Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort );
+ netadr_t& GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline void servernetadr_t::Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort )
+{
+ Init( ipAndQueryPort.GetIP(), ipAndQueryPort.GetPort(), usConnectionPort );
+}
+
+inline netadr_t& servernetadr_t::GetIPAndQueryPort()
+{
+ static netadr_t netAdr;
+ netAdr.SetIP( m_unIP );
+ netAdr.SetPort( m_usQueryPort );
+ return netAdr;
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; // IP/Query Port/Connection Port for this server
+ int m_nPing; // current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; // server has responded successfully in the past
+ bool m_bDoNotRefresh; // server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[32]; // current game directory
+ char m_szMap[32]; // current map
+ char m_szGameDescription[64]; // game description
+ int m_nAppID; // Steam App ID of this server
+ int m_nPlayers; // current number of players on the server
+ int m_nMaxPlayers; // Maximum players that can join this server
+ int m_nBotPlayers; // Number of bots (i.e simulated players) on this server
+ bool m_bPassword; // true if this server needs a password to join
+ bool m_bSecure; // Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; // time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; // server version as reported to Steam
+
+private:
+ char m_szServerName[64]; // Game server name
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ char m_szGameTags[128]; // the tags this server exposes
+ CSteamID m_steamID; // steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_106/steam_api.h b/lsteamclient/steamworks_sdk_106/steam_api.h
new file mode 100644
index 00000000..296002e7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_106/steam_api.h
@@ -0,0 +1,444 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// restart your app through Steam to enable required Steamworks features
+S_API bool SteamAPI_RestartApp( uint32 unOwnAppID );
+
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+S_API bool SteamAPI_Init();
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = 0;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive()
+ {
+ return ( m_hAPICall != 0 );
+ }
+
+ void Cancel()
+ {
+ m_hAPICall = 0;
+ }
+
+ ~CCallResult()
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = 0;
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = 0;
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_106/steam_gameserver.h b/lsteamclient/steamworks_sdk_106/steam_gameserver.h
new file mode 100644
index 00000000..268194fc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_106/steam_gameserver.h
@@ -0,0 +1,134 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteammasterserverupdater.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Note: if you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it will use "GameSocketShare" mode,
+// which means that the game is responsible for sending and receiving UDP packets for the master
+// server updater. See references to GameSocketShare in isteammasterserverupdater.h.
+//
+// Pass 0 for usGamePort or usSpectatorPort if you're not using that. Then, the master server updater will report
+// what's running based on that.
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamMasterServerUpdater *SteamMasterServerUpdater();
+S_API ISteamNetworking *SteamGameServerNetworking();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamMasterServerUpdater *SteamMasterServerUpdater() { return m_pSteamMasterServerUpdater; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamMasterServerUpdater *m_pSteamMasterServerUpdater;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamMasterServerUpdater = NULL;
+ m_pSteamGameServerNetworking = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamMasterServerUpdater = g_pSteamClientGameServer->GetISteamMasterServerUpdater( hSteamUser, hSteamPipe, STEAMMASTERSERVERUPDATER_INTERFACE_VERSION );
+ if ( !m_pSteamMasterServerUpdater )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_106/steamclientpublic.h b/lsteamclient/steamworks_sdk_106/steamclientpublic.h
new file mode 100644
index 00000000..13135d73
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_106/steamclientpublic.h
@@ -0,0 +1,885 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49, // You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50 // You are already logged in elsewhere, you must wait
+
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeP2PSuperSeeder = 9, // a fake steamid used by superpeers to seed content to users of Steam P2P stuff
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionCompleteDisabled = 1,
+ k_EStatusDepotVersionCompleteEnabledBeta = 2,
+ k_EStatusDepotVersionCompleteEnabledPublic = 3,
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const int k_unSteamAccountInstanceMask = 0x000FFFFF;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( 1 != unAccountInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ m_steamid.m_comp.m_unAccountInstance = 1;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & 0xFFFFFFFF ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & 0xFFFFF ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = 1; // individual accounts always have an account instance ID of 1
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id?
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ uint32 GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID (used for multiseat type accounts only)
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 1 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+ return true;
+}
+
+
+// generic invalid CSteamID
+const CSteamID k_steamIDNil;
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+const CSteamID k_steamIDOutofDateGS( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID comes from a user game connection to an sv_lan GS
+const CSteamID k_steamIDLanModeGS( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+const CSteamID k_steamIDNotInitYetGS( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+const CSteamID k_steamIDNonSteamGS( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+ break;
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+ break;
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+// Max number of credit cards stored for one account
+const int k_nMaxNumCardsPerAccount = 1;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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.
+
+#endif // STEAMCLIENTPUBLIC_H
diff --git a/lsteamclient/steamworks_sdk_106/steamtypes.h b/lsteamclient/steamworks_sdk_106/steamtypes.h
new file mode 100644
index 00000000..565646cb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_106/steamtypes.h
@@ -0,0 +1,106 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+typedef uint64 GID_t; // globally unique identifier
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_107/isteamapps.h b/lsteamclient/steamworks_sdk_107/isteamapps.h
new file mode 100644
index 00000000..9abb5888
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_107/isteamapps.h
@@ -0,0 +1,45 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION003"
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_107/isteamclient.h b/lsteamclient/steamworks_sdk_107/isteamclient.h
new file mode 100644
index 00000000..098b45c7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_107/isteamclient.h
@@ -0,0 +1,152 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX ) && !defined( _CYGWIN )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMasterServerUpdater;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMasterServerUpdater interface
+ virtual ISteamMasterServerUpdater *GetISteamMasterServerUpdater( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient008"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_107/isteamfriends.h b/lsteamclient/steamworks_sdk_107/isteamfriends.h
new file mode 100644
index 00000000..9a16d20f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_107/isteamfriends.h
@@ -0,0 +1,251 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: avatar sizes, used in ISteamFriends::GetFriendAvatar()
+//-----------------------------------------------------------------------------
+enum EAvatarSize
+{
+ k_EAvatarSize32x32 = 0,
+ k_EAvatarSize64x64 = 1,
+};
+
+
+// friend game played information
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+
+
+// maximum number of characters in a users name
+enum { k_cchPersonaNameMax = 128 };
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // gets the avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetFriendAvatar( CSteamID steamIDFriend, int eAvatarSize ) = 0;
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( 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
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "LobbyInvite", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends005"
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+};
+
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_107/isteamgameserver.h b/lsteamclient/steamworks_sdk_107/isteamgameserver.h
new file mode 100644
index 00000000..961f2e20
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_107/isteamgameserver.h
@@ -0,0 +1,202 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+ // connection functions
+ virtual void LogOn() = 0;
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // You shouldn't need to call this as it is called internally by SteamGameServer_Init() and can only be called once.
+ //
+ // To update the data in this call which may change during the servers lifetime see UpdateServerStatus() below.
+ //
+ // Input: nGameAppID - The Steam assigned AppID for the game
+ // unServerFlags - Any applicable combination of flags (see k_unServerFlag____ constants below)
+ // unGameIP - The IP Address the server is listening for client connections on (might be INADDR_ANY)
+ // unGamePort - The port which the server is listening for client connections on
+ // unSpectatorPort - the port on which spectators can join to observe the server, 0 if spectating is not supported
+ // usQueryPort - The port which the ISteamMasterServerUpdater API should use in order to listen for matchmaking requests
+ // pchGameDir - A unique string identifier for your game
+ // pchVersion - The current version of the server as a string like 1.0.0.0
+ // bLanMode - Is this a LAN only server?
+ //
+ // bugbug jmccaskey - figure out how to remove this from the API and only expose via SteamGameServer_Init... or make this actually used,
+ // and stop calling it in SteamGameServer_Init()?
+ virtual bool BSetServerType( uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort,
+ uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0;
+
+ // Updates server status values which shows up in the server browser and matchmaking APIs
+ virtual void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers,
+ const char *pchServerName, const char *pSpectatorServerName,
+ const char *pchMapName ) = 0;
+
+ // This can be called if spectator goes away or comes back (passing 0 means there is no spectator server now).
+ virtual void UpdateSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ // Sets a string defining the "gametype" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ virtual void SetGameType( const char *pchGameType ) = 0;
+
+ // Ask if a user has a specific achievement for this game, will get a callback on reply
+ virtual bool BGetUserAchievementStatus( CSteamID steamID, const char *pchAchievementName ) = 0;
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+ // Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ // don't set this unless it actually changes, its only uploaded to the master once (when
+ // acknowledged)
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer009"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_107/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_107/isteammasterserverupdater.h
new file mode 100644
index 00000000..9ea09a8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_107/isteammasterserverupdater.h
@@ -0,0 +1,103 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for retrieving list of game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMMASTERSERVERUPDATER_H
+#define ISTEAMMASTERSERVERUPDATER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game engines use this to tell the Steam master servers
+// about their games so their games can show up in the server browser.
+//-----------------------------------------------------------------------------
+class ISteamMasterServerUpdater
+{
+public:
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void SetActive( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+
+// These are in GameSocketShare mode, where instead of ISteamMasterServerUpdater creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+
+// Functions to set various fields that are used to respond to queries.
+
+ // Call this to set basic data that is passed to the server browser.
+ virtual void SetBasicServerData(
+ unsigned short nProtocolVersion,
+ bool bDedicatedServer,
+ const char *pRegionName,
+ const char *pProductName,
+ unsigned short nMaxReportedClients,
+ bool bPasswordProtected,
+ const char *pGameDescription ) = 0;
+
+ // Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ // Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+
+ // You can call this upon shutdown to clear out data stored for this game server and
+ // to tell the master servers that this server is going away.
+ virtual void NotifyShutdown() = 0;
+
+ // Returns true if the master server has requested a restart.
+ // Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+ // Force it to request a heartbeat from the master servers.
+ virtual void ForceHeartbeat() = 0;
+
+ // Manually edit and query the master server list.
+ // It will provide name resolution and use the default master server port if none is provided.
+ virtual bool AddMasterServer( const char *pServerAddress ) = 0;
+ virtual bool RemoveMasterServer( const char *pServerAddress ) = 0;
+
+ virtual int GetNumMasterServers() = 0;
+
+ // Returns the # of bytes written to pOut.
+ virtual int GetMasterServerAddress( int iServer, char *pOut, int outBufferSize ) = 0;
+};
+
+#define STEAMMASTERSERVERUPDATER_INTERFACE_VERSION "SteamMasterServerUpdater001"
+
+#endif // ISTEAMMASTERSERVERUPDATER_H
diff --git a/lsteamclient/steamworks_sdk_107/isteammatchmaking.h b/lsteamclient/steamworks_sdk_107/isteammatchmaking.h
new file mode 100644
index 00000000..6ab1e8c4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_107/isteammatchmaking.h
@@ -0,0 +1,619 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this pointer
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // restart are returned by a LobbyDataUpdate_t callback
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking007"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamMasterServerUpdater->SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_107/isteamnetworking.h b/lsteamclient/steamworks_sdk_107/isteamnetworking.h
new file mode 100644
index 00000000..bd9b0c69
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_107/isteamnetworking.h
@@ -0,0 +1,271 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking003"
+
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_107/isteamremotestorage.h b/lsteamclient/steamworks_sdk_107/isteamremotestorage.h
new file mode 100644
index 00000000..8287228b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_107/isteamremotestorage.h
@@ -0,0 +1,45 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileExists( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // quota management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION002"
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_107/isteamuser.h b/lsteamclient/steamworks_sdk_107/isteamuser.h
new file mode 100644
index 00000000..27945462
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_107/isteamuser.h
@@ -0,0 +1,217 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at 11025 samples per second.
+ virtual EVoiceResult DecompressVoice( void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten ) = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser013"
+
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_107/isteamuserstats.h b/lsteamclient/steamworks_sdk_107/isteamuserstats.h
new file mode 100644
index 00000000..9864875d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_107/isteamuserstats.h
@@ -0,0 +1,277 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+ // Get general attributes (display name / text, etc) for an Achievement
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION006"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_107/isteamutils.h b/lsteamclient/steamworks_sdk_107/isteamutils.h
new file mode 100644
index 00000000..9c0b97d6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_107/isteamutils.h
@@ -0,0 +1,157 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+// function prototype for warning message hook
+#if defined( POSIX ) && !defined( _CYGWIN )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils005"
+
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+struct SteamShutdown_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 4 };
+};
+
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_107/matchmakingtypes.h b/lsteamclient/steamworks_sdk_107/matchmakingtypes.h
new file mode 100644
index 00000000..96ff999c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_107/matchmakingtypes.h
@@ -0,0 +1,230 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ void Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort );
+ netadr_t& GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline void servernetadr_t::Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort )
+{
+ Init( ipAndQueryPort.GetIP(), ipAndQueryPort.GetPort(), usConnectionPort );
+}
+
+inline netadr_t& servernetadr_t::GetIPAndQueryPort()
+{
+ static netadr_t netAdr;
+ netAdr.SetIP( m_unIP );
+ netAdr.SetPort( m_usQueryPort );
+ return netAdr;
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; // IP/Query Port/Connection Port for this server
+ int m_nPing; // current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; // server has responded successfully in the past
+ bool m_bDoNotRefresh; // server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[32]; // current game directory
+ char m_szMap[32]; // current map
+ char m_szGameDescription[64]; // game description
+ int m_nAppID; // Steam App ID of this server
+ int m_nPlayers; // current number of players on the server
+ int m_nMaxPlayers; // Maximum players that can join this server
+ int m_nBotPlayers; // Number of bots (i.e simulated players) on this server
+ bool m_bPassword; // true if this server needs a password to join
+ bool m_bSecure; // Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; // time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; // server version as reported to Steam
+
+private:
+ char m_szServerName[64]; // Game server name
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ char m_szGameTags[128]; // the tags this server exposes
+ CSteamID m_steamID; // steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_107/steam_api.h b/lsteamclient/steamworks_sdk_107/steam_api.h
new file mode 100644
index 00000000..3fa43d35
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_107/steam_api.h
@@ -0,0 +1,443 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// restart your app through Steam to enable required Steamworks features
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+S_API bool SteamAPI_Init();
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = 0;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive()
+ {
+ return ( m_hAPICall != 0 );
+ }
+
+ void Cancel()
+ {
+ m_hAPICall = 0;
+ }
+
+ ~CCallResult()
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = 0;
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = 0;
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_107/steam_gameserver.h b/lsteamclient/steamworks_sdk_107/steam_gameserver.h
new file mode 100644
index 00000000..268194fc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_107/steam_gameserver.h
@@ -0,0 +1,134 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteammasterserverupdater.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Note: if you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it will use "GameSocketShare" mode,
+// which means that the game is responsible for sending and receiving UDP packets for the master
+// server updater. See references to GameSocketShare in isteammasterserverupdater.h.
+//
+// Pass 0 for usGamePort or usSpectatorPort if you're not using that. Then, the master server updater will report
+// what's running based on that.
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamMasterServerUpdater *SteamMasterServerUpdater();
+S_API ISteamNetworking *SteamGameServerNetworking();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamMasterServerUpdater *SteamMasterServerUpdater() { return m_pSteamMasterServerUpdater; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamMasterServerUpdater *m_pSteamMasterServerUpdater;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamMasterServerUpdater = NULL;
+ m_pSteamGameServerNetworking = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamMasterServerUpdater = g_pSteamClientGameServer->GetISteamMasterServerUpdater( hSteamUser, hSteamPipe, STEAMMASTERSERVERUPDATER_INTERFACE_VERSION );
+ if ( !m_pSteamMasterServerUpdater )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_107/steamclientpublic.h b/lsteamclient/steamworks_sdk_107/steamclientpublic.h
new file mode 100644
index 00000000..13135d73
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_107/steamclientpublic.h
@@ -0,0 +1,885 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49, // You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50 // You are already logged in elsewhere, you must wait
+
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeP2PSuperSeeder = 9, // a fake steamid used by superpeers to seed content to users of Steam P2P stuff
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionCompleteDisabled = 1,
+ k_EStatusDepotVersionCompleteEnabledBeta = 2,
+ k_EStatusDepotVersionCompleteEnabledPublic = 3,
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const int k_unSteamAccountInstanceMask = 0x000FFFFF;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( 1 != unAccountInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ m_steamid.m_comp.m_unAccountInstance = 1;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & 0xFFFFFFFF ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & 0xFFFFF ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = 1; // individual accounts always have an account instance ID of 1
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id?
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ uint32 GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID (used for multiseat type accounts only)
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 1 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+ return true;
+}
+
+
+// generic invalid CSteamID
+const CSteamID k_steamIDNil;
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+const CSteamID k_steamIDOutofDateGS( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID comes from a user game connection to an sv_lan GS
+const CSteamID k_steamIDLanModeGS( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+const CSteamID k_steamIDNotInitYetGS( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+const CSteamID k_steamIDNonSteamGS( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+ break;
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+ break;
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+// Max number of credit cards stored for one account
+const int k_nMaxNumCardsPerAccount = 1;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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.
+
+#endif // STEAMCLIENTPUBLIC_H
diff --git a/lsteamclient/steamworks_sdk_107/steamtypes.h b/lsteamclient/steamworks_sdk_107/steamtypes.h
new file mode 100644
index 00000000..565646cb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_107/steamtypes.h
@@ -0,0 +1,106 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+typedef uint64 GID_t; // globally unique identifier
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_108/isteamapps.h b/lsteamclient/steamworks_sdk_108/isteamapps.h
new file mode 100644
index 00000000..9abb5888
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_108/isteamapps.h
@@ -0,0 +1,45 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION003"
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_108/isteamclient.h b/lsteamclient/steamworks_sdk_108/isteamclient.h
new file mode 100644
index 00000000..0e1488c0
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_108/isteamclient.h
@@ -0,0 +1,159 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMasterServerUpdater;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamGameServerStats;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMasterServerUpdater interface
+ virtual ISteamMasterServerUpdater *GetISteamMasterServerUpdater( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient009"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_108/isteamfriends.h b/lsteamclient/steamworks_sdk_108/isteamfriends.h
new file mode 100644
index 00000000..afa3233d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_108/isteamfriends.h
@@ -0,0 +1,257 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: avatar sizes, used in ISteamFriends::GetFriendAvatar()
+//-----------------------------------------------------------------------------
+enum EAvatarSize
+{
+ k_EAvatarSize32x32 = 0,
+ k_EAvatarSize64x64 = 1,
+};
+
+
+// friend game played information
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // gets the avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetFriendAvatar( CSteamID steamIDFriend, int eAvatarSize ) = 0;
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( 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
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "LobbyInvite", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends005"
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+};
+
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_108/isteamgameserver.h b/lsteamclient/steamworks_sdk_108/isteamgameserver.h
new file mode 100644
index 00000000..d492e690
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_108/isteamgameserver.h
@@ -0,0 +1,223 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+ // connection functions
+ virtual void LogOn() = 0;
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // You shouldn't need to call this as it is called internally by SteamGameServer_Init() and can only be called once.
+ //
+ // To update the data in this call which may change during the servers lifetime see UpdateServerStatus() below.
+ //
+ // Input: nGameAppID - The Steam assigned AppID for the game
+ // unServerFlags - Any applicable combination of flags (see k_unServerFlag____ constants below)
+ // unGameIP - The IP Address the server is listening for client connections on (might be INADDR_ANY)
+ // unGamePort - The port which the server is listening for client connections on
+ // unSpectatorPort - the port on which spectators can join to observe the server, 0 if spectating is not supported
+ // usQueryPort - The port which the ISteamMasterServerUpdater API should use in order to listen for matchmaking requests
+ // pchGameDir - A unique string identifier for your game
+ // pchVersion - The current version of the server as a string like 1.0.0.0
+ // bLanMode - Is this a LAN only server?
+ //
+ // bugbug jmccaskey - figure out how to remove this from the API and only expose via SteamGameServer_Init... or make this actually used,
+ // and stop calling it in SteamGameServer_Init()?
+ virtual bool BSetServerType( uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort,
+ uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0;
+
+ // Updates server status values which shows up in the server browser and matchmaking APIs
+ virtual void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers,
+ const char *pchServerName, const char *pSpectatorServerName,
+ const char *pchMapName ) = 0;
+
+ // This can be called if spectator goes away or comes back (passing 0 means there is no spectator server now).
+ virtual void UpdateSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ // Sets a string defining the "gametype" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ virtual void SetGameType( const char *pchGameType ) = 0;
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+ // Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ // don't set this unless it actually changes, its only uploaded to the master once (when
+ // acknowledged)
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer010"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_108/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_108/isteamgameserverstats.h
new file mode 100644
index 00000000..7a0d9ab4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_108/isteamgameserverstats.h
@@ -0,0 +1,92 @@
+//====== Copyright © Valve Corporation, All rights reserved. ==================
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: interface for game servers to Steam users stats and achievements
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_108/isteamgamestats.h b/lsteamclient/steamworks_sdk_108/isteamgamestats.h
new file mode 100644
index 00000000..57681f48
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_108/isteamgamestats.h
@@ -0,0 +1,75 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game play statistics
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESTATS_H
+#define ISTEAMGAMESTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for recording game play sessions and details thereof
+//-----------------------------------------------------------------------------
+class ISteamGameStats
+{
+public:
+ virtual SteamAPICall_t GetNewSession( int8 nAccountType, uint64 ulAccountID, int32 nAppID, RTime32 rtTimeStarted ) = 0;
+ virtual SteamAPICall_t EndSession( uint64 ulSessionID, RTime32 rtTimeEnded, int nReasonCode ) = 0;
+ virtual EResult AddSessionAttributeInt( uint64 ulSessionID, const char* pstrName, int32 nData ) = 0;
+ virtual EResult AddSessionAttributeString( uint64 ulSessionID, const char* pstrName, const char *pstrData ) = 0;
+ virtual EResult AddSessionAttributeFloat( uint64 ulSessionID, const char* pstrName, float fData ) = 0;
+
+ virtual EResult AddNewRow( uint64 *pulRowID, uint64 ulSessionID, const char *pstrTableName ) = 0;
+ virtual EResult CommitRow( uint64 ulRowID ) = 0;
+ virtual EResult CommitOutstandingRows( uint64 ulSessionID ) = 0;
+ virtual EResult AddRowAttributeInt( uint64 ulRowID, const char *pstrName, int32 nData ) = 0;
+ virtual EResult AddRowAtributeString( uint64 ulRowID, const char *pstrName, const char *pstrData ) = 0;
+ virtual EResult AddRowAttributeFloat( uint64 ulRowID, const char *pstrName, float fData ) = 0;
+
+ virtual EResult AddSessionAttributeInt64( uint64 ulSessionID, const char *pstrName, int64 llData ) = 0;
+ virtual EResult AddRowAttributeInt64( uint64 ulRowID, const char *pstrName, int64 llData ) = 0;
+};
+
+#define STEAMGAMESTATS_INTERFACE_VERSION "SteamGameStats001"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: nAccountType for GetNewSession
+//-----------------------------------------------------------------------------
+enum EGameStatsAccountType
+{
+ k_EGameStatsAccountType_Steam = 1, // ullAccountID is a 64-bit SteamID for a player
+ k_EGameStatsAccountType_Xbox = 2, // ullAccountID is a 64-bit XUID
+ k_EGameStatsAccountType_SteamGameServer = 3, // ullAccountID is a 64-bit SteamID for a game server
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for GetNewSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionIssued_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 1 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+ bool m_bCollectingAny;
+ bool m_bCollectingDetails;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for EndSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionClosed_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 2 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+};
+
+#endif // ISTEAMGAMESTATS_H
diff --git a/lsteamclient/steamworks_sdk_108/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_108/isteammasterserverupdater.h
new file mode 100644
index 00000000..9ea09a8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_108/isteammasterserverupdater.h
@@ -0,0 +1,103 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for retrieving list of game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMMASTERSERVERUPDATER_H
+#define ISTEAMMASTERSERVERUPDATER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game engines use this to tell the Steam master servers
+// about their games so their games can show up in the server browser.
+//-----------------------------------------------------------------------------
+class ISteamMasterServerUpdater
+{
+public:
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void SetActive( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+
+// These are in GameSocketShare mode, where instead of ISteamMasterServerUpdater creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+
+// Functions to set various fields that are used to respond to queries.
+
+ // Call this to set basic data that is passed to the server browser.
+ virtual void SetBasicServerData(
+ unsigned short nProtocolVersion,
+ bool bDedicatedServer,
+ const char *pRegionName,
+ const char *pProductName,
+ unsigned short nMaxReportedClients,
+ bool bPasswordProtected,
+ const char *pGameDescription ) = 0;
+
+ // Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ // Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+
+ // You can call this upon shutdown to clear out data stored for this game server and
+ // to tell the master servers that this server is going away.
+ virtual void NotifyShutdown() = 0;
+
+ // Returns true if the master server has requested a restart.
+ // Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+ // Force it to request a heartbeat from the master servers.
+ virtual void ForceHeartbeat() = 0;
+
+ // Manually edit and query the master server list.
+ // It will provide name resolution and use the default master server port if none is provided.
+ virtual bool AddMasterServer( const char *pServerAddress ) = 0;
+ virtual bool RemoveMasterServer( const char *pServerAddress ) = 0;
+
+ virtual int GetNumMasterServers() = 0;
+
+ // Returns the # of bytes written to pOut.
+ virtual int GetMasterServerAddress( int iServer, char *pOut, int outBufferSize ) = 0;
+};
+
+#define STEAMMASTERSERVERUPDATER_INTERFACE_VERSION "SteamMasterServerUpdater001"
+
+#endif // ISTEAMMASTERSERVERUPDATER_H
diff --git a/lsteamclient/steamworks_sdk_108/isteammatchmaking.h b/lsteamclient/steamworks_sdk_108/isteammatchmaking.h
new file mode 100644
index 00000000..4a6184dd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_108/isteammatchmaking.h
@@ -0,0 +1,634 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or close, but looking further if the current region has infrequent lobby activity (the default)
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this pointer
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // restart are returned by a LobbyDataUpdate_t callback
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking008"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamMasterServerUpdater->SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_108/isteamnetworking.h b/lsteamclient/steamworks_sdk_108/isteamnetworking.h
new file mode 100644
index 00000000..bd9b0c69
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_108/isteamnetworking.h
@@ -0,0 +1,271 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking003"
+
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_108/isteamremotestorage.h b/lsteamclient/steamworks_sdk_108/isteamremotestorage.h
new file mode 100644
index 00000000..8287228b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_108/isteamremotestorage.h
@@ -0,0 +1,45 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileExists( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // quota management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION002"
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_108/isteamuser.h b/lsteamclient/steamworks_sdk_108/isteamuser.h
new file mode 100644
index 00000000..ada020b2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_108/isteamuser.h
@@ -0,0 +1,217 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at 11025 samples per second.
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten ) = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser013"
+
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_108/isteamuserstats.h b/lsteamclient/steamworks_sdk_108/isteamuserstats.h
new file mode 100644
index 00000000..57c26838
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_108/isteamuserstats.h
@@ -0,0 +1,316 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconReady_t callback
+ // which will notify you when the bits are actually read. If the callback still returns zero, then there is no image set
+ // and there never will be.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+ // Get general attributes (display name / text, etc) for an Achievement
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION007"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in ClientUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_108/isteamutils.h b/lsteamclient/steamworks_sdk_108/isteamutils.h
new file mode 100644
index 00000000..29287be9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_108/isteamutils.h
@@ -0,0 +1,157 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils005"
+
+
+// callbacks
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+struct SteamShutdown_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 4 };
+};
+
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_108/matchmakingtypes.h b/lsteamclient/steamworks_sdk_108/matchmakingtypes.h
new file mode 100644
index 00000000..2f6f8380
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_108/matchmakingtypes.h
@@ -0,0 +1,230 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ void Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort );
+ netadr_t& GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline void servernetadr_t::Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort )
+{
+ Init( ipAndQueryPort.GetIP(), ipAndQueryPort.GetPort(), usConnectionPort );
+}
+
+inline netadr_t& servernetadr_t::GetIPAndQueryPort()
+{
+ static netadr_t netAdr;
+ netAdr.SetIP( m_unIP );
+ netAdr.SetPort( m_usQueryPort );
+ return netAdr;
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; // IP/Query Port/Connection Port for this server
+ int m_nPing; // current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; // server has responded successfully in the past
+ bool m_bDoNotRefresh; // server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[32]; // current game directory
+ char m_szMap[32]; // current map
+ char m_szGameDescription[64]; // game description
+ uint32 m_nAppID; // Steam App ID of this server
+ int m_nPlayers; // current number of players on the server
+ int m_nMaxPlayers; // Maximum players that can join this server
+ int m_nBotPlayers; // Number of bots (i.e simulated players) on this server
+ bool m_bPassword; // true if this server needs a password to join
+ bool m_bSecure; // Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; // time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; // server version as reported to Steam
+
+private:
+ char m_szServerName[64]; // Game server name
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ char m_szGameTags[128]; // the tags this server exposes
+ CSteamID m_steamID; // steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_108/steam_api.h b/lsteamclient/steamworks_sdk_108/steam_api.h
new file mode 100644
index 00000000..21326083
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_108/steam_api.h
@@ -0,0 +1,444 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// restart your app through Steam to enable required Steamworks features
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+S_API bool SteamAPI_Init();
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = 0;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != 0 );
+ }
+
+ void Cancel()
+ {
+ m_hAPICall = 0;
+ }
+
+ ~CCallResult()
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = 0;
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = 0;
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_108/steam_gameserver.h b/lsteamclient/steamworks_sdk_108/steam_gameserver.h
new file mode 100644
index 00000000..014f53e6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_108/steam_gameserver.h
@@ -0,0 +1,143 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteammasterserverupdater.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Note: if you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it will use "GameSocketShare" mode,
+// which means that the game is responsible for sending and receiving UDP packets for the master
+// server updater. See references to GameSocketShare in isteammasterserverupdater.h.
+//
+// Pass 0 for usGamePort or usSpectatorPort if you're not using that. Then, the master server updater will report
+// what's running based on that.
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamMasterServerUpdater *SteamMasterServerUpdater();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamMasterServerUpdater *SteamMasterServerUpdater() { return m_pSteamMasterServerUpdater; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamMasterServerUpdater *m_pSteamMasterServerUpdater;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamMasterServerUpdater = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamMasterServerUpdater = g_pSteamClientGameServer->GetISteamMasterServerUpdater( hSteamUser, hSteamPipe, STEAMMASTERSERVERUPDATER_INTERFACE_VERSION );
+ if ( !m_pSteamMasterServerUpdater )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_108/steamclientpublic.h b/lsteamclient/steamworks_sdk_108/steamclientpublic.h
new file mode 100644
index 00000000..76b6be58
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_108/steamclientpublic.h
@@ -0,0 +1,885 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeP2PSuperSeeder = 9, // a fake steamid used by superpeers to seed content to users of Steam P2P stuff
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionCompleteDisabled = 1,
+ k_EStatusDepotVersionCompleteEnabledBeta = 2,
+ k_EStatusDepotVersionCompleteEnabledPublic = 3,
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const int k_unSteamAccountInstanceMask = 0x000FFFFF;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( 1 != unAccountInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ m_steamid.m_comp.m_unAccountInstance = 1;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & 0xFFFFFFFF ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & 0xFFFFF ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = 1; // individual accounts always have an account instance ID of 1
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id?
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ uint32 GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID (used for multiseat type accounts only)
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 1 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+ return true;
+}
+
+
+// generic invalid CSteamID
+const CSteamID k_steamIDNil;
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+const CSteamID k_steamIDOutofDateGS( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID comes from a user game connection to an sv_lan GS
+const CSteamID k_steamIDLanModeGS( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+const CSteamID k_steamIDNotInitYetGS( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+const CSteamID k_steamIDNonSteamGS( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+ break;
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+ break;
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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.
+
+#endif // STEAMCLIENTPUBLIC_H
diff --git a/lsteamclient/steamworks_sdk_108/steamtypes.h b/lsteamclient/steamworks_sdk_108/steamtypes.h
new file mode 100644
index 00000000..3db67e4e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_108/steamtypes.h
@@ -0,0 +1,124 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+const PackageId_t k_uPackageIdWallet = 0xFFFFFFFE;
+const PackageId_t k_uPackageIdMicroTxn = 0xFFFFFFFD;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_109/isteamapps.h b/lsteamclient/steamworks_sdk_109/isteamapps.h
new file mode 100644
index 00000000..ec0e87b7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/isteamapps.h
@@ -0,0 +1,49 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION003"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_109/isteamclient.h b/lsteamclient/steamworks_sdk_109/isteamclient.h
new file mode 100644
index 00000000..0e1488c0
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/isteamclient.h
@@ -0,0 +1,159 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMasterServerUpdater;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamGameServerStats;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMasterServerUpdater interface
+ virtual ISteamMasterServerUpdater *GetISteamMasterServerUpdater( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient009"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_109/isteamfriends.h b/lsteamclient/steamworks_sdk_109/isteamfriends.h
new file mode 100644
index 00000000..a38392de
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/isteamfriends.h
@@ -0,0 +1,267 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: avatar sizes, used in ISteamFriends::GetFriendAvatar()
+//-----------------------------------------------------------------------------
+enum EAvatarSize
+{
+ k_EAvatarSize32x32 = 0,
+ k_EAvatarSize64x64 = 1,
+};
+
+
+// friend game played information
+#pragma pack( push, 8 )
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // gets the avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetFriendAvatar( CSteamID steamIDFriend, int eAvatarSize ) = 0;
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( 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
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "LobbyInvite", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID ) = 0;
+
+ // 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;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends005"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_109/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_109/isteamgamecoordinator.h
new file mode 100644
index 00000000..dded0942
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/isteamgamecoordinator.h
@@ -0,0 +1,65 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_109/isteamgameserver.h b/lsteamclient/steamworks_sdk_109/isteamgameserver.h
new file mode 100644
index 00000000..bad4d35f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/isteamgameserver.h
@@ -0,0 +1,226 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+ // connection functions
+ virtual void LogOn() = 0;
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // You shouldn't need to call this as it is called internally by SteamGameServer_Init() and can only be called once.
+ //
+ // To update the data in this call which may change during the servers lifetime see UpdateServerStatus() below.
+ //
+ // Input: nGameAppID - The Steam assigned AppID for the game
+ // unServerFlags - Any applicable combination of flags (see k_unServerFlag____ constants below)
+ // unGameIP - The IP Address the server is listening for client connections on (might be INADDR_ANY)
+ // unGamePort - The port which the server is listening for client connections on
+ // unSpectatorPort - the port on which spectators can join to observe the server, 0 if spectating is not supported
+ // usQueryPort - The port which the ISteamMasterServerUpdater API should use in order to listen for matchmaking requests
+ // pchGameDir - A unique string identifier for your game
+ // pchVersion - The current version of the server as a string like 1.0.0.0
+ // bLanMode - Is this a LAN only server?
+ //
+ // bugbug jmccaskey - figure out how to remove this from the API and only expose via SteamGameServer_Init... or make this actually used,
+ // and stop calling it in SteamGameServer_Init()?
+ virtual bool BSetServerType( uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort,
+ uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0;
+
+ // Updates server status values which shows up in the server browser and matchmaking APIs
+ virtual void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers,
+ const char *pchServerName, const char *pSpectatorServerName,
+ const char *pchMapName ) = 0;
+
+ // This can be called if spectator goes away or comes back (passing 0 means there is no spectator server now).
+ virtual void UpdateSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ // Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+ // Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ // don't set this unless it actually changes, its only uploaded to the master once (when
+ // acknowledged)
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer010"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_109/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_109/isteamgameserverstats.h
new file mode 100644
index 00000000..988b284d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/isteamgameserverstats.h
@@ -0,0 +1,93 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_109/isteamgamestats.h b/lsteamclient/steamworks_sdk_109/isteamgamestats.h
new file mode 100644
index 00000000..57681f48
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/isteamgamestats.h
@@ -0,0 +1,75 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game play statistics
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESTATS_H
+#define ISTEAMGAMESTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for recording game play sessions and details thereof
+//-----------------------------------------------------------------------------
+class ISteamGameStats
+{
+public:
+ virtual SteamAPICall_t GetNewSession( int8 nAccountType, uint64 ulAccountID, int32 nAppID, RTime32 rtTimeStarted ) = 0;
+ virtual SteamAPICall_t EndSession( uint64 ulSessionID, RTime32 rtTimeEnded, int nReasonCode ) = 0;
+ virtual EResult AddSessionAttributeInt( uint64 ulSessionID, const char* pstrName, int32 nData ) = 0;
+ virtual EResult AddSessionAttributeString( uint64 ulSessionID, const char* pstrName, const char *pstrData ) = 0;
+ virtual EResult AddSessionAttributeFloat( uint64 ulSessionID, const char* pstrName, float fData ) = 0;
+
+ virtual EResult AddNewRow( uint64 *pulRowID, uint64 ulSessionID, const char *pstrTableName ) = 0;
+ virtual EResult CommitRow( uint64 ulRowID ) = 0;
+ virtual EResult CommitOutstandingRows( uint64 ulSessionID ) = 0;
+ virtual EResult AddRowAttributeInt( uint64 ulRowID, const char *pstrName, int32 nData ) = 0;
+ virtual EResult AddRowAtributeString( uint64 ulRowID, const char *pstrName, const char *pstrData ) = 0;
+ virtual EResult AddRowAttributeFloat( uint64 ulRowID, const char *pstrName, float fData ) = 0;
+
+ virtual EResult AddSessionAttributeInt64( uint64 ulSessionID, const char *pstrName, int64 llData ) = 0;
+ virtual EResult AddRowAttributeInt64( uint64 ulRowID, const char *pstrName, int64 llData ) = 0;
+};
+
+#define STEAMGAMESTATS_INTERFACE_VERSION "SteamGameStats001"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: nAccountType for GetNewSession
+//-----------------------------------------------------------------------------
+enum EGameStatsAccountType
+{
+ k_EGameStatsAccountType_Steam = 1, // ullAccountID is a 64-bit SteamID for a player
+ k_EGameStatsAccountType_Xbox = 2, // ullAccountID is a 64-bit XUID
+ k_EGameStatsAccountType_SteamGameServer = 3, // ullAccountID is a 64-bit SteamID for a game server
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for GetNewSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionIssued_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 1 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+ bool m_bCollectingAny;
+ bool m_bCollectingDetails;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for EndSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionClosed_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 2 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+};
+
+#endif // ISTEAMGAMESTATS_H
diff --git a/lsteamclient/steamworks_sdk_109/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_109/isteammasterserverupdater.h
new file mode 100644
index 00000000..9ea09a8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/isteammasterserverupdater.h
@@ -0,0 +1,103 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for retrieving list of game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMMASTERSERVERUPDATER_H
+#define ISTEAMMASTERSERVERUPDATER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game engines use this to tell the Steam master servers
+// about their games so their games can show up in the server browser.
+//-----------------------------------------------------------------------------
+class ISteamMasterServerUpdater
+{
+public:
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void SetActive( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+
+// These are in GameSocketShare mode, where instead of ISteamMasterServerUpdater creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+
+// Functions to set various fields that are used to respond to queries.
+
+ // Call this to set basic data that is passed to the server browser.
+ virtual void SetBasicServerData(
+ unsigned short nProtocolVersion,
+ bool bDedicatedServer,
+ const char *pRegionName,
+ const char *pProductName,
+ unsigned short nMaxReportedClients,
+ bool bPasswordProtected,
+ const char *pGameDescription ) = 0;
+
+ // Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ // Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+
+ // You can call this upon shutdown to clear out data stored for this game server and
+ // to tell the master servers that this server is going away.
+ virtual void NotifyShutdown() = 0;
+
+ // Returns true if the master server has requested a restart.
+ // Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+ // Force it to request a heartbeat from the master servers.
+ virtual void ForceHeartbeat() = 0;
+
+ // Manually edit and query the master server list.
+ // It will provide name resolution and use the default master server port if none is provided.
+ virtual bool AddMasterServer( const char *pServerAddress ) = 0;
+ virtual bool RemoveMasterServer( const char *pServerAddress ) = 0;
+
+ virtual int GetNumMasterServers() = 0;
+
+ // Returns the # of bytes written to pOut.
+ virtual int GetMasterServerAddress( int iServer, char *pOut, int outBufferSize ) = 0;
+};
+
+#define STEAMMASTERSERVERUPDATER_INTERFACE_VERSION "SteamMasterServerUpdater001"
+
+#endif // ISTEAMMASTERSERVERUPDATER_H
diff --git a/lsteamclient/steamworks_sdk_109/isteammatchmaking.h b/lsteamclient/steamworks_sdk_109/isteammatchmaking.h
new file mode 100644
index 00000000..699eea83
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/isteammatchmaking.h
@@ -0,0 +1,634 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or close, but looking further if the current region has infrequent lobby activity (the default)
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this pointer
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // restart are returned by a LobbyDataUpdate_t callback
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking008"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamMasterServerUpdater->SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+#pragma pack( pop )
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_109/isteamnetworking.h b/lsteamclient/steamworks_sdk_109/isteamnetworking.h
new file mode 100644
index 00000000..5161fc21
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/isteamnetworking.h
@@ -0,0 +1,278 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#pragma pack( push, 8 )
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking003"
+
+// callbacks
+#pragma pack( push, 8 )
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_109/isteamremotestorage.h b/lsteamclient/steamworks_sdk_109/isteamremotestorage.h
new file mode 100644
index 00000000..8287228b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/isteamremotestorage.h
@@ -0,0 +1,45 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileExists( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // quota management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION002"
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_109/isteamuser.h b/lsteamclient/steamworks_sdk_109/isteamuser.h
new file mode 100644
index 00000000..e12750e5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/isteamuser.h
@@ -0,0 +1,233 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#pragma pack( push, 8 )
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at 11025 samples per second.
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten ) = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser013"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_109/isteamuserstats.h b/lsteamclient/steamworks_sdk_109/isteamuserstats.h
new file mode 100644
index 00000000..35e8e728
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/isteamuserstats.h
@@ -0,0 +1,331 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#pragma pack( push, 8 )
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconReady_t callback
+ // which will notify you when the bits are actually read. If the callback still returns zero, then there is no image set
+ // and there never will be.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+ // Get general attributes (display name / text, etc) for an Achievement
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION007"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in ClientUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+//
+// IMPORTANT! k_iSteamUserStatsCallbacks + 10 is used, see iclientuserstats.h
+//
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_109/isteamutils.h b/lsteamclient/steamworks_sdk_109/isteamutils.h
new file mode 100644
index 00000000..628c733e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/isteamutils.h
@@ -0,0 +1,158 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils005"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+struct SteamShutdown_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 4 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_109/matchmakingtypes.h b/lsteamclient/steamworks_sdk_109/matchmakingtypes.h
new file mode 100644
index 00000000..2f6f8380
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/matchmakingtypes.h
@@ -0,0 +1,230 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ void Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort );
+ netadr_t& GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline void servernetadr_t::Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort )
+{
+ Init( ipAndQueryPort.GetIP(), ipAndQueryPort.GetPort(), usConnectionPort );
+}
+
+inline netadr_t& servernetadr_t::GetIPAndQueryPort()
+{
+ static netadr_t netAdr;
+ netAdr.SetIP( m_unIP );
+ netAdr.SetPort( m_usQueryPort );
+ return netAdr;
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; // IP/Query Port/Connection Port for this server
+ int m_nPing; // current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; // server has responded successfully in the past
+ bool m_bDoNotRefresh; // server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[32]; // current game directory
+ char m_szMap[32]; // current map
+ char m_szGameDescription[64]; // game description
+ uint32 m_nAppID; // Steam App ID of this server
+ int m_nPlayers; // current number of players on the server
+ int m_nMaxPlayers; // Maximum players that can join this server
+ int m_nBotPlayers; // Number of bots (i.e simulated players) on this server
+ bool m_bPassword; // true if this server needs a password to join
+ bool m_bSecure; // Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; // time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; // server version as reported to Steam
+
+private:
+ char m_szServerName[64]; // Game server name
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ char m_szGameTags[128]; // the tags this server exposes
+ CSteamID m_steamID; // steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_109/steam_api.h b/lsteamclient/steamworks_sdk_109/steam_api.h
new file mode 100644
index 00000000..f7f19026
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/steam_api.h
@@ -0,0 +1,463 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+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 );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+S_API bool SteamAPI_Init();
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_109/steam_gameserver.h b/lsteamclient/steamworks_sdk_109/steam_gameserver.h
new file mode 100644
index 00000000..014f53e6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/steam_gameserver.h
@@ -0,0 +1,143 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteammasterserverupdater.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Note: if you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it will use "GameSocketShare" mode,
+// which means that the game is responsible for sending and receiving UDP packets for the master
+// server updater. See references to GameSocketShare in isteammasterserverupdater.h.
+//
+// Pass 0 for usGamePort or usSpectatorPort if you're not using that. Then, the master server updater will report
+// what's running based on that.
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamMasterServerUpdater *SteamMasterServerUpdater();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamMasterServerUpdater *SteamMasterServerUpdater() { return m_pSteamMasterServerUpdater; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamMasterServerUpdater *m_pSteamMasterServerUpdater;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamMasterServerUpdater = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamMasterServerUpdater = g_pSteamClientGameServer->GetISteamMasterServerUpdater( hSteamUser, hSteamPipe, STEAMMASTERSERVERUPDATER_INTERFACE_VERSION );
+ if ( !m_pSteamMasterServerUpdater )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_109/steamclientpublic.h b/lsteamclient/steamworks_sdk_109/steamclientpublic.h
new file mode 100644
index 00000000..6265c4ff
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/steamclientpublic.h
@@ -0,0 +1,903 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ // k_EAccountTypeP2PSuperSeeder = 9, // unused
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionCompleteDisabled = 1,
+ k_EStatusDepotVersionCompleteEnabledBeta = 2,
+ k_EStatusDepotVersionCompleteEnabledPublic = 3,
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const int k_unSteamAccountInstanceMask = 0x000FFFFF;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows | k_EMarketingMessageFlagsPlatformMac,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( 1 != unAccountInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ m_steamid.m_comp.m_unAccountInstance = 1;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & 0xFFFFFFFF ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & 0xFFFFF ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = 1; // individual accounts always have an account instance ID of 1
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id?
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ uint32 GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID (used for multiseat type accounts only)
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 1 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+ return true;
+}
+
+
+// generic invalid CSteamID
+const CSteamID k_steamIDNil;
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+const CSteamID k_steamIDOutofDateGS( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID comes from a user game connection to an sv_lan GS
+const CSteamID k_steamIDLanModeGS( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+const CSteamID k_steamIDNotInitYetGS( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+const CSteamID k_steamIDNonSteamGS( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+ break;
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+ break;
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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.
+
+#endif // STEAMCLIENTPUBLIC_H
diff --git a/lsteamclient/steamworks_sdk_109/steamtypes.h b/lsteamclient/steamworks_sdk_109/steamtypes.h
new file mode 100644
index 00000000..44a20e61
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_109/steamtypes.h
@@ -0,0 +1,123 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_110/isteamapps.h b/lsteamclient/steamworks_sdk_110/isteamapps.h
new file mode 100644
index 00000000..ec0e87b7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/isteamapps.h
@@ -0,0 +1,49 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION003"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_110/isteamclient.h b/lsteamclient/steamworks_sdk_110/isteamclient.h
new file mode 100644
index 00000000..0e1488c0
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/isteamclient.h
@@ -0,0 +1,159 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMasterServerUpdater;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamGameServerStats;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMasterServerUpdater interface
+ virtual ISteamMasterServerUpdater *GetISteamMasterServerUpdater( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient009"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_110/isteamfriends.h b/lsteamclient/steamworks_sdk_110/isteamfriends.h
new file mode 100644
index 00000000..e8f47eda
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/isteamfriends.h
@@ -0,0 +1,274 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: avatar sizes, used in ISteamFriends::GetFriendAvatar()
+//-----------------------------------------------------------------------------
+enum EAvatarSize
+{
+ k_EAvatarSize32x32 = 0,
+ k_EAvatarSize64x64 = 1,
+};
+
+
+// friend game played information
+#pragma pack( push, 8 )
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // gets the avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetFriendAvatar( CSteamID steamIDFriend, int eAvatarSize ) = 0;
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ 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
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "LobbyInvite", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID ) = 0;
+
+ // 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 "SteamFriends006"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_110/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_110/isteamgamecoordinator.h
new file mode 100644
index 00000000..dded0942
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/isteamgamecoordinator.h
@@ -0,0 +1,65 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_110/isteamgameserver.h b/lsteamclient/steamworks_sdk_110/isteamgameserver.h
new file mode 100644
index 00000000..bad4d35f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/isteamgameserver.h
@@ -0,0 +1,226 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+ // connection functions
+ virtual void LogOn() = 0;
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // You shouldn't need to call this as it is called internally by SteamGameServer_Init() and can only be called once.
+ //
+ // To update the data in this call which may change during the servers lifetime see UpdateServerStatus() below.
+ //
+ // Input: nGameAppID - The Steam assigned AppID for the game
+ // unServerFlags - Any applicable combination of flags (see k_unServerFlag____ constants below)
+ // unGameIP - The IP Address the server is listening for client connections on (might be INADDR_ANY)
+ // unGamePort - The port which the server is listening for client connections on
+ // unSpectatorPort - the port on which spectators can join to observe the server, 0 if spectating is not supported
+ // usQueryPort - The port which the ISteamMasterServerUpdater API should use in order to listen for matchmaking requests
+ // pchGameDir - A unique string identifier for your game
+ // pchVersion - The current version of the server as a string like 1.0.0.0
+ // bLanMode - Is this a LAN only server?
+ //
+ // bugbug jmccaskey - figure out how to remove this from the API and only expose via SteamGameServer_Init... or make this actually used,
+ // and stop calling it in SteamGameServer_Init()?
+ virtual bool BSetServerType( uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort,
+ uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0;
+
+ // Updates server status values which shows up in the server browser and matchmaking APIs
+ virtual void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers,
+ const char *pchServerName, const char *pSpectatorServerName,
+ const char *pchMapName ) = 0;
+
+ // This can be called if spectator goes away or comes back (passing 0 means there is no spectator server now).
+ virtual void UpdateSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ // Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+ // Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ // don't set this unless it actually changes, its only uploaded to the master once (when
+ // acknowledged)
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer010"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_110/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_110/isteamgameserverstats.h
new file mode 100644
index 00000000..988b284d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/isteamgameserverstats.h
@@ -0,0 +1,93 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_110/isteamgamestats.h b/lsteamclient/steamworks_sdk_110/isteamgamestats.h
new file mode 100644
index 00000000..57681f48
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/isteamgamestats.h
@@ -0,0 +1,75 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game play statistics
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESTATS_H
+#define ISTEAMGAMESTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for recording game play sessions and details thereof
+//-----------------------------------------------------------------------------
+class ISteamGameStats
+{
+public:
+ virtual SteamAPICall_t GetNewSession( int8 nAccountType, uint64 ulAccountID, int32 nAppID, RTime32 rtTimeStarted ) = 0;
+ virtual SteamAPICall_t EndSession( uint64 ulSessionID, RTime32 rtTimeEnded, int nReasonCode ) = 0;
+ virtual EResult AddSessionAttributeInt( uint64 ulSessionID, const char* pstrName, int32 nData ) = 0;
+ virtual EResult AddSessionAttributeString( uint64 ulSessionID, const char* pstrName, const char *pstrData ) = 0;
+ virtual EResult AddSessionAttributeFloat( uint64 ulSessionID, const char* pstrName, float fData ) = 0;
+
+ virtual EResult AddNewRow( uint64 *pulRowID, uint64 ulSessionID, const char *pstrTableName ) = 0;
+ virtual EResult CommitRow( uint64 ulRowID ) = 0;
+ virtual EResult CommitOutstandingRows( uint64 ulSessionID ) = 0;
+ virtual EResult AddRowAttributeInt( uint64 ulRowID, const char *pstrName, int32 nData ) = 0;
+ virtual EResult AddRowAtributeString( uint64 ulRowID, const char *pstrName, const char *pstrData ) = 0;
+ virtual EResult AddRowAttributeFloat( uint64 ulRowID, const char *pstrName, float fData ) = 0;
+
+ virtual EResult AddSessionAttributeInt64( uint64 ulSessionID, const char *pstrName, int64 llData ) = 0;
+ virtual EResult AddRowAttributeInt64( uint64 ulRowID, const char *pstrName, int64 llData ) = 0;
+};
+
+#define STEAMGAMESTATS_INTERFACE_VERSION "SteamGameStats001"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: nAccountType for GetNewSession
+//-----------------------------------------------------------------------------
+enum EGameStatsAccountType
+{
+ k_EGameStatsAccountType_Steam = 1, // ullAccountID is a 64-bit SteamID for a player
+ k_EGameStatsAccountType_Xbox = 2, // ullAccountID is a 64-bit XUID
+ k_EGameStatsAccountType_SteamGameServer = 3, // ullAccountID is a 64-bit SteamID for a game server
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for GetNewSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionIssued_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 1 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+ bool m_bCollectingAny;
+ bool m_bCollectingDetails;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for EndSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionClosed_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 2 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+};
+
+#endif // ISTEAMGAMESTATS_H
diff --git a/lsteamclient/steamworks_sdk_110/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_110/isteammasterserverupdater.h
new file mode 100644
index 00000000..9ea09a8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/isteammasterserverupdater.h
@@ -0,0 +1,103 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for retrieving list of game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMMASTERSERVERUPDATER_H
+#define ISTEAMMASTERSERVERUPDATER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game engines use this to tell the Steam master servers
+// about their games so their games can show up in the server browser.
+//-----------------------------------------------------------------------------
+class ISteamMasterServerUpdater
+{
+public:
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void SetActive( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+
+// These are in GameSocketShare mode, where instead of ISteamMasterServerUpdater creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+
+// Functions to set various fields that are used to respond to queries.
+
+ // Call this to set basic data that is passed to the server browser.
+ virtual void SetBasicServerData(
+ unsigned short nProtocolVersion,
+ bool bDedicatedServer,
+ const char *pRegionName,
+ const char *pProductName,
+ unsigned short nMaxReportedClients,
+ bool bPasswordProtected,
+ const char *pGameDescription ) = 0;
+
+ // Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ // Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+
+ // You can call this upon shutdown to clear out data stored for this game server and
+ // to tell the master servers that this server is going away.
+ virtual void NotifyShutdown() = 0;
+
+ // Returns true if the master server has requested a restart.
+ // Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+ // Force it to request a heartbeat from the master servers.
+ virtual void ForceHeartbeat() = 0;
+
+ // Manually edit and query the master server list.
+ // It will provide name resolution and use the default master server port if none is provided.
+ virtual bool AddMasterServer( const char *pServerAddress ) = 0;
+ virtual bool RemoveMasterServer( const char *pServerAddress ) = 0;
+
+ virtual int GetNumMasterServers() = 0;
+
+ // Returns the # of bytes written to pOut.
+ virtual int GetMasterServerAddress( int iServer, char *pOut, int outBufferSize ) = 0;
+};
+
+#define STEAMMASTERSERVERUPDATER_INTERFACE_VERSION "SteamMasterServerUpdater001"
+
+#endif // ISTEAMMASTERSERVERUPDATER_H
diff --git a/lsteamclient/steamworks_sdk_110/isteammatchmaking.h b/lsteamclient/steamworks_sdk_110/isteammatchmaking.h
new file mode 100644
index 00000000..699eea83
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/isteammatchmaking.h
@@ -0,0 +1,634 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or close, but looking further if the current region has infrequent lobby activity (the default)
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this pointer
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // restart are returned by a LobbyDataUpdate_t callback
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking008"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamMasterServerUpdater->SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+#pragma pack( pop )
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_110/isteamnetworking.h b/lsteamclient/steamworks_sdk_110/isteamnetworking.h
new file mode 100644
index 00000000..5161fc21
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/isteamnetworking.h
@@ -0,0 +1,278 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#pragma pack( push, 8 )
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking003"
+
+// callbacks
+#pragma pack( push, 8 )
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_110/isteamremotestorage.h b/lsteamclient/steamworks_sdk_110/isteamremotestorage.h
new file mode 100644
index 00000000..8287228b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/isteamremotestorage.h
@@ -0,0 +1,45 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileExists( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // quota management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION002"
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_110/isteamuser.h b/lsteamclient/steamworks_sdk_110/isteamuser.h
new file mode 100644
index 00000000..e12750e5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/isteamuser.h
@@ -0,0 +1,233 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#pragma pack( push, 8 )
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at 11025 samples per second.
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten ) = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser013"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_110/isteamuserstats.h b/lsteamclient/steamworks_sdk_110/isteamuserstats.h
new file mode 100644
index 00000000..35e8e728
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/isteamuserstats.h
@@ -0,0 +1,331 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#pragma pack( push, 8 )
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconReady_t callback
+ // which will notify you when the bits are actually read. If the callback still returns zero, then there is no image set
+ // and there never will be.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+ // Get general attributes (display name / text, etc) for an Achievement
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION007"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in ClientUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+//
+// IMPORTANT! k_iSteamUserStatsCallbacks + 10 is used, see iclientuserstats.h
+//
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_110/isteamutils.h b/lsteamclient/steamworks_sdk_110/isteamutils.h
new file mode 100644
index 00000000..c83a3461
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/isteamutils.h
@@ -0,0 +1,182 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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/lsteamclient/steamworks_sdk_110/matchmakingtypes.h b/lsteamclient/steamworks_sdk_110/matchmakingtypes.h
new file mode 100644
index 00000000..2f6f8380
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/matchmakingtypes.h
@@ -0,0 +1,230 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ void Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort );
+ netadr_t& GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline void servernetadr_t::Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort )
+{
+ Init( ipAndQueryPort.GetIP(), ipAndQueryPort.GetPort(), usConnectionPort );
+}
+
+inline netadr_t& servernetadr_t::GetIPAndQueryPort()
+{
+ static netadr_t netAdr;
+ netAdr.SetIP( m_unIP );
+ netAdr.SetPort( m_usQueryPort );
+ return netAdr;
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; // IP/Query Port/Connection Port for this server
+ int m_nPing; // current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; // server has responded successfully in the past
+ bool m_bDoNotRefresh; // server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[32]; // current game directory
+ char m_szMap[32]; // current map
+ char m_szGameDescription[64]; // game description
+ uint32 m_nAppID; // Steam App ID of this server
+ int m_nPlayers; // current number of players on the server
+ int m_nMaxPlayers; // Maximum players that can join this server
+ int m_nBotPlayers; // Number of bots (i.e simulated players) on this server
+ bool m_bPassword; // true if this server needs a password to join
+ bool m_bSecure; // Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; // time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; // server version as reported to Steam
+
+private:
+ char m_szServerName[64]; // Game server name
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ char m_szGameTags[128]; // the tags this server exposes
+ CSteamID m_steamID; // steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_110/steam_api.h b/lsteamclient/steamworks_sdk_110/steam_api.h
new file mode 100644
index 00000000..6afa0d4f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/steam_api.h
@@ -0,0 +1,467 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+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 )
+// 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();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+S_API bool SteamAPI_Init();
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_110/steam_gameserver.h b/lsteamclient/steamworks_sdk_110/steam_gameserver.h
new file mode 100644
index 00000000..014f53e6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/steam_gameserver.h
@@ -0,0 +1,143 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteammasterserverupdater.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Note: if you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it will use "GameSocketShare" mode,
+// which means that the game is responsible for sending and receiving UDP packets for the master
+// server updater. See references to GameSocketShare in isteammasterserverupdater.h.
+//
+// Pass 0 for usGamePort or usSpectatorPort if you're not using that. Then, the master server updater will report
+// what's running based on that.
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamMasterServerUpdater *SteamMasterServerUpdater();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamMasterServerUpdater *SteamMasterServerUpdater() { return m_pSteamMasterServerUpdater; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamMasterServerUpdater *m_pSteamMasterServerUpdater;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamMasterServerUpdater = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamMasterServerUpdater = g_pSteamClientGameServer->GetISteamMasterServerUpdater( hSteamUser, hSteamPipe, STEAMMASTERSERVERUPDATER_INTERFACE_VERSION );
+ if ( !m_pSteamMasterServerUpdater )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_110/steamclientpublic.h b/lsteamclient/steamworks_sdk_110/steamclientpublic.h
new file mode 100644
index 00000000..a0facb30
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/steamclientpublic.h
@@ -0,0 +1,917 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ // k_EAccountTypeP2PSuperSeeder = 9, // unused
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionCompleteDisabled = 1,
+ k_EStatusDepotVersionCompleteEnabledBeta = 2,
+ k_EStatusDepotVersionCompleteEnabledPublic = 3,
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const int k_unSteamAccountInstanceMask = 0x000FFFFF;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows | k_EMarketingMessageFlagsPlatformMac,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( 1 != unAccountInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ m_steamid.m_comp.m_unAccountInstance = 1;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & 0xFFFFFFFF ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & 0xFFFFF ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = 1; // individual accounts always have an account instance ID of 1
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id?
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ uint32 GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID (used for multiseat type accounts only)
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 1 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+ return true;
+}
+
+
+// generic invalid CSteamID
+const CSteamID k_steamIDNil;
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+const CSteamID k_steamIDOutofDateGS( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID comes from a user game connection to an sv_lan GS
+const CSteamID k_steamIDLanModeGS( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+const CSteamID k_steamIDNotInitYetGS( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+const CSteamID k_steamIDNonSteamGS( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+ break;
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+ break;
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+ break;
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_110/steamtypes.h b/lsteamclient/steamworks_sdk_110/steamtypes.h
new file mode 100644
index 00000000..44a20e61
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_110/steamtypes.h
@@ -0,0 +1,123 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_111/isteamapps.h b/lsteamclient/steamworks_sdk_111/isteamapps.h
new file mode 100644
index 00000000..ec0e87b7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/isteamapps.h
@@ -0,0 +1,49 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION003"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_111/isteamclient.h b/lsteamclient/steamworks_sdk_111/isteamclient.h
new file mode 100644
index 00000000..7ec7ac78
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/isteamclient.h
@@ -0,0 +1,163 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMasterServerUpdater;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamGameServerStats;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMasterServerUpdater interface
+ virtual ISteamMasterServerUpdater *GetISteamMasterServerUpdater( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient009"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_111/isteamfriends.h b/lsteamclient/steamworks_sdk_111/isteamfriends.h
new file mode 100644
index 00000000..baf646a5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/isteamfriends.h
@@ -0,0 +1,286 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#pragma pack( push, 8 )
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ 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
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "LobbyInvite", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID ) = 0;
+
+ // 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;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends007"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_111/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_111/isteamgamecoordinator.h
new file mode 100644
index 00000000..dded0942
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/isteamgamecoordinator.h
@@ -0,0 +1,65 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_111/isteamgameserver.h b/lsteamclient/steamworks_sdk_111/isteamgameserver.h
new file mode 100644
index 00000000..bad4d35f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/isteamgameserver.h
@@ -0,0 +1,226 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+ // connection functions
+ virtual void LogOn() = 0;
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // You shouldn't need to call this as it is called internally by SteamGameServer_Init() and can only be called once.
+ //
+ // To update the data in this call which may change during the servers lifetime see UpdateServerStatus() below.
+ //
+ // Input: nGameAppID - The Steam assigned AppID for the game
+ // unServerFlags - Any applicable combination of flags (see k_unServerFlag____ constants below)
+ // unGameIP - The IP Address the server is listening for client connections on (might be INADDR_ANY)
+ // unGamePort - The port which the server is listening for client connections on
+ // unSpectatorPort - the port on which spectators can join to observe the server, 0 if spectating is not supported
+ // usQueryPort - The port which the ISteamMasterServerUpdater API should use in order to listen for matchmaking requests
+ // pchGameDir - A unique string identifier for your game
+ // pchVersion - The current version of the server as a string like 1.0.0.0
+ // bLanMode - Is this a LAN only server?
+ //
+ // bugbug jmccaskey - figure out how to remove this from the API and only expose via SteamGameServer_Init... or make this actually used,
+ // and stop calling it in SteamGameServer_Init()?
+ virtual bool BSetServerType( uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort,
+ uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0;
+
+ // Updates server status values which shows up in the server browser and matchmaking APIs
+ virtual void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers,
+ const char *pchServerName, const char *pSpectatorServerName,
+ const char *pchMapName ) = 0;
+
+ // This can be called if spectator goes away or comes back (passing 0 means there is no spectator server now).
+ virtual void UpdateSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ // Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+ // Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ // don't set this unless it actually changes, its only uploaded to the master once (when
+ // acknowledged)
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer010"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_111/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_111/isteamgameserverstats.h
new file mode 100644
index 00000000..988b284d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/isteamgameserverstats.h
@@ -0,0 +1,93 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_111/isteamgamestats.h b/lsteamclient/steamworks_sdk_111/isteamgamestats.h
new file mode 100644
index 00000000..57681f48
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/isteamgamestats.h
@@ -0,0 +1,75 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game play statistics
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESTATS_H
+#define ISTEAMGAMESTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for recording game play sessions and details thereof
+//-----------------------------------------------------------------------------
+class ISteamGameStats
+{
+public:
+ virtual SteamAPICall_t GetNewSession( int8 nAccountType, uint64 ulAccountID, int32 nAppID, RTime32 rtTimeStarted ) = 0;
+ virtual SteamAPICall_t EndSession( uint64 ulSessionID, RTime32 rtTimeEnded, int nReasonCode ) = 0;
+ virtual EResult AddSessionAttributeInt( uint64 ulSessionID, const char* pstrName, int32 nData ) = 0;
+ virtual EResult AddSessionAttributeString( uint64 ulSessionID, const char* pstrName, const char *pstrData ) = 0;
+ virtual EResult AddSessionAttributeFloat( uint64 ulSessionID, const char* pstrName, float fData ) = 0;
+
+ virtual EResult AddNewRow( uint64 *pulRowID, uint64 ulSessionID, const char *pstrTableName ) = 0;
+ virtual EResult CommitRow( uint64 ulRowID ) = 0;
+ virtual EResult CommitOutstandingRows( uint64 ulSessionID ) = 0;
+ virtual EResult AddRowAttributeInt( uint64 ulRowID, const char *pstrName, int32 nData ) = 0;
+ virtual EResult AddRowAtributeString( uint64 ulRowID, const char *pstrName, const char *pstrData ) = 0;
+ virtual EResult AddRowAttributeFloat( uint64 ulRowID, const char *pstrName, float fData ) = 0;
+
+ virtual EResult AddSessionAttributeInt64( uint64 ulSessionID, const char *pstrName, int64 llData ) = 0;
+ virtual EResult AddRowAttributeInt64( uint64 ulRowID, const char *pstrName, int64 llData ) = 0;
+};
+
+#define STEAMGAMESTATS_INTERFACE_VERSION "SteamGameStats001"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: nAccountType for GetNewSession
+//-----------------------------------------------------------------------------
+enum EGameStatsAccountType
+{
+ k_EGameStatsAccountType_Steam = 1, // ullAccountID is a 64-bit SteamID for a player
+ k_EGameStatsAccountType_Xbox = 2, // ullAccountID is a 64-bit XUID
+ k_EGameStatsAccountType_SteamGameServer = 3, // ullAccountID is a 64-bit SteamID for a game server
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for GetNewSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionIssued_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 1 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+ bool m_bCollectingAny;
+ bool m_bCollectingDetails;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for EndSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionClosed_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 2 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+};
+
+#endif // ISTEAMGAMESTATS_H
diff --git a/lsteamclient/steamworks_sdk_111/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_111/isteammasterserverupdater.h
new file mode 100644
index 00000000..9ea09a8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/isteammasterserverupdater.h
@@ -0,0 +1,103 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for retrieving list of game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMMASTERSERVERUPDATER_H
+#define ISTEAMMASTERSERVERUPDATER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game engines use this to tell the Steam master servers
+// about their games so their games can show up in the server browser.
+//-----------------------------------------------------------------------------
+class ISteamMasterServerUpdater
+{
+public:
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void SetActive( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+
+// These are in GameSocketShare mode, where instead of ISteamMasterServerUpdater creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+
+// Functions to set various fields that are used to respond to queries.
+
+ // Call this to set basic data that is passed to the server browser.
+ virtual void SetBasicServerData(
+ unsigned short nProtocolVersion,
+ bool bDedicatedServer,
+ const char *pRegionName,
+ const char *pProductName,
+ unsigned short nMaxReportedClients,
+ bool bPasswordProtected,
+ const char *pGameDescription ) = 0;
+
+ // Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ // Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+
+ // You can call this upon shutdown to clear out data stored for this game server and
+ // to tell the master servers that this server is going away.
+ virtual void NotifyShutdown() = 0;
+
+ // Returns true if the master server has requested a restart.
+ // Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+ // Force it to request a heartbeat from the master servers.
+ virtual void ForceHeartbeat() = 0;
+
+ // Manually edit and query the master server list.
+ // It will provide name resolution and use the default master server port if none is provided.
+ virtual bool AddMasterServer( const char *pServerAddress ) = 0;
+ virtual bool RemoveMasterServer( const char *pServerAddress ) = 0;
+
+ virtual int GetNumMasterServers() = 0;
+
+ // Returns the # of bytes written to pOut.
+ virtual int GetMasterServerAddress( int iServer, char *pOut, int outBufferSize ) = 0;
+};
+
+#define STEAMMASTERSERVERUPDATER_INTERFACE_VERSION "SteamMasterServerUpdater001"
+
+#endif // ISTEAMMASTERSERVERUPDATER_H
diff --git a/lsteamclient/steamworks_sdk_111/isteammatchmaking.h b/lsteamclient/steamworks_sdk_111/isteammatchmaking.h
new file mode 100644
index 00000000..699eea83
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/isteammatchmaking.h
@@ -0,0 +1,634 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or close, but looking further if the current region has infrequent lobby activity (the default)
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this pointer
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // restart are returned by a LobbyDataUpdate_t callback
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking008"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamMasterServerUpdater->SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+#pragma pack( pop )
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_111/isteamnetworking.h b/lsteamclient/steamworks_sdk_111/isteamnetworking.h
new file mode 100644
index 00000000..73d50e42
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/isteamnetworking.h
@@ -0,0 +1,281 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#pragma pack( push, 8 )
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ // nVirtualPort is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same nVirtualPort number in order to retrieve the data on the other end
+ // using different virtual ports to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nVirtualPort = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nVirtualPort = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nVirtualPort = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking004"
+
+// callbacks
+#pragma pack( push, 8 )
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_111/isteamremotestorage.h b/lsteamclient/steamworks_sdk_111/isteamremotestorage.h
new file mode 100644
index 00000000..8287228b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/isteamremotestorage.h
@@ -0,0 +1,45 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileExists( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // quota management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION002"
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_111/isteamuser.h b/lsteamclient/steamworks_sdk_111/isteamuser.h
new file mode 100644
index 00000000..d56af795
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/isteamuser.h
@@ -0,0 +1,267 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#pragma pack( push, 8 )
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at 11025 samples per second.
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten ) = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+#ifdef _PS3
+ // Logs a user into Steam by using his login name and password
+ virtual void LogOn( const char *pchUserName, const char *pchPassword ) = 0;
+#endif
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser014"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_111/isteamuserstats.h b/lsteamclient/steamworks_sdk_111/isteamuserstats.h
new file mode 100644
index 00000000..35e8e728
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/isteamuserstats.h
@@ -0,0 +1,331 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#pragma pack( push, 8 )
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconReady_t callback
+ // which will notify you when the bits are actually read. If the callback still returns zero, then there is no image set
+ // and there never will be.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+ // Get general attributes (display name / text, etc) for an Achievement
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION007"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in ClientUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+//
+// IMPORTANT! k_iSteamUserStatsCallbacks + 10 is used, see iclientuserstats.h
+//
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_111/isteamutils.h b/lsteamclient/steamworks_sdk_111/isteamutils.h
new file mode 100644
index 00000000..4d046496
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/isteamutils.h
@@ -0,0 +1,189 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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 an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils005"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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/lsteamclient/steamworks_sdk_111/matchmakingtypes.h b/lsteamclient/steamworks_sdk_111/matchmakingtypes.h
new file mode 100644
index 00000000..2f6f8380
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/matchmakingtypes.h
@@ -0,0 +1,230 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ void Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort );
+ netadr_t& GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline void servernetadr_t::Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort )
+{
+ Init( ipAndQueryPort.GetIP(), ipAndQueryPort.GetPort(), usConnectionPort );
+}
+
+inline netadr_t& servernetadr_t::GetIPAndQueryPort()
+{
+ static netadr_t netAdr;
+ netAdr.SetIP( m_unIP );
+ netAdr.SetPort( m_usQueryPort );
+ return netAdr;
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; // IP/Query Port/Connection Port for this server
+ int m_nPing; // current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; // server has responded successfully in the past
+ bool m_bDoNotRefresh; // server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[32]; // current game directory
+ char m_szMap[32]; // current map
+ char m_szGameDescription[64]; // game description
+ uint32 m_nAppID; // Steam App ID of this server
+ int m_nPlayers; // current number of players on the server
+ int m_nMaxPlayers; // Maximum players that can join this server
+ int m_nBotPlayers; // Number of bots (i.e simulated players) on this server
+ bool m_bPassword; // true if this server needs a password to join
+ bool m_bSecure; // Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; // time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; // server version as reported to Steam
+
+private:
+ char m_szServerName[64]; // Game server name
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ char m_szGameTags[128]; // the tags this server exposes
+ CSteamID m_steamID; // steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_111/steam_api.h b/lsteamclient/steamworks_sdk_111/steam_api.h
new file mode 100644
index 00000000..7f12bc1b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/steam_api.h
@@ -0,0 +1,483 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+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 )
+// 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 );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+struct SteamPS3Params_t
+{
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ];
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ];
+};
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool SteamAPI_Init();
+#endif
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_111/steam_gameserver.h b/lsteamclient/steamworks_sdk_111/steam_gameserver.h
new file mode 100644
index 00000000..98dfc6c3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/steam_gameserver.h
@@ -0,0 +1,157 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteammasterserverupdater.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Note: if you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it will use "GameSocketShare" mode,
+// which means that the game is responsible for sending and receiving UDP packets for the master
+// server updater. See references to GameSocketShare in isteammasterserverupdater.h.
+//
+// Pass 0 for usGamePort or usSpectatorPort if you're not using that. Then, the master server updater will report
+// what's running based on that.
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamMasterServerUpdater *SteamMasterServerUpdater();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamMasterServerUpdater *SteamMasterServerUpdater() { return m_pSteamMasterServerUpdater; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamMasterServerUpdater *m_pSteamMasterServerUpdater;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamMasterServerUpdater = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamMasterServerUpdater = g_pSteamClientGameServer->GetISteamMasterServerUpdater( hSteamUser, hSteamPipe, STEAMMASTERSERVERUPDATER_INTERFACE_VERSION );
+ if ( !m_pSteamMasterServerUpdater )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_111/steamclientpublic.h b/lsteamclient/steamworks_sdk_111/steamclientpublic.h
new file mode 100644
index 00000000..6e863762
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/steamclientpublic.h
@@ -0,0 +1,936 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ // k_EAccountTypeP2PSuperSeeder = 9, // unused
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const int k_unSteamAccountInstanceMask = 0x000FFFFF;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows | k_EMarketingMessageFlagsPlatformMac,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( 1 != unAccountInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ m_steamid.m_comp.m_unAccountInstance = 1;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & 0xFFFFFFFF ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & 0xFFFFF ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = 1; // individual accounts always have an account instance ID of 1
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id?
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ uint32 GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID (used for multiseat type accounts only)
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID (used for multiseat type accounts only)
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 1 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+ return true;
+}
+
+
+// generic invalid CSteamID
+const CSteamID k_steamIDNil;
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+const CSteamID k_steamIDOutofDateGS( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID comes from a user game connection to an sv_lan GS
+const CSteamID k_steamIDLanModeGS( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+const CSteamID k_steamIDNotInitYetGS( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+const CSteamID k_steamIDNonSteamGS( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid );
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_111/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_111/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_111/steamtypes.h b/lsteamclient/steamworks_sdk_111/steamtypes.h
new file mode 100644
index 00000000..975ff914
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_111/steamtypes.h
@@ -0,0 +1,128 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_112/isteamapps.h b/lsteamclient/steamworks_sdk_112/isteamapps.h
new file mode 100644
index 00000000..d27cd355
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/isteamapps.h
@@ -0,0 +1,57 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION004"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_112/isteamappticket.h b/lsteamclient/steamworks_sdk_112/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_112/isteamclient.h b/lsteamclient/steamworks_sdk_112/isteamclient.h
new file mode 100644
index 00000000..7b6a6772
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/isteamclient.h
@@ -0,0 +1,166 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMasterServerUpdater;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamGameServerStats;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMasterServerUpdater interface
+ virtual ISteamMasterServerUpdater *GetISteamMasterServerUpdater( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient010"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_112/isteamfriends.h b/lsteamclient/steamworks_sdk_112/isteamfriends.h
new file mode 100644
index 00000000..900241c4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/isteamfriends.h
@@ -0,0 +1,339 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#pragma pack( push, 8 )
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionChat = 2, // user is not allowed to send/recv text/voice chat
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ 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
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "LobbyInvite", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID ) = 0;
+
+ // 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;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends008"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_112/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_112/isteamgamecoordinator.h
new file mode 100644
index 00000000..dded0942
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/isteamgamecoordinator.h
@@ -0,0 +1,65 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_112/isteamgameserver.h b/lsteamclient/steamworks_sdk_112/isteamgameserver.h
new file mode 100644
index 00000000..6ad98b39
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/isteamgameserver.h
@@ -0,0 +1,244 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+ // connection functions
+ virtual void LogOn() = 0;
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // You shouldn't need to call this as it is called internally by SteamGameServer_Init() and can only be called once.
+ //
+ // To update the data in this call which may change during the servers lifetime see UpdateServerStatus() below.
+ //
+ // Input: nGameAppID - The Steam assigned AppID for the game
+ // unServerFlags - Any applicable combination of flags (see k_unServerFlag____ constants below)
+ // unGameIP - The IP Address the server is listening for client connections on (might be INADDR_ANY)
+ // unGamePort - The port which the server is listening for client connections on
+ // unSpectatorPort - the port on which spectators can join to observe the server, 0 if spectating is not supported
+ // usQueryPort - The port which the ISteamMasterServerUpdater API should use in order to listen for matchmaking requests
+ // pchGameDir - A unique string identifier for your game
+ // pchVersion - The current version of the server as a string like 1.0.0.0
+ // bLanMode - Is this a LAN only server?
+ //
+ // bugbug jmccaskey - figure out how to remove this from the API and only expose via SteamGameServer_Init... or make this actually used,
+ // and stop calling it in SteamGameServer_Init()?
+ virtual bool BSetServerType( uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort,
+ uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0;
+
+ // Updates server status values which shows up in the server browser and matchmaking APIs
+ virtual void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers,
+ const char *pchServerName, const char *pSpectatorServerName,
+ const char *pchMapName ) = 0;
+
+ // This can be called if spectator goes away or comes back (passing 0 means there is no spectator server now).
+ virtual void UpdateSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ // Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+ // Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ // don't set this unless it actually changes, its only uploaded to the master once (when
+ // acknowledged)
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer010"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_112/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_112/isteamgameserverstats.h
new file mode 100644
index 00000000..988b284d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/isteamgameserverstats.h
@@ -0,0 +1,93 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_112/isteamgamestats.h b/lsteamclient/steamworks_sdk_112/isteamgamestats.h
new file mode 100644
index 00000000..57681f48
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/isteamgamestats.h
@@ -0,0 +1,75 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game play statistics
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESTATS_H
+#define ISTEAMGAMESTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for recording game play sessions and details thereof
+//-----------------------------------------------------------------------------
+class ISteamGameStats
+{
+public:
+ virtual SteamAPICall_t GetNewSession( int8 nAccountType, uint64 ulAccountID, int32 nAppID, RTime32 rtTimeStarted ) = 0;
+ virtual SteamAPICall_t EndSession( uint64 ulSessionID, RTime32 rtTimeEnded, int nReasonCode ) = 0;
+ virtual EResult AddSessionAttributeInt( uint64 ulSessionID, const char* pstrName, int32 nData ) = 0;
+ virtual EResult AddSessionAttributeString( uint64 ulSessionID, const char* pstrName, const char *pstrData ) = 0;
+ virtual EResult AddSessionAttributeFloat( uint64 ulSessionID, const char* pstrName, float fData ) = 0;
+
+ virtual EResult AddNewRow( uint64 *pulRowID, uint64 ulSessionID, const char *pstrTableName ) = 0;
+ virtual EResult CommitRow( uint64 ulRowID ) = 0;
+ virtual EResult CommitOutstandingRows( uint64 ulSessionID ) = 0;
+ virtual EResult AddRowAttributeInt( uint64 ulRowID, const char *pstrName, int32 nData ) = 0;
+ virtual EResult AddRowAtributeString( uint64 ulRowID, const char *pstrName, const char *pstrData ) = 0;
+ virtual EResult AddRowAttributeFloat( uint64 ulRowID, const char *pstrName, float fData ) = 0;
+
+ virtual EResult AddSessionAttributeInt64( uint64 ulSessionID, const char *pstrName, int64 llData ) = 0;
+ virtual EResult AddRowAttributeInt64( uint64 ulRowID, const char *pstrName, int64 llData ) = 0;
+};
+
+#define STEAMGAMESTATS_INTERFACE_VERSION "SteamGameStats001"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: nAccountType for GetNewSession
+//-----------------------------------------------------------------------------
+enum EGameStatsAccountType
+{
+ k_EGameStatsAccountType_Steam = 1, // ullAccountID is a 64-bit SteamID for a player
+ k_EGameStatsAccountType_Xbox = 2, // ullAccountID is a 64-bit XUID
+ k_EGameStatsAccountType_SteamGameServer = 3, // ullAccountID is a 64-bit SteamID for a game server
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for GetNewSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionIssued_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 1 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+ bool m_bCollectingAny;
+ bool m_bCollectingDetails;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for EndSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionClosed_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 2 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+};
+
+#endif // ISTEAMGAMESTATS_H
diff --git a/lsteamclient/steamworks_sdk_112/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_112/isteammasterserverupdater.h
new file mode 100644
index 00000000..9ea09a8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/isteammasterserverupdater.h
@@ -0,0 +1,103 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for retrieving list of game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMMASTERSERVERUPDATER_H
+#define ISTEAMMASTERSERVERUPDATER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game engines use this to tell the Steam master servers
+// about their games so their games can show up in the server browser.
+//-----------------------------------------------------------------------------
+class ISteamMasterServerUpdater
+{
+public:
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void SetActive( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+
+// These are in GameSocketShare mode, where instead of ISteamMasterServerUpdater creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+
+// Functions to set various fields that are used to respond to queries.
+
+ // Call this to set basic data that is passed to the server browser.
+ virtual void SetBasicServerData(
+ unsigned short nProtocolVersion,
+ bool bDedicatedServer,
+ const char *pRegionName,
+ const char *pProductName,
+ unsigned short nMaxReportedClients,
+ bool bPasswordProtected,
+ const char *pGameDescription ) = 0;
+
+ // Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ // Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+
+ // You can call this upon shutdown to clear out data stored for this game server and
+ // to tell the master servers that this server is going away.
+ virtual void NotifyShutdown() = 0;
+
+ // Returns true if the master server has requested a restart.
+ // Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+ // Force it to request a heartbeat from the master servers.
+ virtual void ForceHeartbeat() = 0;
+
+ // Manually edit and query the master server list.
+ // It will provide name resolution and use the default master server port if none is provided.
+ virtual bool AddMasterServer( const char *pServerAddress ) = 0;
+ virtual bool RemoveMasterServer( const char *pServerAddress ) = 0;
+
+ virtual int GetNumMasterServers() = 0;
+
+ // Returns the # of bytes written to pOut.
+ virtual int GetMasterServerAddress( int iServer, char *pOut, int outBufferSize ) = 0;
+};
+
+#define STEAMMASTERSERVERUPDATER_INTERFACE_VERSION "SteamMasterServerUpdater001"
+
+#endif // ISTEAMMASTERSERVERUPDATER_H
diff --git a/lsteamclient/steamworks_sdk_112/isteammatchmaking.h b/lsteamclient/steamworks_sdk_112/isteammatchmaking.h
new file mode 100644
index 00000000..03f253fd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/isteammatchmaking.h
@@ -0,0 +1,638 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or close, but looking further if the current region has infrequent lobby activity (the default)
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this pointer
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking008"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamMasterServerUpdater->SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+#pragma pack( pop )
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_112/isteamnetworking.h b/lsteamclient/steamworks_sdk_112/isteamnetworking.h
new file mode 100644
index 00000000..73d50e42
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/isteamnetworking.h
@@ -0,0 +1,281 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#pragma pack( push, 8 )
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ // nVirtualPort is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same nVirtualPort number in order to retrieve the data on the other end
+ // using different virtual ports to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nVirtualPort = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nVirtualPort = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nVirtualPort = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking004"
+
+// callbacks
+#pragma pack( push, 8 )
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_112/isteamremotestorage.h b/lsteamclient/steamworks_sdk_112/isteamremotestorage.h
new file mode 100644
index 00000000..f0730901
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/isteamremotestorage.h
@@ -0,0 +1,178 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1 ),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent ) = 0;
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead ) = 0;
+
+ // user generated content iteration
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+#if _PS3
+ // synchronization
+ virtual bool SynchronizeToClient() = 0;
+ virtual bool SynchronizeToServer() = 0;
+ virtual bool ResolveSyncConflict( EResolveConflict eResolveConflict ) = 0;
+#endif
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION004"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[260]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4-5 are used, see iclientremotestorage.h
+//
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 8 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char *m_pchFileName; // The name of the file that was downloaded. This pointer is
+ // not guaranteed to be valid indefinitely.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_112/isteamuser.h b/lsteamclient/steamworks_sdk_112/isteamuser.h
new file mode 100644
index 00000000..ca027247
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/isteamuser.h
@@ -0,0 +1,295 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#pragma pack( push, 8 )
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at 11025 samples per second.
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten ) = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultPSNAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultPSNAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser014"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_112/isteamuserstats.h b/lsteamclient/steamworks_sdk_112/isteamuserstats.h
new file mode 100644
index 00000000..b7a8f4df
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/isteamuserstats.h
@@ -0,0 +1,353 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#pragma pack( push, 8 )
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconReady_t callback
+ // which will notify you when the bits are actually read. If the callback still returns zero, then there is no image set
+ // and there never will be.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+ // Get general attributes (display name / text, etc) for an Achievement
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION009"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in ClientUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+//
+// IMPORTANT! k_iSteamUserStatsCallbacks + 10 is used, see iclientuserstats.h
+//
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_112/isteamutils.h b/lsteamclient/steamworks_sdk_112/isteamutils.h
new file mode 100644
index 00000000..dd08ab86
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/isteamutils.h
@@ -0,0 +1,215 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+#endif
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils005"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+#endif
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_112/matchmakingtypes.h b/lsteamclient/steamworks_sdk_112/matchmakingtypes.h
new file mode 100644
index 00000000..2f6f8380
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/matchmakingtypes.h
@@ -0,0 +1,230 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ void Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort );
+ netadr_t& GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline void servernetadr_t::Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort )
+{
+ Init( ipAndQueryPort.GetIP(), ipAndQueryPort.GetPort(), usConnectionPort );
+}
+
+inline netadr_t& servernetadr_t::GetIPAndQueryPort()
+{
+ static netadr_t netAdr;
+ netAdr.SetIP( m_unIP );
+ netAdr.SetPort( m_usQueryPort );
+ return netAdr;
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; // IP/Query Port/Connection Port for this server
+ int m_nPing; // current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; // server has responded successfully in the past
+ bool m_bDoNotRefresh; // server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[32]; // current game directory
+ char m_szMap[32]; // current map
+ char m_szGameDescription[64]; // game description
+ uint32 m_nAppID; // Steam App ID of this server
+ int m_nPlayers; // current number of players on the server
+ int m_nMaxPlayers; // Maximum players that can join this server
+ int m_nBotPlayers; // Number of bots (i.e simulated players) on this server
+ bool m_bPassword; // true if this server needs a password to join
+ bool m_bSecure; // Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; // time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; // server version as reported to Steam
+
+private:
+ char m_szServerName[64]; // Game server name
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ char m_szGameTags[128]; // the tags this server exposes
+ CSteamID m_steamID; // steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_112/steam_api.h b/lsteamclient/steamworks_sdk_112/steam_api.h
new file mode 100644
index 00000000..0c9d4c75
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/steam_api.h
@@ -0,0 +1,509 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+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 )
+// 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();
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+struct SteamPS3Params_t
+{
+ void *pReserved;
+ AppId_t m_nAppId;
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ];
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ bool m_bNeedInitEx;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+};
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool SteamAPI_Init();
+#endif
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_112/steam_gameserver.h b/lsteamclient/steamworks_sdk_112/steam_gameserver.h
new file mode 100644
index 00000000..98dfc6c3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/steam_gameserver.h
@@ -0,0 +1,157 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteammasterserverupdater.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Note: if you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it will use "GameSocketShare" mode,
+// which means that the game is responsible for sending and receiving UDP packets for the master
+// server updater. See references to GameSocketShare in isteammasterserverupdater.h.
+//
+// Pass 0 for usGamePort or usSpectatorPort if you're not using that. Then, the master server updater will report
+// what's running based on that.
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamMasterServerUpdater *SteamMasterServerUpdater();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamMasterServerUpdater *SteamMasterServerUpdater() { return m_pSteamMasterServerUpdater; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamMasterServerUpdater *m_pSteamMasterServerUpdater;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamMasterServerUpdater = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamMasterServerUpdater = g_pSteamClientGameServer->GetISteamMasterServerUpdater( hSteamUser, hSteamPipe, STEAMMASTERSERVERUPDATER_INTERFACE_VERSION );
+ if ( !m_pSteamMasterServerUpdater )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_112/steamclientpublic.h b/lsteamclient/steamworks_sdk_112/steamclientpublic.h
new file mode 100644
index 00000000..852a7596
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/steamclientpublic.h
@@ -0,0 +1,946 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultPSNAccountUnlinked = 57, // Attempt to logon from a PS3 failed because the PSN online id is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultPSNAccountAlreadyLinked = 59, // PSN account is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ // k_EAccountTypeP2PSuperSeeder = 9, // unused
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const int k_unSteamAccountInstanceMask = 0x000FFFFF;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows | k_EMarketingMessageFlagsPlatformMac,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( 1 != unAccountInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ m_steamid.m_comp.m_unAccountInstance = 1;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & 0xFFFFFFFF ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & 0xFFFFF ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = 1; // individual accounts always have an account instance ID of 1
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id?
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ uint32 GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID (used for multiseat type accounts only)
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID (used for multiseat type accounts only)
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 1 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_112/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_112/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_112/steamps3params_internal.h b/lsteamclient/steamworks_sdk_112/steamps3params_internal.h
new file mode 100644
index 00000000..eab1c59a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/steamps3params_internal.h
@@ -0,0 +1,27 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_PS3PARAMSINTERNAL_API_H
+#define STEAM_PS3PARAMSINTERNAL_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Params used only internally at Valve. This is the reserved pointer of SteamPS3Params_t
+//-----------------------------------------------------------------------------
+struct SteamPS3ParamsInternal_t
+{
+ int m_nVersion;
+ EUniverse m_eUniverse;
+ const char *m_pchCMForce; // list of CMs in form "IP:port;IP:port" or "IP;IP"
+};
+
+#define STEAM_PS3_PARAMS_INTERNAL_VERSION 1
+
+
+#endif // STEAM_PS3PARAMSINTERNAL_API_H
diff --git a/lsteamclient/steamworks_sdk_112/steamtypes.h b/lsteamclient/steamworks_sdk_112/steamtypes.h
new file mode 100644
index 00000000..975ff914
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_112/steamtypes.h
@@ -0,0 +1,128 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_113/isteamapps.h b/lsteamclient/steamworks_sdk_113/isteamapps.h
new file mode 100644
index 00000000..f0ea88be
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/isteamapps.h
@@ -0,0 +1,71 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION004"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_113/isteamappticket.h b/lsteamclient/steamworks_sdk_113/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_113/isteamclient.h b/lsteamclient/steamworks_sdk_113/isteamclient.h
new file mode 100644
index 00000000..c37772ed
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/isteamclient.h
@@ -0,0 +1,171 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMasterServerUpdater;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMasterServerUpdater interface
+ virtual ISteamMasterServerUpdater *GetISteamMasterServerUpdater( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient010"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_113/isteamfriends.h b/lsteamclient/steamworks_sdk_113/isteamfriends.h
new file mode 100644
index 00000000..fbdcd09b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/isteamfriends.h
@@ -0,0 +1,398 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#pragma pack( push, 8 )
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ 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
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "LobbyInvite", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID ) = 0;
+
+ // 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;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends009"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_113/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_113/isteamgamecoordinator.h
new file mode 100644
index 00000000..dded0942
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/isteamgamecoordinator.h
@@ -0,0 +1,65 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_113/isteamgameserver.h b/lsteamclient/steamworks_sdk_113/isteamgameserver.h
new file mode 100644
index 00000000..6ad98b39
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/isteamgameserver.h
@@ -0,0 +1,244 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+ // connection functions
+ virtual void LogOn() = 0;
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // You shouldn't need to call this as it is called internally by SteamGameServer_Init() and can only be called once.
+ //
+ // To update the data in this call which may change during the servers lifetime see UpdateServerStatus() below.
+ //
+ // Input: nGameAppID - The Steam assigned AppID for the game
+ // unServerFlags - Any applicable combination of flags (see k_unServerFlag____ constants below)
+ // unGameIP - The IP Address the server is listening for client connections on (might be INADDR_ANY)
+ // unGamePort - The port which the server is listening for client connections on
+ // unSpectatorPort - the port on which spectators can join to observe the server, 0 if spectating is not supported
+ // usQueryPort - The port which the ISteamMasterServerUpdater API should use in order to listen for matchmaking requests
+ // pchGameDir - A unique string identifier for your game
+ // pchVersion - The current version of the server as a string like 1.0.0.0
+ // bLanMode - Is this a LAN only server?
+ //
+ // bugbug jmccaskey - figure out how to remove this from the API and only expose via SteamGameServer_Init... or make this actually used,
+ // and stop calling it in SteamGameServer_Init()?
+ virtual bool BSetServerType( uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort,
+ uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0;
+
+ // Updates server status values which shows up in the server browser and matchmaking APIs
+ virtual void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers,
+ const char *pchServerName, const char *pSpectatorServerName,
+ const char *pchMapName ) = 0;
+
+ // This can be called if spectator goes away or comes back (passing 0 means there is no spectator server now).
+ virtual void UpdateSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ // Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+ // Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ // don't set this unless it actually changes, its only uploaded to the master once (when
+ // acknowledged)
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer010"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_113/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_113/isteamgameserverstats.h
new file mode 100644
index 00000000..988b284d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/isteamgameserverstats.h
@@ -0,0 +1,93 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_113/isteamgamestats.h b/lsteamclient/steamworks_sdk_113/isteamgamestats.h
new file mode 100644
index 00000000..57681f48
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/isteamgamestats.h
@@ -0,0 +1,75 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game play statistics
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESTATS_H
+#define ISTEAMGAMESTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for recording game play sessions and details thereof
+//-----------------------------------------------------------------------------
+class ISteamGameStats
+{
+public:
+ virtual SteamAPICall_t GetNewSession( int8 nAccountType, uint64 ulAccountID, int32 nAppID, RTime32 rtTimeStarted ) = 0;
+ virtual SteamAPICall_t EndSession( uint64 ulSessionID, RTime32 rtTimeEnded, int nReasonCode ) = 0;
+ virtual EResult AddSessionAttributeInt( uint64 ulSessionID, const char* pstrName, int32 nData ) = 0;
+ virtual EResult AddSessionAttributeString( uint64 ulSessionID, const char* pstrName, const char *pstrData ) = 0;
+ virtual EResult AddSessionAttributeFloat( uint64 ulSessionID, const char* pstrName, float fData ) = 0;
+
+ virtual EResult AddNewRow( uint64 *pulRowID, uint64 ulSessionID, const char *pstrTableName ) = 0;
+ virtual EResult CommitRow( uint64 ulRowID ) = 0;
+ virtual EResult CommitOutstandingRows( uint64 ulSessionID ) = 0;
+ virtual EResult AddRowAttributeInt( uint64 ulRowID, const char *pstrName, int32 nData ) = 0;
+ virtual EResult AddRowAtributeString( uint64 ulRowID, const char *pstrName, const char *pstrData ) = 0;
+ virtual EResult AddRowAttributeFloat( uint64 ulRowID, const char *pstrName, float fData ) = 0;
+
+ virtual EResult AddSessionAttributeInt64( uint64 ulSessionID, const char *pstrName, int64 llData ) = 0;
+ virtual EResult AddRowAttributeInt64( uint64 ulRowID, const char *pstrName, int64 llData ) = 0;
+};
+
+#define STEAMGAMESTATS_INTERFACE_VERSION "SteamGameStats001"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: nAccountType for GetNewSession
+//-----------------------------------------------------------------------------
+enum EGameStatsAccountType
+{
+ k_EGameStatsAccountType_Steam = 1, // ullAccountID is a 64-bit SteamID for a player
+ k_EGameStatsAccountType_Xbox = 2, // ullAccountID is a 64-bit XUID
+ k_EGameStatsAccountType_SteamGameServer = 3, // ullAccountID is a 64-bit SteamID for a game server
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for GetNewSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionIssued_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 1 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+ bool m_bCollectingAny;
+ bool m_bCollectingDetails;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for EndSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionClosed_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 2 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+};
+
+#endif // ISTEAMGAMESTATS_H
diff --git a/lsteamclient/steamworks_sdk_113/isteamhttp.h b/lsteamclient/steamworks_sdk_113/isteamhttp.h
new file mode 100644
index 00000000..1d8a7507
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/isteamhttp.h
@@ -0,0 +1,114 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a depot build
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to building depots
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asyncronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION001"
+
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_113/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_113/isteammasterserverupdater.h
new file mode 100644
index 00000000..9ea09a8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/isteammasterserverupdater.h
@@ -0,0 +1,103 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for retrieving list of game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMMASTERSERVERUPDATER_H
+#define ISTEAMMASTERSERVERUPDATER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game engines use this to tell the Steam master servers
+// about their games so their games can show up in the server browser.
+//-----------------------------------------------------------------------------
+class ISteamMasterServerUpdater
+{
+public:
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void SetActive( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+
+// These are in GameSocketShare mode, where instead of ISteamMasterServerUpdater creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+
+// Functions to set various fields that are used to respond to queries.
+
+ // Call this to set basic data that is passed to the server browser.
+ virtual void SetBasicServerData(
+ unsigned short nProtocolVersion,
+ bool bDedicatedServer,
+ const char *pRegionName,
+ const char *pProductName,
+ unsigned short nMaxReportedClients,
+ bool bPasswordProtected,
+ const char *pGameDescription ) = 0;
+
+ // Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ // Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+
+ // You can call this upon shutdown to clear out data stored for this game server and
+ // to tell the master servers that this server is going away.
+ virtual void NotifyShutdown() = 0;
+
+ // Returns true if the master server has requested a restart.
+ // Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+ // Force it to request a heartbeat from the master servers.
+ virtual void ForceHeartbeat() = 0;
+
+ // Manually edit and query the master server list.
+ // It will provide name resolution and use the default master server port if none is provided.
+ virtual bool AddMasterServer( const char *pServerAddress ) = 0;
+ virtual bool RemoveMasterServer( const char *pServerAddress ) = 0;
+
+ virtual int GetNumMasterServers() = 0;
+
+ // Returns the # of bytes written to pOut.
+ virtual int GetMasterServerAddress( int iServer, char *pOut, int outBufferSize ) = 0;
+};
+
+#define STEAMMASTERSERVERUPDATER_INTERFACE_VERSION "SteamMasterServerUpdater001"
+
+#endif // ISTEAMMASTERSERVERUPDATER_H
diff --git a/lsteamclient/steamworks_sdk_113/isteammatchmaking.h b/lsteamclient/steamworks_sdk_113/isteammatchmaking.h
new file mode 100644
index 00000000..690e74b5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/isteammatchmaking.h
@@ -0,0 +1,661 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or close, but looking further if the current region has infrequent lobby activity (the default)
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this pointer
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking008"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamMasterServerUpdater->SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+#pragma pack( pop )
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_113/isteamnetworking.h b/lsteamclient/steamworks_sdk_113/isteamnetworking.h
new file mode 100644
index 00000000..4c4d3f29
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/isteamnetworking.h
@@ -0,0 +1,294 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#pragma pack( push, 8 )
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#pragma pack( push, 8 )
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_113/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_113/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..1db4757b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/isteamps3overlayrenderer.h
@@ -0,0 +1,85 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_113/isteamremotestorage.h b/lsteamclient/steamworks_sdk_113/isteamremotestorage.h
new file mode 100644
index 00000000..e8e821c4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/isteamremotestorage.h
@@ -0,0 +1,180 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1 ),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformReserved1 = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent ) = 0;
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead ) = 0;
+
+ // user generated content iteration
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+#if _PS3
+ // synchronization
+ virtual bool SynchronizeToClient() = 0;
+ virtual bool SynchronizeToServer() = 0;
+ virtual bool ResolveSyncConflict( EResolveConflict eResolveConflict ) = 0;
+#endif
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION004"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[260]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4-5 are used, see iclientremotestorage.h
+//
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 8 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char *m_pchFileName; // The name of the file that was downloaded. This pointer is
+ // not guaranteed to be valid indefinitely.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_113/isteamuser.h b/lsteamclient/steamworks_sdk_113/isteamuser.h
new file mode 100644
index 00000000..47ab74eb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/isteamuser.h
@@ -0,0 +1,303 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#pragma pack( push, 8 )
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultPSNAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultPSNAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser016"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_113/isteamuserstats.h b/lsteamclient/steamworks_sdk_113/isteamuserstats.h
new file mode 100644
index 00000000..1132ba87
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/isteamuserstats.h
@@ -0,0 +1,386 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#pragma pack( push, 8 )
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+ // Get general attributes (display name, desc, etc) for an Achievement
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION009"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in ClientUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+//
+// IMPORTANT! k_iSteamUserStatsCallbacks + 10 is used, see iclientuserstats.h
+//
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_113/isteamutils.h b/lsteamclient/steamworks_sdk_113/isteamutils.h
new file mode 100644
index 00000000..34128a6b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/isteamutils.h
@@ -0,0 +1,252 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+#endif
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils005"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_113/matchmakingtypes.h b/lsteamclient/steamworks_sdk_113/matchmakingtypes.h
new file mode 100644
index 00000000..185d6c0c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/matchmakingtypes.h
@@ -0,0 +1,233 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ void Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort );
+ netadr_t& GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline void servernetadr_t::Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort )
+{
+ Init( ipAndQueryPort.GetIP(), ipAndQueryPort.GetPort(), usConnectionPort );
+}
+
+inline netadr_t& servernetadr_t::GetIPAndQueryPort()
+{
+ static netadr_t netAdr;
+ netAdr.SetIP( m_unIP );
+ netAdr.SetPort( m_usQueryPort );
+ return netAdr;
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; // IP/Query Port/Connection Port for this server
+ int m_nPing; // current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; // server has responded successfully in the past
+ bool m_bDoNotRefresh; // server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[32]; // current game directory
+ char m_szMap[32]; // current map
+ char m_szGameDescription[64]; // game description
+ uint32 m_nAppID; // Steam App ID of this server
+ int m_nPlayers; // current number of players on the server
+ int m_nMaxPlayers; // Maximum players that can join this server
+ int m_nBotPlayers; // Number of bots (i.e simulated players) on this server
+ bool m_bPassword; // true if this server needs a password to join
+ bool m_bSecure; // Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; // time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; // server version as reported to Steam
+
+private:
+ char m_szServerName[64]; // Game server name
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ char m_szGameTags[128]; // the tags this server exposes
+ CSteamID m_steamID; // steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_113/steam_api.h b/lsteamclient/steamworks_sdk_113/steam_api.h
new file mode 100644
index 00000000..3cae1303
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/steam_api.h
@@ -0,0 +1,489 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+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 )
+// 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();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool SteamAPI_Init();
+#endif
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender * SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_113/steam_gameserver.h b/lsteamclient/steamworks_sdk_113/steam_gameserver.h
new file mode 100644
index 00000000..98dfc6c3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/steam_gameserver.h
@@ -0,0 +1,157 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteammasterserverupdater.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Note: if you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it will use "GameSocketShare" mode,
+// which means that the game is responsible for sending and receiving UDP packets for the master
+// server updater. See references to GameSocketShare in isteammasterserverupdater.h.
+//
+// Pass 0 for usGamePort or usSpectatorPort if you're not using that. Then, the master server updater will report
+// what's running based on that.
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamMasterServerUpdater *SteamMasterServerUpdater();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamMasterServerUpdater *SteamMasterServerUpdater() { return m_pSteamMasterServerUpdater; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamMasterServerUpdater *m_pSteamMasterServerUpdater;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamMasterServerUpdater = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamMasterServerUpdater = g_pSteamClientGameServer->GetISteamMasterServerUpdater( hSteamUser, hSteamPipe, STEAMMASTERSERVERUPDATER_INTERFACE_VERSION );
+ if ( !m_pSteamMasterServerUpdater )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_113/steamclientpublic.h b/lsteamclient/steamworks_sdk_113/steamclientpublic.h
new file mode 100644
index 00000000..1d0fc990
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/steamclientpublic.h
@@ -0,0 +1,969 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultPSNAccountUnlinked = 57, // Attempt to logon from a PS3 failed because the PSN online id is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultPSNAccountAlreadyLinked = 59, // PSN account is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 2 simultaneous user account instances right now, 1= desktop, 2 = console, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows | k_EMarketingMessageFlagsPlatformMac,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserConsoleInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id?
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ uint32 GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserConsoleInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_113/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_113/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_113/steamhttpenums.h b/lsteamclient/steamworks_sdk_113/steamhttpenums.h
new file mode 100644
index 00000000..002fff5a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodOPTIONS,
+ // k_EHTTPMethodPUT,
+ // k_EHTTPMethodDELETE,
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_113/steamps3params.h b/lsteamclient/steamworks_sdk_113/steamps3params.h
new file mode 100644
index 00000000..bf18d95c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/steamps3params.h
@@ -0,0 +1,90 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_GAMEBOOT_INVITE_SUBJECT_MAX 18
+#define STEAM_PS3_GAMEBOOT_INVITE_BODY_MAX 512
+struct SteamPS3Params_t
+{
+ void *pReserved;
+ uint32 m_nAppId;
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ char m_rgchGameBootInviteSubject[ STEAM_PS3_GAMEBOOT_INVITE_SUBJECT_MAX ];
+ char m_rgchGameBootInviteBody[ STEAM_PS3_GAMEBOOT_INVITE_BODY_MAX ];
+
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_113/steamtypes.h b/lsteamclient/steamworks_sdk_113/steamtypes.h
new file mode 100644
index 00000000..8320d617
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_113/steamtypes.h
@@ -0,0 +1,128 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_114/isteamapps.h b/lsteamclient/steamworks_sdk_114/isteamapps.h
new file mode 100644
index 00000000..f0ea88be
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/isteamapps.h
@@ -0,0 +1,71 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION004"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_114/isteamappticket.h b/lsteamclient/steamworks_sdk_114/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_114/isteamclient.h b/lsteamclient/steamworks_sdk_114/isteamclient.h
new file mode 100644
index 00000000..c37772ed
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/isteamclient.h
@@ -0,0 +1,171 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMasterServerUpdater;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMasterServerUpdater interface
+ virtual ISteamMasterServerUpdater *GetISteamMasterServerUpdater( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient010"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_114/isteamfriends.h b/lsteamclient/steamworks_sdk_114/isteamfriends.h
new file mode 100644
index 00000000..fbdcd09b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/isteamfriends.h
@@ -0,0 +1,398 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#pragma pack( push, 8 )
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ 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
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "LobbyInvite", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID ) = 0;
+
+ // 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;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends009"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_114/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_114/isteamgamecoordinator.h
new file mode 100644
index 00000000..dded0942
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/isteamgamecoordinator.h
@@ -0,0 +1,65 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_114/isteamgameserver.h b/lsteamclient/steamworks_sdk_114/isteamgameserver.h
new file mode 100644
index 00000000..6ad98b39
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/isteamgameserver.h
@@ -0,0 +1,244 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+ // connection functions
+ virtual void LogOn() = 0;
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // You shouldn't need to call this as it is called internally by SteamGameServer_Init() and can only be called once.
+ //
+ // To update the data in this call which may change during the servers lifetime see UpdateServerStatus() below.
+ //
+ // Input: nGameAppID - The Steam assigned AppID for the game
+ // unServerFlags - Any applicable combination of flags (see k_unServerFlag____ constants below)
+ // unGameIP - The IP Address the server is listening for client connections on (might be INADDR_ANY)
+ // unGamePort - The port which the server is listening for client connections on
+ // unSpectatorPort - the port on which spectators can join to observe the server, 0 if spectating is not supported
+ // usQueryPort - The port which the ISteamMasterServerUpdater API should use in order to listen for matchmaking requests
+ // pchGameDir - A unique string identifier for your game
+ // pchVersion - The current version of the server as a string like 1.0.0.0
+ // bLanMode - Is this a LAN only server?
+ //
+ // bugbug jmccaskey - figure out how to remove this from the API and only expose via SteamGameServer_Init... or make this actually used,
+ // and stop calling it in SteamGameServer_Init()?
+ virtual bool BSetServerType( uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort,
+ uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0;
+
+ // Updates server status values which shows up in the server browser and matchmaking APIs
+ virtual void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers,
+ const char *pchServerName, const char *pSpectatorServerName,
+ const char *pchMapName ) = 0;
+
+ // This can be called if spectator goes away or comes back (passing 0 means there is no spectator server now).
+ virtual void UpdateSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ // Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+ // Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ // don't set this unless it actually changes, its only uploaded to the master once (when
+ // acknowledged)
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer010"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_114/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_114/isteamgameserverstats.h
new file mode 100644
index 00000000..988b284d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/isteamgameserverstats.h
@@ -0,0 +1,93 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_114/isteamgamestats.h b/lsteamclient/steamworks_sdk_114/isteamgamestats.h
new file mode 100644
index 00000000..57681f48
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/isteamgamestats.h
@@ -0,0 +1,75 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game play statistics
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESTATS_H
+#define ISTEAMGAMESTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for recording game play sessions and details thereof
+//-----------------------------------------------------------------------------
+class ISteamGameStats
+{
+public:
+ virtual SteamAPICall_t GetNewSession( int8 nAccountType, uint64 ulAccountID, int32 nAppID, RTime32 rtTimeStarted ) = 0;
+ virtual SteamAPICall_t EndSession( uint64 ulSessionID, RTime32 rtTimeEnded, int nReasonCode ) = 0;
+ virtual EResult AddSessionAttributeInt( uint64 ulSessionID, const char* pstrName, int32 nData ) = 0;
+ virtual EResult AddSessionAttributeString( uint64 ulSessionID, const char* pstrName, const char *pstrData ) = 0;
+ virtual EResult AddSessionAttributeFloat( uint64 ulSessionID, const char* pstrName, float fData ) = 0;
+
+ virtual EResult AddNewRow( uint64 *pulRowID, uint64 ulSessionID, const char *pstrTableName ) = 0;
+ virtual EResult CommitRow( uint64 ulRowID ) = 0;
+ virtual EResult CommitOutstandingRows( uint64 ulSessionID ) = 0;
+ virtual EResult AddRowAttributeInt( uint64 ulRowID, const char *pstrName, int32 nData ) = 0;
+ virtual EResult AddRowAtributeString( uint64 ulRowID, const char *pstrName, const char *pstrData ) = 0;
+ virtual EResult AddRowAttributeFloat( uint64 ulRowID, const char *pstrName, float fData ) = 0;
+
+ virtual EResult AddSessionAttributeInt64( uint64 ulSessionID, const char *pstrName, int64 llData ) = 0;
+ virtual EResult AddRowAttributeInt64( uint64 ulRowID, const char *pstrName, int64 llData ) = 0;
+};
+
+#define STEAMGAMESTATS_INTERFACE_VERSION "SteamGameStats001"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: nAccountType for GetNewSession
+//-----------------------------------------------------------------------------
+enum EGameStatsAccountType
+{
+ k_EGameStatsAccountType_Steam = 1, // ullAccountID is a 64-bit SteamID for a player
+ k_EGameStatsAccountType_Xbox = 2, // ullAccountID is a 64-bit XUID
+ k_EGameStatsAccountType_SteamGameServer = 3, // ullAccountID is a 64-bit SteamID for a game server
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for GetNewSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionIssued_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 1 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+ bool m_bCollectingAny;
+ bool m_bCollectingDetails;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for EndSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionClosed_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 2 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+};
+
+#endif // ISTEAMGAMESTATS_H
diff --git a/lsteamclient/steamworks_sdk_114/isteamhttp.h b/lsteamclient/steamworks_sdk_114/isteamhttp.h
new file mode 100644
index 00000000..fe606173
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/isteamhttp.h
@@ -0,0 +1,119 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a depot build
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to building depots
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asyncronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION001"
+
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_114/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_114/isteammasterserverupdater.h
new file mode 100644
index 00000000..9ea09a8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/isteammasterserverupdater.h
@@ -0,0 +1,103 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for retrieving list of game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMMASTERSERVERUPDATER_H
+#define ISTEAMMASTERSERVERUPDATER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game engines use this to tell the Steam master servers
+// about their games so their games can show up in the server browser.
+//-----------------------------------------------------------------------------
+class ISteamMasterServerUpdater
+{
+public:
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void SetActive( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+
+// These are in GameSocketShare mode, where instead of ISteamMasterServerUpdater creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+
+// Functions to set various fields that are used to respond to queries.
+
+ // Call this to set basic data that is passed to the server browser.
+ virtual void SetBasicServerData(
+ unsigned short nProtocolVersion,
+ bool bDedicatedServer,
+ const char *pRegionName,
+ const char *pProductName,
+ unsigned short nMaxReportedClients,
+ bool bPasswordProtected,
+ const char *pGameDescription ) = 0;
+
+ // Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ // Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+
+ // You can call this upon shutdown to clear out data stored for this game server and
+ // to tell the master servers that this server is going away.
+ virtual void NotifyShutdown() = 0;
+
+ // Returns true if the master server has requested a restart.
+ // Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+ // Force it to request a heartbeat from the master servers.
+ virtual void ForceHeartbeat() = 0;
+
+ // Manually edit and query the master server list.
+ // It will provide name resolution and use the default master server port if none is provided.
+ virtual bool AddMasterServer( const char *pServerAddress ) = 0;
+ virtual bool RemoveMasterServer( const char *pServerAddress ) = 0;
+
+ virtual int GetNumMasterServers() = 0;
+
+ // Returns the # of bytes written to pOut.
+ virtual int GetMasterServerAddress( int iServer, char *pOut, int outBufferSize ) = 0;
+};
+
+#define STEAMMASTERSERVERUPDATER_INTERFACE_VERSION "SteamMasterServerUpdater001"
+
+#endif // ISTEAMMASTERSERVERUPDATER_H
diff --git a/lsteamclient/steamworks_sdk_114/isteammatchmaking.h b/lsteamclient/steamworks_sdk_114/isteammatchmaking.h
new file mode 100644
index 00000000..690e74b5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/isteammatchmaking.h
@@ -0,0 +1,661 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or close, but looking further if the current region has infrequent lobby activity (the default)
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this pointer
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking008"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamMasterServerUpdater->SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+#pragma pack( pop )
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_114/isteamnetworking.h b/lsteamclient/steamworks_sdk_114/isteamnetworking.h
new file mode 100644
index 00000000..4c4d3f29
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/isteamnetworking.h
@@ -0,0 +1,294 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#pragma pack( push, 8 )
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#pragma pack( push, 8 )
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_114/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_114/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..1db4757b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/isteamps3overlayrenderer.h
@@ -0,0 +1,85 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_114/isteamremotestorage.h b/lsteamclient/steamworks_sdk_114/isteamremotestorage.h
new file mode 100644
index 00000000..e8e821c4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/isteamremotestorage.h
@@ -0,0 +1,180 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1 ),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformReserved1 = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent ) = 0;
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead ) = 0;
+
+ // user generated content iteration
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+#if _PS3
+ // synchronization
+ virtual bool SynchronizeToClient() = 0;
+ virtual bool SynchronizeToServer() = 0;
+ virtual bool ResolveSyncConflict( EResolveConflict eResolveConflict ) = 0;
+#endif
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION004"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[260]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4-5 are used, see iclientremotestorage.h
+//
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 8 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char *m_pchFileName; // The name of the file that was downloaded. This pointer is
+ // not guaranteed to be valid indefinitely.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_114/isteamuser.h b/lsteamclient/steamworks_sdk_114/isteamuser.h
new file mode 100644
index 00000000..47ab74eb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/isteamuser.h
@@ -0,0 +1,303 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#pragma pack( push, 8 )
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultPSNAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultPSNAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser016"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_114/isteamuserstats.h b/lsteamclient/steamworks_sdk_114/isteamuserstats.h
new file mode 100644
index 00000000..0390b1f6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/isteamuserstats.h
@@ -0,0 +1,442 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#pragma pack( push, 8 )
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+ // Get general attributes (display name, desc, etc) for an Achievement
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION010"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in ClientUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_114/isteamutils.h b/lsteamclient/steamworks_sdk_114/isteamutils.h
new file mode 100644
index 00000000..34128a6b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/isteamutils.h
@@ -0,0 +1,252 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+#endif
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils005"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_114/matchmakingtypes.h b/lsteamclient/steamworks_sdk_114/matchmakingtypes.h
new file mode 100644
index 00000000..185d6c0c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/matchmakingtypes.h
@@ -0,0 +1,233 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ void Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort );
+ netadr_t& GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline void servernetadr_t::Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort )
+{
+ Init( ipAndQueryPort.GetIP(), ipAndQueryPort.GetPort(), usConnectionPort );
+}
+
+inline netadr_t& servernetadr_t::GetIPAndQueryPort()
+{
+ static netadr_t netAdr;
+ netAdr.SetIP( m_unIP );
+ netAdr.SetPort( m_usQueryPort );
+ return netAdr;
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; // IP/Query Port/Connection Port for this server
+ int m_nPing; // current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; // server has responded successfully in the past
+ bool m_bDoNotRefresh; // server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[32]; // current game directory
+ char m_szMap[32]; // current map
+ char m_szGameDescription[64]; // game description
+ uint32 m_nAppID; // Steam App ID of this server
+ int m_nPlayers; // current number of players on the server
+ int m_nMaxPlayers; // Maximum players that can join this server
+ int m_nBotPlayers; // Number of bots (i.e simulated players) on this server
+ bool m_bPassword; // true if this server needs a password to join
+ bool m_bSecure; // Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; // time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; // server version as reported to Steam
+
+private:
+ char m_szServerName[64]; // Game server name
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ char m_szGameTags[128]; // the tags this server exposes
+ CSteamID m_steamID; // steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_114/steam_api.h b/lsteamclient/steamworks_sdk_114/steam_api.h
new file mode 100644
index 00000000..3cae1303
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/steam_api.h
@@ -0,0 +1,489 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+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 )
+// 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();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool SteamAPI_Init();
+#endif
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender * SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_114/steam_gameserver.h b/lsteamclient/steamworks_sdk_114/steam_gameserver.h
new file mode 100644
index 00000000..98dfc6c3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/steam_gameserver.h
@@ -0,0 +1,157 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteammasterserverupdater.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Note: if you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it will use "GameSocketShare" mode,
+// which means that the game is responsible for sending and receiving UDP packets for the master
+// server updater. See references to GameSocketShare in isteammasterserverupdater.h.
+//
+// Pass 0 for usGamePort or usSpectatorPort if you're not using that. Then, the master server updater will report
+// what's running based on that.
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamMasterServerUpdater *SteamMasterServerUpdater();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamMasterServerUpdater *SteamMasterServerUpdater() { return m_pSteamMasterServerUpdater; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamMasterServerUpdater *m_pSteamMasterServerUpdater;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamMasterServerUpdater = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamMasterServerUpdater = g_pSteamClientGameServer->GetISteamMasterServerUpdater( hSteamUser, hSteamPipe, STEAMMASTERSERVERUPDATER_INTERFACE_VERSION );
+ if ( !m_pSteamMasterServerUpdater )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_114/steamclientpublic.h b/lsteamclient/steamworks_sdk_114/steamclientpublic.h
new file mode 100644
index 00000000..1d0fc990
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/steamclientpublic.h
@@ -0,0 +1,969 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultPSNAccountUnlinked = 57, // Attempt to logon from a PS3 failed because the PSN online id is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultPSNAccountAlreadyLinked = 59, // PSN account is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 2 simultaneous user account instances right now, 1= desktop, 2 = console, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows | k_EMarketingMessageFlagsPlatformMac,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserConsoleInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id?
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ uint32 GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserConsoleInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_114/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_114/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_114/steamhttpenums.h b/lsteamclient/steamworks_sdk_114/steamhttpenums.h
new file mode 100644
index 00000000..002fff5a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodOPTIONS,
+ // k_EHTTPMethodPUT,
+ // k_EHTTPMethodDELETE,
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_114/steamps3params.h b/lsteamclient/steamworks_sdk_114/steamps3params.h
new file mode 100644
index 00000000..bf18d95c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/steamps3params.h
@@ -0,0 +1,90 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_GAMEBOOT_INVITE_SUBJECT_MAX 18
+#define STEAM_PS3_GAMEBOOT_INVITE_BODY_MAX 512
+struct SteamPS3Params_t
+{
+ void *pReserved;
+ uint32 m_nAppId;
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ char m_rgchGameBootInviteSubject[ STEAM_PS3_GAMEBOOT_INVITE_SUBJECT_MAX ];
+ char m_rgchGameBootInviteBody[ STEAM_PS3_GAMEBOOT_INVITE_BODY_MAX ];
+
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_114/steamtypes.h b/lsteamclient/steamworks_sdk_114/steamtypes.h
new file mode 100644
index 00000000..8320d617
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_114/steamtypes.h
@@ -0,0 +1,128 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_115/isteamapps.h b/lsteamclient/steamworks_sdk_115/isteamapps.h
new file mode 100644
index 00000000..f0ea88be
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/isteamapps.h
@@ -0,0 +1,71 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION004"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_115/isteamappticket.h b/lsteamclient/steamworks_sdk_115/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_115/isteamclient.h b/lsteamclient/steamworks_sdk_115/isteamclient.h
new file mode 100644
index 00000000..6f0be6a2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/isteamclient.h
@@ -0,0 +1,176 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMasterServerUpdater;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMasterServerUpdater interface
+ virtual ISteamMasterServerUpdater *GetISteamMasterServerUpdater( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient010"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_115/isteamfriends.h b/lsteamclient/steamworks_sdk_115/isteamfriends.h
new file mode 100644
index 00000000..fbdcd09b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/isteamfriends.h
@@ -0,0 +1,398 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#pragma pack( push, 8 )
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ 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
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "LobbyInvite", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID ) = 0;
+
+ // 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;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends009"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_115/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_115/isteamgamecoordinator.h
new file mode 100644
index 00000000..dded0942
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/isteamgamecoordinator.h
@@ -0,0 +1,65 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_115/isteamgameserver.h b/lsteamclient/steamworks_sdk_115/isteamgameserver.h
new file mode 100644
index 00000000..6ad98b39
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/isteamgameserver.h
@@ -0,0 +1,244 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+ // connection functions
+ virtual void LogOn() = 0;
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // You shouldn't need to call this as it is called internally by SteamGameServer_Init() and can only be called once.
+ //
+ // To update the data in this call which may change during the servers lifetime see UpdateServerStatus() below.
+ //
+ // Input: nGameAppID - The Steam assigned AppID for the game
+ // unServerFlags - Any applicable combination of flags (see k_unServerFlag____ constants below)
+ // unGameIP - The IP Address the server is listening for client connections on (might be INADDR_ANY)
+ // unGamePort - The port which the server is listening for client connections on
+ // unSpectatorPort - the port on which spectators can join to observe the server, 0 if spectating is not supported
+ // usQueryPort - The port which the ISteamMasterServerUpdater API should use in order to listen for matchmaking requests
+ // pchGameDir - A unique string identifier for your game
+ // pchVersion - The current version of the server as a string like 1.0.0.0
+ // bLanMode - Is this a LAN only server?
+ //
+ // bugbug jmccaskey - figure out how to remove this from the API and only expose via SteamGameServer_Init... or make this actually used,
+ // and stop calling it in SteamGameServer_Init()?
+ virtual bool BSetServerType( uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort,
+ uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0;
+
+ // Updates server status values which shows up in the server browser and matchmaking APIs
+ virtual void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers,
+ const char *pchServerName, const char *pSpectatorServerName,
+ const char *pchMapName ) = 0;
+
+ // This can be called if spectator goes away or comes back (passing 0 means there is no spectator server now).
+ virtual void UpdateSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ // Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+ // Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ // don't set this unless it actually changes, its only uploaded to the master once (when
+ // acknowledged)
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer010"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_115/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_115/isteamgameserverstats.h
new file mode 100644
index 00000000..988b284d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/isteamgameserverstats.h
@@ -0,0 +1,93 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_115/isteamgamestats.h b/lsteamclient/steamworks_sdk_115/isteamgamestats.h
new file mode 100644
index 00000000..57681f48
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/isteamgamestats.h
@@ -0,0 +1,75 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game play statistics
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESTATS_H
+#define ISTEAMGAMESTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for recording game play sessions and details thereof
+//-----------------------------------------------------------------------------
+class ISteamGameStats
+{
+public:
+ virtual SteamAPICall_t GetNewSession( int8 nAccountType, uint64 ulAccountID, int32 nAppID, RTime32 rtTimeStarted ) = 0;
+ virtual SteamAPICall_t EndSession( uint64 ulSessionID, RTime32 rtTimeEnded, int nReasonCode ) = 0;
+ virtual EResult AddSessionAttributeInt( uint64 ulSessionID, const char* pstrName, int32 nData ) = 0;
+ virtual EResult AddSessionAttributeString( uint64 ulSessionID, const char* pstrName, const char *pstrData ) = 0;
+ virtual EResult AddSessionAttributeFloat( uint64 ulSessionID, const char* pstrName, float fData ) = 0;
+
+ virtual EResult AddNewRow( uint64 *pulRowID, uint64 ulSessionID, const char *pstrTableName ) = 0;
+ virtual EResult CommitRow( uint64 ulRowID ) = 0;
+ virtual EResult CommitOutstandingRows( uint64 ulSessionID ) = 0;
+ virtual EResult AddRowAttributeInt( uint64 ulRowID, const char *pstrName, int32 nData ) = 0;
+ virtual EResult AddRowAtributeString( uint64 ulRowID, const char *pstrName, const char *pstrData ) = 0;
+ virtual EResult AddRowAttributeFloat( uint64 ulRowID, const char *pstrName, float fData ) = 0;
+
+ virtual EResult AddSessionAttributeInt64( uint64 ulSessionID, const char *pstrName, int64 llData ) = 0;
+ virtual EResult AddRowAttributeInt64( uint64 ulRowID, const char *pstrName, int64 llData ) = 0;
+};
+
+#define STEAMGAMESTATS_INTERFACE_VERSION "SteamGameStats001"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: nAccountType for GetNewSession
+//-----------------------------------------------------------------------------
+enum EGameStatsAccountType
+{
+ k_EGameStatsAccountType_Steam = 1, // ullAccountID is a 64-bit SteamID for a player
+ k_EGameStatsAccountType_Xbox = 2, // ullAccountID is a 64-bit XUID
+ k_EGameStatsAccountType_SteamGameServer = 3, // ullAccountID is a 64-bit SteamID for a game server
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for GetNewSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionIssued_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 1 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+ bool m_bCollectingAny;
+ bool m_bCollectingDetails;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for EndSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionClosed_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 2 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+};
+
+#endif // ISTEAMGAMESTATS_H
diff --git a/lsteamclient/steamworks_sdk_115/isteamhttp.h b/lsteamclient/steamworks_sdk_115/isteamhttp.h
new file mode 100644
index 00000000..fe606173
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/isteamhttp.h
@@ -0,0 +1,119 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a depot build
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to building depots
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asyncronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION001"
+
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_115/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_115/isteammasterserverupdater.h
new file mode 100644
index 00000000..9ea09a8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/isteammasterserverupdater.h
@@ -0,0 +1,103 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for retrieving list of game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMMASTERSERVERUPDATER_H
+#define ISTEAMMASTERSERVERUPDATER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game engines use this to tell the Steam master servers
+// about their games so their games can show up in the server browser.
+//-----------------------------------------------------------------------------
+class ISteamMasterServerUpdater
+{
+public:
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void SetActive( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+
+// These are in GameSocketShare mode, where instead of ISteamMasterServerUpdater creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+
+// Functions to set various fields that are used to respond to queries.
+
+ // Call this to set basic data that is passed to the server browser.
+ virtual void SetBasicServerData(
+ unsigned short nProtocolVersion,
+ bool bDedicatedServer,
+ const char *pRegionName,
+ const char *pProductName,
+ unsigned short nMaxReportedClients,
+ bool bPasswordProtected,
+ const char *pGameDescription ) = 0;
+
+ // Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ // Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+
+ // You can call this upon shutdown to clear out data stored for this game server and
+ // to tell the master servers that this server is going away.
+ virtual void NotifyShutdown() = 0;
+
+ // Returns true if the master server has requested a restart.
+ // Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+ // Force it to request a heartbeat from the master servers.
+ virtual void ForceHeartbeat() = 0;
+
+ // Manually edit and query the master server list.
+ // It will provide name resolution and use the default master server port if none is provided.
+ virtual bool AddMasterServer( const char *pServerAddress ) = 0;
+ virtual bool RemoveMasterServer( const char *pServerAddress ) = 0;
+
+ virtual int GetNumMasterServers() = 0;
+
+ // Returns the # of bytes written to pOut.
+ virtual int GetMasterServerAddress( int iServer, char *pOut, int outBufferSize ) = 0;
+};
+
+#define STEAMMASTERSERVERUPDATER_INTERFACE_VERSION "SteamMasterServerUpdater001"
+
+#endif // ISTEAMMASTERSERVERUPDATER_H
diff --git a/lsteamclient/steamworks_sdk_115/isteammatchmaking.h b/lsteamclient/steamworks_sdk_115/isteammatchmaking.h
new file mode 100644
index 00000000..690e74b5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/isteammatchmaking.h
@@ -0,0 +1,661 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or close, but looking further if the current region has infrequent lobby activity (the default)
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this pointer
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking008"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamMasterServerUpdater->SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+#pragma pack( pop )
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_115/isteamnetworking.h b/lsteamclient/steamworks_sdk_115/isteamnetworking.h
new file mode 100644
index 00000000..4c4d3f29
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/isteamnetworking.h
@@ -0,0 +1,294 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#pragma pack( push, 8 )
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#pragma pack( push, 8 )
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_115/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_115/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..1db4757b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/isteamps3overlayrenderer.h
@@ -0,0 +1,85 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_115/isteamremotestorage.h b/lsteamclient/steamworks_sdk_115/isteamremotestorage.h
new file mode 100644
index 00000000..e8e821c4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/isteamremotestorage.h
@@ -0,0 +1,180 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1 ),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformReserved1 = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent ) = 0;
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead ) = 0;
+
+ // user generated content iteration
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+#if _PS3
+ // synchronization
+ virtual bool SynchronizeToClient() = 0;
+ virtual bool SynchronizeToServer() = 0;
+ virtual bool ResolveSyncConflict( EResolveConflict eResolveConflict ) = 0;
+#endif
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION004"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[260]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4-5 are used, see iclientremotestorage.h
+//
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 8 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char *m_pchFileName; // The name of the file that was downloaded. This pointer is
+ // not guaranteed to be valid indefinitely.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_115/isteamuser.h b/lsteamclient/steamworks_sdk_115/isteamuser.h
new file mode 100644
index 00000000..47ab74eb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/isteamuser.h
@@ -0,0 +1,303 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#pragma pack( push, 8 )
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultPSNAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultPSNAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser016"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_115/isteamuserstats.h b/lsteamclient/steamworks_sdk_115/isteamuserstats.h
new file mode 100644
index 00000000..0390b1f6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/isteamuserstats.h
@@ -0,0 +1,442 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#pragma pack( push, 8 )
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+ // Get general attributes (display name, desc, etc) for an Achievement
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION010"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in ClientUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_115/isteamutils.h b/lsteamclient/steamworks_sdk_115/isteamutils.h
new file mode 100644
index 00000000..34128a6b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/isteamutils.h
@@ -0,0 +1,252 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+#endif
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils005"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_115/matchmakingtypes.h b/lsteamclient/steamworks_sdk_115/matchmakingtypes.h
new file mode 100644
index 00000000..185d6c0c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/matchmakingtypes.h
@@ -0,0 +1,233 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ void Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort );
+ netadr_t& GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline void servernetadr_t::Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort )
+{
+ Init( ipAndQueryPort.GetIP(), ipAndQueryPort.GetPort(), usConnectionPort );
+}
+
+inline netadr_t& servernetadr_t::GetIPAndQueryPort()
+{
+ static netadr_t netAdr;
+ netAdr.SetIP( m_unIP );
+ netAdr.SetPort( m_usQueryPort );
+ return netAdr;
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; // IP/Query Port/Connection Port for this server
+ int m_nPing; // current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; // server has responded successfully in the past
+ bool m_bDoNotRefresh; // server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[32]; // current game directory
+ char m_szMap[32]; // current map
+ char m_szGameDescription[64]; // game description
+ uint32 m_nAppID; // Steam App ID of this server
+ int m_nPlayers; // current number of players on the server
+ int m_nMaxPlayers; // Maximum players that can join this server
+ int m_nBotPlayers; // Number of bots (i.e simulated players) on this server
+ bool m_bPassword; // true if this server needs a password to join
+ bool m_bSecure; // Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; // time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; // server version as reported to Steam
+
+private:
+ char m_szServerName[64]; // Game server name
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ char m_szGameTags[128]; // the tags this server exposes
+ CSteamID m_steamID; // steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_115/steam_api.h b/lsteamclient/steamworks_sdk_115/steam_api.h
new file mode 100644
index 00000000..c6363081
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/steam_api.h
@@ -0,0 +1,497 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamhttp.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+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 )
+// 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();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool SteamAPI_Init();
+#endif
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+S_API ISteamHTTP *SteamHTTP();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender * SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamHTTP *m_pSteamHTTP;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_115/steam_gameserver.h b/lsteamclient/steamworks_sdk_115/steam_gameserver.h
new file mode 100644
index 00000000..98dfc6c3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/steam_gameserver.h
@@ -0,0 +1,157 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteammasterserverupdater.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Note: if you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it will use "GameSocketShare" mode,
+// which means that the game is responsible for sending and receiving UDP packets for the master
+// server updater. See references to GameSocketShare in isteammasterserverupdater.h.
+//
+// Pass 0 for usGamePort or usSpectatorPort if you're not using that. Then, the master server updater will report
+// what's running based on that.
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamMasterServerUpdater *SteamMasterServerUpdater();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamMasterServerUpdater *SteamMasterServerUpdater() { return m_pSteamMasterServerUpdater; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamMasterServerUpdater *m_pSteamMasterServerUpdater;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamMasterServerUpdater = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamMasterServerUpdater = g_pSteamClientGameServer->GetISteamMasterServerUpdater( hSteamUser, hSteamPipe, STEAMMASTERSERVERUPDATER_INTERFACE_VERSION );
+ if ( !m_pSteamMasterServerUpdater )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_115/steamclientpublic.h b/lsteamclient/steamworks_sdk_115/steamclientpublic.h
new file mode 100644
index 00000000..f580876a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/steamclientpublic.h
@@ -0,0 +1,970 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultPSNAccountUnlinked = 57, // Attempt to logon from a PS3 failed because the PSN online id is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultPSNAccountAlreadyLinked = 59, // PSN account is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 2 simultaneous user account instances right now, 1= desktop, 2 = console, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows | k_EMarketingMessageFlagsPlatformMac,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserConsoleInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id?
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ uint32 GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserConsoleInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_115/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_115/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_115/steamhttpenums.h b/lsteamclient/steamworks_sdk_115/steamhttpenums.h
new file mode 100644
index 00000000..002fff5a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodOPTIONS,
+ // k_EHTTPMethodPUT,
+ // k_EHTTPMethodDELETE,
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_115/steamps3params.h b/lsteamclient/steamworks_sdk_115/steamps3params.h
new file mode 100644
index 00000000..bf18d95c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/steamps3params.h
@@ -0,0 +1,90 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_GAMEBOOT_INVITE_SUBJECT_MAX 18
+#define STEAM_PS3_GAMEBOOT_INVITE_BODY_MAX 512
+struct SteamPS3Params_t
+{
+ void *pReserved;
+ uint32 m_nAppId;
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ char m_rgchGameBootInviteSubject[ STEAM_PS3_GAMEBOOT_INVITE_SUBJECT_MAX ];
+ char m_rgchGameBootInviteBody[ STEAM_PS3_GAMEBOOT_INVITE_BODY_MAX ];
+
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_115/steamtypes.h b/lsteamclient/steamworks_sdk_115/steamtypes.h
new file mode 100644
index 00000000..8320d617
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_115/steamtypes.h
@@ -0,0 +1,128 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_116/isteamapps.h b/lsteamclient/steamworks_sdk_116/isteamapps.h
new file mode 100644
index 00000000..6bedbf2f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/isteamapps.h
@@ -0,0 +1,95 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION004"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivactionCodeResult
+{
+ k_ERegisterActivactionCodeResultOK = 0,
+ k_ERegisterActivactionCodeResultFail = 1,
+ k_ERegisterActivactionCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivactionCodeResultTimeout = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivactionCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_116/isteamappticket.h b/lsteamclient/steamworks_sdk_116/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_116/isteamclient.h b/lsteamclient/steamworks_sdk_116/isteamclient.h
new file mode 100644
index 00000000..36ea5f87
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/isteamclient.h
@@ -0,0 +1,184 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMasterServerUpdater;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMasterServerUpdater interface
+ virtual ISteamMasterServerUpdater *GetISteamMasterServerUpdater( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient011"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_116/isteamfriends.h b/lsteamclient/steamworks_sdk_116/isteamfriends.h
new file mode 100644
index 00000000..4a279698
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/isteamfriends.h
@@ -0,0 +1,425 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendGroupLimit = 100;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#pragma pack( push, 8 )
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "LobbyInvite", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID ) = 0;
+
+ // 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;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends009"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+ k_EPersonaChangeFacebookInfo = 0x800,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user requests the history of player names on a given account
+//-----------------------------------------------------------------------------
+struct NameHistoryResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ int m_cSuccessfulLookups; // number of lookups that were successful
+ int m_cFailedLookups; // number of lookups that failed for one reason or another
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_116/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_116/isteamgamecoordinator.h
new file mode 100644
index 00000000..dded0942
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/isteamgamecoordinator.h
@@ -0,0 +1,65 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_116/isteamgameserver.h b/lsteamclient/steamworks_sdk_116/isteamgameserver.h
new file mode 100644
index 00000000..6ad98b39
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/isteamgameserver.h
@@ -0,0 +1,244 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+ // connection functions
+ virtual void LogOn() = 0;
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // You shouldn't need to call this as it is called internally by SteamGameServer_Init() and can only be called once.
+ //
+ // To update the data in this call which may change during the servers lifetime see UpdateServerStatus() below.
+ //
+ // Input: nGameAppID - The Steam assigned AppID for the game
+ // unServerFlags - Any applicable combination of flags (see k_unServerFlag____ constants below)
+ // unGameIP - The IP Address the server is listening for client connections on (might be INADDR_ANY)
+ // unGamePort - The port which the server is listening for client connections on
+ // unSpectatorPort - the port on which spectators can join to observe the server, 0 if spectating is not supported
+ // usQueryPort - The port which the ISteamMasterServerUpdater API should use in order to listen for matchmaking requests
+ // pchGameDir - A unique string identifier for your game
+ // pchVersion - The current version of the server as a string like 1.0.0.0
+ // bLanMode - Is this a LAN only server?
+ //
+ // bugbug jmccaskey - figure out how to remove this from the API and only expose via SteamGameServer_Init... or make this actually used,
+ // and stop calling it in SteamGameServer_Init()?
+ virtual bool BSetServerType( uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort,
+ uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0;
+
+ // Updates server status values which shows up in the server browser and matchmaking APIs
+ virtual void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers,
+ const char *pchServerName, const char *pSpectatorServerName,
+ const char *pchMapName ) = 0;
+
+ // This can be called if spectator goes away or comes back (passing 0 means there is no spectator server now).
+ virtual void UpdateSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ // Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+ // Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ // it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ // don't set this unless it actually changes, its only uploaded to the master once (when
+ // acknowledged)
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer010"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_116/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_116/isteamgameserverstats.h
new file mode 100644
index 00000000..988b284d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/isteamgameserverstats.h
@@ -0,0 +1,93 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_116/isteamgamestats.h b/lsteamclient/steamworks_sdk_116/isteamgamestats.h
new file mode 100644
index 00000000..57681f48
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/isteamgamestats.h
@@ -0,0 +1,75 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game play statistics
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESTATS_H
+#define ISTEAMGAMESTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for recording game play sessions and details thereof
+//-----------------------------------------------------------------------------
+class ISteamGameStats
+{
+public:
+ virtual SteamAPICall_t GetNewSession( int8 nAccountType, uint64 ulAccountID, int32 nAppID, RTime32 rtTimeStarted ) = 0;
+ virtual SteamAPICall_t EndSession( uint64 ulSessionID, RTime32 rtTimeEnded, int nReasonCode ) = 0;
+ virtual EResult AddSessionAttributeInt( uint64 ulSessionID, const char* pstrName, int32 nData ) = 0;
+ virtual EResult AddSessionAttributeString( uint64 ulSessionID, const char* pstrName, const char *pstrData ) = 0;
+ virtual EResult AddSessionAttributeFloat( uint64 ulSessionID, const char* pstrName, float fData ) = 0;
+
+ virtual EResult AddNewRow( uint64 *pulRowID, uint64 ulSessionID, const char *pstrTableName ) = 0;
+ virtual EResult CommitRow( uint64 ulRowID ) = 0;
+ virtual EResult CommitOutstandingRows( uint64 ulSessionID ) = 0;
+ virtual EResult AddRowAttributeInt( uint64 ulRowID, const char *pstrName, int32 nData ) = 0;
+ virtual EResult AddRowAtributeString( uint64 ulRowID, const char *pstrName, const char *pstrData ) = 0;
+ virtual EResult AddRowAttributeFloat( uint64 ulRowID, const char *pstrName, float fData ) = 0;
+
+ virtual EResult AddSessionAttributeInt64( uint64 ulSessionID, const char *pstrName, int64 llData ) = 0;
+ virtual EResult AddRowAttributeInt64( uint64 ulRowID, const char *pstrName, int64 llData ) = 0;
+};
+
+#define STEAMGAMESTATS_INTERFACE_VERSION "SteamGameStats001"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: nAccountType for GetNewSession
+//-----------------------------------------------------------------------------
+enum EGameStatsAccountType
+{
+ k_EGameStatsAccountType_Steam = 1, // ullAccountID is a 64-bit SteamID for a player
+ k_EGameStatsAccountType_Xbox = 2, // ullAccountID is a 64-bit XUID
+ k_EGameStatsAccountType_SteamGameServer = 3, // ullAccountID is a 64-bit SteamID for a game server
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for GetNewSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionIssued_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 1 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+ bool m_bCollectingAny;
+ bool m_bCollectingDetails;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for EndSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionClosed_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 2 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+};
+
+#endif // ISTEAMGAMESTATS_H
diff --git a/lsteamclient/steamworks_sdk_116/isteamhttp.h b/lsteamclient/steamworks_sdk_116/isteamhttp.h
new file mode 100644
index 00000000..5799a2d1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/isteamhttp.h
@@ -0,0 +1,124 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a depot build
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to building depots
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asyncronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION001"
+
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_116/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_116/isteammasterserverupdater.h
new file mode 100644
index 00000000..9ea09a8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/isteammasterserverupdater.h
@@ -0,0 +1,103 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for retrieving list of game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMMASTERSERVERUPDATER_H
+#define ISTEAMMASTERSERVERUPDATER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game engines use this to tell the Steam master servers
+// about their games so their games can show up in the server browser.
+//-----------------------------------------------------------------------------
+class ISteamMasterServerUpdater
+{
+public:
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void SetActive( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+
+// These are in GameSocketShare mode, where instead of ISteamMasterServerUpdater creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+
+// Functions to set various fields that are used to respond to queries.
+
+ // Call this to set basic data that is passed to the server browser.
+ virtual void SetBasicServerData(
+ unsigned short nProtocolVersion,
+ bool bDedicatedServer,
+ const char *pRegionName,
+ const char *pProductName,
+ unsigned short nMaxReportedClients,
+ bool bPasswordProtected,
+ const char *pGameDescription ) = 0;
+
+ // Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ // Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+
+ // You can call this upon shutdown to clear out data stored for this game server and
+ // to tell the master servers that this server is going away.
+ virtual void NotifyShutdown() = 0;
+
+ // Returns true if the master server has requested a restart.
+ // Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+ // Force it to request a heartbeat from the master servers.
+ virtual void ForceHeartbeat() = 0;
+
+ // Manually edit and query the master server list.
+ // It will provide name resolution and use the default master server port if none is provided.
+ virtual bool AddMasterServer( const char *pServerAddress ) = 0;
+ virtual bool RemoveMasterServer( const char *pServerAddress ) = 0;
+
+ virtual int GetNumMasterServers() = 0;
+
+ // Returns the # of bytes written to pOut.
+ virtual int GetMasterServerAddress( int iServer, char *pOut, int outBufferSize ) = 0;
+};
+
+#define STEAMMASTERSERVERUPDATER_INTERFACE_VERSION "SteamMasterServerUpdater001"
+
+#endif // ISTEAMMASTERSERVERUPDATER_H
diff --git a/lsteamclient/steamworks_sdk_116/isteammatchmaking.h b/lsteamclient/steamworks_sdk_116/isteammatchmaking.h
new file mode 100644
index 00000000..c2c11c87
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/isteammatchmaking.h
@@ -0,0 +1,662 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this pointer
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking008"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamMasterServerUpdater->SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+#pragma pack( pop )
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_116/isteamnetworking.h b/lsteamclient/steamworks_sdk_116/isteamnetworking.h
new file mode 100644
index 00000000..4c4d3f29
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/isteamnetworking.h
@@ -0,0 +1,294 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#pragma pack( push, 8 )
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#pragma pack( push, 8 )
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_116/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_116/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_116/isteamremotestorage.h b/lsteamclient/steamworks_sdk_116/isteamremotestorage.h
new file mode 100644
index 00000000..2cb472b2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/isteamremotestorage.h
@@ -0,0 +1,202 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1 ),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformReserved1 = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent ) = 0;
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead ) = 0;
+
+ // user generated content iteration
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION004"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[260]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 8 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char *m_pchFileName; // The name of the file that was downloaded. This pointer is
+ // not guaranteed to be valid indefinitely.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_116/isteamscreenshots.h b/lsteamclient/steamworks_sdk_116/isteamscreenshots.h
new file mode 100644
index 00000000..2c48f746
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/isteamscreenshots.h
@@ -0,0 +1,85 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchJpegOrTGAFilename, const char *pchJpegOrTGAThumbFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION001"
+
+// callbacks
+#pragma pack( push, 8 )
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_116/isteamuser.h b/lsteamclient/steamworks_sdk_116/isteamuser.h
new file mode 100644
index 00000000..d1618297
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/isteamuser.h
@@ -0,0 +1,306 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#pragma pack( push, 8 )
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser016"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_116/isteamuserstats.h b/lsteamclient/steamworks_sdk_116/isteamuserstats.h
new file mode 100644
index 00000000..6b198c38
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/isteamuserstats.h
@@ -0,0 +1,445 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#pragma pack( push, 8 )
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION010"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_116/isteamutils.h b/lsteamclient/steamworks_sdk_116/isteamutils.h
new file mode 100644
index 00000000..b1ea013f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/isteamutils.h
@@ -0,0 +1,256 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils005"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_116/matchmakingtypes.h b/lsteamclient/steamworks_sdk_116/matchmakingtypes.h
new file mode 100644
index 00000000..185d6c0c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/matchmakingtypes.h
@@ -0,0 +1,233 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ void Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort );
+ netadr_t& GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline void servernetadr_t::Init( const netadr_t &ipAndQueryPort, uint16 usConnectionPort )
+{
+ Init( ipAndQueryPort.GetIP(), ipAndQueryPort.GetPort(), usConnectionPort );
+}
+
+inline netadr_t& servernetadr_t::GetIPAndQueryPort()
+{
+ static netadr_t netAdr;
+ netAdr.SetIP( m_unIP );
+ netAdr.SetPort( m_usQueryPort );
+ return netAdr;
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; // IP/Query Port/Connection Port for this server
+ int m_nPing; // current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; // server has responded successfully in the past
+ bool m_bDoNotRefresh; // server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[32]; // current game directory
+ char m_szMap[32]; // current map
+ char m_szGameDescription[64]; // game description
+ uint32 m_nAppID; // Steam App ID of this server
+ int m_nPlayers; // current number of players on the server
+ int m_nMaxPlayers; // Maximum players that can join this server
+ int m_nBotPlayers; // Number of bots (i.e simulated players) on this server
+ bool m_bPassword; // true if this server needs a password to join
+ bool m_bSecure; // Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; // time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; // server version as reported to Steam
+
+private:
+ char m_szServerName[64]; // Game server name
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ char m_szGameTags[128]; // the tags this server exposes
+ CSteamID m_steamID; // steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_116/steam_api.h b/lsteamclient/steamworks_sdk_116/steam_api.h
new file mode 100644
index 00000000..1a5381d8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/steam_api.h
@@ -0,0 +1,507 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteamhttp.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+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 )
+// 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();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool SteamAPI_Init();
+#endif
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+S_API ISteamScreenshots *SteamScreenshots();
+S_API ISteamHTTP *SteamHTTP();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender * SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamScreenshots = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_116/steam_gameserver.h b/lsteamclient/steamworks_sdk_116/steam_gameserver.h
new file mode 100644
index 00000000..98dfc6c3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/steam_gameserver.h
@@ -0,0 +1,157 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteammasterserverupdater.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Note: if you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it will use "GameSocketShare" mode,
+// which means that the game is responsible for sending and receiving UDP packets for the master
+// server updater. See references to GameSocketShare in isteammasterserverupdater.h.
+//
+// Pass 0 for usGamePort or usSpectatorPort if you're not using that. Then, the master server updater will report
+// what's running based on that.
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, const char *pchGameDir, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamMasterServerUpdater *SteamMasterServerUpdater();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamMasterServerUpdater *SteamMasterServerUpdater() { return m_pSteamMasterServerUpdater; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamMasterServerUpdater *m_pSteamMasterServerUpdater;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamMasterServerUpdater = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamMasterServerUpdater = g_pSteamClientGameServer->GetISteamMasterServerUpdater( hSteamUser, hSteamPipe, STEAMMASTERSERVERUPDATER_INTERFACE_VERSION );
+ if ( !m_pSteamMasterServerUpdater )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_116/steamclientpublic.h b/lsteamclient/steamworks_sdk_116/steamclientpublic.h
new file mode 100644
index 00000000..f2d22e24
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/steamclientpublic.h
@@ -0,0 +1,973 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 2 simultaneous user account instances right now, 1= desktop, 2 = console, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows | k_EMarketingMessageFlagsPlatformMac,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserConsoleInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id?
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ uint32 GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserConsoleInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_116/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_116/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_116/steamhttpenums.h b/lsteamclient/steamworks_sdk_116/steamhttpenums.h
new file mode 100644
index 00000000..002fff5a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodOPTIONS,
+ // k_EHTTPMethodPUT,
+ // k_EHTTPMethodDELETE,
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_116/steamps3params.h b/lsteamclient/steamworks_sdk_116/steamps3params.h
new file mode 100644
index 00000000..40f597f5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/steamps3params.h
@@ -0,0 +1,108 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+struct SteamPS3Params_t
+{
+ void *pReserved;
+ uint32 m_nAppId;
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_116/steamtypes.h b/lsteamclient/steamworks_sdk_116/steamtypes.h
new file mode 100644
index 00000000..16a581be
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_116/steamtypes.h
@@ -0,0 +1,132 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_117/isteamapps.h b/lsteamclient/steamworks_sdk_117/isteamapps.h
new file mode 100644
index 00000000..9a1520ad
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/isteamapps.h
@@ -0,0 +1,96 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION004"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivactionCodeResult
+{
+ k_ERegisterActivactionCodeResultOK = 0,
+ k_ERegisterActivactionCodeResultFail = 1,
+ k_ERegisterActivactionCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivactionCodeResultTimeout = 3,
+ k_ERegisterActivactionCodeAlreadyOwned = 4
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivactionCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_117/isteamappticket.h b/lsteamclient/steamworks_sdk_117/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_117/isteamclient.h b/lsteamclient/steamworks_sdk_117/isteamclient.h
new file mode 100644
index 00000000..28781851
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/isteamclient.h
@@ -0,0 +1,180 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient012"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_117/isteamfriends.h b/lsteamclient/steamworks_sdk_117/isteamfriends.h
new file mode 100644
index 00000000..a43f8d0f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/isteamfriends.h
@@ -0,0 +1,519 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#pragma pack( push, 8 )
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "LobbyInvite", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "tradeinvite" - opens a chat window to the specified user and invites them to trade
+ // "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
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID ) = 0;
+
+ // 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;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *, CSteamID * ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends011"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+ k_EPersonaChangeFacebookInfo = 0x800,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_117/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_117/isteamgamecoordinator.h
new file mode 100644
index 00000000..dded0942
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/isteamgamecoordinator.h
@@ -0,0 +1,65 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_117/isteamgameserver.h b/lsteamclient/steamworks_sdk_117/isteamgameserver.h
new file mode 100644
index 00000000..61cbcdaa
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/isteamgameserver.h
@@ -0,0 +1,384 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn(
+ const char *pszAccountName,
+ const char *pszPassword
+ ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+//
+// Query steam for server data
+//
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer011"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_117/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_117/isteamgameserverstats.h
new file mode 100644
index 00000000..988b284d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/isteamgameserverstats.h
@@ -0,0 +1,93 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_117/isteamgamestats.h b/lsteamclient/steamworks_sdk_117/isteamgamestats.h
new file mode 100644
index 00000000..57681f48
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/isteamgamestats.h
@@ -0,0 +1,75 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game play statistics
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESTATS_H
+#define ISTEAMGAMESTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for recording game play sessions and details thereof
+//-----------------------------------------------------------------------------
+class ISteamGameStats
+{
+public:
+ virtual SteamAPICall_t GetNewSession( int8 nAccountType, uint64 ulAccountID, int32 nAppID, RTime32 rtTimeStarted ) = 0;
+ virtual SteamAPICall_t EndSession( uint64 ulSessionID, RTime32 rtTimeEnded, int nReasonCode ) = 0;
+ virtual EResult AddSessionAttributeInt( uint64 ulSessionID, const char* pstrName, int32 nData ) = 0;
+ virtual EResult AddSessionAttributeString( uint64 ulSessionID, const char* pstrName, const char *pstrData ) = 0;
+ virtual EResult AddSessionAttributeFloat( uint64 ulSessionID, const char* pstrName, float fData ) = 0;
+
+ virtual EResult AddNewRow( uint64 *pulRowID, uint64 ulSessionID, const char *pstrTableName ) = 0;
+ virtual EResult CommitRow( uint64 ulRowID ) = 0;
+ virtual EResult CommitOutstandingRows( uint64 ulSessionID ) = 0;
+ virtual EResult AddRowAttributeInt( uint64 ulRowID, const char *pstrName, int32 nData ) = 0;
+ virtual EResult AddRowAtributeString( uint64 ulRowID, const char *pstrName, const char *pstrData ) = 0;
+ virtual EResult AddRowAttributeFloat( uint64 ulRowID, const char *pstrName, float fData ) = 0;
+
+ virtual EResult AddSessionAttributeInt64( uint64 ulSessionID, const char *pstrName, int64 llData ) = 0;
+ virtual EResult AddRowAttributeInt64( uint64 ulRowID, const char *pstrName, int64 llData ) = 0;
+};
+
+#define STEAMGAMESTATS_INTERFACE_VERSION "SteamGameStats001"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: nAccountType for GetNewSession
+//-----------------------------------------------------------------------------
+enum EGameStatsAccountType
+{
+ k_EGameStatsAccountType_Steam = 1, // ullAccountID is a 64-bit SteamID for a player
+ k_EGameStatsAccountType_Xbox = 2, // ullAccountID is a 64-bit XUID
+ k_EGameStatsAccountType_SteamGameServer = 3, // ullAccountID is a 64-bit SteamID for a game server
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for GetNewSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionIssued_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 1 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+ bool m_bCollectingAny;
+ bool m_bCollectingDetails;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback for EndSession() method
+//-----------------------------------------------------------------------------
+struct GameStatsSessionClosed_t
+{
+ enum { k_iCallback = k_iSteamGameStatsCallbacks + 2 };
+
+ uint64 m_ulSessionID;
+ EResult m_eResult;
+};
+
+#endif // ISTEAMGAMESTATS_H
diff --git a/lsteamclient/steamworks_sdk_117/isteamhttp.h b/lsteamclient/steamworks_sdk_117/isteamhttp.h
new file mode 100644
index 00000000..2e8af6d2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/isteamhttp.h
@@ -0,0 +1,127 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a depot build
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to building depots
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asyncronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_117/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_117/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_117/isteammatchmaking.h b/lsteamclient/steamworks_sdk_117/isteammatchmaking.h
new file mode 100644
index 00000000..f2727c40
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/isteammatchmaking.h
@@ -0,0 +1,668 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+#pragma pack( pop )
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_117/isteamnetworking.h b/lsteamclient/steamworks_sdk_117/isteamnetworking.h
new file mode 100644
index 00000000..4c4d3f29
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/isteamnetworking.h
@@ -0,0 +1,294 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#pragma pack( push, 8 )
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#pragma pack( push, 8 )
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_117/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_117/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_117/isteamremotestorage.h b/lsteamclient/steamworks_sdk_117/isteamremotestorage.h
new file mode 100644
index 00000000..97954e18
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/isteamremotestorage.h
@@ -0,0 +1,458 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#pragma pack( push, 8 )
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileId_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 256 + 1;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1 ),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformReserved1 = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: helper structure for making updates to published files.
+// make sure to update serialization/deserialization in interfacemap.cpp if new properties are added
+//-----------------------------------------------------------------------------
+#pragma pack( push, 8 )
+struct RemoteStorageUpdatePublishedFileRequest_t
+{
+public:
+ RemoteStorageUpdatePublishedFileRequest_t()
+ {
+ Initialize( k_GIDNil );
+ }
+
+ RemoteStorageUpdatePublishedFileRequest_t( PublishedFileId_t unPublishedFileId )
+ {
+ Initialize( unPublishedFileId );
+ }
+
+ PublishedFileId_t GetPublishedFileId() { return m_unPublishedFileId; }
+
+ void SetFile( const char *pchFile )
+ {
+ m_pchFile = pchFile;
+ m_bUpdateFile = true;
+ }
+
+ const char *GetFile() { return m_pchFile; }
+ bool BUpdateFile() { return m_bUpdateFile; }
+
+ void SetPreviewFile( const char *pchPreviewFile )
+ {
+ m_pchPreviewFile = pchPreviewFile;
+ m_bUpdatePreviewFile = true;
+ }
+
+ const char *GetPreviewFile() { return m_pchPreviewFile; }
+ bool BUpdatePreviewFile() { return m_bUpdatePreviewFile; }
+
+ void SetTitle( const char *pchTitle )
+ {
+ m_pchTitle = pchTitle;
+ m_bUpdateTitle = true;
+ }
+
+ const char *GetTitle() { return m_pchTitle; }
+ bool BUpdateTitle() { return m_bUpdateTitle; }
+
+ void SetDescription( const char *pchDescription )
+ {
+ m_pchDescription = pchDescription;
+ m_bUpdateDescription = true;
+ }
+
+ const char *GetDescription() { return m_pchDescription; }
+ bool BUpdateDescription() { return m_bUpdateDescription; }
+
+ void SetVisibility( ERemoteStoragePublishedFileVisibility eVisibility )
+ {
+ m_eVisibility = eVisibility;
+ m_bUpdateVisibility = true;
+ }
+
+ const ERemoteStoragePublishedFileVisibility GetVisibility() { return m_eVisibility; }
+ bool BUpdateVisibility() { return m_bUpdateVisibility; }
+
+ void SetTags( SteamParamStringArray_t *pTags )
+ {
+ m_pTags = pTags;
+ m_bUpdateTags = true;
+ }
+
+ SteamParamStringArray_t *GetTags() { return m_pTags; }
+ bool BUpdateTags() { return m_bUpdateTags; }
+ SteamParamStringArray_t **GetTagsPointer() { return &m_pTags; }
+
+ void Initialize( PublishedFileId_t unPublishedFileId )
+ {
+ m_unPublishedFileId = unPublishedFileId;
+ m_pchFile = 0;
+ m_pchPreviewFile = 0;
+ m_pchTitle = 0;
+ m_pchDescription = 0;
+ m_pTags = 0;
+
+ m_bUpdateFile = false;
+ m_bUpdatePreviewFile = false;
+ m_bUpdateTitle = false;
+ m_bUpdateDescription = false;
+ m_bUpdateTags = false;
+ m_bUpdateVisibility = false;
+ }
+
+private:
+ PublishedFileId_t m_unPublishedFileId;
+ const char *m_pchFile;
+ const char *m_pchPreviewFile;
+ const char *m_pchTitle;
+ const char *m_pchDescription;
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ SteamParamStringArray_t *m_pTags;
+
+ bool m_bUpdateFile;
+ bool m_bUpdatePreviewFile;
+ bool m_bUpdateTitle;
+ bool m_bUpdateDescription;
+ bool m_bUpdateVisibility;
+ bool m_bUpdateTags;
+};
+#pragma pack( pop )
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent ) = 0;
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead ) = 0;
+
+ // user generated content iteration
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t UpdatePublishedFile( RemoteStorageUpdatePublishedFileRequest_t updatePublishedFileRequest ) = 0;
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION005"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 10 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that created this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdatePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_117/isteamscreenshots.h b/lsteamclient/steamworks_sdk_117/isteamscreenshots.h
new file mode 100644
index 00000000..1eb7adbd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/isteamscreenshots.h
@@ -0,0 +1,86 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION001"
+
+// callbacks
+#pragma pack( push, 8 )
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_117/isteamuser.h b/lsteamclient/steamworks_sdk_117/isteamuser.h
new file mode 100644
index 00000000..a31c969a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/isteamuser.h
@@ -0,0 +1,316 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#pragma pack( push, 8 )
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser016"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_117/isteamuserstats.h b/lsteamclient/steamworks_sdk_117/isteamuserstats.h
new file mode 100644
index 00000000..6b198c38
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/isteamuserstats.h
@@ -0,0 +1,445 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#pragma pack( push, 8 )
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION010"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_117/isteamutils.h b/lsteamclient/steamworks_sdk_117/isteamutils.h
new file mode 100644
index 00000000..b1ea013f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/isteamutils.h
@@ -0,0 +1,256 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils005"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_117/matchmakingtypes.h b/lsteamclient/steamworks_sdk_117/matchmakingtypes.h
new file mode 100644
index 00000000..eae8bd95
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/matchmakingtypes.h
@@ -0,0 +1,240 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 128;
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< current number of players on the server
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_117/steam_api.h b/lsteamclient/steamworks_sdk_117/steam_api.h
new file mode 100644
index 00000000..38c1a9cb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/steam_api.h
@@ -0,0 +1,510 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteamhttp.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool SteamAPI_Init();
+#endif
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+S_API ISteamScreenshots *SteamScreenshots();
+S_API ISteamHTTP *SteamHTTP();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender * SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_117/steam_gameserver.h b/lsteamclient/steamworks_sdk_117/steam_gameserver.h
new file mode 100644
index 00000000..738f375b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/steam_gameserver.h
@@ -0,0 +1,163 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_117/steamclientpublic.h b/lsteamclient/steamworks_sdk_117/steamclientpublic.h
new file mode 100644
index 00000000..da009b7b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/steamclientpublic.h
@@ -0,0 +1,999 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows | k_EMarketingMessageFlagsPlatformMac,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_117/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_117/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_117/steamhttpenums.h b/lsteamclient/steamworks_sdk_117/steamhttpenums.h
new file mode 100644
index 00000000..002fff5a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodOPTIONS,
+ // k_EHTTPMethodPUT,
+ // k_EHTTPMethodDELETE,
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_117/steamps3params.h b/lsteamclient/steamworks_sdk_117/steamps3params.h
new file mode 100644
index 00000000..8289c380
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/steamps3params.h
@@ -0,0 +1,111 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 1
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_117/steamtypes.h b/lsteamclient/steamworks_sdk_117/steamtypes.h
new file mode 100644
index 00000000..16a581be
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_117/steamtypes.h
@@ -0,0 +1,132 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_118/isteamapps.h b/lsteamclient/steamworks_sdk_118/isteamapps.h
new file mode 100644
index 00000000..db84c1b9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/isteamapps.h
@@ -0,0 +1,117 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION005"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivactionCodeResult
+{
+ k_ERegisterActivactionCodeResultOK = 0,
+ k_ERegisterActivactionCodeResultFail = 1,
+ k_ERegisterActivactionCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivactionCodeResultTimeout = 3,
+ k_ERegisterActivactionCodeAlreadyOwned = 4
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivactionCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_118/isteamappticket.h b/lsteamclient/steamworks_sdk_118/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_118/isteamclient.h b/lsteamclient/steamworks_sdk_118/isteamclient.h
new file mode 100644
index 00000000..28781851
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/isteamclient.h
@@ -0,0 +1,180 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient012"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_118/isteamfriends.h b/lsteamclient/steamworks_sdk_118/isteamfriends.h
new file mode 100644
index 00000000..70c6b632
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/isteamfriends.h
@@ -0,0 +1,529 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#pragma pack( push, 8 )
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "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
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *, CSteamID * ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends011"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+ k_EPersonaChangeFacebookInfo = 0x800,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_118/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_118/isteamgamecoordinator.h
new file mode 100644
index 00000000..dded0942
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/isteamgamecoordinator.h
@@ -0,0 +1,65 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_118/isteamgameserver.h b/lsteamclient/steamworks_sdk_118/isteamgameserver.h
new file mode 100644
index 00000000..61cbcdaa
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/isteamgameserver.h
@@ -0,0 +1,384 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn(
+ const char *pszAccountName,
+ const char *pszPassword
+ ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+//
+// Query steam for server data
+//
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer011"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_118/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_118/isteamgameserverstats.h
new file mode 100644
index 00000000..988b284d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/isteamgameserverstats.h
@@ -0,0 +1,93 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_118/isteamhttp.h b/lsteamclient/steamworks_sdk_118/isteamhttp.h
new file mode 100644
index 00000000..2e8af6d2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/isteamhttp.h
@@ -0,0 +1,127 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a depot build
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to building depots
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asyncronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_118/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_118/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_118/isteammatchmaking.h b/lsteamclient/steamworks_sdk_118/isteammatchmaking.h
new file mode 100644
index 00000000..f2727c40
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/isteammatchmaking.h
@@ -0,0 +1,668 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+#pragma pack( pop )
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_118/isteamnetworking.h b/lsteamclient/steamworks_sdk_118/isteamnetworking.h
new file mode 100644
index 00000000..4c4d3f29
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/isteamnetworking.h
@@ -0,0 +1,294 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#pragma pack( push, 8 )
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#pragma pack( push, 8 )
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_118/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_118/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_118/isteamremotestorage.h b/lsteamclient/steamworks_sdk_118/isteamremotestorage.h
new file mode 100644
index 00000000..b1d50475
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/isteamremotestorage.h
@@ -0,0 +1,413 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be
+// larger than 100MB.
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#pragma pack( push, 8 )
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1 ),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformReserved1 = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION006"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 19, 20 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 23 is used, see iclientremotestorage.h
+//
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_118/isteamscreenshots.h b/lsteamclient/steamworks_sdk_118/isteamscreenshots.h
new file mode 100644
index 00000000..1eb7adbd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/isteamscreenshots.h
@@ -0,0 +1,86 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION001"
+
+// callbacks
+#pragma pack( push, 8 )
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_118/isteamuser.h b/lsteamclient/steamworks_sdk_118/isteamuser.h
new file mode 100644
index 00000000..a31c969a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/isteamuser.h
@@ -0,0 +1,316 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#pragma pack( push, 8 )
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser016"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_118/isteamuserstats.h b/lsteamclient/steamworks_sdk_118/isteamuserstats.h
new file mode 100644
index 00000000..6b198c38
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/isteamuserstats.h
@@ -0,0 +1,445 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#pragma pack( push, 8 )
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION010"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_118/isteamutils.h b/lsteamclient/steamworks_sdk_118/isteamutils.h
new file mode 100644
index 00000000..368ce09d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/isteamutils.h
@@ -0,0 +1,257 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils005"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_118/matchmakingtypes.h b/lsteamclient/steamworks_sdk_118/matchmakingtypes.h
new file mode 100644
index 00000000..aeb4137a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/matchmakingtypes.h
@@ -0,0 +1,240 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_118/steam_api.h b/lsteamclient/steamworks_sdk_118/steam_api.h
new file mode 100644
index 00000000..38c1a9cb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/steam_api.h
@@ -0,0 +1,510 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteamhttp.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool SteamAPI_Init();
+#endif
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+S_API ISteamScreenshots *SteamScreenshots();
+S_API ISteamHTTP *SteamHTTP();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender * SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_118/steam_gameserver.h b/lsteamclient/steamworks_sdk_118/steam_gameserver.h
new file mode 100644
index 00000000..738f375b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/steam_gameserver.h
@@ -0,0 +1,163 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_118/steamclientpublic.h b/lsteamclient/steamworks_sdk_118/steamclientpublic.h
new file mode 100644
index 00000000..01264401
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/steamclientpublic.h
@@ -0,0 +1,1004 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLocked = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ k_EChatRoomEnterResponseNoRankingDataLobby = 12, // There is no ranking data available for the lobby
+ k_EChatRoomEnterResponseNoRankingDataUser = 13, // There is no ranking data available for the user
+ k_EChatRoomEnterResponseRankOutOfRange = 14, // The user is out of the allowable ranking range
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows | k_EMarketingMessageFlagsPlatformMac,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_118/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_118/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_118/steamhttpenums.h b/lsteamclient/steamworks_sdk_118/steamhttpenums.h
new file mode 100644
index 00000000..002fff5a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodOPTIONS,
+ // k_EHTTPMethodPUT,
+ // k_EHTTPMethodDELETE,
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_118/steamps3params.h b/lsteamclient/steamworks_sdk_118/steamps3params.h
new file mode 100644
index 00000000..8289c380
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/steamps3params.h
@@ -0,0 +1,111 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 1
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_118/steamtypes.h b/lsteamclient/steamworks_sdk_118/steamtypes.h
new file mode 100644
index 00000000..16a581be
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_118/steamtypes.h
@@ -0,0 +1,132 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_119/isteamapps.h b/lsteamclient/steamworks_sdk_119/isteamapps.h
new file mode 100644
index 00000000..db84c1b9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/isteamapps.h
@@ -0,0 +1,117 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION005"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivactionCodeResult
+{
+ k_ERegisterActivactionCodeResultOK = 0,
+ k_ERegisterActivactionCodeResultFail = 1,
+ k_ERegisterActivactionCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivactionCodeResultTimeout = 3,
+ k_ERegisterActivactionCodeAlreadyOwned = 4
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivactionCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_119/isteamappticket.h b/lsteamclient/steamworks_sdk_119/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_119/isteamclient.h b/lsteamclient/steamworks_sdk_119/isteamclient.h
new file mode 100644
index 00000000..28781851
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/isteamclient.h
@@ -0,0 +1,180 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient012"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_119/isteamfriends.h b/lsteamclient/steamworks_sdk_119/isteamfriends.h
new file mode 100644
index 00000000..3952c95e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/isteamfriends.h
@@ -0,0 +1,563 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#pragma pack( push, 8 )
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // sets the player name, stores it on the server and publishes the changes to all friends who are online
+ virtual void SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "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
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *, CSteamID * ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends011"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+ k_EPersonaChangeFacebookInfo = 0x800,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_119/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_119/isteamgamecoordinator.h
new file mode 100644
index 00000000..dded0942
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/isteamgamecoordinator.h
@@ -0,0 +1,65 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_119/isteamgameserver.h b/lsteamclient/steamworks_sdk_119/isteamgameserver.h
new file mode 100644
index 00000000..6162e928
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/isteamgameserver.h
@@ -0,0 +1,385 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn(
+ const char *pszAccountName,
+ const char *pszPassword
+ ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+//
+// Query steam for server data
+//
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer011"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_119/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_119/isteamgameserverstats.h
new file mode 100644
index 00000000..988b284d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/isteamgameserverstats.h
@@ -0,0 +1,93 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_119/isteamhttp.h b/lsteamclient/steamworks_sdk_119/isteamhttp.h
new file mode 100644
index 00000000..2e8af6d2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/isteamhttp.h
@@ -0,0 +1,127 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a depot build
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to building depots
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asyncronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_119/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_119/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_119/isteammatchmaking.h b/lsteamclient/steamworks_sdk_119/isteammatchmaking.h
new file mode 100644
index 00000000..f2727c40
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/isteammatchmaking.h
@@ -0,0 +1,668 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+#pragma pack( pop )
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_119/isteamnetworking.h b/lsteamclient/steamworks_sdk_119/isteamnetworking.h
new file mode 100644
index 00000000..4c4d3f29
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/isteamnetworking.h
@@ -0,0 +1,294 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#pragma pack( push, 8 )
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#pragma pack( push, 8 )
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_119/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_119/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_119/isteamremotestorage.h b/lsteamclient/steamworks_sdk_119/isteamremotestorage.h
new file mode 100644
index 00000000..4e7a7177
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/isteamremotestorage.h
@@ -0,0 +1,528 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be
+// larger than 100MB.
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#pragma pack( push, 8 )
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 256;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformReserved1 = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( const char *pchVideoURL, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION006"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 23 is free to use
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_119/isteamscreenshots.h b/lsteamclient/steamworks_sdk_119/isteamscreenshots.h
new file mode 100644
index 00000000..1eb7adbd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/isteamscreenshots.h
@@ -0,0 +1,86 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION001"
+
+// callbacks
+#pragma pack( push, 8 )
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_119/isteamuser.h b/lsteamclient/steamworks_sdk_119/isteamuser.h
new file mode 100644
index 00000000..a31c969a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/isteamuser.h
@@ -0,0 +1,316 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#pragma pack( push, 8 )
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser016"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_119/isteamuserstats.h b/lsteamclient/steamworks_sdk_119/isteamuserstats.h
new file mode 100644
index 00000000..6b198c38
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/isteamuserstats.h
@@ -0,0 +1,445 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#pragma pack( push, 8 )
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION010"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_119/isteamutils.h b/lsteamclient/steamworks_sdk_119/isteamutils.h
new file mode 100644
index 00000000..368ce09d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/isteamutils.h
@@ -0,0 +1,257 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils005"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_119/matchmakingtypes.h b/lsteamclient/steamworks_sdk_119/matchmakingtypes.h
new file mode 100644
index 00000000..78e74f8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/matchmakingtypes.h
@@ -0,0 +1,244 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_119/steam_api.h b/lsteamclient/steamworks_sdk_119/steam_api.h
new file mode 100644
index 00000000..38c1a9cb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/steam_api.h
@@ -0,0 +1,510 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteamhttp.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool SteamAPI_Init();
+#endif
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+S_API ISteamScreenshots *SteamScreenshots();
+S_API ISteamHTTP *SteamHTTP();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender * SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_119/steam_gameserver.h b/lsteamclient/steamworks_sdk_119/steam_gameserver.h
new file mode 100644
index 00000000..738f375b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/steam_gameserver.h
@@ -0,0 +1,163 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_119/steamclientpublic.h b/lsteamclient/steamworks_sdk_119/steamclientpublic.h
new file mode 100644
index 00000000..93414f64
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/steamclientpublic.h
@@ -0,0 +1,1005 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseRC = 5,
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ k_EChatRoomEnterResponseNoRankingDataLobby = 12, // There is no ranking data available for the lobby
+ k_EChatRoomEnterResponseNoRankingDataUser = 13, // There is no ranking data available for the user
+ k_EChatRoomEnterResponseRankOutOfRange = 14, // The user is out of the allowable ranking range
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows | k_EMarketingMessageFlagsPlatformMac,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_119/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_119/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_119/steamhttpenums.h b/lsteamclient/steamworks_sdk_119/steamhttpenums.h
new file mode 100644
index 00000000..002fff5a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodOPTIONS,
+ // k_EHTTPMethodPUT,
+ // k_EHTTPMethodDELETE,
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_119/steamps3params.h b/lsteamclient/steamworks_sdk_119/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_119/steamtypes.h b/lsteamclient/steamworks_sdk_119/steamtypes.h
new file mode 100644
index 00000000..01da9bcd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_119/steamtypes.h
@@ -0,0 +1,134 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_120/isteamapps.h b/lsteamclient/steamworks_sdk_120/isteamapps.h
new file mode 100644
index 00000000..db84c1b9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/isteamapps.h
@@ -0,0 +1,117 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION005"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivactionCodeResult
+{
+ k_ERegisterActivactionCodeResultOK = 0,
+ k_ERegisterActivactionCodeResultFail = 1,
+ k_ERegisterActivactionCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivactionCodeResultTimeout = 3,
+ k_ERegisterActivactionCodeAlreadyOwned = 4
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivactionCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_120/isteamappticket.h b/lsteamclient/steamworks_sdk_120/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_120/isteamclient.h b/lsteamclient/steamworks_sdk_120/isteamclient.h
new file mode 100644
index 00000000..55b19420
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/isteamclient.h
@@ -0,0 +1,286 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient012"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+class CSteamCallback
+{
+public:
+ virtual const char *GetCallbackName() const = 0;
+ virtual uint32 GetCallbackID() const = 0;
+ virtual uint8 *GetFixedData() const = 0;
+ virtual uint32 GetFixedSize() const = 0;
+ virtual uint32 GetNumMemberVariables() const = 0;
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const = 0;
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname##_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname##_t *GetNullPointer() { return 0; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( callbackname, numvars ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ C##callbackname () { memset( &m_Data, 0, sizeof(m_Data) ); } \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return numvars; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : m_Data.GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; }; };
+
+#define END_DEFINE_CALLBACK_0( callbackname ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return 0; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { return false; } \
+ }; \
+
+
+#define END_DEFINE_CALLBACK_1( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_120/isteamfriends.h b/lsteamclient/steamworks_sdk_120/isteamfriends.h
new file mode 100644
index 00000000..da2aa8bb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/isteamfriends.h
@@ -0,0 +1,589 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#pragma pack( push, 8 )
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "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
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *, CSteamID * ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends013"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x001,
+ k_EPersonaChangeStatus = 0x002,
+ k_EPersonaChangeComeOnline = 0x004,
+ k_EPersonaChangeGoneOffline = 0x008,
+ k_EPersonaChangeGamePlayed = 0x010,
+ k_EPersonaChangeGameServer = 0x020,
+ k_EPersonaChangeAvatar = 0x040,
+ k_EPersonaChangeJoinedSource= 0x080,
+ k_EPersonaChangeLeftSource = 0x100,
+ k_EPersonaChangeRelationshipChanged = 0x200,
+ k_EPersonaChangeNameFirstSet = 0x400,
+ k_EPersonaChangeFacebookInfo = 0x800,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_120/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_120/isteamgamecoordinator.h
new file mode 100644
index 00000000..dded0942
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/isteamgamecoordinator.h
@@ -0,0 +1,65 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_120/isteamgameserver.h b/lsteamclient/steamworks_sdk_120/isteamgameserver.h
new file mode 100644
index 00000000..6162e928
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/isteamgameserver.h
@@ -0,0 +1,385 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn(
+ const char *pszAccountName,
+ const char *pszPassword
+ ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+//
+// Query steam for server data
+//
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer011"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_120/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_120/isteamgameserverstats.h
new file mode 100644
index 00000000..988b284d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/isteamgameserverstats.h
@@ -0,0 +1,93 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_120/isteamhttp.h b/lsteamclient/steamworks_sdk_120/isteamhttp.h
new file mode 100644
index 00000000..2e8af6d2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/isteamhttp.h
@@ -0,0 +1,127 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a depot build
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to building depots
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asyncronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_120/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_120/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_120/isteammatchmaking.h b/lsteamclient/steamworks_sdk_120/isteammatchmaking.h
new file mode 100644
index 00000000..f2727c40
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/isteammatchmaking.h
@@ -0,0 +1,668 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+#pragma pack( pop )
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_120/isteamnetworking.h b/lsteamclient/steamworks_sdk_120/isteamnetworking.h
new file mode 100644
index 00000000..4c4d3f29
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/isteamnetworking.h
@@ -0,0 +1,294 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#pragma pack( push, 8 )
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#pragma pack( push, 8 )
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_120/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_120/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_120/isteamremotestorage.h b/lsteamclient/steamworks_sdk_120/isteamremotestorage.h
new file mode 100644
index 00000000..86fcfb63
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/isteamremotestorage.h
@@ -0,0 +1,558 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be
+// larger than 100MB.
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#pragma pack( push, 8 )
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 256;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformReserved1 = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopActionOnDuplicateTitle
+{
+ k_EWorkshopActionOnDuplicateTitleReject = 0,
+ k_EWorkshopActionOnDuplicateTitleUpdate = 1,
+ k_EWorkshopActionOnDuplicateTitleNew = 2,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION008"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_120/isteamscreenshots.h b/lsteamclient/steamworks_sdk_120/isteamscreenshots.h
new file mode 100644
index 00000000..1eb7adbd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/isteamscreenshots.h
@@ -0,0 +1,86 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION001"
+
+// callbacks
+#pragma pack( push, 8 )
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_120/isteamuser.h b/lsteamclient/steamworks_sdk_120/isteamuser.h
new file mode 100644
index 00000000..a31c969a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/isteamuser.h
@@ -0,0 +1,316 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#pragma pack( push, 8 )
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser016"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_120/isteamuserstats.h b/lsteamclient/steamworks_sdk_120/isteamuserstats.h
new file mode 100644
index 00000000..69524a09
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/isteamuserstats.h
@@ -0,0 +1,451 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#pragma pack( push, 8 )
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_120/isteamutils.h b/lsteamclient/steamworks_sdk_120/isteamutils.h
new file mode 100644
index 00000000..368ce09d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/isteamutils.h
@@ -0,0 +1,257 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils005"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_120/matchmakingtypes.h b/lsteamclient/steamworks_sdk_120/matchmakingtypes.h
new file mode 100644
index 00000000..78e74f8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/matchmakingtypes.h
@@ -0,0 +1,244 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_120/steam_api.h b/lsteamclient/steamworks_sdk_120/steam_api.h
new file mode 100644
index 00000000..38c1a9cb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/steam_api.h
@@ -0,0 +1,510 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteamhttp.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool SteamAPI_Init();
+#endif
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+S_API ISteamScreenshots *SteamScreenshots();
+S_API ISteamHTTP *SteamHTTP();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender * SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_120/steam_gameserver.h b/lsteamclient/steamworks_sdk_120/steam_gameserver.h
new file mode 100644
index 00000000..738f375b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/steam_gameserver.h
@@ -0,0 +1,163 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_120/steamclientpublic.h b/lsteamclient/steamworks_sdk_120/steamclientpublic.h
new file mode 100644
index 00000000..91fcb0f1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/steamclientpublic.h
@@ -0,0 +1,1032 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwernshipFlags
+{
+ k_EAppOwernshipFlags_None = 0, // unknown
+ k_EAppOwernshipFlags_OwnsLicense = 1, // owns license for this game
+ k_EAppOwernshipFlags_FreeLicense = 2, // not paid for game
+ k_EAppOwernshipFlags_RegionRestricted = 4, // owns app, but not allowed to play in current region
+ k_EAppOwernshipFlags_LowViolence = 8, // only low violence version
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ k_EChatRoomEnterResponseNoRankingDataLobby = 12, // There is no ranking data available for the lobby
+ k_EChatRoomEnterResponseNoRankingDataUser = 13, // There is no ranking data available for the user
+ k_EChatRoomEnterResponseRankOutOfRange = 14, // The user is out of the allowable ranking range
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows | k_EMarketingMessageFlagsPlatformMac,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_120/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_120/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_120/steamhttpenums.h b/lsteamclient/steamworks_sdk_120/steamhttpenums.h
new file mode 100644
index 00000000..002fff5a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodOPTIONS,
+ // k_EHTTPMethodPUT,
+ // k_EHTTPMethodDELETE,
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_120/steamps3params.h b/lsteamclient/steamworks_sdk_120/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_120/steamtypes.h b/lsteamclient/steamworks_sdk_120/steamtypes.h
new file mode 100644
index 00000000..01da9bcd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_120/steamtypes.h
@@ -0,0 +1,134 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_121/isteamapps.h b/lsteamclient/steamworks_sdk_121/isteamapps.h
new file mode 100644
index 00000000..db84c1b9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/isteamapps.h
@@ -0,0 +1,117 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION005"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivactionCodeResult
+{
+ k_ERegisterActivactionCodeResultOK = 0,
+ k_ERegisterActivactionCodeResultFail = 1,
+ k_ERegisterActivactionCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivactionCodeResultTimeout = 3,
+ k_ERegisterActivactionCodeAlreadyOwned = 4
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivactionCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_121/isteamappticket.h b/lsteamclient/steamworks_sdk_121/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_121/isteamclient.h b/lsteamclient/steamworks_sdk_121/isteamclient.h
new file mode 100644
index 00000000..55b19420
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/isteamclient.h
@@ -0,0 +1,286 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient012"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+class CSteamCallback
+{
+public:
+ virtual const char *GetCallbackName() const = 0;
+ virtual uint32 GetCallbackID() const = 0;
+ virtual uint8 *GetFixedData() const = 0;
+ virtual uint32 GetFixedSize() const = 0;
+ virtual uint32 GetNumMemberVariables() const = 0;
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const = 0;
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname##_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname##_t *GetNullPointer() { return 0; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( callbackname, numvars ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ C##callbackname () { memset( &m_Data, 0, sizeof(m_Data) ); } \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return numvars; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : m_Data.GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; }; };
+
+#define END_DEFINE_CALLBACK_0( callbackname ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return 0; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { return false; } \
+ }; \
+
+
+#define END_DEFINE_CALLBACK_1( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_121/isteamfriends.h b/lsteamclient/steamworks_sdk_121/isteamfriends.h
new file mode 100644
index 00000000..379b8162
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/isteamfriends.h
@@ -0,0 +1,590 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#pragma pack( push, 8 )
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "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
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *, CSteamID * ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends013"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_121/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_121/isteamgamecoordinator.h
new file mode 100644
index 00000000..dded0942
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/isteamgamecoordinator.h
@@ -0,0 +1,65 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_121/isteamgameserver.h b/lsteamclient/steamworks_sdk_121/isteamgameserver.h
new file mode 100644
index 00000000..6162e928
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/isteamgameserver.h
@@ -0,0 +1,385 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn(
+ const char *pszAccountName,
+ const char *pszPassword
+ ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+//
+// Query steam for server data
+//
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer011"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_121/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_121/isteamgameserverstats.h
new file mode 100644
index 00000000..988b284d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/isteamgameserverstats.h
@@ -0,0 +1,93 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_121/isteamhttp.h b/lsteamclient/steamworks_sdk_121/isteamhttp.h
new file mode 100644
index 00000000..2e8af6d2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/isteamhttp.h
@@ -0,0 +1,127 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a depot build
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to building depots
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asyncronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_121/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_121/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_121/isteammatchmaking.h b/lsteamclient/steamworks_sdk_121/isteammatchmaking.h
new file mode 100644
index 00000000..f2727c40
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/isteammatchmaking.h
@@ -0,0 +1,668 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filters that are available in the ppchFilters params are:
+
+ "map" - map the server is running, as set in the dedicated server api
+ "dedicated" - reports bDedicated from the API
+ "secure" - VAC-enabled
+ "full" - not full
+ "empty" - not empty
+ "noplayers" - is empty
+ "proxy" - a relay server
+
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+#pragma pack( pop )
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_121/isteamnetworking.h b/lsteamclient/steamworks_sdk_121/isteamnetworking.h
new file mode 100644
index 00000000..4c4d3f29
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/isteamnetworking.h
@@ -0,0 +1,294 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#pragma pack( push, 8 )
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#pragma pack( push, 8 )
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_121/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_121/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_121/isteamremotestorage.h b/lsteamclient/steamworks_sdk_121/isteamremotestorage.h
new file mode 100644
index 00000000..86fcfb63
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/isteamremotestorage.h
@@ -0,0 +1,558 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be
+// larger than 100MB.
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#pragma pack( push, 8 )
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 256;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformReserved1 = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopActionOnDuplicateTitle
+{
+ k_EWorkshopActionOnDuplicateTitleReject = 0,
+ k_EWorkshopActionOnDuplicateTitleUpdate = 1,
+ k_EWorkshopActionOnDuplicateTitleNew = 2,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION008"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_121/isteamscreenshots.h b/lsteamclient/steamworks_sdk_121/isteamscreenshots.h
new file mode 100644
index 00000000..1eb7adbd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/isteamscreenshots.h
@@ -0,0 +1,86 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION001"
+
+// callbacks
+#pragma pack( push, 8 )
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_121/isteamuser.h b/lsteamclient/steamworks_sdk_121/isteamuser.h
new file mode 100644
index 00000000..a31c969a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/isteamuser.h
@@ -0,0 +1,316 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#pragma pack( push, 8 )
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser016"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_121/isteamuserstats.h b/lsteamclient/steamworks_sdk_121/isteamuserstats.h
new file mode 100644
index 00000000..69524a09
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/isteamuserstats.h
@@ -0,0 +1,451 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#pragma pack( push, 8 )
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_121/isteamutils.h b/lsteamclient/steamworks_sdk_121/isteamutils.h
new file mode 100644
index 00000000..7a6a5312
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/isteamutils.h
@@ -0,0 +1,294 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils005"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_121/matchmakingtypes.h b/lsteamclient/steamworks_sdk_121/matchmakingtypes.h
new file mode 100644
index 00000000..78e74f8b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/matchmakingtypes.h
@@ -0,0 +1,244 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_121/steam_api.h b/lsteamclient/steamworks_sdk_121/steam_api.h
new file mode 100644
index 00000000..38c1a9cb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/steam_api.h
@@ -0,0 +1,510 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteamhttp.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool SteamAPI_Init();
+#endif
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+S_API ISteamScreenshots *SteamScreenshots();
+S_API ISteamHTTP *SteamHTTP();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender * SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_121/steam_gameserver.h b/lsteamclient/steamworks_sdk_121/steam_gameserver.h
new file mode 100644
index 00000000..738f375b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/steam_gameserver.h
@@ -0,0 +1,163 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_121/steamclientpublic.h b/lsteamclient/steamworks_sdk_121/steamclientpublic.h
new file mode 100644
index 00000000..91fcb0f1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/steamclientpublic.h
@@ -0,0 +1,1032 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwernshipFlags
+{
+ k_EAppOwernshipFlags_None = 0, // unknown
+ k_EAppOwernshipFlags_OwnsLicense = 1, // owns license for this game
+ k_EAppOwernshipFlags_FreeLicense = 2, // not paid for game
+ k_EAppOwernshipFlags_RegionRestricted = 4, // owns app, but not allowed to play in current region
+ k_EAppOwernshipFlags_LowViolence = 8, // only low violence version
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ k_EChatRoomEnterResponseNoRankingDataLobby = 12, // There is no ranking data available for the lobby
+ k_EChatRoomEnterResponseNoRankingDataUser = 13, // There is no ranking data available for the user
+ k_EChatRoomEnterResponseRankOutOfRange = 14, // The user is out of the allowable ranking range
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows | k_EMarketingMessageFlagsPlatformMac,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_121/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_121/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_121/steamhttpenums.h b/lsteamclient/steamworks_sdk_121/steamhttpenums.h
new file mode 100644
index 00000000..002fff5a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodOPTIONS,
+ // k_EHTTPMethodPUT,
+ // k_EHTTPMethodDELETE,
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_121/steamps3params.h b/lsteamclient/steamworks_sdk_121/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_121/steamtypes.h b/lsteamclient/steamworks_sdk_121/steamtypes.h
new file mode 100644
index 00000000..01da9bcd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_121/steamtypes.h
@@ -0,0 +1,134 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_122/isteamapps.h b/lsteamclient/steamworks_sdk_122/isteamapps.h
new file mode 100644
index 00000000..9d1260cd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/isteamapps.h
@@ -0,0 +1,120 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION005"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivactionCodeResult
+{
+ k_ERegisterActivactionCodeResultOK = 0,
+ k_ERegisterActivactionCodeResultFail = 1,
+ k_ERegisterActivactionCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivactionCodeResultTimeout = 3,
+ k_ERegisterActivactionCodeAlreadyOwned = 4
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivactionCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_122/isteamappticket.h b/lsteamclient/steamworks_sdk_122/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_122/isteamclient.h b/lsteamclient/steamworks_sdk_122/isteamclient.h
new file mode 100644
index 00000000..55b19420
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/isteamclient.h
@@ -0,0 +1,286 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient012"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+class CSteamCallback
+{
+public:
+ virtual const char *GetCallbackName() const = 0;
+ virtual uint32 GetCallbackID() const = 0;
+ virtual uint8 *GetFixedData() const = 0;
+ virtual uint32 GetFixedSize() const = 0;
+ virtual uint32 GetNumMemberVariables() const = 0;
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const = 0;
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname##_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname##_t *GetNullPointer() { return 0; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( callbackname, numvars ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ C##callbackname () { memset( &m_Data, 0, sizeof(m_Data) ); } \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return numvars; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : m_Data.GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; }; };
+
+#define END_DEFINE_CALLBACK_0( callbackname ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return 0; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { return false; } \
+ }; \
+
+
+#define END_DEFINE_CALLBACK_1( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_122/isteamfriends.h b/lsteamclient/steamworks_sdk_122/isteamfriends.h
new file mode 100644
index 00000000..379b8162
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/isteamfriends.h
@@ -0,0 +1,590 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#pragma pack( push, 8 )
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "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
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *, CSteamID * ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends013"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_122/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_122/isteamgamecoordinator.h
new file mode 100644
index 00000000..dded0942
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/isteamgamecoordinator.h
@@ -0,0 +1,65 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_122/isteamgameserver.h b/lsteamclient/steamworks_sdk_122/isteamgameserver.h
new file mode 100644
index 00000000..6162e928
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/isteamgameserver.h
@@ -0,0 +1,385 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn(
+ const char *pszAccountName,
+ const char *pszPassword
+ ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+//
+// Query steam for server data
+//
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer011"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_122/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_122/isteamgameserverstats.h
new file mode 100644
index 00000000..988b284d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/isteamgameserverstats.h
@@ -0,0 +1,93 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_122/isteamhttp.h b/lsteamclient/steamworks_sdk_122/isteamhttp.h
new file mode 100644
index 00000000..8815b521
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/isteamhttp.h
@@ -0,0 +1,170 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a depot build
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to building depots
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asyncronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asyncronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestCompleted_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#pragma pack( push, 8 )
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_122/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_122/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_122/isteammatchmaking.h b/lsteamclient/steamworks_sdk_122/isteammatchmaking.h
new file mode 100644
index 00000000..a718b182
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/isteammatchmaking.h
@@ -0,0 +1,726 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+#pragma pack( pop )
+
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_122/isteamnetworking.h b/lsteamclient/steamworks_sdk_122/isteamnetworking.h
new file mode 100644
index 00000000..4c4d3f29
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/isteamnetworking.h
@@ -0,0 +1,294 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#pragma pack( push, 8 )
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#pragma pack( push, 8 )
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_122/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_122/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_122/isteamremotestorage.h b/lsteamclient/steamworks_sdk_122/isteamremotestorage.h
new file mode 100644
index 00000000..44f6a058
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/isteamremotestorage.h
@@ -0,0 +1,562 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be
+// larger than 100MB.
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#pragma pack( push, 8 )
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 256;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformReserved1 = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+
+ // Update k_EWorkshopFileTypeMax if you add values
+ k_EWorkshopFileTypeMax = 9
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION010"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_122/isteamscreenshots.h b/lsteamclient/steamworks_sdk_122/isteamscreenshots.h
new file mode 100644
index 00000000..1eb7adbd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/isteamscreenshots.h
@@ -0,0 +1,86 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION001"
+
+// callbacks
+#pragma pack( push, 8 )
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_122/isteamuser.h b/lsteamclient/steamworks_sdk_122/isteamuser.h
new file mode 100644
index 00000000..248de600
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/isteamuser.h
@@ -0,0 +1,327 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#pragma pack( push, 8 )
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser016"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_122/isteamuserstats.h b/lsteamclient/steamworks_sdk_122/isteamuserstats.h
new file mode 100644
index 00000000..69524a09
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/isteamuserstats.h
@@ -0,0 +1,451 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#pragma pack( push, 8 )
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_122/isteamutils.h b/lsteamclient/steamworks_sdk_122/isteamutils.h
new file mode 100644
index 00000000..7a6a5312
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/isteamutils.h
@@ -0,0 +1,294 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils005"
+
+
+// callbacks
+#pragma pack( push, 8 )
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_122/matchmakingtypes.h b/lsteamclient/steamworks_sdk_122/matchmakingtypes.h
new file mode 100644
index 00000000..28c58500
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/matchmakingtypes.h
@@ -0,0 +1,249 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_122/steam_api.h b/lsteamclient/steamworks_sdk_122/steam_api.h
new file mode 100644
index 00000000..38c1a9cb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/steam_api.h
@@ -0,0 +1,510 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteamhttp.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool SteamAPI_Init();
+#endif
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+S_API ISteamScreenshots *SteamScreenshots();
+S_API ISteamHTTP *SteamHTTP();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender * SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_122/steam_gameserver.h b/lsteamclient/steamworks_sdk_122/steam_gameserver.h
new file mode 100644
index 00000000..738f375b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/steam_gameserver.h
@@ -0,0 +1,163 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_122/steamclientpublic.h b/lsteamclient/steamworks_sdk_122/steamclientpublic.h
new file mode 100644
index 00000000..4a2a81aa
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/steamclientpublic.h
@@ -0,0 +1,1059 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwernshipFlags
+{
+ k_EAppOwernshipFlags_None = 0, // unknown
+ k_EAppOwernshipFlags_OwnsLicense = 1, // owns license for this game
+ k_EAppOwernshipFlags_FreeLicense = 2, // not paid for game
+ k_EAppOwernshipFlags_RegionRestricted = 4, // owns app, but not allowed to play in current region
+ k_EAppOwernshipFlags_LowViolence = 8, // only low violence version
+ k_EAppOwernshipFlags_InvalidPlatform = 16, // app not supported on current platform
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media = 0x010, // media trailer
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ k_EChatRoomEnterResponseNoRankingDataLobby = 12, // There is no ranking data available for the lobby
+ k_EChatRoomEnterResponseNoRankingDataUser = 13, // There is no ranking data available for the user
+ k_EChatRoomEnterResponseRankOutOfRange = 14, // The user is out of the allowable ranking range
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows | k_EMarketingMessageFlagsPlatformMac,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_122/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_122/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_122/steamhttpenums.h b/lsteamclient/steamworks_sdk_122/steamhttpenums.h
new file mode 100644
index 00000000..43802297
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodOPTIONS,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_122/steamps3params.h b/lsteamclient/steamworks_sdk_122/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_122/steamtypes.h b/lsteamclient/steamworks_sdk_122/steamtypes.h
new file mode 100644
index 00000000..01da9bcd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_122/steamtypes.h
@@ -0,0 +1,134 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_123/isteamapps.h b/lsteamclient/steamworks_sdk_123/isteamapps.h
new file mode 100644
index 00000000..b5df8499
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/isteamapps.h
@@ -0,0 +1,127 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_123/isteamappticket.h b/lsteamclient/steamworks_sdk_123/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_123/isteamclient.h b/lsteamclient/steamworks_sdk_123/isteamclient.h
new file mode 100644
index 00000000..6045ad86
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/isteamclient.h
@@ -0,0 +1,343 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient012"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+class CSteamCallback
+{
+public:
+ virtual const char *GetCallbackName() const = 0;
+ virtual uint32 GetCallbackID() const = 0;
+ virtual uint8 *GetFixedData() const = 0;
+ virtual uint32 GetFixedSize() const = 0;
+ virtual uint32 GetNumMemberVariables() const = 0;
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const = 0;
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname##_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname##_t *GetNullPointer() { return 0; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( callbackname, numvars ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ C##callbackname () { memset( &m_Data, 0, sizeof(m_Data) ); } \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return numvars; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : m_Data.GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; }; };
+
+#define END_DEFINE_CALLBACK_0( callbackname ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return 0; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { return false; } \
+ }; \
+
+
+#define END_DEFINE_CALLBACK_1( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_123/isteamfriends.h b/lsteamclient/steamworks_sdk_123/isteamfriends.h
new file mode 100644
index 00000000..8533f064
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/isteamfriends.h
@@ -0,0 +1,602 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "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
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *, CSteamID * ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends013"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_123/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_123/isteamgamecoordinator.h
new file mode 100644
index 00000000..dded0942
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/isteamgamecoordinator.h
@@ -0,0 +1,65 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_123/isteamgameserver.h b/lsteamclient/steamworks_sdk_123/isteamgameserver.h
new file mode 100644
index 00000000..da7fba55
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/isteamgameserver.h
@@ -0,0 +1,391 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn(
+ const char *pszAccountName,
+ const char *pszPassword
+ ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+//
+// Query steam for server data
+//
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer011"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_123/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_123/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_123/isteamhttp.h b/lsteamclient/steamworks_sdk_123/isteamhttp.h
new file mode 100644
index 00000000..58a283d4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/isteamhttp.h
@@ -0,0 +1,176 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestCompleted_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_123/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_123/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_123/isteammatchmaking.h b/lsteamclient/steamworks_sdk_123/isteammatchmaking.h
new file mode 100644
index 00000000..44d4d782
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/isteammatchmaking.h
@@ -0,0 +1,731 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_123/isteamnetworking.h b/lsteamclient/steamworks_sdk_123/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_123/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_123/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_123/isteamremotestorage.h b/lsteamclient/steamworks_sdk_123/isteamremotestorage.h
new file mode 100644
index 00000000..fdfc9161
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/isteamremotestorage.h
@@ -0,0 +1,599 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be
+// larger than 100MB.
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 256;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformReserved1 = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+ k_EWorkshopFileTypeWebGuide = 9,
+ k_EWorkshopFileTypeIntegratedGuide = 10,
+
+ // Update k_EWorkshopFileTypeMax if you add values
+ k_EWorkshopFileTypeMax = 11
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION010"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_123/isteamscreenshots.h b/lsteamclient/steamworks_sdk_123/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_123/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_123/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_123/isteamuser.h b/lsteamclient/steamworks_sdk_123/isteamuser.h
new file mode 100644
index 00000000..e1faecb6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/isteamuser.h
@@ -0,0 +1,339 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser016"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_123/isteamuserstats.h b/lsteamclient/steamworks_sdk_123/isteamuserstats.h
new file mode 100644
index 00000000..595ec356
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/isteamuserstats.h
@@ -0,0 +1,463 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_123/isteamutils.h b/lsteamclient/steamworks_sdk_123/isteamutils.h
new file mode 100644
index 00000000..2104053d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/isteamutils.h
@@ -0,0 +1,300 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils005"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_123/matchmakingtypes.h b/lsteamclient/steamworks_sdk_123/matchmakingtypes.h
new file mode 100644
index 00000000..28c58500
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/matchmakingtypes.h
@@ -0,0 +1,249 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_123/steam_api.h b/lsteamclient/steamworks_sdk_123/steam_api.h
new file mode 100644
index 00000000..329f36b5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/steam_api.h
@@ -0,0 +1,522 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool SteamAPI_Init();
+#endif
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+S_API ISteamScreenshots *SteamScreenshots();
+S_API ISteamHTTP *SteamHTTP();
+S_API ISteamUnifiedMessages *SteamUnifiedMessages();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender * SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamUnifiedMessages = NULL;
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = NULL;
+#endif
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_123/steam_gameserver.h b/lsteamclient/steamworks_sdk_123/steam_gameserver.h
new file mode 100644
index 00000000..738f375b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/steam_gameserver.h
@@ -0,0 +1,163 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_123/steamclientpublic.h b/lsteamclient/steamworks_sdk_123/steamclientpublic.h
new file mode 100644
index 00000000..e2a84542
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/steamclientpublic.h
@@ -0,0 +1,1067 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78 // the value entered is outside the acceptable range
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwernshipFlags
+{
+ k_EAppOwernshipFlags_None = 0, // unknown
+ k_EAppOwernshipFlags_OwnsLicense = 1, // owns license for this game
+ k_EAppOwernshipFlags_FreeLicense = 2, // not paid for game
+ k_EAppOwernshipFlags_RegionRestricted = 4, // owns app, but not allowed to play in current region
+ k_EAppOwernshipFlags_LowViolence = 8, // only low violence version
+ k_EAppOwernshipFlags_InvalidPlatform = 16, // app not supported on current platform
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media = 0x010, // media trailer
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_123/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_123/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_123/steamhttpenums.h b/lsteamclient/steamworks_sdk_123/steamhttpenums.h
new file mode 100644
index 00000000..43802297
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodOPTIONS,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_123/steamps3params.h b/lsteamclient/steamworks_sdk_123/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_123/steamtypes.h b/lsteamclient/steamworks_sdk_123/steamtypes.h
new file mode 100644
index 00000000..7fec2ed1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123/steamtypes.h
@@ -0,0 +1,136 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_123a/isteamapps.h b/lsteamclient/steamworks_sdk_123a/isteamapps.h
new file mode 100644
index 00000000..b5df8499
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/isteamapps.h
@@ -0,0 +1,127 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_123a/isteamappticket.h b/lsteamclient/steamworks_sdk_123a/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_123a/isteamclient.h b/lsteamclient/steamworks_sdk_123a/isteamclient.h
new file mode 100644
index 00000000..6045ad86
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/isteamclient.h
@@ -0,0 +1,343 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient012"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+class CSteamCallback
+{
+public:
+ virtual const char *GetCallbackName() const = 0;
+ virtual uint32 GetCallbackID() const = 0;
+ virtual uint8 *GetFixedData() const = 0;
+ virtual uint32 GetFixedSize() const = 0;
+ virtual uint32 GetNumMemberVariables() const = 0;
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const = 0;
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname##_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname##_t *GetNullPointer() { return 0; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( callbackname, numvars ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ C##callbackname () { memset( &m_Data, 0, sizeof(m_Data) ); } \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return numvars; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : m_Data.GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; }; };
+
+#define END_DEFINE_CALLBACK_0( callbackname ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return 0; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { return false; } \
+ }; \
+
+
+#define END_DEFINE_CALLBACK_1( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_123a/isteamfriends.h b/lsteamclient/steamworks_sdk_123a/isteamfriends.h
new file mode 100644
index 00000000..8533f064
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/isteamfriends.h
@@ -0,0 +1,602 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "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
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *, CSteamID * ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends013"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_123a/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_123a/isteamgamecoordinator.h
new file mode 100644
index 00000000..dded0942
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/isteamgamecoordinator.h
@@ -0,0 +1,65 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_123a/isteamgameserver.h b/lsteamclient/steamworks_sdk_123a/isteamgameserver.h
new file mode 100644
index 00000000..da7fba55
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/isteamgameserver.h
@@ -0,0 +1,391 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn(
+ const char *pszAccountName,
+ const char *pszPassword
+ ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+//
+// Query steam for server data
+//
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer011"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_123a/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_123a/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_123a/isteamhttp.h b/lsteamclient/steamworks_sdk_123a/isteamhttp.h
new file mode 100644
index 00000000..58a283d4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/isteamhttp.h
@@ -0,0 +1,176 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestCompleted_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_123a/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_123a/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_123a/isteammatchmaking.h b/lsteamclient/steamworks_sdk_123a/isteammatchmaking.h
new file mode 100644
index 00000000..44d4d782
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/isteammatchmaking.h
@@ -0,0 +1,731 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_123a/isteamnetworking.h b/lsteamclient/steamworks_sdk_123a/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_123a/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_123a/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_123a/isteamremotestorage.h b/lsteamclient/steamworks_sdk_123a/isteamremotestorage.h
new file mode 100644
index 00000000..fdfc9161
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/isteamremotestorage.h
@@ -0,0 +1,599 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be
+// larger than 100MB.
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 256;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformReserved1 = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+ k_EWorkshopFileTypeWebGuide = 9,
+ k_EWorkshopFileTypeIntegratedGuide = 10,
+
+ // Update k_EWorkshopFileTypeMax if you add values
+ k_EWorkshopFileTypeMax = 11
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION010"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_123a/isteamscreenshots.h b/lsteamclient/steamworks_sdk_123a/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_123a/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_123a/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_123a/isteamuser.h b/lsteamclient/steamworks_sdk_123a/isteamuser.h
new file mode 100644
index 00000000..e1faecb6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/isteamuser.h
@@ -0,0 +1,339 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser016"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_123a/isteamuserstats.h b/lsteamclient/steamworks_sdk_123a/isteamuserstats.h
new file mode 100644
index 00000000..595ec356
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/isteamuserstats.h
@@ -0,0 +1,463 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_123a/isteamutils.h b/lsteamclient/steamworks_sdk_123a/isteamutils.h
new file mode 100644
index 00000000..2104053d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/isteamutils.h
@@ -0,0 +1,300 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils005"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_123a/matchmakingtypes.h b/lsteamclient/steamworks_sdk_123a/matchmakingtypes.h
new file mode 100644
index 00000000..28c58500
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/matchmakingtypes.h
@@ -0,0 +1,249 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_123a/steam_api.h b/lsteamclient/steamworks_sdk_123a/steam_api.h
new file mode 100644
index 00000000..329f36b5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/steam_api.h
@@ -0,0 +1,522 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool SteamAPI_Init();
+#endif
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+S_API ISteamScreenshots *SteamScreenshots();
+S_API ISteamHTTP *SteamHTTP();
+S_API ISteamUnifiedMessages *SteamUnifiedMessages();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender * SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamUnifiedMessages = NULL;
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = NULL;
+#endif
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_123a/steam_gameserver.h b/lsteamclient/steamworks_sdk_123a/steam_gameserver.h
new file mode 100644
index 00000000..738f375b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/steam_gameserver.h
@@ -0,0 +1,163 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_123a/steamclientpublic.h b/lsteamclient/steamworks_sdk_123a/steamclientpublic.h
new file mode 100644
index 00000000..e2a84542
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/steamclientpublic.h
@@ -0,0 +1,1067 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78 // the value entered is outside the acceptable range
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwernshipFlags
+{
+ k_EAppOwernshipFlags_None = 0, // unknown
+ k_EAppOwernshipFlags_OwnsLicense = 1, // owns license for this game
+ k_EAppOwernshipFlags_FreeLicense = 2, // not paid for game
+ k_EAppOwernshipFlags_RegionRestricted = 4, // owns app, but not allowed to play in current region
+ k_EAppOwernshipFlags_LowViolence = 8, // only low violence version
+ k_EAppOwernshipFlags_InvalidPlatform = 16, // app not supported on current platform
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media = 0x010, // media trailer
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_123a/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_123a/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_123a/steamhttpenums.h b/lsteamclient/steamworks_sdk_123a/steamhttpenums.h
new file mode 100644
index 00000000..43802297
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodOPTIONS,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_123a/steamps3params.h b/lsteamclient/steamworks_sdk_123a/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_123a/steamtypes.h b/lsteamclient/steamworks_sdk_123a/steamtypes.h
new file mode 100644
index 00000000..7fec2ed1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_123a/steamtypes.h
@@ -0,0 +1,136 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_124/isteamapps.h b/lsteamclient/steamworks_sdk_124/isteamapps.h
new file mode 100644
index 00000000..d9c70cc4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteamapps.h
@@ -0,0 +1,128 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_124/isteamappticket.h b/lsteamclient/steamworks_sdk_124/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_124/isteamclient.h b/lsteamclient/steamworks_sdk_124/isteamclient.h
new file mode 100644
index 00000000..23159ff5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteamclient.h
@@ -0,0 +1,350 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient012"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+class CSteamCallback
+{
+public:
+ virtual const char *GetCallbackName() const = 0;
+ virtual uint32 GetCallbackID() const = 0;
+ virtual uint8 *GetFixedData() const = 0;
+ virtual uint32 GetFixedSize() const = 0;
+ virtual uint32 GetNumMemberVariables() const = 0;
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const = 0;
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname##_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname##_t *GetNullPointer() { return 0; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( callbackname, numvars ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ C##callbackname () { memset( &m_Data, 0, sizeof(m_Data) ); } \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return numvars; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : m_Data.GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; }; };
+
+#define END_DEFINE_CALLBACK_0( callbackname ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return 0; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { return false; } \
+ }; \
+
+
+#define END_DEFINE_CALLBACK_1( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_124/isteamcontroller.h b/lsteamclient/steamworks_sdk_124/isteamcontroller.h
new file mode 100644
index 00000000..d3f88384
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteamcontroller.h
@@ -0,0 +1,62 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+#pragma pack( pop )
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "STEAMCONTROLLER_INTERFACE_VERSION"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+/*
+struct ControllerCallback_t
+{
+ enum { k_iCallback = k_iSteamControllerCallbacks + 1 };
+
+};
+*/
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_124/isteamfriends.h b/lsteamclient/steamworks_sdk_124/isteamfriends.h
new file mode 100644
index 00000000..cc794c12
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteamfriends.h
@@ -0,0 +1,606 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *, CSteamID * ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends013"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_124/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_124/isteamgamecoordinator.h
new file mode 100644
index 00000000..dded0942
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteamgamecoordinator.h
@@ -0,0 +1,65 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_124/isteamgameserver.h b/lsteamclient/steamworks_sdk_124/isteamgameserver.h
new file mode 100644
index 00000000..da7fba55
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteamgameserver.h
@@ -0,0 +1,391 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn(
+ const char *pszAccountName,
+ const char *pszPassword
+ ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+//
+// Query steam for server data
+//
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer011"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_124/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_124/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_124/isteamhttp.h b/lsteamclient/steamworks_sdk_124/isteamhttp.h
new file mode 100644
index 00000000..12a050d8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteamhttp.h
@@ -0,0 +1,176 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_124/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_124/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_124/isteammatchmaking.h b/lsteamclient/steamworks_sdk_124/isteammatchmaking.h
new file mode 100644
index 00000000..44d4d782
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteammatchmaking.h
@@ -0,0 +1,731 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_124/isteamnetworking.h b/lsteamclient/steamworks_sdk_124/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_124/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_124/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_124/isteamremotestorage.h b/lsteamclient/steamworks_sdk_124/isteamremotestorage.h
new file mode 100644
index 00000000..0acf3b2a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteamremotestorage.h
@@ -0,0 +1,599 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be
+// larger than 100MB.
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 256;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformReserved1 = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+ k_EWorkshopFileTypeWebGuide = 9,
+ k_EWorkshopFileTypeIntegratedGuide = 10,
+
+ // Update k_EWorkshopFileTypeMax if you add values
+ k_EWorkshopFileTypeMax = 11
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION010"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_124/isteamscreenshots.h b/lsteamclient/steamworks_sdk_124/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_124/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_124/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_124/isteamuser.h b/lsteamclient/steamworks_sdk_124/isteamuser.h
new file mode 100644
index 00000000..eb79e002
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteamuser.h
@@ -0,0 +1,347 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser017"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_124/isteamuserstats.h b/lsteamclient/steamworks_sdk_124/isteamuserstats.h
new file mode 100644
index 00000000..595ec356
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteamuserstats.h
@@ -0,0 +1,463 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_124/isteamutils.h b/lsteamclient/steamworks_sdk_124/isteamutils.h
new file mode 100644
index 00000000..d094a6b2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/isteamutils.h
@@ -0,0 +1,304 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils006"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_124/matchmakingtypes.h b/lsteamclient/steamworks_sdk_124/matchmakingtypes.h
new file mode 100644
index 00000000..28c58500
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/matchmakingtypes.h
@@ -0,0 +1,249 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_124/steam_api.h b/lsteamclient/steamworks_sdk_124/steam_api.h
new file mode 100644
index 00000000..e4a4ac80
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/steam_api.h
@@ -0,0 +1,524 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool SteamAPI_Init();
+#endif
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+S_API ISteamScreenshots *SteamScreenshots();
+S_API ISteamHTTP *SteamHTTP();
+S_API ISteamUnifiedMessages *SteamUnifiedMessages();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender * SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamUnifiedMessages = NULL;
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = NULL;
+#endif
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_124/steam_gameserver.h b/lsteamclient/steamworks_sdk_124/steam_gameserver.h
new file mode 100644
index 00000000..738f375b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/steam_gameserver.h
@@ -0,0 +1,163 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_124/steamclientpublic.h b/lsteamclient/steamworks_sdk_124/steamclientpublic.h
new file mode 100644
index 00000000..7b3b9620
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/steamclientpublic.h
@@ -0,0 +1,1089 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78 // the value entered is outside the acceptable range
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwernshipFlags
+{
+ k_EAppOwernshipFlags_None = 0, // unknown
+ k_EAppOwernshipFlags_OwnsLicense = 1, // owns license for this game
+ k_EAppOwernshipFlags_FreeLicense = 2, // not paid for game
+ k_EAppOwernshipFlags_RegionRestricted = 4, // owns app, but not allowed to play in current region
+ k_EAppOwernshipFlags_LowViolence = 8, // only low violence version
+ k_EAppOwernshipFlags_InvalidPlatform = 16, // app not supported on current platform
+ k_EAppOwernshipFlags_SharedLicense = 32, // license was granted by authorized local device
+ k_EAppOwernshipFlags_FreeWeekend = 64, // owned by a free weekend licenses
+ k_EAppOwernshipFlags_LicenseLocked = 128, // shared license is locked (in use) by other user
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media = 0x010, // media trailer
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_124/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_124/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_124/steamhttpenums.h b/lsteamclient/steamworks_sdk_124/steamhttpenums.h
new file mode 100644
index 00000000..f4849a4f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_124/steamps3params.h b/lsteamclient/steamworks_sdk_124/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_124/steamtypes.h b/lsteamclient/steamworks_sdk_124/steamtypes.h
new file mode 100644
index 00000000..857e2bf7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/steamtypes.h
@@ -0,0 +1,149 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_124/steamuniverse.h b/lsteamclient/steamworks_sdk_124/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_124/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_125/isteamapps.h b/lsteamclient/steamworks_sdk_125/isteamapps.h
new file mode 100644
index 00000000..d9c70cc4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteamapps.h
@@ -0,0 +1,128 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_125/isteamappticket.h b/lsteamclient/steamworks_sdk_125/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_125/isteamclient.h b/lsteamclient/steamworks_sdk_125/isteamclient.h
new file mode 100644
index 00000000..23159ff5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteamclient.h
@@ -0,0 +1,350 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient012"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+class CSteamCallback
+{
+public:
+ virtual const char *GetCallbackName() const = 0;
+ virtual uint32 GetCallbackID() const = 0;
+ virtual uint8 *GetFixedData() const = 0;
+ virtual uint32 GetFixedSize() const = 0;
+ virtual uint32 GetNumMemberVariables() const = 0;
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const = 0;
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname##_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname##_t *GetNullPointer() { return 0; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( callbackname, numvars ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ C##callbackname () { memset( &m_Data, 0, sizeof(m_Data) ); } \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return numvars; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : m_Data.GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; }; };
+
+#define END_DEFINE_CALLBACK_0( callbackname ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return 0; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { return false; } \
+ }; \
+
+
+#define END_DEFINE_CALLBACK_1( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_125/isteamcontroller.h b/lsteamclient/steamworks_sdk_125/isteamcontroller.h
new file mode 100644
index 00000000..d3f88384
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteamcontroller.h
@@ -0,0 +1,62 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+#pragma pack( pop )
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "STEAMCONTROLLER_INTERFACE_VERSION"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+/*
+struct ControllerCallback_t
+{
+ enum { k_iCallback = k_iSteamControllerCallbacks + 1 };
+
+};
+*/
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_125/isteamfriends.h b/lsteamclient/steamworks_sdk_125/isteamfriends.h
new file mode 100644
index 00000000..cc794c12
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteamfriends.h
@@ -0,0 +1,606 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *, CSteamID * ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends013"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_125/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_125/isteamgamecoordinator.h
new file mode 100644
index 00000000..dded0942
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteamgamecoordinator.h
@@ -0,0 +1,65 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_125/isteamgameserver.h b/lsteamclient/steamworks_sdk_125/isteamgameserver.h
new file mode 100644
index 00000000..da7fba55
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteamgameserver.h
@@ -0,0 +1,391 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn(
+ const char *pszAccountName,
+ const char *pszPassword
+ ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+//
+// Query steam for server data
+//
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer011"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID;
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_125/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_125/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_125/isteamhttp.h b/lsteamclient/steamworks_sdk_125/isteamhttp.h
new file mode 100644
index 00000000..12a050d8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteamhttp.h
@@ -0,0 +1,176 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_125/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_125/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_125/isteammatchmaking.h b/lsteamclient/steamworks_sdk_125/isteammatchmaking.h
new file mode 100644
index 00000000..44d4d782
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteammatchmaking.h
@@ -0,0 +1,731 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_125/isteamnetworking.h b/lsteamclient/steamworks_sdk_125/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_125/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_125/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_125/isteamremotestorage.h b/lsteamclient/steamworks_sdk_125/isteamremotestorage.h
new file mode 100644
index 00000000..31cad28a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteamremotestorage.h
@@ -0,0 +1,648 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+ k_EWorkshopFileTypeWebGuide = 9,
+ k_EWorkshopFileTypeIntegratedGuide = 10,
+ k_EWorkshopFileTypeMerch = 11,
+ k_EWorkshopFileTypeControllerBinding = 12,
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13,
+
+ // Update k_EWorkshopFileTypeMax if you add values
+ k_EWorkshopFileTypeMax = 14
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+enum
+{
+ k_WorkshopForceLoadPublishedFileDetailsFromCache = -1
+};
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION011"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ UGCHandle_t m_hFile; // The new content
+};
+
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_125/isteamscreenshots.h b/lsteamclient/steamworks_sdk_125/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_125/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_125/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_125/isteamuser.h b/lsteamclient/steamworks_sdk_125/isteamuser.h
new file mode 100644
index 00000000..eb79e002
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteamuser.h
@@ -0,0 +1,347 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser017"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_125/isteamuserstats.h b/lsteamclient/steamworks_sdk_125/isteamuserstats.h
new file mode 100644
index 00000000..595ec356
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteamuserstats.h
@@ -0,0 +1,463 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_125/isteamutils.h b/lsteamclient/steamworks_sdk_125/isteamutils.h
new file mode 100644
index 00000000..d094a6b2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/isteamutils.h
@@ -0,0 +1,304 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils006"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_125/matchmakingtypes.h b/lsteamclient/steamworks_sdk_125/matchmakingtypes.h
new file mode 100644
index 00000000..28c58500
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/matchmakingtypes.h
@@ -0,0 +1,249 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_125/steam_api.h b/lsteamclient/steamworks_sdk_125/steam_api.h
new file mode 100644
index 00000000..e4a4ac80
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/steam_api.h
@@ -0,0 +1,524 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool SteamAPI_Init();
+#endif
+
+S_API ISteamUser *SteamUser();
+S_API ISteamFriends *SteamFriends();
+S_API ISteamUtils *SteamUtils();
+S_API ISteamMatchmaking *SteamMatchmaking();
+S_API ISteamUserStats *SteamUserStats();
+S_API ISteamApps *SteamApps();
+S_API ISteamNetworking *SteamNetworking();
+S_API ISteamMatchmakingServers *SteamMatchmakingServers();
+S_API ISteamRemoteStorage *SteamRemoteStorage();
+S_API ISteamScreenshots *SteamScreenshots();
+S_API ISteamHTTP *SteamHTTP();
+S_API ISteamUnifiedMessages *SteamUnifiedMessages();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender * SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamUnifiedMessages = NULL;
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = NULL;
+#endif
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_125/steam_gameserver.h b/lsteamclient/steamworks_sdk_125/steam_gameserver.h
new file mode 100644
index 00000000..738f375b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/steam_gameserver.h
@@ -0,0 +1,163 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_125/steamclientpublic.h b/lsteamclient/steamworks_sdk_125/steamclientpublic.h
new file mode 100644
index 00000000..7b3b9620
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/steamclientpublic.h
@@ -0,0 +1,1089 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78 // the value entered is outside the acceptable range
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwernshipFlags
+{
+ k_EAppOwernshipFlags_None = 0, // unknown
+ k_EAppOwernshipFlags_OwnsLicense = 1, // owns license for this game
+ k_EAppOwernshipFlags_FreeLicense = 2, // not paid for game
+ k_EAppOwernshipFlags_RegionRestricted = 4, // owns app, but not allowed to play in current region
+ k_EAppOwernshipFlags_LowViolence = 8, // only low violence version
+ k_EAppOwernshipFlags_InvalidPlatform = 16, // app not supported on current platform
+ k_EAppOwernshipFlags_SharedLicense = 32, // license was granted by authorized local device
+ k_EAppOwernshipFlags_FreeWeekend = 64, // owned by a free weekend licenses
+ k_EAppOwernshipFlags_LicenseLocked = 128, // shared license is locked (in use) by other user
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media = 0x010, // media trailer
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_125/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_125/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_125/steamhttpenums.h b/lsteamclient/steamworks_sdk_125/steamhttpenums.h
new file mode 100644
index 00000000..f4849a4f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_125/steamps3params.h b/lsteamclient/steamworks_sdk_125/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_125/steamtypes.h b/lsteamclient/steamworks_sdk_125/steamtypes.h
new file mode 100644
index 00000000..857e2bf7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/steamtypes.h
@@ -0,0 +1,149 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_125/steamuniverse.h b/lsteamclient/steamworks_sdk_125/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_125/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_126/isteamapps.h b/lsteamclient/steamworks_sdk_126/isteamapps.h
new file mode 100644
index 00000000..87bcdc30
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteamapps.h
@@ -0,0 +1,149 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION006"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_126/isteamappticket.h b/lsteamclient/steamworks_sdk_126/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_126/isteamclient.h b/lsteamclient/steamworks_sdk_126/isteamclient.h
new file mode 100644
index 00000000..9bdac34f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteamclient.h
@@ -0,0 +1,361 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient012"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+class CSteamCallback
+{
+public:
+ virtual const char *GetCallbackName() const = 0;
+ virtual uint32 GetCallbackID() const = 0;
+ virtual uint8 *GetFixedData() const = 0;
+ virtual uint32 GetFixedSize() const = 0;
+ virtual uint32 GetNumMemberVariables() const = 0;
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const = 0;
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname##_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname##_t *GetNullPointer() { return 0; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( callbackname, numvars ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ C##callbackname () { memset( &m_Data, 0, sizeof(m_Data) ); } \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return numvars; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : m_Data.GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; }; };
+
+#define END_DEFINE_CALLBACK_0( callbackname ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return 0; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { return false; } \
+ }; \
+
+
+#define END_DEFINE_CALLBACK_1( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_126/isteamcontroller.h b/lsteamclient/steamworks_sdk_126/isteamcontroller.h
new file mode 100644
index 00000000..d3f88384
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteamcontroller.h
@@ -0,0 +1,62 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+#pragma pack( pop )
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "STEAMCONTROLLER_INTERFACE_VERSION"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+/*
+struct ControllerCallback_t
+{
+ enum { k_iCallback = k_iSteamControllerCallbacks + 1 };
+
+};
+*/
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_126/isteamfriends.h b/lsteamclient/steamworks_sdk_126/isteamfriends.h
new file mode 100644
index 00000000..8e2136a9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteamfriends.h
@@ -0,0 +1,609 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends014"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_126/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_126/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_126/isteamgameserver.h b/lsteamclient/steamworks_sdk_126/isteamgameserver.h
new file mode 100644
index 00000000..f6c157f4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteamgameserver.h
@@ -0,0 +1,392 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn(
+ const char *pszAccountName,
+ const char *pszPassword
+ ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+//
+// Query steam for server data
+//
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer011"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_126/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_126/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_126/isteamhttp.h b/lsteamclient/steamworks_sdk_126/isteamhttp.h
new file mode 100644
index 00000000..12a050d8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteamhttp.h
@@ -0,0 +1,176 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_126/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_126/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_126/isteammatchmaking.h b/lsteamclient/steamworks_sdk_126/isteammatchmaking.h
new file mode 100644
index 00000000..44d4d782
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteammatchmaking.h
@@ -0,0 +1,731 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_126/isteamnetworking.h b/lsteamclient/steamworks_sdk_126/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_126/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_126/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_126/isteamremotestorage.h b/lsteamclient/steamworks_sdk_126/isteamremotestorage.h
new file mode 100644
index 00000000..6f0451d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteamremotestorage.h
@@ -0,0 +1,649 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+ k_EWorkshopFileTypeWebGuide = 9,
+ k_EWorkshopFileTypeIntegratedGuide = 10,
+ k_EWorkshopFileTypeMerch = 11,
+ k_EWorkshopFileTypeControllerBinding = 12,
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13,
+
+ // Update k_EWorkshopFileTypeMax if you add values
+ k_EWorkshopFileTypeMax = 14
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+enum
+{
+ k_WorkshopForceLoadPublishedFileDetailsFromCache = -1
+};
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION012"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ UGCHandle_t m_hFile; // The new content
+};
+
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_126/isteamscreenshots.h b/lsteamclient/steamworks_sdk_126/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_126/isteamugc.h b/lsteamclient/steamworks_sdk_126/isteamugc.h
new file mode 100644
index 00000000..8d1c044b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteamugc.h
@@ -0,0 +1,192 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+};
+
+
+const uint32 kNumUGCResultsPerPage = 50;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Send the query to Steam
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+
+ // Request full details for one piece of UGC
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID ) = 0;
+
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION001"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_126/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_126/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_126/isteamuser.h b/lsteamclient/steamworks_sdk_126/isteamuser.h
new file mode 100644
index 00000000..6eb52688
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteamuser.h
@@ -0,0 +1,348 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser017"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_126/isteamuserstats.h b/lsteamclient/steamworks_sdk_126/isteamuserstats.h
new file mode 100644
index 00000000..595ec356
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteamuserstats.h
@@ -0,0 +1,463 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_126/isteamutils.h b/lsteamclient/steamworks_sdk_126/isteamutils.h
new file mode 100644
index 00000000..d094a6b2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/isteamutils.h
@@ -0,0 +1,304 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils006"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_126/matchmakingtypes.h b/lsteamclient/steamworks_sdk_126/matchmakingtypes.h
new file mode 100644
index 00000000..28c58500
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/matchmakingtypes.h
@@ -0,0 +1,249 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_126/steam_api.h b/lsteamclient/steamworks_sdk_126/steam_api.h
new file mode 100644
index 00000000..af5fcbb1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/steam_api.h
@@ -0,0 +1,539 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *S_CALLTYPE SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool S_CALLTYPE SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool S_CALLTYPE SteamAPI_Init();
+#endif
+
+S_API ISteamUser *S_CALLTYPE SteamUser();
+S_API ISteamFriends *S_CALLTYPE SteamFriends();
+S_API ISteamUtils *S_CALLTYPE SteamUtils();
+S_API ISteamMatchmaking *S_CALLTYPE SteamMatchmaking();
+S_API ISteamUserStats *S_CALLTYPE SteamUserStats();
+S_API ISteamApps *S_CALLTYPE SteamApps();
+S_API ISteamNetworking *S_CALLTYPE SteamNetworking();
+S_API ISteamMatchmakingServers *S_CALLTYPE SteamMatchmakingServers();
+S_API ISteamRemoteStorage *S_CALLTYPE SteamRemoteStorage();
+S_API ISteamScreenshots *S_CALLTYPE SteamScreenshots();
+S_API ISteamHTTP *S_CALLTYPE SteamHTTP();
+S_API ISteamUnifiedMessages *S_CALLTYPE SteamUnifiedMessages();
+S_API ISteamController *S_CALLTYPE SteamController();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender *S_CALLTYPE SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() { return m_pController; }
+ ISteamUGC* SteamUGC() { return m_pSteamUGC; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = NULL;
+#endif
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = SteamClient()->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = SteamClient()->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_126/steam_gameserver.h b/lsteamclient/steamworks_sdk_126/steam_gameserver.h
new file mode 100644
index 00000000..738f375b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/steam_gameserver.h
@@ -0,0 +1,163 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_126/steamclientpublic.h b/lsteamclient/steamworks_sdk_126/steamclientpublic.h
new file mode 100644
index 00000000..d38ea4e3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/steamclientpublic.h
@@ -0,0 +1,1093 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwernshipFlags
+{
+ k_EAppOwernshipFlags_None = 0, // unknown
+ k_EAppOwernshipFlags_OwnsLicense = 1, // owns license for this game
+ k_EAppOwernshipFlags_FreeLicense = 2, // not paid for game
+ k_EAppOwernshipFlags_RegionRestricted = 4, // owns app, but not allowed to play in current region
+ k_EAppOwernshipFlags_LowViolence = 8, // only low violence version
+ k_EAppOwernshipFlags_InvalidPlatform = 16, // app not supported on current platform
+ k_EAppOwernshipFlags_SharedLicense = 32, // license was granted by authorized local device
+ k_EAppOwernshipFlags_FreeWeekend = 64, // owned by a free weekend licenses
+ k_EAppOwernshipFlags_LicenseLocked = 128, // shared license is locked (in use) by other user
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media = 0x010, // media trailer
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_126/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_126/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_126/steamhttpenums.h b/lsteamclient/steamworks_sdk_126/steamhttpenums.h
new file mode 100644
index 00000000..1d0a48da
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_126/steamps3params.h b/lsteamclient/steamworks_sdk_126/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_126/steamtypes.h b/lsteamclient/steamworks_sdk_126/steamtypes.h
new file mode 100644
index 00000000..985a1f77
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/steamtypes.h
@@ -0,0 +1,151 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_126/steamuniverse.h b/lsteamclient/steamworks_sdk_126/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_126a/isteamapps.h b/lsteamclient/steamworks_sdk_126a/isteamapps.h
new file mode 100644
index 00000000..87bcdc30
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteamapps.h
@@ -0,0 +1,149 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION006"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_126a/isteamappticket.h b/lsteamclient/steamworks_sdk_126a/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_126a/isteamclient.h b/lsteamclient/steamworks_sdk_126a/isteamclient.h
new file mode 100644
index 00000000..9bdac34f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteamclient.h
@@ -0,0 +1,361 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient012"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+class CSteamCallback
+{
+public:
+ virtual const char *GetCallbackName() const = 0;
+ virtual uint32 GetCallbackID() const = 0;
+ virtual uint8 *GetFixedData() const = 0;
+ virtual uint32 GetFixedSize() const = 0;
+ virtual uint32 GetNumMemberVariables() const = 0;
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const = 0;
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname##_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname##_t *GetNullPointer() { return 0; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( callbackname, numvars ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ C##callbackname () { memset( &m_Data, 0, sizeof(m_Data) ); } \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return numvars; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : m_Data.GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; }; };
+
+#define END_DEFINE_CALLBACK_0( callbackname ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return 0; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { return false; } \
+ }; \
+
+
+#define END_DEFINE_CALLBACK_1( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_126a/isteamcontroller.h b/lsteamclient/steamworks_sdk_126a/isteamcontroller.h
new file mode 100644
index 00000000..d3f88384
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteamcontroller.h
@@ -0,0 +1,62 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+#pragma pack( pop )
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "STEAMCONTROLLER_INTERFACE_VERSION"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+/*
+struct ControllerCallback_t
+{
+ enum { k_iCallback = k_iSteamControllerCallbacks + 1 };
+
+};
+*/
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_126a/isteamfriends.h b/lsteamclient/steamworks_sdk_126a/isteamfriends.h
new file mode 100644
index 00000000..8e2136a9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteamfriends.h
@@ -0,0 +1,609 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends014"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_126a/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_126a/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_126a/isteamgameserver.h b/lsteamclient/steamworks_sdk_126a/isteamgameserver.h
new file mode 100644
index 00000000..f6c157f4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteamgameserver.h
@@ -0,0 +1,392 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn(
+ const char *pszAccountName,
+ const char *pszPassword
+ ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+//
+// Query steam for server data
+//
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer011"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_126a/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_126a/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_126a/isteamhttp.h b/lsteamclient/steamworks_sdk_126a/isteamhttp.h
new file mode 100644
index 00000000..12a050d8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteamhttp.h
@@ -0,0 +1,176 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_126a/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_126a/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_126a/isteammatchmaking.h b/lsteamclient/steamworks_sdk_126a/isteammatchmaking.h
new file mode 100644
index 00000000..44d4d782
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteammatchmaking.h
@@ -0,0 +1,731 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_126a/isteamnetworking.h b/lsteamclient/steamworks_sdk_126a/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_126a/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_126a/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_126a/isteamremotestorage.h b/lsteamclient/steamworks_sdk_126a/isteamremotestorage.h
new file mode 100644
index 00000000..6f0451d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteamremotestorage.h
@@ -0,0 +1,649 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+ k_EWorkshopFileTypeWebGuide = 9,
+ k_EWorkshopFileTypeIntegratedGuide = 10,
+ k_EWorkshopFileTypeMerch = 11,
+ k_EWorkshopFileTypeControllerBinding = 12,
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13,
+
+ // Update k_EWorkshopFileTypeMax if you add values
+ k_EWorkshopFileTypeMax = 14
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+enum
+{
+ k_WorkshopForceLoadPublishedFileDetailsFromCache = -1
+};
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION012"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ UGCHandle_t m_hFile; // The new content
+};
+
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_126a/isteamscreenshots.h b/lsteamclient/steamworks_sdk_126a/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_126a/isteamugc.h b/lsteamclient/steamworks_sdk_126a/isteamugc.h
new file mode 100644
index 00000000..8d1c044b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteamugc.h
@@ -0,0 +1,192 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+};
+
+
+const uint32 kNumUGCResultsPerPage = 50;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Send the query to Steam
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+
+ // Request full details for one piece of UGC
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID ) = 0;
+
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION001"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_126a/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_126a/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_126a/isteamuser.h b/lsteamclient/steamworks_sdk_126a/isteamuser.h
new file mode 100644
index 00000000..6eb52688
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteamuser.h
@@ -0,0 +1,348 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser017"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_126a/isteamuserstats.h b/lsteamclient/steamworks_sdk_126a/isteamuserstats.h
new file mode 100644
index 00000000..595ec356
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteamuserstats.h
@@ -0,0 +1,463 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_126a/isteamutils.h b/lsteamclient/steamworks_sdk_126a/isteamutils.h
new file mode 100644
index 00000000..d094a6b2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/isteamutils.h
@@ -0,0 +1,304 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils006"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_126a/matchmakingtypes.h b/lsteamclient/steamworks_sdk_126a/matchmakingtypes.h
new file mode 100644
index 00000000..28c58500
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/matchmakingtypes.h
@@ -0,0 +1,249 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_126a/steam_api.h b/lsteamclient/steamworks_sdk_126a/steam_api.h
new file mode 100644
index 00000000..34e3ef4d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/steam_api.h
@@ -0,0 +1,540 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *S_CALLTYPE SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool S_CALLTYPE SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool S_CALLTYPE SteamAPI_Init();
+#endif
+
+S_API ISteamUser *S_CALLTYPE SteamUser();
+S_API ISteamFriends *S_CALLTYPE SteamFriends();
+S_API ISteamUtils *S_CALLTYPE SteamUtils();
+S_API ISteamMatchmaking *S_CALLTYPE SteamMatchmaking();
+S_API ISteamUserStats *S_CALLTYPE SteamUserStats();
+S_API ISteamApps *S_CALLTYPE SteamApps();
+S_API ISteamNetworking *S_CALLTYPE SteamNetworking();
+S_API ISteamMatchmakingServers *S_CALLTYPE SteamMatchmakingServers();
+S_API ISteamRemoteStorage *S_CALLTYPE SteamRemoteStorage();
+S_API ISteamScreenshots *S_CALLTYPE SteamScreenshots();
+S_API ISteamHTTP *S_CALLTYPE SteamHTTP();
+S_API ISteamUnifiedMessages *S_CALLTYPE SteamUnifiedMessages();
+S_API ISteamController *S_CALLTYPE SteamController();
+S_API ISteamUGC *S_CALLTYPE SteamUGC();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender *S_CALLTYPE SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() { return m_pController; }
+ ISteamUGC* SteamUGC() { return m_pSteamUGC; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = NULL;
+#endif
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = SteamClient()->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = SteamClient()->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_126a/steam_gameserver.h b/lsteamclient/steamworks_sdk_126a/steam_gameserver.h
new file mode 100644
index 00000000..738f375b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/steam_gameserver.h
@@ -0,0 +1,163 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_126a/steamclientpublic.h b/lsteamclient/steamworks_sdk_126a/steamclientpublic.h
new file mode 100644
index 00000000..d38ea4e3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/steamclientpublic.h
@@ -0,0 +1,1093 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwernshipFlags
+{
+ k_EAppOwernshipFlags_None = 0, // unknown
+ k_EAppOwernshipFlags_OwnsLicense = 1, // owns license for this game
+ k_EAppOwernshipFlags_FreeLicense = 2, // not paid for game
+ k_EAppOwernshipFlags_RegionRestricted = 4, // owns app, but not allowed to play in current region
+ k_EAppOwernshipFlags_LowViolence = 8, // only low violence version
+ k_EAppOwernshipFlags_InvalidPlatform = 16, // app not supported on current platform
+ k_EAppOwernshipFlags_SharedLicense = 32, // license was granted by authorized local device
+ k_EAppOwernshipFlags_FreeWeekend = 64, // owned by a free weekend licenses
+ k_EAppOwernshipFlags_LicenseLocked = 128, // shared license is locked (in use) by other user
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media = 0x010, // media trailer
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_126a/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_126a/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_126a/steamhttpenums.h b/lsteamclient/steamworks_sdk_126a/steamhttpenums.h
new file mode 100644
index 00000000..1d0a48da
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_126a/steamps3params.h b/lsteamclient/steamworks_sdk_126a/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_126a/steamtypes.h b/lsteamclient/steamworks_sdk_126a/steamtypes.h
new file mode 100644
index 00000000..985a1f77
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/steamtypes.h
@@ -0,0 +1,151 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_126a/steamuniverse.h b/lsteamclient/steamworks_sdk_126a/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_126a/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_127/isteamapps.h b/lsteamclient/steamworks_sdk_127/isteamapps.h
new file mode 100644
index 00000000..87bcdc30
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteamapps.h
@@ -0,0 +1,149 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION006"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_127/isteamappticket.h b/lsteamclient/steamworks_sdk_127/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_127/isteamclient.h b/lsteamclient/steamworks_sdk_127/isteamclient.h
new file mode 100644
index 00000000..9bdac34f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteamclient.h
@@ -0,0 +1,361 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient012"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+class CSteamCallback
+{
+public:
+ virtual const char *GetCallbackName() const = 0;
+ virtual uint32 GetCallbackID() const = 0;
+ virtual uint8 *GetFixedData() const = 0;
+ virtual uint32 GetFixedSize() const = 0;
+ virtual uint32 GetNumMemberVariables() const = 0;
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const = 0;
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname##_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname##_t *GetNullPointer() { return 0; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( callbackname, numvars ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ C##callbackname () { memset( &m_Data, 0, sizeof(m_Data) ); } \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return numvars; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : m_Data.GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; }; };
+
+#define END_DEFINE_CALLBACK_0( callbackname ) }; \
+class C##callbackname : public CSteamCallback { \
+public: callbackname##_t m_Data; \
+ virtual const char *GetCallbackName() const { return #callbackname; } \
+ virtual uint32 GetCallbackID() const { return callbackname##_t::k_iCallback; } \
+ virtual uint32 GetFixedSize() const { return sizeof( m_Data ); } \
+ virtual uint8 *GetFixedData() const { return (uint8*)&m_Data; } \
+ virtual uint32 GetNumMemberVariables() const { return 0; } \
+ virtual bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) const { return false; } \
+ }; \
+
+
+#define END_DEFINE_CALLBACK_1( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7( callbackname ) \
+ END_CALLBACK_INTERNAL_BEGIN( callbackname, 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_127/isteamcontroller.h b/lsteamclient/steamworks_sdk_127/isteamcontroller.h
new file mode 100644
index 00000000..2231a7a5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteamcontroller.h
@@ -0,0 +1,91 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamcontrollerpublic.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+#define MAX_STEAM_CONTROLLERS 8
+
+#pragma pack( pop )
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ //
+ // Native controller support API
+ //
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init( const char *pchAbsolutePathToControllerConfigVDF ) = 0;
+ virtual bool Shutdown() = 0;
+
+ // Pump callback/callresult events, SteamAPI_RunCallbacks will do this for you,
+ // normally never need to call directly.
+ virtual void RunFrame() = 0;
+
+ // Get the state of the specified controller, returns false if that controller is not connected
+ virtual bool GetControllerState( uint32 unControllerIndex, SteamControllerState_t *pState ) = 0;
+
+ // Trigger a haptic pulse on the controller
+ virtual void TriggerHapticPulse( uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ // Set the override mode which is used to choose to use different base/legacy bindings from your config file
+ virtual void SetOverrideMode( const char *pchMode ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "STEAMCONTROLLER_INTERFACE_VERSION"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+/*
+struct ControllerCallback_t
+{
+ enum { k_iCallback = k_iSteamControllerCallbacks + 1 };
+
+};
+*/
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_127/isteamfriends.h b/lsteamclient/steamworks_sdk_127/isteamfriends.h
new file mode 100644
index 00000000..8e2136a9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteamfriends.h
@@ -0,0 +1,609 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends014"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_127/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_127/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_127/isteamgameserver.h b/lsteamclient/steamworks_sdk_127/isteamgameserver.h
new file mode 100644
index 00000000..f6c157f4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteamgameserver.h
@@ -0,0 +1,392 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn(
+ const char *pszAccountName,
+ const char *pszPassword
+ ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+//
+// Query steam for server data
+//
+
+ // Ask for the gameplay stats for the server. Results returned in a callback
+ virtual void GetGameplayStats( ) = 0;
+
+ // Gets the reputation score for the game server. This API also checks if the server or some
+ // other server on the same IP is banned from the Steam master servers.
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer011"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_127/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_127/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_127/isteamhttp.h b/lsteamclient/steamworks_sdk_127/isteamhttp.h
new file mode 100644
index 00000000..12a050d8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteamhttp.h
@@ -0,0 +1,176 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_127/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_127/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_127/isteammatchmaking.h b/lsteamclient/steamworks_sdk_127/isteammatchmaking.h
new file mode 100644
index 00000000..44d4d782
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteammatchmaking.h
@@ -0,0 +1,731 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_127/isteamnetworking.h b/lsteamclient/steamworks_sdk_127/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_127/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_127/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_127/isteamremotestorage.h b/lsteamclient/steamworks_sdk_127/isteamremotestorage.h
new file mode 100644
index 00000000..6f0451d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteamremotestorage.h
@@ -0,0 +1,649 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+ k_EWorkshopFileTypeWebGuide = 9,
+ k_EWorkshopFileTypeIntegratedGuide = 10,
+ k_EWorkshopFileTypeMerch = 11,
+ k_EWorkshopFileTypeControllerBinding = 12,
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13,
+
+ // Update k_EWorkshopFileTypeMax if you add values
+ k_EWorkshopFileTypeMax = 14
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+enum
+{
+ k_WorkshopForceLoadPublishedFileDetailsFromCache = -1
+};
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION012"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ UGCHandle_t m_hFile; // The new content
+};
+
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_127/isteamscreenshots.h b/lsteamclient/steamworks_sdk_127/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_127/isteamugc.h b/lsteamclient/steamworks_sdk_127/isteamugc.h
new file mode 100644
index 00000000..8d1c044b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteamugc.h
@@ -0,0 +1,192 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+};
+
+
+const uint32 kNumUGCResultsPerPage = 50;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Send the query to Steam
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+
+ // Request full details for one piece of UGC
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID ) = 0;
+
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION001"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_127/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_127/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_127/isteamuser.h b/lsteamclient/steamworks_sdk_127/isteamuser.h
new file mode 100644
index 00000000..6eb52688
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteamuser.h
@@ -0,0 +1,348 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice(uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser017"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_127/isteamuserstats.h b/lsteamclient/steamworks_sdk_127/isteamuserstats.h
new file mode 100644
index 00000000..595ec356
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteamuserstats.h
@@ -0,0 +1,463 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_127/isteamutils.h b/lsteamclient/steamworks_sdk_127/isteamutils.h
new file mode 100644
index 00000000..d094a6b2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/isteamutils.h
@@ -0,0 +1,304 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils006"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_127/matchmakingtypes.h b/lsteamclient/steamworks_sdk_127/matchmakingtypes.h
new file mode 100644
index 00000000..28c58500
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/matchmakingtypes.h
@@ -0,0 +1,249 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_127/steam_api.h b/lsteamclient/steamworks_sdk_127/steam_api.h
new file mode 100644
index 00000000..34e3ef4d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/steam_api.h
@@ -0,0 +1,540 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *S_CALLTYPE SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool S_CALLTYPE SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool S_CALLTYPE SteamAPI_Init();
+#endif
+
+S_API ISteamUser *S_CALLTYPE SteamUser();
+S_API ISteamFriends *S_CALLTYPE SteamFriends();
+S_API ISteamUtils *S_CALLTYPE SteamUtils();
+S_API ISteamMatchmaking *S_CALLTYPE SteamMatchmaking();
+S_API ISteamUserStats *S_CALLTYPE SteamUserStats();
+S_API ISteamApps *S_CALLTYPE SteamApps();
+S_API ISteamNetworking *S_CALLTYPE SteamNetworking();
+S_API ISteamMatchmakingServers *S_CALLTYPE SteamMatchmakingServers();
+S_API ISteamRemoteStorage *S_CALLTYPE SteamRemoteStorage();
+S_API ISteamScreenshots *S_CALLTYPE SteamScreenshots();
+S_API ISteamHTTP *S_CALLTYPE SteamHTTP();
+S_API ISteamUnifiedMessages *S_CALLTYPE SteamUnifiedMessages();
+S_API ISteamController *S_CALLTYPE SteamController();
+S_API ISteamUGC *S_CALLTYPE SteamUGC();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender *S_CALLTYPE SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() { return m_pController; }
+ ISteamUGC* SteamUGC() { return m_pSteamUGC; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = NULL;
+#endif
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = SteamClient()->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = SteamClient()->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_127/steam_gameserver.h b/lsteamclient/steamworks_sdk_127/steam_gameserver.h
new file mode 100644
index 00000000..738f375b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/steam_gameserver.h
@@ -0,0 +1,163 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_127/steamclientpublic.h b/lsteamclient/steamworks_sdk_127/steamclientpublic.h
new file mode 100644
index 00000000..6e2e3b85
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/steamclientpublic.h
@@ -0,0 +1,1096 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwernshipFlags
+{
+ k_EAppOwernshipFlags_None = 0x000, // unknown
+ k_EAppOwernshipFlags_OwnsLicense = 0x001, // owns license for this game
+ k_EAppOwernshipFlags_FreeLicense = 0x002, // not paid for game
+ k_EAppOwernshipFlags_RegionRestricted = 0x004, // owns app, but not allowed to play in current region
+ k_EAppOwernshipFlags_LowViolence = 0x008, // only low violence version
+ k_EAppOwernshipFlags_InvalidPlatform = 0x010, // app not supported on current platform
+ k_EAppOwernshipFlags_SharedLicense = 0x020, // license was granted by authorized local device
+ k_EAppOwernshipFlags_FreeWeekend = 0x040, // owned by a free weekend licenses
+ k_EAppOwernshipFlags_LicenseLocked = 0x080, // shared license is locked (in use) by other user
+ k_EAppOwernshipFlags_LicensePending = 0x100, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwernshipFlags_LicenseExpired = 0x200, // doesn't own app anymore since license expired
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media = 0x010, // media trailer
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_127/steamcontrollerpublic.h b/lsteamclient/steamworks_sdk_127/steamcontrollerpublic.h
new file mode 100644
index 00000000..f6950e53
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/steamcontrollerpublic.h
@@ -0,0 +1,76 @@
+//========= Copyright © 1996-2013, Valve LLC, All rights reserved. ============
+//
+// Purpose: Controller related public types/constants
+//
+//=============================================================================
+
+#ifndef STEAMCONTROLLERPUBLIC_H
+#define STEAMCONTROLLERPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#if defined( STEAM ) || defined( ISTEAMCONTROLLER_H )
+// This file should only be included by the Steam build or directly from
+// isteamcontroller.h.
+#include "steamtypes.h"
+#else
+// Otherwise, we assume it's a firmware build, which doesn't deal with all the
+// things that exist in steamtypes.h, and hardcode the typedefs we need.
+typedef unsigned int uint32;
+typedef unsigned __int64 uint64;
+#endif
+
+#pragma pack(1)
+
+// Safe to add new bitfields at the end of this list for new buttons/actions,
+// but never re-use or re-number an existing flag as old client code will be
+// confused.
+#define STEAM_RIGHT_TRIGGER_MASK 0x0000000000000001l
+#define STEAM_LEFT_TRIGGER_MASK 0x0000000000000002l
+#define STEAM_RIGHT_BUMPER_MASK 0x0000000000000004l
+#define STEAM_LEFT_BUMPER_MASK 0x0000000000000008l
+#define STEAM_BUTTON_0_MASK 0x0000000000000010l
+#define STEAM_BUTTON_1_MASK 0x0000000000000020l
+#define STEAM_BUTTON_2_MASK 0x0000000000000040l
+#define STEAM_BUTTON_3_MASK 0x0000000000000080l
+#define STEAM_TOUCH_0_MASK 0x0000000000000100l
+#define STEAM_TOUCH_1_MASK 0x0000000000000200l
+#define STEAM_TOUCH_2_MASK 0x0000000000000400l
+#define STEAM_TOUCH_3_MASK 0x0000000000000800l
+#define STEAM_BUTTON_MENU_MASK 0x0000000000001000l
+#define STEAM_BUTTON_STEAM_MASK 0x0000000000002000l
+#define STEAM_BUTTON_ESCAPE_MASK 0x0000000000004000l
+#define STEAM_BUTTON_BACK_LEFT_MASK 0x0000000000008000l
+#define STEAM_BUTTON_BACK_RIGHT_MASK 0x0000000000010000l
+#define STEAM_BUTTON_LEFTPAD_CLICKED_MASK 0x0000000000020000l
+#define STEAM_BUTTON_RIGHTPAD_CLICKED_MASK 0x0000000000040000l
+#define STEAM_LEFTPAD_FINGERDOWN_MASK 0x0000000000080000l
+#define STEAM_RIGHTPAD_FINGERDOWN_MASK 0x0000000000100000l
+
+// Only add fields to the end of this struct, or if you need to change it in a larger
+// way add a new message id and new struct completely so as to not break old clients.
+typedef struct
+{
+ // If packet num matches that on your prior call, then the controller state hasn't been changed since
+ // your last call and there is no need to process it
+ uint32 unPacketNum;
+
+ // bit flags for each of the buttons
+ uint64 ulButtons;
+
+ // Left pad coordinates
+ short sLeftPadX;
+ short sLeftPadY;
+
+ // Right pad coordinates
+ short sRightPadX;
+ short sRightPadY;
+
+} SteamControllerState_t;
+
+#pragma pack()
+
+#endif // STEAMCONTROLLERPUBLIC_H
+
diff --git a/lsteamclient/steamworks_sdk_127/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_127/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_127/steamhttpenums.h b/lsteamclient/steamworks_sdk_127/steamhttpenums.h
new file mode 100644
index 00000000..1d0a48da
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_127/steamps3params.h b/lsteamclient/steamworks_sdk_127/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_127/steamtypes.h b/lsteamclient/steamworks_sdk_127/steamtypes.h
new file mode 100644
index 00000000..985a1f77
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/steamtypes.h
@@ -0,0 +1,151 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_127/steamuniverse.h b/lsteamclient/steamworks_sdk_127/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_127/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_128/isteamapps.h b/lsteamclient/steamworks_sdk_128/isteamapps.h
new file mode 100644
index 00000000..87bcdc30
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteamapps.h
@@ -0,0 +1,149 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION006"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_128/isteamappticket.h b/lsteamclient/steamworks_sdk_128/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_128/isteamclient.h b/lsteamclient/steamworks_sdk_128/isteamclient.h
new file mode 100644
index 00000000..141db58e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteamclient.h
@@ -0,0 +1,380 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient012"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+struct SteamCallback_t
+{
+public:
+ SteamCallback_t() {}
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname : SteamCallback_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { return false; } \
+ };
+
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_128/isteamcontroller.h b/lsteamclient/steamworks_sdk_128/isteamcontroller.h
new file mode 100644
index 00000000..2231a7a5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteamcontroller.h
@@ -0,0 +1,91 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamcontrollerpublic.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+#define MAX_STEAM_CONTROLLERS 8
+
+#pragma pack( pop )
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ //
+ // Native controller support API
+ //
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init( const char *pchAbsolutePathToControllerConfigVDF ) = 0;
+ virtual bool Shutdown() = 0;
+
+ // Pump callback/callresult events, SteamAPI_RunCallbacks will do this for you,
+ // normally never need to call directly.
+ virtual void RunFrame() = 0;
+
+ // Get the state of the specified controller, returns false if that controller is not connected
+ virtual bool GetControllerState( uint32 unControllerIndex, SteamControllerState_t *pState ) = 0;
+
+ // Trigger a haptic pulse on the controller
+ virtual void TriggerHapticPulse( uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ // Set the override mode which is used to choose to use different base/legacy bindings from your config file
+ virtual void SetOverrideMode( const char *pchMode ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "STEAMCONTROLLER_INTERFACE_VERSION"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+/*
+struct ControllerCallback_t
+{
+ enum { k_iCallback = k_iSteamControllerCallbacks + 1 };
+
+};
+*/
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_128/isteamfriends.h b/lsteamclient/steamworks_sdk_128/isteamfriends.h
new file mode 100644
index 00000000..8e2136a9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteamfriends.h
@@ -0,0 +1,609 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends014"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_128/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_128/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_128/isteamgameserver.h b/lsteamclient/steamworks_sdk_128/isteamgameserver.h
new file mode 100644
index 00000000..9e3d513c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteamgameserver.h
@@ -0,0 +1,387 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn(
+ const char *pszAccountName,
+ const char *pszPassword
+ ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer011"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_128/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_128/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_128/isteamhttp.h b/lsteamclient/steamworks_sdk_128/isteamhttp.h
new file mode 100644
index 00000000..12a050d8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteamhttp.h
@@ -0,0 +1,176 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_128/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_128/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_128/isteammatchmaking.h b/lsteamclient/steamworks_sdk_128/isteammatchmaking.h
new file mode 100644
index 00000000..44d4d782
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteammatchmaking.h
@@ -0,0 +1,731 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_128/isteamnetworking.h b/lsteamclient/steamworks_sdk_128/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_128/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_128/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_128/isteamremotestorage.h b/lsteamclient/steamworks_sdk_128/isteamremotestorage.h
new file mode 100644
index 00000000..6f0451d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteamremotestorage.h
@@ -0,0 +1,649 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+ k_EWorkshopFileTypeWebGuide = 9,
+ k_EWorkshopFileTypeIntegratedGuide = 10,
+ k_EWorkshopFileTypeMerch = 11,
+ k_EWorkshopFileTypeControllerBinding = 12,
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13,
+
+ // Update k_EWorkshopFileTypeMax if you add values
+ k_EWorkshopFileTypeMax = 14
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+enum
+{
+ k_WorkshopForceLoadPublishedFileDetailsFromCache = -1
+};
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION012"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ UGCHandle_t m_hFile; // The new content
+};
+
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_128/isteamscreenshots.h b/lsteamclient/steamworks_sdk_128/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_128/isteamugc.h b/lsteamclient/steamworks_sdk_128/isteamugc.h
new file mode 100644
index 00000000..8d1c044b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteamugc.h
@@ -0,0 +1,192 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+};
+
+
+const uint32 kNumUGCResultsPerPage = 50;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Send the query to Steam
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+
+ // Request full details for one piece of UGC
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID ) = 0;
+
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION001"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_128/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_128/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_128/isteamuser.h b/lsteamclient/steamworks_sdk_128/isteamuser.h
new file mode 100644
index 00000000..0b73178d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteamuser.h
@@ -0,0 +1,348 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser017"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_128/isteamuserstats.h b/lsteamclient/steamworks_sdk_128/isteamuserstats.h
new file mode 100644
index 00000000..595ec356
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteamuserstats.h
@@ -0,0 +1,463 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_128/isteamutils.h b/lsteamclient/steamworks_sdk_128/isteamutils.h
new file mode 100644
index 00000000..4f4db8d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/isteamutils.h
@@ -0,0 +1,307 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils006"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_128/matchmakingtypes.h b/lsteamclient/steamworks_sdk_128/matchmakingtypes.h
new file mode 100644
index 00000000..28c58500
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/matchmakingtypes.h
@@ -0,0 +1,249 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_128/steam_api.h b/lsteamclient/steamworks_sdk_128/steam_api.h
new file mode 100644
index 00000000..34e3ef4d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/steam_api.h
@@ -0,0 +1,540 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *S_CALLTYPE SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool S_CALLTYPE SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool S_CALLTYPE SteamAPI_Init();
+#endif
+
+S_API ISteamUser *S_CALLTYPE SteamUser();
+S_API ISteamFriends *S_CALLTYPE SteamFriends();
+S_API ISteamUtils *S_CALLTYPE SteamUtils();
+S_API ISteamMatchmaking *S_CALLTYPE SteamMatchmaking();
+S_API ISteamUserStats *S_CALLTYPE SteamUserStats();
+S_API ISteamApps *S_CALLTYPE SteamApps();
+S_API ISteamNetworking *S_CALLTYPE SteamNetworking();
+S_API ISteamMatchmakingServers *S_CALLTYPE SteamMatchmakingServers();
+S_API ISteamRemoteStorage *S_CALLTYPE SteamRemoteStorage();
+S_API ISteamScreenshots *S_CALLTYPE SteamScreenshots();
+S_API ISteamHTTP *S_CALLTYPE SteamHTTP();
+S_API ISteamUnifiedMessages *S_CALLTYPE SteamUnifiedMessages();
+S_API ISteamController *S_CALLTYPE SteamController();
+S_API ISteamUGC *S_CALLTYPE SteamUGC();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender *S_CALLTYPE SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() { return m_pController; }
+ ISteamUGC* SteamUGC() { return m_pSteamUGC; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = NULL;
+#endif
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = SteamClient()->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = SteamClient()->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_128/steam_gameserver.h b/lsteamclient/steamworks_sdk_128/steam_gameserver.h
new file mode 100644
index 00000000..738f375b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/steam_gameserver.h
@@ -0,0 +1,163 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_128/steamclientpublic.h b/lsteamclient/steamworks_sdk_128/steamclientpublic.h
new file mode 100644
index 00000000..29a5e587
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/steamclientpublic.h
@@ -0,0 +1,1097 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwernshipFlags
+{
+ k_EAppOwernshipFlags_None = 0x000, // unknown
+ k_EAppOwernshipFlags_OwnsLicense = 0x001, // owns license for this game
+ k_EAppOwernshipFlags_FreeLicense = 0x002, // not paid for game
+ k_EAppOwernshipFlags_RegionRestricted = 0x004, // owns app, but not allowed to play in current region
+ k_EAppOwernshipFlags_LowViolence = 0x008, // only low violence version
+ k_EAppOwernshipFlags_InvalidPlatform = 0x010, // app not supported on current platform
+ k_EAppOwernshipFlags_SharedLicense = 0x020, // license was granted by authorized local device
+ k_EAppOwernshipFlags_FreeWeekend = 0x040, // owned by a free weekend licenses
+ k_EAppOwernshipFlags_LicenseLocked = 0x080, // shared license is locked (in use) by other user
+ k_EAppOwernshipFlags_LicensePending = 0x100, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwernshipFlags_LicenseExpired = 0x200, // doesn't own app anymore since license expired
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media = 0x010, // media trailer
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_128/steamcontrollerpublic.h b/lsteamclient/steamworks_sdk_128/steamcontrollerpublic.h
new file mode 100644
index 00000000..f6950e53
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/steamcontrollerpublic.h
@@ -0,0 +1,76 @@
+//========= Copyright © 1996-2013, Valve LLC, All rights reserved. ============
+//
+// Purpose: Controller related public types/constants
+//
+//=============================================================================
+
+#ifndef STEAMCONTROLLERPUBLIC_H
+#define STEAMCONTROLLERPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#if defined( STEAM ) || defined( ISTEAMCONTROLLER_H )
+// This file should only be included by the Steam build or directly from
+// isteamcontroller.h.
+#include "steamtypes.h"
+#else
+// Otherwise, we assume it's a firmware build, which doesn't deal with all the
+// things that exist in steamtypes.h, and hardcode the typedefs we need.
+typedef unsigned int uint32;
+typedef unsigned __int64 uint64;
+#endif
+
+#pragma pack(1)
+
+// Safe to add new bitfields at the end of this list for new buttons/actions,
+// but never re-use or re-number an existing flag as old client code will be
+// confused.
+#define STEAM_RIGHT_TRIGGER_MASK 0x0000000000000001l
+#define STEAM_LEFT_TRIGGER_MASK 0x0000000000000002l
+#define STEAM_RIGHT_BUMPER_MASK 0x0000000000000004l
+#define STEAM_LEFT_BUMPER_MASK 0x0000000000000008l
+#define STEAM_BUTTON_0_MASK 0x0000000000000010l
+#define STEAM_BUTTON_1_MASK 0x0000000000000020l
+#define STEAM_BUTTON_2_MASK 0x0000000000000040l
+#define STEAM_BUTTON_3_MASK 0x0000000000000080l
+#define STEAM_TOUCH_0_MASK 0x0000000000000100l
+#define STEAM_TOUCH_1_MASK 0x0000000000000200l
+#define STEAM_TOUCH_2_MASK 0x0000000000000400l
+#define STEAM_TOUCH_3_MASK 0x0000000000000800l
+#define STEAM_BUTTON_MENU_MASK 0x0000000000001000l
+#define STEAM_BUTTON_STEAM_MASK 0x0000000000002000l
+#define STEAM_BUTTON_ESCAPE_MASK 0x0000000000004000l
+#define STEAM_BUTTON_BACK_LEFT_MASK 0x0000000000008000l
+#define STEAM_BUTTON_BACK_RIGHT_MASK 0x0000000000010000l
+#define STEAM_BUTTON_LEFTPAD_CLICKED_MASK 0x0000000000020000l
+#define STEAM_BUTTON_RIGHTPAD_CLICKED_MASK 0x0000000000040000l
+#define STEAM_LEFTPAD_FINGERDOWN_MASK 0x0000000000080000l
+#define STEAM_RIGHTPAD_FINGERDOWN_MASK 0x0000000000100000l
+
+// Only add fields to the end of this struct, or if you need to change it in a larger
+// way add a new message id and new struct completely so as to not break old clients.
+typedef struct
+{
+ // If packet num matches that on your prior call, then the controller state hasn't been changed since
+ // your last call and there is no need to process it
+ uint32 unPacketNum;
+
+ // bit flags for each of the buttons
+ uint64 ulButtons;
+
+ // Left pad coordinates
+ short sLeftPadX;
+ short sLeftPadY;
+
+ // Right pad coordinates
+ short sRightPadX;
+ short sRightPadY;
+
+} SteamControllerState_t;
+
+#pragma pack()
+
+#endif // STEAMCONTROLLERPUBLIC_H
+
diff --git a/lsteamclient/steamworks_sdk_128/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_128/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_128/steamhttpenums.h b/lsteamclient/steamworks_sdk_128/steamhttpenums.h
new file mode 100644
index 00000000..1d0a48da
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_128/steamps3params.h b/lsteamclient/steamworks_sdk_128/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_128/steamtypes.h b/lsteamclient/steamworks_sdk_128/steamtypes.h
new file mode 100644
index 00000000..985a1f77
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/steamtypes.h
@@ -0,0 +1,151 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_128/steamuniverse.h b/lsteamclient/steamworks_sdk_128/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_128/steamvr.h b/lsteamclient/steamworks_sdk_128/steamvr.h
new file mode 100644
index 00000000..56b52c27
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_128/steamvr.h
@@ -0,0 +1,232 @@
+#pragma once
+
+#include <stdint.h>
+
+namespace vr
+{
+
+#if defined(__linux__) || defined(__APPLE__)
+ // The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+ // 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+ // The 64-bit version of gcc has the alignment requirement for these types set to
+ // 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+ // The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#pragma pack( push, 4 )
+#else
+#pragma pack( push, 8 )
+#endif
+
+
+// right-handed system
+// +y is up
+// +x is to the right
+// -z is going away from you
+// Distance unit is meters
+struct HmdMatrix34_t
+{
+ float m[3][4];
+};
+
+struct HmdMatrix44_t
+{
+ float m[4][4];
+};
+
+
+/** Used to return the post-distortion UVs for each color channel.
+* UVs range from 0 to 1 with 0,0 in the upper left corner of the
+* source render target. The 0,0 to 1,1 range covers a single eye. */
+struct DistortionCoordinates_t
+{
+ float rfRed[2];
+ float rfGreen[2];
+ float rfBlue[2];
+};
+
+
+enum Hmd_Eye
+{
+ Eye_Left = 0,
+ Eye_Right = 1
+};
+
+enum GraphicsAPIConvention
+{
+ API_DirectX = 0, // Normalized Z goes from 0 at the viewer to 1 at the far clip plane
+ API_OpenGL = 1, // Normalized Z goes from 1 at the viewer to -1 at the far clip plane
+};
+
+enum HmdTrackingResult
+{
+ TrackingResult_Uninitialized = 1,
+
+ TrackingResult_Calibrating_InProgress = 100,
+ TrackingResult_Calibrating_OutOfRange = 101,
+
+ TrackingResult_Running_OK = 200,
+ TrackingResult_Running_OutOfRange = 201,
+};
+
+class IHmd
+{
+public:
+
+
+ // ------------------------------------
+ // Display Methods
+ // ------------------------------------
+
+ /** Size and position that the window needs to be on the VR display. */
+ virtual bool GetWindowBounds( int32_t *pnX, int32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** Suggested size for the intermediate render target that the distortion pulls from. */
+ virtual void GetRecommendedRenderTargetSize( uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** Gets the viewport in the frame buffer to draw the output of the disortion into */
+ virtual void GetEyeOutputViewport( Hmd_Eye eEye, GraphicsAPIConvention eAPIType, uint32_t *pnX, uint32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** The projection matrix for the specified eye */
+ virtual HmdMatrix44_t GetProjectionMatrix( Hmd_Eye eEye, float fNearZ, float fFarZ, GraphicsAPIConvention eProjType ) = 0;
+
+ /** The components necessary to build your own projection matrix in case your
+ * application is doing something fancy like infinite Z */
+ virtual void GetProjectionRaw( Hmd_Eye eEye, float *pfLeft, float *pfRight, float *pfTop, float *pfBottom ) = 0;
+
+ /** Returns the result of the distortion function for the specified eye and input UVs. UVs go from 0,0 in
+ * the upper left of that eye's viewport and 1,1 in the lower right of that eye's viewport. */
+ virtual DistortionCoordinates_t ComputeDistortion( Hmd_Eye eEye, float fU, float fV ) = 0;
+
+ /** Returns the transform between the view space and eye space. Eye space is the per-eye flavor of view
+ * space that provides stereo disparity. Instead of Model * View * Projection the model is Model * View * Eye * Projection.
+ * Normally View and Eye will be multiplied together and treated as View in your application.
+ */
+ virtual HmdMatrix44_t GetEyeMatrix( Hmd_Eye eEye ) = 0;
+
+ /** For use in simple VR apps, this method returns the concatenation of the
+ * tracking pose and the eye matrix to get a full view matrix for each eye.
+ * This is ( GetEyeMatrix() ) * (GetWorldFromHeadPose() ^ -1 ) */
+ virtual bool GetViewMatrix( float fSecondsFromNow, HmdMatrix44_t *pMatLeftView, HmdMatrix44_t *pMatRightView, HmdTrackingResult *peResult ) = 0;
+
+ /** [D3D9 Only]
+ * Returns the adapter index that the user should pass into CreateDevice to set up D3D9 in such
+ * a way that it can go full screen exclusive on the HMD. Returns -1 if there was an error.
+ */
+ virtual int32_t GetD3D9AdapterIndex() = 0;
+
+ // ------------------------------------
+ // Tracking Methods
+ // ------------------------------------
+
+ /** The pose that the tracker thinks that the HMD will be in at the specified
+ * number of seconds into the future. Pass 0 to get the current state.
+ *
+ * This is roughly analagous to the inverse of the view matrix in most applications, though
+ * many games will need to do some additional rotation or translation on top of the rotation
+ * and translation provided by the head pose.
+ *
+ * If this function returns true the pose has been populated with a pose that can be used by the application.
+ * Check peResult for details about the pose, including messages that should be displayed to the user.
+ */
+ virtual bool GetWorldFromHeadPose( float fPredictedSecondsFromNow, HmdMatrix34_t *pmPose, HmdTrackingResult *peResult ) = 0;
+
+ /** Passes back the pose matrix from the last successful call to GetWorldFromHeadPose(). Returns true if that matrix is
+ * valid (because there has been a previous successful pose.) */
+ virtual bool GetLastWorldFromHeadPose( HmdMatrix34_t *pmPose ) = 0;
+
+ /** Returns true if the tracker for this HMD will drift the Yaw component of its pose over time regardless of
+ * actual head motion. This is true for gyro-based trackers with no ground truth. */
+ virtual bool WillDriftInYaw() = 0;
+
+ /** Sets the zero pose for the tracker coordinate system. After this call all WorldFromHead poses will be relative
+ * to the pose whenever this was called. The new zero coordinate system will not change the fact that the Y axis is
+ * up in the real world, so the next pose returned from GetWorldFromHeadPose after a call to ZeroTracker may not be
+ * exactly an identity matrix. */
+ virtual void ZeroTracker() = 0;
+
+ // ------------------------------------
+ // Administrative methods
+ // ------------------------------------
+
+ /** The ID of the driver this HMD uses as a UTF-8 string. Returns the length of the ID in bytes. If
+ * the buffer is not large enough to fit the ID an empty string will be returned. In general, 128 bytes
+ * will be enough to fit any ID. */
+ virtual uint32_t GetDriverId( char *pchBuffer, uint32_t unBufferLen ) = 0;
+
+ /** The ID of this display within its driver this HMD uses as a UTF-8 string. Returns the length of the ID in bytes. If
+ * the buffer is not large enough to fit the ID an empty string will be returned. In general, 128 bytes
+ * will be enough to fit any ID. */
+ virtual uint32_t GetDisplayId( char *pchBuffer, uint32_t unBufferLen ) = 0;
+};
+
+static const char * const IHmd_Version = "IHmd_002";
+
+/** error codes returned by Vr_Init */
+enum HmdError
+{
+ HmdError_None = 0,
+
+ HmdError_Init_InstallationNotFound = 100,
+ HmdError_Init_InstallationCorrupt = 101,
+ HmdError_Init_VRClientDLLNotFound = 102,
+ HmdError_Init_FileNotFound = 103,
+ HmdError_Init_FactoryNotFound = 104,
+ HmdError_Init_InterfaceNotFound = 105,
+ HmdError_Init_InvalidInterface = 106,
+ HmdError_Init_UserConfigDirectoryInvalid = 107,
+ HmdError_Init_HmdNotFound = 108,
+ HmdError_Init_NotInitialized = 109,
+
+ HmdError_Driver_Failed = 200,
+
+ HmdError_IPC_ServerInitFailed = 300,
+ HmdError_IPC_ConnectFailed = 301,
+ HmdError_IPC_SharedStateInitFailed = 302,
+
+};
+
+
+// figure out how to import from the VR API dll
+#if defined(_WIN32)
+
+#ifdef VR_API_EXPORT
+#define VR_INTERFACE extern "C" __declspec( dllexport )
+#else
+#define VR_INTERFACE extern "C" __declspec( dllimport )
+#endif
+
+#elif defined(GNUC) || defined(COMPILER_GCC)
+
+#ifdef VR_API_EXPORT
+#define VR_INTERFACE extern "C" __attribute__((visibility("default")))
+#else
+#define VR_INTERFACE extern "C"
+#endif
+
+#else
+#error "Unsupported Platform."
+#endif
+
+
+
+
+/** Finds the active installation of the VR API and initializes it. The priority for figuring
+* out where to load vrclient from are:
+* 1. The convar "VR_OVERRIDE", which should contain an absolute path to the root of
+* an vr API directory.
+* 2. The pchVROverride argument. This should be an absolute path or a path relative to
+* the current executable.
+* 3. The path "./vr" relative to the current executable's path.
+*
+* Each of these paths are to the "root" of the VR API install. That's the directory with
+* the "drivers" directory and a platform (i.e. "win32") directory in it, not the directory with the DLL itself.
+*/
+VR_INTERFACE IHmd *VR_Init( HmdError *peError );
+
+/** unloads vrclient.dll. Any interface pointers from the interface are
+* invalid after this point */
+VR_INTERFACE void VR_Shutdown( );
+
+#pragma pack( pop )
+
+
+} \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_129/isteamapplist.h b/lsteamclient/steamworks_sdk_129/isteamapplist.h
new file mode 100644
index 00000000..fc1d49ee
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_129/isteamapps.h b/lsteamclient/steamworks_sdk_129/isteamapps.h
new file mode 100644
index 00000000..87bcdc30
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamapps.h
@@ -0,0 +1,149 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION006"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_129/isteamappticket.h b/lsteamclient/steamworks_sdk_129/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_129/isteamclient.h b/lsteamclient/steamworks_sdk_129/isteamclient.h
new file mode 100644
index 00000000..1e8b27c3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamclient.h
@@ -0,0 +1,395 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient014"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+struct SteamCallback_t
+{
+public:
+ SteamCallback_t() {}
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname : SteamCallback_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_129/isteamcontroller.h b/lsteamclient/steamworks_sdk_129/isteamcontroller.h
new file mode 100644
index 00000000..a00c76a9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamcontroller.h
@@ -0,0 +1,91 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamcontrollerpublic.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+#define MAX_STEAM_CONTROLLERS 16
+
+#pragma pack( pop )
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ //
+ // Native controller support API
+ //
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init( const char *pchAbsolutePathToControllerConfigVDF ) = 0;
+ virtual bool Shutdown() = 0;
+
+ // Pump callback/callresult events, SteamAPI_RunCallbacks will do this for you,
+ // normally never need to call directly.
+ virtual void RunFrame() = 0;
+
+ // Get the state of the specified controller, returns false if that controller is not connected
+ virtual bool GetControllerState( uint32 unControllerIndex, SteamControllerState_t *pState ) = 0;
+
+ // Trigger a haptic pulse on the controller
+ virtual void TriggerHapticPulse( uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ // Set the override mode which is used to choose to use different base/legacy bindings from your config file
+ virtual void SetOverrideMode( const char *pchMode ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "STEAMCONTROLLER_INTERFACE_VERSION"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+/*
+struct ControllerCallback_t
+{
+ enum { k_iCallback = k_iSteamControllerCallbacks + 1 };
+
+};
+*/
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_129/isteamfriends.h b/lsteamclient/steamworks_sdk_129/isteamfriends.h
new file mode 100644
index 00000000..8e2136a9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamfriends.h
@@ -0,0 +1,609 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends014"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_129/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_129/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_129/isteamgameserver.h b/lsteamclient/steamworks_sdk_129/isteamgameserver.h
new file mode 100644
index 00000000..c97ad6f5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamgameserver.h
@@ -0,0 +1,384 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_129/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_129/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_129/isteamhttp.h b/lsteamclient/steamworks_sdk_129/isteamhttp.h
new file mode 100644
index 00000000..12a050d8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamhttp.h
@@ -0,0 +1,176 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_129/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_129/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_129/isteammatchmaking.h b/lsteamclient/steamworks_sdk_129/isteammatchmaking.h
new file mode 100644
index 00000000..0589ba0d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteammatchmaking.h
@@ -0,0 +1,747 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_129/isteammusic.h b/lsteamclient/steamworks_sdk_129/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_129/isteamnetworking.h b/lsteamclient/steamworks_sdk_129/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_129/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_129/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_129/isteamremotestorage.h b/lsteamclient/steamworks_sdk_129/isteamremotestorage.h
new file mode 100644
index 00000000..a5beb8ee
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamremotestorage.h
@@ -0,0 +1,651 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+ k_EWorkshopFileTypeWebGuide = 9,
+ k_EWorkshopFileTypeIntegratedGuide = 10,
+ k_EWorkshopFileTypeMerch = 11,
+ k_EWorkshopFileTypeControllerBinding = 12,
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13,
+
+ // Update k_EWorkshopFileTypeMax if you add values
+ k_EWorkshopFileTypeMax = 14
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+enum
+{
+ k_WorkshopForceLoadPublishedFileDetailsFromCache = -1
+};
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION012"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ UGCHandle_t m_hFile; // The new content
+};
+
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_129/isteamscreenshots.h b/lsteamclient/steamworks_sdk_129/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_129/isteamugc.h b/lsteamclient/steamworks_sdk_129/isteamugc.h
new file mode 100644
index 00000000..6e2a6564
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamugc.h
@@ -0,0 +1,205 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+};
+
+
+const uint32 kNumUGCResultsPerPage = 50;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Send the query to Steam
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+
+ // Request full details for one piece of UGC
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION002"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: k_iClientUGCCallbacks + 3 to k_iClientUGCCallbacks + 6 in use
+//-----------------------------------------------------------------------------
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_129/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_129/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_129/isteamuser.h b/lsteamclient/steamworks_sdk_129/isteamuser.h
new file mode 100644
index 00000000..0b73178d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamuser.h
@@ -0,0 +1,348 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser017"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_129/isteamuserstats.h b/lsteamclient/steamworks_sdk_129/isteamuserstats.h
new file mode 100644
index 00000000..595ec356
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamuserstats.h
@@ -0,0 +1,463 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_129/isteamutils.h b/lsteamclient/steamworks_sdk_129/isteamutils.h
new file mode 100644
index 00000000..2e302b9e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/isteamutils.h
@@ -0,0 +1,307 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils007"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_129/matchmakingtypes.h b/lsteamclient/steamworks_sdk_129/matchmakingtypes.h
new file mode 100644
index 00000000..28c58500
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/matchmakingtypes.h
@@ -0,0 +1,249 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_129/steam_api.h b/lsteamclient/steamworks_sdk_129/steam_api.h
new file mode 100644
index 00000000..8b969307
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/steam_api.h
@@ -0,0 +1,560 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *S_CALLTYPE SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool S_CALLTYPE SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool S_CALLTYPE SteamAPI_Init();
+#endif
+
+S_API ISteamUser *S_CALLTYPE SteamUser();
+S_API ISteamFriends *S_CALLTYPE SteamFriends();
+S_API ISteamUtils *S_CALLTYPE SteamUtils();
+S_API ISteamMatchmaking *S_CALLTYPE SteamMatchmaking();
+S_API ISteamUserStats *S_CALLTYPE SteamUserStats();
+S_API ISteamApps *S_CALLTYPE SteamApps();
+S_API ISteamNetworking *S_CALLTYPE SteamNetworking();
+S_API ISteamMatchmakingServers *S_CALLTYPE SteamMatchmakingServers();
+S_API ISteamRemoteStorage *S_CALLTYPE SteamRemoteStorage();
+S_API ISteamScreenshots *S_CALLTYPE SteamScreenshots();
+S_API ISteamHTTP *S_CALLTYPE SteamHTTP();
+S_API ISteamUnifiedMessages *S_CALLTYPE SteamUnifiedMessages();
+S_API ISteamController *S_CALLTYPE SteamController();
+S_API ISteamUGC *S_CALLTYPE SteamUGC();
+S_API ISteamAppList *S_CALLTYPE SteamAppList();
+S_API ISteamMusic *S_CALLTYPE SteamMusic();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender *S_CALLTYPE SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() { return m_pController; }
+ ISteamUGC* SteamUGC() { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() { return m_pSteamMusic; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = NULL;
+#endif
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = SteamClient()->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = SteamClient()->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = SteamClient()->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = SteamClient()->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ {
+ return false;
+ }
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_129/steam_gameserver.h b/lsteamclient/steamworks_sdk_129/steam_gameserver.h
new file mode 100644
index 00000000..738f375b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/steam_gameserver.h
@@ -0,0 +1,163 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_129/steamclientpublic.h b/lsteamclient/steamworks_sdk_129/steamclientpublic.h
new file mode 100644
index 00000000..15820a77
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/steamclientpublic.h
@@ -0,0 +1,1099 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_LicenseLocked = 0x080, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x100, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x200, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x400, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x800, // Recurring license, user is charged periodically
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media = 0x010, // media trailer
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_129/steamcontrollerpublic.h b/lsteamclient/steamworks_sdk_129/steamcontrollerpublic.h
new file mode 100644
index 00000000..f6950e53
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/steamcontrollerpublic.h
@@ -0,0 +1,76 @@
+//========= Copyright © 1996-2013, Valve LLC, All rights reserved. ============
+//
+// Purpose: Controller related public types/constants
+//
+//=============================================================================
+
+#ifndef STEAMCONTROLLERPUBLIC_H
+#define STEAMCONTROLLERPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#if defined( STEAM ) || defined( ISTEAMCONTROLLER_H )
+// This file should only be included by the Steam build or directly from
+// isteamcontroller.h.
+#include "steamtypes.h"
+#else
+// Otherwise, we assume it's a firmware build, which doesn't deal with all the
+// things that exist in steamtypes.h, and hardcode the typedefs we need.
+typedef unsigned int uint32;
+typedef unsigned __int64 uint64;
+#endif
+
+#pragma pack(1)
+
+// Safe to add new bitfields at the end of this list for new buttons/actions,
+// but never re-use or re-number an existing flag as old client code will be
+// confused.
+#define STEAM_RIGHT_TRIGGER_MASK 0x0000000000000001l
+#define STEAM_LEFT_TRIGGER_MASK 0x0000000000000002l
+#define STEAM_RIGHT_BUMPER_MASK 0x0000000000000004l
+#define STEAM_LEFT_BUMPER_MASK 0x0000000000000008l
+#define STEAM_BUTTON_0_MASK 0x0000000000000010l
+#define STEAM_BUTTON_1_MASK 0x0000000000000020l
+#define STEAM_BUTTON_2_MASK 0x0000000000000040l
+#define STEAM_BUTTON_3_MASK 0x0000000000000080l
+#define STEAM_TOUCH_0_MASK 0x0000000000000100l
+#define STEAM_TOUCH_1_MASK 0x0000000000000200l
+#define STEAM_TOUCH_2_MASK 0x0000000000000400l
+#define STEAM_TOUCH_3_MASK 0x0000000000000800l
+#define STEAM_BUTTON_MENU_MASK 0x0000000000001000l
+#define STEAM_BUTTON_STEAM_MASK 0x0000000000002000l
+#define STEAM_BUTTON_ESCAPE_MASK 0x0000000000004000l
+#define STEAM_BUTTON_BACK_LEFT_MASK 0x0000000000008000l
+#define STEAM_BUTTON_BACK_RIGHT_MASK 0x0000000000010000l
+#define STEAM_BUTTON_LEFTPAD_CLICKED_MASK 0x0000000000020000l
+#define STEAM_BUTTON_RIGHTPAD_CLICKED_MASK 0x0000000000040000l
+#define STEAM_LEFTPAD_FINGERDOWN_MASK 0x0000000000080000l
+#define STEAM_RIGHTPAD_FINGERDOWN_MASK 0x0000000000100000l
+
+// Only add fields to the end of this struct, or if you need to change it in a larger
+// way add a new message id and new struct completely so as to not break old clients.
+typedef struct
+{
+ // If packet num matches that on your prior call, then the controller state hasn't been changed since
+ // your last call and there is no need to process it
+ uint32 unPacketNum;
+
+ // bit flags for each of the buttons
+ uint64 ulButtons;
+
+ // Left pad coordinates
+ short sLeftPadX;
+ short sLeftPadY;
+
+ // Right pad coordinates
+ short sRightPadX;
+ short sRightPadY;
+
+} SteamControllerState_t;
+
+#pragma pack()
+
+#endif // STEAMCONTROLLERPUBLIC_H
+
diff --git a/lsteamclient/steamworks_sdk_129/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_129/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_129/steamhttpenums.h b/lsteamclient/steamworks_sdk_129/steamhttpenums.h
new file mode 100644
index 00000000..1d0a48da
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_129/steamps3params.h b/lsteamclient/steamworks_sdk_129/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_129/steamtypes.h b/lsteamclient/steamworks_sdk_129/steamtypes.h
new file mode 100644
index 00000000..985a1f77
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/steamtypes.h
@@ -0,0 +1,151 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_129/steamuniverse.h b/lsteamclient/steamworks_sdk_129/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_129/steamvr.h b/lsteamclient/steamworks_sdk_129/steamvr.h
new file mode 100644
index 00000000..a42514cd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129/steamvr.h
@@ -0,0 +1,242 @@
+#pragma once
+
+#include <stdint.h>
+
+namespace vr
+{
+
+#if defined(__linux__) || defined(__APPLE__)
+ // The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+ // 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+ // The 64-bit version of gcc has the alignment requirement for these types set to
+ // 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+ // The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#pragma pack( push, 4 )
+#else
+#pragma pack( push, 8 )
+#endif
+
+
+// right-handed system
+// +y is up
+// +x is to the right
+// -z is going away from you
+// Distance unit is meters
+struct HmdMatrix34_t
+{
+ float m[3][4];
+};
+
+struct HmdMatrix44_t
+{
+ float m[4][4];
+};
+
+
+/** Used to return the post-distortion UVs for each color channel.
+* UVs range from 0 to 1 with 0,0 in the upper left corner of the
+* source render target. The 0,0 to 1,1 range covers a single eye. */
+struct DistortionCoordinates_t
+{
+ float rfRed[2];
+ float rfGreen[2];
+ float rfBlue[2];
+};
+
+
+enum Hmd_Eye
+{
+ Eye_Left = 0,
+ Eye_Right = 1
+};
+
+enum GraphicsAPIConvention
+{
+ API_DirectX = 0, // Normalized Z goes from 0 at the viewer to 1 at the far clip plane
+ API_OpenGL = 1, // Normalized Z goes from 1 at the viewer to -1 at the far clip plane
+};
+
+enum HmdTrackingResult
+{
+ TrackingResult_Uninitialized = 1,
+
+ TrackingResult_Calibrating_InProgress = 100,
+ TrackingResult_Calibrating_OutOfRange = 101,
+
+ TrackingResult_Running_OK = 200,
+ TrackingResult_Running_OutOfRange = 201,
+};
+
+class IHmd
+{
+public:
+
+
+ // ------------------------------------
+ // Display Methods
+ // ------------------------------------
+
+ /** Size and position that the window needs to be on the VR display. */
+ virtual void GetWindowBounds( int32_t *pnX, int32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** Suggested size for the intermediate render target that the distortion pulls from. */
+ virtual void GetRecommendedRenderTargetSize( uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** Gets the viewport in the frame buffer to draw the output of the distortion into */
+ virtual void GetEyeOutputViewport( Hmd_Eye eEye, uint32_t *pnX, uint32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** The projection matrix for the specified eye */
+ virtual HmdMatrix44_t GetProjectionMatrix( Hmd_Eye eEye, float fNearZ, float fFarZ, GraphicsAPIConvention eProjType ) = 0;
+
+ /** The components necessary to build your own projection matrix in case your
+ * application is doing something fancy like infinite Z */
+ virtual void GetProjectionRaw( Hmd_Eye eEye, float *pfLeft, float *pfRight, float *pfTop, float *pfBottom ) = 0;
+
+ /** Returns the result of the distortion function for the specified eye and input UVs. UVs go from 0,0 in
+ * the upper left of that eye's viewport and 1,1 in the lower right of that eye's viewport. */
+ virtual DistortionCoordinates_t ComputeDistortion( Hmd_Eye eEye, float fU, float fV ) = 0;
+
+ /** Returns the transform from eye space to the head space. Eye space is the per-eye flavor of head
+ * space that provides stereo disparity. Instead of Model * View * Projection the sequence is Model * View * Eye^-1 * Projection.
+ * Normally View and Eye^-1 will be multiplied together and treated as View in your application.
+ */
+ virtual HmdMatrix34_t GetHeadFromEyePose( Hmd_Eye eEye ) = 0;
+
+ /** For use in simple VR apps, this method returns the concatenation of the
+ * tracking pose and the eye matrix to get a full view matrix for each eye.
+ * This is ( GetEyeMatrix() ) * (GetWorldFromHeadPose() ^ -1 ) */
+ virtual bool GetViewMatrix( float fSecondsFromNow, HmdMatrix44_t *pMatLeftView, HmdMatrix44_t *pMatRightView, HmdTrackingResult *peResult ) = 0;
+
+ /** [D3D9 Only]
+ * Returns the adapter index that the user should pass into CreateDevice to set up D3D9 in such
+ * a way that it can go full screen exclusive on the HMD. Returns -1 if there was an error.
+ */
+ virtual int32_t GetD3D9AdapterIndex() = 0;
+
+ /** [D3D10/11 Only]
+ * Returns the adapter index and output index that the user should pass into EnumAdapters adn EnumOutputs
+ * to create the device and swap chain in DX10 and DX11. If an error occurs both indices will be set to -1.
+ */
+ virtual void GetDXGIOutputInfo( int32_t *pnAdapterIndex, int32_t *pnAdapterOutputIndex ) = 0;
+
+ // ------------------------------------
+ // Tracking Methods
+ // ------------------------------------
+
+ /** The pose that the tracker thinks that the HMD will be in at the specified
+ * number of seconds into the future. Pass 0 to get the current state.
+ *
+ * This is roughly analogous to the inverse of the view matrix in most applications, though
+ * many games will need to do some additional rotation or translation on top of the rotation
+ * and translation provided by the head pose.
+ *
+ * If this function returns true the pose has been populated with a pose that can be used by the application.
+ * Check peResult for details about the pose, including messages that should be displayed to the user.
+ */
+ virtual bool GetTrackerFromHeadPose( float fPredictedSecondsFromNow, HmdMatrix34_t *pmPose, HmdTrackingResult *peResult ) = 0;
+
+ /** Passes back the pose matrix from the last successful call to GetWorldFromHeadPose(). Returns true if that matrix is
+ * valid (because there has been a previous successful pose.) */
+ virtual bool GetLastTrackerFromHeadPose( HmdMatrix34_t *pmPose ) = 0;
+
+ /** Returns true if the tracker for this HMD will drift the Yaw component of its pose over time regardless of
+ * actual head motion. This is true for gyro-based trackers with no ground truth. */
+ virtual bool WillDriftInYaw() = 0;
+
+ /** Sets the zero pose for the tracker coordinate system. After this call all WorldFromHead poses will be relative
+ * to the pose whenever this was called. The new zero coordinate system will not change the fact that the Y axis is
+ * up in the real world, so the next pose returned from GetWorldFromHeadPose after a call to ZeroTracker may not be
+ * exactly an identity matrix. */
+ virtual void ZeroTracker() = 0;
+
+ /** Returns the zero pose for the tracker coordinate system. If the tracker has never had a valid pose, this
+ * will be an identity matrix. */
+ virtual HmdMatrix34_t GetTrackerZeroPose() = 0;
+
+ // ------------------------------------
+ // Administrative methods
+ // ------------------------------------
+
+ /** The ID of the driver this HMD uses as a UTF-8 string. Returns the length of the ID in bytes. If
+ * the buffer is not large enough to fit the ID an empty string will be returned. In general, 128 bytes
+ * will be enough to fit any ID. */
+ virtual uint32_t GetDriverId( char *pchBuffer, uint32_t unBufferLen ) = 0;
+
+ /** The ID of this display within its driver this HMD uses as a UTF-8 string. Returns the length of the ID in bytes. If
+ * the buffer is not large enough to fit the ID an empty string will be returned. In general, 128 bytes
+ * will be enough to fit any ID. */
+ virtual uint32_t GetDisplayId( char *pchBuffer, uint32_t unBufferLen ) = 0;
+};
+
+static const char * const IHmd_Version = "IHmd_004";
+
+/** error codes returned by Vr_Init */
+enum HmdError
+{
+ HmdError_None = 0,
+
+ HmdError_Init_InstallationNotFound = 100,
+ HmdError_Init_InstallationCorrupt = 101,
+ HmdError_Init_VRClientDLLNotFound = 102,
+ HmdError_Init_FileNotFound = 103,
+ HmdError_Init_FactoryNotFound = 104,
+ HmdError_Init_InterfaceNotFound = 105,
+ HmdError_Init_InvalidInterface = 106,
+ HmdError_Init_UserConfigDirectoryInvalid = 107,
+ HmdError_Init_HmdNotFound = 108,
+ HmdError_Init_NotInitialized = 109,
+
+ HmdError_Driver_Failed = 200,
+
+ HmdError_IPC_ServerInitFailed = 300,
+ HmdError_IPC_ConnectFailed = 301,
+ HmdError_IPC_SharedStateInitFailed = 302,
+
+};
+
+
+// figure out how to import from the VR API dll
+#if defined(_WIN32)
+
+#ifdef VR_API_EXPORT
+#define VR_INTERFACE extern "C" __declspec( dllexport )
+#else
+#define VR_INTERFACE extern "C" __declspec( dllimport )
+#endif
+
+#elif defined(GNUC) || defined(COMPILER_GCC)
+
+#ifdef VR_API_EXPORT
+#define VR_INTERFACE extern "C" __attribute__((visibility("default")))
+#else
+#define VR_INTERFACE extern "C"
+#endif
+
+#else
+#error "Unsupported Platform."
+#endif
+
+
+
+
+/** Finds the active installation of the VR API and initializes it. The priority for figuring
+* out where to load vrclient from are:
+* 1. The convar "VR_OVERRIDE", which should contain an absolute path to the root of
+* an vr API directory.
+* 2. The pchVROverride argument. This should be an absolute path or a path relative to
+* the current executable.
+* 3. The path "./vr" relative to the current executable's path.
+*
+* Each of these paths are to the "root" of the VR API install. That's the directory with
+* the "drivers" directory and a platform (i.e. "win32") directory in it, not the directory with the DLL itself.
+*/
+VR_INTERFACE IHmd *VR_Init( HmdError *peError );
+
+/** unloads vrclient.dll. Any interface pointers from the interface are
+* invalid after this point */
+VR_INTERFACE void VR_Shutdown( );
+
+#pragma pack( pop )
+
+
+} \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_129a/isteamapplist.h b/lsteamclient/steamworks_sdk_129a/isteamapplist.h
new file mode 100644
index 00000000..fc1d49ee
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_129a/isteamapps.h b/lsteamclient/steamworks_sdk_129a/isteamapps.h
new file mode 100644
index 00000000..87bcdc30
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamapps.h
@@ -0,0 +1,149 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION006"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_129a/isteamappticket.h b/lsteamclient/steamworks_sdk_129a/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_129a/isteamclient.h b/lsteamclient/steamworks_sdk_129a/isteamclient.h
new file mode 100644
index 00000000..1e8b27c3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamclient.h
@@ -0,0 +1,395 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient014"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iSteamUserItemsCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+struct SteamCallback_t
+{
+public:
+ SteamCallback_t() {}
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname : SteamCallback_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_129a/isteamcontroller.h b/lsteamclient/steamworks_sdk_129a/isteamcontroller.h
new file mode 100644
index 00000000..a00c76a9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamcontroller.h
@@ -0,0 +1,91 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamcontrollerpublic.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+#define MAX_STEAM_CONTROLLERS 16
+
+#pragma pack( pop )
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ //
+ // Native controller support API
+ //
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init( const char *pchAbsolutePathToControllerConfigVDF ) = 0;
+ virtual bool Shutdown() = 0;
+
+ // Pump callback/callresult events, SteamAPI_RunCallbacks will do this for you,
+ // normally never need to call directly.
+ virtual void RunFrame() = 0;
+
+ // Get the state of the specified controller, returns false if that controller is not connected
+ virtual bool GetControllerState( uint32 unControllerIndex, SteamControllerState_t *pState ) = 0;
+
+ // Trigger a haptic pulse on the controller
+ virtual void TriggerHapticPulse( uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ // Set the override mode which is used to choose to use different base/legacy bindings from your config file
+ virtual void SetOverrideMode( const char *pchMode ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "STEAMCONTROLLER_INTERFACE_VERSION"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+/*
+struct ControllerCallback_t
+{
+ enum { k_iCallback = k_iSteamControllerCallbacks + 1 };
+
+};
+*/
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_129a/isteamfriends.h b/lsteamclient/steamworks_sdk_129a/isteamfriends.h
new file mode 100644
index 00000000..8e2136a9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamfriends.h
@@ -0,0 +1,609 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends014"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_129a/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_129a/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_129a/isteamgameserver.h b/lsteamclient/steamworks_sdk_129a/isteamgameserver.h
new file mode 100644
index 00000000..c97ad6f5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamgameserver.h
@@ -0,0 +1,384 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_129a/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_129a/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_129a/isteamhttp.h b/lsteamclient/steamworks_sdk_129a/isteamhttp.h
new file mode 100644
index 00000000..12a050d8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamhttp.h
@@ -0,0 +1,176 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_129a/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_129a/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_129a/isteammatchmaking.h b/lsteamclient/steamworks_sdk_129a/isteammatchmaking.h
new file mode 100644
index 00000000..0589ba0d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteammatchmaking.h
@@ -0,0 +1,747 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_129a/isteammusic.h b/lsteamclient/steamworks_sdk_129a/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_129a/isteamnetworking.h b/lsteamclient/steamworks_sdk_129a/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_129a/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_129a/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_129a/isteamremotestorage.h b/lsteamclient/steamworks_sdk_129a/isteamremotestorage.h
new file mode 100644
index 00000000..a5beb8ee
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamremotestorage.h
@@ -0,0 +1,651 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+ k_EWorkshopFileTypeWebGuide = 9,
+ k_EWorkshopFileTypeIntegratedGuide = 10,
+ k_EWorkshopFileTypeMerch = 11,
+ k_EWorkshopFileTypeControllerBinding = 12,
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13,
+
+ // Update k_EWorkshopFileTypeMax if you add values
+ k_EWorkshopFileTypeMax = 14
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+enum
+{
+ k_WorkshopForceLoadPublishedFileDetailsFromCache = -1
+};
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION012"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ UGCHandle_t m_hFile; // The new content
+};
+
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_129a/isteamscreenshots.h b/lsteamclient/steamworks_sdk_129a/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_129a/isteamugc.h b/lsteamclient/steamworks_sdk_129a/isteamugc.h
new file mode 100644
index 00000000..b258a55d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamugc.h
@@ -0,0 +1,206 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+};
+
+
+const uint32 kNumUGCResultsPerPage = 50;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+ uint32 m_unNumChildren; // if m_eFileType == k_EWorkshopFileTypeCollection, then this number will be the number of children contained within the collection
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Send the query to Steam
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+
+ // Request full details for one piece of UGC
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION002"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: k_iClientUGCCallbacks + 3 to k_iClientUGCCallbacks + 6 in use
+//-----------------------------------------------------------------------------
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_129a/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_129a/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_129a/isteamuser.h b/lsteamclient/steamworks_sdk_129a/isteamuser.h
new file mode 100644
index 00000000..0b73178d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamuser.h
@@ -0,0 +1,348 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser017"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_129a/isteamuserstats.h b/lsteamclient/steamworks_sdk_129a/isteamuserstats.h
new file mode 100644
index 00000000..595ec356
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamuserstats.h
@@ -0,0 +1,463 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_129a/isteamutils.h b/lsteamclient/steamworks_sdk_129a/isteamutils.h
new file mode 100644
index 00000000..2e302b9e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/isteamutils.h
@@ -0,0 +1,307 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils007"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_129a/matchmakingtypes.h b/lsteamclient/steamworks_sdk_129a/matchmakingtypes.h
new file mode 100644
index 00000000..28c58500
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/matchmakingtypes.h
@@ -0,0 +1,249 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_129a/steam_api.h b/lsteamclient/steamworks_sdk_129a/steam_api.h
new file mode 100644
index 00000000..8b969307
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/steam_api.h
@@ -0,0 +1,560 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *S_CALLTYPE SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool S_CALLTYPE SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool S_CALLTYPE SteamAPI_Init();
+#endif
+
+S_API ISteamUser *S_CALLTYPE SteamUser();
+S_API ISteamFriends *S_CALLTYPE SteamFriends();
+S_API ISteamUtils *S_CALLTYPE SteamUtils();
+S_API ISteamMatchmaking *S_CALLTYPE SteamMatchmaking();
+S_API ISteamUserStats *S_CALLTYPE SteamUserStats();
+S_API ISteamApps *S_CALLTYPE SteamApps();
+S_API ISteamNetworking *S_CALLTYPE SteamNetworking();
+S_API ISteamMatchmakingServers *S_CALLTYPE SteamMatchmakingServers();
+S_API ISteamRemoteStorage *S_CALLTYPE SteamRemoteStorage();
+S_API ISteamScreenshots *S_CALLTYPE SteamScreenshots();
+S_API ISteamHTTP *S_CALLTYPE SteamHTTP();
+S_API ISteamUnifiedMessages *S_CALLTYPE SteamUnifiedMessages();
+S_API ISteamController *S_CALLTYPE SteamController();
+S_API ISteamUGC *S_CALLTYPE SteamUGC();
+S_API ISteamAppList *S_CALLTYPE SteamAppList();
+S_API ISteamMusic *S_CALLTYPE SteamMusic();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender *S_CALLTYPE SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() { return m_pController; }
+ ISteamUGC* SteamUGC() { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() { return m_pSteamMusic; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = NULL;
+#endif
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = SteamClient()->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = SteamClient()->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = SteamClient()->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = SteamClient()->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ {
+ return false;
+ }
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_129a/steam_gameserver.h b/lsteamclient/steamworks_sdk_129a/steam_gameserver.h
new file mode 100644
index 00000000..738f375b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/steam_gameserver.h
@@ -0,0 +1,163 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_129a/steamclientpublic.h b/lsteamclient/steamworks_sdk_129a/steamclientpublic.h
new file mode 100644
index 00000000..15820a77
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/steamclientpublic.h
@@ -0,0 +1,1099 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_LicenseLocked = 0x080, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x100, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x200, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x400, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x800, // Recurring license, user is charged periodically
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media = 0x010, // media trailer
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of a given depot version, these are stored in the DB, don't renumber
+//-----------------------------------------------------------------------------
+enum EStatusDepotVersion
+{
+ k_EStatusDepotVersionInvalid = 0,
+ k_EStatusDepotVersionDisabled = 1, // version was disabled, no manifest & content available
+ k_EStatusDepotVersionAvailable = 2, // manifest & content is available, but not current
+ k_EStatusDepotVersionCurrent = 3, // current depot version. The can be multiple, one for public and one for each beta key
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_129a/steamcontrollerpublic.h b/lsteamclient/steamworks_sdk_129a/steamcontrollerpublic.h
new file mode 100644
index 00000000..f6950e53
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/steamcontrollerpublic.h
@@ -0,0 +1,76 @@
+//========= Copyright © 1996-2013, Valve LLC, All rights reserved. ============
+//
+// Purpose: Controller related public types/constants
+//
+//=============================================================================
+
+#ifndef STEAMCONTROLLERPUBLIC_H
+#define STEAMCONTROLLERPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#if defined( STEAM ) || defined( ISTEAMCONTROLLER_H )
+// This file should only be included by the Steam build or directly from
+// isteamcontroller.h.
+#include "steamtypes.h"
+#else
+// Otherwise, we assume it's a firmware build, which doesn't deal with all the
+// things that exist in steamtypes.h, and hardcode the typedefs we need.
+typedef unsigned int uint32;
+typedef unsigned __int64 uint64;
+#endif
+
+#pragma pack(1)
+
+// Safe to add new bitfields at the end of this list for new buttons/actions,
+// but never re-use or re-number an existing flag as old client code will be
+// confused.
+#define STEAM_RIGHT_TRIGGER_MASK 0x0000000000000001l
+#define STEAM_LEFT_TRIGGER_MASK 0x0000000000000002l
+#define STEAM_RIGHT_BUMPER_MASK 0x0000000000000004l
+#define STEAM_LEFT_BUMPER_MASK 0x0000000000000008l
+#define STEAM_BUTTON_0_MASK 0x0000000000000010l
+#define STEAM_BUTTON_1_MASK 0x0000000000000020l
+#define STEAM_BUTTON_2_MASK 0x0000000000000040l
+#define STEAM_BUTTON_3_MASK 0x0000000000000080l
+#define STEAM_TOUCH_0_MASK 0x0000000000000100l
+#define STEAM_TOUCH_1_MASK 0x0000000000000200l
+#define STEAM_TOUCH_2_MASK 0x0000000000000400l
+#define STEAM_TOUCH_3_MASK 0x0000000000000800l
+#define STEAM_BUTTON_MENU_MASK 0x0000000000001000l
+#define STEAM_BUTTON_STEAM_MASK 0x0000000000002000l
+#define STEAM_BUTTON_ESCAPE_MASK 0x0000000000004000l
+#define STEAM_BUTTON_BACK_LEFT_MASK 0x0000000000008000l
+#define STEAM_BUTTON_BACK_RIGHT_MASK 0x0000000000010000l
+#define STEAM_BUTTON_LEFTPAD_CLICKED_MASK 0x0000000000020000l
+#define STEAM_BUTTON_RIGHTPAD_CLICKED_MASK 0x0000000000040000l
+#define STEAM_LEFTPAD_FINGERDOWN_MASK 0x0000000000080000l
+#define STEAM_RIGHTPAD_FINGERDOWN_MASK 0x0000000000100000l
+
+// Only add fields to the end of this struct, or if you need to change it in a larger
+// way add a new message id and new struct completely so as to not break old clients.
+typedef struct
+{
+ // If packet num matches that on your prior call, then the controller state hasn't been changed since
+ // your last call and there is no need to process it
+ uint32 unPacketNum;
+
+ // bit flags for each of the buttons
+ uint64 ulButtons;
+
+ // Left pad coordinates
+ short sLeftPadX;
+ short sLeftPadY;
+
+ // Right pad coordinates
+ short sRightPadX;
+ short sRightPadY;
+
+} SteamControllerState_t;
+
+#pragma pack()
+
+#endif // STEAMCONTROLLERPUBLIC_H
+
diff --git a/lsteamclient/steamworks_sdk_129a/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_129a/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_129a/steamhttpenums.h b/lsteamclient/steamworks_sdk_129a/steamhttpenums.h
new file mode 100644
index 00000000..1d0a48da
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_129a/steamps3params.h b/lsteamclient/steamworks_sdk_129a/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_129a/steamtypes.h b/lsteamclient/steamworks_sdk_129a/steamtypes.h
new file mode 100644
index 00000000..985a1f77
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/steamtypes.h
@@ -0,0 +1,151 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_129a/steamuniverse.h b/lsteamclient/steamworks_sdk_129a/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_129a/steamvr.h b/lsteamclient/steamworks_sdk_129a/steamvr.h
new file mode 100644
index 00000000..a42514cd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_129a/steamvr.h
@@ -0,0 +1,242 @@
+#pragma once
+
+#include <stdint.h>
+
+namespace vr
+{
+
+#if defined(__linux__) || defined(__APPLE__)
+ // The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+ // 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+ // The 64-bit version of gcc has the alignment requirement for these types set to
+ // 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+ // The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#pragma pack( push, 4 )
+#else
+#pragma pack( push, 8 )
+#endif
+
+
+// right-handed system
+// +y is up
+// +x is to the right
+// -z is going away from you
+// Distance unit is meters
+struct HmdMatrix34_t
+{
+ float m[3][4];
+};
+
+struct HmdMatrix44_t
+{
+ float m[4][4];
+};
+
+
+/** Used to return the post-distortion UVs for each color channel.
+* UVs range from 0 to 1 with 0,0 in the upper left corner of the
+* source render target. The 0,0 to 1,1 range covers a single eye. */
+struct DistortionCoordinates_t
+{
+ float rfRed[2];
+ float rfGreen[2];
+ float rfBlue[2];
+};
+
+
+enum Hmd_Eye
+{
+ Eye_Left = 0,
+ Eye_Right = 1
+};
+
+enum GraphicsAPIConvention
+{
+ API_DirectX = 0, // Normalized Z goes from 0 at the viewer to 1 at the far clip plane
+ API_OpenGL = 1, // Normalized Z goes from 1 at the viewer to -1 at the far clip plane
+};
+
+enum HmdTrackingResult
+{
+ TrackingResult_Uninitialized = 1,
+
+ TrackingResult_Calibrating_InProgress = 100,
+ TrackingResult_Calibrating_OutOfRange = 101,
+
+ TrackingResult_Running_OK = 200,
+ TrackingResult_Running_OutOfRange = 201,
+};
+
+class IHmd
+{
+public:
+
+
+ // ------------------------------------
+ // Display Methods
+ // ------------------------------------
+
+ /** Size and position that the window needs to be on the VR display. */
+ virtual void GetWindowBounds( int32_t *pnX, int32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** Suggested size for the intermediate render target that the distortion pulls from. */
+ virtual void GetRecommendedRenderTargetSize( uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** Gets the viewport in the frame buffer to draw the output of the distortion into */
+ virtual void GetEyeOutputViewport( Hmd_Eye eEye, uint32_t *pnX, uint32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** The projection matrix for the specified eye */
+ virtual HmdMatrix44_t GetProjectionMatrix( Hmd_Eye eEye, float fNearZ, float fFarZ, GraphicsAPIConvention eProjType ) = 0;
+
+ /** The components necessary to build your own projection matrix in case your
+ * application is doing something fancy like infinite Z */
+ virtual void GetProjectionRaw( Hmd_Eye eEye, float *pfLeft, float *pfRight, float *pfTop, float *pfBottom ) = 0;
+
+ /** Returns the result of the distortion function for the specified eye and input UVs. UVs go from 0,0 in
+ * the upper left of that eye's viewport and 1,1 in the lower right of that eye's viewport. */
+ virtual DistortionCoordinates_t ComputeDistortion( Hmd_Eye eEye, float fU, float fV ) = 0;
+
+ /** Returns the transform from eye space to the head space. Eye space is the per-eye flavor of head
+ * space that provides stereo disparity. Instead of Model * View * Projection the sequence is Model * View * Eye^-1 * Projection.
+ * Normally View and Eye^-1 will be multiplied together and treated as View in your application.
+ */
+ virtual HmdMatrix34_t GetHeadFromEyePose( Hmd_Eye eEye ) = 0;
+
+ /** For use in simple VR apps, this method returns the concatenation of the
+ * tracking pose and the eye matrix to get a full view matrix for each eye.
+ * This is ( GetEyeMatrix() ) * (GetWorldFromHeadPose() ^ -1 ) */
+ virtual bool GetViewMatrix( float fSecondsFromNow, HmdMatrix44_t *pMatLeftView, HmdMatrix44_t *pMatRightView, HmdTrackingResult *peResult ) = 0;
+
+ /** [D3D9 Only]
+ * Returns the adapter index that the user should pass into CreateDevice to set up D3D9 in such
+ * a way that it can go full screen exclusive on the HMD. Returns -1 if there was an error.
+ */
+ virtual int32_t GetD3D9AdapterIndex() = 0;
+
+ /** [D3D10/11 Only]
+ * Returns the adapter index and output index that the user should pass into EnumAdapters adn EnumOutputs
+ * to create the device and swap chain in DX10 and DX11. If an error occurs both indices will be set to -1.
+ */
+ virtual void GetDXGIOutputInfo( int32_t *pnAdapterIndex, int32_t *pnAdapterOutputIndex ) = 0;
+
+ // ------------------------------------
+ // Tracking Methods
+ // ------------------------------------
+
+ /** The pose that the tracker thinks that the HMD will be in at the specified
+ * number of seconds into the future. Pass 0 to get the current state.
+ *
+ * This is roughly analogous to the inverse of the view matrix in most applications, though
+ * many games will need to do some additional rotation or translation on top of the rotation
+ * and translation provided by the head pose.
+ *
+ * If this function returns true the pose has been populated with a pose that can be used by the application.
+ * Check peResult for details about the pose, including messages that should be displayed to the user.
+ */
+ virtual bool GetTrackerFromHeadPose( float fPredictedSecondsFromNow, HmdMatrix34_t *pmPose, HmdTrackingResult *peResult ) = 0;
+
+ /** Passes back the pose matrix from the last successful call to GetWorldFromHeadPose(). Returns true if that matrix is
+ * valid (because there has been a previous successful pose.) */
+ virtual bool GetLastTrackerFromHeadPose( HmdMatrix34_t *pmPose ) = 0;
+
+ /** Returns true if the tracker for this HMD will drift the Yaw component of its pose over time regardless of
+ * actual head motion. This is true for gyro-based trackers with no ground truth. */
+ virtual bool WillDriftInYaw() = 0;
+
+ /** Sets the zero pose for the tracker coordinate system. After this call all WorldFromHead poses will be relative
+ * to the pose whenever this was called. The new zero coordinate system will not change the fact that the Y axis is
+ * up in the real world, so the next pose returned from GetWorldFromHeadPose after a call to ZeroTracker may not be
+ * exactly an identity matrix. */
+ virtual void ZeroTracker() = 0;
+
+ /** Returns the zero pose for the tracker coordinate system. If the tracker has never had a valid pose, this
+ * will be an identity matrix. */
+ virtual HmdMatrix34_t GetTrackerZeroPose() = 0;
+
+ // ------------------------------------
+ // Administrative methods
+ // ------------------------------------
+
+ /** The ID of the driver this HMD uses as a UTF-8 string. Returns the length of the ID in bytes. If
+ * the buffer is not large enough to fit the ID an empty string will be returned. In general, 128 bytes
+ * will be enough to fit any ID. */
+ virtual uint32_t GetDriverId( char *pchBuffer, uint32_t unBufferLen ) = 0;
+
+ /** The ID of this display within its driver this HMD uses as a UTF-8 string. Returns the length of the ID in bytes. If
+ * the buffer is not large enough to fit the ID an empty string will be returned. In general, 128 bytes
+ * will be enough to fit any ID. */
+ virtual uint32_t GetDisplayId( char *pchBuffer, uint32_t unBufferLen ) = 0;
+};
+
+static const char * const IHmd_Version = "IHmd_004";
+
+/** error codes returned by Vr_Init */
+enum HmdError
+{
+ HmdError_None = 0,
+
+ HmdError_Init_InstallationNotFound = 100,
+ HmdError_Init_InstallationCorrupt = 101,
+ HmdError_Init_VRClientDLLNotFound = 102,
+ HmdError_Init_FileNotFound = 103,
+ HmdError_Init_FactoryNotFound = 104,
+ HmdError_Init_InterfaceNotFound = 105,
+ HmdError_Init_InvalidInterface = 106,
+ HmdError_Init_UserConfigDirectoryInvalid = 107,
+ HmdError_Init_HmdNotFound = 108,
+ HmdError_Init_NotInitialized = 109,
+
+ HmdError_Driver_Failed = 200,
+
+ HmdError_IPC_ServerInitFailed = 300,
+ HmdError_IPC_ConnectFailed = 301,
+ HmdError_IPC_SharedStateInitFailed = 302,
+
+};
+
+
+// figure out how to import from the VR API dll
+#if defined(_WIN32)
+
+#ifdef VR_API_EXPORT
+#define VR_INTERFACE extern "C" __declspec( dllexport )
+#else
+#define VR_INTERFACE extern "C" __declspec( dllimport )
+#endif
+
+#elif defined(GNUC) || defined(COMPILER_GCC)
+
+#ifdef VR_API_EXPORT
+#define VR_INTERFACE extern "C" __attribute__((visibility("default")))
+#else
+#define VR_INTERFACE extern "C"
+#endif
+
+#else
+#error "Unsupported Platform."
+#endif
+
+
+
+
+/** Finds the active installation of the VR API and initializes it. The priority for figuring
+* out where to load vrclient from are:
+* 1. The convar "VR_OVERRIDE", which should contain an absolute path to the root of
+* an vr API directory.
+* 2. The pchVROverride argument. This should be an absolute path or a path relative to
+* the current executable.
+* 3. The path "./vr" relative to the current executable's path.
+*
+* Each of these paths are to the "root" of the VR API install. That's the directory with
+* the "drivers" directory and a platform (i.e. "win32") directory in it, not the directory with the DLL itself.
+*/
+VR_INTERFACE IHmd *VR_Init( HmdError *peError );
+
+/** unloads vrclient.dll. Any interface pointers from the interface are
+* invalid after this point */
+VR_INTERFACE void VR_Shutdown( );
+
+#pragma pack( pop )
+
+
+} \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_130/isteamapplist.h b/lsteamclient/steamworks_sdk_130/isteamapplist.h
new file mode 100644
index 00000000..fc1d49ee
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_130/isteamapps.h b/lsteamclient/steamworks_sdk_130/isteamapps.h
new file mode 100644
index 00000000..87bcdc30
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamapps.h
@@ -0,0 +1,149 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION006"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_130/isteamappticket.h b/lsteamclient/steamworks_sdk_130/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_130/isteamclient.h b/lsteamclient/steamworks_sdk_130/isteamclient.h
new file mode 100644
index 00000000..cca2d7b0
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamclient.h
@@ -0,0 +1,400 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamMusicRemote;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player Remote
+ virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient015"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iClientDepotBuilderCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+enum { k_iSteamMusicRemoteCallbacks = 4100 };
+enum { k_iClientVRCallbacks = 4200 };
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+struct SteamCallback_t
+{
+public:
+ SteamCallback_t() {}
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname : SteamCallback_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_130/isteamcontroller.h b/lsteamclient/steamworks_sdk_130/isteamcontroller.h
new file mode 100644
index 00000000..a00c76a9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamcontroller.h
@@ -0,0 +1,91 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamcontrollerpublic.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+#define MAX_STEAM_CONTROLLERS 16
+
+#pragma pack( pop )
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ //
+ // Native controller support API
+ //
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init( const char *pchAbsolutePathToControllerConfigVDF ) = 0;
+ virtual bool Shutdown() = 0;
+
+ // Pump callback/callresult events, SteamAPI_RunCallbacks will do this for you,
+ // normally never need to call directly.
+ virtual void RunFrame() = 0;
+
+ // Get the state of the specified controller, returns false if that controller is not connected
+ virtual bool GetControllerState( uint32 unControllerIndex, SteamControllerState_t *pState ) = 0;
+
+ // Trigger a haptic pulse on the controller
+ virtual void TriggerHapticPulse( uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ // Set the override mode which is used to choose to use different base/legacy bindings from your config file
+ virtual void SetOverrideMode( const char *pchMode ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "STEAMCONTROLLER_INTERFACE_VERSION"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+/*
+struct ControllerCallback_t
+{
+ enum { k_iCallback = k_iSteamControllerCallbacks + 1 };
+
+};
+*/
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_130/isteamfriends.h b/lsteamclient/steamworks_sdk_130/isteamfriends.h
new file mode 100644
index 00000000..8e2136a9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamfriends.h
@@ -0,0 +1,609 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends014"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_130/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_130/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_130/isteamgameserver.h b/lsteamclient/steamworks_sdk_130/isteamgameserver.h
new file mode 100644
index 00000000..c97ad6f5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamgameserver.h
@@ -0,0 +1,384 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_130/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_130/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_130/isteamhttp.h b/lsteamclient/steamworks_sdk_130/isteamhttp.h
new file mode 100644
index 00000000..12a050d8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamhttp.h
@@ -0,0 +1,176 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_130/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_130/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_130/isteammatchmaking.h b/lsteamclient/steamworks_sdk_130/isteammatchmaking.h
new file mode 100644
index 00000000..0589ba0d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteammatchmaking.h
@@ -0,0 +1,747 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_130/isteammusic.h b/lsteamclient/steamworks_sdk_130/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_130/isteammusicremote.h b/lsteamclient/steamworks_sdk_130/isteammusicremote.h
new file mode 100644
index 00000000..da838b2a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteammusicremote.h
@@ -0,0 +1,126 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSICREMOTE_H
+#define ISTEAMMUSICREMOTE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteammusic.h"
+
+#define k_SteamMusicNameMaxLength 255
+#define k_SteamMusicPNGMaxLength 65535
+
+
+class ISteamMusicRemote
+{
+public:
+ // Service Definition
+ virtual bool RegisterSteamMusicRemote( const char *pchName ) = 0;
+ virtual bool DeregisterSteamMusicRemote() = 0;
+ virtual bool BIsCurrentMusicRemote() = 0;
+ virtual bool BActivationSuccess( bool bValue ) = 0;
+
+ virtual bool SetDisplayName( const char *pchDisplayName ) = 0;
+ virtual bool SetPNGIcon_64x64( void *pvBuffer, uint32 cbBufferLength ) = 0;
+
+ // Abilities for the user interface
+ virtual bool EnablePlayPrevious(bool bValue) = 0;
+ virtual bool EnablePlayNext( bool bValue ) = 0;
+ virtual bool EnableShuffled( bool bValue ) = 0;
+ virtual bool EnableLooped( bool bValue ) = 0;
+ virtual bool EnableQueue( bool bValue ) = 0;
+ virtual bool EnablePlaylists( bool bValue ) = 0;
+
+ // Status
+ virtual bool UpdatePlaybackStatus( AudioPlayback_Status nStatus ) = 0;
+ virtual bool UpdateShuffled( bool bValue ) = 0;
+ virtual bool UpdateLooped( bool bValue ) = 0;
+ virtual bool UpdateVolume( float flValue ) = 0; // volume is between 0.0 and 1.0
+
+ // Current Entry
+ virtual bool CurrentEntryWillChange() = 0;
+ virtual bool CurrentEntryIsAvailable( bool bAvailable ) = 0;
+ virtual bool UpdateCurrentEntryText( const char *pchText ) = 0;
+ virtual bool UpdateCurrentEntryElapsedSeconds( int nValue ) = 0;
+ virtual bool UpdateCurrentEntryCoverArt( void *pvBuffer, uint32 cbBufferLength ) = 0;
+ virtual bool CurrentEntryDidChange() = 0;
+
+ // Queue
+ virtual bool QueueWillChange() = 0;
+ virtual bool ResetQueueEntries() = 0;
+ virtual bool SetQueueEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentQueueEntry( int nID ) = 0;
+ virtual bool QueueDidChange() = 0;
+
+ // Playlist
+ virtual bool PlaylistWillChange() = 0;
+ virtual bool ResetPlaylistEntries() = 0;
+ virtual bool SetPlaylistEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentPlaylistEntry( int nID ) = 0;
+ virtual bool PlaylistDidChange() = 0;
+};
+
+#define STEAMMUSICREMOTE_INTERFACE_VERSION "STEAMMUSICREMOTE_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillActivate_t, k_iSteamMusicRemoteCallbacks + 1)
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillDeactivate_t, k_iSteamMusicRemoteCallbacks + 2 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteToFront_t, k_iSteamMusicRemoteCallbacks + 3 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWillQuit_t, k_iSteamMusicRemoteCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlay_t, k_iSteamMusicRemoteCallbacks + 5 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPause_t, k_iSteamMusicRemoteCallbacks + 6 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayPrevious_t, k_iSteamMusicRemoteCallbacks + 7 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayNext_t, k_iSteamMusicRemoteCallbacks + 8 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsShuffled_t, k_iSteamMusicRemoteCallbacks + 9 )
+ CALLBACK_MEMBER( 0, bool, m_bShuffled )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsLooped_t, k_iSteamMusicRemoteCallbacks + 10 )
+ CALLBACK_MEMBER(0, bool, m_bLooped )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsVolume_t, k_iSteamMusicCallbacks + 11 )
+ CALLBACK_MEMBER(0, float, m_flNewVolume)
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsQueueEntry_t, k_iSteamMusicCallbacks + 12 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsPlaylistEntry_t, k_iSteamMusicCallbacks + 13 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+
+#endif // #define ISTEAMMUSICREMOTE_H
diff --git a/lsteamclient/steamworks_sdk_130/isteamnetworking.h b/lsteamclient/steamworks_sdk_130/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_130/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_130/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_130/isteamremotestorage.h b/lsteamclient/steamworks_sdk_130/isteamremotestorage.h
new file mode 100644
index 00000000..04d960ac
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamremotestorage.h
@@ -0,0 +1,647 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+ k_EWorkshopFileTypeWebGuide = 9,
+ k_EWorkshopFileTypeIntegratedGuide = 10,
+ k_EWorkshopFileTypeMerch = 11,
+ k_EWorkshopFileTypeControllerBinding = 12,
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13,
+
+ // Update k_EWorkshopFileTypeMax if you add values.
+ k_EWorkshopFileTypeMax = 14
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION012"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ UGCHandle_t m_hFile; // The new content
+};
+
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_130/isteamscreenshots.h b/lsteamclient/steamworks_sdk_130/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_130/isteamugc.h b/lsteamclient/steamworks_sdk_130/isteamugc.h
new file mode 100644
index 00000000..f87ac44c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamugc.h
@@ -0,0 +1,268 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+};
+
+enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0, // The item update handle was invalid, job might be finished, listen too SubmitItemUpdateResult_t
+ k_EItemUpdateStatusPreparingConfig = 1, // The item update is processing configuration data
+ k_EItemUpdateStatusPreparingContent = 2, // The item update is reading and processing content files
+ k_EItemUpdateStatusUploadingContent = 3, // The item update is uploading content changes to Steam
+ k_EItemUpdateStatusUploadingPreviewFile = 4, // The item update is uploading new preview file image
+ k_EItemUpdateStatusCommittingChanges = 5 // The item update is committing all changes
+};
+
+
+const uint32 kNumUGCResultsPerPage = 50;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+ uint32 m_unNumChildren; // if m_eFileType == k_EWorkshopFileTypeCollection, then this number will be the number of children contained within the collection
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Send the query to Steam
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+
+ // Request full details for one piece of UGC
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+ // Steam Workshop Creator API
+ virtual SteamAPICall_t CreateItem( AppId_t nConsumerAppId, EWorkshopFileType eFileType ) = 0; // create new item for this app with no content attached yet
+
+ virtual UGCUpdateHandle_t StartItemUpdate( AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID ) = 0; // start an UGC item update. Set changed properties before commiting update with CommitItemUpdate()
+
+ virtual bool SetItemTitle( UGCUpdateHandle_t handle, const char *pchTitle ) = 0; // change the title of an UGC item
+ virtual bool SetItemDescription( UGCUpdateHandle_t handle, const char *pchDescription ) = 0; // change the description of an UGC item
+ virtual bool SetItemVisibility( UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item
+ virtual bool SetItemTags( UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item
+ virtual bool SetItemContent( UGCUpdateHandle_t handle, const char *pszContentFolder ) = 0; // update item content from this local folder
+ virtual bool SetItemPreview( UGCUpdateHandle_t handle, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file
+
+ virtual SteamAPICall_t SubmitItemUpdate( UGCUpdateHandle_t handle, const char *pchChangeNote ) = 0; // commit update process started with StartItemUpdate()
+ virtual EItemUpdateStatus GetItemUpdateProgress( UGCUpdateHandle_t handle, uint64 *punBytesProcessed, uint64* punBytesTotal ) = 0;
+
+ // Steam Workshop Consumer API
+ virtual SteamAPICall_t SubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // subscript to this item, will be installed ASAP
+ virtual SteamAPICall_t UnsubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // unsubscribe from this item, will be uninstalled after game quits
+ virtual uint32 GetNumSubscribedItems() = 0; // number of subscribed items
+ virtual uint32 GetSubscribedItems( PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; // all subscribed item PublishFileIDs
+
+ virtual bool GetItemInstallInfo( PublishedFileId_t nPublishedFileID, uint64 *punSizeOnDisk, char *pchFolder, uint32 cchFolderSize ) = 0; // returns true if item is installed
+ virtual bool GetItemUpdateInfo( PublishedFileId_t nPublishedFileID, bool *pbNeedsUpdate, bool *pbIsDownloading, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION002"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::CreateItem()
+//-----------------------------------------------------------------------------
+struct CreateItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 3 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId; // new item got this UGC PublishFileID
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::SubmitItemUpdate()
+//-----------------------------------------------------------------------------
+struct SubmitItemUpdateResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 4 };
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new Workshop item has been installed
+//-----------------------------------------------------------------------------
+struct ItemInstalled_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 5 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_130/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_130/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_130/isteamuser.h b/lsteamclient/steamworks_sdk_130/isteamuser.h
new file mode 100644
index 00000000..0b73178d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamuser.h
@@ -0,0 +1,348 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser017"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_130/isteamuserstats.h b/lsteamclient/steamworks_sdk_130/isteamuserstats.h
new file mode 100644
index 00000000..595ec356
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamuserstats.h
@@ -0,0 +1,463 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_130/isteamutils.h b/lsteamclient/steamworks_sdk_130/isteamutils.h
new file mode 100644
index 00000000..2e302b9e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/isteamutils.h
@@ -0,0 +1,307 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils007"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_130/matchmakingtypes.h b/lsteamclient/steamworks_sdk_130/matchmakingtypes.h
new file mode 100644
index 00000000..28c58500
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/matchmakingtypes.h
@@ -0,0 +1,249 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_130/steam_api.h b/lsteamclient/steamworks_sdk_130/steam_api.h
new file mode 100644
index 00000000..538d82f2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/steam_api.h
@@ -0,0 +1,570 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteammusicremote.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *S_CALLTYPE SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool S_CALLTYPE SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool S_CALLTYPE SteamAPI_Init();
+#endif
+
+S_API ISteamUser *S_CALLTYPE SteamUser();
+S_API ISteamFriends *S_CALLTYPE SteamFriends();
+S_API ISteamUtils *S_CALLTYPE SteamUtils();
+S_API ISteamMatchmaking *S_CALLTYPE SteamMatchmaking();
+S_API ISteamUserStats *S_CALLTYPE SteamUserStats();
+S_API ISteamApps *S_CALLTYPE SteamApps();
+S_API ISteamNetworking *S_CALLTYPE SteamNetworking();
+S_API ISteamMatchmakingServers *S_CALLTYPE SteamMatchmakingServers();
+S_API ISteamRemoteStorage *S_CALLTYPE SteamRemoteStorage();
+S_API ISteamScreenshots *S_CALLTYPE SteamScreenshots();
+S_API ISteamHTTP *S_CALLTYPE SteamHTTP();
+S_API ISteamUnifiedMessages *S_CALLTYPE SteamUnifiedMessages();
+S_API ISteamController *S_CALLTYPE SteamController();
+S_API ISteamUGC *S_CALLTYPE SteamUGC();
+S_API ISteamAppList *S_CALLTYPE SteamAppList();
+S_API ISteamMusic *S_CALLTYPE SteamMusic();
+S_API ISteamMusicRemote *S_CALLTYPE SteamMusicRemote();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender *S_CALLTYPE SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() { return m_pController; }
+ ISteamUGC* SteamUGC() { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() { return m_pSteamMusic; }
+ ISteamMusicRemote* SteamMusicRemote() { return m_pSteamMusicRemote; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+ ISteamMusicRemote *m_pSteamMusicRemote;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = NULL;
+#endif
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = SteamClient()->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = SteamClient()->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = SteamClient()->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = SteamClient()->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ {
+ return false;
+ }
+
+ m_pSteamMusicRemote = SteamClient()->GetISteamMusicRemote( hSteamUser, hSteamPipe, STEAMMUSICREMOTE_INTERFACE_VERSION );
+ if ( !m_pSteamMusicRemote )
+ {
+ return false;
+ }
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_130/steam_gameserver.h b/lsteamclient/steamworks_sdk_130/steam_gameserver.h
new file mode 100644
index 00000000..2d384894
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/steam_gameserver.h
@@ -0,0 +1,163 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_130/steamclientpublic.h b/lsteamclient/steamworks_sdk_130/steamclientpublic.h
new file mode 100644
index 00000000..6f30a8a9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/steamclientpublic.h
@@ -0,0 +1,1093 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to login
+ k_EResultItemDeleted = 86, // The thing we're trying to access has been deleted
+ k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to throttle response to possible attacker
+ k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch (only on token setup, not on login path)
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x0000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x0001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x0002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x0004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x0008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x0010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x0020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x0040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_RetailLicense = 0x0080, // has a retail license for game, (CD-Key etc)
+ k_EAppOwnershipFlags_LicenseLocked = 0x0100, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x0200, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x0400, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x0800, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x1000, // Recurring license, user is charged periodically
+ k_EAppOwnershipFlags_LicenseCanceled = 0x2000, // Mark as canceled, but might be still active if recurring
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media = 0x010, // media trailer
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_130/steamcontrollerpublic.h b/lsteamclient/steamworks_sdk_130/steamcontrollerpublic.h
new file mode 100644
index 00000000..f6950e53
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/steamcontrollerpublic.h
@@ -0,0 +1,76 @@
+//========= Copyright © 1996-2013, Valve LLC, All rights reserved. ============
+//
+// Purpose: Controller related public types/constants
+//
+//=============================================================================
+
+#ifndef STEAMCONTROLLERPUBLIC_H
+#define STEAMCONTROLLERPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#if defined( STEAM ) || defined( ISTEAMCONTROLLER_H )
+// This file should only be included by the Steam build or directly from
+// isteamcontroller.h.
+#include "steamtypes.h"
+#else
+// Otherwise, we assume it's a firmware build, which doesn't deal with all the
+// things that exist in steamtypes.h, and hardcode the typedefs we need.
+typedef unsigned int uint32;
+typedef unsigned __int64 uint64;
+#endif
+
+#pragma pack(1)
+
+// Safe to add new bitfields at the end of this list for new buttons/actions,
+// but never re-use or re-number an existing flag as old client code will be
+// confused.
+#define STEAM_RIGHT_TRIGGER_MASK 0x0000000000000001l
+#define STEAM_LEFT_TRIGGER_MASK 0x0000000000000002l
+#define STEAM_RIGHT_BUMPER_MASK 0x0000000000000004l
+#define STEAM_LEFT_BUMPER_MASK 0x0000000000000008l
+#define STEAM_BUTTON_0_MASK 0x0000000000000010l
+#define STEAM_BUTTON_1_MASK 0x0000000000000020l
+#define STEAM_BUTTON_2_MASK 0x0000000000000040l
+#define STEAM_BUTTON_3_MASK 0x0000000000000080l
+#define STEAM_TOUCH_0_MASK 0x0000000000000100l
+#define STEAM_TOUCH_1_MASK 0x0000000000000200l
+#define STEAM_TOUCH_2_MASK 0x0000000000000400l
+#define STEAM_TOUCH_3_MASK 0x0000000000000800l
+#define STEAM_BUTTON_MENU_MASK 0x0000000000001000l
+#define STEAM_BUTTON_STEAM_MASK 0x0000000000002000l
+#define STEAM_BUTTON_ESCAPE_MASK 0x0000000000004000l
+#define STEAM_BUTTON_BACK_LEFT_MASK 0x0000000000008000l
+#define STEAM_BUTTON_BACK_RIGHT_MASK 0x0000000000010000l
+#define STEAM_BUTTON_LEFTPAD_CLICKED_MASK 0x0000000000020000l
+#define STEAM_BUTTON_RIGHTPAD_CLICKED_MASK 0x0000000000040000l
+#define STEAM_LEFTPAD_FINGERDOWN_MASK 0x0000000000080000l
+#define STEAM_RIGHTPAD_FINGERDOWN_MASK 0x0000000000100000l
+
+// Only add fields to the end of this struct, or if you need to change it in a larger
+// way add a new message id and new struct completely so as to not break old clients.
+typedef struct
+{
+ // If packet num matches that on your prior call, then the controller state hasn't been changed since
+ // your last call and there is no need to process it
+ uint32 unPacketNum;
+
+ // bit flags for each of the buttons
+ uint64 ulButtons;
+
+ // Left pad coordinates
+ short sLeftPadX;
+ short sLeftPadY;
+
+ // Right pad coordinates
+ short sRightPadX;
+ short sRightPadY;
+
+} SteamControllerState_t;
+
+#pragma pack()
+
+#endif // STEAMCONTROLLERPUBLIC_H
+
diff --git a/lsteamclient/steamworks_sdk_130/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_130/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_130/steamhttpenums.h b/lsteamclient/steamworks_sdk_130/steamhttpenums.h
new file mode 100644
index 00000000..1d0a48da
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/steamhttpenums.h
@@ -0,0 +1,94 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_130/steamps3params.h b/lsteamclient/steamworks_sdk_130/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_130/steamtypes.h b/lsteamclient/steamworks_sdk_130/steamtypes.h
new file mode 100644
index 00000000..cc14fbf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/steamtypes.h
@@ -0,0 +1,157 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+// ID for a depot content manifest
+typedef uint64 ManifestId_t;
+const ManifestId_t k_uManifestIdInvalid = 0;
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_130/steamuniverse.h b/lsteamclient/steamworks_sdk_130/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_130/steamvr.h b/lsteamclient/steamworks_sdk_130/steamvr.h
new file mode 100644
index 00000000..a42514cd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_130/steamvr.h
@@ -0,0 +1,242 @@
+#pragma once
+
+#include <stdint.h>
+
+namespace vr
+{
+
+#if defined(__linux__) || defined(__APPLE__)
+ // The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+ // 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+ // The 64-bit version of gcc has the alignment requirement for these types set to
+ // 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+ // The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#pragma pack( push, 4 )
+#else
+#pragma pack( push, 8 )
+#endif
+
+
+// right-handed system
+// +y is up
+// +x is to the right
+// -z is going away from you
+// Distance unit is meters
+struct HmdMatrix34_t
+{
+ float m[3][4];
+};
+
+struct HmdMatrix44_t
+{
+ float m[4][4];
+};
+
+
+/** Used to return the post-distortion UVs for each color channel.
+* UVs range from 0 to 1 with 0,0 in the upper left corner of the
+* source render target. The 0,0 to 1,1 range covers a single eye. */
+struct DistortionCoordinates_t
+{
+ float rfRed[2];
+ float rfGreen[2];
+ float rfBlue[2];
+};
+
+
+enum Hmd_Eye
+{
+ Eye_Left = 0,
+ Eye_Right = 1
+};
+
+enum GraphicsAPIConvention
+{
+ API_DirectX = 0, // Normalized Z goes from 0 at the viewer to 1 at the far clip plane
+ API_OpenGL = 1, // Normalized Z goes from 1 at the viewer to -1 at the far clip plane
+};
+
+enum HmdTrackingResult
+{
+ TrackingResult_Uninitialized = 1,
+
+ TrackingResult_Calibrating_InProgress = 100,
+ TrackingResult_Calibrating_OutOfRange = 101,
+
+ TrackingResult_Running_OK = 200,
+ TrackingResult_Running_OutOfRange = 201,
+};
+
+class IHmd
+{
+public:
+
+
+ // ------------------------------------
+ // Display Methods
+ // ------------------------------------
+
+ /** Size and position that the window needs to be on the VR display. */
+ virtual void GetWindowBounds( int32_t *pnX, int32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** Suggested size for the intermediate render target that the distortion pulls from. */
+ virtual void GetRecommendedRenderTargetSize( uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** Gets the viewport in the frame buffer to draw the output of the distortion into */
+ virtual void GetEyeOutputViewport( Hmd_Eye eEye, uint32_t *pnX, uint32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** The projection matrix for the specified eye */
+ virtual HmdMatrix44_t GetProjectionMatrix( Hmd_Eye eEye, float fNearZ, float fFarZ, GraphicsAPIConvention eProjType ) = 0;
+
+ /** The components necessary to build your own projection matrix in case your
+ * application is doing something fancy like infinite Z */
+ virtual void GetProjectionRaw( Hmd_Eye eEye, float *pfLeft, float *pfRight, float *pfTop, float *pfBottom ) = 0;
+
+ /** Returns the result of the distortion function for the specified eye and input UVs. UVs go from 0,0 in
+ * the upper left of that eye's viewport and 1,1 in the lower right of that eye's viewport. */
+ virtual DistortionCoordinates_t ComputeDistortion( Hmd_Eye eEye, float fU, float fV ) = 0;
+
+ /** Returns the transform from eye space to the head space. Eye space is the per-eye flavor of head
+ * space that provides stereo disparity. Instead of Model * View * Projection the sequence is Model * View * Eye^-1 * Projection.
+ * Normally View and Eye^-1 will be multiplied together and treated as View in your application.
+ */
+ virtual HmdMatrix34_t GetHeadFromEyePose( Hmd_Eye eEye ) = 0;
+
+ /** For use in simple VR apps, this method returns the concatenation of the
+ * tracking pose and the eye matrix to get a full view matrix for each eye.
+ * This is ( GetEyeMatrix() ) * (GetWorldFromHeadPose() ^ -1 ) */
+ virtual bool GetViewMatrix( float fSecondsFromNow, HmdMatrix44_t *pMatLeftView, HmdMatrix44_t *pMatRightView, HmdTrackingResult *peResult ) = 0;
+
+ /** [D3D9 Only]
+ * Returns the adapter index that the user should pass into CreateDevice to set up D3D9 in such
+ * a way that it can go full screen exclusive on the HMD. Returns -1 if there was an error.
+ */
+ virtual int32_t GetD3D9AdapterIndex() = 0;
+
+ /** [D3D10/11 Only]
+ * Returns the adapter index and output index that the user should pass into EnumAdapters adn EnumOutputs
+ * to create the device and swap chain in DX10 and DX11. If an error occurs both indices will be set to -1.
+ */
+ virtual void GetDXGIOutputInfo( int32_t *pnAdapterIndex, int32_t *pnAdapterOutputIndex ) = 0;
+
+ // ------------------------------------
+ // Tracking Methods
+ // ------------------------------------
+
+ /** The pose that the tracker thinks that the HMD will be in at the specified
+ * number of seconds into the future. Pass 0 to get the current state.
+ *
+ * This is roughly analogous to the inverse of the view matrix in most applications, though
+ * many games will need to do some additional rotation or translation on top of the rotation
+ * and translation provided by the head pose.
+ *
+ * If this function returns true the pose has been populated with a pose that can be used by the application.
+ * Check peResult for details about the pose, including messages that should be displayed to the user.
+ */
+ virtual bool GetTrackerFromHeadPose( float fPredictedSecondsFromNow, HmdMatrix34_t *pmPose, HmdTrackingResult *peResult ) = 0;
+
+ /** Passes back the pose matrix from the last successful call to GetWorldFromHeadPose(). Returns true if that matrix is
+ * valid (because there has been a previous successful pose.) */
+ virtual bool GetLastTrackerFromHeadPose( HmdMatrix34_t *pmPose ) = 0;
+
+ /** Returns true if the tracker for this HMD will drift the Yaw component of its pose over time regardless of
+ * actual head motion. This is true for gyro-based trackers with no ground truth. */
+ virtual bool WillDriftInYaw() = 0;
+
+ /** Sets the zero pose for the tracker coordinate system. After this call all WorldFromHead poses will be relative
+ * to the pose whenever this was called. The new zero coordinate system will not change the fact that the Y axis is
+ * up in the real world, so the next pose returned from GetWorldFromHeadPose after a call to ZeroTracker may not be
+ * exactly an identity matrix. */
+ virtual void ZeroTracker() = 0;
+
+ /** Returns the zero pose for the tracker coordinate system. If the tracker has never had a valid pose, this
+ * will be an identity matrix. */
+ virtual HmdMatrix34_t GetTrackerZeroPose() = 0;
+
+ // ------------------------------------
+ // Administrative methods
+ // ------------------------------------
+
+ /** The ID of the driver this HMD uses as a UTF-8 string. Returns the length of the ID in bytes. If
+ * the buffer is not large enough to fit the ID an empty string will be returned. In general, 128 bytes
+ * will be enough to fit any ID. */
+ virtual uint32_t GetDriverId( char *pchBuffer, uint32_t unBufferLen ) = 0;
+
+ /** The ID of this display within its driver this HMD uses as a UTF-8 string. Returns the length of the ID in bytes. If
+ * the buffer is not large enough to fit the ID an empty string will be returned. In general, 128 bytes
+ * will be enough to fit any ID. */
+ virtual uint32_t GetDisplayId( char *pchBuffer, uint32_t unBufferLen ) = 0;
+};
+
+static const char * const IHmd_Version = "IHmd_004";
+
+/** error codes returned by Vr_Init */
+enum HmdError
+{
+ HmdError_None = 0,
+
+ HmdError_Init_InstallationNotFound = 100,
+ HmdError_Init_InstallationCorrupt = 101,
+ HmdError_Init_VRClientDLLNotFound = 102,
+ HmdError_Init_FileNotFound = 103,
+ HmdError_Init_FactoryNotFound = 104,
+ HmdError_Init_InterfaceNotFound = 105,
+ HmdError_Init_InvalidInterface = 106,
+ HmdError_Init_UserConfigDirectoryInvalid = 107,
+ HmdError_Init_HmdNotFound = 108,
+ HmdError_Init_NotInitialized = 109,
+
+ HmdError_Driver_Failed = 200,
+
+ HmdError_IPC_ServerInitFailed = 300,
+ HmdError_IPC_ConnectFailed = 301,
+ HmdError_IPC_SharedStateInitFailed = 302,
+
+};
+
+
+// figure out how to import from the VR API dll
+#if defined(_WIN32)
+
+#ifdef VR_API_EXPORT
+#define VR_INTERFACE extern "C" __declspec( dllexport )
+#else
+#define VR_INTERFACE extern "C" __declspec( dllimport )
+#endif
+
+#elif defined(GNUC) || defined(COMPILER_GCC)
+
+#ifdef VR_API_EXPORT
+#define VR_INTERFACE extern "C" __attribute__((visibility("default")))
+#else
+#define VR_INTERFACE extern "C"
+#endif
+
+#else
+#error "Unsupported Platform."
+#endif
+
+
+
+
+/** Finds the active installation of the VR API and initializes it. The priority for figuring
+* out where to load vrclient from are:
+* 1. The convar "VR_OVERRIDE", which should contain an absolute path to the root of
+* an vr API directory.
+* 2. The pchVROverride argument. This should be an absolute path or a path relative to
+* the current executable.
+* 3. The path "./vr" relative to the current executable's path.
+*
+* Each of these paths are to the "root" of the VR API install. That's the directory with
+* the "drivers" directory and a platform (i.e. "win32") directory in it, not the directory with the DLL itself.
+*/
+VR_INTERFACE IHmd *VR_Init( HmdError *peError );
+
+/** unloads vrclient.dll. Any interface pointers from the interface are
+* invalid after this point */
+VR_INTERFACE void VR_Shutdown( );
+
+#pragma pack( pop )
+
+
+} \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_131/isteamapplist.h b/lsteamclient/steamworks_sdk_131/isteamapplist.h
new file mode 100644
index 00000000..fc1d49ee
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_131/isteamapps.h b/lsteamclient/steamworks_sdk_131/isteamapps.h
new file mode 100644
index 00000000..87bcdc30
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamapps.h
@@ -0,0 +1,149 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION006"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_131/isteamappticket.h b/lsteamclient/steamworks_sdk_131/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_131/isteamclient.h b/lsteamclient/steamworks_sdk_131/isteamclient.h
new file mode 100644
index 00000000..a14948b6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamclient.h
@@ -0,0 +1,493 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+extern "C" typedef void( *SteamAPI_PostAPIResultInProcess_t )(SteamAPICall_t callHandle, void *, uint32 unCallbackSize, int iCallbackNum);
+extern "C" typedef uint32 ( *SteamAPI_CheckCallbackRegistered_t )( int iCallbackNum );
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamMusicRemote;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+class ISteamHTMLSurface;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player Remote
+ virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // html page display
+ virtual ISteamHTMLSurface *GetISteamHTMLSurface(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // Helper functions for internal Steam usage
+ virtual void Set_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) = 0;
+ virtual void Remove_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) = 0;
+ virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0;
+};
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient016"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iClientDepotBuilderCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+enum { k_iSteamMusicRemoteCallbacks = 4100 };
+enum { k_iClientVRCallbacks = 4200 };
+enum { k_iClientReservedCallbacks = 4300 };
+enum { k_iSteamReservedCallbacks = 4400 };
+enum { k_iSteamHTMLSurfaceCallbacks = 4500 };
+enum { k_iClientVideoCallbacks = 4600 };
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+struct SteamCallback_t
+{
+public:
+ SteamCallback_t() {}
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname : SteamCallback_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_10() \
+ END_CALLBACK_INTERNAL_BEGIN( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_11() \
+ END_CALLBACK_INTERNAL_BEGIN( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_12() \
+ END_CALLBACK_INTERNAL_BEGIN( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_13() \
+ END_CALLBACK_INTERNAL_BEGIN( 13 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_14() \
+ END_CALLBACK_INTERNAL_BEGIN( 14 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 13 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_131/isteamcontroller.h b/lsteamclient/steamworks_sdk_131/isteamcontroller.h
new file mode 100644
index 00000000..a00c76a9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamcontroller.h
@@ -0,0 +1,91 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamcontrollerpublic.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+#define MAX_STEAM_CONTROLLERS 16
+
+#pragma pack( pop )
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ //
+ // Native controller support API
+ //
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init( const char *pchAbsolutePathToControllerConfigVDF ) = 0;
+ virtual bool Shutdown() = 0;
+
+ // Pump callback/callresult events, SteamAPI_RunCallbacks will do this for you,
+ // normally never need to call directly.
+ virtual void RunFrame() = 0;
+
+ // Get the state of the specified controller, returns false if that controller is not connected
+ virtual bool GetControllerState( uint32 unControllerIndex, SteamControllerState_t *pState ) = 0;
+
+ // Trigger a haptic pulse on the controller
+ virtual void TriggerHapticPulse( uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ // Set the override mode which is used to choose to use different base/legacy bindings from your config file
+ virtual void SetOverrideMode( const char *pchMode ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "STEAMCONTROLLER_INTERFACE_VERSION"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+/*
+struct ControllerCallback_t
+{
+ enum { k_iCallback = k_iSteamControllerCallbacks + 1 };
+
+};
+*/
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_131/isteamfriends.h b/lsteamclient/steamworks_sdk_131/isteamfriends.h
new file mode 100644
index 00000000..8e2136a9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamfriends.h
@@ -0,0 +1,609 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends014"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_131/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_131/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_131/isteamgameserver.h b/lsteamclient/steamworks_sdk_131/isteamgameserver.h
new file mode 100644
index 00000000..c97ad6f5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamgameserver.h
@@ -0,0 +1,384 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_131/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_131/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_131/isteamhtmlsurface.h b/lsteamclient/steamworks_sdk_131/isteamhtmlsurface.h
new file mode 100644
index 00000000..48a2afa9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamhtmlsurface.h
@@ -0,0 +1,476 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to display html pages in a texture
+//
+//=============================================================================
+
+#ifndef ISTEAMHTMLSURFACE_H
+#define ISTEAMHTMLSURFACE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+typedef uint32 HHTMLBrowser;
+const uint32 INVALID_HTTMLBROWSER = 0;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for displaying HTML pages and interacting with them
+//-----------------------------------------------------------------------------
+class ISteamHTMLSurface
+{
+public:
+ virtual ~ISteamHTMLSurface() {}
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Create a browser object for display of a html page, when creation is complete the call handle
+ // will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser.
+ // The user agent string is a substring to be added to the general user agent string so you can
+ // identify your client on web servers.
+ // The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if
+ // you do not require this functionality.
+ virtual SteamAPICall_t CreateBrowser( const char *pchUserAgent, const char *pchUserCSS ) = 0;
+
+ // Call this when you are done with a html surface, this lets us free the resources being used by it
+ virtual void RemoveBrowser( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // Navigate to this URL, results in a HTML_StartRequest_t as the request commences
+ virtual void LoadURL( HHTMLBrowser unBrowserHandle, const char *pchURL, const char *pchPostData ) = 0;
+
+ // Tells the surface the size in pixels to display the surface
+ virtual void SetSize( HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight ) = 0;
+
+ // Stop the load of the current html page
+ virtual void StopLoad( HHTMLBrowser unBrowserHandle ) = 0;
+ // Reload (most likely from local cache) the current page
+ virtual void Reload( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate back in the page history
+ virtual void GoBack( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate forward in the page history
+ virtual void GoForward( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // add this header to any url requests from this browser
+ virtual void AddHeader( HHTMLBrowser unBrowserHandle, const char *pchKey, const char *pchValue ) = 0;
+ // run this javascript script in the currently loaded page
+ virtual void ExecuteJavascript( HHTMLBrowser unBrowserHandle, const char *pchScript ) = 0;
+
+ enum EHTMLMouseButton
+ {
+ eHTMLMouseButton_Left = 0,
+ eHTMLMouseButton_Right = 1,
+ eHTMLMouseButton_Middle = 2,
+ };
+
+ // Mouse click and mouse movement commands
+ virtual void MouseUp( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDown( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDoubleClick( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ // x and y are relative to the HTML bounds
+ virtual void MouseMove( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+ // nDelta is pixels of scroll
+ virtual void MouseWheel( HHTMLBrowser unBrowserHandle, int32 nDelta ) = 0;
+
+ enum EMouseCursor
+ {
+ dc_user = 0,
+ dc_none,
+ dc_arrow,
+ dc_ibeam,
+ dc_hourglass,
+ dc_waitarrow,
+ dc_crosshair,
+ dc_up,
+ dc_sizenw,
+ dc_sizese,
+ dc_sizene,
+ dc_sizesw,
+ dc_sizew,
+ dc_sizee,
+ dc_sizen,
+ dc_sizes,
+ dc_sizewe,
+ dc_sizens,
+ dc_sizeall,
+ dc_no,
+ dc_hand,
+ dc_blank, // don't show any custom cursor, just use your default
+ dc_middle_pan,
+ dc_north_pan,
+ dc_north_east_pan,
+ dc_east_pan,
+ dc_south_east_pan,
+ dc_south_pan,
+ dc_south_west_pan,
+ dc_west_pan,
+ dc_north_west_pan,
+ dc_alias,
+ dc_cell,
+ dc_colresize,
+ dc_copycur,
+ dc_verticaltext,
+ dc_rowresize,
+ dc_zoomin,
+ dc_zoomout,
+ dc_help,
+ dc_custom,
+
+ dc_last, // custom cursors start from this value and up
+ };
+
+ enum EHTMLKeyModifiers
+ {
+ eHTMLKeyModifier_None = 0,
+ eHTMLKeyModifier_AltDown = 1 << 0,
+ eHTMLKeyModifier_CrtlDown = 1 << 1,
+ eHTMLKeyModifier_ShiftDown = 1 << 2,
+ };
+
+ // keyboard interactions, native keycode is the virtual key code value from your OS
+ virtual void KeyDown( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ virtual void KeyUp( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ // cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press)
+ virtual void KeyChar( HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+
+ // programmatically scroll this many pixels on the page
+ virtual void SetHorizontalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+ virtual void SetVerticalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+
+ // tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things
+ virtual void SetKeyFocus( HHTMLBrowser unBrowserHandle, bool bHasKeyFocus ) = 0;
+
+ // open the current pages html code in the local editor of choice, used for debugging
+ virtual void ViewSource( HHTMLBrowser unBrowserHandle ) = 0;
+ // copy the currently selected text on the html page to the local clipboard
+ virtual void CopyToClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+ // paste from the local clipboard to the current html page
+ virtual void PasteFromClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element
+ virtual void Find( HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse ) = 0;
+ // cancel a currently running find
+ virtual void StopFind( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // return details about the link at position x,y on the current page
+ virtual void GetLinkAtPosition( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+
+ // set a webcookie for the hostname in question
+ virtual void SetCookie( const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath = "/", RTime32 nExpires = 0, bool bSecure = false, bool bHTTPOnly = false ) = 0;
+
+ // Zoom the current page by flZoom ( from 0.0 to 4.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care)
+ virtual void SetPageScaleFactor( HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY ) = 0;
+
+ // CALLBACKS
+ //
+ // These set of functions are used as responses to callback requests
+ //
+
+ // You MUST call this in response to a HTML_StartRequest_t callback
+ // Set bAllowed to true to allow this navigation, false to cancel it and stay
+ // on the current page. You can use this feature to limit the valid pages
+ // allowed in your HTML surface.
+ virtual void AllowStartRequest( HHTMLBrowser unBrowserHandle, bool bAllowed ) = 0;
+
+ // You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback
+ // Set bResult to true for the OK option of a confirm, use false otherwise
+ virtual void JSDialogResponse( HHTMLBrowser unBrowserHandle, bool bResult ) = 0;
+
+ // You MUST call this in response to a HTML_FileOpenDialog_t callback
+ virtual void FileLoadDialogResponse( HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles ) = 0;
+};
+
+#define STEAMHTMLSURFACE_INTERFACE_VERSION "STEAMHTMLSURFACE_INTERFACE_VERSION_002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser is ready for use
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_BrowserReady_t, k_iSteamHTMLSurfaceCallbacks + 1 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this browser is now fully created and ready to navigate to pages
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser has a pending paint
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_NeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 2)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint
+CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called
+CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture
+CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture
+CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update
+CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update
+CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update
+CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update
+CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered
+CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages
+END_DEFINE_CALLBACK_12()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser wanted to navigate to a new page
+// NOTE - you MUST call AllowStartRequest in response to this callback
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_StartRequest_t, k_iSteamHTMLSurfaceCallbacks + 3)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface navigating
+CALLBACK_MEMBER(1, const char *, pchURL) // the url they wish to navigate to
+CALLBACK_MEMBER(2, const char *, pchTarget) // the html link target type (i.e _blank, _self, _parent, _top )
+CALLBACK_MEMBER(3, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER(4, bool, bIsRedirect) // true if this was a http/html redirect from the last load request
+END_DEFINE_CALLBACK_5()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser has been requested to close due to user interaction (usually from a javascript window.close() call)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_CloseBrowser_t, k_iSteamHTMLSurfaceCallbacks + 4)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser is navigating to a new url
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_URLChanged_t, k_iSteamHTMLSurfaceCallbacks + 5 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface navigating
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the url they wish to navigate to
+CALLBACK_MEMBER( 2, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER( 3, bool, bIsRedirect ) // true if this was a http/html redirect from the last load request
+CALLBACK_MEMBER( 4, const char *, pchPageTitle ) // the title of the page
+CALLBACK_MEMBER( 5, bool, bNewNavigation ) // true if this was from a fresh tab and not a click on an existing page
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A page is finished loading
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FinishedRequest_t, k_iSteamHTMLSurfaceCallbacks + 6 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+CALLBACK_MEMBER( 2, const char *, pchPageTitle ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a request to load this url in a new tab
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_OpenLinkInNewTab_t, k_iSteamHTMLSurfaceCallbacks + 7 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the page has a new title now
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ChangedTitle_t, k_iSteamHTMLSurfaceCallbacks + 8 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: results from a search
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SearchResults_t, k_iSteamHTMLSurfaceCallbacks + 9 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unResults ) //
+CALLBACK_MEMBER( 2, uint32, unCurrentMatch ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: page history status changed on the ability to go backwards and forward
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_CanGoBackAndForward_t, k_iSteamHTMLSurfaceCallbacks + 10 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, bool, bCanGoBack ) //
+CALLBACK_MEMBER( 2, bool, bCanGoForward ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the horizontal scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HorizontalScroll_t, k_iSteamHTMLSurfaceCallbacks + 11 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool , bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the vertical scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_VerticalScroll_t, k_iSteamHTMLSurfaceCallbacks + 12 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool, bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetLinkAtPosition call
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_LinkAtPosition_t, k_iSteamHTMLSurfaceCallbacks + 13 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, x ) //
+CALLBACK_MEMBER( 2, uint32, y ) //
+CALLBACK_MEMBER( 3, const char *, pchURL ) //
+CALLBACK_MEMBER( 4, bool, bInput ) //
+CALLBACK_MEMBER( 5, bool, bLiveLink ) //
+END_DEFINE_CALLBACK_6()
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript alert dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSAlert_t, k_iSteamHTMLSurfaceCallbacks + 14 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript confirmation dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSConfirm_t, k_iSteamHTMLSurfaceCallbacks + 15 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript confirmation dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FileOpenDialog_t, k_iSteamHTMLSurfaceCallbacks + 16 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+CALLBACK_MEMBER( 2, const char *, pchInitialFile ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a popup item (i.e combo box) on the page needs rendering
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ComboNeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 17 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called
+CALLBACK_MEMBER( 2, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 3, uint32, unTall ) // the total height of the pBGRA texture
+END_DEFINE_CALLBACK_4()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a popup (i.e combo box) wants to display
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ShowPopup_t, k_iSteamHTMLSurfaceCallbacks + 18 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a popup (i.e combo box) wants to hide
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HidePopup_t, k_iSteamHTMLSurfaceCallbacks + 19 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a popup (i.e combo box) wants to hide
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SizePopup_t, k_iSteamHTMLSurfaceCallbacks + 20 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unX ) // the x pos into the page to display the popup
+CALLBACK_MEMBER( 2, uint32, unY ) // the y pos into the page to display the popup
+CALLBACK_MEMBER( 3, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 4, uint32, unTall ) // the total height of the pBGRA texture
+END_DEFINE_CALLBACK_5()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new html window has been created
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_NewWindow_t, k_iSteamHTMLSurfaceCallbacks + 21 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the page to load
+CALLBACK_MEMBER( 2, uint32, unX ) // the x pos into the page to display the popup
+CALLBACK_MEMBER( 3, uint32, unY ) // the y pos into the page to display the popup
+CALLBACK_MEMBER( 4, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 5, uint32, unTall ) // the total height of the pBGRA texture
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: change the cursor to display
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SetCursor_t, k_iSteamHTMLSurfaceCallbacks + 22 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, eMouseCursor ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: informational message from the browser
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_StatusText_t, k_iSteamHTMLSurfaceCallbacks + 23 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ShowToolTip_t, k_iSteamHTMLSurfaceCallbacks + 24 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: update the text of an existing tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_UpdateToolTip_t, k_iSteamHTMLSurfaceCallbacks + 25 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: hide the tooltip you are showing
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HideToolTip_t, k_iSteamHTMLSurfaceCallbacks + 26 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMHTMLSURFACE_H
diff --git a/lsteamclient/steamworks_sdk_131/isteamhttp.h b/lsteamclient/steamworks_sdk_131/isteamhttp.h
new file mode 100644
index 00000000..12a050d8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamhttp.h
@@ -0,0 +1,176 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_131/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_131/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_131/isteammatchmaking.h b/lsteamclient/steamworks_sdk_131/isteammatchmaking.h
new file mode 100644
index 00000000..0e54b1a3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteammatchmaking.h
@@ -0,0 +1,747 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) = 0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_131/isteammusic.h b/lsteamclient/steamworks_sdk_131/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_131/isteammusicremote.h b/lsteamclient/steamworks_sdk_131/isteammusicremote.h
new file mode 100644
index 00000000..da838b2a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteammusicremote.h
@@ -0,0 +1,126 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSICREMOTE_H
+#define ISTEAMMUSICREMOTE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteammusic.h"
+
+#define k_SteamMusicNameMaxLength 255
+#define k_SteamMusicPNGMaxLength 65535
+
+
+class ISteamMusicRemote
+{
+public:
+ // Service Definition
+ virtual bool RegisterSteamMusicRemote( const char *pchName ) = 0;
+ virtual bool DeregisterSteamMusicRemote() = 0;
+ virtual bool BIsCurrentMusicRemote() = 0;
+ virtual bool BActivationSuccess( bool bValue ) = 0;
+
+ virtual bool SetDisplayName( const char *pchDisplayName ) = 0;
+ virtual bool SetPNGIcon_64x64( void *pvBuffer, uint32 cbBufferLength ) = 0;
+
+ // Abilities for the user interface
+ virtual bool EnablePlayPrevious(bool bValue) = 0;
+ virtual bool EnablePlayNext( bool bValue ) = 0;
+ virtual bool EnableShuffled( bool bValue ) = 0;
+ virtual bool EnableLooped( bool bValue ) = 0;
+ virtual bool EnableQueue( bool bValue ) = 0;
+ virtual bool EnablePlaylists( bool bValue ) = 0;
+
+ // Status
+ virtual bool UpdatePlaybackStatus( AudioPlayback_Status nStatus ) = 0;
+ virtual bool UpdateShuffled( bool bValue ) = 0;
+ virtual bool UpdateLooped( bool bValue ) = 0;
+ virtual bool UpdateVolume( float flValue ) = 0; // volume is between 0.0 and 1.0
+
+ // Current Entry
+ virtual bool CurrentEntryWillChange() = 0;
+ virtual bool CurrentEntryIsAvailable( bool bAvailable ) = 0;
+ virtual bool UpdateCurrentEntryText( const char *pchText ) = 0;
+ virtual bool UpdateCurrentEntryElapsedSeconds( int nValue ) = 0;
+ virtual bool UpdateCurrentEntryCoverArt( void *pvBuffer, uint32 cbBufferLength ) = 0;
+ virtual bool CurrentEntryDidChange() = 0;
+
+ // Queue
+ virtual bool QueueWillChange() = 0;
+ virtual bool ResetQueueEntries() = 0;
+ virtual bool SetQueueEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentQueueEntry( int nID ) = 0;
+ virtual bool QueueDidChange() = 0;
+
+ // Playlist
+ virtual bool PlaylistWillChange() = 0;
+ virtual bool ResetPlaylistEntries() = 0;
+ virtual bool SetPlaylistEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentPlaylistEntry( int nID ) = 0;
+ virtual bool PlaylistDidChange() = 0;
+};
+
+#define STEAMMUSICREMOTE_INTERFACE_VERSION "STEAMMUSICREMOTE_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillActivate_t, k_iSteamMusicRemoteCallbacks + 1)
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillDeactivate_t, k_iSteamMusicRemoteCallbacks + 2 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteToFront_t, k_iSteamMusicRemoteCallbacks + 3 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWillQuit_t, k_iSteamMusicRemoteCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlay_t, k_iSteamMusicRemoteCallbacks + 5 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPause_t, k_iSteamMusicRemoteCallbacks + 6 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayPrevious_t, k_iSteamMusicRemoteCallbacks + 7 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayNext_t, k_iSteamMusicRemoteCallbacks + 8 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsShuffled_t, k_iSteamMusicRemoteCallbacks + 9 )
+ CALLBACK_MEMBER( 0, bool, m_bShuffled )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsLooped_t, k_iSteamMusicRemoteCallbacks + 10 )
+ CALLBACK_MEMBER(0, bool, m_bLooped )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsVolume_t, k_iSteamMusicCallbacks + 11 )
+ CALLBACK_MEMBER(0, float, m_flNewVolume)
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsQueueEntry_t, k_iSteamMusicCallbacks + 12 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsPlaylistEntry_t, k_iSteamMusicCallbacks + 13 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+
+#endif // #define ISTEAMMUSICREMOTE_H
diff --git a/lsteamclient/steamworks_sdk_131/isteamnetworking.h b/lsteamclient/steamworks_sdk_131/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_131/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_131/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_131/isteamremotestorage.h b/lsteamclient/steamworks_sdk_131/isteamremotestorage.h
new file mode 100644
index 00000000..db34eee7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamremotestorage.h
@@ -0,0 +1,648 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+ k_EWorkshopFileTypeWebGuide = 9,
+ k_EWorkshopFileTypeIntegratedGuide = 10,
+ k_EWorkshopFileTypeMerch = 11,
+ k_EWorkshopFileTypeControllerBinding = 12,
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13,
+ k_EWorkshopFileTypeSteamVideo = 14,
+
+ // Update k_EWorkshopFileTypeMax if you add values.
+ k_EWorkshopFileTypeMax = 15
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION012"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ UGCHandle_t m_hFile; // The new content
+};
+
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_131/isteamscreenshots.h b/lsteamclient/steamworks_sdk_131/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_131/isteamugc.h b/lsteamclient/steamworks_sdk_131/isteamugc.h
new file mode 100644
index 00000000..e89f0940
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamugc.h
@@ -0,0 +1,270 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+};
+
+enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0, // The item update handle was invalid, job might be finished, listen too SubmitItemUpdateResult_t
+ k_EItemUpdateStatusPreparingConfig = 1, // The item update is processing configuration data
+ k_EItemUpdateStatusPreparingContent = 2, // The item update is reading and processing content files
+ k_EItemUpdateStatusUploadingContent = 3, // The item update is uploading content changes to Steam
+ k_EItemUpdateStatusUploadingPreviewFile = 4, // The item update is uploading new preview file image
+ k_EItemUpdateStatusCommittingChanges = 5 // The item update is committing all changes
+};
+
+
+const uint32 kNumUGCResultsPerPage = 50;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+ uint32 m_unNumChildren; // if m_eFileType == k_EWorkshopFileTypeCollection, then this number will be the number of children contained within the collection
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Send the query to Steam
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+
+ // Request full details for one piece of UGC
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+ // Steam Workshop Creator API
+ virtual SteamAPICall_t CreateItem( AppId_t nConsumerAppId, EWorkshopFileType eFileType ) = 0; // create new item for this app with no content attached yet
+
+ virtual UGCUpdateHandle_t StartItemUpdate( AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID ) = 0; // start an UGC item update. Set changed properties before commiting update with CommitItemUpdate()
+
+ virtual bool SetItemTitle( UGCUpdateHandle_t handle, const char *pchTitle ) = 0; // change the title of an UGC item
+ virtual bool SetItemDescription( UGCUpdateHandle_t handle, const char *pchDescription ) = 0; // change the description of an UGC item
+ virtual bool SetItemVisibility( UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item
+ virtual bool SetItemTags( UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item
+ virtual bool SetItemContent( UGCUpdateHandle_t handle, const char *pszContentFolder ) = 0; // update item content from this local folder
+ virtual bool SetItemPreview( UGCUpdateHandle_t handle, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file
+
+ virtual SteamAPICall_t SubmitItemUpdate( UGCUpdateHandle_t handle, const char *pchChangeNote ) = 0; // commit update process started with StartItemUpdate()
+ virtual EItemUpdateStatus GetItemUpdateProgress( UGCUpdateHandle_t handle, uint64 *punBytesProcessed, uint64* punBytesTotal ) = 0;
+
+ // Steam Workshop Consumer API
+ virtual SteamAPICall_t SubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // subscript to this item, will be installed ASAP
+ virtual SteamAPICall_t UnsubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // unsubscribe from this item, will be uninstalled after game quits
+ virtual uint32 GetNumSubscribedItems() = 0; // number of subscribed items
+ virtual uint32 GetSubscribedItems( PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; // all subscribed item PublishFileIDs
+
+ // Get info about the item on disk. If you are supporting items published through the legacy RemoteStorage APIs then *pbLegacyItem will be set to true
+ // and pchFolder will contain the full path to the file rather than the containing folder.
+ virtual bool GetItemInstallInfo( PublishedFileId_t nPublishedFileID, uint64 *punSizeOnDisk, char *pchFolder, uint32 cchFolderSize, bool *pbLegacyItem ) = 0; // returns true if item is installed
+ virtual bool GetItemUpdateInfo( PublishedFileId_t nPublishedFileID, bool *pbNeedsUpdate, bool *pbIsDownloading, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION003"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::CreateItem()
+//-----------------------------------------------------------------------------
+struct CreateItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 3 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId; // new item got this UGC PublishFileID
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::SubmitItemUpdate()
+//-----------------------------------------------------------------------------
+struct SubmitItemUpdateResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 4 };
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new Workshop item has been installed
+//-----------------------------------------------------------------------------
+struct ItemInstalled_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 5 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_131/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_131/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_131/isteamuser.h b/lsteamclient/steamworks_sdk_131/isteamuser.h
new file mode 100644
index 00000000..0b73178d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamuser.h
@@ -0,0 +1,348 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser017"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_131/isteamuserstats.h b/lsteamclient/steamworks_sdk_131/isteamuserstats.h
new file mode 100644
index 00000000..595ec356
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamuserstats.h
@@ -0,0 +1,463 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_131/isteamutils.h b/lsteamclient/steamworks_sdk_131/isteamutils.h
new file mode 100644
index 00000000..2e302b9e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/isteamutils.h
@@ -0,0 +1,307 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils007"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_131/matchmakingtypes.h b/lsteamclient/steamworks_sdk_131/matchmakingtypes.h
new file mode 100644
index 00000000..28c58500
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/matchmakingtypes.h
@@ -0,0 +1,249 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_131/steam_api.h b/lsteamclient/steamworks_sdk_131/steam_api.h
new file mode 100644
index 00000000..2890cb15
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/steam_api.h
@@ -0,0 +1,583 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteammusicremote.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+#include "isteamhtmlsurface.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *S_CALLTYPE SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool S_CALLTYPE SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool S_CALLTYPE SteamAPI_Init();
+#endif
+
+S_API ISteamUser *S_CALLTYPE SteamUser();
+S_API ISteamFriends *S_CALLTYPE SteamFriends();
+S_API ISteamUtils *S_CALLTYPE SteamUtils();
+S_API ISteamMatchmaking *S_CALLTYPE SteamMatchmaking();
+S_API ISteamUserStats *S_CALLTYPE SteamUserStats();
+S_API ISteamApps *S_CALLTYPE SteamApps();
+S_API ISteamNetworking *S_CALLTYPE SteamNetworking();
+S_API ISteamMatchmakingServers *S_CALLTYPE SteamMatchmakingServers();
+S_API ISteamRemoteStorage *S_CALLTYPE SteamRemoteStorage();
+S_API ISteamScreenshots *S_CALLTYPE SteamScreenshots();
+S_API ISteamHTTP *S_CALLTYPE SteamHTTP();
+S_API ISteamUnifiedMessages *S_CALLTYPE SteamUnifiedMessages();
+S_API ISteamController *S_CALLTYPE SteamController();
+S_API ISteamUGC *S_CALLTYPE SteamUGC();
+S_API ISteamAppList *S_CALLTYPE SteamAppList();
+S_API ISteamMusic *S_CALLTYPE SteamMusic();
+S_API ISteamMusicRemote *S_CALLTYPE SteamMusicRemote();
+S_API ISteamHTMLSurface *S_CALLTYPE SteamHTMLSurface();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender *S_CALLTYPE SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() { return m_pController; }
+ ISteamUGC* SteamUGC() { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() { return m_pSteamMusic; }
+ ISteamMusicRemote* SteamMusicRemote() { return m_pSteamMusicRemote; }
+ ISteamHTMLSurface* SteamHTMLSurface() { return m_pSteamHTMLSurface; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+ ISteamMusicRemote *m_pSteamMusicRemote;
+ ISteamHTMLSurface *m_pSteamHTMLSurface;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamMusicRemote= NULL;
+ m_pSteamHTMLSurface = NULL;
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = NULL;
+#endif
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = SteamClient()->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = SteamClient()->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = SteamClient()->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = SteamClient()->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ {
+ return false;
+ }
+
+ m_pSteamMusicRemote = SteamClient()->GetISteamMusicRemote( hSteamUser, hSteamPipe, STEAMMUSICREMOTE_INTERFACE_VERSION );
+ if ( !m_pSteamMusicRemote )
+ {
+ return false;
+ }
+
+ m_pSteamHTMLSurface = SteamClient()->GetISteamHTMLSurface( hSteamUser, hSteamPipe, STEAMHTMLSURFACE_INTERFACE_VERSION );
+ if ( !m_pSteamHTMLSurface )
+ {
+ return false;
+ }
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_131/steam_gameserver.h b/lsteamclient/steamworks_sdk_131/steam_gameserver.h
new file mode 100644
index 00000000..2d384894
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/steam_gameserver.h
@@ -0,0 +1,163 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_131/steamclientpublic.h b/lsteamclient/steamworks_sdk_131/steamclientpublic.h
new file mode 100644
index 00000000..1620520b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/steamclientpublic.h
@@ -0,0 +1,1102 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to login
+ k_EResultItemDeleted = 86, // The thing we're trying to access has been deleted
+ k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to throttle response to possible attacker
+ k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch
+ k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for two-factor didn't match
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+typedef enum
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+} EDenyReason;
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+typedef enum
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+} EBeginAuthSessionResult;
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+typedef enum
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+ k_EAuthSessionResponsePublisherIssuedBan = 9, // The user is banned for this game. The ban came via the web api and not VAC
+} EAuthSessionResponse;
+
+// results from UserHasLicenseForApp
+typedef enum
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+} EUserHasLicenseForAppResult;
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x0000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x0001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x0002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x0004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x0008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x0010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x0020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x0040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_RetailLicense = 0x0080, // has a retail license for game, (CD-Key etc)
+ k_EAppOwnershipFlags_LicenseLocked = 0x0100, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x0200, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x0400, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x0800, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x1000, // Recurring license, user is charged periodically
+ k_EAppOwnershipFlags_LicenseCanceled = 0x2000, // Mark as canceled, but might be still active if recurring
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media_DEPRECATED = 0x010, // legacy - was used for game trailers, which are now just videos on the web
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+ k_EAppType_Film = 0x200, // A Movie (feature film)
+ k_EAppType_TVSeries = 0x400, // A TV or other video series which will have episodes and perhaps seasons
+ k_EAppType_Video = 0x800, // A video component of either a Film or TVSeries (may be the feature, an episode, preview, making-of, etc)
+ k_EAppType_Plugin = 0x1000, // Plug-in types for other Apps
+ k_EAppType_Music = 0x2000, // Music files
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+ k_EChatEntryTypeReserved1 = 12,
+ k_EChatEntryTypeReserved2 = 13,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM2_USERID_STRUCTS )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ Q_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, Q_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, Q_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, Q_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, Q_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_131/steamcontrollerpublic.h b/lsteamclient/steamworks_sdk_131/steamcontrollerpublic.h
new file mode 100644
index 00000000..ad06f0e8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/steamcontrollerpublic.h
@@ -0,0 +1,79 @@
+//========= Copyright © 1996-2013, Valve LLC, All rights reserved. ============
+//
+// Purpose: Controller related public types/constants
+//
+//=============================================================================
+
+#ifndef STEAMCONTROLLERPUBLIC_H
+#define STEAMCONTROLLERPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#if defined( STEAM ) || defined( ISTEAMCONTROLLER_H )
+// This file should only be included by the Steam build or directly from
+// isteamcontroller.h.
+#include "steamtypes.h"
+#else
+#include <stdint.h>
+typedef uint32_t uint32;
+#ifdef __C51__
+typedef uint8_t uint64[8];
+#else
+typedef uint64_t uint64;
+#endif
+#endif
+
+#pragma pack(1)
+
+// Safe to add new bitfields at the end of this list for new buttons/actions,
+// but never re-use or re-number an existing flag as old client code will be
+// confused.
+#define STEAM_RIGHT_TRIGGER_MASK 0x0000000000000001l
+#define STEAM_LEFT_TRIGGER_MASK 0x0000000000000002l
+#define STEAM_RIGHT_BUMPER_MASK 0x0000000000000004l
+#define STEAM_LEFT_BUMPER_MASK 0x0000000000000008l
+#define STEAM_BUTTON_0_MASK 0x0000000000000010l
+#define STEAM_BUTTON_1_MASK 0x0000000000000020l
+#define STEAM_BUTTON_2_MASK 0x0000000000000040l
+#define STEAM_BUTTON_3_MASK 0x0000000000000080l
+#define STEAM_TOUCH_0_MASK 0x0000000000000100l
+#define STEAM_TOUCH_1_MASK 0x0000000000000200l
+#define STEAM_TOUCH_2_MASK 0x0000000000000400l
+#define STEAM_TOUCH_3_MASK 0x0000000000000800l
+#define STEAM_BUTTON_MENU_MASK 0x0000000000001000l
+#define STEAM_BUTTON_STEAM_MASK 0x0000000000002000l
+#define STEAM_BUTTON_ESCAPE_MASK 0x0000000000004000l
+#define STEAM_BUTTON_BACK_LEFT_MASK 0x0000000000008000l
+#define STEAM_BUTTON_BACK_RIGHT_MASK 0x0000000000010000l
+#define STEAM_BUTTON_LEFTPAD_CLICKED_MASK 0x0000000000020000l
+#define STEAM_BUTTON_RIGHTPAD_CLICKED_MASK 0x0000000000040000l
+#define STEAM_LEFTPAD_FINGERDOWN_MASK 0x0000000000080000l
+#define STEAM_RIGHTPAD_FINGERDOWN_MASK 0x0000000000100000l
+
+// Only add fields to the end of this struct, or if you need to change it in a larger
+// way add a new message id and new struct completely so as to not break old clients.
+typedef struct
+{
+ // If packet num matches that on your prior call, then the controller state hasn't been changed since
+ // your last call and there is no need to process it
+ uint32 unPacketNum;
+
+ // bit flags for each of the buttons
+ uint64 ulButtons;
+
+ // Left pad coordinates
+ short sLeftPadX;
+ short sLeftPadY;
+
+ // Right pad coordinates
+ short sRightPadX;
+ short sRightPadY;
+
+} SteamControllerState_t;
+
+#pragma pack()
+
+#endif // STEAMCONTROLLERPUBLIC_H
+
diff --git a/lsteamclient/steamworks_sdk_131/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_131/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_131/steamhttpenums.h b/lsteamclient/steamworks_sdk_131/steamhttpenums.h
new file mode 100644
index 00000000..155fe770
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/steamhttpenums.h
@@ -0,0 +1,95 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+ k_EHTTPStatusCode429TooManyRequests = 429,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_131/steamps3params.h b/lsteamclient/steamworks_sdk_131/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_131/steamtypes.h b/lsteamclient/steamworks_sdk_131/steamtypes.h
new file mode 100644
index 00000000..cc14fbf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/steamtypes.h
@@ -0,0 +1,157 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+// ID for a depot content manifest
+typedef uint64 ManifestId_t;
+const ManifestId_t k_uManifestIdInvalid = 0;
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_131/steamuniverse.h b/lsteamclient/steamworks_sdk_131/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_131/steamvr.h b/lsteamclient/steamworks_sdk_131/steamvr.h
new file mode 100644
index 00000000..cfbbdb16
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_131/steamvr.h
@@ -0,0 +1,261 @@
+#pragma once
+
+#include <stdint.h>
+
+namespace vr
+{
+
+#if defined(__linux__) || defined(__APPLE__)
+ // The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+ // 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+ // The 64-bit version of gcc has the alignment requirement for these types set to
+ // 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+ // The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#pragma pack( push, 4 )
+#else
+#pragma pack( push, 8 )
+#endif
+
+
+// right-handed system
+// +y is up
+// +x is to the right
+// -z is going away from you
+// Distance unit is meters
+struct HmdMatrix34_t
+{
+ float m[3][4];
+};
+
+struct HmdMatrix44_t
+{
+ float m[4][4];
+};
+
+
+/** Used to return the post-distortion UVs for each color channel.
+* UVs range from 0 to 1 with 0,0 in the upper left corner of the
+* source render target. The 0,0 to 1,1 range covers a single eye. */
+struct DistortionCoordinates_t
+{
+ float rfRed[2];
+ float rfGreen[2];
+ float rfBlue[2];
+};
+
+
+enum Hmd_Eye
+{
+ Eye_Left = 0,
+ Eye_Right = 1
+};
+
+enum GraphicsAPIConvention
+{
+ API_DirectX = 0, // Normalized Z goes from 0 at the viewer to 1 at the far clip plane
+ API_OpenGL = 1, // Normalized Z goes from 1 at the viewer to -1 at the far clip plane
+};
+
+enum HmdTrackingResult
+{
+ TrackingResult_Uninitialized = 1,
+
+ TrackingResult_Calibrating_InProgress = 100,
+ TrackingResult_Calibrating_OutOfRange = 101,
+
+ TrackingResult_Running_OK = 200,
+ TrackingResult_Running_OutOfRange = 201,
+};
+
+class IHmd
+{
+public:
+
+
+ // ------------------------------------
+ // Display Methods
+ // ------------------------------------
+
+ /** Size and position that the window needs to be on the VR display. */
+ virtual void GetWindowBounds( int32_t *pnX, int32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** Suggested size for the intermediate render target that the distortion pulls from. */
+ virtual void GetRecommendedRenderTargetSize( uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** Gets the viewport in the frame buffer to draw the output of the distortion into */
+ virtual void GetEyeOutputViewport( Hmd_Eye eEye, uint32_t *pnX, uint32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** The projection matrix for the specified eye */
+ virtual HmdMatrix44_t GetProjectionMatrix( Hmd_Eye eEye, float fNearZ, float fFarZ, GraphicsAPIConvention eProjType ) = 0;
+
+ /** The components necessary to build your own projection matrix in case your
+ * application is doing something fancy like infinite Z */
+ virtual void GetProjectionRaw( Hmd_Eye eEye, float *pfLeft, float *pfRight, float *pfTop, float *pfBottom ) = 0;
+
+ /** Returns the result of the distortion function for the specified eye and input UVs. UVs go from 0,0 in
+ * the upper left of that eye's viewport and 1,1 in the lower right of that eye's viewport. */
+ virtual DistortionCoordinates_t ComputeDistortion( Hmd_Eye eEye, float fU, float fV ) = 0;
+
+ /** Returns the transform from eye space to the head space. Eye space is the per-eye flavor of head
+ * space that provides stereo disparity. Instead of Model * View * Projection the sequence is Model * View * Eye^-1 * Projection.
+ * Normally View and Eye^-1 will be multiplied together and treated as View in your application.
+ */
+ virtual HmdMatrix34_t GetHeadFromEyePose( Hmd_Eye eEye ) = 0;
+
+ /** For use in simple VR apps, this method returns the concatenation of the
+ * tracking pose and the eye matrix to get a full view matrix for each eye.
+ * This is ( GetEyeMatrix() ) * (GetWorldFromHeadPose() ^ -1 ) */
+ virtual bool GetViewMatrix( float fSecondsFromNow, HmdMatrix44_t *pMatLeftView, HmdMatrix44_t *pMatRightView, HmdTrackingResult *peResult ) = 0;
+
+ /** [D3D9 Only]
+ * Returns the adapter index that the user should pass into CreateDevice to set up D3D9 in such
+ * a way that it can go full screen exclusive on the HMD. Returns -1 if there was an error.
+ */
+ virtual int32_t GetD3D9AdapterIndex() = 0;
+
+ /** [D3D10/11 Only]
+ * Returns the adapter index and output index that the user should pass into EnumAdapters adn EnumOutputs
+ * to create the device and swap chain in DX10 and DX11. If an error occurs both indices will be set to -1.
+ */
+ virtual void GetDXGIOutputInfo( int32_t *pnAdapterIndex, int32_t *pnAdapterOutputIndex ) = 0;
+
+ /** [Windows Only]
+ * Notifies the system that the VR output will appear in a particular window.
+ */
+ virtual void AttachToWindow( void *hWnd ) = 0;
+
+ // ------------------------------------
+ // Tracking Methods
+ // ------------------------------------
+
+ /** The pose that the tracker thinks that the HMD will be in at the specified
+ * number of seconds into the future. Pass 0 to get the current state.
+ *
+ * This is roughly analogous to the inverse of the view matrix in most applications, though
+ * many games will need to do some additional rotation or translation on top of the rotation
+ * and translation provided by the head pose.
+ *
+ * If this function returns true the pose has been populated with a pose that can be used by the application.
+ * Check peResult for details about the pose, including messages that should be displayed to the user.
+ */
+ virtual bool GetTrackerFromHeadPose( float fPredictedSecondsFromNow, HmdMatrix34_t *pmPose, HmdTrackingResult *peResult ) = 0;
+
+ /** Passes back the pose matrix from the last successful call to GetWorldFromHeadPose(). Returns true if that matrix is
+ * valid (because there has been a previous successful pose.) */
+ virtual bool GetLastTrackerFromHeadPose( HmdMatrix34_t *pmPose ) = 0;
+
+ /** Returns true if the tracker for this HMD will drift the Yaw component of its pose over time regardless of
+ * actual head motion. This is true for gyro-based trackers with no ground truth. */
+ virtual bool WillDriftInYaw() = 0;
+
+ /** Sets the zero pose for the tracker coordinate system. After this call all WorldFromHead poses will be relative
+ * to the pose whenever this was called. The new zero coordinate system will not change the fact that the Y axis is
+ * up in the real world, so the next pose returned from GetWorldFromHeadPose after a call to ZeroTracker may not be
+ * exactly an identity matrix. */
+ virtual void ZeroTracker() = 0;
+
+ /** Returns the zero pose for the tracker coordinate system. If the tracker has never had a valid pose, this
+ * will be an identity matrix. */
+ virtual HmdMatrix34_t GetTrackerZeroPose() = 0;
+
+ // ------------------------------------
+ // Administrative methods
+ // ------------------------------------
+
+ /** The ID of the driver this HMD uses as a UTF-8 string. Returns the length of the ID in bytes. If
+ * the buffer is not large enough to fit the ID an empty string will be returned. In general, 128 bytes
+ * will be enough to fit any ID. */
+ virtual uint32_t GetDriverId( char *pchBuffer, uint32_t unBufferLen ) = 0;
+
+ /** The ID of this display within its driver this HMD uses as a UTF-8 string. Returns the length of the ID in bytes. If
+ * the buffer is not large enough to fit the ID an empty string will be returned. In general, 128 bytes
+ * will be enough to fit any ID. */
+ virtual uint32_t GetDisplayId( char *pchBuffer, uint32_t unBufferLen ) = 0;
+};
+
+static const char * const IHmd_Version = "IHmd_005";
+
+/** error codes returned by Vr_Init */
+enum HmdError
+{
+ HmdError_None = 0,
+
+ HmdError_Init_InstallationNotFound = 100,
+ HmdError_Init_InstallationCorrupt = 101,
+ HmdError_Init_VRClientDLLNotFound = 102,
+ HmdError_Init_FileNotFound = 103,
+ HmdError_Init_FactoryNotFound = 104,
+ HmdError_Init_InterfaceNotFound = 105,
+ HmdError_Init_InvalidInterface = 106,
+ HmdError_Init_UserConfigDirectoryInvalid = 107,
+ HmdError_Init_HmdNotFound = 108,
+ HmdError_Init_NotInitialized = 109,
+
+ HmdError_Driver_Failed = 200,
+ HmdError_Driver_Unknown = 201,
+ HmdError_Driver_HmdUnknown = 202,
+ HmdError_Driver_NotLoaded = 203,
+
+ HmdError_IPC_ServerInitFailed = 300,
+ HmdError_IPC_ConnectFailed = 301,
+ HmdError_IPC_SharedStateInitFailed = 302,
+
+ HmdError_VendorSpecific_UnableToConnectToOculusRuntime = 1000,
+
+};
+
+
+// figure out how to import from the VR API dll
+#if defined(_WIN32)
+
+#ifdef VR_API_EXPORT
+#define VR_INTERFACE extern "C" __declspec( dllexport )
+#else
+#define VR_INTERFACE extern "C" __declspec( dllimport )
+#endif
+
+#elif defined(GNUC) || defined(COMPILER_GCC)
+
+#ifdef VR_API_EXPORT
+#define VR_INTERFACE extern "C" __attribute__((visibility("default")))
+#else
+#define VR_INTERFACE extern "C"
+#endif
+
+#else
+#error "Unsupported Platform."
+#endif
+
+
+
+
+/** Finds the active installation of the VR API and initializes it. The priority for figuring
+* out where to load vrclient from are:
+* 1. The convar "VR_OVERRIDE", which should contain an absolute path to the root of
+* an vr API directory.
+* 2. The pchVROverride argument. This should be an absolute path or a path relative to
+* the current executable.
+* 3. The path "./vr" relative to the current executable's path.
+*
+* Each of these paths are to the "root" of the VR API install. That's the directory with
+* the "drivers" directory and a platform (i.e. "win32") directory in it, not the directory with the DLL itself.
+*/
+VR_INTERFACE IHmd *VR_Init( HmdError *peError );
+
+/** unloads vrclient.dll. Any interface pointers from the interface are
+* invalid after this point */
+VR_INTERFACE void VR_Shutdown( );
+
+/** Returns true if there is an HMD attached. This check is as lightweight as possible and
+* can be called outside of VR_Init/VR_Shutdown. It should be used when an application wants
+* to know if initializing VR is a possibility but isn't ready to take that step yet.
+*/
+VR_INTERFACE bool VR_IsHmdPresent();
+
+/** Returns the string version of an HMD error. This function may be called outside of VR_Init()/VR_Shutdown(). */
+VR_INTERFACE const char *VR_GetStringForHmdError( HmdError error );
+
+#pragma pack( pop )
+
+
+} \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_132/isteamapplist.h b/lsteamclient/steamworks_sdk_132/isteamapplist.h
new file mode 100644
index 00000000..fc1d49ee
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_132/isteamapps.h b/lsteamclient/steamworks_sdk_132/isteamapps.h
new file mode 100644
index 00000000..f73fed4d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamapps.h
@@ -0,0 +1,154 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+ // get download progress for optional DLC
+ virtual bool GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // return the buildid of this app, may change at any time based on backend updates to the game
+ virtual int GetAppBuildId() = 0;
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION007"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_132/isteamappticket.h b/lsteamclient/steamworks_sdk_132/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_132/isteamclient.h b/lsteamclient/steamworks_sdk_132/isteamclient.h
new file mode 100644
index 00000000..9977f3a5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamclient.h
@@ -0,0 +1,503 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct ValvePackingSentinel_t
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+extern "C" typedef void( *SteamAPI_PostAPIResultInProcess_t )(SteamAPICall_t callHandle, void *, uint32 unCallbackSize, int iCallbackNum);
+extern "C" typedef uint32 ( *SteamAPI_CheckCallbackRegistered_t )( int iCallbackNum );
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamMusicRemote;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+class ISteamHTMLSurface;
+class ISteamInventory;
+class ISteamVideo;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player Remote
+ virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // html page display
+ virtual ISteamHTMLSurface *GetISteamHTMLSurface(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // Helper functions for internal Steam usage
+ virtual void Set_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) = 0;
+ virtual void Remove_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) = 0;
+ virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0;
+
+ // inventory
+ virtual ISteamInventory *GetISteamInventory( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Video
+ virtual ISteamVideo *GetISteamVideo( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient017"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iClientDepotBuilderCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+enum { k_iSteamMusicRemoteCallbacks = 4100 };
+enum { k_iClientVRCallbacks = 4200 };
+enum { k_iClientReservedCallbacks = 4300 };
+enum { k_iSteamReservedCallbacks = 4400 };
+enum { k_iSteamHTMLSurfaceCallbacks = 4500 };
+enum { k_iClientVideoCallbacks = 4600 };
+enum { k_iClientInventoryCallbacks = 4700 };
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+struct SteamCallback_t
+{
+public:
+ SteamCallback_t() {}
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname : SteamCallback_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_10() \
+ END_CALLBACK_INTERNAL_BEGIN( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_11() \
+ END_CALLBACK_INTERNAL_BEGIN( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_12() \
+ END_CALLBACK_INTERNAL_BEGIN( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_13() \
+ END_CALLBACK_INTERNAL_BEGIN( 13 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_14() \
+ END_CALLBACK_INTERNAL_BEGIN( 14 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 13 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_132/isteamcontroller.h b/lsteamclient/steamworks_sdk_132/isteamcontroller.h
new file mode 100644
index 00000000..a00c76a9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamcontroller.h
@@ -0,0 +1,91 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamcontrollerpublic.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+#define MAX_STEAM_CONTROLLERS 16
+
+#pragma pack( pop )
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ //
+ // Native controller support API
+ //
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init( const char *pchAbsolutePathToControllerConfigVDF ) = 0;
+ virtual bool Shutdown() = 0;
+
+ // Pump callback/callresult events, SteamAPI_RunCallbacks will do this for you,
+ // normally never need to call directly.
+ virtual void RunFrame() = 0;
+
+ // Get the state of the specified controller, returns false if that controller is not connected
+ virtual bool GetControllerState( uint32 unControllerIndex, SteamControllerState_t *pState ) = 0;
+
+ // Trigger a haptic pulse on the controller
+ virtual void TriggerHapticPulse( uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ // Set the override mode which is used to choose to use different base/legacy bindings from your config file
+ virtual void SetOverrideMode( const char *pchMode ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "STEAMCONTROLLER_INTERFACE_VERSION"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+/*
+struct ControllerCallback_t
+{
+ enum { k_iCallback = k_iSteamControllerCallbacks + 1 };
+
+};
+*/
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_132/isteamfriends.h b/lsteamclient/steamworks_sdk_132/isteamfriends.h
new file mode 100644
index 00000000..4c171cdb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamfriends.h
@@ -0,0 +1,629 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+// friends group identifier type
+typedef int16 FriendsGroupID_t;
+
+// invalid friends group identifier constant
+const FriendsGroupID_t k_FriendsGroupID_Invalid = -1;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, OUT_STRUCT() FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+ // friends steam level
+ virtual int GetFriendSteamLevel( CSteamID steamIDFriend ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // friend grouping (tag) apis
+ // returns the number of friends groups
+ virtual int GetFriendsGroupCount() = 0;
+ // returns the friends group ID for the given index (invalid indices return k_FriendsGroupID_Invalid)
+ virtual FriendsGroupID_t GetFriendsGroupIDByIndex( int iFG ) = 0;
+ // returns the name for the given friends group (NULL in the case of invalid friends group IDs)
+ virtual const char *GetFriendsGroupName( FriendsGroupID_t friendsGroupID ) = 0;
+ // returns the number of members in a given friends group
+ virtual int GetFriendsGroupMembersCount( FriendsGroupID_t friendsGroupID ) = 0;
+ // gets up to nMembersCount members of the given friends group, if fewer exist than requested those positions' SteamIDs will be invalid
+ virtual void GetFriendsGroupMembersList( FriendsGroupID_t friendsGroupID, OUT_ARRAY_CALL(nMembersCount, GetFriendsGroupMembersCount, friendsGroupID ) CSteamID *pOutSteamIDMembers, int nMembersCount ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( ARRAY_COUNT(cClansToRequest) CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, OUT_STRUCT() CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends015"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_132/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_132/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_132/isteamgameserver.h b/lsteamclient/steamworks_sdk_132/isteamgameserver.h
new file mode 100644
index 00000000..c97ad6f5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamgameserver.h
@@ -0,0 +1,384 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_132/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_132/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_132/isteamhtmlsurface.h b/lsteamclient/steamworks_sdk_132/isteamhtmlsurface.h
new file mode 100644
index 00000000..66e4ccb1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamhtmlsurface.h
@@ -0,0 +1,476 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to display html pages in a texture
+//
+//=============================================================================
+
+#ifndef ISTEAMHTMLSURFACE_H
+#define ISTEAMHTMLSURFACE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+typedef uint32 HHTMLBrowser;
+const uint32 INVALID_HTMLBROWSER = 0;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for displaying HTML pages and interacting with them
+//-----------------------------------------------------------------------------
+class ISteamHTMLSurface
+{
+public:
+ virtual ~ISteamHTMLSurface() {}
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Create a browser object for display of a html page, when creation is complete the call handle
+ // will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser.
+ // The user agent string is a substring to be added to the general user agent string so you can
+ // identify your client on web servers.
+ // The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if
+ // you do not require this functionality.
+ virtual SteamAPICall_t CreateBrowser( const char *pchUserAgent, const char *pchUserCSS ) = 0;
+
+ // Call this when you are done with a html surface, this lets us free the resources being used by it
+ virtual void RemoveBrowser( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // Navigate to this URL, results in a HTML_StartRequest_t as the request commences
+ virtual void LoadURL( HHTMLBrowser unBrowserHandle, const char *pchURL, const char *pchPostData ) = 0;
+
+ // Tells the surface the size in pixels to display the surface
+ virtual void SetSize( HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight ) = 0;
+
+ // Stop the load of the current html page
+ virtual void StopLoad( HHTMLBrowser unBrowserHandle ) = 0;
+ // Reload (most likely from local cache) the current page
+ virtual void Reload( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate back in the page history
+ virtual void GoBack( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate forward in the page history
+ virtual void GoForward( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // add this header to any url requests from this browser
+ virtual void AddHeader( HHTMLBrowser unBrowserHandle, const char *pchKey, const char *pchValue ) = 0;
+ // run this javascript script in the currently loaded page
+ virtual void ExecuteJavascript( HHTMLBrowser unBrowserHandle, const char *pchScript ) = 0;
+
+ enum EHTMLMouseButton
+ {
+ eHTMLMouseButton_Left = 0,
+ eHTMLMouseButton_Right = 1,
+ eHTMLMouseButton_Middle = 2,
+ };
+
+ // Mouse click and mouse movement commands
+ virtual void MouseUp( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDown( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDoubleClick( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ // x and y are relative to the HTML bounds
+ virtual void MouseMove( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+ // nDelta is pixels of scroll
+ virtual void MouseWheel( HHTMLBrowser unBrowserHandle, int32 nDelta ) = 0;
+
+ enum EMouseCursor
+ {
+ dc_user = 0,
+ dc_none,
+ dc_arrow,
+ dc_ibeam,
+ dc_hourglass,
+ dc_waitarrow,
+ dc_crosshair,
+ dc_up,
+ dc_sizenw,
+ dc_sizese,
+ dc_sizene,
+ dc_sizesw,
+ dc_sizew,
+ dc_sizee,
+ dc_sizen,
+ dc_sizes,
+ dc_sizewe,
+ dc_sizens,
+ dc_sizeall,
+ dc_no,
+ dc_hand,
+ dc_blank, // don't show any custom cursor, just use your default
+ dc_middle_pan,
+ dc_north_pan,
+ dc_north_east_pan,
+ dc_east_pan,
+ dc_south_east_pan,
+ dc_south_pan,
+ dc_south_west_pan,
+ dc_west_pan,
+ dc_north_west_pan,
+ dc_alias,
+ dc_cell,
+ dc_colresize,
+ dc_copycur,
+ dc_verticaltext,
+ dc_rowresize,
+ dc_zoomin,
+ dc_zoomout,
+ dc_help,
+ dc_custom,
+
+ dc_last, // custom cursors start from this value and up
+ };
+
+ enum EHTMLKeyModifiers
+ {
+ k_eHTMLKeyModifier_None = 0,
+ k_eHTMLKeyModifier_AltDown = 1 << 0,
+ k_eHTMLKeyModifier_CtrlDown = 1 << 1,
+ k_eHTMLKeyModifier_ShiftDown = 1 << 2,
+ };
+
+ // keyboard interactions, native keycode is the virtual key code value from your OS
+ virtual void KeyDown( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ virtual void KeyUp( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ // cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press)
+ virtual void KeyChar( HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+
+ // programmatically scroll this many pixels on the page
+ virtual void SetHorizontalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+ virtual void SetVerticalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+
+ // tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things
+ virtual void SetKeyFocus( HHTMLBrowser unBrowserHandle, bool bHasKeyFocus ) = 0;
+
+ // open the current pages html code in the local editor of choice, used for debugging
+ virtual void ViewSource( HHTMLBrowser unBrowserHandle ) = 0;
+ // copy the currently selected text on the html page to the local clipboard
+ virtual void CopyToClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+ // paste from the local clipboard to the current html page
+ virtual void PasteFromClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element
+ virtual void Find( HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse ) = 0;
+ // cancel a currently running find
+ virtual void StopFind( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // return details about the link at position x,y on the current page
+ virtual void GetLinkAtPosition( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+
+ // set a webcookie for the hostname in question
+ virtual void SetCookie( const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath = "/", RTime32 nExpires = 0, bool bSecure = false, bool bHTTPOnly = false ) = 0;
+
+ // Zoom the current page by flZoom ( from 0.0 to 2.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care)
+ virtual void SetPageScaleFactor( HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY ) = 0;
+
+ // CALLBACKS
+ //
+ // These set of functions are used as responses to callback requests
+ //
+
+ // You MUST call this in response to a HTML_StartRequest_t callback
+ // Set bAllowed to true to allow this navigation, false to cancel it and stay
+ // on the current page. You can use this feature to limit the valid pages
+ // allowed in your HTML surface.
+ virtual void AllowStartRequest( HHTMLBrowser unBrowserHandle, bool bAllowed ) = 0;
+
+ // You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback
+ // Set bResult to true for the OK option of a confirm, use false otherwise
+ virtual void JSDialogResponse( HHTMLBrowser unBrowserHandle, bool bResult ) = 0;
+
+ // You MUST call this in response to a HTML_FileOpenDialog_t callback
+ virtual void FileLoadDialogResponse( HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles ) = 0;
+};
+
+#define STEAMHTMLSURFACE_INTERFACE_VERSION "STEAMHTMLSURFACE_INTERFACE_VERSION_002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser is ready for use
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_BrowserReady_t, k_iSteamHTMLSurfaceCallbacks + 1 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this browser is now fully created and ready to navigate to pages
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser has a pending paint
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_NeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 2)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint
+CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called
+CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture
+CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture
+CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update
+CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update
+CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update
+CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update
+CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered
+CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages
+END_DEFINE_CALLBACK_12()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser wanted to navigate to a new page
+// NOTE - you MUST call AllowStartRequest in response to this callback
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_StartRequest_t, k_iSteamHTMLSurfaceCallbacks + 3)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface navigating
+CALLBACK_MEMBER(1, const char *, pchURL) // the url they wish to navigate to
+CALLBACK_MEMBER(2, const char *, pchTarget) // the html link target type (i.e _blank, _self, _parent, _top )
+CALLBACK_MEMBER(3, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER(4, bool, bIsRedirect) // true if this was a http/html redirect from the last load request
+END_DEFINE_CALLBACK_5()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser has been requested to close due to user interaction (usually from a javascript window.close() call)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_CloseBrowser_t, k_iSteamHTMLSurfaceCallbacks + 4)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser is navigating to a new url
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_URLChanged_t, k_iSteamHTMLSurfaceCallbacks + 5 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface navigating
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the url they wish to navigate to
+CALLBACK_MEMBER( 2, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER( 3, bool, bIsRedirect ) // true if this was a http/html redirect from the last load request
+CALLBACK_MEMBER( 4, const char *, pchPageTitle ) // the title of the page
+CALLBACK_MEMBER( 5, bool, bNewNavigation ) // true if this was from a fresh tab and not a click on an existing page
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A page is finished loading
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FinishedRequest_t, k_iSteamHTMLSurfaceCallbacks + 6 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+CALLBACK_MEMBER( 2, const char *, pchPageTitle ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a request to load this url in a new tab
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_OpenLinkInNewTab_t, k_iSteamHTMLSurfaceCallbacks + 7 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the page has a new title now
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ChangedTitle_t, k_iSteamHTMLSurfaceCallbacks + 8 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: results from a search
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SearchResults_t, k_iSteamHTMLSurfaceCallbacks + 9 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unResults ) //
+CALLBACK_MEMBER( 2, uint32, unCurrentMatch ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: page history status changed on the ability to go backwards and forward
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_CanGoBackAndForward_t, k_iSteamHTMLSurfaceCallbacks + 10 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, bool, bCanGoBack ) //
+CALLBACK_MEMBER( 2, bool, bCanGoForward ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the horizontal scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HorizontalScroll_t, k_iSteamHTMLSurfaceCallbacks + 11 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool , bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the vertical scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_VerticalScroll_t, k_iSteamHTMLSurfaceCallbacks + 12 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool, bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetLinkAtPosition call
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_LinkAtPosition_t, k_iSteamHTMLSurfaceCallbacks + 13 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, x ) // NOTE - Not currently set
+CALLBACK_MEMBER( 2, uint32, y ) // NOTE - Not currently set
+CALLBACK_MEMBER( 3, const char *, pchURL ) //
+CALLBACK_MEMBER( 4, bool, bInput ) //
+CALLBACK_MEMBER( 5, bool, bLiveLink ) //
+END_DEFINE_CALLBACK_6()
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript alert dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSAlert_t, k_iSteamHTMLSurfaceCallbacks + 14 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript confirmation dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSConfirm_t, k_iSteamHTMLSurfaceCallbacks + 15 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: when received show a file open dialog
+// then call FileLoadDialogResponse with the file(s) the user selected.
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FileOpenDialog_t, k_iSteamHTMLSurfaceCallbacks + 16 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+CALLBACK_MEMBER( 2, const char *, pchInitialFile ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a popup item (i.e combo box) on the page needs rendering
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ComboNeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 17 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called
+CALLBACK_MEMBER( 2, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 3, uint32, unTall ) // the total height of the pBGRA texture
+END_DEFINE_CALLBACK_4()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a popup (i.e combo box) wants to display
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ShowPopup_t, k_iSteamHTMLSurfaceCallbacks + 18 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a popup (i.e combo box) wants to hide
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HidePopup_t, k_iSteamHTMLSurfaceCallbacks + 19 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a popup (i.e combo box) wants to hide
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SizePopup_t, k_iSteamHTMLSurfaceCallbacks + 20 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unX ) // the x pos into the page to display the popup
+CALLBACK_MEMBER( 2, uint32, unY ) // the y pos into the page to display the popup
+CALLBACK_MEMBER( 3, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 4, uint32, unTall ) // the total height of the pBGRA texture
+END_DEFINE_CALLBACK_5()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new html window has been created
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_NewWindow_t, k_iSteamHTMLSurfaceCallbacks + 21 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the page to load
+CALLBACK_MEMBER( 2, uint32, unX ) // the x pos into the page to display the popup
+CALLBACK_MEMBER( 3, uint32, unY ) // the y pos into the page to display the popup
+CALLBACK_MEMBER( 4, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 5, uint32, unTall ) // the total height of the pBGRA texture
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: change the cursor to display
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SetCursor_t, k_iSteamHTMLSurfaceCallbacks + 22 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, eMouseCursor ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: informational message from the browser
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_StatusText_t, k_iSteamHTMLSurfaceCallbacks + 23 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ShowToolTip_t, k_iSteamHTMLSurfaceCallbacks + 24 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: update the text of an existing tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_UpdateToolTip_t, k_iSteamHTMLSurfaceCallbacks + 25 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: hide the tooltip you are showing
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HideToolTip_t, k_iSteamHTMLSurfaceCallbacks + 26 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMHTMLSURFACE_H
diff --git a/lsteamclient/steamworks_sdk_132/isteamhttp.h b/lsteamclient/steamworks_sdk_132/isteamhttp.h
new file mode 100644
index 00000000..9bbeaaed
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamhttp.h
@@ -0,0 +1,208 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+typedef uint32 HTTPCookieContainerHandle;
+#define INVALID_HTTPCOOKIE_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Only http requests (ie, not https) are
+ // currently supported, so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+
+ // Creates a cookie container handle which you must later free with ReleaseCookieContainer(). If bAllowResponsesToModify=true
+ // than any response to your requests using this cookie container may add new cookies which may be transmitted with
+ // future requests. If bAllowResponsesToModify=false than only cookies you explicitly set will be sent. This API is just for
+ // during process lifetime, after steam restarts no cookies are persisted and you have no way to access the cookie container across
+ // repeat executions of your process.
+ virtual HTTPCookieContainerHandle CreateCookieContainer( bool bAllowResponsesToModify ) = 0;
+
+ // Release a cookie container you are finished using, freeing it's memory
+ virtual bool ReleaseCookieContainer( HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Adds a cookie to the specified cookie container that will be used with future requests.
+ virtual bool SetCookie( HTTPCookieContainerHandle hCookieContainer, const char *pchHost, const char *pchUrl, const char *pchCookie ) = 0;
+
+ // Set the cookie container to use for a HTTP request
+ virtual bool SetHTTPRequestCookieContainer( HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Set the extra user agent info for a request, this doesn't clobber the normal user agent, it just adds the extra info on the end
+ virtual bool SetHTTPRequestUserAgentInfo( HTTPRequestHandle hRequest, const char *pchUserAgentInfo ) = 0;
+
+ // Set that https request should require verified SSL certificate via machines certificate trust store
+ virtual bool SetHTTPRequestRequiresVerifiedCertificate( HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate ) = 0;
+
+ // Set an absolute timeout on the HTTP request, this is just a total time timeout different than the network activity timeout
+ // which can bump everytime we get more data
+ virtual bool SetHTTPRequestAbsoluteTimeoutMS( HTTPRequestHandle hRequest, uint32 unMilliseconds ) = 0;
+
+ // Check if the reason the request failed was because we timed it out (rather than some harder failure)
+ virtual bool GetHTTPRequestWasTimedOut( HTTPRequestHandle hRequest, bool *pbWasTimedOut ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_132/isteaminventory.h b/lsteamclient/steamworks_sdk_132/isteaminventory.h
new file mode 100644
index 00000000..29f939b7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteaminventory.h
@@ -0,0 +1,354 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Inventory
+//
+//=============================================================================
+
+#ifndef ISTEAMINVENTORY_H
+#define ISTEAMINVENTORY_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// Every individual instance of an item has a globally-unique ItemInstanceID.
+// This ID is unique to the combination of (player, specific item instance)
+// and will not be transferred to another player or re-used for another item.
+typedef uint64 SteamItemInstanceID_t;
+
+static const SteamItemInstanceID_t k_SteamItemInstanceIDInvalid = ~(SteamItemInstanceID_t)0;
+
+// Types of items in your game are identified by a 32-bit "item definition number".
+// Valid definition numbers are between 1 and 999999999; numbers less than or equal to
+// zero are invalid, and numbers greater than or equal to one billion (1x10^9) are
+// reserved for internal Steam use.
+typedef int32 SteamItemDef_t;
+
+
+enum ESteamItemFlags
+{
+ // Item status flags - these flags are permenantly attached to specific item instances
+ k_ESteamItemNoTrade = 1 << 0, // This item is account-locked and cannot be traded or given away.
+
+ // Action confirmation flags - these flags are set one time only, as part of a result set
+ k_ESteamItemRemoved = 1 << 8, // The item has been destroyed, traded away, expired, or otherwise invalidated
+ k_ESteamItemConsumed = 1 << 9, // The item quantity has been decreased by 1 via ConsumeItem API.
+
+ // All other flag bits are currently reserved for internal Steam use at this time.
+ // Do not assume anything about the state of other flags which are not defined here.
+};
+
+struct SteamItemDetails_t
+{
+ SteamItemInstanceID_t m_itemId;
+ SteamItemDef_t m_iDefinition;
+ uint16 m_unQuantity;
+ uint16 m_unFlags; // see ESteamItemFlags
+};
+
+typedef int32 SteamInventoryResult_t;
+
+static const SteamInventoryResult_t k_SteamInventoryResultInvalid = -1;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Inventory query and manipulation API
+//-----------------------------------------------------------------------------
+class ISteamInventory
+{
+public:
+
+ // INVENTORY ASYNC RESULT MANAGEMENT
+ //
+ // Asynchronous inventory queries always output a result handle which can be used with
+ // GetResultStatus, GetResultItems, etc. A SteamInventoryResultReady_t callback will
+ // be triggered when the asynchronous result becomes ready (or fails).
+ //
+
+ // Find out the status of an asynchronous inventory result handle. Possible values:
+ // k_EResultPending - still in progress
+ // k_EResultOK - done, result ready
+ // k_EResultExpired - done, result ready, maybe out of date (see DeserializeResult)
+ // k_EResultInvalidParam - ERROR: invalid API call parameters
+ // k_EResultServiceUnavailable - ERROR: service temporarily down, you may retry later
+ // k_EResultLimitExceeded - ERROR: operation would exceed per-user inventory limits
+ // k_EResultFail - ERROR: unknown / generic error
+ METHOD_DESC(Find out the status of an asynchronous inventory result handle.)
+ virtual EResult GetResultStatus( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Copies the contents of a result set into a flat array. The specific
+ // contents of the result set depend on which query which was used.
+ METHOD_DESC(Copies the contents of a result set into a flat array. The specific contents of the result set depend on which query which was used.)
+ virtual bool GetResultItems( SteamInventoryResult_t resultHandle,
+ OUT_ARRAY_COUNT( punOutItemsArraySize,Output array) SteamItemDetails_t *pOutItemsArray,
+ uint32 *punOutItemsArraySize ) = 0;
+
+ // Returns the server time at which the result was generated. Compare against
+ // the value of IClientUtils::GetServerRealTime() to determine age.
+ METHOD_DESC(Returns the server time at which the result was generated. Compare against the value of IClientUtils::GetServerRealTime() to determine age.)
+ virtual uint32 GetResultTimestamp( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Returns true if the result belongs to the target steam ID, false if the
+ // result does not. This is important when using DeserializeResult, to verify
+ // that a remote player is not pretending to have a different user's inventory.
+ METHOD_DESC(Returns true if the result belongs to the target steam ID or false if the result does not. This is important when using DeserializeResult to verify that a remote player is not pretending to have a different users inventory.)
+ virtual bool CheckResultSteamID( SteamInventoryResult_t resultHandle, CSteamID steamIDExpected ) = 0;
+
+ // Destroys a result handle and frees all associated memory.
+ METHOD_DESC(Destroys a result handle and frees all associated memory.)
+ virtual void DestroyResult( SteamInventoryResult_t resultHandle ) = 0;
+
+
+ // INVENTORY ASYNC QUERY
+ //
+
+ // Captures the entire state of the current user's Steam inventory.
+ // You must call DestroyResult on this handle when you are done with it.
+ // Returns false and sets *pResultHandle to zero if inventory is unavailable.
+ // Note: calls to this function are subject to rate limits and may return
+ // cached results if called too frequently. It is suggested that you call
+ // this function only when you are about to display the user's full inventory,
+ // or if you expect that the inventory may have changed.
+ METHOD_DESC(Captures the entire state of the current users Steam inventory.)
+ virtual bool GetAllItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+
+ // Captures the state of a subset of the current user's Steam inventory,
+ // identified by an array of item instance IDs. The results from this call
+ // can be serialized and passed to other players to "prove" that the current
+ // user owns specific items, without exposing the user's entire inventory.
+ // For example, you could call GetItemsByID with the IDs of the user's
+ // currently equipped cosmetic items and serialize this to a buffer, and
+ // then transmit this buffer to other players upon joining a game.
+ METHOD_DESC(Captures the state of a subset of the current users Steam inventory identified by an array of item instance IDs.)
+ virtual bool GetItemsByID( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT( unCountInstanceIDs ) const SteamItemInstanceID_t *pInstanceIDs, uint32 unCountInstanceIDs ) = 0;
+
+
+ // RESULT SERIALIZATION AND AUTHENTICATION
+ //
+ // Serialized result sets contain a short signature which can't be forged
+ // or replayed across different game sessions. A result set can be serialized
+ // on the local client, transmitted to other players via your game networking,
+ // and deserialized by the remote players. This is a secure way of preventing
+ // hackers from lying about posessing rare/high-value items.
+
+ // Serializes a result set with signature bytes to an output buffer. Pass
+ // NULL as an output buffer to get the required size via punOutBufferSize.
+ // The size of a serialized result depends on the number items which are being
+ // serialized. When securely transmitting items to other players, it is
+ // recommended to use "GetItemsByID" first to create a minimal result set.
+ // Results have a built-in timestamp which will be considered "expired" after
+ // an hour has elapsed. See DeserializeResult for expiration handling.
+ virtual bool SerializeResult( SteamInventoryResult_t resultHandle, OUT_BUFFER_COUNT(punOutBufferSize) void *pOutBuffer, uint32 *punOutBufferSize ) = 0;
+
+ // Deserializes a result set and verifies the signature bytes. Returns false
+ // if bRequireFullOnlineVerify is set but Steam is running in Offline mode.
+ // Otherwise returns true and then delivers error codes via GetResultStatus.
+ //
+ // The bRESERVED_MUST_BE_FALSE flag is reserved for future use and should not
+ // be set to true by your game at this time.
+ //
+ // DeserializeResult has a potential soft-failure mode where the handle status
+ // is set to k_EResultExpired. GetResultItems() still succeeds in this mode.
+ // The "expired" result could indicate that the data may be out of date - not
+ // just due to timed expiration (one hour), but also because one of the items
+ // in the result set may have been traded or consumed since the result set was
+ // generated. You could compare the timestamp from GetResultTimestamp() to
+ // ISteamUtils::GetServerRealTime() to determine how old the data is. You could
+ // simply ignore the "expired" result code and continue as normal, or you
+ // could challenge the player with expired data to send an updated result set.
+ virtual bool DeserializeResult( SteamInventoryResult_t *pOutResultHandle, BUFFER_COUNT(punOutBufferSize) const void *pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE = false ) = 0;
+
+
+ // INVENTORY ASYNC MODIFICATION
+ //
+
+ // GenerateItems() creates one or more items and then generates a SteamInventoryCallback_t
+ // notification with a matching nCallbackContext parameter. This API is insecure, and could
+ // be abused by hacked clients. It is, however, very useful as a development cheat or as
+ // a means of prototyping item-related features for your game. The use of GenerateItems can
+ // be restricted to certain item definitions or fully blocked via the Steamworks website.
+ // If punArrayQuantity is not NULL, it should be the same length as pArrayItems and should
+ // describe the quantity of each item to generate.
+ virtual bool GenerateItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, ARRAY_COUNT(unArrayLength) const uint32 *punArrayQuantity, uint32 unArrayLength ) = 0;
+
+ // GrantPromoItems() checks the list of promotional items for which the user may be eligible
+ // and grants the items (one time only). On success, the result set will include items which
+ // were granted, if any. If no items were granted because the user isn't eligible for any
+ // promotions, this is still considered a success.
+ METHOD_DESC(GrantPromoItems() checks the list of promotional items for which the user may be eligible and grants the items (one time only).)
+ virtual bool GrantPromoItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+ // AddPromoItem() / AddPromoItems() are restricted versions of GrantPromoItems(). Instead of
+ // scanning for all eligible promotional items, the check is restricted to a single item
+ // definition or set of item definitions. This can be useful if your game has custom UI for
+ // showing a specific promo item to the user.
+ virtual bool AddPromoItem( SteamInventoryResult_t *pResultHandle, SteamItemDef_t itemDef ) = 0;
+ virtual bool AddPromoItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, uint32 unArrayLength ) = 0;
+
+ // ConsumeItem() removes items from the inventory, permenantly. They cannot be recovered.
+ // Not for the faint of heart - if your game implements item removal at all, a high-friction
+ // UI confirmation process is highly recommended. Similar to GenerateItems, punArrayQuantity
+ // can be NULL or else an array of the same length as pArrayItems which describe the quantity
+ // of each item to destroy. ConsumeItem can be restricted to certain item definitions or
+ // fully blocked via the Steamworks website to minimize support/abuse issues such as the
+ // clasic "my brother borrowed my laptop and deleted all of my rare items".
+ METHOD_DESC(ConsumeItem() removes items from the inventory permenantly.)
+ virtual bool ConsumeItem( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity ) = 0;
+
+ // ExchangeItems() is an atomic combination of GenerateItems and DestroyItems. It can be
+ // used to implement crafting recipes or transmutations, or items which unpack themselves
+ // into other items. Like GenerateItems, this is a flexible and dangerous API which is
+ // meant for rapid prototyping. You can configure restrictions on ExchangeItems via the
+ // Steamworks website, such as limiting it to a whitelist of input/output combinations
+ // corresponding to recipes.
+ // (Note: although GenerateItems may be hard or impossible to use securely in your game,
+ // ExchangeItems is perfectly reasonable to use once the whitelists are set accordingly.)
+ virtual bool ExchangeItems( SteamInventoryResult_t *pResultHandle,
+ ARRAY_COUNT(unArrayGenerateLength) const SteamItemDef_t *pArrayGenerate, ARRAY_COUNT(unArrayGenerateLength) const uint32 *punArrayGenerateQuantity, uint32 unArrayGenerateLength,
+ ARRAY_COUNT(unArrayDestroyLength) const SteamItemInstanceID_t *pArrayDestroy, ARRAY_COUNT(unArrayDestroyLength) const uint32 *punArrayDestroyQuantity, uint32 unArrayDestroyLength ) = 0;
+
+
+ // TransferItemQuantity() is intended for use with items which are "stackable" (can have
+ // quantity greater than one). It can be used to split a stack into two, or to transfer
+ // quantity from one stack into another stack of identical items. To split one stack into
+ // two, pass k_SteamItemInstanceIDInvalid for itemIdDest and a new item will be generated.
+ virtual bool TransferItemQuantity( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest ) = 0;
+
+
+ // TIMED DROPS AND PLAYTIME CREDIT
+ //
+
+ // Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when
+ // active gameplay begins, and at least once every two minutes afterwards. The backend
+ // performs its own time calculations, so the precise timing of the heartbeat is not
+ // critical as long as you send at least one heartbeat every two minutes. Calling the
+ // function more often than that is not harmful, it will simply have no effect. Note:
+ // players may be able to spoof this message by hacking their client, so you should not
+ // attempt to use this as a mechanism to restrict playtime credits. It is simply meant
+ // to distinguish between being in any kind of gameplay situation vs the main menu or
+ // a pre-game launcher window. (If you are stingy with handing out playtime credit, it
+ // will only encourage players to run bots or use mouse/kb event simulators.)
+ //
+ // Playtime credit accumulation can be capped on a daily or weekly basis through your
+ // Steamworks configuration.
+ //
+ METHOD_DESC(Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when active gameplay begins and at least once every two minutes afterwards.)
+ virtual void SendItemDropHeartbeat() = 0;
+
+ // Playtime credit must be consumed and turned into item drops by your game. Only item
+ // definitions which are marked as "playtime item generators" can be spawned. The call
+ // will return an empty result set if there is not enough playtime credit for a drop.
+ // Your game should call TriggerItemDrop at an appropriate time for the user to receive
+ // new items, such as between rounds or while the player is dead. Note that players who
+ // hack their clients could modify the value of "dropListDefinition", so do not use it
+ // to directly control rarity. It is primarily useful during testing and development,
+ // where you may wish to perform experiments with different types of drops.
+ METHOD_DESC(Playtime credit must be consumed and turned into item drops by your game.)
+ virtual bool TriggerItemDrop( SteamInventoryResult_t *pResultHandle, SteamItemDef_t dropListDefinition ) = 0;
+
+
+ // IN-GAME TRADING
+ //
+ // TradeItems() implements limited in-game trading of items, if you prefer not to use
+ // the overlay or an in-game web browser to perform Steam Trading through the website.
+ // You should implement a UI where both players can see and agree to a trade, and then
+ // each client should call TradeItems simultaneously (+/- 5 seconds) with matching
+ // (but reversed) parameters. The result is the same as if both players performed a
+ // Steam Trading transaction through the web. Each player will get an inventory result
+ // confirming the removal or quantity changes of the items given away, and the new
+ // item instance id numbers and quantities of the received items.
+ // (Note: new item instance IDs are generated whenever an item changes ownership.)
+ virtual bool TradeItems( SteamInventoryResult_t *pResultHandle, CSteamID steamIDTradePartner,
+ ARRAY_COUNT(nArrayGiveLength) const SteamItemInstanceID_t *pArrayGive, ARRAY_COUNT(nArrayGiveLength) const uint32 *pArrayGiveQuantity, uint32 nArrayGiveLength,
+ ARRAY_COUNT(nArrayGetLength) const SteamItemInstanceID_t *pArrayGet, ARRAY_COUNT(nArrayGetLength) const uint32 *pArrayGetQuantity, uint32 nArrayGetLength ) = 0;
+
+
+ // ITEM DEFINITIONS
+ //
+ // Item definitions are a mapping of "definition IDs" (integers between 1 and 1000000)
+ // to a set of string properties. Some of these properties are required to display items
+ // on the Steam community web site. Other properties can be defined by applications.
+ // Use of these functions is optional; there is no reason to call LoadItemDefinitions
+ // if your game hardcodes the numeric definition IDs (eg, purple face mask = 20, blue
+ // weapon mod = 55) and does not allow for adding new item types without a client patch.
+ //
+
+ // LoadItemDefinitions triggers the automatic load and refresh of item definitions.
+ // Every time new item definitions are available (eg, from the dynamic addition of new
+ // item types while players are still in-game), a SteamInventoryDefinitionUpdate_t
+ // callback will be fired.
+ METHOD_DESC(LoadItemDefinitions triggers the automatic load and refresh of item definitions.)
+ virtual bool LoadItemDefinitions() = 0;
+
+ // GetItemDefinitionIDs returns the set of all defined item definition IDs (which are
+ // defined via Steamworks configuration, and not necessarily contiguous integers).
+ // If pItemDefIDs is null, the call will return true and *punItemDefIDsArraySize will
+ // contain the total size necessary for a subsequent call. Otherwise, the call will
+ // return false if and only if there is not enough space in the output array.
+ virtual bool GetItemDefinitionIDs(
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+
+ // GetItemDefinitionProperty returns a string property from a given item definition.
+ // Note that some properties (for example, "name") may be localized and will depend
+ // on the current Steam language settings (see ISteamApps::GetCurrentGameLanguage).
+ // Property names are always composed of ASCII letters, numbers, and/or underscores.
+ // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available
+ // property names.
+ virtual bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPropertyName,
+ OUT_STRING_COUNT(punValueBufferSize) char *pchValueBuffer, uint32 *punValueBufferSize ) = 0;
+};
+
+#define STEAMINVENTORY_INTERFACE_VERSION "STEAMINVENTORY_INTERFACE_V001"
+
+
+// SteamInventoryResultReady_t callbacks are fired whenever asynchronous
+// results transition from "Pending" to "OK" or an error state. There will
+// always be exactly one callback per handle.
+struct SteamInventoryResultReady_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 0 };
+ SteamInventoryResult_t m_handle;
+ EResult m_result;
+};
+
+
+// SteamInventoryFullUpdate_t callbacks are triggered when GetAllItems
+// successfully returns a result which is newer / fresher than the last
+// known result. (It will not trigger if the inventory hasn't changed,
+// or if results from two overlapping calls are reversed in flight and
+// the earlier result is already known to be stale/out-of-date.)
+// The normal ResultReady callback will still be triggered immediately
+// afterwards; this is an additional notification for your convenience.
+struct SteamInventoryFullUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 1 };
+ SteamInventoryResult_t m_handle;
+};
+
+
+// A SteamInventoryDefinitionUpdate_t callback is triggered whenever
+// item definitions have been updated, which could be in response to
+// LoadItemDefinitions() or any other async request which required
+// a definition update in order to process results from the server.
+struct SteamInventoryDefinitionUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_132/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_132/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_132/isteammatchmaking.h b/lsteamclient/steamworks_sdk_132/isteammatchmaking.h
new file mode 100644
index 00000000..80606dfd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteammatchmaking.h
@@ -0,0 +1,747 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) = 0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, OUT_STRUCT() CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, OUT_STRUCT() CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_132/isteammusic.h b/lsteamclient/steamworks_sdk_132/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_132/isteammusicremote.h b/lsteamclient/steamworks_sdk_132/isteammusicremote.h
new file mode 100644
index 00000000..5893ef4b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteammusicremote.h
@@ -0,0 +1,129 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSICREMOTE_H
+#define ISTEAMMUSICREMOTE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteammusic.h"
+
+#define k_SteamMusicNameMaxLength 255
+#define k_SteamMusicPNGMaxLength 65535
+
+
+class ISteamMusicRemote
+{
+public:
+ // Service Definition
+ virtual bool RegisterSteamMusicRemote( const char *pchName ) = 0;
+ virtual bool DeregisterSteamMusicRemote() = 0;
+ virtual bool BIsCurrentMusicRemote() = 0;
+ virtual bool BActivationSuccess( bool bValue ) = 0;
+
+ virtual bool SetDisplayName( const char *pchDisplayName ) = 0;
+ virtual bool SetPNGIcon_64x64( void *pvBuffer, uint32 cbBufferLength ) = 0;
+
+ // Abilities for the user interface
+ virtual bool EnablePlayPrevious(bool bValue) = 0;
+ virtual bool EnablePlayNext( bool bValue ) = 0;
+ virtual bool EnableShuffled( bool bValue ) = 0;
+ virtual bool EnableLooped( bool bValue ) = 0;
+ virtual bool EnableQueue( bool bValue ) = 0;
+ virtual bool EnablePlaylists( bool bValue ) = 0;
+
+ // Status
+ virtual bool UpdatePlaybackStatus( AudioPlayback_Status nStatus ) = 0;
+ virtual bool UpdateShuffled( bool bValue ) = 0;
+ virtual bool UpdateLooped( bool bValue ) = 0;
+ virtual bool UpdateVolume( float flValue ) = 0; // volume is between 0.0 and 1.0
+
+ // Current Entry
+ virtual bool CurrentEntryWillChange() = 0;
+ virtual bool CurrentEntryIsAvailable( bool bAvailable ) = 0;
+ virtual bool UpdateCurrentEntryText( const char *pchText ) = 0;
+ virtual bool UpdateCurrentEntryElapsedSeconds( int nValue ) = 0;
+ virtual bool UpdateCurrentEntryCoverArt( void *pvBuffer, uint32 cbBufferLength ) = 0;
+ virtual bool CurrentEntryDidChange() = 0;
+
+ // Queue
+ virtual bool QueueWillChange() = 0;
+ virtual bool ResetQueueEntries() = 0;
+ virtual bool SetQueueEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentQueueEntry( int nID ) = 0;
+ virtual bool QueueDidChange() = 0;
+
+ // Playlist
+ virtual bool PlaylistWillChange() = 0;
+ virtual bool ResetPlaylistEntries() = 0;
+ virtual bool SetPlaylistEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentPlaylistEntry( int nID ) = 0;
+ virtual bool PlaylistDidChange() = 0;
+};
+
+#define STEAMMUSICREMOTE_INTERFACE_VERSION "STEAMMUSICREMOTE_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillActivate_t, k_iSteamMusicRemoteCallbacks + 1)
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillDeactivate_t, k_iSteamMusicRemoteCallbacks + 2 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteToFront_t, k_iSteamMusicRemoteCallbacks + 3 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWillQuit_t, k_iSteamMusicRemoteCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlay_t, k_iSteamMusicRemoteCallbacks + 5 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPause_t, k_iSteamMusicRemoteCallbacks + 6 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayPrevious_t, k_iSteamMusicRemoteCallbacks + 7 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayNext_t, k_iSteamMusicRemoteCallbacks + 8 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsShuffled_t, k_iSteamMusicRemoteCallbacks + 9 )
+ CALLBACK_MEMBER( 0, bool, m_bShuffled )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsLooped_t, k_iSteamMusicRemoteCallbacks + 10 )
+ CALLBACK_MEMBER(0, bool, m_bLooped )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsVolume_t, k_iSteamMusicCallbacks + 11 )
+ CALLBACK_MEMBER(0, float, m_flNewVolume)
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsQueueEntry_t, k_iSteamMusicCallbacks + 12 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsPlaylistEntry_t, k_iSteamMusicCallbacks + 13 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayingRepeatStatus_t, k_iSteamMusicRemoteCallbacks + 14 )
+ CALLBACK_MEMBER(0, int, m_nPlayingRepeatStatus )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+
+#endif // #define ISTEAMMUSICREMOTE_H
diff --git a/lsteamclient/steamworks_sdk_132/isteamnetworking.h b/lsteamclient/steamworks_sdk_132/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_132/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_132/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_132/isteamremotestorage.h b/lsteamclient/steamworks_sdk_132/isteamremotestorage.h
new file mode 100644
index 00000000..69938cd8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamremotestorage.h
@@ -0,0 +1,648 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+ k_EWorkshopFileTypeWebGuide = 9,
+ k_EWorkshopFileTypeIntegratedGuide = 10,
+ k_EWorkshopFileTypeMerch = 11,
+ k_EWorkshopFileTypeControllerBinding = 12,
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13,
+ k_EWorkshopFileTypeSteamVideo = 14,
+
+ // Update k_EWorkshopFileTypeMax if you add values.
+ k_EWorkshopFileTypeMax = 15
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, OUT_STRUCT() CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION012"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ UGCHandle_t m_hFile; // The new content
+};
+
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_132/isteamscreenshots.h b/lsteamclient/steamworks_sdk_132/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_132/isteamugc.h b/lsteamclient/steamworks_sdk_132/isteamugc.h
new file mode 100644
index 00000000..2d47b51d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamugc.h
@@ -0,0 +1,271 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+ k_EUGCQuery_RankedByTotalUniqueSubscriptions = 12,
+};
+
+enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0, // The item update handle was invalid, job might be finished, listen too SubmitItemUpdateResult_t
+ k_EItemUpdateStatusPreparingConfig = 1, // The item update is processing configuration data
+ k_EItemUpdateStatusPreparingContent = 2, // The item update is reading and processing content files
+ k_EItemUpdateStatusUploadingContent = 3, // The item update is uploading content changes to Steam
+ k_EItemUpdateStatusUploadingPreviewFile = 4, // The item update is uploading new preview file image
+ k_EItemUpdateStatusCommittingChanges = 5 // The item update is committing all changes
+};
+
+
+const uint32 kNumUGCResultsPerPage = 50;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+ uint32 m_unNumChildren; // if m_eFileType == k_EWorkshopFileTypeCollection, then this number will be the number of children contained within the collection
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Send the query to Steam
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+
+ // Request full details for one piece of UGC
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+ // Steam Workshop Creator API
+ virtual SteamAPICall_t CreateItem( AppId_t nConsumerAppId, EWorkshopFileType eFileType ) = 0; // create new item for this app with no content attached yet
+
+ virtual UGCUpdateHandle_t StartItemUpdate( AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID ) = 0; // start an UGC item update. Set changed properties before commiting update with CommitItemUpdate()
+
+ virtual bool SetItemTitle( UGCUpdateHandle_t handle, const char *pchTitle ) = 0; // change the title of an UGC item
+ virtual bool SetItemDescription( UGCUpdateHandle_t handle, const char *pchDescription ) = 0; // change the description of an UGC item
+ virtual bool SetItemVisibility( UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item
+ virtual bool SetItemTags( UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item
+ virtual bool SetItemContent( UGCUpdateHandle_t handle, const char *pszContentFolder ) = 0; // update item content from this local folder
+ virtual bool SetItemPreview( UGCUpdateHandle_t handle, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file, which must be under 1MB in size
+
+ virtual SteamAPICall_t SubmitItemUpdate( UGCUpdateHandle_t handle, const char *pchChangeNote ) = 0; // commit update process started with StartItemUpdate()
+ virtual EItemUpdateStatus GetItemUpdateProgress( UGCUpdateHandle_t handle, uint64 *punBytesProcessed, uint64* punBytesTotal ) = 0;
+
+ // Steam Workshop Consumer API
+ virtual SteamAPICall_t SubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // subscript to this item, will be installed ASAP
+ virtual SteamAPICall_t UnsubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // unsubscribe from this item, will be uninstalled after game quits
+ virtual uint32 GetNumSubscribedItems() = 0; // number of subscribed items
+ virtual uint32 GetSubscribedItems( PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; // all subscribed item PublishFileIDs
+
+ // Get info about the item on disk. If you are supporting items published through the legacy RemoteStorage APIs then *pbLegacyItem will be set to true
+ // and pchFolder will contain the full path to the file rather than the containing folder.
+ virtual bool GetItemInstallInfo( PublishedFileId_t nPublishedFileID, uint64 *punSizeOnDisk, char *pchFolder, uint32 cchFolderSize, bool *pbLegacyItem ) = 0; // returns true if item is installed
+ virtual bool GetItemUpdateInfo( PublishedFileId_t nPublishedFileID, bool *pbNeedsUpdate, bool *pbIsDownloading, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION003"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::CreateItem()
+//-----------------------------------------------------------------------------
+struct CreateItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 3 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId; // new item got this UGC PublishFileID
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::SubmitItemUpdate()
+//-----------------------------------------------------------------------------
+struct SubmitItemUpdateResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 4 };
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new Workshop item has been installed
+//-----------------------------------------------------------------------------
+struct ItemInstalled_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 5 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_132/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_132/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_132/isteamuser.h b/lsteamclient/steamworks_sdk_132/isteamuser.h
new file mode 100644
index 00000000..efdd6677
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamuser.h
@@ -0,0 +1,379 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+ // Requests a URL which authenticates an in-game browser for store check-out,
+ // and then redirects to the specified URL. As long as the in-game browser
+ // accepts and handles session cookies, Steam microtransaction checkout pages
+ // will automatically recognize the user instead of presenting a login page.
+ // The result of this API call will be a StoreAuthURLResponse_t callback.
+ // NOTE: The URL has a very short lifetime to prevent history-snooping attacks,
+ // so you should only call this API when you are about to launch the browser,
+ // or else immediately navigate to the result URL using a hidden browser window.
+ // NOTE 2: The resulting authorization cookie has an expiration time of one day,
+ // so it would be a good idea to request and visit a new auth URL every 12 hours.
+ virtual SteamAPICall_t RequestStoreAuthURL( const char *pchRedirectURL ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser018"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Signaled whenever licenses change
+//-----------------------------------------------------------------------------
+struct LicensesUpdated_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 25 };
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to ISteamUser::RequestStoreAuthURL
+//-----------------------------------------------------------------------------
+struct StoreAuthURLResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 65 };
+ char m_szURL[512];
+};
+
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_132/isteamuserstats.h b/lsteamclient/steamworks_sdk_132/isteamuserstats.h
new file mode 100644
index 00000000..8c0c210d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamuserstats.h
@@ -0,0 +1,465 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ METHOD_DESC(Downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers)
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard,
+ ARRAY_COUNT_D(cUsers, Array of users to retrieve) CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_132/isteamutils.h b/lsteamclient/steamworks_sdk_132/isteamutils.h
new file mode 100644
index 00000000..2e302b9e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamutils.h
@@ -0,0 +1,307 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils007"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_132/isteamvideo.h b/lsteamclient/steamworks_sdk_132/isteamvideo.h
new file mode 100644
index 00000000..fbaa96d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/isteamvideo.h
@@ -0,0 +1,51 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Video
+//
+//=============================================================================
+
+#ifndef ISTEAMVIDEO_H
+#define ISTEAMVIDEO_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Video api
+//-----------------------------------------------------------------------------
+class ISteamVideo
+{
+public:
+
+ // Get a URL suitable for streaming the given Video app ID's video
+ virtual void GetVideoURL( AppId_t unVideoAppID ) = 0;
+
+};
+
+#define STEAMVIDEO_INTERFACE_VERSION "STEAMVIDEO_INTERFACE_V001"
+
+DEFINE_CALLBACK( GetVideoURLResult_t, k_iClientVideoCallbacks + 11 )
+ CALLBACK_MEMBER( 0, EResult, m_eResult )
+ CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID )
+ CALLBACK_MEMBER( 2, char, m_rgchURL[256] )
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMVIDEO_H
diff --git a/lsteamclient/steamworks_sdk_132/matchmakingtypes.h b/lsteamclient/steamworks_sdk_132/matchmakingtypes.h
new file mode 100644
index 00000000..28c58500
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/matchmakingtypes.h
@@ -0,0 +1,249 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_132/steam_api.h b/lsteamclient/steamworks_sdk_132/steam_api.h
new file mode 100644
index 00000000..7c937109
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/steam_api.h
@@ -0,0 +1,604 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteammusicremote.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+#include "isteamhtmlsurface.h"
+#include "isteaminventory.h"
+#include "isteamvideo.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *S_CALLTYPE SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool S_CALLTYPE SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool S_CALLTYPE SteamAPI_Init();
+#endif
+
+S_API ISteamUser *S_CALLTYPE SteamUser();
+S_API ISteamFriends *S_CALLTYPE SteamFriends();
+S_API ISteamUtils *S_CALLTYPE SteamUtils();
+S_API ISteamMatchmaking *S_CALLTYPE SteamMatchmaking();
+S_API ISteamUserStats *S_CALLTYPE SteamUserStats();
+S_API ISteamApps *S_CALLTYPE SteamApps();
+S_API ISteamNetworking *S_CALLTYPE SteamNetworking();
+S_API ISteamMatchmakingServers *S_CALLTYPE SteamMatchmakingServers();
+S_API ISteamRemoteStorage *S_CALLTYPE SteamRemoteStorage();
+S_API ISteamScreenshots *S_CALLTYPE SteamScreenshots();
+S_API ISteamHTTP *S_CALLTYPE SteamHTTP();
+S_API ISteamUnifiedMessages *S_CALLTYPE SteamUnifiedMessages();
+S_API ISteamController *S_CALLTYPE SteamController();
+S_API ISteamUGC *S_CALLTYPE SteamUGC();
+S_API ISteamAppList *S_CALLTYPE SteamAppList();
+S_API ISteamMusic *S_CALLTYPE SteamMusic();
+S_API ISteamMusicRemote *S_CALLTYPE SteamMusicRemote();
+S_API ISteamHTMLSurface *S_CALLTYPE SteamHTMLSurface();
+S_API ISteamInventory *S_CALLTYPE SteamInventory();
+S_API ISteamVideo *S_CALLTYPE SteamVideo();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender *S_CALLTYPE SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() { return m_pController; }
+ ISteamUGC* SteamUGC() { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() { return m_pSteamMusic; }
+ ISteamMusicRemote* SteamMusicRemote() { return m_pSteamMusicRemote; }
+ ISteamHTMLSurface* SteamHTMLSurface() { return m_pSteamHTMLSurface; }
+ ISteamInventory* SteamInventory() { return m_pSteamInventory; }
+ ISteamVideo* SteamVideo() { return m_pSteamVideo; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+ ISteamMusicRemote *m_pSteamMusicRemote;
+ ISteamHTMLSurface *m_pSteamHTMLSurface;
+ ISteamInventory *m_pSteamInventory;
+ ISteamVideo *m_pSteamVideo;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamMusicRemote= NULL;
+ m_pSteamHTMLSurface = NULL;
+ m_pSteamInventory = NULL;
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = NULL;
+#endif
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = SteamClient()->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = SteamClient()->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = SteamClient()->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = SteamClient()->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ {
+ return false;
+ }
+
+ m_pSteamMusicRemote = SteamClient()->GetISteamMusicRemote( hSteamUser, hSteamPipe, STEAMMUSICREMOTE_INTERFACE_VERSION );
+ if ( !m_pSteamMusicRemote )
+ {
+ return false;
+ }
+
+ m_pSteamHTMLSurface = SteamClient()->GetISteamHTMLSurface( hSteamUser, hSteamPipe, STEAMHTMLSURFACE_INTERFACE_VERSION );
+ if ( !m_pSteamHTMLSurface )
+ {
+ return false;
+ }
+
+ m_pSteamInventory = SteamClient()->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ {
+ return false;
+ }
+
+ m_pSteamVideo = SteamClient()->GetISteamVideo( hSteamUser, hSteamPipe, STEAMVIDEO_INTERFACE_VERSION );
+ if ( !m_pSteamVideo )
+ {
+ return false;
+ }
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_132/steam_api_flat.h b/lsteamclient/steamworks_sdk_132/steam_api_flat.h
new file mode 100644
index 00000000..6fdafbda
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/steam_api_flat.h
@@ -0,0 +1,633 @@
+//====== Copyright (c) 1996-2014, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Header for flatted SteamAPI. Use this for binding to other languages.
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+#ifndef STEAMAPIFLAT_H
+#define STEAMAPIFLAT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <stdint.h>
+#include "steam/steamvr.h"
+
+
+S_API HSteamPipe SteamAPI_ISteamClient_CreateSteamPipe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamClient_BReleaseSteamPipe(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_ConnectToGlobalUser(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_CreateLocalUser(intptr_t instancePtr, HSteamPipe * phSteamPipe, EAccountType eAccountType);
+S_API void SteamAPI_ISteamClient_ReleaseUser(intptr_t instancePtr, HSteamPipe hSteamPipe, HSteamUser hUser);
+S_API class ISteamUser * SteamAPI_ISteamClient_GetISteamUser(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServer * SteamAPI_ISteamClient_GetISteamGameServer(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_SetLocalIPBinding(intptr_t instancePtr, uint32 unIP, uint16 usPort);
+S_API class ISteamFriends * SteamAPI_ISteamClient_GetISteamFriends(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUtils * SteamAPI_ISteamClient_GetISteamUtils(intptr_t instancePtr, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmaking * SteamAPI_ISteamClient_GetISteamMatchmaking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmakingServers * SteamAPI_ISteamClient_GetISteamMatchmakingServers(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void * SteamAPI_ISteamClient_GetISteamGenericInterface(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUserStats * SteamAPI_ISteamClient_GetISteamUserStats(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServerStats * SteamAPI_ISteamClient_GetISteamGameServerStats(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamApps * SteamAPI_ISteamClient_GetISteamApps(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamNetworking * SteamAPI_ISteamClient_GetISteamNetworking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamRemoteStorage * SteamAPI_ISteamClient_GetISteamRemoteStorage(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamScreenshots * SteamAPI_ISteamClient_GetISteamScreenshots(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_RunFrame(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamClient_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamClient_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(intptr_t instancePtr);
+S_API class ISteamHTTP * SteamAPI_ISteamClient_GetISteamHTTP(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUnifiedMessages * SteamAPI_ISteamClient_GetISteamUnifiedMessages(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamController * SteamAPI_ISteamClient_GetISteamController(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUGC * SteamAPI_ISteamClient_GetISteamUGC(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamAppList * SteamAPI_ISteamClient_GetISteamAppList(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusic * SteamAPI_ISteamClient_GetISteamMusic(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusicRemote * SteamAPI_ISteamClient_GetISteamMusicRemote(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamHTMLSurface * SteamAPI_ISteamClient_GetISteamHTMLSurface(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_Set_SteamAPI_CPostAPIResultInProcess(intptr_t instancePtr, SteamAPI_PostAPIResultInProcess_t func);
+S_API void SteamAPI_ISteamClient_Remove_SteamAPI_CPostAPIResultInProcess(intptr_t instancePtr, SteamAPI_PostAPIResultInProcess_t func);
+S_API void SteamAPI_ISteamClient_Set_SteamAPI_CCheckCallbackRegisteredInProcess(intptr_t instancePtr, SteamAPI_CheckCallbackRegistered_t func);
+S_API class ISteamInventory * SteamAPI_ISteamClient_GetISteamInventory(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamVideo * SteamAPI_ISteamClient_GetISteamVideo(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API HSteamUser SteamAPI_ISteamUser_GetHSteamUser(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BLoggedOn(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamUser_GetSteamID(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUser_InitiateGameConnection(intptr_t instancePtr, void * pAuthBlob, int cbMaxAuthBlob, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure);
+S_API void SteamAPI_ISteamUser_TerminateGameConnection(intptr_t instancePtr, uint32 unIPServer, uint16 usPortServer);
+S_API void SteamAPI_ISteamUser_TrackAppUsageEvent(intptr_t instancePtr, class CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo);
+S_API bool SteamAPI_ISteamUser_GetUserDataFolder(intptr_t instancePtr, char * pchBuffer, int cubBuffer);
+S_API void SteamAPI_ISteamUser_StartVoiceRecording(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_StopVoiceRecording(intptr_t instancePtr);
+S_API EVoiceResult SteamAPI_ISteamUser_GetAvailableVoice(intptr_t instancePtr, uint32 * pcbCompressed, uint32 * pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_GetVoice(intptr_t instancePtr, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_DecompressVoice(intptr_t instancePtr, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate);
+S_API uint32 SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(intptr_t instancePtr);
+S_API HAuthTicket SteamAPI_ISteamUser_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamUser_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamUser_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamUser_BIsBehindNAT(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_AdvertiseGame(intptr_t instancePtr, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestEncryptedAppTicket(intptr_t instancePtr, void * pDataToInclude, int cbDataToInclude);
+S_API bool SteamAPI_ISteamUser_GetEncryptedAppTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API int SteamAPI_ISteamUser_GetGameBadgeLevel(intptr_t instancePtr, int nSeries, bool bFoil);
+S_API int SteamAPI_ISteamUser_GetPlayerSteamLevel(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestStoreAuthURL(intptr_t instancePtr, const char * pchRedirectURL);
+S_API const char * SteamAPI_ISteamFriends_GetPersonaName(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_SetPersonaName(intptr_t instancePtr, const char * pchPersonaName);
+S_API EPersonaState SteamAPI_ISteamFriends_GetPersonaState(intptr_t instancePtr);
+S_API int SteamAPI_ISteamFriends_GetFriendCount(intptr_t instancePtr, int iFriendFlags);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendByIndex(intptr_t instancePtr, int iFriend, int iFriendFlags);
+S_API EFriendRelationship SteamAPI_ISteamFriends_GetFriendRelationship(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API EPersonaState SteamAPI_ISteamFriends_GetFriendPersonaState(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaName(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_GetFriendGamePlayed(intptr_t instancePtr, class CSteamID steamIDFriend, struct FriendGameInfo_t * pFriendGameInfo);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(intptr_t instancePtr, class CSteamID steamIDFriend, int iPersonaName);
+S_API int SteamAPI_ISteamFriends_GetFriendSteamLevel(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetPlayerNickname(intptr_t instancePtr, class CSteamID steamIDPlayer);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupCount(intptr_t instancePtr);
+S_API FriendsGroupID_t SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(intptr_t instancePtr, int iFG);
+S_API const char * SteamAPI_ISteamFriends_GetFriendsGroupName(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API void SteamAPI_ISteamFriends_GetFriendsGroupMembersList(intptr_t instancePtr, FriendsGroupID_t friendsGroupID, class CSteamID * pOutSteamIDMembers, int nMembersCount);
+S_API bool SteamAPI_ISteamFriends_HasFriend(intptr_t instancePtr, class CSteamID steamIDFriend, int iFriendFlags);
+S_API int SteamAPI_ISteamFriends_GetClanCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetClanByIndex(intptr_t instancePtr, int iClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanName(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanTag(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_GetClanActivityCounts(intptr_t instancePtr, class CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_DownloadClanActivityCounts(intptr_t instancePtr, class CSteamID * psteamIDClans, int cClansToRequest);
+S_API int SteamAPI_ISteamFriends_GetFriendCountFromSource(intptr_t instancePtr, class CSteamID steamIDSource);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(intptr_t instancePtr, class CSteamID steamIDSource, int iFriend);
+S_API bool SteamAPI_ISteamFriends_IsUserInSource(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDSource);
+S_API void SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(intptr_t instancePtr, class CSteamID steamIDUser, bool bSpeaking);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlay(intptr_t instancePtr, const char * pchDialog);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToUser(intptr_t instancePtr, const char * pchDialog, class CSteamID steamID);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(intptr_t instancePtr, const char * pchURL);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToStore(intptr_t instancePtr, AppId_t nAppID, EOverlayToStoreFlag eFlag);
+S_API void SteamAPI_ISteamFriends_SetPlayedWith(intptr_t instancePtr, class CSteamID steamIDUserPlayedWith);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API int SteamAPI_ISteamFriends_GetSmallFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetMediumFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetLargeFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_RequestUserInformation(intptr_t instancePtr, class CSteamID steamIDUser, bool bRequireNameOnly);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_RequestClanOfficerList(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOwner(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanOfficerCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOfficerByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iOfficer);
+S_API uint32 SteamAPI_ISteamFriends_GetUserRestrictions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamFriends_SetRichPresence(intptr_t instancePtr, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamFriends_ClearRichPresence(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchKey);
+S_API int SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(intptr_t instancePtr, class CSteamID steamIDFriend, int iKey);
+S_API void SteamAPI_ISteamFriends_RequestFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_InviteUserToGame(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchConnectString);
+S_API int SteamAPI_ISteamFriends_GetCoplayFriendCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetCoplayFriend(intptr_t instancePtr, int iCoplayFriend);
+S_API int SteamAPI_ISteamFriends_GetFriendCoplayTime(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API AppId_t SteamAPI_ISteamFriends_GetFriendCoplayGame(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_JoinClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_LeaveClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanChatMemberCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetChatMemberByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iUser);
+S_API bool SteamAPI_ISteamFriends_SendClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, const char * pchText);
+S_API int SteamAPI_ISteamFriends_GetClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, class CSteamID * psteamidChatter);
+S_API bool SteamAPI_ISteamFriends_IsClanChatAdmin(intptr_t instancePtr, class CSteamID steamIDClanChat, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_SetListenForFriendsMessages(intptr_t instancePtr, bool bInterceptEnabled);
+S_API bool SteamAPI_ISteamFriends_ReplyToFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchMsgToSend);
+S_API int SteamAPI_ISteamFriends_GetFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_GetFollowerCount(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_IsFollowing(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_EnumerateFollowingList(intptr_t instancePtr, uint32 unStartIndex);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceAppActive(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(intptr_t instancePtr);
+S_API EUniverse SteamAPI_ISteamUtils_GetConnectedUniverse(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetServerRealTime(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUtils_GetIPCountry(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetImageSize(intptr_t instancePtr, int iImage, uint32 * pnWidth, uint32 * pnHeight);
+S_API bool SteamAPI_ISteamUtils_GetImageRGBA(intptr_t instancePtr, int iImage, uint8 * pubDest, int nDestBufferSize);
+S_API bool SteamAPI_ISteamUtils_GetCSERIPPort(intptr_t instancePtr, uint32 * unIP, uint16 * usPort);
+S_API uint8 SteamAPI_ISteamUtils_GetCurrentBatteryPower(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetAppID(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationPosition(intptr_t instancePtr, ENotificationPosition eNotificationPosition);
+S_API bool SteamAPI_ISteamUtils_IsAPICallCompleted(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, bool * pbFailed);
+S_API ESteamAPICallFailure SteamAPI_ISteamUtils_GetAPICallFailureReason(intptr_t instancePtr, SteamAPICall_t hSteamAPICall);
+S_API bool SteamAPI_ISteamUtils_GetAPICallResult(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed);
+S_API void SteamAPI_ISteamUtils_RunFrame(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamUtils_IsOverlayEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_BOverlayNeedsPresent(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUtils_CheckFileSignature(intptr_t instancePtr, const char * szFileName);
+S_API bool SteamAPI_ISteamUtils_ShowGamepadTextInput(intptr_t instancePtr, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText);
+S_API uint32 SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(intptr_t instancePtr, char * pchText, uint32 cchText);
+S_API const char * SteamAPI_ISteamUtils_GetSteamUILanguage(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_IsSteamRunningInVR(intptr_t instancePtr);
+S_API int SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMatchmaking_GetFavoriteGame(intptr_t instancePtr, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer);
+S_API int SteamAPI_ISteamMatchmaking_AddFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer);
+S_API bool SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_RequestLobbyList(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(intptr_t instancePtr, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToBeCloseTo);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(intptr_t instancePtr, int nSlotsAvailable);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(intptr_t instancePtr, ELobbyDistanceFilter eLobbyDistanceFilter);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(intptr_t instancePtr, int cMaxResults);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyByIndex(intptr_t instancePtr, int iLobby);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_CreateLobby(intptr_t instancePtr, ELobbyType eLobbyType, int cMaxMembers);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_JoinLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_LeaveLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_InviteUserToLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDInvitee);
+S_API int SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iMember);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyDataCount(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize);
+S_API bool SteamAPI_ISteamMatchmaking_DeleteLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDUser, const char * pchKey);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(intptr_t instancePtr, class CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(intptr_t instancePtr, class CSteamID steamIDLobby, int iChatID, class CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API bool SteamAPI_ISteamMatchmaking_RequestLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, class CSteamID steamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, class CSteamID * psteamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby, int cMaxMembers);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyType(intptr_t instancePtr, class CSteamID steamIDLobby, ELobbyType eLobbyType);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyJoinable(intptr_t instancePtr, class CSteamID steamIDLobby, bool bLobbyJoinable);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDNewOwner);
+S_API bool SteamAPI_ISteamMatchmaking_SetLinkedLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDLobbyDependent);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(intptr_t instancePtr, HServerListRequest hRequest, EMatchMakingServerResponse response);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(intptr_t instancePtr, class gameserveritem_t & server);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(intptr_t instancePtr, const char * pchName, int nScore, float flTimePlayed);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(intptr_t instancePtr, const char * pchRule, const char * pchValue);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(intptr_t instancePtr);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestLANServerList(intptr_t instancePtr, AppId_t iApp, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_ReleaseRequest(intptr_t instancePtr, HServerListRequest hServerListRequest);
+S_API class gameserveritem_t * SteamAPI_ISteamMatchmakingServers_GetServerDetails(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API bool SteamAPI_ISteamMatchmakingServers_IsRefreshing(intptr_t instancePtr, HServerListRequest hRequest);
+S_API int SteamAPI_ISteamMatchmakingServers_GetServerCount(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshServer(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PingServer(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPingResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PlayerDetails(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPlayersResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_ServerRules(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingRulesResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelServerQuery(intptr_t instancePtr, HServerQuery hServerQuery);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWrite(intptr_t instancePtr, const char * pchFile, const void * pvData, int32 cubData);
+S_API int32 SteamAPI_ISteamRemoteStorage_FileRead(intptr_t instancePtr, const char * pchFile, void * pvData, int32 cubDataToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileForget(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileDelete(intptr_t instancePtr, const char * pchFile);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileShare(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(intptr_t instancePtr, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform);
+S_API UGCFileWriteStreamHandle_t SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileExists(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FilePersisted(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileSize(intptr_t instancePtr, const char * pchFile);
+S_API int64 SteamAPI_ISteamRemoteStorage_GetFileTimestamp(intptr_t instancePtr, const char * pchFile);
+S_API ERemoteStoragePlatform SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileCount(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(intptr_t instancePtr, int iFile, int32 * pnFileSizeInBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_GetQuota(intptr_t instancePtr, int32 * pnTotalBytes, int32 * puAvailableBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(intptr_t instancePtr);
+S_API void SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(intptr_t instancePtr, bool bEnabled);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownload(intptr_t instancePtr, UGCHandle_t hContent, uint32 unPriority);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(intptr_t instancePtr, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDetails(intptr_t instancePtr, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, class CSteamID * pSteamIDOwner);
+S_API int32 SteamAPI_ISteamRemoteStorage_UGCRead(intptr_t instancePtr, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(intptr_t instancePtr);
+S_API UGCHandle_t SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(intptr_t instancePtr, int32 iCachedContent);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(intptr_t instancePtr, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType);
+S_API PublishedFileUpdateHandle_t SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_DeletePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(intptr_t instancePtr, class CSteamID steamId, uint32 unStartIndex, struct SteamParamStringArray_t * pRequiredTags, struct SteamParamStringArray_t * pExcludedTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishVideo(intptr_t instancePtr, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(intptr_t instancePtr, EWorkshopFileAction eAction, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(intptr_t instancePtr, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, struct SteamParamStringArray_t * pTags, struct SteamParamStringArray_t * pUserTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(intptr_t instancePtr, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority);
+S_API bool SteamAPI_ISteamUserStats_RequestCurrentStats(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUserStats_GetStat(intptr_t instancePtr, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetStat0(intptr_t instancePtr, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_SetStat(intptr_t instancePtr, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamUserStats_SetStat0(intptr_t instancePtr, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamUserStats_UpdateAvgRateStat(intptr_t instancePtr, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamUserStats_GetAchievement(intptr_t instancePtr, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_SetAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_ClearAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(intptr_t instancePtr, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_StoreStats(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetAchievementIcon(intptr_t instancePtr, const char * pchName);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(intptr_t instancePtr, const char * pchName, const char * pchKey);
+S_API bool SteamAPI_ISteamUserStats_IndicateAchievementProgress(intptr_t instancePtr, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress);
+S_API uint32 SteamAPI_ISteamUserStats_GetNumAchievements(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementName(intptr_t instancePtr, uint32 iAchievement);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_ResetAllStats(intptr_t instancePtr, bool bAchievementsToo);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName);
+S_API const char * SteamAPI_ISteamUserStats_GetLeaderboardName(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API int SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardSortMethod SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardDisplayType SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, class CSteamID * prgUsers, int cUsers);
+S_API bool SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(intptr_t instancePtr, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, struct LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_UploadLeaderboardScore(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_AttachLeaderboardUGC(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(intptr_t instancePtr, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API int SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(intptr_t instancePtr, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(intptr_t instancePtr, const char * pchName, float * pflPercent);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalStats(intptr_t instancePtr, int nHistoryDays);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat(intptr_t instancePtr, const char * pchStatName, int64 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat0(intptr_t instancePtr, const char * pchStatName, double * pData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory(intptr_t instancePtr, const char * pchStatName, int64 * pData, uint32 cubData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory0(intptr_t instancePtr, const char * pchStatName, double * pData, uint32 cubData);
+S_API bool SteamAPI_ISteamApps_BIsSubscribed(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsLowViolence(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsCybercafe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsVACBanned(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetCurrentGameLanguage(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetAvailableGameLanguages(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedApp(intptr_t instancePtr, AppId_t appID);
+S_API bool SteamAPI_ISteamApps_BIsDlcInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint32 SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(intptr_t instancePtr);
+S_API int SteamAPI_ISteamApps_GetDLCCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BGetDLCDataByIndex(intptr_t instancePtr, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize);
+S_API void SteamAPI_ISteamApps_InstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_UninstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_GetCurrentBetaName(intptr_t instancePtr, char * pchName, int cchNameBufferSize);
+S_API bool SteamAPI_ISteamApps_MarkContentCorrupt(intptr_t instancePtr, bool bMissingFilesOnly);
+S_API uint32 SteamAPI_ISteamApps_GetInstalledDepots(intptr_t instancePtr, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots);
+S_API uint32 SteamAPI_ISteamApps_GetAppInstallDir(intptr_t instancePtr, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize);
+S_API bool SteamAPI_ISteamApps_BIsAppInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint64 SteamAPI_ISteamApps_GetAppOwner(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetLaunchQueryParam(intptr_t instancePtr, const char * pchKey);
+S_API bool SteamAPI_ISteamApps_GetDlcDownloadProgress(intptr_t instancePtr, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API int SteamAPI_ISteamApps_GetAppBuildId(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamNetworking_SendP2PPacket(intptr_t instancePtr, class CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_IsP2PPacketAvailable(intptr_t instancePtr, uint32 * pcubMsgSize, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_ReadP2PPacket(intptr_t instancePtr, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, class CSteamID * psteamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(intptr_t instancePtr, class CSteamID steamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_GetP2PSessionState(intptr_t instancePtr, class CSteamID steamIDRemote, struct P2PSessionState_t * pConnectionState);
+S_API bool SteamAPI_ISteamNetworking_AllowP2PPacketRelay(intptr_t instancePtr, bool bAllow);
+S_API SNetListenSocket_t SteamAPI_ISteamNetworking_CreateListenSocket(intptr_t instancePtr, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(intptr_t instancePtr, class CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateConnectionSocket(intptr_t instancePtr, uint32 nIP, uint16 nPort, int nTimeoutSec);
+S_API bool SteamAPI_ISteamNetworking_DestroySocket(intptr_t instancePtr, SNetSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_DestroyListenSocket(intptr_t instancePtr, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_SendDataOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_RetrieveDataFromSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailable(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_RetrieveData(intptr_t instancePtr, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_GetSocketInfo(intptr_t instancePtr, SNetSocket_t hSocket, class CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote);
+S_API bool SteamAPI_ISteamNetworking_GetListenSocketInfo(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort);
+S_API ESNetSocketConnectionType SteamAPI_ISteamNetworking_GetSocketConnectionType(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API int SteamAPI_ISteamNetworking_GetMaxPacketSize(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_WriteScreenshot(intptr_t instancePtr, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(intptr_t instancePtr, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight);
+S_API void SteamAPI_ISteamScreenshots_TriggerScreenshot(intptr_t instancePtr);
+S_API void SteamAPI_ISteamScreenshots_HookScreenshots(intptr_t instancePtr, bool bHook);
+S_API bool SteamAPI_ISteamScreenshots_SetLocation(intptr_t instancePtr, ScreenshotHandle hScreenshot, const char * pchLocation);
+S_API bool SteamAPI_ISteamScreenshots_TagUser(intptr_t instancePtr, ScreenshotHandle hScreenshot, class CSteamID steamID);
+S_API bool SteamAPI_ISteamScreenshots_TagPublishedFile(intptr_t instancePtr, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID);
+S_API bool SteamAPI_ISteamMusic_BIsEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusic_BIsPlaying(intptr_t instancePtr);
+S_API AudioPlayback_Status SteamAPI_ISteamMusic_GetPlaybackStatus(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Play(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Pause(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayPrevious(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayNext(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_SetVolume(intptr_t instancePtr, float flVolume);
+S_API float SteamAPI_ISteamMusic_GetVolume(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BActivationSuccess(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_SetDisplayName(intptr_t instancePtr, const char * pchDisplayName);
+S_API bool SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayPrevious(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayNext(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableQueue(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlaylists(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(intptr_t instancePtr, AudioPlayback_Status nStatus);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateVolume(intptr_t instancePtr, float flValue);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(intptr_t instancePtr, bool bAvailable);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(intptr_t instancePtr, const char * pchText);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(intptr_t instancePtr, int nValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_QueueWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetQueueEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetQueueEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_QueueDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetPlaylistEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistDidChange(intptr_t instancePtr);
+S_API HTTPRequestHandle SteamAPI_ISteamHTTP_CreateHTTPRequest(intptr_t instancePtr, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(intptr_t instancePtr, HTTPRequestHandle hRequest, uint64 ulContextValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_DeferHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 * unBodySize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 cOffset, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_ReleaseHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(intptr_t instancePtr, HTTPRequestHandle hRequest, float * pflPercentOut);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen);
+S_API HTTPCookieContainerHandle SteamAPI_ISteamHTTP_CreateCookieContainer(intptr_t instancePtr, bool bAllowResponsesToModify);
+S_API bool SteamAPI_ISteamHTTP_ReleaseCookieContainer(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetCookie(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer, const char * pchHost, const char * pchUrl, const char * pchCookie);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(intptr_t instancePtr, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchUserAgentInfo);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(intptr_t instancePtr, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unMilliseconds);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(intptr_t instancePtr, HTTPRequestHandle hRequest, bool * pbWasTimedOut);
+S_API ClientUnifiedMessageHandle SteamAPI_ISteamUnifiedMessages_SendMethod(intptr_t instancePtr, const char * pchServiceMethod, const void * pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, uint32 * punResponseSize, EResult * peResult);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseData(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, void * pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease);
+S_API bool SteamAPI_ISteamUnifiedMessages_ReleaseMethod(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle);
+S_API bool SteamAPI_ISteamUnifiedMessages_SendNotification(intptr_t instancePtr, const char * pchServiceNotification, const void * pNotificationBuffer, uint32 unNotificationBufferSize);
+S_API bool SteamAPI_ISteamController_Init(intptr_t instancePtr, const char * pchAbsolutePathToControllerConfigVDF);
+S_API bool SteamAPI_ISteamController_Shutdown(intptr_t instancePtr);
+S_API void SteamAPI_ISteamController_RunFrame(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamController_GetControllerState(intptr_t instancePtr, uint32 unControllerIndex, struct SteamControllerState_t * pState);
+S_API void SteamAPI_ISteamController_TriggerHapticPulse(intptr_t instancePtr, uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec);
+S_API void SteamAPI_ISteamController_SetOverrideMode(intptr_t instancePtr, const char * pchMode);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(intptr_t instancePtr, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(intptr_t instancePtr, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SendQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCResult(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, struct SteamUGCDetails_t * pDetails);
+S_API bool SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_AddRequiredTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_AddExcludedTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_SetReturnLongDescription(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnLongDescription);
+S_API bool SteamAPI_ISteamUGC_SetReturnTotalOnly(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnTotalOnly);
+S_API bool SteamAPI_ISteamUGC_SetAllowCachedResponse(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds);
+S_API bool SteamAPI_ISteamUGC_SetCloudFileNameFilter(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pMatchCloudFileName);
+S_API bool SteamAPI_ISteamUGC_SetMatchAnyTag(intptr_t instancePtr, UGCQueryHandle_t handle, bool bMatchAnyTag);
+S_API bool SteamAPI_ISteamUGC_SetSearchText(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pSearchText);
+S_API bool SteamAPI_ISteamUGC_SetRankedByTrendDays(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unDays);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RequestUGCDetails(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_CreateItem(intptr_t instancePtr, AppId_t nConsumerAppId, EWorkshopFileType eFileType);
+S_API UGCUpdateHandle_t SteamAPI_ISteamUGC_StartItemUpdate(intptr_t instancePtr, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_SetItemTitle(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchTitle);
+S_API bool SteamAPI_ISteamUGC_SetItemDescription(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchDescription);
+S_API bool SteamAPI_ISteamUGC_SetItemVisibility(intptr_t instancePtr, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamUGC_SetItemTags(intptr_t instancePtr, UGCUpdateHandle_t updateHandle, const struct SteamParamStringArray_t * pTags);
+S_API bool SteamAPI_ISteamUGC_SetItemContent(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszContentFolder);
+S_API bool SteamAPI_ISteamUGC_SetItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubmitItemUpdate(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchChangeNote);
+S_API EItemUpdateStatus SteamAPI_ISteamUGC_GetItemUpdateProgress(intptr_t instancePtr, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_UnsubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API uint32 SteamAPI_ISteamUGC_GetNumSubscribedItems(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUGC_GetSubscribedItems(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API bool SteamAPI_ISteamUGC_GetItemInstallInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, bool * pbLegacyItem);
+S_API bool SteamAPI_ISteamUGC_GetItemUpdateInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool * pbNeedsUpdate, bool * pbIsDownloading, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API uint32 SteamAPI_ISteamAppList_GetNumInstalledApps(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamAppList_GetInstalledApps(intptr_t instancePtr, AppId_t * pvecAppID, uint32 unMaxAppIDs);
+S_API int SteamAPI_ISteamAppList_GetAppName(intptr_t instancePtr, AppId_t nAppID, char * pchName, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppInstallDir(intptr_t instancePtr, AppId_t nAppID, char * pchDirectory, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppBuildId(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Shutdown(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamHTMLSurface_CreateBrowser(intptr_t instancePtr, const char * pchUserAgent, const char * pchUserCSS);
+S_API void SteamAPI_ISteamHTMLSurface_RemoveBrowser(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_LoadURL(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData);
+S_API void SteamAPI_ISteamHTMLSurface_SetSize(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight);
+S_API void SteamAPI_ISteamHTMLSurface_StopLoad(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Reload(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoBack(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoForward(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_AddHeader(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamHTMLSurface_ExecuteJavascript(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchScript);
+S_API void SteamAPI_ISteamHTMLSurface_MouseUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDoubleClick(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseMove(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_MouseWheel(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int32 nDelta);
+S_API void SteamAPI_ISteamHTMLSurface_KeyDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyChar(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetVerticalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetKeyFocus(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus);
+S_API void SteamAPI_ISteamHTMLSurface_ViewSource(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_CopyToClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_PasteFromClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Find(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse);
+S_API void SteamAPI_ISteamHTMLSurface_StopFind(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_SetCookie(intptr_t instancePtr, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly);
+S_API void SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY);
+S_API void SteamAPI_ISteamHTMLSurface_AllowStartRequest(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bAllowed);
+S_API void SteamAPI_ISteamHTMLSurface_JSDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bResult);
+S_API void SteamAPI_ISteamHTMLSurface_FileLoadDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char ** pchSelectedFiles);
+S_API EResult SteamAPI_ISteamInventory_GetResultStatus(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetResultItems(intptr_t instancePtr, SteamInventoryResult_t resultHandle, struct SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize);
+S_API uint32 SteamAPI_ISteamInventory_GetResultTimestamp(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_CheckResultSteamID(intptr_t instancePtr, SteamInventoryResult_t resultHandle, class CSteamID steamIDExpected);
+S_API void SteamAPI_ISteamInventory_DestroyResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetAllItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_GetItemsByID(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs);
+S_API bool SteamAPI_ISteamInventory_SerializeResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize);
+S_API bool SteamAPI_ISteamInventory_DeserializeResult(intptr_t instancePtr, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE);
+S_API bool SteamAPI_ISteamInventory_GenerateItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_GrantPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_AddPromoItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef);
+S_API bool SteamAPI_ISteamInventory_AddPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_ConsumeItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity);
+S_API bool SteamAPI_ISteamInventory_ExchangeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength);
+S_API bool SteamAPI_ISteamInventory_TransferItemQuantity(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest);
+S_API void SteamAPI_ISteamInventory_SendItemDropHeartbeat(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_TriggerItemDrop(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition);
+S_API bool SteamAPI_ISteamInventory_TradeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, class CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength);
+S_API bool SteamAPI_ISteamInventory_LoadItemDefinitions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionIDs(intptr_t instancePtr, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionProperty(intptr_t instancePtr, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSize);
+S_API void SteamAPI_ISteamVideo_GetVideoURL(intptr_t instancePtr, AppId_t unVideoAppID);
+S_API void SteamAPI_vr_IHmd_GetWindowBounds(intptr_t instancePtr, int32_t * pnX, int32_t * pnY, uint32_t * pnWidth, uint32_t * pnHeight);
+S_API void SteamAPI_vr_IHmd_GetRecommendedRenderTargetSize(intptr_t instancePtr, uint32_t * pnWidth, uint32_t * pnHeight);
+S_API void SteamAPI_vr_IHmd_GetEyeOutputViewport(intptr_t instancePtr, vr::Hmd_Eye eEye, uint32_t * pnX, uint32_t * pnY, uint32_t * pnWidth, uint32_t * pnHeight);
+S_API struct vr::HmdMatrix44_t SteamAPI_vr_IHmd_GetProjectionMatrix(intptr_t instancePtr, vr::Hmd_Eye eEye, float fNearZ, float fFarZ, vr::GraphicsAPIConvention eProjType);
+S_API void SteamAPI_vr_IHmd_GetProjectionRaw(intptr_t instancePtr, vr::Hmd_Eye eEye, float * pfLeft, float * pfRight, float * pfTop, float * pfBottom);
+S_API struct vr::DistortionCoordinates_t SteamAPI_vr_IHmd_ComputeDistortion(intptr_t instancePtr, vr::Hmd_Eye eEye, float fU, float fV);
+S_API struct vr::HmdMatrix34_t SteamAPI_vr_IHmd_GetHeadFromEyePose(intptr_t instancePtr, vr::Hmd_Eye eEye);
+S_API bool SteamAPI_vr_IHmd_GetViewMatrix(intptr_t instancePtr, float fSecondsFromNow, struct vr::HmdMatrix44_t * pMatLeftView, struct vr::HmdMatrix44_t * pMatRightView, vr::HmdTrackingResult * peResult);
+S_API int32_t SteamAPI_vr_IHmd_GetD3D9AdapterIndex(intptr_t instancePtr);
+S_API void SteamAPI_vr_IHmd_GetDXGIOutputInfo(intptr_t instancePtr, int32_t * pnAdapterIndex, int32_t * pnAdapterOutputIndex);
+S_API void SteamAPI_vr_IHmd_AttachToWindow(intptr_t instancePtr, void * hWnd);
+S_API bool SteamAPI_vr_IHmd_GetTrackerFromHeadPose(intptr_t instancePtr, float fPredictedSecondsFromNow, struct vr::HmdMatrix34_t * pmPose, vr::HmdTrackingResult * peResult);
+S_API bool SteamAPI_vr_IHmd_GetLastTrackerFromHeadPose(intptr_t instancePtr, struct vr::HmdMatrix34_t * pmPose);
+S_API bool SteamAPI_vr_IHmd_WillDriftInYaw(intptr_t instancePtr);
+S_API void SteamAPI_vr_IHmd_ZeroTracker(intptr_t instancePtr);
+S_API struct vr::HmdMatrix34_t SteamAPI_vr_IHmd_GetTrackerZeroPose(intptr_t instancePtr);
+S_API uint32_t SteamAPI_vr_IHmd_GetDriverId(intptr_t instancePtr, char * pchBuffer, uint32_t unBufferLen);
+S_API uint32_t SteamAPI_vr_IHmd_GetDisplayId(intptr_t instancePtr, char * pchBuffer, uint32_t unBufferLen);
+S_API bool SteamAPI_ISteamGameServer_InitGameServer(intptr_t instancePtr, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString);
+S_API void SteamAPI_ISteamGameServer_SetProduct(intptr_t instancePtr, const char * pszProduct);
+S_API void SteamAPI_ISteamGameServer_SetGameDescription(intptr_t instancePtr, const char * pszGameDescription);
+S_API void SteamAPI_ISteamGameServer_SetModDir(intptr_t instancePtr, const char * pszModDir);
+S_API void SteamAPI_ISteamGameServer_SetDedicatedServer(intptr_t instancePtr, bool bDedicated);
+S_API void SteamAPI_ISteamGameServer_LogOn(intptr_t instancePtr, const char * pszToken);
+S_API void SteamAPI_ISteamGameServer_LogOnAnonymous(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_LogOff(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BLoggedOn(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BSecure(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamGameServer_GetSteamID(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_WasRestartRequested(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetMaxPlayerCount(intptr_t instancePtr, int cPlayersMax);
+S_API void SteamAPI_ISteamGameServer_SetBotPlayerCount(intptr_t instancePtr, int cBotplayers);
+S_API void SteamAPI_ISteamGameServer_SetServerName(intptr_t instancePtr, const char * pszServerName);
+S_API void SteamAPI_ISteamGameServer_SetMapName(intptr_t instancePtr, const char * pszMapName);
+S_API void SteamAPI_ISteamGameServer_SetPasswordProtected(intptr_t instancePtr, bool bPasswordProtected);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorPort(intptr_t instancePtr, uint16 unSpectatorPort);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorServerName(intptr_t instancePtr, const char * pszSpectatorServerName);
+S_API void SteamAPI_ISteamGameServer_ClearAllKeyValues(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetKeyValue(intptr_t instancePtr, const char * pKey, const char * pValue);
+S_API void SteamAPI_ISteamGameServer_SetGameTags(intptr_t instancePtr, const char * pchGameTags);
+S_API void SteamAPI_ISteamGameServer_SetGameData(intptr_t instancePtr, const char * pchGameData);
+S_API void SteamAPI_ISteamGameServer_SetRegion(intptr_t instancePtr, const char * pszRegion);
+S_API bool SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(intptr_t instancePtr, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, class CSteamID * pSteamIDUser);
+S_API uint64 SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SendUserDisconnect(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServer_BUpdateUserData(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore);
+S_API HAuthTicket SteamAPI_ISteamGameServer_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamGameServer_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamGameServer_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamGameServer_RequestUserGroupStatus(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDGroup);
+S_API void SteamAPI_ISteamGameServer_GetGameplayStats(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_GetServerReputation(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamGameServer_GetPublicIP(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_HandleIncomingPacket(intptr_t instancePtr, const void * pData, int cbData, uint32 srcIP, uint16 srcPort);
+S_API int SteamAPI_ISteamGameServer_GetNextOutgoingPacket(intptr_t instancePtr, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort);
+S_API void SteamAPI_ISteamGameServer_EnableHeartbeats(intptr_t instancePtr, bool bActive);
+S_API void SteamAPI_ISteamGameServer_SetHeartbeatInterval(intptr_t instancePtr, int iHeartbeatInterval);
+S_API void SteamAPI_ISteamGameServer_ForceHeartbeat(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_AssociateWithClan(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(intptr_t instancePtr, class CSteamID steamIDNewPlayer);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API bool SteamAPI_ISteamGameServerStats_ClearUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_StoreUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+#endif // STEAMAPIFLAT_H
+
+
diff --git a/lsteamclient/steamworks_sdk_132/steam_gameserver.h b/lsteamclient/steamworks_sdk_132/steam_gameserver.h
new file mode 100644
index 00000000..ff068540
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/steam_gameserver.h
@@ -0,0 +1,171 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+S_API ISteamInventory *SteamGameServerInventory();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+ ISteamInventory *SteamInventory() { return m_pSteamInventory; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamInventory *m_pSteamInventory;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamInventory = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamInventory = g_pSteamClientGameServer->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_132/steamclientpublic.h b/lsteamclient/steamworks_sdk_132/steamclientpublic.h
new file mode 100644
index 00000000..a9166fc3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/steamclientpublic.h
@@ -0,0 +1,1106 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to login
+ k_EResultItemDeleted = 86, // The thing we're trying to access has been deleted
+ k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to throttle response to possible attacker
+ k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch
+ k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for two-factor didn't match
+ k_EResultAccountAssociatedToMultiplePartners = 90, // account has been associated with multiple partners
+ k_EResultNotModified = 91, // data not modified
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+ k_EVoiceResultReceiverOutOfDate = 8,
+ k_EVoiceResultReceiverDidNotAnswer = 9,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+enum EDenyReason
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+};
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+enum EBeginAuthSessionResult
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+};
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+enum EAuthSessionResponse
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+ k_EAuthSessionResponsePublisherIssuedBan = 9, // The user is banned for this game. The ban came via the web api and not VAC
+};
+
+// results from UserHasLicenseForApp
+enum EUserHasLicenseForAppResult
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+};
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x0000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x0001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x0002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x0004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x0008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x0010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x0020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x0040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_RetailLicense = 0x0080, // has a retail license for game, (CD-Key etc)
+ k_EAppOwnershipFlags_LicenseLocked = 0x0100, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x0200, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x0400, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x0800, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x1000, // Recurring license, user is charged periodically
+ k_EAppOwnershipFlags_LicenseCanceled = 0x2000, // Mark as canceled, but might be still active if recurring
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media_DEPRECATED = 0x010, // legacy - was used for game trailers, which are now just videos on the web
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+ k_EAppType_Film = 0x200, // A Movie (feature film)
+ k_EAppType_TVSeries = 0x400, // A TV or other video series which will have episodes and perhaps seasons
+ k_EAppType_Video = 0x800, // A video component of either a Film or TVSeries (may be the feature, an episode, preview, making-of, etc)
+ k_EAppType_Plugin = 0x1000, // Plug-in types for other Apps
+ k_EAppType_Music = 0x2000, // Music files
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+ k_EChatEntryTypeReserved1 = 12,
+ k_EChatEntryTypeReserved2 = 13,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM2_USERID_STRUCTS )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ V_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, V_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, V_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, V_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, V_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_132/steamcontrollerpublic.h b/lsteamclient/steamworks_sdk_132/steamcontrollerpublic.h
new file mode 100644
index 00000000..94867aea
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/steamcontrollerpublic.h
@@ -0,0 +1,79 @@
+//========= Copyright © 1996-2013, Valve LLC, All rights reserved. ============
+//
+// Purpose: Controller related public types/constants
+//
+//=============================================================================
+
+#ifndef STEAMCONTROLLERPUBLIC_H
+#define STEAMCONTROLLERPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#if defined( STEAM ) || defined( ISTEAMCONTROLLER_H )
+// This file should only be included by the Steam build or directly from
+// isteamcontroller.h.
+#include "steamtypes.h"
+#else
+#include <stdint.h>
+typedef uint32_t uint32;
+#ifdef __C51__
+typedef uint8_t uint64[8];
+#else
+typedef uint64_t uint64;
+#endif
+#endif
+
+#pragma pack(1)
+
+// Safe to add new bitfields at the end of this list for new buttons/actions,
+// but never re-use or re-number an existing flag as old client code will be
+// confused.
+#define STEAM_RIGHT_TRIGGER_MASK 0x0000000000000001l
+#define STEAM_LEFT_TRIGGER_MASK 0x0000000000000002l
+#define STEAM_RIGHT_BUMPER_MASK 0x0000000000000004l
+#define STEAM_LEFT_BUMPER_MASK 0x0000000000000008l
+#define STEAM_BUTTON_0_MASK 0x0000000000000010l
+#define STEAM_BUTTON_1_MASK 0x0000000000000020l
+#define STEAM_BUTTON_2_MASK 0x0000000000000040l
+#define STEAM_BUTTON_3_MASK 0x0000000000000080l
+#define STEAM_TOUCH_0_MASK 0x0000000000000100l
+#define STEAM_TOUCH_1_MASK 0x0000000000000200l
+#define STEAM_TOUCH_2_MASK 0x0000000000000400l
+#define STEAM_TOUCH_3_MASK 0x0000000000000800l
+#define STEAM_BUTTON_MENU_MASK 0x0000000000001000l
+#define STEAM_BUTTON_STEAM_MASK 0x0000000000002000l
+#define STEAM_BUTTON_ESCAPE_MASK 0x0000000000004000l
+#define STEAM_BUTTON_BACK_LEFT_MASK 0x0000000000008000l
+#define STEAM_BUTTON_BACK_RIGHT_MASK 0x0000000000010000l
+#define STEAM_BUTTON_LEFTPAD_CLICKED_MASK 0x0000000000020000l
+#define STEAM_BUTTON_RIGHTPAD_CLICKED_MASK 0x0000000000040000l
+#define STEAM_LEFTPAD_FINGERDOWN_MASK 0x0000000000080000l
+#define STEAM_RIGHTPAD_FINGERDOWN_MASK 0x0000000000100000l
+
+// Only add fields to the end of this struct, or if you need to change it in a larger
+// way add a new message id and new struct completely so as to not break old clients.
+struct SteamControllerState_t
+{
+ // If packet num matches that on your prior call, then the controller state hasn't been changed since
+ // your last call and there is no need to process it
+ uint32 unPacketNum;
+
+ // bit flags for each of the buttons
+ uint64 ulButtons;
+
+ // Left pad coordinates
+ short sLeftPadX;
+ short sLeftPadY;
+
+ // Right pad coordinates
+ short sRightPadX;
+ short sRightPadY;
+
+};
+
+#pragma pack()
+
+#endif // STEAMCONTROLLERPUBLIC_H
+
diff --git a/lsteamclient/steamworks_sdk_132/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_132/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_132/steamhttpenums.h b/lsteamclient/steamworks_sdk_132/steamhttpenums.h
new file mode 100644
index 00000000..2ec0982b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/steamhttpenums.h
@@ -0,0 +1,97 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401, // You probably want 403 or something else. 401 implies you're sending a WWW-Authenticate header and the client can sent an Authorization header in response.
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+ k_EHTTPStatusCode4xxUnknown = 418, // 418 is reserved, so we'll use it to mean unknown
+ k_EHTTPStatusCode429TooManyRequests = 429,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+ k_EHTTPStatusCode5xxUnknown = 599,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_132/steamps3params.h b/lsteamclient/steamworks_sdk_132/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_132/steamtypes.h b/lsteamclient/steamworks_sdk_132/steamtypes.h
new file mode 100644
index 00000000..9ace27cb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/steamtypes.h
@@ -0,0 +1,178 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+#ifdef __clang__
+# define CLANG_ATTR(ATTR) __attribute__((annotate( ATTR )))
+#else
+# define CLANG_ATTR(ATTR)
+#endif
+
+#define METHOD_DESC(DESC) CLANG_ATTR( "desc:" #DESC ";" )
+#define IGNOREATTR() CLANG_ATTR( "ignore" )
+#define OUT_STRUCT() CLANG_ATTR( "out_struct: ;" )
+#define OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" )
+#define OUT_ARRAY_COUNT(COUNTER, DESC) CLANG_ATTR( "out_array_count:" #COUNTER ";desc:" #DESC )
+#define ARRAY_COUNT(COUNTER) CLANG_ATTR( "array_count:" #COUNTER ";" )
+#define ARRAY_COUNT_D(COUNTER, DESC) CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC )
+#define BUFFER_COUNT(COUNTER) CLANG_ATTR( "buffer_count:" #COUNTER ";" )
+#define OUT_BUFFER_COUNT(COUNTER) CLANG_ATTR( "out_buffer_count:" #COUNTER ";" )
+#define OUT_STRING_COUNT(COUNTER) CLANG_ATTR( "out_string_count:" #COUNTER ";" )
+#define DESC(DESC) CLANG_ATTR("desc:" #DESC ";")
+
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef GID_t JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+typedef uint32 BundleId_t;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+// ID for a depot content manifest
+typedef uint64 ManifestId_t;
+const ManifestId_t k_uManifestIdInvalid = 0;
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_132/steamuniverse.h b/lsteamclient/steamworks_sdk_132/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_132/steamvr.h b/lsteamclient/steamworks_sdk_132/steamvr.h
new file mode 100644
index 00000000..aacd66e7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/steamvr.h
@@ -0,0 +1,263 @@
+#pragma once
+
+#include <stdint.h>
+
+namespace vr
+{
+
+#if defined(__linux__) || defined(__APPLE__)
+ // The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+ // 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+ // The 64-bit version of gcc has the alignment requirement for these types set to
+ // 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+ // The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#pragma pack( push, 4 )
+#else
+#pragma pack( push, 8 )
+#endif
+
+
+// right-handed system
+// +y is up
+// +x is to the right
+// -z is going away from you
+// Distance unit is meters
+struct HmdMatrix34_t
+{
+ float m[3][4];
+};
+
+struct HmdMatrix44_t
+{
+ float m[4][4];
+};
+
+
+/** Used to return the post-distortion UVs for each color channel.
+* UVs range from 0 to 1 with 0,0 in the upper left corner of the
+* source render target. The 0,0 to 1,1 range covers a single eye. */
+struct DistortionCoordinates_t
+{
+ float rfRed[2];
+ float rfGreen[2];
+ float rfBlue[2];
+};
+
+
+enum Hmd_Eye
+{
+ Eye_Left = 0,
+ Eye_Right = 1
+};
+
+enum GraphicsAPIConvention
+{
+ API_DirectX = 0, // Normalized Z goes from 0 at the viewer to 1 at the far clip plane
+ API_OpenGL = 1, // Normalized Z goes from 1 at the viewer to -1 at the far clip plane
+};
+
+enum HmdTrackingResult
+{
+ TrackingResult_Uninitialized = 1,
+
+ TrackingResult_Calibrating_InProgress = 100,
+ TrackingResult_Calibrating_OutOfRange = 101,
+
+ TrackingResult_Running_OK = 200,
+ TrackingResult_Running_OutOfRange = 201,
+};
+
+class IHmd
+{
+public:
+
+
+ // ------------------------------------
+ // Display Methods
+ // ------------------------------------
+
+ /** Size and position that the window needs to be on the VR display. */
+ virtual void GetWindowBounds( int32_t *pnX, int32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** Suggested size for the intermediate render target that the distortion pulls from. */
+ virtual void GetRecommendedRenderTargetSize( uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** Gets the viewport in the frame buffer to draw the output of the distortion into */
+ virtual void GetEyeOutputViewport( Hmd_Eye eEye, uint32_t *pnX, uint32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** The projection matrix for the specified eye */
+ virtual HmdMatrix44_t GetProjectionMatrix( Hmd_Eye eEye, float fNearZ, float fFarZ, GraphicsAPIConvention eProjType ) = 0;
+
+ /** The components necessary to build your own projection matrix in case your
+ * application is doing something fancy like infinite Z */
+ virtual void GetProjectionRaw( Hmd_Eye eEye, float *pfLeft, float *pfRight, float *pfTop, float *pfBottom ) = 0;
+
+ /** Returns the result of the distortion function for the specified eye and input UVs. UVs go from 0,0 in
+ * the upper left of that eye's viewport and 1,1 in the lower right of that eye's viewport. */
+ virtual DistortionCoordinates_t ComputeDistortion( Hmd_Eye eEye, float fU, float fV ) = 0;
+
+ /** Returns the transform from eye space to the head space. Eye space is the per-eye flavor of head
+ * space that provides stereo disparity. Instead of Model * View * Projection the sequence is Model * View * Eye^-1 * Projection.
+ * Normally View and Eye^-1 will be multiplied together and treated as View in your application.
+ */
+ virtual HmdMatrix34_t GetHeadFromEyePose( Hmd_Eye eEye ) = 0;
+
+ /** For use in simple VR apps, this method returns the concatenation of the
+ * tracking pose and the eye matrix to get a full view matrix for each eye.
+ * This is ( GetEyeMatrix() ) * (GetWorldFromHeadPose() ^ -1 ) */
+ virtual bool GetViewMatrix( float fSecondsFromNow, HmdMatrix44_t *pMatLeftView, HmdMatrix44_t *pMatRightView, HmdTrackingResult *peResult ) = 0;
+
+ /** [D3D9 Only]
+ * Returns the adapter index that the user should pass into CreateDevice to set up D3D9 in such
+ * a way that it can go full screen exclusive on the HMD. Returns -1 if there was an error.
+ */
+ virtual int32_t GetD3D9AdapterIndex() = 0;
+
+ /** [D3D10/11 Only]
+ * Returns the adapter index and output index that the user should pass into EnumAdapters adn EnumOutputs
+ * to create the device and swap chain in DX10 and DX11. If an error occurs both indices will be set to -1.
+ */
+ virtual void GetDXGIOutputInfo( int32_t *pnAdapterIndex, int32_t *pnAdapterOutputIndex ) = 0;
+
+ /** [Windows Only]
+ * Notifies the system that the VR output will appear in a particular window.
+ */
+ virtual void AttachToWindow( void *hWnd ) = 0;
+
+ // ------------------------------------
+ // Tracking Methods
+ // ------------------------------------
+
+ /** The pose that the tracker thinks that the HMD will be in at the specified
+ * number of seconds into the future. Pass 0 to get the current state.
+ *
+ * This is roughly analogous to the inverse of the view matrix in most applications, though
+ * many games will need to do some additional rotation or translation on top of the rotation
+ * and translation provided by the head pose.
+ *
+ * If this function returns true the pose has been populated with a pose that can be used by the application.
+ * Check peResult for details about the pose, including messages that should be displayed to the user.
+ */
+ virtual bool GetTrackerFromHeadPose( float fPredictedSecondsFromNow, HmdMatrix34_t *pmPose, HmdTrackingResult *peResult ) = 0;
+
+ /** Passes back the pose matrix from the last successful call to GetWorldFromHeadPose(). Returns true if that matrix is
+ * valid (because there has been a previous successful pose.) */
+ virtual bool GetLastTrackerFromHeadPose( HmdMatrix34_t *pmPose ) = 0;
+
+ /** Returns true if the tracker for this HMD will drift the Yaw component of its pose over time regardless of
+ * actual head motion. This is true for gyro-based trackers with no ground truth. */
+ virtual bool WillDriftInYaw() = 0;
+
+ /** Sets the zero pose for the tracker coordinate system. After this call all WorldFromHead poses will be relative
+ * to the pose whenever this was called. The new zero coordinate system will not change the fact that the Y axis is
+ * up in the real world, so the next pose returned from GetWorldFromHeadPose after a call to ZeroTracker may not be
+ * exactly an identity matrix. */
+ virtual void ZeroTracker() = 0;
+
+ /** Returns the zero pose for the tracker coordinate system. If the tracker has never had a valid pose, this
+ * will be an identity matrix. */
+ virtual HmdMatrix34_t GetTrackerZeroPose() = 0;
+
+ // ------------------------------------
+ // Administrative methods
+ // ------------------------------------
+
+ /** The ID of the driver this HMD uses as a UTF-8 string. Returns the length of the ID in bytes. If
+ * the buffer is not large enough to fit the ID an empty string will be returned. In general, 128 bytes
+ * will be enough to fit any ID. */
+ virtual uint32_t GetDriverId( char *pchBuffer, uint32_t unBufferLen ) = 0;
+
+ /** The ID of this display within its driver this HMD uses as a UTF-8 string. Returns the length of the ID in bytes. If
+ * the buffer is not large enough to fit the ID an empty string will be returned. In general, 128 bytes
+ * will be enough to fit any ID. */
+ virtual uint32_t GetDisplayId( char *pchBuffer, uint32_t unBufferLen ) = 0;
+};
+
+static const char * const IHmd_Version = "IHmd_005";
+
+/** error codes returned by Vr_Init */
+enum HmdError
+{
+ HmdError_None = 0,
+
+ HmdError_Init_InstallationNotFound = 100,
+ HmdError_Init_InstallationCorrupt = 101,
+ HmdError_Init_VRClientDLLNotFound = 102,
+ HmdError_Init_FileNotFound = 103,
+ HmdError_Init_FactoryNotFound = 104,
+ HmdError_Init_InterfaceNotFound = 105,
+ HmdError_Init_InvalidInterface = 106,
+ HmdError_Init_UserConfigDirectoryInvalid = 107,
+ HmdError_Init_HmdNotFound = 108,
+ HmdError_Init_NotInitialized = 109,
+
+ HmdError_Driver_Failed = 200,
+ HmdError_Driver_Unknown = 201,
+ HmdError_Driver_HmdUnknown = 202,
+ HmdError_Driver_NotLoaded = 203,
+
+ HmdError_IPC_ServerInitFailed = 300,
+ HmdError_IPC_ConnectFailed = 301,
+ HmdError_IPC_SharedStateInitFailed = 302,
+
+ HmdError_VendorSpecific_UnableToConnectToOculusRuntime = 1000,
+
+ HmdError_Steam_SteamInstallationNotFound = 2000,
+
+};
+
+
+// figure out how to import from the VR API dll
+#if defined(_WIN32)
+
+#ifdef VR_API_EXPORT
+#define VR_INTERFACE extern "C" __declspec( dllexport )
+#else
+#define VR_INTERFACE extern "C" __declspec( dllimport )
+#endif
+
+#elif defined(GNUC) || defined(COMPILER_GCC)
+
+#ifdef VR_API_EXPORT
+#define VR_INTERFACE extern "C" __attribute__((visibility("default")))
+#else
+#define VR_INTERFACE extern "C"
+#endif
+
+#else
+#error "Unsupported Platform."
+#endif
+
+
+
+
+/** Finds the active installation of the VR API and initializes it. The priority for figuring
+* out where to load vrclient from are:
+* 1. The convar "VR_OVERRIDE", which should contain an absolute path to the root of
+* an vr API directory.
+* 2. The pchVROverride argument. This should be an absolute path or a path relative to
+* the current executable.
+* 3. The path "./vr" relative to the current executable's path.
+*
+* Each of these paths are to the "root" of the VR API install. That's the directory with
+* the "drivers" directory and a platform (i.e. "win32") directory in it, not the directory with the DLL itself.
+*/
+VR_INTERFACE IHmd *VR_Init( HmdError *peError );
+
+/** unloads vrclient.dll. Any interface pointers from the interface are
+* invalid after this point */
+VR_INTERFACE void VR_Shutdown( );
+
+/** Returns true if there is an HMD attached. This check is as lightweight as possible and
+* can be called outside of VR_Init/VR_Shutdown. It should be used when an application wants
+* to know if initializing VR is a possibility but isn't ready to take that step yet.
+*/
+VR_INTERFACE bool VR_IsHmdPresent();
+
+/** Returns the string version of an HMD error. This function may be called outside of VR_Init()/VR_Shutdown(). */
+VR_INTERFACE const char *VR_GetStringForHmdError( HmdError error );
+
+#pragma pack( pop )
+
+
+} \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_132/steamvr_flat.h b/lsteamclient/steamworks_sdk_132/steamvr_flat.h
new file mode 100644
index 00000000..1d507d85
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_132/steamvr_flat.h
@@ -0,0 +1,33 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef STEAMVRFLAT_H
+#define STEAMVRFLAT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+
+S_API void SteamAPI_IHmd_GetWindowBounds(intptr_t instancePtr, int32_t * pnX, int32_t * pnY, uint32_t * pnWidth, uint32_t * pnHeight);
+S_API void SteamAPI_IHmd_GetRecommendedRenderTargetSize(intptr_t instancePtr, uint32_t * pnWidth, uint32_t * pnHeight);
+S_API void SteamAPI_IHmd_GetEyeOutputViewport(intptr_t instancePtr, vr::Hmd_Eye eEye, uint32_t * pnX, uint32_t * pnY, uint32_t * pnWidth, uint32_t * pnHeight);
+S_API struct vr::HmdMatrix44_t SteamAPI_IHmd_GetProjectionMatrix(intptr_t instancePtr, vr::Hmd_Eye eEye, float fNearZ, float fFarZ, vr::GraphicsAPIConvention eProjType);
+S_API void SteamAPI_IHmd_GetProjectionRaw(intptr_t instancePtr, vr::Hmd_Eye eEye, float * pfLeft, float * pfRight, float * pfTop, float * pfBottom);
+S_API struct vr::DistortionCoordinates_t SteamAPI_IHmd_ComputeDistortion(intptr_t instancePtr, vr::Hmd_Eye eEye, float fU, float fV);
+S_API struct vr::HmdMatrix34_t SteamAPI_IHmd_GetHeadFromEyePose(intptr_t instancePtr, vr::Hmd_Eye eEye);
+S_API bool SteamAPI_IHmd_GetViewMatrix(intptr_t instancePtr, float fSecondsFromNow, struct vr::HmdMatrix44_t * pMatLeftView, struct vr::HmdMatrix44_t * pMatRightView, vr::HmdTrackingResult * peResult);
+S_API int32_t SteamAPI_IHmd_GetD3D9AdapterIndex(intptr_t instancePtr);
+S_API void SteamAPI_IHmd_GetDXGIOutputInfo(intptr_t instancePtr, int32_t * pnAdapterIndex, int32_t * pnAdapterOutputIndex);
+S_API void SteamAPI_IHmd_AttachToWindow(intptr_t instancePtr, void * hWnd);
+S_API bool SteamAPI_IHmd_GetTrackerFromHeadPose(intptr_t instancePtr, float fPredictedSecondsFromNow, struct vr::HmdMatrix34_t * pmPose, vr::HmdTrackingResult * peResult);
+S_API bool SteamAPI_IHmd_GetLastTrackerFromHeadPose(intptr_t instancePtr, struct vr::HmdMatrix34_t * pmPose);
+S_API bool SteamAPI_IHmd_WillDriftInYaw(intptr_t instancePtr);
+S_API void SteamAPI_IHmd_ZeroTracker(intptr_t instancePtr);
+S_API struct vr::HmdMatrix34_t SteamAPI_IHmd_GetTrackerZeroPose(intptr_t instancePtr);
+S_API uint32_t SteamAPI_IHmd_GetDriverId(intptr_t instancePtr, char * pchBuffer, uint32_t unBufferLen);
+S_API uint32_t SteamAPI_IHmd_GetDisplayId(intptr_t instancePtr, char * pchBuffer, uint32_t unBufferLen);
+#endif // STEAMVRFLAT_H
diff --git a/lsteamclient/steamworks_sdk_133/isteamapplist.h b/lsteamclient/steamworks_sdk_133/isteamapplist.h
new file mode 100644
index 00000000..fc1d49ee
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_133/isteamapps.h b/lsteamclient/steamworks_sdk_133/isteamapps.h
new file mode 100644
index 00000000..f73fed4d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamapps.h
@@ -0,0 +1,154 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+ // get download progress for optional DLC
+ virtual bool GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // return the buildid of this app, may change at any time based on backend updates to the game
+ virtual int GetAppBuildId() = 0;
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION007"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_133/isteamappticket.h b/lsteamclient/steamworks_sdk_133/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_133/isteamclient.h b/lsteamclient/steamworks_sdk_133/isteamclient.h
new file mode 100644
index 00000000..9977f3a5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamclient.h
@@ -0,0 +1,503 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct ValvePackingSentinel_t
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+extern "C" typedef void( *SteamAPI_PostAPIResultInProcess_t )(SteamAPICall_t callHandle, void *, uint32 unCallbackSize, int iCallbackNum);
+extern "C" typedef uint32 ( *SteamAPI_CheckCallbackRegistered_t )( int iCallbackNum );
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamMusicRemote;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+class ISteamHTMLSurface;
+class ISteamInventory;
+class ISteamVideo;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player Remote
+ virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // html page display
+ virtual ISteamHTMLSurface *GetISteamHTMLSurface(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // Helper functions for internal Steam usage
+ virtual void Set_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) = 0;
+ virtual void Remove_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) = 0;
+ virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0;
+
+ // inventory
+ virtual ISteamInventory *GetISteamInventory( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Video
+ virtual ISteamVideo *GetISteamVideo( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient017"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iClientDepotBuilderCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+enum { k_iSteamMusicRemoteCallbacks = 4100 };
+enum { k_iClientVRCallbacks = 4200 };
+enum { k_iClientReservedCallbacks = 4300 };
+enum { k_iSteamReservedCallbacks = 4400 };
+enum { k_iSteamHTMLSurfaceCallbacks = 4500 };
+enum { k_iClientVideoCallbacks = 4600 };
+enum { k_iClientInventoryCallbacks = 4700 };
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+struct SteamCallback_t
+{
+public:
+ SteamCallback_t() {}
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname : SteamCallback_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_10() \
+ END_CALLBACK_INTERNAL_BEGIN( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_11() \
+ END_CALLBACK_INTERNAL_BEGIN( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_12() \
+ END_CALLBACK_INTERNAL_BEGIN( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_13() \
+ END_CALLBACK_INTERNAL_BEGIN( 13 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_14() \
+ END_CALLBACK_INTERNAL_BEGIN( 14 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 13 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_133/isteamcontroller.h b/lsteamclient/steamworks_sdk_133/isteamcontroller.h
new file mode 100644
index 00000000..6a3100e3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamcontroller.h
@@ -0,0 +1,138 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+#define MAX_STEAM_CONTROLLERS 16
+
+#pragma pack( pop )
+
+#define STEAM_RIGHT_TRIGGER_MASK 0x0000001
+#define STEAM_LEFT_TRIGGER_MASK 0x0000002
+#define STEAM_RIGHT_BUMPER_MASK 0x0000004
+#define STEAM_LEFT_BUMPER_MASK 0x0000008
+#define STEAM_BUTTON_0_MASK 0x0000010
+#define STEAM_BUTTON_1_MASK 0x0000020
+#define STEAM_BUTTON_2_MASK 0x0000040
+#define STEAM_BUTTON_3_MASK 0x0000080
+#define STEAM_TOUCH_0_MASK 0x0000100
+#define STEAM_TOUCH_1_MASK 0x0000200
+#define STEAM_TOUCH_2_MASK 0x0000400
+#define STEAM_TOUCH_3_MASK 0x0000800
+#define STEAM_BUTTON_MENU_MASK 0x0001000
+#define STEAM_BUTTON_STEAM_MASK 0x0002000
+#define STEAM_BUTTON_ESCAPE_MASK 0x0004000
+#define STEAM_BUTTON_BACK_LEFT_MASK 0x0008000
+#define STEAM_BUTTON_BACK_RIGHT_MASK 0x0010000
+#define STEAM_BUTTON_LEFTPAD_CLICKED_MASK 0x0020000
+#define STEAM_BUTTON_RIGHTPAD_CLICKED_MASK 0x0040000
+#define STEAM_LEFTPAD_FINGERDOWN_MASK 0x0080000
+#define STEAM_RIGHTPAD_FINGERDOWN_MASK 0x0100000
+#define STEAM_JOYSTICK_BUTTON_MASK 0x0400000
+
+
+#pragma pack( push, 1 )
+
+struct SteamControllerState001_t
+{
+ // If packet num matches that on your prior call, then the controller state hasn't been changed since
+ // your last call and there is no need to process it
+ uint32 unPacketNum;
+
+ // bit flags for each of the buttons
+ uint64 ulButtons;
+
+ // Left pad coordinates
+ short sLeftPadX;
+ short sLeftPadY;
+
+ // Right pad coordinates
+ short sRightPadX;
+ short sRightPadY;
+
+};
+
+#pragma pack( pop )
+
+#define SteamControllerState_t SteamControllerState001_t
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ //
+ // Native controller support API
+ //
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init( const char *pchAbsolutePathToControllerConfigVDF ) = 0;
+ virtual bool Shutdown() = 0;
+
+ // Pump callback/callresult events, SteamAPI_RunCallbacks will do this for you,
+ // normally never need to call directly.
+ virtual void RunFrame() = 0;
+
+ // Get the state of the specified controller, returns false if that controller is not connected
+ virtual bool GetControllerState( uint32 unControllerIndex, SteamControllerState_t *pState ) = 0;
+
+ // Trigger a haptic pulse on the controller
+ virtual void TriggerHapticPulse( uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ // Set the override mode which is used to choose to use different base/legacy bindings from your config file
+ virtual void SetOverrideMode( const char *pchMode ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "STEAMCONTROLLER_INTERFACE_VERSION"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+/*
+struct ControllerCallback_t
+{
+ enum { k_iCallback = k_iSteamControllerCallbacks + 1 };
+
+};
+*/
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_133/isteamfriends.h b/lsteamclient/steamworks_sdk_133/isteamfriends.h
new file mode 100644
index 00000000..a63d8ea7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamfriends.h
@@ -0,0 +1,629 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1, // this doesn't get stored; the user has just done an Ignore on an friendship invite
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5, // this is stored; the user has explicit blocked this other user from comments/chat/etc
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+// friends group identifier type
+typedef int16 FriendsGroupID_t;
+
+// invalid friends group identifier constant
+const FriendsGroupID_t k_FriendsGroupID_Invalid = -1;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, OUT_STRUCT() FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+ // friends steam level
+ virtual int GetFriendSteamLevel( CSteamID steamIDFriend ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // friend grouping (tag) apis
+ // returns the number of friends groups
+ virtual int GetFriendsGroupCount() = 0;
+ // returns the friends group ID for the given index (invalid indices return k_FriendsGroupID_Invalid)
+ virtual FriendsGroupID_t GetFriendsGroupIDByIndex( int iFG ) = 0;
+ // returns the name for the given friends group (NULL in the case of invalid friends group IDs)
+ virtual const char *GetFriendsGroupName( FriendsGroupID_t friendsGroupID ) = 0;
+ // returns the number of members in a given friends group
+ virtual int GetFriendsGroupMembersCount( FriendsGroupID_t friendsGroupID ) = 0;
+ // gets up to nMembersCount members of the given friends group, if fewer exist than requested those positions' SteamIDs will be invalid
+ virtual void GetFriendsGroupMembersList( FriendsGroupID_t friendsGroupID, OUT_ARRAY_CALL(nMembersCount, GetFriendsGroupMembersCount, friendsGroupID ) CSteamID *pOutSteamIDMembers, int nMembersCount ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( ARRAY_COUNT(cClansToRequest) CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, OUT_STRUCT() CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends015"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_133/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_133/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_133/isteamgameserver.h b/lsteamclient/steamworks_sdk_133/isteamgameserver.h
new file mode 100644
index 00000000..c97ad6f5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamgameserver.h
@@ -0,0 +1,384 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_133/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_133/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_133/isteamhtmlsurface.h b/lsteamclient/steamworks_sdk_133/isteamhtmlsurface.h
new file mode 100644
index 00000000..64caa5f7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamhtmlsurface.h
@@ -0,0 +1,438 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to display html pages in a texture
+//
+//=============================================================================
+
+#ifndef ISTEAMHTMLSURFACE_H
+#define ISTEAMHTMLSURFACE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+typedef uint32 HHTMLBrowser;
+const uint32 INVALID_HTMLBROWSER = 0;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for displaying HTML pages and interacting with them
+//-----------------------------------------------------------------------------
+class ISteamHTMLSurface
+{
+public:
+ virtual ~ISteamHTMLSurface() {}
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Create a browser object for display of a html page, when creation is complete the call handle
+ // will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser.
+ // The user agent string is a substring to be added to the general user agent string so you can
+ // identify your client on web servers.
+ // The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if
+ // you do not require this functionality.
+ virtual SteamAPICall_t CreateBrowser( const char *pchUserAgent, const char *pchUserCSS ) = 0;
+
+ // Call this when you are done with a html surface, this lets us free the resources being used by it
+ virtual void RemoveBrowser( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // Navigate to this URL, results in a HTML_StartRequest_t as the request commences
+ virtual void LoadURL( HHTMLBrowser unBrowserHandle, const char *pchURL, const char *pchPostData ) = 0;
+
+ // Tells the surface the size in pixels to display the surface
+ virtual void SetSize( HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight ) = 0;
+
+ // Stop the load of the current html page
+ virtual void StopLoad( HHTMLBrowser unBrowserHandle ) = 0;
+ // Reload (most likely from local cache) the current page
+ virtual void Reload( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate back in the page history
+ virtual void GoBack( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate forward in the page history
+ virtual void GoForward( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // add this header to any url requests from this browser
+ virtual void AddHeader( HHTMLBrowser unBrowserHandle, const char *pchKey, const char *pchValue ) = 0;
+ // run this javascript script in the currently loaded page
+ virtual void ExecuteJavascript( HHTMLBrowser unBrowserHandle, const char *pchScript ) = 0;
+
+ enum EHTMLMouseButton
+ {
+ eHTMLMouseButton_Left = 0,
+ eHTMLMouseButton_Right = 1,
+ eHTMLMouseButton_Middle = 2,
+ };
+
+ // Mouse click and mouse movement commands
+ virtual void MouseUp( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDown( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDoubleClick( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ // x and y are relative to the HTML bounds
+ virtual void MouseMove( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+ // nDelta is pixels of scroll
+ virtual void MouseWheel( HHTMLBrowser unBrowserHandle, int32 nDelta ) = 0;
+
+ enum EMouseCursor
+ {
+ dc_user = 0,
+ dc_none,
+ dc_arrow,
+ dc_ibeam,
+ dc_hourglass,
+ dc_waitarrow,
+ dc_crosshair,
+ dc_up,
+ dc_sizenw,
+ dc_sizese,
+ dc_sizene,
+ dc_sizesw,
+ dc_sizew,
+ dc_sizee,
+ dc_sizen,
+ dc_sizes,
+ dc_sizewe,
+ dc_sizens,
+ dc_sizeall,
+ dc_no,
+ dc_hand,
+ dc_blank, // don't show any custom cursor, just use your default
+ dc_middle_pan,
+ dc_north_pan,
+ dc_north_east_pan,
+ dc_east_pan,
+ dc_south_east_pan,
+ dc_south_pan,
+ dc_south_west_pan,
+ dc_west_pan,
+ dc_north_west_pan,
+ dc_alias,
+ dc_cell,
+ dc_colresize,
+ dc_copycur,
+ dc_verticaltext,
+ dc_rowresize,
+ dc_zoomin,
+ dc_zoomout,
+ dc_help,
+ dc_custom,
+
+ dc_last, // custom cursors start from this value and up
+ };
+
+ enum EHTMLKeyModifiers
+ {
+ k_eHTMLKeyModifier_None = 0,
+ k_eHTMLKeyModifier_AltDown = 1 << 0,
+ k_eHTMLKeyModifier_CtrlDown = 1 << 1,
+ k_eHTMLKeyModifier_ShiftDown = 1 << 2,
+ };
+
+ // keyboard interactions, native keycode is the virtual key code value from your OS
+ virtual void KeyDown( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ virtual void KeyUp( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ // cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press)
+ virtual void KeyChar( HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+
+ // programmatically scroll this many pixels on the page
+ virtual void SetHorizontalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+ virtual void SetVerticalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+
+ // tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things
+ virtual void SetKeyFocus( HHTMLBrowser unBrowserHandle, bool bHasKeyFocus ) = 0;
+
+ // open the current pages html code in the local editor of choice, used for debugging
+ virtual void ViewSource( HHTMLBrowser unBrowserHandle ) = 0;
+ // copy the currently selected text on the html page to the local clipboard
+ virtual void CopyToClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+ // paste from the local clipboard to the current html page
+ virtual void PasteFromClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element
+ virtual void Find( HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse ) = 0;
+ // cancel a currently running find
+ virtual void StopFind( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // return details about the link at position x,y on the current page
+ virtual void GetLinkAtPosition( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+
+ // set a webcookie for the hostname in question
+ virtual void SetCookie( const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath = "/", RTime32 nExpires = 0, bool bSecure = false, bool bHTTPOnly = false ) = 0;
+
+ // Zoom the current page by flZoom ( from 0.0 to 2.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care)
+ virtual void SetPageScaleFactor( HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY ) = 0;
+
+ // CALLBACKS
+ //
+ // These set of functions are used as responses to callback requests
+ //
+
+ // You MUST call this in response to a HTML_StartRequest_t callback
+ // Set bAllowed to true to allow this navigation, false to cancel it and stay
+ // on the current page. You can use this feature to limit the valid pages
+ // allowed in your HTML surface.
+ virtual void AllowStartRequest( HHTMLBrowser unBrowserHandle, bool bAllowed ) = 0;
+
+ // You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback
+ // Set bResult to true for the OK option of a confirm, use false otherwise
+ virtual void JSDialogResponse( HHTMLBrowser unBrowserHandle, bool bResult ) = 0;
+
+ // You MUST call this in response to a HTML_FileOpenDialog_t callback
+ virtual void FileLoadDialogResponse( HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles ) = 0;
+};
+
+#define STEAMHTMLSURFACE_INTERFACE_VERSION "STEAMHTMLSURFACE_INTERFACE_VERSION_002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser is ready for use
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_BrowserReady_t, k_iSteamHTMLSurfaceCallbacks + 1 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this browser is now fully created and ready to navigate to pages
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser has a pending paint
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_NeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 2)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint
+CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called
+CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture
+CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture
+CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update
+CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update
+CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update
+CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update
+CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered
+CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages
+END_DEFINE_CALLBACK_12()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser wanted to navigate to a new page
+// NOTE - you MUST call AllowStartRequest in response to this callback
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_StartRequest_t, k_iSteamHTMLSurfaceCallbacks + 3)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface navigating
+CALLBACK_MEMBER(1, const char *, pchURL) // the url they wish to navigate to
+CALLBACK_MEMBER(2, const char *, pchTarget) // the html link target type (i.e _blank, _self, _parent, _top )
+CALLBACK_MEMBER(3, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER(4, bool, bIsRedirect) // true if this was a http/html redirect from the last load request
+END_DEFINE_CALLBACK_5()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser has been requested to close due to user interaction (usually from a javascript window.close() call)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_CloseBrowser_t, k_iSteamHTMLSurfaceCallbacks + 4)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser is navigating to a new url
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_URLChanged_t, k_iSteamHTMLSurfaceCallbacks + 5 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface navigating
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the url they wish to navigate to
+CALLBACK_MEMBER( 2, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER( 3, bool, bIsRedirect ) // true if this was a http/html redirect from the last load request
+CALLBACK_MEMBER( 4, const char *, pchPageTitle ) // the title of the page
+CALLBACK_MEMBER( 5, bool, bNewNavigation ) // true if this was from a fresh tab and not a click on an existing page
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A page is finished loading
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FinishedRequest_t, k_iSteamHTMLSurfaceCallbacks + 6 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+CALLBACK_MEMBER( 2, const char *, pchPageTitle ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a request to load this url in a new tab
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_OpenLinkInNewTab_t, k_iSteamHTMLSurfaceCallbacks + 7 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the page has a new title now
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ChangedTitle_t, k_iSteamHTMLSurfaceCallbacks + 8 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: results from a search
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SearchResults_t, k_iSteamHTMLSurfaceCallbacks + 9 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unResults ) //
+CALLBACK_MEMBER( 2, uint32, unCurrentMatch ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: page history status changed on the ability to go backwards and forward
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_CanGoBackAndForward_t, k_iSteamHTMLSurfaceCallbacks + 10 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, bool, bCanGoBack ) //
+CALLBACK_MEMBER( 2, bool, bCanGoForward ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the horizontal scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HorizontalScroll_t, k_iSteamHTMLSurfaceCallbacks + 11 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool , bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the vertical scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_VerticalScroll_t, k_iSteamHTMLSurfaceCallbacks + 12 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool, bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetLinkAtPosition call
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_LinkAtPosition_t, k_iSteamHTMLSurfaceCallbacks + 13 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, x ) // NOTE - Not currently set
+CALLBACK_MEMBER( 2, uint32, y ) // NOTE - Not currently set
+CALLBACK_MEMBER( 3, const char *, pchURL ) //
+CALLBACK_MEMBER( 4, bool, bInput ) //
+CALLBACK_MEMBER( 5, bool, bLiveLink ) //
+END_DEFINE_CALLBACK_6()
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript alert dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSAlert_t, k_iSteamHTMLSurfaceCallbacks + 14 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript confirmation dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSConfirm_t, k_iSteamHTMLSurfaceCallbacks + 15 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: when received show a file open dialog
+// then call FileLoadDialogResponse with the file(s) the user selected.
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FileOpenDialog_t, k_iSteamHTMLSurfaceCallbacks + 16 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+CALLBACK_MEMBER( 2, const char *, pchInitialFile ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new html window has been created
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_NewWindow_t, k_iSteamHTMLSurfaceCallbacks + 21 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the current surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the page to load
+CALLBACK_MEMBER( 2, uint32, unX ) // the x pos into the page to display the popup
+CALLBACK_MEMBER( 3, uint32, unY ) // the y pos into the page to display the popup
+CALLBACK_MEMBER( 4, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 5, uint32, unTall ) // the total height of the pBGRA texture
+CALLBACK_MEMBER( 6, HHTMLBrowser, unNewWindow_BrowserHandle ) // the handle of the new window surface
+END_DEFINE_CALLBACK_7()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: change the cursor to display
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SetCursor_t, k_iSteamHTMLSurfaceCallbacks + 22 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, eMouseCursor ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: informational message from the browser
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_StatusText_t, k_iSteamHTMLSurfaceCallbacks + 23 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ShowToolTip_t, k_iSteamHTMLSurfaceCallbacks + 24 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: update the text of an existing tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_UpdateToolTip_t, k_iSteamHTMLSurfaceCallbacks + 25 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: hide the tooltip you are showing
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HideToolTip_t, k_iSteamHTMLSurfaceCallbacks + 26 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMHTMLSURFACE_H
diff --git a/lsteamclient/steamworks_sdk_133/isteamhttp.h b/lsteamclient/steamworks_sdk_133/isteamhttp.h
new file mode 100644
index 00000000..d96a631f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamhttp.h
@@ -0,0 +1,210 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+typedef uint32 HTTPCookieContainerHandle;
+#define INVALID_HTTPCOOKIE_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Both http and https are supported,
+ // so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+
+ // Creates a cookie container handle which you must later free with ReleaseCookieContainer(). If bAllowResponsesToModify=true
+ // than any response to your requests using this cookie container may add new cookies which may be transmitted with
+ // future requests. If bAllowResponsesToModify=false than only cookies you explicitly set will be sent. This API is just for
+ // during process lifetime, after steam restarts no cookies are persisted and you have no way to access the cookie container across
+ // repeat executions of your process.
+ virtual HTTPCookieContainerHandle CreateCookieContainer( bool bAllowResponsesToModify ) = 0;
+
+ // Release a cookie container you are finished using, freeing it's memory
+ virtual bool ReleaseCookieContainer( HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Adds a cookie to the specified cookie container that will be used with future requests.
+ virtual bool SetCookie( HTTPCookieContainerHandle hCookieContainer, const char *pchHost, const char *pchUrl, const char *pchCookie ) = 0;
+
+ // Set the cookie container to use for a HTTP request
+ virtual bool SetHTTPRequestCookieContainer( HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Set the extra user agent info for a request, this doesn't clobber the normal user agent, it just adds the extra info on the end
+ virtual bool SetHTTPRequestUserAgentInfo( HTTPRequestHandle hRequest, const char *pchUserAgentInfo ) = 0;
+
+ // Set that https request should require verified SSL certificate via machines certificate trust store
+ virtual bool SetHTTPRequestRequiresVerifiedCertificate( HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate ) = 0;
+
+ // Set an absolute timeout on the HTTP request, this is just a total time timeout different than the network activity timeout
+ // which can bump everytime we get more data
+ virtual bool SetHTTPRequestAbsoluteTimeoutMS( HTTPRequestHandle hRequest, uint32 unMilliseconds ) = 0;
+
+ // Check if the reason the request failed was because we timed it out (rather than some harder failure)
+ virtual bool GetHTTPRequestWasTimedOut( HTTPRequestHandle hRequest, bool *pbWasTimedOut ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+
+ uint32 m_unBodySize; // Same as GetHTTPResponseBodySize()
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_133/isteaminventory.h b/lsteamclient/steamworks_sdk_133/isteaminventory.h
new file mode 100644
index 00000000..29f939b7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteaminventory.h
@@ -0,0 +1,354 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Inventory
+//
+//=============================================================================
+
+#ifndef ISTEAMINVENTORY_H
+#define ISTEAMINVENTORY_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// Every individual instance of an item has a globally-unique ItemInstanceID.
+// This ID is unique to the combination of (player, specific item instance)
+// and will not be transferred to another player or re-used for another item.
+typedef uint64 SteamItemInstanceID_t;
+
+static const SteamItemInstanceID_t k_SteamItemInstanceIDInvalid = ~(SteamItemInstanceID_t)0;
+
+// Types of items in your game are identified by a 32-bit "item definition number".
+// Valid definition numbers are between 1 and 999999999; numbers less than or equal to
+// zero are invalid, and numbers greater than or equal to one billion (1x10^9) are
+// reserved for internal Steam use.
+typedef int32 SteamItemDef_t;
+
+
+enum ESteamItemFlags
+{
+ // Item status flags - these flags are permenantly attached to specific item instances
+ k_ESteamItemNoTrade = 1 << 0, // This item is account-locked and cannot be traded or given away.
+
+ // Action confirmation flags - these flags are set one time only, as part of a result set
+ k_ESteamItemRemoved = 1 << 8, // The item has been destroyed, traded away, expired, or otherwise invalidated
+ k_ESteamItemConsumed = 1 << 9, // The item quantity has been decreased by 1 via ConsumeItem API.
+
+ // All other flag bits are currently reserved for internal Steam use at this time.
+ // Do not assume anything about the state of other flags which are not defined here.
+};
+
+struct SteamItemDetails_t
+{
+ SteamItemInstanceID_t m_itemId;
+ SteamItemDef_t m_iDefinition;
+ uint16 m_unQuantity;
+ uint16 m_unFlags; // see ESteamItemFlags
+};
+
+typedef int32 SteamInventoryResult_t;
+
+static const SteamInventoryResult_t k_SteamInventoryResultInvalid = -1;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Inventory query and manipulation API
+//-----------------------------------------------------------------------------
+class ISteamInventory
+{
+public:
+
+ // INVENTORY ASYNC RESULT MANAGEMENT
+ //
+ // Asynchronous inventory queries always output a result handle which can be used with
+ // GetResultStatus, GetResultItems, etc. A SteamInventoryResultReady_t callback will
+ // be triggered when the asynchronous result becomes ready (or fails).
+ //
+
+ // Find out the status of an asynchronous inventory result handle. Possible values:
+ // k_EResultPending - still in progress
+ // k_EResultOK - done, result ready
+ // k_EResultExpired - done, result ready, maybe out of date (see DeserializeResult)
+ // k_EResultInvalidParam - ERROR: invalid API call parameters
+ // k_EResultServiceUnavailable - ERROR: service temporarily down, you may retry later
+ // k_EResultLimitExceeded - ERROR: operation would exceed per-user inventory limits
+ // k_EResultFail - ERROR: unknown / generic error
+ METHOD_DESC(Find out the status of an asynchronous inventory result handle.)
+ virtual EResult GetResultStatus( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Copies the contents of a result set into a flat array. The specific
+ // contents of the result set depend on which query which was used.
+ METHOD_DESC(Copies the contents of a result set into a flat array. The specific contents of the result set depend on which query which was used.)
+ virtual bool GetResultItems( SteamInventoryResult_t resultHandle,
+ OUT_ARRAY_COUNT( punOutItemsArraySize,Output array) SteamItemDetails_t *pOutItemsArray,
+ uint32 *punOutItemsArraySize ) = 0;
+
+ // Returns the server time at which the result was generated. Compare against
+ // the value of IClientUtils::GetServerRealTime() to determine age.
+ METHOD_DESC(Returns the server time at which the result was generated. Compare against the value of IClientUtils::GetServerRealTime() to determine age.)
+ virtual uint32 GetResultTimestamp( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Returns true if the result belongs to the target steam ID, false if the
+ // result does not. This is important when using DeserializeResult, to verify
+ // that a remote player is not pretending to have a different user's inventory.
+ METHOD_DESC(Returns true if the result belongs to the target steam ID or false if the result does not. This is important when using DeserializeResult to verify that a remote player is not pretending to have a different users inventory.)
+ virtual bool CheckResultSteamID( SteamInventoryResult_t resultHandle, CSteamID steamIDExpected ) = 0;
+
+ // Destroys a result handle and frees all associated memory.
+ METHOD_DESC(Destroys a result handle and frees all associated memory.)
+ virtual void DestroyResult( SteamInventoryResult_t resultHandle ) = 0;
+
+
+ // INVENTORY ASYNC QUERY
+ //
+
+ // Captures the entire state of the current user's Steam inventory.
+ // You must call DestroyResult on this handle when you are done with it.
+ // Returns false and sets *pResultHandle to zero if inventory is unavailable.
+ // Note: calls to this function are subject to rate limits and may return
+ // cached results if called too frequently. It is suggested that you call
+ // this function only when you are about to display the user's full inventory,
+ // or if you expect that the inventory may have changed.
+ METHOD_DESC(Captures the entire state of the current users Steam inventory.)
+ virtual bool GetAllItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+
+ // Captures the state of a subset of the current user's Steam inventory,
+ // identified by an array of item instance IDs. The results from this call
+ // can be serialized and passed to other players to "prove" that the current
+ // user owns specific items, without exposing the user's entire inventory.
+ // For example, you could call GetItemsByID with the IDs of the user's
+ // currently equipped cosmetic items and serialize this to a buffer, and
+ // then transmit this buffer to other players upon joining a game.
+ METHOD_DESC(Captures the state of a subset of the current users Steam inventory identified by an array of item instance IDs.)
+ virtual bool GetItemsByID( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT( unCountInstanceIDs ) const SteamItemInstanceID_t *pInstanceIDs, uint32 unCountInstanceIDs ) = 0;
+
+
+ // RESULT SERIALIZATION AND AUTHENTICATION
+ //
+ // Serialized result sets contain a short signature which can't be forged
+ // or replayed across different game sessions. A result set can be serialized
+ // on the local client, transmitted to other players via your game networking,
+ // and deserialized by the remote players. This is a secure way of preventing
+ // hackers from lying about posessing rare/high-value items.
+
+ // Serializes a result set with signature bytes to an output buffer. Pass
+ // NULL as an output buffer to get the required size via punOutBufferSize.
+ // The size of a serialized result depends on the number items which are being
+ // serialized. When securely transmitting items to other players, it is
+ // recommended to use "GetItemsByID" first to create a minimal result set.
+ // Results have a built-in timestamp which will be considered "expired" after
+ // an hour has elapsed. See DeserializeResult for expiration handling.
+ virtual bool SerializeResult( SteamInventoryResult_t resultHandle, OUT_BUFFER_COUNT(punOutBufferSize) void *pOutBuffer, uint32 *punOutBufferSize ) = 0;
+
+ // Deserializes a result set and verifies the signature bytes. Returns false
+ // if bRequireFullOnlineVerify is set but Steam is running in Offline mode.
+ // Otherwise returns true and then delivers error codes via GetResultStatus.
+ //
+ // The bRESERVED_MUST_BE_FALSE flag is reserved for future use and should not
+ // be set to true by your game at this time.
+ //
+ // DeserializeResult has a potential soft-failure mode where the handle status
+ // is set to k_EResultExpired. GetResultItems() still succeeds in this mode.
+ // The "expired" result could indicate that the data may be out of date - not
+ // just due to timed expiration (one hour), but also because one of the items
+ // in the result set may have been traded or consumed since the result set was
+ // generated. You could compare the timestamp from GetResultTimestamp() to
+ // ISteamUtils::GetServerRealTime() to determine how old the data is. You could
+ // simply ignore the "expired" result code and continue as normal, or you
+ // could challenge the player with expired data to send an updated result set.
+ virtual bool DeserializeResult( SteamInventoryResult_t *pOutResultHandle, BUFFER_COUNT(punOutBufferSize) const void *pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE = false ) = 0;
+
+
+ // INVENTORY ASYNC MODIFICATION
+ //
+
+ // GenerateItems() creates one or more items and then generates a SteamInventoryCallback_t
+ // notification with a matching nCallbackContext parameter. This API is insecure, and could
+ // be abused by hacked clients. It is, however, very useful as a development cheat or as
+ // a means of prototyping item-related features for your game. The use of GenerateItems can
+ // be restricted to certain item definitions or fully blocked via the Steamworks website.
+ // If punArrayQuantity is not NULL, it should be the same length as pArrayItems and should
+ // describe the quantity of each item to generate.
+ virtual bool GenerateItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, ARRAY_COUNT(unArrayLength) const uint32 *punArrayQuantity, uint32 unArrayLength ) = 0;
+
+ // GrantPromoItems() checks the list of promotional items for which the user may be eligible
+ // and grants the items (one time only). On success, the result set will include items which
+ // were granted, if any. If no items were granted because the user isn't eligible for any
+ // promotions, this is still considered a success.
+ METHOD_DESC(GrantPromoItems() checks the list of promotional items for which the user may be eligible and grants the items (one time only).)
+ virtual bool GrantPromoItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+ // AddPromoItem() / AddPromoItems() are restricted versions of GrantPromoItems(). Instead of
+ // scanning for all eligible promotional items, the check is restricted to a single item
+ // definition or set of item definitions. This can be useful if your game has custom UI for
+ // showing a specific promo item to the user.
+ virtual bool AddPromoItem( SteamInventoryResult_t *pResultHandle, SteamItemDef_t itemDef ) = 0;
+ virtual bool AddPromoItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, uint32 unArrayLength ) = 0;
+
+ // ConsumeItem() removes items from the inventory, permenantly. They cannot be recovered.
+ // Not for the faint of heart - if your game implements item removal at all, a high-friction
+ // UI confirmation process is highly recommended. Similar to GenerateItems, punArrayQuantity
+ // can be NULL or else an array of the same length as pArrayItems which describe the quantity
+ // of each item to destroy. ConsumeItem can be restricted to certain item definitions or
+ // fully blocked via the Steamworks website to minimize support/abuse issues such as the
+ // clasic "my brother borrowed my laptop and deleted all of my rare items".
+ METHOD_DESC(ConsumeItem() removes items from the inventory permenantly.)
+ virtual bool ConsumeItem( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity ) = 0;
+
+ // ExchangeItems() is an atomic combination of GenerateItems and DestroyItems. It can be
+ // used to implement crafting recipes or transmutations, or items which unpack themselves
+ // into other items. Like GenerateItems, this is a flexible and dangerous API which is
+ // meant for rapid prototyping. You can configure restrictions on ExchangeItems via the
+ // Steamworks website, such as limiting it to a whitelist of input/output combinations
+ // corresponding to recipes.
+ // (Note: although GenerateItems may be hard or impossible to use securely in your game,
+ // ExchangeItems is perfectly reasonable to use once the whitelists are set accordingly.)
+ virtual bool ExchangeItems( SteamInventoryResult_t *pResultHandle,
+ ARRAY_COUNT(unArrayGenerateLength) const SteamItemDef_t *pArrayGenerate, ARRAY_COUNT(unArrayGenerateLength) const uint32 *punArrayGenerateQuantity, uint32 unArrayGenerateLength,
+ ARRAY_COUNT(unArrayDestroyLength) const SteamItemInstanceID_t *pArrayDestroy, ARRAY_COUNT(unArrayDestroyLength) const uint32 *punArrayDestroyQuantity, uint32 unArrayDestroyLength ) = 0;
+
+
+ // TransferItemQuantity() is intended for use with items which are "stackable" (can have
+ // quantity greater than one). It can be used to split a stack into two, or to transfer
+ // quantity from one stack into another stack of identical items. To split one stack into
+ // two, pass k_SteamItemInstanceIDInvalid for itemIdDest and a new item will be generated.
+ virtual bool TransferItemQuantity( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest ) = 0;
+
+
+ // TIMED DROPS AND PLAYTIME CREDIT
+ //
+
+ // Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when
+ // active gameplay begins, and at least once every two minutes afterwards. The backend
+ // performs its own time calculations, so the precise timing of the heartbeat is not
+ // critical as long as you send at least one heartbeat every two minutes. Calling the
+ // function more often than that is not harmful, it will simply have no effect. Note:
+ // players may be able to spoof this message by hacking their client, so you should not
+ // attempt to use this as a mechanism to restrict playtime credits. It is simply meant
+ // to distinguish between being in any kind of gameplay situation vs the main menu or
+ // a pre-game launcher window. (If you are stingy with handing out playtime credit, it
+ // will only encourage players to run bots or use mouse/kb event simulators.)
+ //
+ // Playtime credit accumulation can be capped on a daily or weekly basis through your
+ // Steamworks configuration.
+ //
+ METHOD_DESC(Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when active gameplay begins and at least once every two minutes afterwards.)
+ virtual void SendItemDropHeartbeat() = 0;
+
+ // Playtime credit must be consumed and turned into item drops by your game. Only item
+ // definitions which are marked as "playtime item generators" can be spawned. The call
+ // will return an empty result set if there is not enough playtime credit for a drop.
+ // Your game should call TriggerItemDrop at an appropriate time for the user to receive
+ // new items, such as between rounds or while the player is dead. Note that players who
+ // hack their clients could modify the value of "dropListDefinition", so do not use it
+ // to directly control rarity. It is primarily useful during testing and development,
+ // where you may wish to perform experiments with different types of drops.
+ METHOD_DESC(Playtime credit must be consumed and turned into item drops by your game.)
+ virtual bool TriggerItemDrop( SteamInventoryResult_t *pResultHandle, SteamItemDef_t dropListDefinition ) = 0;
+
+
+ // IN-GAME TRADING
+ //
+ // TradeItems() implements limited in-game trading of items, if you prefer not to use
+ // the overlay or an in-game web browser to perform Steam Trading through the website.
+ // You should implement a UI where both players can see and agree to a trade, and then
+ // each client should call TradeItems simultaneously (+/- 5 seconds) with matching
+ // (but reversed) parameters. The result is the same as if both players performed a
+ // Steam Trading transaction through the web. Each player will get an inventory result
+ // confirming the removal or quantity changes of the items given away, and the new
+ // item instance id numbers and quantities of the received items.
+ // (Note: new item instance IDs are generated whenever an item changes ownership.)
+ virtual bool TradeItems( SteamInventoryResult_t *pResultHandle, CSteamID steamIDTradePartner,
+ ARRAY_COUNT(nArrayGiveLength) const SteamItemInstanceID_t *pArrayGive, ARRAY_COUNT(nArrayGiveLength) const uint32 *pArrayGiveQuantity, uint32 nArrayGiveLength,
+ ARRAY_COUNT(nArrayGetLength) const SteamItemInstanceID_t *pArrayGet, ARRAY_COUNT(nArrayGetLength) const uint32 *pArrayGetQuantity, uint32 nArrayGetLength ) = 0;
+
+
+ // ITEM DEFINITIONS
+ //
+ // Item definitions are a mapping of "definition IDs" (integers between 1 and 1000000)
+ // to a set of string properties. Some of these properties are required to display items
+ // on the Steam community web site. Other properties can be defined by applications.
+ // Use of these functions is optional; there is no reason to call LoadItemDefinitions
+ // if your game hardcodes the numeric definition IDs (eg, purple face mask = 20, blue
+ // weapon mod = 55) and does not allow for adding new item types without a client patch.
+ //
+
+ // LoadItemDefinitions triggers the automatic load and refresh of item definitions.
+ // Every time new item definitions are available (eg, from the dynamic addition of new
+ // item types while players are still in-game), a SteamInventoryDefinitionUpdate_t
+ // callback will be fired.
+ METHOD_DESC(LoadItemDefinitions triggers the automatic load and refresh of item definitions.)
+ virtual bool LoadItemDefinitions() = 0;
+
+ // GetItemDefinitionIDs returns the set of all defined item definition IDs (which are
+ // defined via Steamworks configuration, and not necessarily contiguous integers).
+ // If pItemDefIDs is null, the call will return true and *punItemDefIDsArraySize will
+ // contain the total size necessary for a subsequent call. Otherwise, the call will
+ // return false if and only if there is not enough space in the output array.
+ virtual bool GetItemDefinitionIDs(
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+
+ // GetItemDefinitionProperty returns a string property from a given item definition.
+ // Note that some properties (for example, "name") may be localized and will depend
+ // on the current Steam language settings (see ISteamApps::GetCurrentGameLanguage).
+ // Property names are always composed of ASCII letters, numbers, and/or underscores.
+ // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available
+ // property names.
+ virtual bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPropertyName,
+ OUT_STRING_COUNT(punValueBufferSize) char *pchValueBuffer, uint32 *punValueBufferSize ) = 0;
+};
+
+#define STEAMINVENTORY_INTERFACE_VERSION "STEAMINVENTORY_INTERFACE_V001"
+
+
+// SteamInventoryResultReady_t callbacks are fired whenever asynchronous
+// results transition from "Pending" to "OK" or an error state. There will
+// always be exactly one callback per handle.
+struct SteamInventoryResultReady_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 0 };
+ SteamInventoryResult_t m_handle;
+ EResult m_result;
+};
+
+
+// SteamInventoryFullUpdate_t callbacks are triggered when GetAllItems
+// successfully returns a result which is newer / fresher than the last
+// known result. (It will not trigger if the inventory hasn't changed,
+// or if results from two overlapping calls are reversed in flight and
+// the earlier result is already known to be stale/out-of-date.)
+// The normal ResultReady callback will still be triggered immediately
+// afterwards; this is an additional notification for your convenience.
+struct SteamInventoryFullUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 1 };
+ SteamInventoryResult_t m_handle;
+};
+
+
+// A SteamInventoryDefinitionUpdate_t callback is triggered whenever
+// item definitions have been updated, which could be in response to
+// LoadItemDefinitions() or any other async request which required
+// a definition update in order to process results from the server.
+struct SteamInventoryDefinitionUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_133/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_133/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_133/isteammatchmaking.h b/lsteamclient/steamworks_sdk_133/isteammatchmaking.h
new file mode 100644
index 00000000..80606dfd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteammatchmaking.h
@@ -0,0 +1,747 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) = 0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, OUT_STRUCT() CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, OUT_STRUCT() CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_133/isteammusic.h b/lsteamclient/steamworks_sdk_133/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_133/isteammusicremote.h b/lsteamclient/steamworks_sdk_133/isteammusicremote.h
new file mode 100644
index 00000000..5893ef4b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteammusicremote.h
@@ -0,0 +1,129 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSICREMOTE_H
+#define ISTEAMMUSICREMOTE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteammusic.h"
+
+#define k_SteamMusicNameMaxLength 255
+#define k_SteamMusicPNGMaxLength 65535
+
+
+class ISteamMusicRemote
+{
+public:
+ // Service Definition
+ virtual bool RegisterSteamMusicRemote( const char *pchName ) = 0;
+ virtual bool DeregisterSteamMusicRemote() = 0;
+ virtual bool BIsCurrentMusicRemote() = 0;
+ virtual bool BActivationSuccess( bool bValue ) = 0;
+
+ virtual bool SetDisplayName( const char *pchDisplayName ) = 0;
+ virtual bool SetPNGIcon_64x64( void *pvBuffer, uint32 cbBufferLength ) = 0;
+
+ // Abilities for the user interface
+ virtual bool EnablePlayPrevious(bool bValue) = 0;
+ virtual bool EnablePlayNext( bool bValue ) = 0;
+ virtual bool EnableShuffled( bool bValue ) = 0;
+ virtual bool EnableLooped( bool bValue ) = 0;
+ virtual bool EnableQueue( bool bValue ) = 0;
+ virtual bool EnablePlaylists( bool bValue ) = 0;
+
+ // Status
+ virtual bool UpdatePlaybackStatus( AudioPlayback_Status nStatus ) = 0;
+ virtual bool UpdateShuffled( bool bValue ) = 0;
+ virtual bool UpdateLooped( bool bValue ) = 0;
+ virtual bool UpdateVolume( float flValue ) = 0; // volume is between 0.0 and 1.0
+
+ // Current Entry
+ virtual bool CurrentEntryWillChange() = 0;
+ virtual bool CurrentEntryIsAvailable( bool bAvailable ) = 0;
+ virtual bool UpdateCurrentEntryText( const char *pchText ) = 0;
+ virtual bool UpdateCurrentEntryElapsedSeconds( int nValue ) = 0;
+ virtual bool UpdateCurrentEntryCoverArt( void *pvBuffer, uint32 cbBufferLength ) = 0;
+ virtual bool CurrentEntryDidChange() = 0;
+
+ // Queue
+ virtual bool QueueWillChange() = 0;
+ virtual bool ResetQueueEntries() = 0;
+ virtual bool SetQueueEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentQueueEntry( int nID ) = 0;
+ virtual bool QueueDidChange() = 0;
+
+ // Playlist
+ virtual bool PlaylistWillChange() = 0;
+ virtual bool ResetPlaylistEntries() = 0;
+ virtual bool SetPlaylistEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentPlaylistEntry( int nID ) = 0;
+ virtual bool PlaylistDidChange() = 0;
+};
+
+#define STEAMMUSICREMOTE_INTERFACE_VERSION "STEAMMUSICREMOTE_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillActivate_t, k_iSteamMusicRemoteCallbacks + 1)
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillDeactivate_t, k_iSteamMusicRemoteCallbacks + 2 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteToFront_t, k_iSteamMusicRemoteCallbacks + 3 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWillQuit_t, k_iSteamMusicRemoteCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlay_t, k_iSteamMusicRemoteCallbacks + 5 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPause_t, k_iSteamMusicRemoteCallbacks + 6 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayPrevious_t, k_iSteamMusicRemoteCallbacks + 7 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayNext_t, k_iSteamMusicRemoteCallbacks + 8 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsShuffled_t, k_iSteamMusicRemoteCallbacks + 9 )
+ CALLBACK_MEMBER( 0, bool, m_bShuffled )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsLooped_t, k_iSteamMusicRemoteCallbacks + 10 )
+ CALLBACK_MEMBER(0, bool, m_bLooped )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsVolume_t, k_iSteamMusicCallbacks + 11 )
+ CALLBACK_MEMBER(0, float, m_flNewVolume)
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsQueueEntry_t, k_iSteamMusicCallbacks + 12 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsPlaylistEntry_t, k_iSteamMusicCallbacks + 13 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayingRepeatStatus_t, k_iSteamMusicRemoteCallbacks + 14 )
+ CALLBACK_MEMBER(0, int, m_nPlayingRepeatStatus )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+
+#endif // #define ISTEAMMUSICREMOTE_H
diff --git a/lsteamclient/steamworks_sdk_133/isteamnetworking.h b/lsteamclient/steamworks_sdk_133/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_133/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_133/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_133/isteamremotestorage.h b/lsteamclient/steamworks_sdk_133/isteamremotestorage.h
new file mode 100644
index 00000000..69938cd8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamremotestorage.h
@@ -0,0 +1,648 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+ k_EWorkshopFileTypeWebGuide = 9,
+ k_EWorkshopFileTypeIntegratedGuide = 10,
+ k_EWorkshopFileTypeMerch = 11,
+ k_EWorkshopFileTypeControllerBinding = 12,
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13,
+ k_EWorkshopFileTypeSteamVideo = 14,
+
+ // Update k_EWorkshopFileTypeMax if you add values.
+ k_EWorkshopFileTypeMax = 15
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, OUT_STRUCT() CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION012"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ UGCHandle_t m_hFile; // The new content
+};
+
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_133/isteamscreenshots.h b/lsteamclient/steamworks_sdk_133/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_133/isteamugc.h b/lsteamclient/steamworks_sdk_133/isteamugc.h
new file mode 100644
index 00000000..3faa2802
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamugc.h
@@ -0,0 +1,342 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+ k_EUGCQuery_RankedByTotalUniqueSubscriptions = 12,
+};
+
+enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0, // The item update handle was invalid, job might be finished, listen too SubmitItemUpdateResult_t
+ k_EItemUpdateStatusPreparingConfig = 1, // The item update is processing configuration data
+ k_EItemUpdateStatusPreparingContent = 2, // The item update is reading and processing content files
+ k_EItemUpdateStatusUploadingContent = 3, // The item update is uploading content changes to Steam
+ k_EItemUpdateStatusUploadingPreviewFile = 4, // The item update is uploading new preview file image
+ k_EItemUpdateStatusCommittingChanges = 5 // The item update is committing all changes
+};
+
+enum EItemState
+{
+ k_EItemStateNone = 0, // item not tracked on client
+ k_EItemStateSubscribed = 1, // current user is subscribed to this item. Not just cached.
+ k_EItemStateLegacyItem = 2, // item was created with ISteamRemoteStorage
+ k_EItemStateInstalled = 4, // item is installed and usable (but maybe out of date)
+ k_EItemStateNeedsUpdate = 8, // items needs an update. Either because it's not installed yet or creator updated content
+ k_EItemStateDownloading = 16, // item update is currently downloading
+ k_EItemStateDownloadPending = 32, // DownloadItem() was called for this item, content isn't available until DownloadItemResult_t is fired
+};
+
+enum EItemStatistic
+{
+ k_EItemStatistic_NumSubscriptions = 0,
+ k_EItemStatistic_NumFavorites = 1,
+ k_EItemStatistic_NumFollowers = 2,
+ k_EItemStatistic_NumUniqueSubscriptions = 3,
+ k_EItemStatistic_NumUniqueFavorites = 4,
+ k_EItemStatistic_NumUniqueFollowers = 5,
+ k_EItemStatistic_NumUniqueWebsiteViews = 6,
+ k_EItemStatistic_ReportScore = 7,
+};
+
+const uint32 kNumUGCResultsPerPage = 50;
+const uint32 k_cchDeveloperMetadataMax = 5000;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+ // collection details
+ uint32 m_unNumChildren;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for the details of the given published file ids (this RequestUGCDetails call is deprecated and replaced with this)
+ virtual UGCQueryHandle_t CreateQueryUGCDetailsRequest( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+
+ // Send the query to Steam
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+ virtual bool GetQueryUGCPreviewURL( UGCQueryHandle_t handle, uint32 index, char *pchURL, uint32 cchURLSize ) = 0;
+ virtual bool GetQueryUGCMetadata( UGCQueryHandle_t handle, uint32 index, char *pchMetadata, uint32 cchMetadatasize ) = 0;
+ virtual bool GetQueryUGCChildren( UGCQueryHandle_t handle, uint32 index, PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0;
+ virtual bool GetQueryUGCStatistic( UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 *pStatValue ) = 0;
+ virtual uint32 GetQueryUGCNumAdditionalPreviews( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCAdditionalPreview( UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char *pchURLOrVideoID, uint32 cchURLSize, bool *pbIsImage ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnMetadata( UGCQueryHandle_t handle, bool bReturnMetadata ) = 0;
+ virtual bool SetReturnChildren( UGCQueryHandle_t handle, bool bReturnChildren ) = 0;
+ virtual bool SetReturnAdditionalPreviews( UGCQueryHandle_t handle, bool bReturnAdditionalPreviews ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+
+ // DEPRECATED - Use CreateQueryUGCDetailsRequest call above instead!
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+ // Steam Workshop Creator API
+ virtual SteamAPICall_t CreateItem( AppId_t nConsumerAppId, EWorkshopFileType eFileType ) = 0; // create new item for this app with no content attached yet
+
+ virtual UGCUpdateHandle_t StartItemUpdate( AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID ) = 0; // start an UGC item update. Set changed properties before commiting update with CommitItemUpdate()
+
+ virtual bool SetItemTitle( UGCUpdateHandle_t handle, const char *pchTitle ) = 0; // change the title of an UGC item
+ virtual bool SetItemDescription( UGCUpdateHandle_t handle, const char *pchDescription ) = 0; // change the description of an UGC item
+ virtual bool SetItemMetadata( UGCUpdateHandle_t handle, const char *pchMetaData ) = 0; // change the metadata of an UGC item (max = k_cchDeveloperMetadataMax)
+ virtual bool SetItemVisibility( UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item
+ virtual bool SetItemTags( UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item
+ virtual bool SetItemContent( UGCUpdateHandle_t handle, const char *pszContentFolder ) = 0; // update item content from this local folder
+ virtual bool SetItemPreview( UGCUpdateHandle_t handle, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file, which must be under 1MB in size
+
+ virtual SteamAPICall_t SubmitItemUpdate( UGCUpdateHandle_t handle, const char *pchChangeNote ) = 0; // commit update process started with StartItemUpdate()
+ virtual EItemUpdateStatus GetItemUpdateProgress( UGCUpdateHandle_t handle, uint64 *punBytesProcessed, uint64* punBytesTotal ) = 0;
+
+ // Steam Workshop Consumer API
+ virtual SteamAPICall_t AddItemToFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ virtual SteamAPICall_t RemoveItemFromFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ virtual SteamAPICall_t SubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // subscribe to this item, will be installed ASAP
+ virtual SteamAPICall_t UnsubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // unsubscribe from this item, will be uninstalled after game quits
+ virtual uint32 GetNumSubscribedItems() = 0; // number of subscribed items
+ virtual uint32 GetSubscribedItems( PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; // all subscribed item PublishFileIDs
+
+ // get EItemState flags about item on this client
+ virtual uint32 GetItemState( PublishedFileId_t nPublishedFileID ) = 0;
+
+ // get info about currently installed content on disc for items that have k_EItemStateInstalled set
+ // if k_EItemStateLegacyItem is set, pchFolder contains the path to the legacy file itself (not a folder)
+ virtual bool GetItemInstallInfo( PublishedFileId_t nPublishedFileID, uint64 *punSizeOnDisk, char *pchFolder, uint32 cchFolderSize, uint32 *punTimeStamp ) = 0;
+
+ // get info about pending update for items that have k_EItemStateNeedsUpdate set. punBytesTotal will be valid after download started once
+ virtual bool GetItemDownloadInfo( PublishedFileId_t nPublishedFileID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // download new or update already installed item. If function returns true, wait for DownloadItemResult_t. If the item is already installed,
+ // then files on disk should not be used until callback received. If item is not subscribed to, it will be cached for some time.
+ // If bHighPriority is set, any other item download will be suspended and this item downloaded ASAP.
+ virtual bool DownloadItem( PublishedFileId_t nPublishedFileID, bool bHighPriority ) = 0;
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION005"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::CreateItem()
+//-----------------------------------------------------------------------------
+struct CreateItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 3 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId; // new item got this UGC PublishFileID
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::SubmitItemUpdate()
+//-----------------------------------------------------------------------------
+struct SubmitItemUpdateResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 4 };
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a Workshop item has been installed or updated
+//-----------------------------------------------------------------------------
+struct ItemInstalled_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 5 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of DownloadItem(), existing item files can be accessed again
+//-----------------------------------------------------------------------------
+struct DownloadItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 6 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: result of AddItemToFavorites() or RemoveItemFromFavorites()
+//-----------------------------------------------------------------------------
+struct UserFavoriteItemsListChanged_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 7 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bWasAddRequest;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_133/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_133/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_133/isteamuser.h b/lsteamclient/steamworks_sdk_133/isteamuser.h
new file mode 100644
index 00000000..efdd6677
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamuser.h
@@ -0,0 +1,379 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+ // Requests a URL which authenticates an in-game browser for store check-out,
+ // and then redirects to the specified URL. As long as the in-game browser
+ // accepts and handles session cookies, Steam microtransaction checkout pages
+ // will automatically recognize the user instead of presenting a login page.
+ // The result of this API call will be a StoreAuthURLResponse_t callback.
+ // NOTE: The URL has a very short lifetime to prevent history-snooping attacks,
+ // so you should only call this API when you are about to launch the browser,
+ // or else immediately navigate to the result URL using a hidden browser window.
+ // NOTE 2: The resulting authorization cookie has an expiration time of one day,
+ // so it would be a good idea to request and visit a new auth URL every 12 hours.
+ virtual SteamAPICall_t RequestStoreAuthURL( const char *pchRedirectURL ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser018"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Signaled whenever licenses change
+//-----------------------------------------------------------------------------
+struct LicensesUpdated_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 25 };
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to ISteamUser::RequestStoreAuthURL
+//-----------------------------------------------------------------------------
+struct StoreAuthURLResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 65 };
+ char m_szURL[512];
+};
+
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_133/isteamuserstats.h b/lsteamclient/steamworks_sdk_133/isteamuserstats.h
new file mode 100644
index 00000000..8c0c210d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamuserstats.h
@@ -0,0 +1,465 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ METHOD_DESC(Downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers)
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard,
+ ARRAY_COUNT_D(cUsers, Array of users to retrieve) CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_133/isteamutils.h b/lsteamclient/steamworks_sdk_133/isteamutils.h
new file mode 100644
index 00000000..2e302b9e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamutils.h
@@ -0,0 +1,307 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils007"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_133/isteamvideo.h b/lsteamclient/steamworks_sdk_133/isteamvideo.h
new file mode 100644
index 00000000..4431b4a1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/isteamvideo.h
@@ -0,0 +1,60 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Video
+//
+//=============================================================================
+
+#ifndef ISTEAMVIDEO_H
+#define ISTEAMVIDEO_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Video API
+//-----------------------------------------------------------------------------
+class ISteamVideo
+{
+public:
+
+ // Get a URL suitable for streaming the given Video app ID's video
+ virtual void GetVideoURL( AppId_t unVideoAppID ) = 0;
+
+ // returns true if user is uploading a live broadcast
+ virtual bool IsBroadcasting( int *pnNumViewers ) = 0;
+};
+
+#define STEAMVIDEO_INTERFACE_VERSION "STEAMVIDEO_INTERFACE_V001"
+
+DEFINE_CALLBACK( BroadcastUploadStart_t, k_iClientVideoCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( BroadcastUploadStop_t, k_iClientVideoCallbacks + 5 )
+ CALLBACK_MEMBER( 0, EBroadcastUploadResult, m_eResult )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( GetVideoURLResult_t, k_iClientVideoCallbacks + 11 )
+ CALLBACK_MEMBER( 0, EResult, m_eResult )
+ CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID )
+ CALLBACK_MEMBER( 2, char, m_rgchURL[256] )
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMVIDEO_H
diff --git a/lsteamclient/steamworks_sdk_133/matchmakingtypes.h b/lsteamclient/steamworks_sdk_133/matchmakingtypes.h
new file mode 100644
index 00000000..28c58500
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/matchmakingtypes.h
@@ -0,0 +1,249 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_133/steam_api.h b/lsteamclient/steamworks_sdk_133/steam_api.h
new file mode 100644
index 00000000..7c937109
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/steam_api.h
@@ -0,0 +1,604 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteammusicremote.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+#include "isteamhtmlsurface.h"
+#include "isteaminventory.h"
+#include "isteamvideo.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *S_CALLTYPE SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool S_CALLTYPE SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool S_CALLTYPE SteamAPI_Init();
+#endif
+
+S_API ISteamUser *S_CALLTYPE SteamUser();
+S_API ISteamFriends *S_CALLTYPE SteamFriends();
+S_API ISteamUtils *S_CALLTYPE SteamUtils();
+S_API ISteamMatchmaking *S_CALLTYPE SteamMatchmaking();
+S_API ISteamUserStats *S_CALLTYPE SteamUserStats();
+S_API ISteamApps *S_CALLTYPE SteamApps();
+S_API ISteamNetworking *S_CALLTYPE SteamNetworking();
+S_API ISteamMatchmakingServers *S_CALLTYPE SteamMatchmakingServers();
+S_API ISteamRemoteStorage *S_CALLTYPE SteamRemoteStorage();
+S_API ISteamScreenshots *S_CALLTYPE SteamScreenshots();
+S_API ISteamHTTP *S_CALLTYPE SteamHTTP();
+S_API ISteamUnifiedMessages *S_CALLTYPE SteamUnifiedMessages();
+S_API ISteamController *S_CALLTYPE SteamController();
+S_API ISteamUGC *S_CALLTYPE SteamUGC();
+S_API ISteamAppList *S_CALLTYPE SteamAppList();
+S_API ISteamMusic *S_CALLTYPE SteamMusic();
+S_API ISteamMusicRemote *S_CALLTYPE SteamMusicRemote();
+S_API ISteamHTMLSurface *S_CALLTYPE SteamHTMLSurface();
+S_API ISteamInventory *S_CALLTYPE SteamInventory();
+S_API ISteamVideo *S_CALLTYPE SteamVideo();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender *S_CALLTYPE SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() { return m_pController; }
+ ISteamUGC* SteamUGC() { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() { return m_pSteamMusic; }
+ ISteamMusicRemote* SteamMusicRemote() { return m_pSteamMusicRemote; }
+ ISteamHTMLSurface* SteamHTMLSurface() { return m_pSteamHTMLSurface; }
+ ISteamInventory* SteamInventory() { return m_pSteamInventory; }
+ ISteamVideo* SteamVideo() { return m_pSteamVideo; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+ ISteamMusicRemote *m_pSteamMusicRemote;
+ ISteamHTMLSurface *m_pSteamHTMLSurface;
+ ISteamInventory *m_pSteamInventory;
+ ISteamVideo *m_pSteamVideo;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamMusicRemote= NULL;
+ m_pSteamHTMLSurface = NULL;
+ m_pSteamInventory = NULL;
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = NULL;
+#endif
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = SteamClient()->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = SteamClient()->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = SteamClient()->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = SteamClient()->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ {
+ return false;
+ }
+
+ m_pSteamMusicRemote = SteamClient()->GetISteamMusicRemote( hSteamUser, hSteamPipe, STEAMMUSICREMOTE_INTERFACE_VERSION );
+ if ( !m_pSteamMusicRemote )
+ {
+ return false;
+ }
+
+ m_pSteamHTMLSurface = SteamClient()->GetISteamHTMLSurface( hSteamUser, hSteamPipe, STEAMHTMLSURFACE_INTERFACE_VERSION );
+ if ( !m_pSteamHTMLSurface )
+ {
+ return false;
+ }
+
+ m_pSteamInventory = SteamClient()->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ {
+ return false;
+ }
+
+ m_pSteamVideo = SteamClient()->GetISteamVideo( hSteamUser, hSteamPipe, STEAMVIDEO_INTERFACE_VERSION );
+ if ( !m_pSteamVideo )
+ {
+ return false;
+ }
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_133/steam_api_flat.h b/lsteamclient/steamworks_sdk_133/steam_api_flat.h
new file mode 100644
index 00000000..a6b4cc21
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/steam_api_flat.h
@@ -0,0 +1,693 @@
+//====== Copyright (c) 1996-2014, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Header for flatted SteamAPI. Use this for binding to other languages.
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+#ifndef STEAMAPIFLAT_H
+#define STEAMAPIFLAT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <stdint.h>
+#include "steam/steamvr.h"
+
+
+S_API HSteamPipe SteamAPI_ISteamClient_CreateSteamPipe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamClient_BReleaseSteamPipe(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_ConnectToGlobalUser(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_CreateLocalUser(intptr_t instancePtr, HSteamPipe * phSteamPipe, EAccountType eAccountType);
+S_API void SteamAPI_ISteamClient_ReleaseUser(intptr_t instancePtr, HSteamPipe hSteamPipe, HSteamUser hUser);
+S_API class ISteamUser * SteamAPI_ISteamClient_GetISteamUser(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServer * SteamAPI_ISteamClient_GetISteamGameServer(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_SetLocalIPBinding(intptr_t instancePtr, uint32 unIP, uint16 usPort);
+S_API class ISteamFriends * SteamAPI_ISteamClient_GetISteamFriends(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUtils * SteamAPI_ISteamClient_GetISteamUtils(intptr_t instancePtr, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmaking * SteamAPI_ISteamClient_GetISteamMatchmaking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmakingServers * SteamAPI_ISteamClient_GetISteamMatchmakingServers(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void * SteamAPI_ISteamClient_GetISteamGenericInterface(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUserStats * SteamAPI_ISteamClient_GetISteamUserStats(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServerStats * SteamAPI_ISteamClient_GetISteamGameServerStats(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamApps * SteamAPI_ISteamClient_GetISteamApps(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamNetworking * SteamAPI_ISteamClient_GetISteamNetworking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamRemoteStorage * SteamAPI_ISteamClient_GetISteamRemoteStorage(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamScreenshots * SteamAPI_ISteamClient_GetISteamScreenshots(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_RunFrame(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamClient_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamClient_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(intptr_t instancePtr);
+S_API class ISteamHTTP * SteamAPI_ISteamClient_GetISteamHTTP(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUnifiedMessages * SteamAPI_ISteamClient_GetISteamUnifiedMessages(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamController * SteamAPI_ISteamClient_GetISteamController(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUGC * SteamAPI_ISteamClient_GetISteamUGC(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamAppList * SteamAPI_ISteamClient_GetISteamAppList(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusic * SteamAPI_ISteamClient_GetISteamMusic(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusicRemote * SteamAPI_ISteamClient_GetISteamMusicRemote(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamHTMLSurface * SteamAPI_ISteamClient_GetISteamHTMLSurface(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_Set_SteamAPI_CPostAPIResultInProcess(intptr_t instancePtr, SteamAPI_PostAPIResultInProcess_t func);
+S_API void SteamAPI_ISteamClient_Remove_SteamAPI_CPostAPIResultInProcess(intptr_t instancePtr, SteamAPI_PostAPIResultInProcess_t func);
+S_API void SteamAPI_ISteamClient_Set_SteamAPI_CCheckCallbackRegisteredInProcess(intptr_t instancePtr, SteamAPI_CheckCallbackRegistered_t func);
+S_API class ISteamInventory * SteamAPI_ISteamClient_GetISteamInventory(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamVideo * SteamAPI_ISteamClient_GetISteamVideo(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API HSteamUser SteamAPI_ISteamUser_GetHSteamUser(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BLoggedOn(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamUser_GetSteamID(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUser_InitiateGameConnection(intptr_t instancePtr, void * pAuthBlob, int cbMaxAuthBlob, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure);
+S_API void SteamAPI_ISteamUser_TerminateGameConnection(intptr_t instancePtr, uint32 unIPServer, uint16 usPortServer);
+S_API void SteamAPI_ISteamUser_TrackAppUsageEvent(intptr_t instancePtr, class CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo);
+S_API bool SteamAPI_ISteamUser_GetUserDataFolder(intptr_t instancePtr, char * pchBuffer, int cubBuffer);
+S_API void SteamAPI_ISteamUser_StartVoiceRecording(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_StopVoiceRecording(intptr_t instancePtr);
+S_API EVoiceResult SteamAPI_ISteamUser_GetAvailableVoice(intptr_t instancePtr, uint32 * pcbCompressed, uint32 * pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_GetVoice(intptr_t instancePtr, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_DecompressVoice(intptr_t instancePtr, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate);
+S_API uint32 SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(intptr_t instancePtr);
+S_API HAuthTicket SteamAPI_ISteamUser_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamUser_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamUser_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamUser_BIsBehindNAT(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_AdvertiseGame(intptr_t instancePtr, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestEncryptedAppTicket(intptr_t instancePtr, void * pDataToInclude, int cbDataToInclude);
+S_API bool SteamAPI_ISteamUser_GetEncryptedAppTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API int SteamAPI_ISteamUser_GetGameBadgeLevel(intptr_t instancePtr, int nSeries, bool bFoil);
+S_API int SteamAPI_ISteamUser_GetPlayerSteamLevel(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestStoreAuthURL(intptr_t instancePtr, const char * pchRedirectURL);
+S_API const char * SteamAPI_ISteamFriends_GetPersonaName(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_SetPersonaName(intptr_t instancePtr, const char * pchPersonaName);
+S_API EPersonaState SteamAPI_ISteamFriends_GetPersonaState(intptr_t instancePtr);
+S_API int SteamAPI_ISteamFriends_GetFriendCount(intptr_t instancePtr, int iFriendFlags);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendByIndex(intptr_t instancePtr, int iFriend, int iFriendFlags);
+S_API EFriendRelationship SteamAPI_ISteamFriends_GetFriendRelationship(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API EPersonaState SteamAPI_ISteamFriends_GetFriendPersonaState(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaName(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_GetFriendGamePlayed(intptr_t instancePtr, class CSteamID steamIDFriend, struct FriendGameInfo_t * pFriendGameInfo);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(intptr_t instancePtr, class CSteamID steamIDFriend, int iPersonaName);
+S_API int SteamAPI_ISteamFriends_GetFriendSteamLevel(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetPlayerNickname(intptr_t instancePtr, class CSteamID steamIDPlayer);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupCount(intptr_t instancePtr);
+S_API FriendsGroupID_t SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(intptr_t instancePtr, int iFG);
+S_API const char * SteamAPI_ISteamFriends_GetFriendsGroupName(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API void SteamAPI_ISteamFriends_GetFriendsGroupMembersList(intptr_t instancePtr, FriendsGroupID_t friendsGroupID, class CSteamID * pOutSteamIDMembers, int nMembersCount);
+S_API bool SteamAPI_ISteamFriends_HasFriend(intptr_t instancePtr, class CSteamID steamIDFriend, int iFriendFlags);
+S_API int SteamAPI_ISteamFriends_GetClanCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetClanByIndex(intptr_t instancePtr, int iClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanName(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanTag(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_GetClanActivityCounts(intptr_t instancePtr, class CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_DownloadClanActivityCounts(intptr_t instancePtr, class CSteamID * psteamIDClans, int cClansToRequest);
+S_API int SteamAPI_ISteamFriends_GetFriendCountFromSource(intptr_t instancePtr, class CSteamID steamIDSource);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(intptr_t instancePtr, class CSteamID steamIDSource, int iFriend);
+S_API bool SteamAPI_ISteamFriends_IsUserInSource(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDSource);
+S_API void SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(intptr_t instancePtr, class CSteamID steamIDUser, bool bSpeaking);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlay(intptr_t instancePtr, const char * pchDialog);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToUser(intptr_t instancePtr, const char * pchDialog, class CSteamID steamID);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(intptr_t instancePtr, const char * pchURL);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToStore(intptr_t instancePtr, AppId_t nAppID, EOverlayToStoreFlag eFlag);
+S_API void SteamAPI_ISteamFriends_SetPlayedWith(intptr_t instancePtr, class CSteamID steamIDUserPlayedWith);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API int SteamAPI_ISteamFriends_GetSmallFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetMediumFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetLargeFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_RequestUserInformation(intptr_t instancePtr, class CSteamID steamIDUser, bool bRequireNameOnly);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_RequestClanOfficerList(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOwner(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanOfficerCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOfficerByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iOfficer);
+S_API uint32 SteamAPI_ISteamFriends_GetUserRestrictions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamFriends_SetRichPresence(intptr_t instancePtr, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamFriends_ClearRichPresence(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchKey);
+S_API int SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(intptr_t instancePtr, class CSteamID steamIDFriend, int iKey);
+S_API void SteamAPI_ISteamFriends_RequestFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_InviteUserToGame(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchConnectString);
+S_API int SteamAPI_ISteamFriends_GetCoplayFriendCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetCoplayFriend(intptr_t instancePtr, int iCoplayFriend);
+S_API int SteamAPI_ISteamFriends_GetFriendCoplayTime(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API AppId_t SteamAPI_ISteamFriends_GetFriendCoplayGame(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_JoinClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_LeaveClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanChatMemberCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetChatMemberByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iUser);
+S_API bool SteamAPI_ISteamFriends_SendClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, const char * pchText);
+S_API int SteamAPI_ISteamFriends_GetClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, class CSteamID * psteamidChatter);
+S_API bool SteamAPI_ISteamFriends_IsClanChatAdmin(intptr_t instancePtr, class CSteamID steamIDClanChat, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_SetListenForFriendsMessages(intptr_t instancePtr, bool bInterceptEnabled);
+S_API bool SteamAPI_ISteamFriends_ReplyToFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchMsgToSend);
+S_API int SteamAPI_ISteamFriends_GetFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_GetFollowerCount(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_IsFollowing(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_EnumerateFollowingList(intptr_t instancePtr, uint32 unStartIndex);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceAppActive(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(intptr_t instancePtr);
+S_API EUniverse SteamAPI_ISteamUtils_GetConnectedUniverse(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetServerRealTime(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUtils_GetIPCountry(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetImageSize(intptr_t instancePtr, int iImage, uint32 * pnWidth, uint32 * pnHeight);
+S_API bool SteamAPI_ISteamUtils_GetImageRGBA(intptr_t instancePtr, int iImage, uint8 * pubDest, int nDestBufferSize);
+S_API bool SteamAPI_ISteamUtils_GetCSERIPPort(intptr_t instancePtr, uint32 * unIP, uint16 * usPort);
+S_API uint8 SteamAPI_ISteamUtils_GetCurrentBatteryPower(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetAppID(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationPosition(intptr_t instancePtr, ENotificationPosition eNotificationPosition);
+S_API bool SteamAPI_ISteamUtils_IsAPICallCompleted(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, bool * pbFailed);
+S_API ESteamAPICallFailure SteamAPI_ISteamUtils_GetAPICallFailureReason(intptr_t instancePtr, SteamAPICall_t hSteamAPICall);
+S_API bool SteamAPI_ISteamUtils_GetAPICallResult(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed);
+S_API void SteamAPI_ISteamUtils_RunFrame(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamUtils_IsOverlayEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_BOverlayNeedsPresent(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUtils_CheckFileSignature(intptr_t instancePtr, const char * szFileName);
+S_API bool SteamAPI_ISteamUtils_ShowGamepadTextInput(intptr_t instancePtr, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText);
+S_API uint32 SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(intptr_t instancePtr, char * pchText, uint32 cchText);
+S_API const char * SteamAPI_ISteamUtils_GetSteamUILanguage(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_IsSteamRunningInVR(intptr_t instancePtr);
+S_API int SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMatchmaking_GetFavoriteGame(intptr_t instancePtr, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer);
+S_API int SteamAPI_ISteamMatchmaking_AddFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer);
+S_API bool SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_RequestLobbyList(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(intptr_t instancePtr, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToBeCloseTo);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(intptr_t instancePtr, int nSlotsAvailable);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(intptr_t instancePtr, ELobbyDistanceFilter eLobbyDistanceFilter);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(intptr_t instancePtr, int cMaxResults);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyByIndex(intptr_t instancePtr, int iLobby);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_CreateLobby(intptr_t instancePtr, ELobbyType eLobbyType, int cMaxMembers);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_JoinLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_LeaveLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_InviteUserToLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDInvitee);
+S_API int SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iMember);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyDataCount(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize);
+S_API bool SteamAPI_ISteamMatchmaking_DeleteLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDUser, const char * pchKey);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(intptr_t instancePtr, class CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(intptr_t instancePtr, class CSteamID steamIDLobby, int iChatID, class CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API bool SteamAPI_ISteamMatchmaking_RequestLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, class CSteamID steamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, class CSteamID * psteamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby, int cMaxMembers);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyType(intptr_t instancePtr, class CSteamID steamIDLobby, ELobbyType eLobbyType);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyJoinable(intptr_t instancePtr, class CSteamID steamIDLobby, bool bLobbyJoinable);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDNewOwner);
+S_API bool SteamAPI_ISteamMatchmaking_SetLinkedLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDLobbyDependent);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(intptr_t instancePtr, HServerListRequest hRequest, EMatchMakingServerResponse response);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(intptr_t instancePtr, class gameserveritem_t & server);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(intptr_t instancePtr, const char * pchName, int nScore, float flTimePlayed);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(intptr_t instancePtr, const char * pchRule, const char * pchValue);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(intptr_t instancePtr);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestLANServerList(intptr_t instancePtr, AppId_t iApp, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_ReleaseRequest(intptr_t instancePtr, HServerListRequest hServerListRequest);
+S_API class gameserveritem_t * SteamAPI_ISteamMatchmakingServers_GetServerDetails(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API bool SteamAPI_ISteamMatchmakingServers_IsRefreshing(intptr_t instancePtr, HServerListRequest hRequest);
+S_API int SteamAPI_ISteamMatchmakingServers_GetServerCount(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshServer(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PingServer(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPingResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PlayerDetails(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPlayersResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_ServerRules(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingRulesResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelServerQuery(intptr_t instancePtr, HServerQuery hServerQuery);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWrite(intptr_t instancePtr, const char * pchFile, const void * pvData, int32 cubData);
+S_API int32 SteamAPI_ISteamRemoteStorage_FileRead(intptr_t instancePtr, const char * pchFile, void * pvData, int32 cubDataToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileForget(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileDelete(intptr_t instancePtr, const char * pchFile);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileShare(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(intptr_t instancePtr, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform);
+S_API UGCFileWriteStreamHandle_t SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileExists(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FilePersisted(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileSize(intptr_t instancePtr, const char * pchFile);
+S_API int64 SteamAPI_ISteamRemoteStorage_GetFileTimestamp(intptr_t instancePtr, const char * pchFile);
+S_API ERemoteStoragePlatform SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileCount(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(intptr_t instancePtr, int iFile, int32 * pnFileSizeInBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_GetQuota(intptr_t instancePtr, int32 * pnTotalBytes, int32 * puAvailableBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(intptr_t instancePtr);
+S_API void SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(intptr_t instancePtr, bool bEnabled);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownload(intptr_t instancePtr, UGCHandle_t hContent, uint32 unPriority);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(intptr_t instancePtr, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDetails(intptr_t instancePtr, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, class CSteamID * pSteamIDOwner);
+S_API int32 SteamAPI_ISteamRemoteStorage_UGCRead(intptr_t instancePtr, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(intptr_t instancePtr);
+S_API UGCHandle_t SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(intptr_t instancePtr, int32 iCachedContent);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(intptr_t instancePtr, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType);
+S_API PublishedFileUpdateHandle_t SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_DeletePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(intptr_t instancePtr, class CSteamID steamId, uint32 unStartIndex, struct SteamParamStringArray_t * pRequiredTags, struct SteamParamStringArray_t * pExcludedTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishVideo(intptr_t instancePtr, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(intptr_t instancePtr, EWorkshopFileAction eAction, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(intptr_t instancePtr, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, struct SteamParamStringArray_t * pTags, struct SteamParamStringArray_t * pUserTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(intptr_t instancePtr, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority);
+S_API bool SteamAPI_ISteamUserStats_RequestCurrentStats(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUserStats_GetStat(intptr_t instancePtr, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetStat0(intptr_t instancePtr, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_SetStat(intptr_t instancePtr, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamUserStats_SetStat0(intptr_t instancePtr, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamUserStats_UpdateAvgRateStat(intptr_t instancePtr, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamUserStats_GetAchievement(intptr_t instancePtr, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_SetAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_ClearAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(intptr_t instancePtr, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_StoreStats(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetAchievementIcon(intptr_t instancePtr, const char * pchName);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(intptr_t instancePtr, const char * pchName, const char * pchKey);
+S_API bool SteamAPI_ISteamUserStats_IndicateAchievementProgress(intptr_t instancePtr, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress);
+S_API uint32 SteamAPI_ISteamUserStats_GetNumAchievements(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementName(intptr_t instancePtr, uint32 iAchievement);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_ResetAllStats(intptr_t instancePtr, bool bAchievementsToo);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName);
+S_API const char * SteamAPI_ISteamUserStats_GetLeaderboardName(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API int SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardSortMethod SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardDisplayType SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, class CSteamID * prgUsers, int cUsers);
+S_API bool SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(intptr_t instancePtr, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, struct LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_UploadLeaderboardScore(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_AttachLeaderboardUGC(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(intptr_t instancePtr, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API int SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(intptr_t instancePtr, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(intptr_t instancePtr, const char * pchName, float * pflPercent);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalStats(intptr_t instancePtr, int nHistoryDays);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat(intptr_t instancePtr, const char * pchStatName, int64 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat0(intptr_t instancePtr, const char * pchStatName, double * pData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory(intptr_t instancePtr, const char * pchStatName, int64 * pData, uint32 cubData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory0(intptr_t instancePtr, const char * pchStatName, double * pData, uint32 cubData);
+S_API bool SteamAPI_ISteamApps_BIsSubscribed(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsLowViolence(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsCybercafe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsVACBanned(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetCurrentGameLanguage(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetAvailableGameLanguages(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedApp(intptr_t instancePtr, AppId_t appID);
+S_API bool SteamAPI_ISteamApps_BIsDlcInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint32 SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(intptr_t instancePtr);
+S_API int SteamAPI_ISteamApps_GetDLCCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BGetDLCDataByIndex(intptr_t instancePtr, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize);
+S_API void SteamAPI_ISteamApps_InstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_UninstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_GetCurrentBetaName(intptr_t instancePtr, char * pchName, int cchNameBufferSize);
+S_API bool SteamAPI_ISteamApps_MarkContentCorrupt(intptr_t instancePtr, bool bMissingFilesOnly);
+S_API uint32 SteamAPI_ISteamApps_GetInstalledDepots(intptr_t instancePtr, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots);
+S_API uint32 SteamAPI_ISteamApps_GetAppInstallDir(intptr_t instancePtr, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize);
+S_API bool SteamAPI_ISteamApps_BIsAppInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint64 SteamAPI_ISteamApps_GetAppOwner(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetLaunchQueryParam(intptr_t instancePtr, const char * pchKey);
+S_API bool SteamAPI_ISteamApps_GetDlcDownloadProgress(intptr_t instancePtr, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API int SteamAPI_ISteamApps_GetAppBuildId(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamNetworking_SendP2PPacket(intptr_t instancePtr, class CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_IsP2PPacketAvailable(intptr_t instancePtr, uint32 * pcubMsgSize, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_ReadP2PPacket(intptr_t instancePtr, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, class CSteamID * psteamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(intptr_t instancePtr, class CSteamID steamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_GetP2PSessionState(intptr_t instancePtr, class CSteamID steamIDRemote, struct P2PSessionState_t * pConnectionState);
+S_API bool SteamAPI_ISteamNetworking_AllowP2PPacketRelay(intptr_t instancePtr, bool bAllow);
+S_API SNetListenSocket_t SteamAPI_ISteamNetworking_CreateListenSocket(intptr_t instancePtr, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(intptr_t instancePtr, class CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateConnectionSocket(intptr_t instancePtr, uint32 nIP, uint16 nPort, int nTimeoutSec);
+S_API bool SteamAPI_ISteamNetworking_DestroySocket(intptr_t instancePtr, SNetSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_DestroyListenSocket(intptr_t instancePtr, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_SendDataOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_RetrieveDataFromSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailable(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_RetrieveData(intptr_t instancePtr, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_GetSocketInfo(intptr_t instancePtr, SNetSocket_t hSocket, class CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote);
+S_API bool SteamAPI_ISteamNetworking_GetListenSocketInfo(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort);
+S_API ESNetSocketConnectionType SteamAPI_ISteamNetworking_GetSocketConnectionType(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API int SteamAPI_ISteamNetworking_GetMaxPacketSize(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_WriteScreenshot(intptr_t instancePtr, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(intptr_t instancePtr, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight);
+S_API void SteamAPI_ISteamScreenshots_TriggerScreenshot(intptr_t instancePtr);
+S_API void SteamAPI_ISteamScreenshots_HookScreenshots(intptr_t instancePtr, bool bHook);
+S_API bool SteamAPI_ISteamScreenshots_SetLocation(intptr_t instancePtr, ScreenshotHandle hScreenshot, const char * pchLocation);
+S_API bool SteamAPI_ISteamScreenshots_TagUser(intptr_t instancePtr, ScreenshotHandle hScreenshot, class CSteamID steamID);
+S_API bool SteamAPI_ISteamScreenshots_TagPublishedFile(intptr_t instancePtr, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID);
+S_API bool SteamAPI_ISteamMusic_BIsEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusic_BIsPlaying(intptr_t instancePtr);
+S_API AudioPlayback_Status SteamAPI_ISteamMusic_GetPlaybackStatus(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Play(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Pause(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayPrevious(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayNext(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_SetVolume(intptr_t instancePtr, float flVolume);
+S_API float SteamAPI_ISteamMusic_GetVolume(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BActivationSuccess(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_SetDisplayName(intptr_t instancePtr, const char * pchDisplayName);
+S_API bool SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayPrevious(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayNext(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableQueue(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlaylists(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(intptr_t instancePtr, AudioPlayback_Status nStatus);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateVolume(intptr_t instancePtr, float flValue);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(intptr_t instancePtr, bool bAvailable);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(intptr_t instancePtr, const char * pchText);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(intptr_t instancePtr, int nValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_QueueWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetQueueEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetQueueEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_QueueDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetPlaylistEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistDidChange(intptr_t instancePtr);
+S_API HTTPRequestHandle SteamAPI_ISteamHTTP_CreateHTTPRequest(intptr_t instancePtr, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(intptr_t instancePtr, HTTPRequestHandle hRequest, uint64 ulContextValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_DeferHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 * unBodySize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 cOffset, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_ReleaseHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(intptr_t instancePtr, HTTPRequestHandle hRequest, float * pflPercentOut);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen);
+S_API HTTPCookieContainerHandle SteamAPI_ISteamHTTP_CreateCookieContainer(intptr_t instancePtr, bool bAllowResponsesToModify);
+S_API bool SteamAPI_ISteamHTTP_ReleaseCookieContainer(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetCookie(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer, const char * pchHost, const char * pchUrl, const char * pchCookie);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(intptr_t instancePtr, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchUserAgentInfo);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(intptr_t instancePtr, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unMilliseconds);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(intptr_t instancePtr, HTTPRequestHandle hRequest, bool * pbWasTimedOut);
+S_API ClientUnifiedMessageHandle SteamAPI_ISteamUnifiedMessages_SendMethod(intptr_t instancePtr, const char * pchServiceMethod, const void * pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, uint32 * punResponseSize, EResult * peResult);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseData(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, void * pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease);
+S_API bool SteamAPI_ISteamUnifiedMessages_ReleaseMethod(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle);
+S_API bool SteamAPI_ISteamUnifiedMessages_SendNotification(intptr_t instancePtr, const char * pchServiceNotification, const void * pNotificationBuffer, uint32 unNotificationBufferSize);
+S_API bool SteamAPI_ISteamController_Init(intptr_t instancePtr, const char * pchAbsolutePathToControllerConfigVDF);
+S_API bool SteamAPI_ISteamController_Shutdown(intptr_t instancePtr);
+S_API void SteamAPI_ISteamController_RunFrame(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamController_GetControllerState(intptr_t instancePtr, uint32 unControllerIndex, struct SteamControllerState001_t * pState);
+S_API void SteamAPI_ISteamController_TriggerHapticPulse(intptr_t instancePtr, uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec);
+S_API void SteamAPI_ISteamController_SetOverrideMode(intptr_t instancePtr, const char * pchMode);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(intptr_t instancePtr, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(intptr_t instancePtr, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SendQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCResult(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, struct SteamUGCDetails_t * pDetails);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCPreviewURL(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCChildren(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCStatistic(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 * pStatValue);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, bool * pbIsImage);
+S_API bool SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_AddRequiredTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_AddExcludedTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_SetReturnLongDescription(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnLongDescription);
+S_API bool SteamAPI_ISteamUGC_SetReturnMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnMetadata);
+S_API bool SteamAPI_ISteamUGC_SetReturnChildren(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnChildren);
+S_API bool SteamAPI_ISteamUGC_SetReturnAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews);
+S_API bool SteamAPI_ISteamUGC_SetReturnTotalOnly(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnTotalOnly);
+S_API bool SteamAPI_ISteamUGC_SetAllowCachedResponse(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds);
+S_API bool SteamAPI_ISteamUGC_SetCloudFileNameFilter(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pMatchCloudFileName);
+S_API bool SteamAPI_ISteamUGC_SetMatchAnyTag(intptr_t instancePtr, UGCQueryHandle_t handle, bool bMatchAnyTag);
+S_API bool SteamAPI_ISteamUGC_SetSearchText(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pSearchText);
+S_API bool SteamAPI_ISteamUGC_SetRankedByTrendDays(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unDays);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RequestUGCDetails(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_CreateItem(intptr_t instancePtr, AppId_t nConsumerAppId, EWorkshopFileType eFileType);
+S_API UGCUpdateHandle_t SteamAPI_ISteamUGC_StartItemUpdate(intptr_t instancePtr, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_SetItemTitle(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchTitle);
+S_API bool SteamAPI_ISteamUGC_SetItemDescription(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchDescription);
+S_API bool SteamAPI_ISteamUGC_SetItemMetadata(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchMetaData);
+S_API bool SteamAPI_ISteamUGC_SetItemVisibility(intptr_t instancePtr, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamUGC_SetItemTags(intptr_t instancePtr, UGCUpdateHandle_t updateHandle, const struct SteamParamStringArray_t * pTags);
+S_API bool SteamAPI_ISteamUGC_SetItemContent(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszContentFolder);
+S_API bool SteamAPI_ISteamUGC_SetItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubmitItemUpdate(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchChangeNote);
+S_API EItemUpdateStatus SteamAPI_ISteamUGC_GetItemUpdateProgress(intptr_t instancePtr, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddItemToFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveItemFromFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_UnsubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API uint32 SteamAPI_ISteamUGC_GetNumSubscribedItems(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUGC_GetSubscribedItems(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API uint32 SteamAPI_ISteamUGC_GetItemState(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_GetItemInstallInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp);
+S_API bool SteamAPI_ISteamUGC_GetItemDownloadInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API bool SteamAPI_ISteamUGC_DownloadItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bHighPriority);
+S_API uint32 SteamAPI_ISteamAppList_GetNumInstalledApps(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamAppList_GetInstalledApps(intptr_t instancePtr, AppId_t * pvecAppID, uint32 unMaxAppIDs);
+S_API int SteamAPI_ISteamAppList_GetAppName(intptr_t instancePtr, AppId_t nAppID, char * pchName, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppInstallDir(intptr_t instancePtr, AppId_t nAppID, char * pchDirectory, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppBuildId(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Shutdown(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamHTMLSurface_CreateBrowser(intptr_t instancePtr, const char * pchUserAgent, const char * pchUserCSS);
+S_API void SteamAPI_ISteamHTMLSurface_RemoveBrowser(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_LoadURL(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData);
+S_API void SteamAPI_ISteamHTMLSurface_SetSize(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight);
+S_API void SteamAPI_ISteamHTMLSurface_StopLoad(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Reload(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoBack(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoForward(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_AddHeader(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamHTMLSurface_ExecuteJavascript(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchScript);
+S_API void SteamAPI_ISteamHTMLSurface_MouseUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDoubleClick(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseMove(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_MouseWheel(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int32 nDelta);
+S_API void SteamAPI_ISteamHTMLSurface_KeyDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyChar(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetVerticalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetKeyFocus(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus);
+S_API void SteamAPI_ISteamHTMLSurface_ViewSource(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_CopyToClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_PasteFromClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Find(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse);
+S_API void SteamAPI_ISteamHTMLSurface_StopFind(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_SetCookie(intptr_t instancePtr, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly);
+S_API void SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY);
+S_API void SteamAPI_ISteamHTMLSurface_AllowStartRequest(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bAllowed);
+S_API void SteamAPI_ISteamHTMLSurface_JSDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bResult);
+S_API void SteamAPI_ISteamHTMLSurface_FileLoadDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char ** pchSelectedFiles);
+S_API EResult SteamAPI_ISteamInventory_GetResultStatus(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetResultItems(intptr_t instancePtr, SteamInventoryResult_t resultHandle, struct SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize);
+S_API uint32 SteamAPI_ISteamInventory_GetResultTimestamp(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_CheckResultSteamID(intptr_t instancePtr, SteamInventoryResult_t resultHandle, class CSteamID steamIDExpected);
+S_API void SteamAPI_ISteamInventory_DestroyResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetAllItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_GetItemsByID(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs);
+S_API bool SteamAPI_ISteamInventory_SerializeResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize);
+S_API bool SteamAPI_ISteamInventory_DeserializeResult(intptr_t instancePtr, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE);
+S_API bool SteamAPI_ISteamInventory_GenerateItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_GrantPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_AddPromoItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef);
+S_API bool SteamAPI_ISteamInventory_AddPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_ConsumeItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity);
+S_API bool SteamAPI_ISteamInventory_ExchangeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength);
+S_API bool SteamAPI_ISteamInventory_TransferItemQuantity(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest);
+S_API void SteamAPI_ISteamInventory_SendItemDropHeartbeat(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_TriggerItemDrop(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition);
+S_API bool SteamAPI_ISteamInventory_TradeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, class CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength);
+S_API bool SteamAPI_ISteamInventory_LoadItemDefinitions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionIDs(intptr_t instancePtr, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionProperty(intptr_t instancePtr, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSize);
+S_API void SteamAPI_ISteamVideo_GetVideoURL(intptr_t instancePtr, AppId_t unVideoAppID);
+S_API bool SteamAPI_ISteamVideo_IsBroadcasting(intptr_t instancePtr, int * pnNumViewers);
+S_API void SteamAPI_vr_IVRSystem_GetWindowBounds(intptr_t instancePtr, int32_t * pnX, int32_t * pnY, uint32_t * pnWidth, uint32_t * pnHeight);
+S_API void SteamAPI_vr_IVRSystem_GetRecommendedRenderTargetSize(intptr_t instancePtr, uint32_t * pnWidth, uint32_t * pnHeight);
+S_API void SteamAPI_vr_IVRSystem_GetEyeOutputViewport(intptr_t instancePtr, vr::Hmd_Eye eEye, uint32_t * pnX, uint32_t * pnY, uint32_t * pnWidth, uint32_t * pnHeight);
+S_API struct vr::HmdMatrix44_t SteamAPI_vr_IVRSystem_GetProjectionMatrix(intptr_t instancePtr, vr::Hmd_Eye eEye, float fNearZ, float fFarZ, vr::GraphicsAPIConvention eProjType);
+S_API void SteamAPI_vr_IVRSystem_GetProjectionRaw(intptr_t instancePtr, vr::Hmd_Eye eEye, float * pfLeft, float * pfRight, float * pfTop, float * pfBottom);
+S_API struct vr::DistortionCoordinates_t SteamAPI_vr_IVRSystem_ComputeDistortion(intptr_t instancePtr, vr::Hmd_Eye eEye, float fU, float fV);
+S_API struct vr::HmdMatrix34_t SteamAPI_vr_IVRSystem_GetEyeToHeadTransform(intptr_t instancePtr, vr::Hmd_Eye eEye);
+S_API bool SteamAPI_vr_IVRSystem_GetTimeSinceLastVsync(intptr_t instancePtr, float * pfSecondsSinceLastVsync, uint64_t * pulFrameCounter);
+S_API int32_t SteamAPI_vr_IVRSystem_GetD3D9AdapterIndex(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRSystem_GetDXGIOutputInfo(intptr_t instancePtr, int32_t * pnAdapterIndex, int32_t * pnAdapterOutputIndex);
+S_API void SteamAPI_vr_IVRSystem_AttachToWindow(intptr_t instancePtr, void * hWnd);
+S_API void SteamAPI_vr_IVRSystem_GetDeviceToAbsoluteTrackingPose(intptr_t instancePtr, vr::TrackingUniverseOrigin eOrigin, float fPredictedSecondsToPhotonsFromNow, struct vr::TrackedDevicePose_t * pTrackedDevicePoseArray, uint32_t unTrackedDevicePoseArrayCount);
+S_API void SteamAPI_vr_IVRSystem_ResetSeatedZeroPose(intptr_t instancePtr);
+S_API struct vr::HmdMatrix34_t SteamAPI_vr_IVRSystem_GetSeatedZeroPoseToStandingAbsoluteTrackingPose(intptr_t instancePtr);
+S_API bool SteamAPI_vr_IVRSystem_LoadRenderModel(intptr_t instancePtr, const char * pchRenderModelName, struct vr::RenderModel_t * pRenderModel);
+S_API void SteamAPI_vr_IVRSystem_FreeRenderModel(intptr_t instancePtr, struct vr::RenderModel_t * pRenderModel);
+S_API vr::TrackedDeviceClass SteamAPI_vr_IVRSystem_GetTrackedDeviceClass(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex);
+S_API bool SteamAPI_vr_IVRSystem_IsTrackedDeviceConnected(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex);
+S_API bool SteamAPI_vr_IVRSystem_GetBoolTrackedDeviceProperty(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError * pError);
+S_API float SteamAPI_vr_IVRSystem_GetFloatTrackedDeviceProperty(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError * pError);
+S_API int32_t SteamAPI_vr_IVRSystem_GetInt32TrackedDeviceProperty(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError * pError);
+S_API uint64_t SteamAPI_vr_IVRSystem_GetUint64TrackedDeviceProperty(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError * pError);
+S_API struct vr::HmdMatrix34_t SteamAPI_vr_IVRSystem_GetMatrix34TrackedDeviceProperty(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError * pError);
+S_API uint32_t SteamAPI_vr_IVRSystem_GetStringTrackedDeviceProperty(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex, vr::TrackedDeviceProperty prop, char * pchValue, uint32_t unBufferSize, vr::TrackedPropertyError * pError);
+S_API const char * SteamAPI_vr_IVRSystem_GetPropErrorNameFromEnum(intptr_t instancePtr, vr::TrackedPropertyError error);
+S_API bool SteamAPI_vr_IVRSystem_PollNextEvent(intptr_t instancePtr, struct vr::VREvent_t * pEvent);
+S_API const char * SteamAPI_vr_IVRSystem_GetEventTypeNameFromEnum(intptr_t instancePtr, vr::EVREventType eType);
+S_API struct vr::HiddenAreaMesh_t SteamAPI_vr_IVRSystem_GetHiddenAreaMesh(intptr_t instancePtr, vr::Hmd_Eye eEye);
+S_API vr::ChaperoneCalibrationState SteamAPI_vr_IVRChaperone_GetCalibrationState(intptr_t instancePtr);
+S_API bool SteamAPI_vr_IVRChaperone_GetSoftBoundsInfo(intptr_t instancePtr, struct vr::ChaperoneSoftBoundsInfo_t * pInfo);
+S_API bool SteamAPI_vr_IVRChaperone_GetHardBoundsInfo(intptr_t instancePtr, struct vr::HmdQuad_t * pQuadsBuffer, uint32_t * punQuadsCount);
+S_API bool SteamAPI_vr_IVRChaperone_GetSeatedBoundsInfo(intptr_t instancePtr, struct vr::ChaperoneSeatedBoundsInfo_t * pInfo);
+S_API uint32_t SteamAPI_vr_IVRCompositor_GetLastError(intptr_t instancePtr, char * pchBuffer, uint32_t unBufferSize);
+S_API void SteamAPI_vr_IVRCompositor_SetVSync(intptr_t instancePtr, bool bVSync);
+S_API bool SteamAPI_vr_IVRCompositor_GetVSync(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRCompositor_SetGamma(intptr_t instancePtr, float fGamma);
+S_API float SteamAPI_vr_IVRCompositor_GetGamma(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRCompositor_SetGraphicsDevice(intptr_t instancePtr, vr::Compositor_DeviceType eType, void * pDevice);
+S_API void SteamAPI_vr_IVRCompositor_WaitGetPoses(intptr_t instancePtr, struct vr::TrackedDevicePose_t * pPoseArray, uint32_t unPoseArrayCount);
+S_API void SteamAPI_vr_IVRCompositor_Submit(intptr_t instancePtr, vr::Hmd_Eye eEye, void * pTexture, struct vr::Compositor_TextureBounds * pBounds);
+S_API void SteamAPI_vr_IVRCompositor_ClearLastSubmittedFrame(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRCompositor_GetOverlayDefaults(intptr_t instancePtr, struct vr::Compositor_OverlaySettings * pSettings);
+S_API void SteamAPI_vr_IVRCompositor_SetOverlay(intptr_t instancePtr, void * pTexture, struct vr::Compositor_OverlaySettings * pSettings);
+S_API void SteamAPI_vr_IVRCompositor_SetOverlayRaw(intptr_t instancePtr, void * buffer, uint32_t width, uint32_t height, uint32_t depth, struct vr::Compositor_OverlaySettings * pSettings);
+S_API void SteamAPI_vr_IVRCompositor_SetOverlayFromFile(intptr_t instancePtr, const char * pchFilePath, struct vr::Compositor_OverlaySettings * pSettings);
+S_API void SteamAPI_vr_IVRCompositor_ClearOverlay(intptr_t instancePtr);
+S_API bool SteamAPI_vr_IVRCompositor_GetFrameTiming(intptr_t instancePtr, struct vr::Compositor_FrameTiming * pTiming, uint32_t unFramesAgo);
+S_API void SteamAPI_vr_IVRCompositor_FadeToColor(intptr_t instancePtr, float fSeconds, float fRed, float fGreen, float fBlue, float fAlpha, bool bBackground);
+S_API void SteamAPI_vr_IVRCompositor_FadeGrid(intptr_t instancePtr, float fSeconds, bool bFadeIn);
+S_API void SteamAPI_vr_IVRCompositor_CompositorBringToFront(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRCompositor_CompositorGoToBack(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRCompositor_CompositorQuit(intptr_t instancePtr);
+S_API bool SteamAPI_vr_IVRCompositor_IsFullscreen(intptr_t instancePtr);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_GetDriverCount(intptr_t instancePtr);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_GetDriverId(intptr_t instancePtr, uint32_t unDriverIndex, char * pchBuffer, uint32_t unBufferLen);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_GetDriverDisplayCount(intptr_t instancePtr, const char * pchDriverId);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_GetDriverDisplayId(intptr_t instancePtr, const char * pchDriverId, uint32_t unDisplayIndex, char * pchBuffer, uint32_t unBufferLen);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_GetDriverDisplayModelNumber(intptr_t instancePtr, const char * pchDriverId, const char * pchDisplayId, char * pchBuffer, uint32_t unBufferLen);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_GetDriverDisplaySerialNumber(intptr_t instancePtr, const char * pchDriverId, const char * pchDisplayId, char * pchBuffer, uint32_t unBufferLen);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_LoadSharedResource(intptr_t instancePtr, const char * pchResourceName, char * pchBuffer, uint32_t unBufferLen);
+S_API float SteamAPI_vr_IVRControlPanel_GetIPD(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRControlPanel_SetIPD(intptr_t instancePtr, float fIPD);
+S_API bool SteamAPI_ISteamGameServer_InitGameServer(intptr_t instancePtr, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString);
+S_API void SteamAPI_ISteamGameServer_SetProduct(intptr_t instancePtr, const char * pszProduct);
+S_API void SteamAPI_ISteamGameServer_SetGameDescription(intptr_t instancePtr, const char * pszGameDescription);
+S_API void SteamAPI_ISteamGameServer_SetModDir(intptr_t instancePtr, const char * pszModDir);
+S_API void SteamAPI_ISteamGameServer_SetDedicatedServer(intptr_t instancePtr, bool bDedicated);
+S_API void SteamAPI_ISteamGameServer_LogOn(intptr_t instancePtr, const char * pszToken);
+S_API void SteamAPI_ISteamGameServer_LogOnAnonymous(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_LogOff(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BLoggedOn(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BSecure(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamGameServer_GetSteamID(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_WasRestartRequested(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetMaxPlayerCount(intptr_t instancePtr, int cPlayersMax);
+S_API void SteamAPI_ISteamGameServer_SetBotPlayerCount(intptr_t instancePtr, int cBotplayers);
+S_API void SteamAPI_ISteamGameServer_SetServerName(intptr_t instancePtr, const char * pszServerName);
+S_API void SteamAPI_ISteamGameServer_SetMapName(intptr_t instancePtr, const char * pszMapName);
+S_API void SteamAPI_ISteamGameServer_SetPasswordProtected(intptr_t instancePtr, bool bPasswordProtected);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorPort(intptr_t instancePtr, uint16 unSpectatorPort);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorServerName(intptr_t instancePtr, const char * pszSpectatorServerName);
+S_API void SteamAPI_ISteamGameServer_ClearAllKeyValues(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetKeyValue(intptr_t instancePtr, const char * pKey, const char * pValue);
+S_API void SteamAPI_ISteamGameServer_SetGameTags(intptr_t instancePtr, const char * pchGameTags);
+S_API void SteamAPI_ISteamGameServer_SetGameData(intptr_t instancePtr, const char * pchGameData);
+S_API void SteamAPI_ISteamGameServer_SetRegion(intptr_t instancePtr, const char * pszRegion);
+S_API bool SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(intptr_t instancePtr, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, class CSteamID * pSteamIDUser);
+S_API uint64 SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SendUserDisconnect(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServer_BUpdateUserData(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore);
+S_API HAuthTicket SteamAPI_ISteamGameServer_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamGameServer_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamGameServer_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamGameServer_RequestUserGroupStatus(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDGroup);
+S_API void SteamAPI_ISteamGameServer_GetGameplayStats(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_GetServerReputation(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamGameServer_GetPublicIP(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_HandleIncomingPacket(intptr_t instancePtr, const void * pData, int cbData, uint32 srcIP, uint16 srcPort);
+S_API int SteamAPI_ISteamGameServer_GetNextOutgoingPacket(intptr_t instancePtr, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort);
+S_API void SteamAPI_ISteamGameServer_EnableHeartbeats(intptr_t instancePtr, bool bActive);
+S_API void SteamAPI_ISteamGameServer_SetHeartbeatInterval(intptr_t instancePtr, int iHeartbeatInterval);
+S_API void SteamAPI_ISteamGameServer_ForceHeartbeat(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_AssociateWithClan(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(intptr_t instancePtr, class CSteamID steamIDNewPlayer);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API bool SteamAPI_ISteamGameServerStats_ClearUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_StoreUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+#endif // STEAMAPIFLAT_H
+
+
diff --git a/lsteamclient/steamworks_sdk_133/steam_gameserver.h b/lsteamclient/steamworks_sdk_133/steam_gameserver.h
new file mode 100644
index 00000000..ff068540
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/steam_gameserver.h
@@ -0,0 +1,171 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+S_API ISteamInventory *SteamGameServerInventory();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+ ISteamInventory *SteamInventory() { return m_pSteamInventory; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamInventory *m_pSteamInventory;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamInventory = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamInventory = g_pSteamClientGameServer->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_133/steamclientpublic.h b/lsteamclient/steamworks_sdk_133/steamclientpublic.h
new file mode 100644
index 00000000..28fe1826
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/steamclientpublic.h
@@ -0,0 +1,1135 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to login
+ k_EResultItemDeleted = 86, // The thing we're trying to access has been deleted
+ k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to throttle response to possible attacker
+ k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch
+ k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for two-factor didn't match
+ k_EResultAccountAssociatedToMultiplePartners = 90, // account has been associated with multiple partners
+ k_EResultNotModified = 91, // data not modified
+ k_EResultNoMobileDevice = 92, // the account does not have a mobile device associated with it
+ k_EResultTimeNotSynced = 93, // the time presented is out of range or tolerance
+ k_EResultSmsCodeFailed = 94, // SMS code failure (no match, none pending, etc.)
+ k_EResultAccountLimitExceeded = 95, // Too many accounts access this resource
+ k_EResultAccountActivityLimitExceeded = 96, // Too many changes to this account
+ k_EResultPhoneActivityLimitExceeded = 97, // Too many changes to this phone
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+ k_EVoiceResultReceiverOutOfDate = 8,
+ k_EVoiceResultReceiverDidNotAnswer = 9,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+enum EDenyReason
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+};
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+enum EBeginAuthSessionResult
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+};
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+enum EAuthSessionResponse
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+ k_EAuthSessionResponsePublisherIssuedBan = 9, // The user is banned for this game. The ban came via the web api and not VAC
+};
+
+// results from UserHasLicenseForApp
+enum EUserHasLicenseForAppResult
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+};
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x0000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x0001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x0002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x0004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x0008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x0010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x0020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x0040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_RetailLicense = 0x0080, // has a retail license for game, (CD-Key etc)
+ k_EAppOwnershipFlags_LicenseLocked = 0x0100, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x0200, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x0400, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x0800, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x1000, // Recurring license, user is charged periodically
+ k_EAppOwnershipFlags_LicenseCanceled = 0x2000, // Mark as canceled, but might be still active if recurring
+ k_EAppOwnershipFlags_AutoGrant = 0x4000, // Ownership is based on any kind of autogrant license
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media_DEPRECATED = 0x010, // legacy - was used for game trailers, which are now just videos on the web
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+ k_EAppType_Hardware = 0x200, // a hardware device (Steam Machine, Steam Controller, Steam Link, etc.)
+ // 0x400 is up for grabs here
+ k_EAppType_Video = 0x800, // A video component of either a Film or TVSeries (may be the feature, an episode, preview, making-of, etc)
+ k_EAppType_Plugin = 0x1000, // Plug-in types for other Apps
+ k_EAppType_Music = 0x2000, // Music files
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+ k_EChatEntryTypeReserved1 = 12,
+ k_EChatEntryTypeReserved2 = 13,
+ k_EChatEntryTypeLinkBlocked = 14, // a link was removed by the chat filter.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Broadcast upload result details
+//-----------------------------------------------------------------------------
+enum EBroadcastUploadResult
+{
+ k_EBroadcastUploadResultNone = 0, // broadcast state unknown
+ k_EBroadcastUploadResultOK = 1, // broadcast was good, no problems
+ k_EBroadcastUploadResultInitFailed = 2, // broadcast init failed
+ k_EBroadcastUploadResultFrameFailed = 3, // broadcast frame upload failed
+ k_EBroadcastUploadResultTimeout = 4, // broadcast upload timed out
+ k_EBroadcastUploadResultBandwidthExceeded = 5, // broadcast send too much data
+ k_EBroadcastUploadResultLowFPS = 6, // broadcast FPS too low
+ k_EBroadcastUploadResultMissingKeyFrames = 7, // broadcast sending not enough key frames
+ k_EBroadcastUploadResultNoConnection = 8, // broadcast client failed to connect to relay
+ k_EBroadcastUploadResultRelayFailed = 9, // relay dropped the upload
+ k_EBroadcastUploadResultSettingsChanged = 10, // the client changed broadcast settings
+ k_EBroadcastUploadResultMissingAudio = 11, // client failed to send audio data
+ k_EBroadcastUploadResultTooFarBehind = 12, // clients was too slow uploading
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM2_USERID_STRUCTS )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ V_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, V_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, V_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, V_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, V_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_133/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_133/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_133/steamhttpenums.h b/lsteamclient/steamworks_sdk_133/steamhttpenums.h
new file mode 100644
index 00000000..2ec0982b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/steamhttpenums.h
@@ -0,0 +1,97 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401, // You probably want 403 or something else. 401 implies you're sending a WWW-Authenticate header and the client can sent an Authorization header in response.
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+ k_EHTTPStatusCode4xxUnknown = 418, // 418 is reserved, so we'll use it to mean unknown
+ k_EHTTPStatusCode429TooManyRequests = 429,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+ k_EHTTPStatusCode5xxUnknown = 599,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_133/steamps3params.h b/lsteamclient/steamworks_sdk_133/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_133/steamtypes.h b/lsteamclient/steamworks_sdk_133/steamtypes.h
new file mode 100644
index 00000000..2be3926c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/steamtypes.h
@@ -0,0 +1,179 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+#ifdef __clang__
+# define CLANG_ATTR(ATTR) __attribute__((annotate( ATTR )))
+#else
+# define CLANG_ATTR(ATTR)
+#endif
+
+#define METHOD_DESC(DESC) CLANG_ATTR( "desc:" #DESC ";" )
+#define IGNOREATTR() CLANG_ATTR( "ignore" )
+#define OUT_STRUCT() CLANG_ATTR( "out_struct: ;" )
+#define OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" )
+#define OUT_ARRAY_COUNT(COUNTER, DESC) CLANG_ATTR( "out_array_count:" #COUNTER ";desc:" #DESC )
+#define ARRAY_COUNT(COUNTER) CLANG_ATTR( "array_count:" #COUNTER ";" )
+#define ARRAY_COUNT_D(COUNTER, DESC) CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC )
+#define BUFFER_COUNT(COUNTER) CLANG_ATTR( "buffer_count:" #COUNTER ";" )
+#define OUT_BUFFER_COUNT(COUNTER) CLANG_ATTR( "out_buffer_count:" #COUNTER ";" )
+#define OUT_STRING_COUNT(COUNTER) CLANG_ATTR( "out_string_count:" #COUNTER ";" )
+#define DESC(DESC) CLANG_ATTR("desc:" #DESC ";")
+
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef uint64 JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+const JobID_t k_JobIDNil = 0xffffffffffffffffull;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+typedef uint32 BundleId_t;
+const BundleId_t k_uBundleIdInvalid = 0;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+// ID for a depot content manifest
+typedef uint64 ManifestId_t;
+const ManifestId_t k_uManifestIdInvalid = 0;
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_133/steamuniverse.h b/lsteamclient/steamworks_sdk_133/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteamapplist.h b/lsteamclient/steamworks_sdk_133a/isteamapplist.h
new file mode 100644
index 00000000..fc1d49ee
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteamapps.h b/lsteamclient/steamworks_sdk_133a/isteamapps.h
new file mode 100644
index 00000000..f73fed4d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamapps.h
@@ -0,0 +1,154 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+ // get download progress for optional DLC
+ virtual bool GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // return the buildid of this app, may change at any time based on backend updates to the game
+ virtual int GetAppBuildId() = 0;
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION007"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteamappticket.h b/lsteamclient/steamworks_sdk_133a/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteamclient.h b/lsteamclient/steamworks_sdk_133a/isteamclient.h
new file mode 100644
index 00000000..9977f3a5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamclient.h
@@ -0,0 +1,503 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct ValvePackingSentinel_t
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+extern "C" typedef void( *SteamAPI_PostAPIResultInProcess_t )(SteamAPICall_t callHandle, void *, uint32 unCallbackSize, int iCallbackNum);
+extern "C" typedef uint32 ( *SteamAPI_CheckCallbackRegistered_t )( int iCallbackNum );
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamMusicRemote;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+class ISteamHTMLSurface;
+class ISteamInventory;
+class ISteamVideo;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player Remote
+ virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // html page display
+ virtual ISteamHTMLSurface *GetISteamHTMLSurface(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // Helper functions for internal Steam usage
+ virtual void Set_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) = 0;
+ virtual void Remove_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) = 0;
+ virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0;
+
+ // inventory
+ virtual ISteamInventory *GetISteamInventory( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Video
+ virtual ISteamVideo *GetISteamVideo( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient017"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iClientDepotBuilderCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+enum { k_iSteamMusicRemoteCallbacks = 4100 };
+enum { k_iClientVRCallbacks = 4200 };
+enum { k_iClientReservedCallbacks = 4300 };
+enum { k_iSteamReservedCallbacks = 4400 };
+enum { k_iSteamHTMLSurfaceCallbacks = 4500 };
+enum { k_iClientVideoCallbacks = 4600 };
+enum { k_iClientInventoryCallbacks = 4700 };
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+struct SteamCallback_t
+{
+public:
+ SteamCallback_t() {}
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname : SteamCallback_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_10() \
+ END_CALLBACK_INTERNAL_BEGIN( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_11() \
+ END_CALLBACK_INTERNAL_BEGIN( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_12() \
+ END_CALLBACK_INTERNAL_BEGIN( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_13() \
+ END_CALLBACK_INTERNAL_BEGIN( 13 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_14() \
+ END_CALLBACK_INTERNAL_BEGIN( 14 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 13 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteamcontroller.h b/lsteamclient/steamworks_sdk_133a/isteamcontroller.h
new file mode 100644
index 00000000..6a3100e3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamcontroller.h
@@ -0,0 +1,138 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+#define MAX_STEAM_CONTROLLERS 16
+
+#pragma pack( pop )
+
+#define STEAM_RIGHT_TRIGGER_MASK 0x0000001
+#define STEAM_LEFT_TRIGGER_MASK 0x0000002
+#define STEAM_RIGHT_BUMPER_MASK 0x0000004
+#define STEAM_LEFT_BUMPER_MASK 0x0000008
+#define STEAM_BUTTON_0_MASK 0x0000010
+#define STEAM_BUTTON_1_MASK 0x0000020
+#define STEAM_BUTTON_2_MASK 0x0000040
+#define STEAM_BUTTON_3_MASK 0x0000080
+#define STEAM_TOUCH_0_MASK 0x0000100
+#define STEAM_TOUCH_1_MASK 0x0000200
+#define STEAM_TOUCH_2_MASK 0x0000400
+#define STEAM_TOUCH_3_MASK 0x0000800
+#define STEAM_BUTTON_MENU_MASK 0x0001000
+#define STEAM_BUTTON_STEAM_MASK 0x0002000
+#define STEAM_BUTTON_ESCAPE_MASK 0x0004000
+#define STEAM_BUTTON_BACK_LEFT_MASK 0x0008000
+#define STEAM_BUTTON_BACK_RIGHT_MASK 0x0010000
+#define STEAM_BUTTON_LEFTPAD_CLICKED_MASK 0x0020000
+#define STEAM_BUTTON_RIGHTPAD_CLICKED_MASK 0x0040000
+#define STEAM_LEFTPAD_FINGERDOWN_MASK 0x0080000
+#define STEAM_RIGHTPAD_FINGERDOWN_MASK 0x0100000
+#define STEAM_JOYSTICK_BUTTON_MASK 0x0400000
+
+
+#pragma pack( push, 1 )
+
+struct SteamControllerState001_t
+{
+ // If packet num matches that on your prior call, then the controller state hasn't been changed since
+ // your last call and there is no need to process it
+ uint32 unPacketNum;
+
+ // bit flags for each of the buttons
+ uint64 ulButtons;
+
+ // Left pad coordinates
+ short sLeftPadX;
+ short sLeftPadY;
+
+ // Right pad coordinates
+ short sRightPadX;
+ short sRightPadY;
+
+};
+
+#pragma pack( pop )
+
+#define SteamControllerState_t SteamControllerState001_t
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ //
+ // Native controller support API
+ //
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init( const char *pchAbsolutePathToControllerConfigVDF ) = 0;
+ virtual bool Shutdown() = 0;
+
+ // Pump callback/callresult events, SteamAPI_RunCallbacks will do this for you,
+ // normally never need to call directly.
+ virtual void RunFrame() = 0;
+
+ // Get the state of the specified controller, returns false if that controller is not connected
+ virtual bool GetControllerState( uint32 unControllerIndex, SteamControllerState_t *pState ) = 0;
+
+ // Trigger a haptic pulse on the controller
+ virtual void TriggerHapticPulse( uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ // Set the override mode which is used to choose to use different base/legacy bindings from your config file
+ virtual void SetOverrideMode( const char *pchMode ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "STEAMCONTROLLER_INTERFACE_VERSION"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+/*
+struct ControllerCallback_t
+{
+ enum { k_iCallback = k_iSteamControllerCallbacks + 1 };
+
+};
+*/
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteamfriends.h b/lsteamclient/steamworks_sdk_133a/isteamfriends.h
new file mode 100644
index 00000000..a63d8ea7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamfriends.h
@@ -0,0 +1,629 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1, // this doesn't get stored; the user has just done an Ignore on an friendship invite
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5, // this is stored; the user has explicit blocked this other user from comments/chat/etc
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+// friends group identifier type
+typedef int16 FriendsGroupID_t;
+
+// invalid friends group identifier constant
+const FriendsGroupID_t k_FriendsGroupID_Invalid = -1;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, OUT_STRUCT() FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+ // friends steam level
+ virtual int GetFriendSteamLevel( CSteamID steamIDFriend ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // friend grouping (tag) apis
+ // returns the number of friends groups
+ virtual int GetFriendsGroupCount() = 0;
+ // returns the friends group ID for the given index (invalid indices return k_FriendsGroupID_Invalid)
+ virtual FriendsGroupID_t GetFriendsGroupIDByIndex( int iFG ) = 0;
+ // returns the name for the given friends group (NULL in the case of invalid friends group IDs)
+ virtual const char *GetFriendsGroupName( FriendsGroupID_t friendsGroupID ) = 0;
+ // returns the number of members in a given friends group
+ virtual int GetFriendsGroupMembersCount( FriendsGroupID_t friendsGroupID ) = 0;
+ // gets up to nMembersCount members of the given friends group, if fewer exist than requested those positions' SteamIDs will be invalid
+ virtual void GetFriendsGroupMembersList( FriendsGroupID_t friendsGroupID, OUT_ARRAY_CALL(nMembersCount, GetFriendsGroupMembersCount, friendsGroupID ) CSteamID *pOutSteamIDMembers, int nMembersCount ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( ARRAY_COUNT(cClansToRequest) CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, OUT_STRUCT() CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends015"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_133a/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_133a/isteamgameserver.h b/lsteamclient/steamworks_sdk_133a/isteamgameserver.h
new file mode 100644
index 00000000..c97ad6f5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamgameserver.h
@@ -0,0 +1,384 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_133a/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteamhtmlsurface.h b/lsteamclient/steamworks_sdk_133a/isteamhtmlsurface.h
new file mode 100644
index 00000000..64caa5f7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamhtmlsurface.h
@@ -0,0 +1,438 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to display html pages in a texture
+//
+//=============================================================================
+
+#ifndef ISTEAMHTMLSURFACE_H
+#define ISTEAMHTMLSURFACE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+typedef uint32 HHTMLBrowser;
+const uint32 INVALID_HTMLBROWSER = 0;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for displaying HTML pages and interacting with them
+//-----------------------------------------------------------------------------
+class ISteamHTMLSurface
+{
+public:
+ virtual ~ISteamHTMLSurface() {}
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Create a browser object for display of a html page, when creation is complete the call handle
+ // will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser.
+ // The user agent string is a substring to be added to the general user agent string so you can
+ // identify your client on web servers.
+ // The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if
+ // you do not require this functionality.
+ virtual SteamAPICall_t CreateBrowser( const char *pchUserAgent, const char *pchUserCSS ) = 0;
+
+ // Call this when you are done with a html surface, this lets us free the resources being used by it
+ virtual void RemoveBrowser( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // Navigate to this URL, results in a HTML_StartRequest_t as the request commences
+ virtual void LoadURL( HHTMLBrowser unBrowserHandle, const char *pchURL, const char *pchPostData ) = 0;
+
+ // Tells the surface the size in pixels to display the surface
+ virtual void SetSize( HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight ) = 0;
+
+ // Stop the load of the current html page
+ virtual void StopLoad( HHTMLBrowser unBrowserHandle ) = 0;
+ // Reload (most likely from local cache) the current page
+ virtual void Reload( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate back in the page history
+ virtual void GoBack( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate forward in the page history
+ virtual void GoForward( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // add this header to any url requests from this browser
+ virtual void AddHeader( HHTMLBrowser unBrowserHandle, const char *pchKey, const char *pchValue ) = 0;
+ // run this javascript script in the currently loaded page
+ virtual void ExecuteJavascript( HHTMLBrowser unBrowserHandle, const char *pchScript ) = 0;
+
+ enum EHTMLMouseButton
+ {
+ eHTMLMouseButton_Left = 0,
+ eHTMLMouseButton_Right = 1,
+ eHTMLMouseButton_Middle = 2,
+ };
+
+ // Mouse click and mouse movement commands
+ virtual void MouseUp( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDown( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDoubleClick( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ // x and y are relative to the HTML bounds
+ virtual void MouseMove( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+ // nDelta is pixels of scroll
+ virtual void MouseWheel( HHTMLBrowser unBrowserHandle, int32 nDelta ) = 0;
+
+ enum EMouseCursor
+ {
+ dc_user = 0,
+ dc_none,
+ dc_arrow,
+ dc_ibeam,
+ dc_hourglass,
+ dc_waitarrow,
+ dc_crosshair,
+ dc_up,
+ dc_sizenw,
+ dc_sizese,
+ dc_sizene,
+ dc_sizesw,
+ dc_sizew,
+ dc_sizee,
+ dc_sizen,
+ dc_sizes,
+ dc_sizewe,
+ dc_sizens,
+ dc_sizeall,
+ dc_no,
+ dc_hand,
+ dc_blank, // don't show any custom cursor, just use your default
+ dc_middle_pan,
+ dc_north_pan,
+ dc_north_east_pan,
+ dc_east_pan,
+ dc_south_east_pan,
+ dc_south_pan,
+ dc_south_west_pan,
+ dc_west_pan,
+ dc_north_west_pan,
+ dc_alias,
+ dc_cell,
+ dc_colresize,
+ dc_copycur,
+ dc_verticaltext,
+ dc_rowresize,
+ dc_zoomin,
+ dc_zoomout,
+ dc_help,
+ dc_custom,
+
+ dc_last, // custom cursors start from this value and up
+ };
+
+ enum EHTMLKeyModifiers
+ {
+ k_eHTMLKeyModifier_None = 0,
+ k_eHTMLKeyModifier_AltDown = 1 << 0,
+ k_eHTMLKeyModifier_CtrlDown = 1 << 1,
+ k_eHTMLKeyModifier_ShiftDown = 1 << 2,
+ };
+
+ // keyboard interactions, native keycode is the virtual key code value from your OS
+ virtual void KeyDown( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ virtual void KeyUp( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ // cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press)
+ virtual void KeyChar( HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+
+ // programmatically scroll this many pixels on the page
+ virtual void SetHorizontalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+ virtual void SetVerticalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+
+ // tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things
+ virtual void SetKeyFocus( HHTMLBrowser unBrowserHandle, bool bHasKeyFocus ) = 0;
+
+ // open the current pages html code in the local editor of choice, used for debugging
+ virtual void ViewSource( HHTMLBrowser unBrowserHandle ) = 0;
+ // copy the currently selected text on the html page to the local clipboard
+ virtual void CopyToClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+ // paste from the local clipboard to the current html page
+ virtual void PasteFromClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element
+ virtual void Find( HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse ) = 0;
+ // cancel a currently running find
+ virtual void StopFind( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // return details about the link at position x,y on the current page
+ virtual void GetLinkAtPosition( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+
+ // set a webcookie for the hostname in question
+ virtual void SetCookie( const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath = "/", RTime32 nExpires = 0, bool bSecure = false, bool bHTTPOnly = false ) = 0;
+
+ // Zoom the current page by flZoom ( from 0.0 to 2.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care)
+ virtual void SetPageScaleFactor( HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY ) = 0;
+
+ // CALLBACKS
+ //
+ // These set of functions are used as responses to callback requests
+ //
+
+ // You MUST call this in response to a HTML_StartRequest_t callback
+ // Set bAllowed to true to allow this navigation, false to cancel it and stay
+ // on the current page. You can use this feature to limit the valid pages
+ // allowed in your HTML surface.
+ virtual void AllowStartRequest( HHTMLBrowser unBrowserHandle, bool bAllowed ) = 0;
+
+ // You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback
+ // Set bResult to true for the OK option of a confirm, use false otherwise
+ virtual void JSDialogResponse( HHTMLBrowser unBrowserHandle, bool bResult ) = 0;
+
+ // You MUST call this in response to a HTML_FileOpenDialog_t callback
+ virtual void FileLoadDialogResponse( HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles ) = 0;
+};
+
+#define STEAMHTMLSURFACE_INTERFACE_VERSION "STEAMHTMLSURFACE_INTERFACE_VERSION_002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser is ready for use
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_BrowserReady_t, k_iSteamHTMLSurfaceCallbacks + 1 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this browser is now fully created and ready to navigate to pages
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser has a pending paint
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_NeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 2)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint
+CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called
+CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture
+CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture
+CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update
+CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update
+CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update
+CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update
+CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered
+CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages
+END_DEFINE_CALLBACK_12()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser wanted to navigate to a new page
+// NOTE - you MUST call AllowStartRequest in response to this callback
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_StartRequest_t, k_iSteamHTMLSurfaceCallbacks + 3)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface navigating
+CALLBACK_MEMBER(1, const char *, pchURL) // the url they wish to navigate to
+CALLBACK_MEMBER(2, const char *, pchTarget) // the html link target type (i.e _blank, _self, _parent, _top )
+CALLBACK_MEMBER(3, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER(4, bool, bIsRedirect) // true if this was a http/html redirect from the last load request
+END_DEFINE_CALLBACK_5()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser has been requested to close due to user interaction (usually from a javascript window.close() call)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_CloseBrowser_t, k_iSteamHTMLSurfaceCallbacks + 4)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser is navigating to a new url
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_URLChanged_t, k_iSteamHTMLSurfaceCallbacks + 5 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface navigating
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the url they wish to navigate to
+CALLBACK_MEMBER( 2, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER( 3, bool, bIsRedirect ) // true if this was a http/html redirect from the last load request
+CALLBACK_MEMBER( 4, const char *, pchPageTitle ) // the title of the page
+CALLBACK_MEMBER( 5, bool, bNewNavigation ) // true if this was from a fresh tab and not a click on an existing page
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A page is finished loading
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FinishedRequest_t, k_iSteamHTMLSurfaceCallbacks + 6 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+CALLBACK_MEMBER( 2, const char *, pchPageTitle ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a request to load this url in a new tab
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_OpenLinkInNewTab_t, k_iSteamHTMLSurfaceCallbacks + 7 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the page has a new title now
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ChangedTitle_t, k_iSteamHTMLSurfaceCallbacks + 8 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: results from a search
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SearchResults_t, k_iSteamHTMLSurfaceCallbacks + 9 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unResults ) //
+CALLBACK_MEMBER( 2, uint32, unCurrentMatch ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: page history status changed on the ability to go backwards and forward
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_CanGoBackAndForward_t, k_iSteamHTMLSurfaceCallbacks + 10 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, bool, bCanGoBack ) //
+CALLBACK_MEMBER( 2, bool, bCanGoForward ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the horizontal scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HorizontalScroll_t, k_iSteamHTMLSurfaceCallbacks + 11 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool , bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the vertical scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_VerticalScroll_t, k_iSteamHTMLSurfaceCallbacks + 12 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool, bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetLinkAtPosition call
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_LinkAtPosition_t, k_iSteamHTMLSurfaceCallbacks + 13 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, x ) // NOTE - Not currently set
+CALLBACK_MEMBER( 2, uint32, y ) // NOTE - Not currently set
+CALLBACK_MEMBER( 3, const char *, pchURL ) //
+CALLBACK_MEMBER( 4, bool, bInput ) //
+CALLBACK_MEMBER( 5, bool, bLiveLink ) //
+END_DEFINE_CALLBACK_6()
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript alert dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSAlert_t, k_iSteamHTMLSurfaceCallbacks + 14 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript confirmation dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSConfirm_t, k_iSteamHTMLSurfaceCallbacks + 15 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: when received show a file open dialog
+// then call FileLoadDialogResponse with the file(s) the user selected.
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FileOpenDialog_t, k_iSteamHTMLSurfaceCallbacks + 16 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+CALLBACK_MEMBER( 2, const char *, pchInitialFile ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new html window has been created
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_NewWindow_t, k_iSteamHTMLSurfaceCallbacks + 21 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the current surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the page to load
+CALLBACK_MEMBER( 2, uint32, unX ) // the x pos into the page to display the popup
+CALLBACK_MEMBER( 3, uint32, unY ) // the y pos into the page to display the popup
+CALLBACK_MEMBER( 4, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 5, uint32, unTall ) // the total height of the pBGRA texture
+CALLBACK_MEMBER( 6, HHTMLBrowser, unNewWindow_BrowserHandle ) // the handle of the new window surface
+END_DEFINE_CALLBACK_7()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: change the cursor to display
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SetCursor_t, k_iSteamHTMLSurfaceCallbacks + 22 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, eMouseCursor ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: informational message from the browser
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_StatusText_t, k_iSteamHTMLSurfaceCallbacks + 23 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ShowToolTip_t, k_iSteamHTMLSurfaceCallbacks + 24 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: update the text of an existing tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_UpdateToolTip_t, k_iSteamHTMLSurfaceCallbacks + 25 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: hide the tooltip you are showing
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HideToolTip_t, k_iSteamHTMLSurfaceCallbacks + 26 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMHTMLSURFACE_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteamhttp.h b/lsteamclient/steamworks_sdk_133a/isteamhttp.h
new file mode 100644
index 00000000..d96a631f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamhttp.h
@@ -0,0 +1,210 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+typedef uint32 HTTPCookieContainerHandle;
+#define INVALID_HTTPCOOKIE_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Both http and https are supported,
+ // so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+
+ // Creates a cookie container handle which you must later free with ReleaseCookieContainer(). If bAllowResponsesToModify=true
+ // than any response to your requests using this cookie container may add new cookies which may be transmitted with
+ // future requests. If bAllowResponsesToModify=false than only cookies you explicitly set will be sent. This API is just for
+ // during process lifetime, after steam restarts no cookies are persisted and you have no way to access the cookie container across
+ // repeat executions of your process.
+ virtual HTTPCookieContainerHandle CreateCookieContainer( bool bAllowResponsesToModify ) = 0;
+
+ // Release a cookie container you are finished using, freeing it's memory
+ virtual bool ReleaseCookieContainer( HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Adds a cookie to the specified cookie container that will be used with future requests.
+ virtual bool SetCookie( HTTPCookieContainerHandle hCookieContainer, const char *pchHost, const char *pchUrl, const char *pchCookie ) = 0;
+
+ // Set the cookie container to use for a HTTP request
+ virtual bool SetHTTPRequestCookieContainer( HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Set the extra user agent info for a request, this doesn't clobber the normal user agent, it just adds the extra info on the end
+ virtual bool SetHTTPRequestUserAgentInfo( HTTPRequestHandle hRequest, const char *pchUserAgentInfo ) = 0;
+
+ // Set that https request should require verified SSL certificate via machines certificate trust store
+ virtual bool SetHTTPRequestRequiresVerifiedCertificate( HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate ) = 0;
+
+ // Set an absolute timeout on the HTTP request, this is just a total time timeout different than the network activity timeout
+ // which can bump everytime we get more data
+ virtual bool SetHTTPRequestAbsoluteTimeoutMS( HTTPRequestHandle hRequest, uint32 unMilliseconds ) = 0;
+
+ // Check if the reason the request failed was because we timed it out (rather than some harder failure)
+ virtual bool GetHTTPRequestWasTimedOut( HTTPRequestHandle hRequest, bool *pbWasTimedOut ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+
+ uint32 m_unBodySize; // Same as GetHTTPResponseBodySize()
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_133a/isteaminventory.h b/lsteamclient/steamworks_sdk_133a/isteaminventory.h
new file mode 100644
index 00000000..29f939b7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteaminventory.h
@@ -0,0 +1,354 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Inventory
+//
+//=============================================================================
+
+#ifndef ISTEAMINVENTORY_H
+#define ISTEAMINVENTORY_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// Every individual instance of an item has a globally-unique ItemInstanceID.
+// This ID is unique to the combination of (player, specific item instance)
+// and will not be transferred to another player or re-used for another item.
+typedef uint64 SteamItemInstanceID_t;
+
+static const SteamItemInstanceID_t k_SteamItemInstanceIDInvalid = ~(SteamItemInstanceID_t)0;
+
+// Types of items in your game are identified by a 32-bit "item definition number".
+// Valid definition numbers are between 1 and 999999999; numbers less than or equal to
+// zero are invalid, and numbers greater than or equal to one billion (1x10^9) are
+// reserved for internal Steam use.
+typedef int32 SteamItemDef_t;
+
+
+enum ESteamItemFlags
+{
+ // Item status flags - these flags are permenantly attached to specific item instances
+ k_ESteamItemNoTrade = 1 << 0, // This item is account-locked and cannot be traded or given away.
+
+ // Action confirmation flags - these flags are set one time only, as part of a result set
+ k_ESteamItemRemoved = 1 << 8, // The item has been destroyed, traded away, expired, or otherwise invalidated
+ k_ESteamItemConsumed = 1 << 9, // The item quantity has been decreased by 1 via ConsumeItem API.
+
+ // All other flag bits are currently reserved for internal Steam use at this time.
+ // Do not assume anything about the state of other flags which are not defined here.
+};
+
+struct SteamItemDetails_t
+{
+ SteamItemInstanceID_t m_itemId;
+ SteamItemDef_t m_iDefinition;
+ uint16 m_unQuantity;
+ uint16 m_unFlags; // see ESteamItemFlags
+};
+
+typedef int32 SteamInventoryResult_t;
+
+static const SteamInventoryResult_t k_SteamInventoryResultInvalid = -1;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Inventory query and manipulation API
+//-----------------------------------------------------------------------------
+class ISteamInventory
+{
+public:
+
+ // INVENTORY ASYNC RESULT MANAGEMENT
+ //
+ // Asynchronous inventory queries always output a result handle which can be used with
+ // GetResultStatus, GetResultItems, etc. A SteamInventoryResultReady_t callback will
+ // be triggered when the asynchronous result becomes ready (or fails).
+ //
+
+ // Find out the status of an asynchronous inventory result handle. Possible values:
+ // k_EResultPending - still in progress
+ // k_EResultOK - done, result ready
+ // k_EResultExpired - done, result ready, maybe out of date (see DeserializeResult)
+ // k_EResultInvalidParam - ERROR: invalid API call parameters
+ // k_EResultServiceUnavailable - ERROR: service temporarily down, you may retry later
+ // k_EResultLimitExceeded - ERROR: operation would exceed per-user inventory limits
+ // k_EResultFail - ERROR: unknown / generic error
+ METHOD_DESC(Find out the status of an asynchronous inventory result handle.)
+ virtual EResult GetResultStatus( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Copies the contents of a result set into a flat array. The specific
+ // contents of the result set depend on which query which was used.
+ METHOD_DESC(Copies the contents of a result set into a flat array. The specific contents of the result set depend on which query which was used.)
+ virtual bool GetResultItems( SteamInventoryResult_t resultHandle,
+ OUT_ARRAY_COUNT( punOutItemsArraySize,Output array) SteamItemDetails_t *pOutItemsArray,
+ uint32 *punOutItemsArraySize ) = 0;
+
+ // Returns the server time at which the result was generated. Compare against
+ // the value of IClientUtils::GetServerRealTime() to determine age.
+ METHOD_DESC(Returns the server time at which the result was generated. Compare against the value of IClientUtils::GetServerRealTime() to determine age.)
+ virtual uint32 GetResultTimestamp( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Returns true if the result belongs to the target steam ID, false if the
+ // result does not. This is important when using DeserializeResult, to verify
+ // that a remote player is not pretending to have a different user's inventory.
+ METHOD_DESC(Returns true if the result belongs to the target steam ID or false if the result does not. This is important when using DeserializeResult to verify that a remote player is not pretending to have a different users inventory.)
+ virtual bool CheckResultSteamID( SteamInventoryResult_t resultHandle, CSteamID steamIDExpected ) = 0;
+
+ // Destroys a result handle and frees all associated memory.
+ METHOD_DESC(Destroys a result handle and frees all associated memory.)
+ virtual void DestroyResult( SteamInventoryResult_t resultHandle ) = 0;
+
+
+ // INVENTORY ASYNC QUERY
+ //
+
+ // Captures the entire state of the current user's Steam inventory.
+ // You must call DestroyResult on this handle when you are done with it.
+ // Returns false and sets *pResultHandle to zero if inventory is unavailable.
+ // Note: calls to this function are subject to rate limits and may return
+ // cached results if called too frequently. It is suggested that you call
+ // this function only when you are about to display the user's full inventory,
+ // or if you expect that the inventory may have changed.
+ METHOD_DESC(Captures the entire state of the current users Steam inventory.)
+ virtual bool GetAllItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+
+ // Captures the state of a subset of the current user's Steam inventory,
+ // identified by an array of item instance IDs. The results from this call
+ // can be serialized and passed to other players to "prove" that the current
+ // user owns specific items, without exposing the user's entire inventory.
+ // For example, you could call GetItemsByID with the IDs of the user's
+ // currently equipped cosmetic items and serialize this to a buffer, and
+ // then transmit this buffer to other players upon joining a game.
+ METHOD_DESC(Captures the state of a subset of the current users Steam inventory identified by an array of item instance IDs.)
+ virtual bool GetItemsByID( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT( unCountInstanceIDs ) const SteamItemInstanceID_t *pInstanceIDs, uint32 unCountInstanceIDs ) = 0;
+
+
+ // RESULT SERIALIZATION AND AUTHENTICATION
+ //
+ // Serialized result sets contain a short signature which can't be forged
+ // or replayed across different game sessions. A result set can be serialized
+ // on the local client, transmitted to other players via your game networking,
+ // and deserialized by the remote players. This is a secure way of preventing
+ // hackers from lying about posessing rare/high-value items.
+
+ // Serializes a result set with signature bytes to an output buffer. Pass
+ // NULL as an output buffer to get the required size via punOutBufferSize.
+ // The size of a serialized result depends on the number items which are being
+ // serialized. When securely transmitting items to other players, it is
+ // recommended to use "GetItemsByID" first to create a minimal result set.
+ // Results have a built-in timestamp which will be considered "expired" after
+ // an hour has elapsed. See DeserializeResult for expiration handling.
+ virtual bool SerializeResult( SteamInventoryResult_t resultHandle, OUT_BUFFER_COUNT(punOutBufferSize) void *pOutBuffer, uint32 *punOutBufferSize ) = 0;
+
+ // Deserializes a result set and verifies the signature bytes. Returns false
+ // if bRequireFullOnlineVerify is set but Steam is running in Offline mode.
+ // Otherwise returns true and then delivers error codes via GetResultStatus.
+ //
+ // The bRESERVED_MUST_BE_FALSE flag is reserved for future use and should not
+ // be set to true by your game at this time.
+ //
+ // DeserializeResult has a potential soft-failure mode where the handle status
+ // is set to k_EResultExpired. GetResultItems() still succeeds in this mode.
+ // The "expired" result could indicate that the data may be out of date - not
+ // just due to timed expiration (one hour), but also because one of the items
+ // in the result set may have been traded or consumed since the result set was
+ // generated. You could compare the timestamp from GetResultTimestamp() to
+ // ISteamUtils::GetServerRealTime() to determine how old the data is. You could
+ // simply ignore the "expired" result code and continue as normal, or you
+ // could challenge the player with expired data to send an updated result set.
+ virtual bool DeserializeResult( SteamInventoryResult_t *pOutResultHandle, BUFFER_COUNT(punOutBufferSize) const void *pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE = false ) = 0;
+
+
+ // INVENTORY ASYNC MODIFICATION
+ //
+
+ // GenerateItems() creates one or more items and then generates a SteamInventoryCallback_t
+ // notification with a matching nCallbackContext parameter. This API is insecure, and could
+ // be abused by hacked clients. It is, however, very useful as a development cheat or as
+ // a means of prototyping item-related features for your game. The use of GenerateItems can
+ // be restricted to certain item definitions or fully blocked via the Steamworks website.
+ // If punArrayQuantity is not NULL, it should be the same length as pArrayItems and should
+ // describe the quantity of each item to generate.
+ virtual bool GenerateItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, ARRAY_COUNT(unArrayLength) const uint32 *punArrayQuantity, uint32 unArrayLength ) = 0;
+
+ // GrantPromoItems() checks the list of promotional items for which the user may be eligible
+ // and grants the items (one time only). On success, the result set will include items which
+ // were granted, if any. If no items were granted because the user isn't eligible for any
+ // promotions, this is still considered a success.
+ METHOD_DESC(GrantPromoItems() checks the list of promotional items for which the user may be eligible and grants the items (one time only).)
+ virtual bool GrantPromoItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+ // AddPromoItem() / AddPromoItems() are restricted versions of GrantPromoItems(). Instead of
+ // scanning for all eligible promotional items, the check is restricted to a single item
+ // definition or set of item definitions. This can be useful if your game has custom UI for
+ // showing a specific promo item to the user.
+ virtual bool AddPromoItem( SteamInventoryResult_t *pResultHandle, SteamItemDef_t itemDef ) = 0;
+ virtual bool AddPromoItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, uint32 unArrayLength ) = 0;
+
+ // ConsumeItem() removes items from the inventory, permenantly. They cannot be recovered.
+ // Not for the faint of heart - if your game implements item removal at all, a high-friction
+ // UI confirmation process is highly recommended. Similar to GenerateItems, punArrayQuantity
+ // can be NULL or else an array of the same length as pArrayItems which describe the quantity
+ // of each item to destroy. ConsumeItem can be restricted to certain item definitions or
+ // fully blocked via the Steamworks website to minimize support/abuse issues such as the
+ // clasic "my brother borrowed my laptop and deleted all of my rare items".
+ METHOD_DESC(ConsumeItem() removes items from the inventory permenantly.)
+ virtual bool ConsumeItem( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity ) = 0;
+
+ // ExchangeItems() is an atomic combination of GenerateItems and DestroyItems. It can be
+ // used to implement crafting recipes or transmutations, or items which unpack themselves
+ // into other items. Like GenerateItems, this is a flexible and dangerous API which is
+ // meant for rapid prototyping. You can configure restrictions on ExchangeItems via the
+ // Steamworks website, such as limiting it to a whitelist of input/output combinations
+ // corresponding to recipes.
+ // (Note: although GenerateItems may be hard or impossible to use securely in your game,
+ // ExchangeItems is perfectly reasonable to use once the whitelists are set accordingly.)
+ virtual bool ExchangeItems( SteamInventoryResult_t *pResultHandle,
+ ARRAY_COUNT(unArrayGenerateLength) const SteamItemDef_t *pArrayGenerate, ARRAY_COUNT(unArrayGenerateLength) const uint32 *punArrayGenerateQuantity, uint32 unArrayGenerateLength,
+ ARRAY_COUNT(unArrayDestroyLength) const SteamItemInstanceID_t *pArrayDestroy, ARRAY_COUNT(unArrayDestroyLength) const uint32 *punArrayDestroyQuantity, uint32 unArrayDestroyLength ) = 0;
+
+
+ // TransferItemQuantity() is intended for use with items which are "stackable" (can have
+ // quantity greater than one). It can be used to split a stack into two, or to transfer
+ // quantity from one stack into another stack of identical items. To split one stack into
+ // two, pass k_SteamItemInstanceIDInvalid for itemIdDest and a new item will be generated.
+ virtual bool TransferItemQuantity( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest ) = 0;
+
+
+ // TIMED DROPS AND PLAYTIME CREDIT
+ //
+
+ // Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when
+ // active gameplay begins, and at least once every two minutes afterwards. The backend
+ // performs its own time calculations, so the precise timing of the heartbeat is not
+ // critical as long as you send at least one heartbeat every two minutes. Calling the
+ // function more often than that is not harmful, it will simply have no effect. Note:
+ // players may be able to spoof this message by hacking their client, so you should not
+ // attempt to use this as a mechanism to restrict playtime credits. It is simply meant
+ // to distinguish between being in any kind of gameplay situation vs the main menu or
+ // a pre-game launcher window. (If you are stingy with handing out playtime credit, it
+ // will only encourage players to run bots or use mouse/kb event simulators.)
+ //
+ // Playtime credit accumulation can be capped on a daily or weekly basis through your
+ // Steamworks configuration.
+ //
+ METHOD_DESC(Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when active gameplay begins and at least once every two minutes afterwards.)
+ virtual void SendItemDropHeartbeat() = 0;
+
+ // Playtime credit must be consumed and turned into item drops by your game. Only item
+ // definitions which are marked as "playtime item generators" can be spawned. The call
+ // will return an empty result set if there is not enough playtime credit for a drop.
+ // Your game should call TriggerItemDrop at an appropriate time for the user to receive
+ // new items, such as between rounds or while the player is dead. Note that players who
+ // hack their clients could modify the value of "dropListDefinition", so do not use it
+ // to directly control rarity. It is primarily useful during testing and development,
+ // where you may wish to perform experiments with different types of drops.
+ METHOD_DESC(Playtime credit must be consumed and turned into item drops by your game.)
+ virtual bool TriggerItemDrop( SteamInventoryResult_t *pResultHandle, SteamItemDef_t dropListDefinition ) = 0;
+
+
+ // IN-GAME TRADING
+ //
+ // TradeItems() implements limited in-game trading of items, if you prefer not to use
+ // the overlay or an in-game web browser to perform Steam Trading through the website.
+ // You should implement a UI where both players can see and agree to a trade, and then
+ // each client should call TradeItems simultaneously (+/- 5 seconds) with matching
+ // (but reversed) parameters. The result is the same as if both players performed a
+ // Steam Trading transaction through the web. Each player will get an inventory result
+ // confirming the removal or quantity changes of the items given away, and the new
+ // item instance id numbers and quantities of the received items.
+ // (Note: new item instance IDs are generated whenever an item changes ownership.)
+ virtual bool TradeItems( SteamInventoryResult_t *pResultHandle, CSteamID steamIDTradePartner,
+ ARRAY_COUNT(nArrayGiveLength) const SteamItemInstanceID_t *pArrayGive, ARRAY_COUNT(nArrayGiveLength) const uint32 *pArrayGiveQuantity, uint32 nArrayGiveLength,
+ ARRAY_COUNT(nArrayGetLength) const SteamItemInstanceID_t *pArrayGet, ARRAY_COUNT(nArrayGetLength) const uint32 *pArrayGetQuantity, uint32 nArrayGetLength ) = 0;
+
+
+ // ITEM DEFINITIONS
+ //
+ // Item definitions are a mapping of "definition IDs" (integers between 1 and 1000000)
+ // to a set of string properties. Some of these properties are required to display items
+ // on the Steam community web site. Other properties can be defined by applications.
+ // Use of these functions is optional; there is no reason to call LoadItemDefinitions
+ // if your game hardcodes the numeric definition IDs (eg, purple face mask = 20, blue
+ // weapon mod = 55) and does not allow for adding new item types without a client patch.
+ //
+
+ // LoadItemDefinitions triggers the automatic load and refresh of item definitions.
+ // Every time new item definitions are available (eg, from the dynamic addition of new
+ // item types while players are still in-game), a SteamInventoryDefinitionUpdate_t
+ // callback will be fired.
+ METHOD_DESC(LoadItemDefinitions triggers the automatic load and refresh of item definitions.)
+ virtual bool LoadItemDefinitions() = 0;
+
+ // GetItemDefinitionIDs returns the set of all defined item definition IDs (which are
+ // defined via Steamworks configuration, and not necessarily contiguous integers).
+ // If pItemDefIDs is null, the call will return true and *punItemDefIDsArraySize will
+ // contain the total size necessary for a subsequent call. Otherwise, the call will
+ // return false if and only if there is not enough space in the output array.
+ virtual bool GetItemDefinitionIDs(
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+
+ // GetItemDefinitionProperty returns a string property from a given item definition.
+ // Note that some properties (for example, "name") may be localized and will depend
+ // on the current Steam language settings (see ISteamApps::GetCurrentGameLanguage).
+ // Property names are always composed of ASCII letters, numbers, and/or underscores.
+ // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available
+ // property names.
+ virtual bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPropertyName,
+ OUT_STRING_COUNT(punValueBufferSize) char *pchValueBuffer, uint32 *punValueBufferSize ) = 0;
+};
+
+#define STEAMINVENTORY_INTERFACE_VERSION "STEAMINVENTORY_INTERFACE_V001"
+
+
+// SteamInventoryResultReady_t callbacks are fired whenever asynchronous
+// results transition from "Pending" to "OK" or an error state. There will
+// always be exactly one callback per handle.
+struct SteamInventoryResultReady_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 0 };
+ SteamInventoryResult_t m_handle;
+ EResult m_result;
+};
+
+
+// SteamInventoryFullUpdate_t callbacks are triggered when GetAllItems
+// successfully returns a result which is newer / fresher than the last
+// known result. (It will not trigger if the inventory hasn't changed,
+// or if results from two overlapping calls are reversed in flight and
+// the earlier result is already known to be stale/out-of-date.)
+// The normal ResultReady callback will still be triggered immediately
+// afterwards; this is an additional notification for your convenience.
+struct SteamInventoryFullUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 1 };
+ SteamInventoryResult_t m_handle;
+};
+
+
+// A SteamInventoryDefinitionUpdate_t callback is triggered whenever
+// item definitions have been updated, which could be in response to
+// LoadItemDefinitions() or any other async request which required
+// a definition update in order to process results from the server.
+struct SteamInventoryDefinitionUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_133a/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_133a/isteammatchmaking.h b/lsteamclient/steamworks_sdk_133a/isteammatchmaking.h
new file mode 100644
index 00000000..80606dfd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteammatchmaking.h
@@ -0,0 +1,747 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) = 0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, OUT_STRUCT() CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, OUT_STRUCT() CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_133a/isteammusic.h b/lsteamclient/steamworks_sdk_133a/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteammusicremote.h b/lsteamclient/steamworks_sdk_133a/isteammusicremote.h
new file mode 100644
index 00000000..5893ef4b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteammusicremote.h
@@ -0,0 +1,129 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSICREMOTE_H
+#define ISTEAMMUSICREMOTE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteammusic.h"
+
+#define k_SteamMusicNameMaxLength 255
+#define k_SteamMusicPNGMaxLength 65535
+
+
+class ISteamMusicRemote
+{
+public:
+ // Service Definition
+ virtual bool RegisterSteamMusicRemote( const char *pchName ) = 0;
+ virtual bool DeregisterSteamMusicRemote() = 0;
+ virtual bool BIsCurrentMusicRemote() = 0;
+ virtual bool BActivationSuccess( bool bValue ) = 0;
+
+ virtual bool SetDisplayName( const char *pchDisplayName ) = 0;
+ virtual bool SetPNGIcon_64x64( void *pvBuffer, uint32 cbBufferLength ) = 0;
+
+ // Abilities for the user interface
+ virtual bool EnablePlayPrevious(bool bValue) = 0;
+ virtual bool EnablePlayNext( bool bValue ) = 0;
+ virtual bool EnableShuffled( bool bValue ) = 0;
+ virtual bool EnableLooped( bool bValue ) = 0;
+ virtual bool EnableQueue( bool bValue ) = 0;
+ virtual bool EnablePlaylists( bool bValue ) = 0;
+
+ // Status
+ virtual bool UpdatePlaybackStatus( AudioPlayback_Status nStatus ) = 0;
+ virtual bool UpdateShuffled( bool bValue ) = 0;
+ virtual bool UpdateLooped( bool bValue ) = 0;
+ virtual bool UpdateVolume( float flValue ) = 0; // volume is between 0.0 and 1.0
+
+ // Current Entry
+ virtual bool CurrentEntryWillChange() = 0;
+ virtual bool CurrentEntryIsAvailable( bool bAvailable ) = 0;
+ virtual bool UpdateCurrentEntryText( const char *pchText ) = 0;
+ virtual bool UpdateCurrentEntryElapsedSeconds( int nValue ) = 0;
+ virtual bool UpdateCurrentEntryCoverArt( void *pvBuffer, uint32 cbBufferLength ) = 0;
+ virtual bool CurrentEntryDidChange() = 0;
+
+ // Queue
+ virtual bool QueueWillChange() = 0;
+ virtual bool ResetQueueEntries() = 0;
+ virtual bool SetQueueEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentQueueEntry( int nID ) = 0;
+ virtual bool QueueDidChange() = 0;
+
+ // Playlist
+ virtual bool PlaylistWillChange() = 0;
+ virtual bool ResetPlaylistEntries() = 0;
+ virtual bool SetPlaylistEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentPlaylistEntry( int nID ) = 0;
+ virtual bool PlaylistDidChange() = 0;
+};
+
+#define STEAMMUSICREMOTE_INTERFACE_VERSION "STEAMMUSICREMOTE_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillActivate_t, k_iSteamMusicRemoteCallbacks + 1)
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillDeactivate_t, k_iSteamMusicRemoteCallbacks + 2 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteToFront_t, k_iSteamMusicRemoteCallbacks + 3 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWillQuit_t, k_iSteamMusicRemoteCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlay_t, k_iSteamMusicRemoteCallbacks + 5 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPause_t, k_iSteamMusicRemoteCallbacks + 6 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayPrevious_t, k_iSteamMusicRemoteCallbacks + 7 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayNext_t, k_iSteamMusicRemoteCallbacks + 8 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsShuffled_t, k_iSteamMusicRemoteCallbacks + 9 )
+ CALLBACK_MEMBER( 0, bool, m_bShuffled )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsLooped_t, k_iSteamMusicRemoteCallbacks + 10 )
+ CALLBACK_MEMBER(0, bool, m_bLooped )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsVolume_t, k_iSteamMusicCallbacks + 11 )
+ CALLBACK_MEMBER(0, float, m_flNewVolume)
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsQueueEntry_t, k_iSteamMusicCallbacks + 12 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsPlaylistEntry_t, k_iSteamMusicCallbacks + 13 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayingRepeatStatus_t, k_iSteamMusicRemoteCallbacks + 14 )
+ CALLBACK_MEMBER(0, int, m_nPlayingRepeatStatus )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+
+#endif // #define ISTEAMMUSICREMOTE_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteamnetworking.h b/lsteamclient/steamworks_sdk_133a/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_133a/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_133a/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_133a/isteamremotestorage.h b/lsteamclient/steamworks_sdk_133a/isteamremotestorage.h
new file mode 100644
index 00000000..69938cd8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamremotestorage.h
@@ -0,0 +1,648 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+ k_EWorkshopFileTypeWebGuide = 9,
+ k_EWorkshopFileTypeIntegratedGuide = 10,
+ k_EWorkshopFileTypeMerch = 11,
+ k_EWorkshopFileTypeControllerBinding = 12,
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13,
+ k_EWorkshopFileTypeSteamVideo = 14,
+
+ // Update k_EWorkshopFileTypeMax if you add values.
+ k_EWorkshopFileTypeMax = 15
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, OUT_STRUCT() CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION012"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ UGCHandle_t m_hFile; // The new content
+};
+
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteamscreenshots.h b/lsteamclient/steamworks_sdk_133a/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteamugc.h b/lsteamclient/steamworks_sdk_133a/isteamugc.h
new file mode 100644
index 00000000..39da28d1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamugc.h
@@ -0,0 +1,342 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+ k_EUGCQuery_RankedByTotalUniqueSubscriptions = 12,
+};
+
+enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0, // The item update handle was invalid, job might be finished, listen too SubmitItemUpdateResult_t
+ k_EItemUpdateStatusPreparingConfig = 1, // The item update is processing configuration data
+ k_EItemUpdateStatusPreparingContent = 2, // The item update is reading and processing content files
+ k_EItemUpdateStatusUploadingContent = 3, // The item update is uploading content changes to Steam
+ k_EItemUpdateStatusUploadingPreviewFile = 4, // The item update is uploading new preview file image
+ k_EItemUpdateStatusCommittingChanges = 5 // The item update is committing all changes
+};
+
+enum EItemState
+{
+ k_EItemStateNone = 0, // item not tracked on client
+ k_EItemStateSubscribed = 1, // current user is subscribed to this item. Not just cached.
+ k_EItemStateLegacyItem = 2, // item was created with ISteamRemoteStorage
+ k_EItemStateInstalled = 4, // item is installed and usable (but maybe out of date)
+ k_EItemStateNeedsUpdate = 8, // items needs an update. Either because it's not installed yet or creator updated content
+ k_EItemStateDownloading = 16, // item update is currently downloading
+ k_EItemStateDownloadPending = 32, // DownloadItem() was called for this item, content isn't available until DownloadItemResult_t is fired
+};
+
+enum EItemStatistic
+{
+ k_EItemStatistic_NumSubscriptions = 0,
+ k_EItemStatistic_NumFavorites = 1,
+ k_EItemStatistic_NumFollowers = 2,
+ k_EItemStatistic_NumUniqueSubscriptions = 3,
+ k_EItemStatistic_NumUniqueFavorites = 4,
+ k_EItemStatistic_NumUniqueFollowers = 5,
+ k_EItemStatistic_NumUniqueWebsiteViews = 6,
+ k_EItemStatistic_ReportScore = 7,
+};
+
+const uint32 kNumUGCResultsPerPage = 50;
+const uint32 k_cchDeveloperMetadataMax = 5000;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+ // collection details
+ uint32 m_unNumChildren;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for the details of the given published file ids (the RequestUGCDetails call is deprecated and replaced with this)
+ virtual UGCQueryHandle_t CreateQueryUGCDetailsRequest( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+
+ // Send the query to Steam
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+ virtual bool GetQueryUGCPreviewURL( UGCQueryHandle_t handle, uint32 index, char *pchURL, uint32 cchURLSize ) = 0;
+ virtual bool GetQueryUGCMetadata( UGCQueryHandle_t handle, uint32 index, char *pchMetadata, uint32 cchMetadatasize ) = 0;
+ virtual bool GetQueryUGCChildren( UGCQueryHandle_t handle, uint32 index, PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0;
+ virtual bool GetQueryUGCStatistic( UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 *pStatValue ) = 0;
+ virtual uint32 GetQueryUGCNumAdditionalPreviews( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCAdditionalPreview( UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char *pchURLOrVideoID, uint32 cchURLSize, bool *pbIsImage ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnMetadata( UGCQueryHandle_t handle, bool bReturnMetadata ) = 0;
+ virtual bool SetReturnChildren( UGCQueryHandle_t handle, bool bReturnChildren ) = 0;
+ virtual bool SetReturnAdditionalPreviews( UGCQueryHandle_t handle, bool bReturnAdditionalPreviews ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+
+ // DEPRECATED - Use CreateQueryUGCDetailsRequest call above instead!
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+ // Steam Workshop Creator API
+ virtual SteamAPICall_t CreateItem( AppId_t nConsumerAppId, EWorkshopFileType eFileType ) = 0; // create new item for this app with no content attached yet
+
+ virtual UGCUpdateHandle_t StartItemUpdate( AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID ) = 0; // start an UGC item update. Set changed properties before commiting update with CommitItemUpdate()
+
+ virtual bool SetItemTitle( UGCUpdateHandle_t handle, const char *pchTitle ) = 0; // change the title of an UGC item
+ virtual bool SetItemDescription( UGCUpdateHandle_t handle, const char *pchDescription ) = 0; // change the description of an UGC item
+ virtual bool SetItemMetadata( UGCUpdateHandle_t handle, const char *pchMetaData ) = 0; // change the metadata of an UGC item (max = k_cchDeveloperMetadataMax)
+ virtual bool SetItemVisibility( UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item
+ virtual bool SetItemTags( UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item
+ virtual bool SetItemContent( UGCUpdateHandle_t handle, const char *pszContentFolder ) = 0; // update item content from this local folder
+ virtual bool SetItemPreview( UGCUpdateHandle_t handle, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file, which must be under 1MB in size
+
+ virtual SteamAPICall_t SubmitItemUpdate( UGCUpdateHandle_t handle, const char *pchChangeNote ) = 0; // commit update process started with StartItemUpdate()
+ virtual EItemUpdateStatus GetItemUpdateProgress( UGCUpdateHandle_t handle, uint64 *punBytesProcessed, uint64* punBytesTotal ) = 0;
+
+ // Steam Workshop Consumer API
+ virtual SteamAPICall_t AddItemToFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ virtual SteamAPICall_t RemoveItemFromFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ virtual SteamAPICall_t SubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // subscribe to this item, will be installed ASAP
+ virtual SteamAPICall_t UnsubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // unsubscribe from this item, will be uninstalled after game quits
+ virtual uint32 GetNumSubscribedItems() = 0; // number of subscribed items
+ virtual uint32 GetSubscribedItems( PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; // all subscribed item PublishFileIDs
+
+ // get EItemState flags about item on this client
+ virtual uint32 GetItemState( PublishedFileId_t nPublishedFileID ) = 0;
+
+ // get info about currently installed content on disc for items that have k_EItemStateInstalled set
+ // if k_EItemStateLegacyItem is set, pchFolder contains the path to the legacy file itself (not a folder)
+ virtual bool GetItemInstallInfo( PublishedFileId_t nPublishedFileID, uint64 *punSizeOnDisk, char *pchFolder, uint32 cchFolderSize, uint32 *punTimeStamp ) = 0;
+
+ // get info about pending update for items that have k_EItemStateNeedsUpdate set. punBytesTotal will be valid after download started once
+ virtual bool GetItemDownloadInfo( PublishedFileId_t nPublishedFileID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // download new or update already installed item. If function returns true, wait for DownloadItemResult_t. If the item is already installed,
+ // then files on disk should not be used until callback received. If item is not subscribed to, it will be cached for some time.
+ // If bHighPriority is set, any other item download will be suspended and this item downloaded ASAP.
+ virtual bool DownloadItem( PublishedFileId_t nPublishedFileID, bool bHighPriority ) = 0;
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION005"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::CreateItem()
+//-----------------------------------------------------------------------------
+struct CreateItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 3 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId; // new item got this UGC PublishFileID
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::SubmitItemUpdate()
+//-----------------------------------------------------------------------------
+struct SubmitItemUpdateResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 4 };
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a Workshop item has been installed or updated
+//-----------------------------------------------------------------------------
+struct ItemInstalled_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 5 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of DownloadItem(), existing item files can be accessed again
+//-----------------------------------------------------------------------------
+struct DownloadItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 6 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: result of AddItemToFavorites() or RemoveItemFromFavorites()
+//-----------------------------------------------------------------------------
+struct UserFavoriteItemsListChanged_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 7 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bWasAddRequest;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_133a/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteamuser.h b/lsteamclient/steamworks_sdk_133a/isteamuser.h
new file mode 100644
index 00000000..efdd6677
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamuser.h
@@ -0,0 +1,379 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+ // Requests a URL which authenticates an in-game browser for store check-out,
+ // and then redirects to the specified URL. As long as the in-game browser
+ // accepts and handles session cookies, Steam microtransaction checkout pages
+ // will automatically recognize the user instead of presenting a login page.
+ // The result of this API call will be a StoreAuthURLResponse_t callback.
+ // NOTE: The URL has a very short lifetime to prevent history-snooping attacks,
+ // so you should only call this API when you are about to launch the browser,
+ // or else immediately navigate to the result URL using a hidden browser window.
+ // NOTE 2: The resulting authorization cookie has an expiration time of one day,
+ // so it would be a good idea to request and visit a new auth URL every 12 hours.
+ virtual SteamAPICall_t RequestStoreAuthURL( const char *pchRedirectURL ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser018"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Signaled whenever licenses change
+//-----------------------------------------------------------------------------
+struct LicensesUpdated_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 25 };
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to ISteamUser::RequestStoreAuthURL
+//-----------------------------------------------------------------------------
+struct StoreAuthURLResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 65 };
+ char m_szURL[512];
+};
+
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteamuserstats.h b/lsteamclient/steamworks_sdk_133a/isteamuserstats.h
new file mode 100644
index 00000000..8c0c210d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamuserstats.h
@@ -0,0 +1,465 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ METHOD_DESC(Downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers)
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard,
+ ARRAY_COUNT_D(cUsers, Array of users to retrieve) CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteamutils.h b/lsteamclient/steamworks_sdk_133a/isteamutils.h
new file mode 100644
index 00000000..2e302b9e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamutils.h
@@ -0,0 +1,307 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils007"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_133a/isteamvideo.h b/lsteamclient/steamworks_sdk_133a/isteamvideo.h
new file mode 100644
index 00000000..4431b4a1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/isteamvideo.h
@@ -0,0 +1,60 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Video
+//
+//=============================================================================
+
+#ifndef ISTEAMVIDEO_H
+#define ISTEAMVIDEO_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Video API
+//-----------------------------------------------------------------------------
+class ISteamVideo
+{
+public:
+
+ // Get a URL suitable for streaming the given Video app ID's video
+ virtual void GetVideoURL( AppId_t unVideoAppID ) = 0;
+
+ // returns true if user is uploading a live broadcast
+ virtual bool IsBroadcasting( int *pnNumViewers ) = 0;
+};
+
+#define STEAMVIDEO_INTERFACE_VERSION "STEAMVIDEO_INTERFACE_V001"
+
+DEFINE_CALLBACK( BroadcastUploadStart_t, k_iClientVideoCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( BroadcastUploadStop_t, k_iClientVideoCallbacks + 5 )
+ CALLBACK_MEMBER( 0, EBroadcastUploadResult, m_eResult )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( GetVideoURLResult_t, k_iClientVideoCallbacks + 11 )
+ CALLBACK_MEMBER( 0, EResult, m_eResult )
+ CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID )
+ CALLBACK_MEMBER( 2, char, m_rgchURL[256] )
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMVIDEO_H
diff --git a/lsteamclient/steamworks_sdk_133a/matchmakingtypes.h b/lsteamclient/steamworks_sdk_133a/matchmakingtypes.h
new file mode 100644
index 00000000..28c58500
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/matchmakingtypes.h
@@ -0,0 +1,249 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_133a/steam_api.h b/lsteamclient/steamworks_sdk_133a/steam_api.h
new file mode 100644
index 00000000..7c937109
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/steam_api.h
@@ -0,0 +1,604 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteammusicremote.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+#include "isteamhtmlsurface.h"
+#include "isteaminventory.h"
+#include "isteamvideo.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *S_CALLTYPE SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool S_CALLTYPE SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool S_CALLTYPE SteamAPI_Init();
+#endif
+
+S_API ISteamUser *S_CALLTYPE SteamUser();
+S_API ISteamFriends *S_CALLTYPE SteamFriends();
+S_API ISteamUtils *S_CALLTYPE SteamUtils();
+S_API ISteamMatchmaking *S_CALLTYPE SteamMatchmaking();
+S_API ISteamUserStats *S_CALLTYPE SteamUserStats();
+S_API ISteamApps *S_CALLTYPE SteamApps();
+S_API ISteamNetworking *S_CALLTYPE SteamNetworking();
+S_API ISteamMatchmakingServers *S_CALLTYPE SteamMatchmakingServers();
+S_API ISteamRemoteStorage *S_CALLTYPE SteamRemoteStorage();
+S_API ISteamScreenshots *S_CALLTYPE SteamScreenshots();
+S_API ISteamHTTP *S_CALLTYPE SteamHTTP();
+S_API ISteamUnifiedMessages *S_CALLTYPE SteamUnifiedMessages();
+S_API ISteamController *S_CALLTYPE SteamController();
+S_API ISteamUGC *S_CALLTYPE SteamUGC();
+S_API ISteamAppList *S_CALLTYPE SteamAppList();
+S_API ISteamMusic *S_CALLTYPE SteamMusic();
+S_API ISteamMusicRemote *S_CALLTYPE SteamMusicRemote();
+S_API ISteamHTMLSurface *S_CALLTYPE SteamHTMLSurface();
+S_API ISteamInventory *S_CALLTYPE SteamInventory();
+S_API ISteamVideo *S_CALLTYPE SteamVideo();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender *S_CALLTYPE SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() { return m_pController; }
+ ISteamUGC* SteamUGC() { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() { return m_pSteamMusic; }
+ ISteamMusicRemote* SteamMusicRemote() { return m_pSteamMusicRemote; }
+ ISteamHTMLSurface* SteamHTMLSurface() { return m_pSteamHTMLSurface; }
+ ISteamInventory* SteamInventory() { return m_pSteamInventory; }
+ ISteamVideo* SteamVideo() { return m_pSteamVideo; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+ ISteamMusicRemote *m_pSteamMusicRemote;
+ ISteamHTMLSurface *m_pSteamHTMLSurface;
+ ISteamInventory *m_pSteamInventory;
+ ISteamVideo *m_pSteamVideo;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamMusicRemote= NULL;
+ m_pSteamHTMLSurface = NULL;
+ m_pSteamInventory = NULL;
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = NULL;
+#endif
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = SteamClient()->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = SteamClient()->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = SteamClient()->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = SteamClient()->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ {
+ return false;
+ }
+
+ m_pSteamMusicRemote = SteamClient()->GetISteamMusicRemote( hSteamUser, hSteamPipe, STEAMMUSICREMOTE_INTERFACE_VERSION );
+ if ( !m_pSteamMusicRemote )
+ {
+ return false;
+ }
+
+ m_pSteamHTMLSurface = SteamClient()->GetISteamHTMLSurface( hSteamUser, hSteamPipe, STEAMHTMLSURFACE_INTERFACE_VERSION );
+ if ( !m_pSteamHTMLSurface )
+ {
+ return false;
+ }
+
+ m_pSteamInventory = SteamClient()->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ {
+ return false;
+ }
+
+ m_pSteamVideo = SteamClient()->GetISteamVideo( hSteamUser, hSteamPipe, STEAMVIDEO_INTERFACE_VERSION );
+ if ( !m_pSteamVideo )
+ {
+ return false;
+ }
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_133a/steam_api_flat.h b/lsteamclient/steamworks_sdk_133a/steam_api_flat.h
new file mode 100644
index 00000000..a6b4cc21
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/steam_api_flat.h
@@ -0,0 +1,693 @@
+//====== Copyright (c) 1996-2014, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Header for flatted SteamAPI. Use this for binding to other languages.
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+#ifndef STEAMAPIFLAT_H
+#define STEAMAPIFLAT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <stdint.h>
+#include "steam/steamvr.h"
+
+
+S_API HSteamPipe SteamAPI_ISteamClient_CreateSteamPipe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamClient_BReleaseSteamPipe(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_ConnectToGlobalUser(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_CreateLocalUser(intptr_t instancePtr, HSteamPipe * phSteamPipe, EAccountType eAccountType);
+S_API void SteamAPI_ISteamClient_ReleaseUser(intptr_t instancePtr, HSteamPipe hSteamPipe, HSteamUser hUser);
+S_API class ISteamUser * SteamAPI_ISteamClient_GetISteamUser(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServer * SteamAPI_ISteamClient_GetISteamGameServer(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_SetLocalIPBinding(intptr_t instancePtr, uint32 unIP, uint16 usPort);
+S_API class ISteamFriends * SteamAPI_ISteamClient_GetISteamFriends(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUtils * SteamAPI_ISteamClient_GetISteamUtils(intptr_t instancePtr, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmaking * SteamAPI_ISteamClient_GetISteamMatchmaking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmakingServers * SteamAPI_ISteamClient_GetISteamMatchmakingServers(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void * SteamAPI_ISteamClient_GetISteamGenericInterface(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUserStats * SteamAPI_ISteamClient_GetISteamUserStats(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServerStats * SteamAPI_ISteamClient_GetISteamGameServerStats(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamApps * SteamAPI_ISteamClient_GetISteamApps(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamNetworking * SteamAPI_ISteamClient_GetISteamNetworking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamRemoteStorage * SteamAPI_ISteamClient_GetISteamRemoteStorage(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamScreenshots * SteamAPI_ISteamClient_GetISteamScreenshots(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_RunFrame(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamClient_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamClient_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(intptr_t instancePtr);
+S_API class ISteamHTTP * SteamAPI_ISteamClient_GetISteamHTTP(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUnifiedMessages * SteamAPI_ISteamClient_GetISteamUnifiedMessages(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamController * SteamAPI_ISteamClient_GetISteamController(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUGC * SteamAPI_ISteamClient_GetISteamUGC(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamAppList * SteamAPI_ISteamClient_GetISteamAppList(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusic * SteamAPI_ISteamClient_GetISteamMusic(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusicRemote * SteamAPI_ISteamClient_GetISteamMusicRemote(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamHTMLSurface * SteamAPI_ISteamClient_GetISteamHTMLSurface(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_Set_SteamAPI_CPostAPIResultInProcess(intptr_t instancePtr, SteamAPI_PostAPIResultInProcess_t func);
+S_API void SteamAPI_ISteamClient_Remove_SteamAPI_CPostAPIResultInProcess(intptr_t instancePtr, SteamAPI_PostAPIResultInProcess_t func);
+S_API void SteamAPI_ISteamClient_Set_SteamAPI_CCheckCallbackRegisteredInProcess(intptr_t instancePtr, SteamAPI_CheckCallbackRegistered_t func);
+S_API class ISteamInventory * SteamAPI_ISteamClient_GetISteamInventory(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamVideo * SteamAPI_ISteamClient_GetISteamVideo(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API HSteamUser SteamAPI_ISteamUser_GetHSteamUser(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BLoggedOn(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamUser_GetSteamID(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUser_InitiateGameConnection(intptr_t instancePtr, void * pAuthBlob, int cbMaxAuthBlob, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure);
+S_API void SteamAPI_ISteamUser_TerminateGameConnection(intptr_t instancePtr, uint32 unIPServer, uint16 usPortServer);
+S_API void SteamAPI_ISteamUser_TrackAppUsageEvent(intptr_t instancePtr, class CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo);
+S_API bool SteamAPI_ISteamUser_GetUserDataFolder(intptr_t instancePtr, char * pchBuffer, int cubBuffer);
+S_API void SteamAPI_ISteamUser_StartVoiceRecording(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_StopVoiceRecording(intptr_t instancePtr);
+S_API EVoiceResult SteamAPI_ISteamUser_GetAvailableVoice(intptr_t instancePtr, uint32 * pcbCompressed, uint32 * pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_GetVoice(intptr_t instancePtr, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_DecompressVoice(intptr_t instancePtr, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate);
+S_API uint32 SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(intptr_t instancePtr);
+S_API HAuthTicket SteamAPI_ISteamUser_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamUser_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamUser_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamUser_BIsBehindNAT(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_AdvertiseGame(intptr_t instancePtr, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestEncryptedAppTicket(intptr_t instancePtr, void * pDataToInclude, int cbDataToInclude);
+S_API bool SteamAPI_ISteamUser_GetEncryptedAppTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API int SteamAPI_ISteamUser_GetGameBadgeLevel(intptr_t instancePtr, int nSeries, bool bFoil);
+S_API int SteamAPI_ISteamUser_GetPlayerSteamLevel(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestStoreAuthURL(intptr_t instancePtr, const char * pchRedirectURL);
+S_API const char * SteamAPI_ISteamFriends_GetPersonaName(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_SetPersonaName(intptr_t instancePtr, const char * pchPersonaName);
+S_API EPersonaState SteamAPI_ISteamFriends_GetPersonaState(intptr_t instancePtr);
+S_API int SteamAPI_ISteamFriends_GetFriendCount(intptr_t instancePtr, int iFriendFlags);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendByIndex(intptr_t instancePtr, int iFriend, int iFriendFlags);
+S_API EFriendRelationship SteamAPI_ISteamFriends_GetFriendRelationship(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API EPersonaState SteamAPI_ISteamFriends_GetFriendPersonaState(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaName(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_GetFriendGamePlayed(intptr_t instancePtr, class CSteamID steamIDFriend, struct FriendGameInfo_t * pFriendGameInfo);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(intptr_t instancePtr, class CSteamID steamIDFriend, int iPersonaName);
+S_API int SteamAPI_ISteamFriends_GetFriendSteamLevel(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetPlayerNickname(intptr_t instancePtr, class CSteamID steamIDPlayer);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupCount(intptr_t instancePtr);
+S_API FriendsGroupID_t SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(intptr_t instancePtr, int iFG);
+S_API const char * SteamAPI_ISteamFriends_GetFriendsGroupName(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API void SteamAPI_ISteamFriends_GetFriendsGroupMembersList(intptr_t instancePtr, FriendsGroupID_t friendsGroupID, class CSteamID * pOutSteamIDMembers, int nMembersCount);
+S_API bool SteamAPI_ISteamFriends_HasFriend(intptr_t instancePtr, class CSteamID steamIDFriend, int iFriendFlags);
+S_API int SteamAPI_ISteamFriends_GetClanCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetClanByIndex(intptr_t instancePtr, int iClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanName(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanTag(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_GetClanActivityCounts(intptr_t instancePtr, class CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_DownloadClanActivityCounts(intptr_t instancePtr, class CSteamID * psteamIDClans, int cClansToRequest);
+S_API int SteamAPI_ISteamFriends_GetFriendCountFromSource(intptr_t instancePtr, class CSteamID steamIDSource);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(intptr_t instancePtr, class CSteamID steamIDSource, int iFriend);
+S_API bool SteamAPI_ISteamFriends_IsUserInSource(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDSource);
+S_API void SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(intptr_t instancePtr, class CSteamID steamIDUser, bool bSpeaking);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlay(intptr_t instancePtr, const char * pchDialog);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToUser(intptr_t instancePtr, const char * pchDialog, class CSteamID steamID);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(intptr_t instancePtr, const char * pchURL);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToStore(intptr_t instancePtr, AppId_t nAppID, EOverlayToStoreFlag eFlag);
+S_API void SteamAPI_ISteamFriends_SetPlayedWith(intptr_t instancePtr, class CSteamID steamIDUserPlayedWith);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API int SteamAPI_ISteamFriends_GetSmallFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetMediumFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetLargeFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_RequestUserInformation(intptr_t instancePtr, class CSteamID steamIDUser, bool bRequireNameOnly);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_RequestClanOfficerList(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOwner(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanOfficerCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOfficerByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iOfficer);
+S_API uint32 SteamAPI_ISteamFriends_GetUserRestrictions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamFriends_SetRichPresence(intptr_t instancePtr, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamFriends_ClearRichPresence(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchKey);
+S_API int SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(intptr_t instancePtr, class CSteamID steamIDFriend, int iKey);
+S_API void SteamAPI_ISteamFriends_RequestFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_InviteUserToGame(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchConnectString);
+S_API int SteamAPI_ISteamFriends_GetCoplayFriendCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetCoplayFriend(intptr_t instancePtr, int iCoplayFriend);
+S_API int SteamAPI_ISteamFriends_GetFriendCoplayTime(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API AppId_t SteamAPI_ISteamFriends_GetFriendCoplayGame(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_JoinClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_LeaveClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanChatMemberCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetChatMemberByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iUser);
+S_API bool SteamAPI_ISteamFriends_SendClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, const char * pchText);
+S_API int SteamAPI_ISteamFriends_GetClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, class CSteamID * psteamidChatter);
+S_API bool SteamAPI_ISteamFriends_IsClanChatAdmin(intptr_t instancePtr, class CSteamID steamIDClanChat, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_SetListenForFriendsMessages(intptr_t instancePtr, bool bInterceptEnabled);
+S_API bool SteamAPI_ISteamFriends_ReplyToFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchMsgToSend);
+S_API int SteamAPI_ISteamFriends_GetFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_GetFollowerCount(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_IsFollowing(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_EnumerateFollowingList(intptr_t instancePtr, uint32 unStartIndex);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceAppActive(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(intptr_t instancePtr);
+S_API EUniverse SteamAPI_ISteamUtils_GetConnectedUniverse(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetServerRealTime(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUtils_GetIPCountry(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetImageSize(intptr_t instancePtr, int iImage, uint32 * pnWidth, uint32 * pnHeight);
+S_API bool SteamAPI_ISteamUtils_GetImageRGBA(intptr_t instancePtr, int iImage, uint8 * pubDest, int nDestBufferSize);
+S_API bool SteamAPI_ISteamUtils_GetCSERIPPort(intptr_t instancePtr, uint32 * unIP, uint16 * usPort);
+S_API uint8 SteamAPI_ISteamUtils_GetCurrentBatteryPower(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetAppID(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationPosition(intptr_t instancePtr, ENotificationPosition eNotificationPosition);
+S_API bool SteamAPI_ISteamUtils_IsAPICallCompleted(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, bool * pbFailed);
+S_API ESteamAPICallFailure SteamAPI_ISteamUtils_GetAPICallFailureReason(intptr_t instancePtr, SteamAPICall_t hSteamAPICall);
+S_API bool SteamAPI_ISteamUtils_GetAPICallResult(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed);
+S_API void SteamAPI_ISteamUtils_RunFrame(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamUtils_IsOverlayEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_BOverlayNeedsPresent(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUtils_CheckFileSignature(intptr_t instancePtr, const char * szFileName);
+S_API bool SteamAPI_ISteamUtils_ShowGamepadTextInput(intptr_t instancePtr, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText);
+S_API uint32 SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(intptr_t instancePtr, char * pchText, uint32 cchText);
+S_API const char * SteamAPI_ISteamUtils_GetSteamUILanguage(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_IsSteamRunningInVR(intptr_t instancePtr);
+S_API int SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMatchmaking_GetFavoriteGame(intptr_t instancePtr, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer);
+S_API int SteamAPI_ISteamMatchmaking_AddFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer);
+S_API bool SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_RequestLobbyList(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(intptr_t instancePtr, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToBeCloseTo);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(intptr_t instancePtr, int nSlotsAvailable);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(intptr_t instancePtr, ELobbyDistanceFilter eLobbyDistanceFilter);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(intptr_t instancePtr, int cMaxResults);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyByIndex(intptr_t instancePtr, int iLobby);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_CreateLobby(intptr_t instancePtr, ELobbyType eLobbyType, int cMaxMembers);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_JoinLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_LeaveLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_InviteUserToLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDInvitee);
+S_API int SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iMember);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyDataCount(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize);
+S_API bool SteamAPI_ISteamMatchmaking_DeleteLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDUser, const char * pchKey);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(intptr_t instancePtr, class CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(intptr_t instancePtr, class CSteamID steamIDLobby, int iChatID, class CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API bool SteamAPI_ISteamMatchmaking_RequestLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, class CSteamID steamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, class CSteamID * psteamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby, int cMaxMembers);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyType(intptr_t instancePtr, class CSteamID steamIDLobby, ELobbyType eLobbyType);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyJoinable(intptr_t instancePtr, class CSteamID steamIDLobby, bool bLobbyJoinable);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDNewOwner);
+S_API bool SteamAPI_ISteamMatchmaking_SetLinkedLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDLobbyDependent);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(intptr_t instancePtr, HServerListRequest hRequest, EMatchMakingServerResponse response);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(intptr_t instancePtr, class gameserveritem_t & server);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(intptr_t instancePtr, const char * pchName, int nScore, float flTimePlayed);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(intptr_t instancePtr, const char * pchRule, const char * pchValue);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(intptr_t instancePtr);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestLANServerList(intptr_t instancePtr, AppId_t iApp, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_ReleaseRequest(intptr_t instancePtr, HServerListRequest hServerListRequest);
+S_API class gameserveritem_t * SteamAPI_ISteamMatchmakingServers_GetServerDetails(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API bool SteamAPI_ISteamMatchmakingServers_IsRefreshing(intptr_t instancePtr, HServerListRequest hRequest);
+S_API int SteamAPI_ISteamMatchmakingServers_GetServerCount(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshServer(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PingServer(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPingResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PlayerDetails(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPlayersResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_ServerRules(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingRulesResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelServerQuery(intptr_t instancePtr, HServerQuery hServerQuery);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWrite(intptr_t instancePtr, const char * pchFile, const void * pvData, int32 cubData);
+S_API int32 SteamAPI_ISteamRemoteStorage_FileRead(intptr_t instancePtr, const char * pchFile, void * pvData, int32 cubDataToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileForget(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileDelete(intptr_t instancePtr, const char * pchFile);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileShare(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(intptr_t instancePtr, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform);
+S_API UGCFileWriteStreamHandle_t SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileExists(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FilePersisted(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileSize(intptr_t instancePtr, const char * pchFile);
+S_API int64 SteamAPI_ISteamRemoteStorage_GetFileTimestamp(intptr_t instancePtr, const char * pchFile);
+S_API ERemoteStoragePlatform SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileCount(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(intptr_t instancePtr, int iFile, int32 * pnFileSizeInBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_GetQuota(intptr_t instancePtr, int32 * pnTotalBytes, int32 * puAvailableBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(intptr_t instancePtr);
+S_API void SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(intptr_t instancePtr, bool bEnabled);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownload(intptr_t instancePtr, UGCHandle_t hContent, uint32 unPriority);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(intptr_t instancePtr, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDetails(intptr_t instancePtr, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, class CSteamID * pSteamIDOwner);
+S_API int32 SteamAPI_ISteamRemoteStorage_UGCRead(intptr_t instancePtr, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(intptr_t instancePtr);
+S_API UGCHandle_t SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(intptr_t instancePtr, int32 iCachedContent);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(intptr_t instancePtr, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType);
+S_API PublishedFileUpdateHandle_t SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_DeletePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(intptr_t instancePtr, class CSteamID steamId, uint32 unStartIndex, struct SteamParamStringArray_t * pRequiredTags, struct SteamParamStringArray_t * pExcludedTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishVideo(intptr_t instancePtr, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(intptr_t instancePtr, EWorkshopFileAction eAction, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(intptr_t instancePtr, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, struct SteamParamStringArray_t * pTags, struct SteamParamStringArray_t * pUserTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(intptr_t instancePtr, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority);
+S_API bool SteamAPI_ISteamUserStats_RequestCurrentStats(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUserStats_GetStat(intptr_t instancePtr, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetStat0(intptr_t instancePtr, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_SetStat(intptr_t instancePtr, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamUserStats_SetStat0(intptr_t instancePtr, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamUserStats_UpdateAvgRateStat(intptr_t instancePtr, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamUserStats_GetAchievement(intptr_t instancePtr, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_SetAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_ClearAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(intptr_t instancePtr, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_StoreStats(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetAchievementIcon(intptr_t instancePtr, const char * pchName);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(intptr_t instancePtr, const char * pchName, const char * pchKey);
+S_API bool SteamAPI_ISteamUserStats_IndicateAchievementProgress(intptr_t instancePtr, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress);
+S_API uint32 SteamAPI_ISteamUserStats_GetNumAchievements(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementName(intptr_t instancePtr, uint32 iAchievement);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_ResetAllStats(intptr_t instancePtr, bool bAchievementsToo);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName);
+S_API const char * SteamAPI_ISteamUserStats_GetLeaderboardName(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API int SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardSortMethod SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardDisplayType SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, class CSteamID * prgUsers, int cUsers);
+S_API bool SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(intptr_t instancePtr, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, struct LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_UploadLeaderboardScore(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_AttachLeaderboardUGC(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(intptr_t instancePtr, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API int SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(intptr_t instancePtr, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(intptr_t instancePtr, const char * pchName, float * pflPercent);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalStats(intptr_t instancePtr, int nHistoryDays);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat(intptr_t instancePtr, const char * pchStatName, int64 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat0(intptr_t instancePtr, const char * pchStatName, double * pData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory(intptr_t instancePtr, const char * pchStatName, int64 * pData, uint32 cubData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory0(intptr_t instancePtr, const char * pchStatName, double * pData, uint32 cubData);
+S_API bool SteamAPI_ISteamApps_BIsSubscribed(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsLowViolence(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsCybercafe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsVACBanned(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetCurrentGameLanguage(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetAvailableGameLanguages(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedApp(intptr_t instancePtr, AppId_t appID);
+S_API bool SteamAPI_ISteamApps_BIsDlcInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint32 SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(intptr_t instancePtr);
+S_API int SteamAPI_ISteamApps_GetDLCCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BGetDLCDataByIndex(intptr_t instancePtr, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize);
+S_API void SteamAPI_ISteamApps_InstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_UninstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_GetCurrentBetaName(intptr_t instancePtr, char * pchName, int cchNameBufferSize);
+S_API bool SteamAPI_ISteamApps_MarkContentCorrupt(intptr_t instancePtr, bool bMissingFilesOnly);
+S_API uint32 SteamAPI_ISteamApps_GetInstalledDepots(intptr_t instancePtr, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots);
+S_API uint32 SteamAPI_ISteamApps_GetAppInstallDir(intptr_t instancePtr, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize);
+S_API bool SteamAPI_ISteamApps_BIsAppInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint64 SteamAPI_ISteamApps_GetAppOwner(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetLaunchQueryParam(intptr_t instancePtr, const char * pchKey);
+S_API bool SteamAPI_ISteamApps_GetDlcDownloadProgress(intptr_t instancePtr, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API int SteamAPI_ISteamApps_GetAppBuildId(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamNetworking_SendP2PPacket(intptr_t instancePtr, class CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_IsP2PPacketAvailable(intptr_t instancePtr, uint32 * pcubMsgSize, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_ReadP2PPacket(intptr_t instancePtr, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, class CSteamID * psteamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(intptr_t instancePtr, class CSteamID steamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_GetP2PSessionState(intptr_t instancePtr, class CSteamID steamIDRemote, struct P2PSessionState_t * pConnectionState);
+S_API bool SteamAPI_ISteamNetworking_AllowP2PPacketRelay(intptr_t instancePtr, bool bAllow);
+S_API SNetListenSocket_t SteamAPI_ISteamNetworking_CreateListenSocket(intptr_t instancePtr, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(intptr_t instancePtr, class CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateConnectionSocket(intptr_t instancePtr, uint32 nIP, uint16 nPort, int nTimeoutSec);
+S_API bool SteamAPI_ISteamNetworking_DestroySocket(intptr_t instancePtr, SNetSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_DestroyListenSocket(intptr_t instancePtr, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_SendDataOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_RetrieveDataFromSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailable(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_RetrieveData(intptr_t instancePtr, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_GetSocketInfo(intptr_t instancePtr, SNetSocket_t hSocket, class CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote);
+S_API bool SteamAPI_ISteamNetworking_GetListenSocketInfo(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort);
+S_API ESNetSocketConnectionType SteamAPI_ISteamNetworking_GetSocketConnectionType(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API int SteamAPI_ISteamNetworking_GetMaxPacketSize(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_WriteScreenshot(intptr_t instancePtr, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(intptr_t instancePtr, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight);
+S_API void SteamAPI_ISteamScreenshots_TriggerScreenshot(intptr_t instancePtr);
+S_API void SteamAPI_ISteamScreenshots_HookScreenshots(intptr_t instancePtr, bool bHook);
+S_API bool SteamAPI_ISteamScreenshots_SetLocation(intptr_t instancePtr, ScreenshotHandle hScreenshot, const char * pchLocation);
+S_API bool SteamAPI_ISteamScreenshots_TagUser(intptr_t instancePtr, ScreenshotHandle hScreenshot, class CSteamID steamID);
+S_API bool SteamAPI_ISteamScreenshots_TagPublishedFile(intptr_t instancePtr, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID);
+S_API bool SteamAPI_ISteamMusic_BIsEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusic_BIsPlaying(intptr_t instancePtr);
+S_API AudioPlayback_Status SteamAPI_ISteamMusic_GetPlaybackStatus(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Play(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Pause(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayPrevious(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayNext(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_SetVolume(intptr_t instancePtr, float flVolume);
+S_API float SteamAPI_ISteamMusic_GetVolume(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BActivationSuccess(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_SetDisplayName(intptr_t instancePtr, const char * pchDisplayName);
+S_API bool SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayPrevious(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayNext(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableQueue(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlaylists(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(intptr_t instancePtr, AudioPlayback_Status nStatus);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateVolume(intptr_t instancePtr, float flValue);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(intptr_t instancePtr, bool bAvailable);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(intptr_t instancePtr, const char * pchText);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(intptr_t instancePtr, int nValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_QueueWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetQueueEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetQueueEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_QueueDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetPlaylistEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistDidChange(intptr_t instancePtr);
+S_API HTTPRequestHandle SteamAPI_ISteamHTTP_CreateHTTPRequest(intptr_t instancePtr, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(intptr_t instancePtr, HTTPRequestHandle hRequest, uint64 ulContextValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_DeferHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 * unBodySize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 cOffset, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_ReleaseHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(intptr_t instancePtr, HTTPRequestHandle hRequest, float * pflPercentOut);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen);
+S_API HTTPCookieContainerHandle SteamAPI_ISteamHTTP_CreateCookieContainer(intptr_t instancePtr, bool bAllowResponsesToModify);
+S_API bool SteamAPI_ISteamHTTP_ReleaseCookieContainer(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetCookie(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer, const char * pchHost, const char * pchUrl, const char * pchCookie);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(intptr_t instancePtr, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchUserAgentInfo);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(intptr_t instancePtr, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unMilliseconds);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(intptr_t instancePtr, HTTPRequestHandle hRequest, bool * pbWasTimedOut);
+S_API ClientUnifiedMessageHandle SteamAPI_ISteamUnifiedMessages_SendMethod(intptr_t instancePtr, const char * pchServiceMethod, const void * pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, uint32 * punResponseSize, EResult * peResult);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseData(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, void * pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease);
+S_API bool SteamAPI_ISteamUnifiedMessages_ReleaseMethod(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle);
+S_API bool SteamAPI_ISteamUnifiedMessages_SendNotification(intptr_t instancePtr, const char * pchServiceNotification, const void * pNotificationBuffer, uint32 unNotificationBufferSize);
+S_API bool SteamAPI_ISteamController_Init(intptr_t instancePtr, const char * pchAbsolutePathToControllerConfigVDF);
+S_API bool SteamAPI_ISteamController_Shutdown(intptr_t instancePtr);
+S_API void SteamAPI_ISteamController_RunFrame(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamController_GetControllerState(intptr_t instancePtr, uint32 unControllerIndex, struct SteamControllerState001_t * pState);
+S_API void SteamAPI_ISteamController_TriggerHapticPulse(intptr_t instancePtr, uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec);
+S_API void SteamAPI_ISteamController_SetOverrideMode(intptr_t instancePtr, const char * pchMode);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(intptr_t instancePtr, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(intptr_t instancePtr, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SendQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCResult(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, struct SteamUGCDetails_t * pDetails);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCPreviewURL(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCChildren(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCStatistic(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 * pStatValue);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, bool * pbIsImage);
+S_API bool SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_AddRequiredTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_AddExcludedTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_SetReturnLongDescription(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnLongDescription);
+S_API bool SteamAPI_ISteamUGC_SetReturnMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnMetadata);
+S_API bool SteamAPI_ISteamUGC_SetReturnChildren(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnChildren);
+S_API bool SteamAPI_ISteamUGC_SetReturnAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews);
+S_API bool SteamAPI_ISteamUGC_SetReturnTotalOnly(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnTotalOnly);
+S_API bool SteamAPI_ISteamUGC_SetAllowCachedResponse(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds);
+S_API bool SteamAPI_ISteamUGC_SetCloudFileNameFilter(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pMatchCloudFileName);
+S_API bool SteamAPI_ISteamUGC_SetMatchAnyTag(intptr_t instancePtr, UGCQueryHandle_t handle, bool bMatchAnyTag);
+S_API bool SteamAPI_ISteamUGC_SetSearchText(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pSearchText);
+S_API bool SteamAPI_ISteamUGC_SetRankedByTrendDays(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unDays);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RequestUGCDetails(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_CreateItem(intptr_t instancePtr, AppId_t nConsumerAppId, EWorkshopFileType eFileType);
+S_API UGCUpdateHandle_t SteamAPI_ISteamUGC_StartItemUpdate(intptr_t instancePtr, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_SetItemTitle(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchTitle);
+S_API bool SteamAPI_ISteamUGC_SetItemDescription(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchDescription);
+S_API bool SteamAPI_ISteamUGC_SetItemMetadata(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchMetaData);
+S_API bool SteamAPI_ISteamUGC_SetItemVisibility(intptr_t instancePtr, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamUGC_SetItemTags(intptr_t instancePtr, UGCUpdateHandle_t updateHandle, const struct SteamParamStringArray_t * pTags);
+S_API bool SteamAPI_ISteamUGC_SetItemContent(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszContentFolder);
+S_API bool SteamAPI_ISteamUGC_SetItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubmitItemUpdate(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchChangeNote);
+S_API EItemUpdateStatus SteamAPI_ISteamUGC_GetItemUpdateProgress(intptr_t instancePtr, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddItemToFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveItemFromFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_UnsubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API uint32 SteamAPI_ISteamUGC_GetNumSubscribedItems(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUGC_GetSubscribedItems(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API uint32 SteamAPI_ISteamUGC_GetItemState(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_GetItemInstallInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp);
+S_API bool SteamAPI_ISteamUGC_GetItemDownloadInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API bool SteamAPI_ISteamUGC_DownloadItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bHighPriority);
+S_API uint32 SteamAPI_ISteamAppList_GetNumInstalledApps(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamAppList_GetInstalledApps(intptr_t instancePtr, AppId_t * pvecAppID, uint32 unMaxAppIDs);
+S_API int SteamAPI_ISteamAppList_GetAppName(intptr_t instancePtr, AppId_t nAppID, char * pchName, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppInstallDir(intptr_t instancePtr, AppId_t nAppID, char * pchDirectory, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppBuildId(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Shutdown(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamHTMLSurface_CreateBrowser(intptr_t instancePtr, const char * pchUserAgent, const char * pchUserCSS);
+S_API void SteamAPI_ISteamHTMLSurface_RemoveBrowser(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_LoadURL(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData);
+S_API void SteamAPI_ISteamHTMLSurface_SetSize(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight);
+S_API void SteamAPI_ISteamHTMLSurface_StopLoad(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Reload(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoBack(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoForward(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_AddHeader(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamHTMLSurface_ExecuteJavascript(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchScript);
+S_API void SteamAPI_ISteamHTMLSurface_MouseUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDoubleClick(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseMove(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_MouseWheel(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int32 nDelta);
+S_API void SteamAPI_ISteamHTMLSurface_KeyDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyChar(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetVerticalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetKeyFocus(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus);
+S_API void SteamAPI_ISteamHTMLSurface_ViewSource(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_CopyToClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_PasteFromClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Find(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse);
+S_API void SteamAPI_ISteamHTMLSurface_StopFind(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_SetCookie(intptr_t instancePtr, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly);
+S_API void SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY);
+S_API void SteamAPI_ISteamHTMLSurface_AllowStartRequest(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bAllowed);
+S_API void SteamAPI_ISteamHTMLSurface_JSDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bResult);
+S_API void SteamAPI_ISteamHTMLSurface_FileLoadDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char ** pchSelectedFiles);
+S_API EResult SteamAPI_ISteamInventory_GetResultStatus(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetResultItems(intptr_t instancePtr, SteamInventoryResult_t resultHandle, struct SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize);
+S_API uint32 SteamAPI_ISteamInventory_GetResultTimestamp(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_CheckResultSteamID(intptr_t instancePtr, SteamInventoryResult_t resultHandle, class CSteamID steamIDExpected);
+S_API void SteamAPI_ISteamInventory_DestroyResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetAllItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_GetItemsByID(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs);
+S_API bool SteamAPI_ISteamInventory_SerializeResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize);
+S_API bool SteamAPI_ISteamInventory_DeserializeResult(intptr_t instancePtr, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE);
+S_API bool SteamAPI_ISteamInventory_GenerateItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_GrantPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_AddPromoItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef);
+S_API bool SteamAPI_ISteamInventory_AddPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_ConsumeItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity);
+S_API bool SteamAPI_ISteamInventory_ExchangeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength);
+S_API bool SteamAPI_ISteamInventory_TransferItemQuantity(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest);
+S_API void SteamAPI_ISteamInventory_SendItemDropHeartbeat(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_TriggerItemDrop(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition);
+S_API bool SteamAPI_ISteamInventory_TradeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, class CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength);
+S_API bool SteamAPI_ISteamInventory_LoadItemDefinitions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionIDs(intptr_t instancePtr, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionProperty(intptr_t instancePtr, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSize);
+S_API void SteamAPI_ISteamVideo_GetVideoURL(intptr_t instancePtr, AppId_t unVideoAppID);
+S_API bool SteamAPI_ISteamVideo_IsBroadcasting(intptr_t instancePtr, int * pnNumViewers);
+S_API void SteamAPI_vr_IVRSystem_GetWindowBounds(intptr_t instancePtr, int32_t * pnX, int32_t * pnY, uint32_t * pnWidth, uint32_t * pnHeight);
+S_API void SteamAPI_vr_IVRSystem_GetRecommendedRenderTargetSize(intptr_t instancePtr, uint32_t * pnWidth, uint32_t * pnHeight);
+S_API void SteamAPI_vr_IVRSystem_GetEyeOutputViewport(intptr_t instancePtr, vr::Hmd_Eye eEye, uint32_t * pnX, uint32_t * pnY, uint32_t * pnWidth, uint32_t * pnHeight);
+S_API struct vr::HmdMatrix44_t SteamAPI_vr_IVRSystem_GetProjectionMatrix(intptr_t instancePtr, vr::Hmd_Eye eEye, float fNearZ, float fFarZ, vr::GraphicsAPIConvention eProjType);
+S_API void SteamAPI_vr_IVRSystem_GetProjectionRaw(intptr_t instancePtr, vr::Hmd_Eye eEye, float * pfLeft, float * pfRight, float * pfTop, float * pfBottom);
+S_API struct vr::DistortionCoordinates_t SteamAPI_vr_IVRSystem_ComputeDistortion(intptr_t instancePtr, vr::Hmd_Eye eEye, float fU, float fV);
+S_API struct vr::HmdMatrix34_t SteamAPI_vr_IVRSystem_GetEyeToHeadTransform(intptr_t instancePtr, vr::Hmd_Eye eEye);
+S_API bool SteamAPI_vr_IVRSystem_GetTimeSinceLastVsync(intptr_t instancePtr, float * pfSecondsSinceLastVsync, uint64_t * pulFrameCounter);
+S_API int32_t SteamAPI_vr_IVRSystem_GetD3D9AdapterIndex(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRSystem_GetDXGIOutputInfo(intptr_t instancePtr, int32_t * pnAdapterIndex, int32_t * pnAdapterOutputIndex);
+S_API void SteamAPI_vr_IVRSystem_AttachToWindow(intptr_t instancePtr, void * hWnd);
+S_API void SteamAPI_vr_IVRSystem_GetDeviceToAbsoluteTrackingPose(intptr_t instancePtr, vr::TrackingUniverseOrigin eOrigin, float fPredictedSecondsToPhotonsFromNow, struct vr::TrackedDevicePose_t * pTrackedDevicePoseArray, uint32_t unTrackedDevicePoseArrayCount);
+S_API void SteamAPI_vr_IVRSystem_ResetSeatedZeroPose(intptr_t instancePtr);
+S_API struct vr::HmdMatrix34_t SteamAPI_vr_IVRSystem_GetSeatedZeroPoseToStandingAbsoluteTrackingPose(intptr_t instancePtr);
+S_API bool SteamAPI_vr_IVRSystem_LoadRenderModel(intptr_t instancePtr, const char * pchRenderModelName, struct vr::RenderModel_t * pRenderModel);
+S_API void SteamAPI_vr_IVRSystem_FreeRenderModel(intptr_t instancePtr, struct vr::RenderModel_t * pRenderModel);
+S_API vr::TrackedDeviceClass SteamAPI_vr_IVRSystem_GetTrackedDeviceClass(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex);
+S_API bool SteamAPI_vr_IVRSystem_IsTrackedDeviceConnected(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex);
+S_API bool SteamAPI_vr_IVRSystem_GetBoolTrackedDeviceProperty(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError * pError);
+S_API float SteamAPI_vr_IVRSystem_GetFloatTrackedDeviceProperty(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError * pError);
+S_API int32_t SteamAPI_vr_IVRSystem_GetInt32TrackedDeviceProperty(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError * pError);
+S_API uint64_t SteamAPI_vr_IVRSystem_GetUint64TrackedDeviceProperty(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError * pError);
+S_API struct vr::HmdMatrix34_t SteamAPI_vr_IVRSystem_GetMatrix34TrackedDeviceProperty(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError * pError);
+S_API uint32_t SteamAPI_vr_IVRSystem_GetStringTrackedDeviceProperty(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex, vr::TrackedDeviceProperty prop, char * pchValue, uint32_t unBufferSize, vr::TrackedPropertyError * pError);
+S_API const char * SteamAPI_vr_IVRSystem_GetPropErrorNameFromEnum(intptr_t instancePtr, vr::TrackedPropertyError error);
+S_API bool SteamAPI_vr_IVRSystem_PollNextEvent(intptr_t instancePtr, struct vr::VREvent_t * pEvent);
+S_API const char * SteamAPI_vr_IVRSystem_GetEventTypeNameFromEnum(intptr_t instancePtr, vr::EVREventType eType);
+S_API struct vr::HiddenAreaMesh_t SteamAPI_vr_IVRSystem_GetHiddenAreaMesh(intptr_t instancePtr, vr::Hmd_Eye eEye);
+S_API vr::ChaperoneCalibrationState SteamAPI_vr_IVRChaperone_GetCalibrationState(intptr_t instancePtr);
+S_API bool SteamAPI_vr_IVRChaperone_GetSoftBoundsInfo(intptr_t instancePtr, struct vr::ChaperoneSoftBoundsInfo_t * pInfo);
+S_API bool SteamAPI_vr_IVRChaperone_GetHardBoundsInfo(intptr_t instancePtr, struct vr::HmdQuad_t * pQuadsBuffer, uint32_t * punQuadsCount);
+S_API bool SteamAPI_vr_IVRChaperone_GetSeatedBoundsInfo(intptr_t instancePtr, struct vr::ChaperoneSeatedBoundsInfo_t * pInfo);
+S_API uint32_t SteamAPI_vr_IVRCompositor_GetLastError(intptr_t instancePtr, char * pchBuffer, uint32_t unBufferSize);
+S_API void SteamAPI_vr_IVRCompositor_SetVSync(intptr_t instancePtr, bool bVSync);
+S_API bool SteamAPI_vr_IVRCompositor_GetVSync(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRCompositor_SetGamma(intptr_t instancePtr, float fGamma);
+S_API float SteamAPI_vr_IVRCompositor_GetGamma(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRCompositor_SetGraphicsDevice(intptr_t instancePtr, vr::Compositor_DeviceType eType, void * pDevice);
+S_API void SteamAPI_vr_IVRCompositor_WaitGetPoses(intptr_t instancePtr, struct vr::TrackedDevicePose_t * pPoseArray, uint32_t unPoseArrayCount);
+S_API void SteamAPI_vr_IVRCompositor_Submit(intptr_t instancePtr, vr::Hmd_Eye eEye, void * pTexture, struct vr::Compositor_TextureBounds * pBounds);
+S_API void SteamAPI_vr_IVRCompositor_ClearLastSubmittedFrame(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRCompositor_GetOverlayDefaults(intptr_t instancePtr, struct vr::Compositor_OverlaySettings * pSettings);
+S_API void SteamAPI_vr_IVRCompositor_SetOverlay(intptr_t instancePtr, void * pTexture, struct vr::Compositor_OverlaySettings * pSettings);
+S_API void SteamAPI_vr_IVRCompositor_SetOverlayRaw(intptr_t instancePtr, void * buffer, uint32_t width, uint32_t height, uint32_t depth, struct vr::Compositor_OverlaySettings * pSettings);
+S_API void SteamAPI_vr_IVRCompositor_SetOverlayFromFile(intptr_t instancePtr, const char * pchFilePath, struct vr::Compositor_OverlaySettings * pSettings);
+S_API void SteamAPI_vr_IVRCompositor_ClearOverlay(intptr_t instancePtr);
+S_API bool SteamAPI_vr_IVRCompositor_GetFrameTiming(intptr_t instancePtr, struct vr::Compositor_FrameTiming * pTiming, uint32_t unFramesAgo);
+S_API void SteamAPI_vr_IVRCompositor_FadeToColor(intptr_t instancePtr, float fSeconds, float fRed, float fGreen, float fBlue, float fAlpha, bool bBackground);
+S_API void SteamAPI_vr_IVRCompositor_FadeGrid(intptr_t instancePtr, float fSeconds, bool bFadeIn);
+S_API void SteamAPI_vr_IVRCompositor_CompositorBringToFront(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRCompositor_CompositorGoToBack(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRCompositor_CompositorQuit(intptr_t instancePtr);
+S_API bool SteamAPI_vr_IVRCompositor_IsFullscreen(intptr_t instancePtr);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_GetDriverCount(intptr_t instancePtr);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_GetDriverId(intptr_t instancePtr, uint32_t unDriverIndex, char * pchBuffer, uint32_t unBufferLen);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_GetDriverDisplayCount(intptr_t instancePtr, const char * pchDriverId);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_GetDriverDisplayId(intptr_t instancePtr, const char * pchDriverId, uint32_t unDisplayIndex, char * pchBuffer, uint32_t unBufferLen);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_GetDriverDisplayModelNumber(intptr_t instancePtr, const char * pchDriverId, const char * pchDisplayId, char * pchBuffer, uint32_t unBufferLen);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_GetDriverDisplaySerialNumber(intptr_t instancePtr, const char * pchDriverId, const char * pchDisplayId, char * pchBuffer, uint32_t unBufferLen);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_LoadSharedResource(intptr_t instancePtr, const char * pchResourceName, char * pchBuffer, uint32_t unBufferLen);
+S_API float SteamAPI_vr_IVRControlPanel_GetIPD(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRControlPanel_SetIPD(intptr_t instancePtr, float fIPD);
+S_API bool SteamAPI_ISteamGameServer_InitGameServer(intptr_t instancePtr, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString);
+S_API void SteamAPI_ISteamGameServer_SetProduct(intptr_t instancePtr, const char * pszProduct);
+S_API void SteamAPI_ISteamGameServer_SetGameDescription(intptr_t instancePtr, const char * pszGameDescription);
+S_API void SteamAPI_ISteamGameServer_SetModDir(intptr_t instancePtr, const char * pszModDir);
+S_API void SteamAPI_ISteamGameServer_SetDedicatedServer(intptr_t instancePtr, bool bDedicated);
+S_API void SteamAPI_ISteamGameServer_LogOn(intptr_t instancePtr, const char * pszToken);
+S_API void SteamAPI_ISteamGameServer_LogOnAnonymous(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_LogOff(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BLoggedOn(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BSecure(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamGameServer_GetSteamID(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_WasRestartRequested(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetMaxPlayerCount(intptr_t instancePtr, int cPlayersMax);
+S_API void SteamAPI_ISteamGameServer_SetBotPlayerCount(intptr_t instancePtr, int cBotplayers);
+S_API void SteamAPI_ISteamGameServer_SetServerName(intptr_t instancePtr, const char * pszServerName);
+S_API void SteamAPI_ISteamGameServer_SetMapName(intptr_t instancePtr, const char * pszMapName);
+S_API void SteamAPI_ISteamGameServer_SetPasswordProtected(intptr_t instancePtr, bool bPasswordProtected);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorPort(intptr_t instancePtr, uint16 unSpectatorPort);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorServerName(intptr_t instancePtr, const char * pszSpectatorServerName);
+S_API void SteamAPI_ISteamGameServer_ClearAllKeyValues(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetKeyValue(intptr_t instancePtr, const char * pKey, const char * pValue);
+S_API void SteamAPI_ISteamGameServer_SetGameTags(intptr_t instancePtr, const char * pchGameTags);
+S_API void SteamAPI_ISteamGameServer_SetGameData(intptr_t instancePtr, const char * pchGameData);
+S_API void SteamAPI_ISteamGameServer_SetRegion(intptr_t instancePtr, const char * pszRegion);
+S_API bool SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(intptr_t instancePtr, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, class CSteamID * pSteamIDUser);
+S_API uint64 SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SendUserDisconnect(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServer_BUpdateUserData(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore);
+S_API HAuthTicket SteamAPI_ISteamGameServer_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamGameServer_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamGameServer_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamGameServer_RequestUserGroupStatus(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDGroup);
+S_API void SteamAPI_ISteamGameServer_GetGameplayStats(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_GetServerReputation(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamGameServer_GetPublicIP(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_HandleIncomingPacket(intptr_t instancePtr, const void * pData, int cbData, uint32 srcIP, uint16 srcPort);
+S_API int SteamAPI_ISteamGameServer_GetNextOutgoingPacket(intptr_t instancePtr, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort);
+S_API void SteamAPI_ISteamGameServer_EnableHeartbeats(intptr_t instancePtr, bool bActive);
+S_API void SteamAPI_ISteamGameServer_SetHeartbeatInterval(intptr_t instancePtr, int iHeartbeatInterval);
+S_API void SteamAPI_ISteamGameServer_ForceHeartbeat(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_AssociateWithClan(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(intptr_t instancePtr, class CSteamID steamIDNewPlayer);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API bool SteamAPI_ISteamGameServerStats_ClearUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_StoreUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+#endif // STEAMAPIFLAT_H
+
+
diff --git a/lsteamclient/steamworks_sdk_133a/steam_gameserver.h b/lsteamclient/steamworks_sdk_133a/steam_gameserver.h
new file mode 100644
index 00000000..ff068540
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/steam_gameserver.h
@@ -0,0 +1,171 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+S_API ISteamInventory *SteamGameServerInventory();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+ ISteamInventory *SteamInventory() { return m_pSteamInventory; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamInventory *m_pSteamInventory;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamInventory = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamInventory = g_pSteamClientGameServer->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_133a/steamclientpublic.h b/lsteamclient/steamworks_sdk_133a/steamclientpublic.h
new file mode 100644
index 00000000..28fe1826
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/steamclientpublic.h
@@ -0,0 +1,1135 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to login
+ k_EResultItemDeleted = 86, // The thing we're trying to access has been deleted
+ k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to throttle response to possible attacker
+ k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch
+ k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for two-factor didn't match
+ k_EResultAccountAssociatedToMultiplePartners = 90, // account has been associated with multiple partners
+ k_EResultNotModified = 91, // data not modified
+ k_EResultNoMobileDevice = 92, // the account does not have a mobile device associated with it
+ k_EResultTimeNotSynced = 93, // the time presented is out of range or tolerance
+ k_EResultSmsCodeFailed = 94, // SMS code failure (no match, none pending, etc.)
+ k_EResultAccountLimitExceeded = 95, // Too many accounts access this resource
+ k_EResultAccountActivityLimitExceeded = 96, // Too many changes to this account
+ k_EResultPhoneActivityLimitExceeded = 97, // Too many changes to this phone
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+ k_EVoiceResultReceiverOutOfDate = 8,
+ k_EVoiceResultReceiverDidNotAnswer = 9,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+enum EDenyReason
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+};
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+enum EBeginAuthSessionResult
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+};
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+enum EAuthSessionResponse
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+ k_EAuthSessionResponsePublisherIssuedBan = 9, // The user is banned for this game. The ban came via the web api and not VAC
+};
+
+// results from UserHasLicenseForApp
+enum EUserHasLicenseForAppResult
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+};
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x0000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x0001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x0002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x0004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x0008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x0010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x0020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x0040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_RetailLicense = 0x0080, // has a retail license for game, (CD-Key etc)
+ k_EAppOwnershipFlags_LicenseLocked = 0x0100, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x0200, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x0400, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x0800, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x1000, // Recurring license, user is charged periodically
+ k_EAppOwnershipFlags_LicenseCanceled = 0x2000, // Mark as canceled, but might be still active if recurring
+ k_EAppOwnershipFlags_AutoGrant = 0x4000, // Ownership is based on any kind of autogrant license
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media_DEPRECATED = 0x010, // legacy - was used for game trailers, which are now just videos on the web
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+ k_EAppType_Hardware = 0x200, // a hardware device (Steam Machine, Steam Controller, Steam Link, etc.)
+ // 0x400 is up for grabs here
+ k_EAppType_Video = 0x800, // A video component of either a Film or TVSeries (may be the feature, an episode, preview, making-of, etc)
+ k_EAppType_Plugin = 0x1000, // Plug-in types for other Apps
+ k_EAppType_Music = 0x2000, // Music files
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+ k_EChatEntryTypeReserved1 = 12,
+ k_EChatEntryTypeReserved2 = 13,
+ k_EChatEntryTypeLinkBlocked = 14, // a link was removed by the chat filter.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Broadcast upload result details
+//-----------------------------------------------------------------------------
+enum EBroadcastUploadResult
+{
+ k_EBroadcastUploadResultNone = 0, // broadcast state unknown
+ k_EBroadcastUploadResultOK = 1, // broadcast was good, no problems
+ k_EBroadcastUploadResultInitFailed = 2, // broadcast init failed
+ k_EBroadcastUploadResultFrameFailed = 3, // broadcast frame upload failed
+ k_EBroadcastUploadResultTimeout = 4, // broadcast upload timed out
+ k_EBroadcastUploadResultBandwidthExceeded = 5, // broadcast send too much data
+ k_EBroadcastUploadResultLowFPS = 6, // broadcast FPS too low
+ k_EBroadcastUploadResultMissingKeyFrames = 7, // broadcast sending not enough key frames
+ k_EBroadcastUploadResultNoConnection = 8, // broadcast client failed to connect to relay
+ k_EBroadcastUploadResultRelayFailed = 9, // relay dropped the upload
+ k_EBroadcastUploadResultSettingsChanged = 10, // the client changed broadcast settings
+ k_EBroadcastUploadResultMissingAudio = 11, // client failed to send audio data
+ k_EBroadcastUploadResultTooFarBehind = 12, // clients was too slow uploading
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM2_USERID_STRUCTS )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ V_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, V_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, V_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, V_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, V_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_133a/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_133a/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_133a/steamhttpenums.h b/lsteamclient/steamworks_sdk_133a/steamhttpenums.h
new file mode 100644
index 00000000..2ec0982b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/steamhttpenums.h
@@ -0,0 +1,97 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401, // You probably want 403 or something else. 401 implies you're sending a WWW-Authenticate header and the client can sent an Authorization header in response.
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+ k_EHTTPStatusCode4xxUnknown = 418, // 418 is reserved, so we'll use it to mean unknown
+ k_EHTTPStatusCode429TooManyRequests = 429,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+ k_EHTTPStatusCode5xxUnknown = 599,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_133a/steamps3params.h b/lsteamclient/steamworks_sdk_133a/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_133a/steamtypes.h b/lsteamclient/steamworks_sdk_133a/steamtypes.h
new file mode 100644
index 00000000..2be3926c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/steamtypes.h
@@ -0,0 +1,179 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+#ifdef __clang__
+# define CLANG_ATTR(ATTR) __attribute__((annotate( ATTR )))
+#else
+# define CLANG_ATTR(ATTR)
+#endif
+
+#define METHOD_DESC(DESC) CLANG_ATTR( "desc:" #DESC ";" )
+#define IGNOREATTR() CLANG_ATTR( "ignore" )
+#define OUT_STRUCT() CLANG_ATTR( "out_struct: ;" )
+#define OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" )
+#define OUT_ARRAY_COUNT(COUNTER, DESC) CLANG_ATTR( "out_array_count:" #COUNTER ";desc:" #DESC )
+#define ARRAY_COUNT(COUNTER) CLANG_ATTR( "array_count:" #COUNTER ";" )
+#define ARRAY_COUNT_D(COUNTER, DESC) CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC )
+#define BUFFER_COUNT(COUNTER) CLANG_ATTR( "buffer_count:" #COUNTER ";" )
+#define OUT_BUFFER_COUNT(COUNTER) CLANG_ATTR( "out_buffer_count:" #COUNTER ";" )
+#define OUT_STRING_COUNT(COUNTER) CLANG_ATTR( "out_string_count:" #COUNTER ";" )
+#define DESC(DESC) CLANG_ATTR("desc:" #DESC ";")
+
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef uint64 JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+const JobID_t k_JobIDNil = 0xffffffffffffffffull;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+typedef uint32 BundleId_t;
+const BundleId_t k_uBundleIdInvalid = 0;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+// ID for a depot content manifest
+typedef uint64 ManifestId_t;
+const ManifestId_t k_uManifestIdInvalid = 0;
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_133a/steamuniverse.h b/lsteamclient/steamworks_sdk_133a/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133a/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteamapplist.h b/lsteamclient/steamworks_sdk_133b/isteamapplist.h
new file mode 100644
index 00000000..fc1d49ee
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteamapps.h b/lsteamclient/steamworks_sdk_133b/isteamapps.h
new file mode 100644
index 00000000..f73fed4d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamapps.h
@@ -0,0 +1,154 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+ // get download progress for optional DLC
+ virtual bool GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // return the buildid of this app, may change at any time based on backend updates to the game
+ virtual int GetAppBuildId() = 0;
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION007"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteamappticket.h b/lsteamclient/steamworks_sdk_133b/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteamclient.h b/lsteamclient/steamworks_sdk_133b/isteamclient.h
new file mode 100644
index 00000000..9977f3a5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamclient.h
@@ -0,0 +1,503 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct ValvePackingSentinel_t
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+extern "C" typedef void( *SteamAPI_PostAPIResultInProcess_t )(SteamAPICall_t callHandle, void *, uint32 unCallbackSize, int iCallbackNum);
+extern "C" typedef uint32 ( *SteamAPI_CheckCallbackRegistered_t )( int iCallbackNum );
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamMusicRemote;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+class ISteamHTMLSurface;
+class ISteamInventory;
+class ISteamVideo;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player Remote
+ virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // html page display
+ virtual ISteamHTMLSurface *GetISteamHTMLSurface(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // Helper functions for internal Steam usage
+ virtual void Set_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) = 0;
+ virtual void Remove_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) = 0;
+ virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0;
+
+ // inventory
+ virtual ISteamInventory *GetISteamInventory( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Video
+ virtual ISteamVideo *GetISteamVideo( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient017"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iClientDepotBuilderCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+enum { k_iSteamMusicRemoteCallbacks = 4100 };
+enum { k_iClientVRCallbacks = 4200 };
+enum { k_iClientReservedCallbacks = 4300 };
+enum { k_iSteamReservedCallbacks = 4400 };
+enum { k_iSteamHTMLSurfaceCallbacks = 4500 };
+enum { k_iClientVideoCallbacks = 4600 };
+enum { k_iClientInventoryCallbacks = 4700 };
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+struct SteamCallback_t
+{
+public:
+ SteamCallback_t() {}
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname : SteamCallback_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_10() \
+ END_CALLBACK_INTERNAL_BEGIN( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_11() \
+ END_CALLBACK_INTERNAL_BEGIN( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_12() \
+ END_CALLBACK_INTERNAL_BEGIN( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_13() \
+ END_CALLBACK_INTERNAL_BEGIN( 13 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_14() \
+ END_CALLBACK_INTERNAL_BEGIN( 14 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 13 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteamcontroller.h b/lsteamclient/steamworks_sdk_133b/isteamcontroller.h
new file mode 100644
index 00000000..6a3100e3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamcontroller.h
@@ -0,0 +1,138 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+#define MAX_STEAM_CONTROLLERS 16
+
+#pragma pack( pop )
+
+#define STEAM_RIGHT_TRIGGER_MASK 0x0000001
+#define STEAM_LEFT_TRIGGER_MASK 0x0000002
+#define STEAM_RIGHT_BUMPER_MASK 0x0000004
+#define STEAM_LEFT_BUMPER_MASK 0x0000008
+#define STEAM_BUTTON_0_MASK 0x0000010
+#define STEAM_BUTTON_1_MASK 0x0000020
+#define STEAM_BUTTON_2_MASK 0x0000040
+#define STEAM_BUTTON_3_MASK 0x0000080
+#define STEAM_TOUCH_0_MASK 0x0000100
+#define STEAM_TOUCH_1_MASK 0x0000200
+#define STEAM_TOUCH_2_MASK 0x0000400
+#define STEAM_TOUCH_3_MASK 0x0000800
+#define STEAM_BUTTON_MENU_MASK 0x0001000
+#define STEAM_BUTTON_STEAM_MASK 0x0002000
+#define STEAM_BUTTON_ESCAPE_MASK 0x0004000
+#define STEAM_BUTTON_BACK_LEFT_MASK 0x0008000
+#define STEAM_BUTTON_BACK_RIGHT_MASK 0x0010000
+#define STEAM_BUTTON_LEFTPAD_CLICKED_MASK 0x0020000
+#define STEAM_BUTTON_RIGHTPAD_CLICKED_MASK 0x0040000
+#define STEAM_LEFTPAD_FINGERDOWN_MASK 0x0080000
+#define STEAM_RIGHTPAD_FINGERDOWN_MASK 0x0100000
+#define STEAM_JOYSTICK_BUTTON_MASK 0x0400000
+
+
+#pragma pack( push, 1 )
+
+struct SteamControllerState001_t
+{
+ // If packet num matches that on your prior call, then the controller state hasn't been changed since
+ // your last call and there is no need to process it
+ uint32 unPacketNum;
+
+ // bit flags for each of the buttons
+ uint64 ulButtons;
+
+ // Left pad coordinates
+ short sLeftPadX;
+ short sLeftPadY;
+
+ // Right pad coordinates
+ short sRightPadX;
+ short sRightPadY;
+
+};
+
+#pragma pack( pop )
+
+#define SteamControllerState_t SteamControllerState001_t
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ //
+ // Native controller support API
+ //
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init( const char *pchAbsolutePathToControllerConfigVDF ) = 0;
+ virtual bool Shutdown() = 0;
+
+ // Pump callback/callresult events, SteamAPI_RunCallbacks will do this for you,
+ // normally never need to call directly.
+ virtual void RunFrame() = 0;
+
+ // Get the state of the specified controller, returns false if that controller is not connected
+ virtual bool GetControllerState( uint32 unControllerIndex, SteamControllerState_t *pState ) = 0;
+
+ // Trigger a haptic pulse on the controller
+ virtual void TriggerHapticPulse( uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ // Set the override mode which is used to choose to use different base/legacy bindings from your config file
+ virtual void SetOverrideMode( const char *pchMode ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "STEAMCONTROLLER_INTERFACE_VERSION"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+/*
+struct ControllerCallback_t
+{
+ enum { k_iCallback = k_iSteamControllerCallbacks + 1 };
+
+};
+*/
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteamfriends.h b/lsteamclient/steamworks_sdk_133b/isteamfriends.h
new file mode 100644
index 00000000..a63d8ea7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamfriends.h
@@ -0,0 +1,629 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1, // this doesn't get stored; the user has just done an Ignore on an friendship invite
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5, // this is stored; the user has explicit blocked this other user from comments/chat/etc
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+// friends group identifier type
+typedef int16 FriendsGroupID_t;
+
+// invalid friends group identifier constant
+const FriendsGroupID_t k_FriendsGroupID_Invalid = -1;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, OUT_STRUCT() FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+ // friends steam level
+ virtual int GetFriendSteamLevel( CSteamID steamIDFriend ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // friend grouping (tag) apis
+ // returns the number of friends groups
+ virtual int GetFriendsGroupCount() = 0;
+ // returns the friends group ID for the given index (invalid indices return k_FriendsGroupID_Invalid)
+ virtual FriendsGroupID_t GetFriendsGroupIDByIndex( int iFG ) = 0;
+ // returns the name for the given friends group (NULL in the case of invalid friends group IDs)
+ virtual const char *GetFriendsGroupName( FriendsGroupID_t friendsGroupID ) = 0;
+ // returns the number of members in a given friends group
+ virtual int GetFriendsGroupMembersCount( FriendsGroupID_t friendsGroupID ) = 0;
+ // gets up to nMembersCount members of the given friends group, if fewer exist than requested those positions' SteamIDs will be invalid
+ virtual void GetFriendsGroupMembersList( FriendsGroupID_t friendsGroupID, OUT_ARRAY_CALL(nMembersCount, GetFriendsGroupMembersCount, friendsGroupID ) CSteamID *pOutSteamIDMembers, int nMembersCount ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( ARRAY_COUNT(cClansToRequest) CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, OUT_STRUCT() CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends015"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_133b/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_133b/isteamgameserver.h b/lsteamclient/steamworks_sdk_133b/isteamgameserver.h
new file mode 100644
index 00000000..c97ad6f5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamgameserver.h
@@ -0,0 +1,384 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_133b/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteamhtmlsurface.h b/lsteamclient/steamworks_sdk_133b/isteamhtmlsurface.h
new file mode 100644
index 00000000..f72fd6c0
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamhtmlsurface.h
@@ -0,0 +1,444 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to display html pages in a texture
+//
+//=============================================================================
+
+#ifndef ISTEAMHTMLSURFACE_H
+#define ISTEAMHTMLSURFACE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+typedef uint32 HHTMLBrowser;
+const uint32 INVALID_HTMLBROWSER = 0;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for displaying HTML pages and interacting with them
+//-----------------------------------------------------------------------------
+class ISteamHTMLSurface
+{
+public:
+ virtual ~ISteamHTMLSurface() {}
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Create a browser object for display of a html page, when creation is complete the call handle
+ // will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser.
+ // The user agent string is a substring to be added to the general user agent string so you can
+ // identify your client on web servers.
+ // The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if
+ // you do not require this functionality.
+ virtual SteamAPICall_t CreateBrowser( const char *pchUserAgent, const char *pchUserCSS ) = 0;
+
+ // Call this when you are done with a html surface, this lets us free the resources being used by it
+ virtual void RemoveBrowser( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // Navigate to this URL, results in a HTML_StartRequest_t as the request commences
+ virtual void LoadURL( HHTMLBrowser unBrowserHandle, const char *pchURL, const char *pchPostData ) = 0;
+
+ // Tells the surface the size in pixels to display the surface
+ virtual void SetSize( HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight ) = 0;
+
+ // Stop the load of the current html page
+ virtual void StopLoad( HHTMLBrowser unBrowserHandle ) = 0;
+ // Reload (most likely from local cache) the current page
+ virtual void Reload( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate back in the page history
+ virtual void GoBack( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate forward in the page history
+ virtual void GoForward( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // add this header to any url requests from this browser
+ virtual void AddHeader( HHTMLBrowser unBrowserHandle, const char *pchKey, const char *pchValue ) = 0;
+ // run this javascript script in the currently loaded page
+ virtual void ExecuteJavascript( HHTMLBrowser unBrowserHandle, const char *pchScript ) = 0;
+
+ enum EHTMLMouseButton
+ {
+ eHTMLMouseButton_Left = 0,
+ eHTMLMouseButton_Right = 1,
+ eHTMLMouseButton_Middle = 2,
+ };
+
+ // Mouse click and mouse movement commands
+ virtual void MouseUp( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDown( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDoubleClick( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ // x and y are relative to the HTML bounds
+ virtual void MouseMove( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+ // nDelta is pixels of scroll
+ virtual void MouseWheel( HHTMLBrowser unBrowserHandle, int32 nDelta ) = 0;
+
+ enum EMouseCursor
+ {
+ dc_user = 0,
+ dc_none,
+ dc_arrow,
+ dc_ibeam,
+ dc_hourglass,
+ dc_waitarrow,
+ dc_crosshair,
+ dc_up,
+ dc_sizenw,
+ dc_sizese,
+ dc_sizene,
+ dc_sizesw,
+ dc_sizew,
+ dc_sizee,
+ dc_sizen,
+ dc_sizes,
+ dc_sizewe,
+ dc_sizens,
+ dc_sizeall,
+ dc_no,
+ dc_hand,
+ dc_blank, // don't show any custom cursor, just use your default
+ dc_middle_pan,
+ dc_north_pan,
+ dc_north_east_pan,
+ dc_east_pan,
+ dc_south_east_pan,
+ dc_south_pan,
+ dc_south_west_pan,
+ dc_west_pan,
+ dc_north_west_pan,
+ dc_alias,
+ dc_cell,
+ dc_colresize,
+ dc_copycur,
+ dc_verticaltext,
+ dc_rowresize,
+ dc_zoomin,
+ dc_zoomout,
+ dc_help,
+ dc_custom,
+
+ dc_last, // custom cursors start from this value and up
+ };
+
+ enum EHTMLKeyModifiers
+ {
+ k_eHTMLKeyModifier_None = 0,
+ k_eHTMLKeyModifier_AltDown = 1 << 0,
+ k_eHTMLKeyModifier_CtrlDown = 1 << 1,
+ k_eHTMLKeyModifier_ShiftDown = 1 << 2,
+ };
+
+ // keyboard interactions, native keycode is the virtual key code value from your OS
+ virtual void KeyDown( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ virtual void KeyUp( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ // cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press)
+ virtual void KeyChar( HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+
+ // programmatically scroll this many pixels on the page
+ virtual void SetHorizontalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+ virtual void SetVerticalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+
+ // tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things
+ virtual void SetKeyFocus( HHTMLBrowser unBrowserHandle, bool bHasKeyFocus ) = 0;
+
+ // open the current pages html code in the local editor of choice, used for debugging
+ virtual void ViewSource( HHTMLBrowser unBrowserHandle ) = 0;
+ // copy the currently selected text on the html page to the local clipboard
+ virtual void CopyToClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+ // paste from the local clipboard to the current html page
+ virtual void PasteFromClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element
+ virtual void Find( HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse ) = 0;
+ // cancel a currently running find
+ virtual void StopFind( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // return details about the link at position x,y on the current page
+ virtual void GetLinkAtPosition( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+
+ // set a webcookie for the hostname in question
+ virtual void SetCookie( const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath = "/", RTime32 nExpires = 0, bool bSecure = false, bool bHTTPOnly = false ) = 0;
+
+ // Zoom the current page by flZoom ( from 0.0 to 2.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care)
+ virtual void SetPageScaleFactor( HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY ) = 0;
+
+ // Enable/disable low-resource background mode, where javascript and repaint timers are throttled, resources are
+ // more aggressively purged from memory, and audio/video elements are paused. When background mode is enabled,
+ // all HTML5 video and audio objects will execute ".pause()" and gain the property "._steam_background_paused = 1".
+ // When background mode is disabled, any video or audio objects with that property will resume with ".play()".
+ virtual void SetBackgroundMode( HHTMLBrowser unBrowserHandle, bool bBackgroundMode ) = 0;
+
+ // CALLBACKS
+ //
+ // These set of functions are used as responses to callback requests
+ //
+
+ // You MUST call this in response to a HTML_StartRequest_t callback
+ // Set bAllowed to true to allow this navigation, false to cancel it and stay
+ // on the current page. You can use this feature to limit the valid pages
+ // allowed in your HTML surface.
+ virtual void AllowStartRequest( HHTMLBrowser unBrowserHandle, bool bAllowed ) = 0;
+
+ // You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback
+ // Set bResult to true for the OK option of a confirm, use false otherwise
+ virtual void JSDialogResponse( HHTMLBrowser unBrowserHandle, bool bResult ) = 0;
+
+ // You MUST call this in response to a HTML_FileOpenDialog_t callback
+ virtual void FileLoadDialogResponse( HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles ) = 0;
+};
+
+#define STEAMHTMLSURFACE_INTERFACE_VERSION "STEAMHTMLSURFACE_INTERFACE_VERSION_003"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser is ready for use
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_BrowserReady_t, k_iSteamHTMLSurfaceCallbacks + 1 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this browser is now fully created and ready to navigate to pages
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser has a pending paint
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_NeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 2)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint
+CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called
+CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture
+CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture
+CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update
+CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update
+CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update
+CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update
+CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered
+CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages
+END_DEFINE_CALLBACK_12()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser wanted to navigate to a new page
+// NOTE - you MUST call AllowStartRequest in response to this callback
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_StartRequest_t, k_iSteamHTMLSurfaceCallbacks + 3)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface navigating
+CALLBACK_MEMBER(1, const char *, pchURL) // the url they wish to navigate to
+CALLBACK_MEMBER(2, const char *, pchTarget) // the html link target type (i.e _blank, _self, _parent, _top )
+CALLBACK_MEMBER(3, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER(4, bool, bIsRedirect) // true if this was a http/html redirect from the last load request
+END_DEFINE_CALLBACK_5()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser has been requested to close due to user interaction (usually from a javascript window.close() call)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_CloseBrowser_t, k_iSteamHTMLSurfaceCallbacks + 4)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser is navigating to a new url
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_URLChanged_t, k_iSteamHTMLSurfaceCallbacks + 5 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface navigating
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the url they wish to navigate to
+CALLBACK_MEMBER( 2, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER( 3, bool, bIsRedirect ) // true if this was a http/html redirect from the last load request
+CALLBACK_MEMBER( 4, const char *, pchPageTitle ) // the title of the page
+CALLBACK_MEMBER( 5, bool, bNewNavigation ) // true if this was from a fresh tab and not a click on an existing page
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A page is finished loading
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FinishedRequest_t, k_iSteamHTMLSurfaceCallbacks + 6 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+CALLBACK_MEMBER( 2, const char *, pchPageTitle ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a request to load this url in a new tab
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_OpenLinkInNewTab_t, k_iSteamHTMLSurfaceCallbacks + 7 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the page has a new title now
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ChangedTitle_t, k_iSteamHTMLSurfaceCallbacks + 8 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: results from a search
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SearchResults_t, k_iSteamHTMLSurfaceCallbacks + 9 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unResults ) //
+CALLBACK_MEMBER( 2, uint32, unCurrentMatch ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: page history status changed on the ability to go backwards and forward
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_CanGoBackAndForward_t, k_iSteamHTMLSurfaceCallbacks + 10 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, bool, bCanGoBack ) //
+CALLBACK_MEMBER( 2, bool, bCanGoForward ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the horizontal scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HorizontalScroll_t, k_iSteamHTMLSurfaceCallbacks + 11 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool , bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the vertical scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_VerticalScroll_t, k_iSteamHTMLSurfaceCallbacks + 12 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool, bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetLinkAtPosition call
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_LinkAtPosition_t, k_iSteamHTMLSurfaceCallbacks + 13 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, x ) // NOTE - Not currently set
+CALLBACK_MEMBER( 2, uint32, y ) // NOTE - Not currently set
+CALLBACK_MEMBER( 3, const char *, pchURL ) //
+CALLBACK_MEMBER( 4, bool, bInput ) //
+CALLBACK_MEMBER( 5, bool, bLiveLink ) //
+END_DEFINE_CALLBACK_6()
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript alert dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSAlert_t, k_iSteamHTMLSurfaceCallbacks + 14 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript confirmation dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSConfirm_t, k_iSteamHTMLSurfaceCallbacks + 15 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: when received show a file open dialog
+// then call FileLoadDialogResponse with the file(s) the user selected.
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FileOpenDialog_t, k_iSteamHTMLSurfaceCallbacks + 16 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+CALLBACK_MEMBER( 2, const char *, pchInitialFile ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new html window has been created
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_NewWindow_t, k_iSteamHTMLSurfaceCallbacks + 21 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the current surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the page to load
+CALLBACK_MEMBER( 2, uint32, unX ) // the x pos into the page to display the popup
+CALLBACK_MEMBER( 3, uint32, unY ) // the y pos into the page to display the popup
+CALLBACK_MEMBER( 4, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 5, uint32, unTall ) // the total height of the pBGRA texture
+CALLBACK_MEMBER( 6, HHTMLBrowser, unNewWindow_BrowserHandle ) // the handle of the new window surface
+END_DEFINE_CALLBACK_7()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: change the cursor to display
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SetCursor_t, k_iSteamHTMLSurfaceCallbacks + 22 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, eMouseCursor ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: informational message from the browser
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_StatusText_t, k_iSteamHTMLSurfaceCallbacks + 23 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ShowToolTip_t, k_iSteamHTMLSurfaceCallbacks + 24 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: update the text of an existing tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_UpdateToolTip_t, k_iSteamHTMLSurfaceCallbacks + 25 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: hide the tooltip you are showing
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HideToolTip_t, k_iSteamHTMLSurfaceCallbacks + 26 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMHTMLSURFACE_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteamhttp.h b/lsteamclient/steamworks_sdk_133b/isteamhttp.h
new file mode 100644
index 00000000..d96a631f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamhttp.h
@@ -0,0 +1,210 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+typedef uint32 HTTPCookieContainerHandle;
+#define INVALID_HTTPCOOKIE_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Both http and https are supported,
+ // so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+
+ // Creates a cookie container handle which you must later free with ReleaseCookieContainer(). If bAllowResponsesToModify=true
+ // than any response to your requests using this cookie container may add new cookies which may be transmitted with
+ // future requests. If bAllowResponsesToModify=false than only cookies you explicitly set will be sent. This API is just for
+ // during process lifetime, after steam restarts no cookies are persisted and you have no way to access the cookie container across
+ // repeat executions of your process.
+ virtual HTTPCookieContainerHandle CreateCookieContainer( bool bAllowResponsesToModify ) = 0;
+
+ // Release a cookie container you are finished using, freeing it's memory
+ virtual bool ReleaseCookieContainer( HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Adds a cookie to the specified cookie container that will be used with future requests.
+ virtual bool SetCookie( HTTPCookieContainerHandle hCookieContainer, const char *pchHost, const char *pchUrl, const char *pchCookie ) = 0;
+
+ // Set the cookie container to use for a HTTP request
+ virtual bool SetHTTPRequestCookieContainer( HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Set the extra user agent info for a request, this doesn't clobber the normal user agent, it just adds the extra info on the end
+ virtual bool SetHTTPRequestUserAgentInfo( HTTPRequestHandle hRequest, const char *pchUserAgentInfo ) = 0;
+
+ // Set that https request should require verified SSL certificate via machines certificate trust store
+ virtual bool SetHTTPRequestRequiresVerifiedCertificate( HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate ) = 0;
+
+ // Set an absolute timeout on the HTTP request, this is just a total time timeout different than the network activity timeout
+ // which can bump everytime we get more data
+ virtual bool SetHTTPRequestAbsoluteTimeoutMS( HTTPRequestHandle hRequest, uint32 unMilliseconds ) = 0;
+
+ // Check if the reason the request failed was because we timed it out (rather than some harder failure)
+ virtual bool GetHTTPRequestWasTimedOut( HTTPRequestHandle hRequest, bool *pbWasTimedOut ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+
+ uint32 m_unBodySize; // Same as GetHTTPResponseBodySize()
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_133b/isteaminventory.h b/lsteamclient/steamworks_sdk_133b/isteaminventory.h
new file mode 100644
index 00000000..29f939b7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteaminventory.h
@@ -0,0 +1,354 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Inventory
+//
+//=============================================================================
+
+#ifndef ISTEAMINVENTORY_H
+#define ISTEAMINVENTORY_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// Every individual instance of an item has a globally-unique ItemInstanceID.
+// This ID is unique to the combination of (player, specific item instance)
+// and will not be transferred to another player or re-used for another item.
+typedef uint64 SteamItemInstanceID_t;
+
+static const SteamItemInstanceID_t k_SteamItemInstanceIDInvalid = ~(SteamItemInstanceID_t)0;
+
+// Types of items in your game are identified by a 32-bit "item definition number".
+// Valid definition numbers are between 1 and 999999999; numbers less than or equal to
+// zero are invalid, and numbers greater than or equal to one billion (1x10^9) are
+// reserved for internal Steam use.
+typedef int32 SteamItemDef_t;
+
+
+enum ESteamItemFlags
+{
+ // Item status flags - these flags are permenantly attached to specific item instances
+ k_ESteamItemNoTrade = 1 << 0, // This item is account-locked and cannot be traded or given away.
+
+ // Action confirmation flags - these flags are set one time only, as part of a result set
+ k_ESteamItemRemoved = 1 << 8, // The item has been destroyed, traded away, expired, or otherwise invalidated
+ k_ESteamItemConsumed = 1 << 9, // The item quantity has been decreased by 1 via ConsumeItem API.
+
+ // All other flag bits are currently reserved for internal Steam use at this time.
+ // Do not assume anything about the state of other flags which are not defined here.
+};
+
+struct SteamItemDetails_t
+{
+ SteamItemInstanceID_t m_itemId;
+ SteamItemDef_t m_iDefinition;
+ uint16 m_unQuantity;
+ uint16 m_unFlags; // see ESteamItemFlags
+};
+
+typedef int32 SteamInventoryResult_t;
+
+static const SteamInventoryResult_t k_SteamInventoryResultInvalid = -1;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Inventory query and manipulation API
+//-----------------------------------------------------------------------------
+class ISteamInventory
+{
+public:
+
+ // INVENTORY ASYNC RESULT MANAGEMENT
+ //
+ // Asynchronous inventory queries always output a result handle which can be used with
+ // GetResultStatus, GetResultItems, etc. A SteamInventoryResultReady_t callback will
+ // be triggered when the asynchronous result becomes ready (or fails).
+ //
+
+ // Find out the status of an asynchronous inventory result handle. Possible values:
+ // k_EResultPending - still in progress
+ // k_EResultOK - done, result ready
+ // k_EResultExpired - done, result ready, maybe out of date (see DeserializeResult)
+ // k_EResultInvalidParam - ERROR: invalid API call parameters
+ // k_EResultServiceUnavailable - ERROR: service temporarily down, you may retry later
+ // k_EResultLimitExceeded - ERROR: operation would exceed per-user inventory limits
+ // k_EResultFail - ERROR: unknown / generic error
+ METHOD_DESC(Find out the status of an asynchronous inventory result handle.)
+ virtual EResult GetResultStatus( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Copies the contents of a result set into a flat array. The specific
+ // contents of the result set depend on which query which was used.
+ METHOD_DESC(Copies the contents of a result set into a flat array. The specific contents of the result set depend on which query which was used.)
+ virtual bool GetResultItems( SteamInventoryResult_t resultHandle,
+ OUT_ARRAY_COUNT( punOutItemsArraySize,Output array) SteamItemDetails_t *pOutItemsArray,
+ uint32 *punOutItemsArraySize ) = 0;
+
+ // Returns the server time at which the result was generated. Compare against
+ // the value of IClientUtils::GetServerRealTime() to determine age.
+ METHOD_DESC(Returns the server time at which the result was generated. Compare against the value of IClientUtils::GetServerRealTime() to determine age.)
+ virtual uint32 GetResultTimestamp( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Returns true if the result belongs to the target steam ID, false if the
+ // result does not. This is important when using DeserializeResult, to verify
+ // that a remote player is not pretending to have a different user's inventory.
+ METHOD_DESC(Returns true if the result belongs to the target steam ID or false if the result does not. This is important when using DeserializeResult to verify that a remote player is not pretending to have a different users inventory.)
+ virtual bool CheckResultSteamID( SteamInventoryResult_t resultHandle, CSteamID steamIDExpected ) = 0;
+
+ // Destroys a result handle and frees all associated memory.
+ METHOD_DESC(Destroys a result handle and frees all associated memory.)
+ virtual void DestroyResult( SteamInventoryResult_t resultHandle ) = 0;
+
+
+ // INVENTORY ASYNC QUERY
+ //
+
+ // Captures the entire state of the current user's Steam inventory.
+ // You must call DestroyResult on this handle when you are done with it.
+ // Returns false and sets *pResultHandle to zero if inventory is unavailable.
+ // Note: calls to this function are subject to rate limits and may return
+ // cached results if called too frequently. It is suggested that you call
+ // this function only when you are about to display the user's full inventory,
+ // or if you expect that the inventory may have changed.
+ METHOD_DESC(Captures the entire state of the current users Steam inventory.)
+ virtual bool GetAllItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+
+ // Captures the state of a subset of the current user's Steam inventory,
+ // identified by an array of item instance IDs. The results from this call
+ // can be serialized and passed to other players to "prove" that the current
+ // user owns specific items, without exposing the user's entire inventory.
+ // For example, you could call GetItemsByID with the IDs of the user's
+ // currently equipped cosmetic items and serialize this to a buffer, and
+ // then transmit this buffer to other players upon joining a game.
+ METHOD_DESC(Captures the state of a subset of the current users Steam inventory identified by an array of item instance IDs.)
+ virtual bool GetItemsByID( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT( unCountInstanceIDs ) const SteamItemInstanceID_t *pInstanceIDs, uint32 unCountInstanceIDs ) = 0;
+
+
+ // RESULT SERIALIZATION AND AUTHENTICATION
+ //
+ // Serialized result sets contain a short signature which can't be forged
+ // or replayed across different game sessions. A result set can be serialized
+ // on the local client, transmitted to other players via your game networking,
+ // and deserialized by the remote players. This is a secure way of preventing
+ // hackers from lying about posessing rare/high-value items.
+
+ // Serializes a result set with signature bytes to an output buffer. Pass
+ // NULL as an output buffer to get the required size via punOutBufferSize.
+ // The size of a serialized result depends on the number items which are being
+ // serialized. When securely transmitting items to other players, it is
+ // recommended to use "GetItemsByID" first to create a minimal result set.
+ // Results have a built-in timestamp which will be considered "expired" after
+ // an hour has elapsed. See DeserializeResult for expiration handling.
+ virtual bool SerializeResult( SteamInventoryResult_t resultHandle, OUT_BUFFER_COUNT(punOutBufferSize) void *pOutBuffer, uint32 *punOutBufferSize ) = 0;
+
+ // Deserializes a result set and verifies the signature bytes. Returns false
+ // if bRequireFullOnlineVerify is set but Steam is running in Offline mode.
+ // Otherwise returns true and then delivers error codes via GetResultStatus.
+ //
+ // The bRESERVED_MUST_BE_FALSE flag is reserved for future use and should not
+ // be set to true by your game at this time.
+ //
+ // DeserializeResult has a potential soft-failure mode where the handle status
+ // is set to k_EResultExpired. GetResultItems() still succeeds in this mode.
+ // The "expired" result could indicate that the data may be out of date - not
+ // just due to timed expiration (one hour), but also because one of the items
+ // in the result set may have been traded or consumed since the result set was
+ // generated. You could compare the timestamp from GetResultTimestamp() to
+ // ISteamUtils::GetServerRealTime() to determine how old the data is. You could
+ // simply ignore the "expired" result code and continue as normal, or you
+ // could challenge the player with expired data to send an updated result set.
+ virtual bool DeserializeResult( SteamInventoryResult_t *pOutResultHandle, BUFFER_COUNT(punOutBufferSize) const void *pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE = false ) = 0;
+
+
+ // INVENTORY ASYNC MODIFICATION
+ //
+
+ // GenerateItems() creates one or more items and then generates a SteamInventoryCallback_t
+ // notification with a matching nCallbackContext parameter. This API is insecure, and could
+ // be abused by hacked clients. It is, however, very useful as a development cheat or as
+ // a means of prototyping item-related features for your game. The use of GenerateItems can
+ // be restricted to certain item definitions or fully blocked via the Steamworks website.
+ // If punArrayQuantity is not NULL, it should be the same length as pArrayItems and should
+ // describe the quantity of each item to generate.
+ virtual bool GenerateItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, ARRAY_COUNT(unArrayLength) const uint32 *punArrayQuantity, uint32 unArrayLength ) = 0;
+
+ // GrantPromoItems() checks the list of promotional items for which the user may be eligible
+ // and grants the items (one time only). On success, the result set will include items which
+ // were granted, if any. If no items were granted because the user isn't eligible for any
+ // promotions, this is still considered a success.
+ METHOD_DESC(GrantPromoItems() checks the list of promotional items for which the user may be eligible and grants the items (one time only).)
+ virtual bool GrantPromoItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+ // AddPromoItem() / AddPromoItems() are restricted versions of GrantPromoItems(). Instead of
+ // scanning for all eligible promotional items, the check is restricted to a single item
+ // definition or set of item definitions. This can be useful if your game has custom UI for
+ // showing a specific promo item to the user.
+ virtual bool AddPromoItem( SteamInventoryResult_t *pResultHandle, SteamItemDef_t itemDef ) = 0;
+ virtual bool AddPromoItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, uint32 unArrayLength ) = 0;
+
+ // ConsumeItem() removes items from the inventory, permenantly. They cannot be recovered.
+ // Not for the faint of heart - if your game implements item removal at all, a high-friction
+ // UI confirmation process is highly recommended. Similar to GenerateItems, punArrayQuantity
+ // can be NULL or else an array of the same length as pArrayItems which describe the quantity
+ // of each item to destroy. ConsumeItem can be restricted to certain item definitions or
+ // fully blocked via the Steamworks website to minimize support/abuse issues such as the
+ // clasic "my brother borrowed my laptop and deleted all of my rare items".
+ METHOD_DESC(ConsumeItem() removes items from the inventory permenantly.)
+ virtual bool ConsumeItem( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity ) = 0;
+
+ // ExchangeItems() is an atomic combination of GenerateItems and DestroyItems. It can be
+ // used to implement crafting recipes or transmutations, or items which unpack themselves
+ // into other items. Like GenerateItems, this is a flexible and dangerous API which is
+ // meant for rapid prototyping. You can configure restrictions on ExchangeItems via the
+ // Steamworks website, such as limiting it to a whitelist of input/output combinations
+ // corresponding to recipes.
+ // (Note: although GenerateItems may be hard or impossible to use securely in your game,
+ // ExchangeItems is perfectly reasonable to use once the whitelists are set accordingly.)
+ virtual bool ExchangeItems( SteamInventoryResult_t *pResultHandle,
+ ARRAY_COUNT(unArrayGenerateLength) const SteamItemDef_t *pArrayGenerate, ARRAY_COUNT(unArrayGenerateLength) const uint32 *punArrayGenerateQuantity, uint32 unArrayGenerateLength,
+ ARRAY_COUNT(unArrayDestroyLength) const SteamItemInstanceID_t *pArrayDestroy, ARRAY_COUNT(unArrayDestroyLength) const uint32 *punArrayDestroyQuantity, uint32 unArrayDestroyLength ) = 0;
+
+
+ // TransferItemQuantity() is intended for use with items which are "stackable" (can have
+ // quantity greater than one). It can be used to split a stack into two, or to transfer
+ // quantity from one stack into another stack of identical items. To split one stack into
+ // two, pass k_SteamItemInstanceIDInvalid for itemIdDest and a new item will be generated.
+ virtual bool TransferItemQuantity( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest ) = 0;
+
+
+ // TIMED DROPS AND PLAYTIME CREDIT
+ //
+
+ // Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when
+ // active gameplay begins, and at least once every two minutes afterwards. The backend
+ // performs its own time calculations, so the precise timing of the heartbeat is not
+ // critical as long as you send at least one heartbeat every two minutes. Calling the
+ // function more often than that is not harmful, it will simply have no effect. Note:
+ // players may be able to spoof this message by hacking their client, so you should not
+ // attempt to use this as a mechanism to restrict playtime credits. It is simply meant
+ // to distinguish between being in any kind of gameplay situation vs the main menu or
+ // a pre-game launcher window. (If you are stingy with handing out playtime credit, it
+ // will only encourage players to run bots or use mouse/kb event simulators.)
+ //
+ // Playtime credit accumulation can be capped on a daily or weekly basis through your
+ // Steamworks configuration.
+ //
+ METHOD_DESC(Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when active gameplay begins and at least once every two minutes afterwards.)
+ virtual void SendItemDropHeartbeat() = 0;
+
+ // Playtime credit must be consumed and turned into item drops by your game. Only item
+ // definitions which are marked as "playtime item generators" can be spawned. The call
+ // will return an empty result set if there is not enough playtime credit for a drop.
+ // Your game should call TriggerItemDrop at an appropriate time for the user to receive
+ // new items, such as between rounds or while the player is dead. Note that players who
+ // hack their clients could modify the value of "dropListDefinition", so do not use it
+ // to directly control rarity. It is primarily useful during testing and development,
+ // where you may wish to perform experiments with different types of drops.
+ METHOD_DESC(Playtime credit must be consumed and turned into item drops by your game.)
+ virtual bool TriggerItemDrop( SteamInventoryResult_t *pResultHandle, SteamItemDef_t dropListDefinition ) = 0;
+
+
+ // IN-GAME TRADING
+ //
+ // TradeItems() implements limited in-game trading of items, if you prefer not to use
+ // the overlay or an in-game web browser to perform Steam Trading through the website.
+ // You should implement a UI where both players can see and agree to a trade, and then
+ // each client should call TradeItems simultaneously (+/- 5 seconds) with matching
+ // (but reversed) parameters. The result is the same as if both players performed a
+ // Steam Trading transaction through the web. Each player will get an inventory result
+ // confirming the removal or quantity changes of the items given away, and the new
+ // item instance id numbers and quantities of the received items.
+ // (Note: new item instance IDs are generated whenever an item changes ownership.)
+ virtual bool TradeItems( SteamInventoryResult_t *pResultHandle, CSteamID steamIDTradePartner,
+ ARRAY_COUNT(nArrayGiveLength) const SteamItemInstanceID_t *pArrayGive, ARRAY_COUNT(nArrayGiveLength) const uint32 *pArrayGiveQuantity, uint32 nArrayGiveLength,
+ ARRAY_COUNT(nArrayGetLength) const SteamItemInstanceID_t *pArrayGet, ARRAY_COUNT(nArrayGetLength) const uint32 *pArrayGetQuantity, uint32 nArrayGetLength ) = 0;
+
+
+ // ITEM DEFINITIONS
+ //
+ // Item definitions are a mapping of "definition IDs" (integers between 1 and 1000000)
+ // to a set of string properties. Some of these properties are required to display items
+ // on the Steam community web site. Other properties can be defined by applications.
+ // Use of these functions is optional; there is no reason to call LoadItemDefinitions
+ // if your game hardcodes the numeric definition IDs (eg, purple face mask = 20, blue
+ // weapon mod = 55) and does not allow for adding new item types without a client patch.
+ //
+
+ // LoadItemDefinitions triggers the automatic load and refresh of item definitions.
+ // Every time new item definitions are available (eg, from the dynamic addition of new
+ // item types while players are still in-game), a SteamInventoryDefinitionUpdate_t
+ // callback will be fired.
+ METHOD_DESC(LoadItemDefinitions triggers the automatic load and refresh of item definitions.)
+ virtual bool LoadItemDefinitions() = 0;
+
+ // GetItemDefinitionIDs returns the set of all defined item definition IDs (which are
+ // defined via Steamworks configuration, and not necessarily contiguous integers).
+ // If pItemDefIDs is null, the call will return true and *punItemDefIDsArraySize will
+ // contain the total size necessary for a subsequent call. Otherwise, the call will
+ // return false if and only if there is not enough space in the output array.
+ virtual bool GetItemDefinitionIDs(
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+
+ // GetItemDefinitionProperty returns a string property from a given item definition.
+ // Note that some properties (for example, "name") may be localized and will depend
+ // on the current Steam language settings (see ISteamApps::GetCurrentGameLanguage).
+ // Property names are always composed of ASCII letters, numbers, and/or underscores.
+ // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available
+ // property names.
+ virtual bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPropertyName,
+ OUT_STRING_COUNT(punValueBufferSize) char *pchValueBuffer, uint32 *punValueBufferSize ) = 0;
+};
+
+#define STEAMINVENTORY_INTERFACE_VERSION "STEAMINVENTORY_INTERFACE_V001"
+
+
+// SteamInventoryResultReady_t callbacks are fired whenever asynchronous
+// results transition from "Pending" to "OK" or an error state. There will
+// always be exactly one callback per handle.
+struct SteamInventoryResultReady_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 0 };
+ SteamInventoryResult_t m_handle;
+ EResult m_result;
+};
+
+
+// SteamInventoryFullUpdate_t callbacks are triggered when GetAllItems
+// successfully returns a result which is newer / fresher than the last
+// known result. (It will not trigger if the inventory hasn't changed,
+// or if results from two overlapping calls are reversed in flight and
+// the earlier result is already known to be stale/out-of-date.)
+// The normal ResultReady callback will still be triggered immediately
+// afterwards; this is an additional notification for your convenience.
+struct SteamInventoryFullUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 1 };
+ SteamInventoryResult_t m_handle;
+};
+
+
+// A SteamInventoryDefinitionUpdate_t callback is triggered whenever
+// item definitions have been updated, which could be in response to
+// LoadItemDefinitions() or any other async request which required
+// a definition update in order to process results from the server.
+struct SteamInventoryDefinitionUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_133b/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_133b/isteammatchmaking.h b/lsteamclient/steamworks_sdk_133b/isteammatchmaking.h
new file mode 100644
index 00000000..80606dfd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteammatchmaking.h
@@ -0,0 +1,747 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) = 0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, OUT_STRUCT() CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, OUT_STRUCT() CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_133b/isteammusic.h b/lsteamclient/steamworks_sdk_133b/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteammusicremote.h b/lsteamclient/steamworks_sdk_133b/isteammusicremote.h
new file mode 100644
index 00000000..5893ef4b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteammusicremote.h
@@ -0,0 +1,129 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSICREMOTE_H
+#define ISTEAMMUSICREMOTE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteammusic.h"
+
+#define k_SteamMusicNameMaxLength 255
+#define k_SteamMusicPNGMaxLength 65535
+
+
+class ISteamMusicRemote
+{
+public:
+ // Service Definition
+ virtual bool RegisterSteamMusicRemote( const char *pchName ) = 0;
+ virtual bool DeregisterSteamMusicRemote() = 0;
+ virtual bool BIsCurrentMusicRemote() = 0;
+ virtual bool BActivationSuccess( bool bValue ) = 0;
+
+ virtual bool SetDisplayName( const char *pchDisplayName ) = 0;
+ virtual bool SetPNGIcon_64x64( void *pvBuffer, uint32 cbBufferLength ) = 0;
+
+ // Abilities for the user interface
+ virtual bool EnablePlayPrevious(bool bValue) = 0;
+ virtual bool EnablePlayNext( bool bValue ) = 0;
+ virtual bool EnableShuffled( bool bValue ) = 0;
+ virtual bool EnableLooped( bool bValue ) = 0;
+ virtual bool EnableQueue( bool bValue ) = 0;
+ virtual bool EnablePlaylists( bool bValue ) = 0;
+
+ // Status
+ virtual bool UpdatePlaybackStatus( AudioPlayback_Status nStatus ) = 0;
+ virtual bool UpdateShuffled( bool bValue ) = 0;
+ virtual bool UpdateLooped( bool bValue ) = 0;
+ virtual bool UpdateVolume( float flValue ) = 0; // volume is between 0.0 and 1.0
+
+ // Current Entry
+ virtual bool CurrentEntryWillChange() = 0;
+ virtual bool CurrentEntryIsAvailable( bool bAvailable ) = 0;
+ virtual bool UpdateCurrentEntryText( const char *pchText ) = 0;
+ virtual bool UpdateCurrentEntryElapsedSeconds( int nValue ) = 0;
+ virtual bool UpdateCurrentEntryCoverArt( void *pvBuffer, uint32 cbBufferLength ) = 0;
+ virtual bool CurrentEntryDidChange() = 0;
+
+ // Queue
+ virtual bool QueueWillChange() = 0;
+ virtual bool ResetQueueEntries() = 0;
+ virtual bool SetQueueEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentQueueEntry( int nID ) = 0;
+ virtual bool QueueDidChange() = 0;
+
+ // Playlist
+ virtual bool PlaylistWillChange() = 0;
+ virtual bool ResetPlaylistEntries() = 0;
+ virtual bool SetPlaylistEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentPlaylistEntry( int nID ) = 0;
+ virtual bool PlaylistDidChange() = 0;
+};
+
+#define STEAMMUSICREMOTE_INTERFACE_VERSION "STEAMMUSICREMOTE_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillActivate_t, k_iSteamMusicRemoteCallbacks + 1)
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillDeactivate_t, k_iSteamMusicRemoteCallbacks + 2 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteToFront_t, k_iSteamMusicRemoteCallbacks + 3 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWillQuit_t, k_iSteamMusicRemoteCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlay_t, k_iSteamMusicRemoteCallbacks + 5 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPause_t, k_iSteamMusicRemoteCallbacks + 6 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayPrevious_t, k_iSteamMusicRemoteCallbacks + 7 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayNext_t, k_iSteamMusicRemoteCallbacks + 8 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsShuffled_t, k_iSteamMusicRemoteCallbacks + 9 )
+ CALLBACK_MEMBER( 0, bool, m_bShuffled )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsLooped_t, k_iSteamMusicRemoteCallbacks + 10 )
+ CALLBACK_MEMBER(0, bool, m_bLooped )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsVolume_t, k_iSteamMusicCallbacks + 11 )
+ CALLBACK_MEMBER(0, float, m_flNewVolume)
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsQueueEntry_t, k_iSteamMusicCallbacks + 12 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsPlaylistEntry_t, k_iSteamMusicCallbacks + 13 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayingRepeatStatus_t, k_iSteamMusicRemoteCallbacks + 14 )
+ CALLBACK_MEMBER(0, int, m_nPlayingRepeatStatus )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+
+#endif // #define ISTEAMMUSICREMOTE_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteamnetworking.h b/lsteamclient/steamworks_sdk_133b/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_133b/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_133b/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_133b/isteamremotestorage.h b/lsteamclient/steamworks_sdk_133b/isteamremotestorage.h
new file mode 100644
index 00000000..69938cd8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamremotestorage.h
@@ -0,0 +1,648 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+ k_EWorkshopFileTypeWebGuide = 9,
+ k_EWorkshopFileTypeIntegratedGuide = 10,
+ k_EWorkshopFileTypeMerch = 11,
+ k_EWorkshopFileTypeControllerBinding = 12,
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13,
+ k_EWorkshopFileTypeSteamVideo = 14,
+
+ // Update k_EWorkshopFileTypeMax if you add values.
+ k_EWorkshopFileTypeMax = 15
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, OUT_STRUCT() CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION012"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ UGCHandle_t m_hFile; // The new content
+};
+
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteamscreenshots.h b/lsteamclient/steamworks_sdk_133b/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteamugc.h b/lsteamclient/steamworks_sdk_133b/isteamugc.h
new file mode 100644
index 00000000..39da28d1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamugc.h
@@ -0,0 +1,342 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+ k_EUGCQuery_RankedByTotalUniqueSubscriptions = 12,
+};
+
+enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0, // The item update handle was invalid, job might be finished, listen too SubmitItemUpdateResult_t
+ k_EItemUpdateStatusPreparingConfig = 1, // The item update is processing configuration data
+ k_EItemUpdateStatusPreparingContent = 2, // The item update is reading and processing content files
+ k_EItemUpdateStatusUploadingContent = 3, // The item update is uploading content changes to Steam
+ k_EItemUpdateStatusUploadingPreviewFile = 4, // The item update is uploading new preview file image
+ k_EItemUpdateStatusCommittingChanges = 5 // The item update is committing all changes
+};
+
+enum EItemState
+{
+ k_EItemStateNone = 0, // item not tracked on client
+ k_EItemStateSubscribed = 1, // current user is subscribed to this item. Not just cached.
+ k_EItemStateLegacyItem = 2, // item was created with ISteamRemoteStorage
+ k_EItemStateInstalled = 4, // item is installed and usable (but maybe out of date)
+ k_EItemStateNeedsUpdate = 8, // items needs an update. Either because it's not installed yet or creator updated content
+ k_EItemStateDownloading = 16, // item update is currently downloading
+ k_EItemStateDownloadPending = 32, // DownloadItem() was called for this item, content isn't available until DownloadItemResult_t is fired
+};
+
+enum EItemStatistic
+{
+ k_EItemStatistic_NumSubscriptions = 0,
+ k_EItemStatistic_NumFavorites = 1,
+ k_EItemStatistic_NumFollowers = 2,
+ k_EItemStatistic_NumUniqueSubscriptions = 3,
+ k_EItemStatistic_NumUniqueFavorites = 4,
+ k_EItemStatistic_NumUniqueFollowers = 5,
+ k_EItemStatistic_NumUniqueWebsiteViews = 6,
+ k_EItemStatistic_ReportScore = 7,
+};
+
+const uint32 kNumUGCResultsPerPage = 50;
+const uint32 k_cchDeveloperMetadataMax = 5000;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+ // collection details
+ uint32 m_unNumChildren;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for the details of the given published file ids (the RequestUGCDetails call is deprecated and replaced with this)
+ virtual UGCQueryHandle_t CreateQueryUGCDetailsRequest( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+
+ // Send the query to Steam
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+ virtual bool GetQueryUGCPreviewURL( UGCQueryHandle_t handle, uint32 index, char *pchURL, uint32 cchURLSize ) = 0;
+ virtual bool GetQueryUGCMetadata( UGCQueryHandle_t handle, uint32 index, char *pchMetadata, uint32 cchMetadatasize ) = 0;
+ virtual bool GetQueryUGCChildren( UGCQueryHandle_t handle, uint32 index, PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0;
+ virtual bool GetQueryUGCStatistic( UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 *pStatValue ) = 0;
+ virtual uint32 GetQueryUGCNumAdditionalPreviews( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCAdditionalPreview( UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char *pchURLOrVideoID, uint32 cchURLSize, bool *pbIsImage ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnMetadata( UGCQueryHandle_t handle, bool bReturnMetadata ) = 0;
+ virtual bool SetReturnChildren( UGCQueryHandle_t handle, bool bReturnChildren ) = 0;
+ virtual bool SetReturnAdditionalPreviews( UGCQueryHandle_t handle, bool bReturnAdditionalPreviews ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+
+ // DEPRECATED - Use CreateQueryUGCDetailsRequest call above instead!
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+ // Steam Workshop Creator API
+ virtual SteamAPICall_t CreateItem( AppId_t nConsumerAppId, EWorkshopFileType eFileType ) = 0; // create new item for this app with no content attached yet
+
+ virtual UGCUpdateHandle_t StartItemUpdate( AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID ) = 0; // start an UGC item update. Set changed properties before commiting update with CommitItemUpdate()
+
+ virtual bool SetItemTitle( UGCUpdateHandle_t handle, const char *pchTitle ) = 0; // change the title of an UGC item
+ virtual bool SetItemDescription( UGCUpdateHandle_t handle, const char *pchDescription ) = 0; // change the description of an UGC item
+ virtual bool SetItemMetadata( UGCUpdateHandle_t handle, const char *pchMetaData ) = 0; // change the metadata of an UGC item (max = k_cchDeveloperMetadataMax)
+ virtual bool SetItemVisibility( UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item
+ virtual bool SetItemTags( UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item
+ virtual bool SetItemContent( UGCUpdateHandle_t handle, const char *pszContentFolder ) = 0; // update item content from this local folder
+ virtual bool SetItemPreview( UGCUpdateHandle_t handle, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file, which must be under 1MB in size
+
+ virtual SteamAPICall_t SubmitItemUpdate( UGCUpdateHandle_t handle, const char *pchChangeNote ) = 0; // commit update process started with StartItemUpdate()
+ virtual EItemUpdateStatus GetItemUpdateProgress( UGCUpdateHandle_t handle, uint64 *punBytesProcessed, uint64* punBytesTotal ) = 0;
+
+ // Steam Workshop Consumer API
+ virtual SteamAPICall_t AddItemToFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ virtual SteamAPICall_t RemoveItemFromFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ virtual SteamAPICall_t SubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // subscribe to this item, will be installed ASAP
+ virtual SteamAPICall_t UnsubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // unsubscribe from this item, will be uninstalled after game quits
+ virtual uint32 GetNumSubscribedItems() = 0; // number of subscribed items
+ virtual uint32 GetSubscribedItems( PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; // all subscribed item PublishFileIDs
+
+ // get EItemState flags about item on this client
+ virtual uint32 GetItemState( PublishedFileId_t nPublishedFileID ) = 0;
+
+ // get info about currently installed content on disc for items that have k_EItemStateInstalled set
+ // if k_EItemStateLegacyItem is set, pchFolder contains the path to the legacy file itself (not a folder)
+ virtual bool GetItemInstallInfo( PublishedFileId_t nPublishedFileID, uint64 *punSizeOnDisk, char *pchFolder, uint32 cchFolderSize, uint32 *punTimeStamp ) = 0;
+
+ // get info about pending update for items that have k_EItemStateNeedsUpdate set. punBytesTotal will be valid after download started once
+ virtual bool GetItemDownloadInfo( PublishedFileId_t nPublishedFileID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // download new or update already installed item. If function returns true, wait for DownloadItemResult_t. If the item is already installed,
+ // then files on disk should not be used until callback received. If item is not subscribed to, it will be cached for some time.
+ // If bHighPriority is set, any other item download will be suspended and this item downloaded ASAP.
+ virtual bool DownloadItem( PublishedFileId_t nPublishedFileID, bool bHighPriority ) = 0;
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION005"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::CreateItem()
+//-----------------------------------------------------------------------------
+struct CreateItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 3 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId; // new item got this UGC PublishFileID
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::SubmitItemUpdate()
+//-----------------------------------------------------------------------------
+struct SubmitItemUpdateResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 4 };
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a Workshop item has been installed or updated
+//-----------------------------------------------------------------------------
+struct ItemInstalled_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 5 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of DownloadItem(), existing item files can be accessed again
+//-----------------------------------------------------------------------------
+struct DownloadItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 6 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: result of AddItemToFavorites() or RemoveItemFromFavorites()
+//-----------------------------------------------------------------------------
+struct UserFavoriteItemsListChanged_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 7 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bWasAddRequest;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_133b/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteamuser.h b/lsteamclient/steamworks_sdk_133b/isteamuser.h
new file mode 100644
index 00000000..efdd6677
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamuser.h
@@ -0,0 +1,379 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+ // Requests a URL which authenticates an in-game browser for store check-out,
+ // and then redirects to the specified URL. As long as the in-game browser
+ // accepts and handles session cookies, Steam microtransaction checkout pages
+ // will automatically recognize the user instead of presenting a login page.
+ // The result of this API call will be a StoreAuthURLResponse_t callback.
+ // NOTE: The URL has a very short lifetime to prevent history-snooping attacks,
+ // so you should only call this API when you are about to launch the browser,
+ // or else immediately navigate to the result URL using a hidden browser window.
+ // NOTE 2: The resulting authorization cookie has an expiration time of one day,
+ // so it would be a good idea to request and visit a new auth URL every 12 hours.
+ virtual SteamAPICall_t RequestStoreAuthURL( const char *pchRedirectURL ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser018"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Signaled whenever licenses change
+//-----------------------------------------------------------------------------
+struct LicensesUpdated_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 25 };
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to ISteamUser::RequestStoreAuthURL
+//-----------------------------------------------------------------------------
+struct StoreAuthURLResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 65 };
+ char m_szURL[512];
+};
+
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteamuserstats.h b/lsteamclient/steamworks_sdk_133b/isteamuserstats.h
new file mode 100644
index 00000000..8c0c210d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamuserstats.h
@@ -0,0 +1,465 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ METHOD_DESC(Downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers)
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard,
+ ARRAY_COUNT_D(cUsers, Array of users to retrieve) CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteamutils.h b/lsteamclient/steamworks_sdk_133b/isteamutils.h
new file mode 100644
index 00000000..2e302b9e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamutils.h
@@ -0,0 +1,307 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils007"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_133b/isteamvideo.h b/lsteamclient/steamworks_sdk_133b/isteamvideo.h
new file mode 100644
index 00000000..4431b4a1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/isteamvideo.h
@@ -0,0 +1,60 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Video
+//
+//=============================================================================
+
+#ifndef ISTEAMVIDEO_H
+#define ISTEAMVIDEO_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Video API
+//-----------------------------------------------------------------------------
+class ISteamVideo
+{
+public:
+
+ // Get a URL suitable for streaming the given Video app ID's video
+ virtual void GetVideoURL( AppId_t unVideoAppID ) = 0;
+
+ // returns true if user is uploading a live broadcast
+ virtual bool IsBroadcasting( int *pnNumViewers ) = 0;
+};
+
+#define STEAMVIDEO_INTERFACE_VERSION "STEAMVIDEO_INTERFACE_V001"
+
+DEFINE_CALLBACK( BroadcastUploadStart_t, k_iClientVideoCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( BroadcastUploadStop_t, k_iClientVideoCallbacks + 5 )
+ CALLBACK_MEMBER( 0, EBroadcastUploadResult, m_eResult )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( GetVideoURLResult_t, k_iClientVideoCallbacks + 11 )
+ CALLBACK_MEMBER( 0, EResult, m_eResult )
+ CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID )
+ CALLBACK_MEMBER( 2, char, m_rgchURL[256] )
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMVIDEO_H
diff --git a/lsteamclient/steamworks_sdk_133b/matchmakingtypes.h b/lsteamclient/steamworks_sdk_133b/matchmakingtypes.h
new file mode 100644
index 00000000..28c58500
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/matchmakingtypes.h
@@ -0,0 +1,249 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_133b/steam_api.h b/lsteamclient/steamworks_sdk_133b/steam_api.h
new file mode 100644
index 00000000..7c937109
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/steam_api.h
@@ -0,0 +1,604 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteammusicremote.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+#include "isteamhtmlsurface.h"
+#include "isteaminventory.h"
+#include "isteamvideo.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *S_CALLTYPE SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool S_CALLTYPE SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool S_CALLTYPE SteamAPI_Init();
+#endif
+
+S_API ISteamUser *S_CALLTYPE SteamUser();
+S_API ISteamFriends *S_CALLTYPE SteamFriends();
+S_API ISteamUtils *S_CALLTYPE SteamUtils();
+S_API ISteamMatchmaking *S_CALLTYPE SteamMatchmaking();
+S_API ISteamUserStats *S_CALLTYPE SteamUserStats();
+S_API ISteamApps *S_CALLTYPE SteamApps();
+S_API ISteamNetworking *S_CALLTYPE SteamNetworking();
+S_API ISteamMatchmakingServers *S_CALLTYPE SteamMatchmakingServers();
+S_API ISteamRemoteStorage *S_CALLTYPE SteamRemoteStorage();
+S_API ISteamScreenshots *S_CALLTYPE SteamScreenshots();
+S_API ISteamHTTP *S_CALLTYPE SteamHTTP();
+S_API ISteamUnifiedMessages *S_CALLTYPE SteamUnifiedMessages();
+S_API ISteamController *S_CALLTYPE SteamController();
+S_API ISteamUGC *S_CALLTYPE SteamUGC();
+S_API ISteamAppList *S_CALLTYPE SteamAppList();
+S_API ISteamMusic *S_CALLTYPE SteamMusic();
+S_API ISteamMusicRemote *S_CALLTYPE SteamMusicRemote();
+S_API ISteamHTMLSurface *S_CALLTYPE SteamHTMLSurface();
+S_API ISteamInventory *S_CALLTYPE SteamInventory();
+S_API ISteamVideo *S_CALLTYPE SteamVideo();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender *S_CALLTYPE SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() { return m_pController; }
+ ISteamUGC* SteamUGC() { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() { return m_pSteamMusic; }
+ ISteamMusicRemote* SteamMusicRemote() { return m_pSteamMusicRemote; }
+ ISteamHTMLSurface* SteamHTMLSurface() { return m_pSteamHTMLSurface; }
+ ISteamInventory* SteamInventory() { return m_pSteamInventory; }
+ ISteamVideo* SteamVideo() { return m_pSteamVideo; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+ ISteamMusicRemote *m_pSteamMusicRemote;
+ ISteamHTMLSurface *m_pSteamHTMLSurface;
+ ISteamInventory *m_pSteamInventory;
+ ISteamVideo *m_pSteamVideo;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamMusicRemote= NULL;
+ m_pSteamHTMLSurface = NULL;
+ m_pSteamInventory = NULL;
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = NULL;
+#endif
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = SteamClient()->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = SteamClient()->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = SteamClient()->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = SteamClient()->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ {
+ return false;
+ }
+
+ m_pSteamMusicRemote = SteamClient()->GetISteamMusicRemote( hSteamUser, hSteamPipe, STEAMMUSICREMOTE_INTERFACE_VERSION );
+ if ( !m_pSteamMusicRemote )
+ {
+ return false;
+ }
+
+ m_pSteamHTMLSurface = SteamClient()->GetISteamHTMLSurface( hSteamUser, hSteamPipe, STEAMHTMLSURFACE_INTERFACE_VERSION );
+ if ( !m_pSteamHTMLSurface )
+ {
+ return false;
+ }
+
+ m_pSteamInventory = SteamClient()->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ {
+ return false;
+ }
+
+ m_pSteamVideo = SteamClient()->GetISteamVideo( hSteamUser, hSteamPipe, STEAMVIDEO_INTERFACE_VERSION );
+ if ( !m_pSteamVideo )
+ {
+ return false;
+ }
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_133b/steam_api_flat.h b/lsteamclient/steamworks_sdk_133b/steam_api_flat.h
new file mode 100644
index 00000000..583663aa
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/steam_api_flat.h
@@ -0,0 +1,694 @@
+//====== Copyright (c) 1996-2014, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Header for flatted SteamAPI. Use this for binding to other languages.
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+#ifndef STEAMAPIFLAT_H
+#define STEAMAPIFLAT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <stdint.h>
+#include "steam/steamvr.h"
+
+
+S_API HSteamPipe SteamAPI_ISteamClient_CreateSteamPipe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamClient_BReleaseSteamPipe(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_ConnectToGlobalUser(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_CreateLocalUser(intptr_t instancePtr, HSteamPipe * phSteamPipe, EAccountType eAccountType);
+S_API void SteamAPI_ISteamClient_ReleaseUser(intptr_t instancePtr, HSteamPipe hSteamPipe, HSteamUser hUser);
+S_API class ISteamUser * SteamAPI_ISteamClient_GetISteamUser(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServer * SteamAPI_ISteamClient_GetISteamGameServer(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_SetLocalIPBinding(intptr_t instancePtr, uint32 unIP, uint16 usPort);
+S_API class ISteamFriends * SteamAPI_ISteamClient_GetISteamFriends(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUtils * SteamAPI_ISteamClient_GetISteamUtils(intptr_t instancePtr, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmaking * SteamAPI_ISteamClient_GetISteamMatchmaking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmakingServers * SteamAPI_ISteamClient_GetISteamMatchmakingServers(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void * SteamAPI_ISteamClient_GetISteamGenericInterface(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUserStats * SteamAPI_ISteamClient_GetISteamUserStats(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServerStats * SteamAPI_ISteamClient_GetISteamGameServerStats(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamApps * SteamAPI_ISteamClient_GetISteamApps(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamNetworking * SteamAPI_ISteamClient_GetISteamNetworking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamRemoteStorage * SteamAPI_ISteamClient_GetISteamRemoteStorage(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamScreenshots * SteamAPI_ISteamClient_GetISteamScreenshots(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_RunFrame(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamClient_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamClient_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(intptr_t instancePtr);
+S_API class ISteamHTTP * SteamAPI_ISteamClient_GetISteamHTTP(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUnifiedMessages * SteamAPI_ISteamClient_GetISteamUnifiedMessages(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamController * SteamAPI_ISteamClient_GetISteamController(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUGC * SteamAPI_ISteamClient_GetISteamUGC(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamAppList * SteamAPI_ISteamClient_GetISteamAppList(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusic * SteamAPI_ISteamClient_GetISteamMusic(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusicRemote * SteamAPI_ISteamClient_GetISteamMusicRemote(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamHTMLSurface * SteamAPI_ISteamClient_GetISteamHTMLSurface(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_Set_SteamAPI_CPostAPIResultInProcess(intptr_t instancePtr, SteamAPI_PostAPIResultInProcess_t func);
+S_API void SteamAPI_ISteamClient_Remove_SteamAPI_CPostAPIResultInProcess(intptr_t instancePtr, SteamAPI_PostAPIResultInProcess_t func);
+S_API void SteamAPI_ISteamClient_Set_SteamAPI_CCheckCallbackRegisteredInProcess(intptr_t instancePtr, SteamAPI_CheckCallbackRegistered_t func);
+S_API class ISteamInventory * SteamAPI_ISteamClient_GetISteamInventory(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamVideo * SteamAPI_ISteamClient_GetISteamVideo(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API HSteamUser SteamAPI_ISteamUser_GetHSteamUser(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BLoggedOn(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamUser_GetSteamID(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUser_InitiateGameConnection(intptr_t instancePtr, void * pAuthBlob, int cbMaxAuthBlob, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure);
+S_API void SteamAPI_ISteamUser_TerminateGameConnection(intptr_t instancePtr, uint32 unIPServer, uint16 usPortServer);
+S_API void SteamAPI_ISteamUser_TrackAppUsageEvent(intptr_t instancePtr, class CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo);
+S_API bool SteamAPI_ISteamUser_GetUserDataFolder(intptr_t instancePtr, char * pchBuffer, int cubBuffer);
+S_API void SteamAPI_ISteamUser_StartVoiceRecording(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_StopVoiceRecording(intptr_t instancePtr);
+S_API EVoiceResult SteamAPI_ISteamUser_GetAvailableVoice(intptr_t instancePtr, uint32 * pcbCompressed, uint32 * pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_GetVoice(intptr_t instancePtr, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_DecompressVoice(intptr_t instancePtr, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate);
+S_API uint32 SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(intptr_t instancePtr);
+S_API HAuthTicket SteamAPI_ISteamUser_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamUser_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamUser_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamUser_BIsBehindNAT(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_AdvertiseGame(intptr_t instancePtr, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestEncryptedAppTicket(intptr_t instancePtr, void * pDataToInclude, int cbDataToInclude);
+S_API bool SteamAPI_ISteamUser_GetEncryptedAppTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API int SteamAPI_ISteamUser_GetGameBadgeLevel(intptr_t instancePtr, int nSeries, bool bFoil);
+S_API int SteamAPI_ISteamUser_GetPlayerSteamLevel(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestStoreAuthURL(intptr_t instancePtr, const char * pchRedirectURL);
+S_API const char * SteamAPI_ISteamFriends_GetPersonaName(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_SetPersonaName(intptr_t instancePtr, const char * pchPersonaName);
+S_API EPersonaState SteamAPI_ISteamFriends_GetPersonaState(intptr_t instancePtr);
+S_API int SteamAPI_ISteamFriends_GetFriendCount(intptr_t instancePtr, int iFriendFlags);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendByIndex(intptr_t instancePtr, int iFriend, int iFriendFlags);
+S_API EFriendRelationship SteamAPI_ISteamFriends_GetFriendRelationship(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API EPersonaState SteamAPI_ISteamFriends_GetFriendPersonaState(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaName(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_GetFriendGamePlayed(intptr_t instancePtr, class CSteamID steamIDFriend, struct FriendGameInfo_t * pFriendGameInfo);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(intptr_t instancePtr, class CSteamID steamIDFriend, int iPersonaName);
+S_API int SteamAPI_ISteamFriends_GetFriendSteamLevel(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetPlayerNickname(intptr_t instancePtr, class CSteamID steamIDPlayer);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupCount(intptr_t instancePtr);
+S_API FriendsGroupID_t SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(intptr_t instancePtr, int iFG);
+S_API const char * SteamAPI_ISteamFriends_GetFriendsGroupName(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API void SteamAPI_ISteamFriends_GetFriendsGroupMembersList(intptr_t instancePtr, FriendsGroupID_t friendsGroupID, class CSteamID * pOutSteamIDMembers, int nMembersCount);
+S_API bool SteamAPI_ISteamFriends_HasFriend(intptr_t instancePtr, class CSteamID steamIDFriend, int iFriendFlags);
+S_API int SteamAPI_ISteamFriends_GetClanCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetClanByIndex(intptr_t instancePtr, int iClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanName(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanTag(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_GetClanActivityCounts(intptr_t instancePtr, class CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_DownloadClanActivityCounts(intptr_t instancePtr, class CSteamID * psteamIDClans, int cClansToRequest);
+S_API int SteamAPI_ISteamFriends_GetFriendCountFromSource(intptr_t instancePtr, class CSteamID steamIDSource);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(intptr_t instancePtr, class CSteamID steamIDSource, int iFriend);
+S_API bool SteamAPI_ISteamFriends_IsUserInSource(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDSource);
+S_API void SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(intptr_t instancePtr, class CSteamID steamIDUser, bool bSpeaking);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlay(intptr_t instancePtr, const char * pchDialog);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToUser(intptr_t instancePtr, const char * pchDialog, class CSteamID steamID);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(intptr_t instancePtr, const char * pchURL);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToStore(intptr_t instancePtr, AppId_t nAppID, EOverlayToStoreFlag eFlag);
+S_API void SteamAPI_ISteamFriends_SetPlayedWith(intptr_t instancePtr, class CSteamID steamIDUserPlayedWith);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API int SteamAPI_ISteamFriends_GetSmallFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetMediumFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetLargeFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_RequestUserInformation(intptr_t instancePtr, class CSteamID steamIDUser, bool bRequireNameOnly);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_RequestClanOfficerList(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOwner(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanOfficerCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOfficerByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iOfficer);
+S_API uint32 SteamAPI_ISteamFriends_GetUserRestrictions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamFriends_SetRichPresence(intptr_t instancePtr, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamFriends_ClearRichPresence(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchKey);
+S_API int SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(intptr_t instancePtr, class CSteamID steamIDFriend, int iKey);
+S_API void SteamAPI_ISteamFriends_RequestFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_InviteUserToGame(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchConnectString);
+S_API int SteamAPI_ISteamFriends_GetCoplayFriendCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetCoplayFriend(intptr_t instancePtr, int iCoplayFriend);
+S_API int SteamAPI_ISteamFriends_GetFriendCoplayTime(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API AppId_t SteamAPI_ISteamFriends_GetFriendCoplayGame(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_JoinClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_LeaveClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanChatMemberCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetChatMemberByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iUser);
+S_API bool SteamAPI_ISteamFriends_SendClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, const char * pchText);
+S_API int SteamAPI_ISteamFriends_GetClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, class CSteamID * psteamidChatter);
+S_API bool SteamAPI_ISteamFriends_IsClanChatAdmin(intptr_t instancePtr, class CSteamID steamIDClanChat, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_SetListenForFriendsMessages(intptr_t instancePtr, bool bInterceptEnabled);
+S_API bool SteamAPI_ISteamFriends_ReplyToFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchMsgToSend);
+S_API int SteamAPI_ISteamFriends_GetFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_GetFollowerCount(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_IsFollowing(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_EnumerateFollowingList(intptr_t instancePtr, uint32 unStartIndex);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceAppActive(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(intptr_t instancePtr);
+S_API EUniverse SteamAPI_ISteamUtils_GetConnectedUniverse(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetServerRealTime(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUtils_GetIPCountry(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetImageSize(intptr_t instancePtr, int iImage, uint32 * pnWidth, uint32 * pnHeight);
+S_API bool SteamAPI_ISteamUtils_GetImageRGBA(intptr_t instancePtr, int iImage, uint8 * pubDest, int nDestBufferSize);
+S_API bool SteamAPI_ISteamUtils_GetCSERIPPort(intptr_t instancePtr, uint32 * unIP, uint16 * usPort);
+S_API uint8 SteamAPI_ISteamUtils_GetCurrentBatteryPower(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetAppID(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationPosition(intptr_t instancePtr, ENotificationPosition eNotificationPosition);
+S_API bool SteamAPI_ISteamUtils_IsAPICallCompleted(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, bool * pbFailed);
+S_API ESteamAPICallFailure SteamAPI_ISteamUtils_GetAPICallFailureReason(intptr_t instancePtr, SteamAPICall_t hSteamAPICall);
+S_API bool SteamAPI_ISteamUtils_GetAPICallResult(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed);
+S_API void SteamAPI_ISteamUtils_RunFrame(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamUtils_IsOverlayEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_BOverlayNeedsPresent(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUtils_CheckFileSignature(intptr_t instancePtr, const char * szFileName);
+S_API bool SteamAPI_ISteamUtils_ShowGamepadTextInput(intptr_t instancePtr, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText);
+S_API uint32 SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(intptr_t instancePtr, char * pchText, uint32 cchText);
+S_API const char * SteamAPI_ISteamUtils_GetSteamUILanguage(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_IsSteamRunningInVR(intptr_t instancePtr);
+S_API int SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMatchmaking_GetFavoriteGame(intptr_t instancePtr, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer);
+S_API int SteamAPI_ISteamMatchmaking_AddFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer);
+S_API bool SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_RequestLobbyList(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(intptr_t instancePtr, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToBeCloseTo);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(intptr_t instancePtr, int nSlotsAvailable);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(intptr_t instancePtr, ELobbyDistanceFilter eLobbyDistanceFilter);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(intptr_t instancePtr, int cMaxResults);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyByIndex(intptr_t instancePtr, int iLobby);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_CreateLobby(intptr_t instancePtr, ELobbyType eLobbyType, int cMaxMembers);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_JoinLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_LeaveLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_InviteUserToLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDInvitee);
+S_API int SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iMember);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyDataCount(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize);
+S_API bool SteamAPI_ISteamMatchmaking_DeleteLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDUser, const char * pchKey);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(intptr_t instancePtr, class CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(intptr_t instancePtr, class CSteamID steamIDLobby, int iChatID, class CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API bool SteamAPI_ISteamMatchmaking_RequestLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, class CSteamID steamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, class CSteamID * psteamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby, int cMaxMembers);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyType(intptr_t instancePtr, class CSteamID steamIDLobby, ELobbyType eLobbyType);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyJoinable(intptr_t instancePtr, class CSteamID steamIDLobby, bool bLobbyJoinable);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDNewOwner);
+S_API bool SteamAPI_ISteamMatchmaking_SetLinkedLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDLobbyDependent);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(intptr_t instancePtr, HServerListRequest hRequest, EMatchMakingServerResponse response);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(intptr_t instancePtr, class gameserveritem_t & server);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(intptr_t instancePtr, const char * pchName, int nScore, float flTimePlayed);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(intptr_t instancePtr, const char * pchRule, const char * pchValue);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(intptr_t instancePtr);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestLANServerList(intptr_t instancePtr, AppId_t iApp, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_ReleaseRequest(intptr_t instancePtr, HServerListRequest hServerListRequest);
+S_API class gameserveritem_t * SteamAPI_ISteamMatchmakingServers_GetServerDetails(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API bool SteamAPI_ISteamMatchmakingServers_IsRefreshing(intptr_t instancePtr, HServerListRequest hRequest);
+S_API int SteamAPI_ISteamMatchmakingServers_GetServerCount(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshServer(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PingServer(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPingResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PlayerDetails(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPlayersResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_ServerRules(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingRulesResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelServerQuery(intptr_t instancePtr, HServerQuery hServerQuery);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWrite(intptr_t instancePtr, const char * pchFile, const void * pvData, int32 cubData);
+S_API int32 SteamAPI_ISteamRemoteStorage_FileRead(intptr_t instancePtr, const char * pchFile, void * pvData, int32 cubDataToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileForget(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileDelete(intptr_t instancePtr, const char * pchFile);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileShare(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(intptr_t instancePtr, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform);
+S_API UGCFileWriteStreamHandle_t SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileExists(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FilePersisted(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileSize(intptr_t instancePtr, const char * pchFile);
+S_API int64 SteamAPI_ISteamRemoteStorage_GetFileTimestamp(intptr_t instancePtr, const char * pchFile);
+S_API ERemoteStoragePlatform SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileCount(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(intptr_t instancePtr, int iFile, int32 * pnFileSizeInBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_GetQuota(intptr_t instancePtr, int32 * pnTotalBytes, int32 * puAvailableBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(intptr_t instancePtr);
+S_API void SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(intptr_t instancePtr, bool bEnabled);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownload(intptr_t instancePtr, UGCHandle_t hContent, uint32 unPriority);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(intptr_t instancePtr, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDetails(intptr_t instancePtr, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, class CSteamID * pSteamIDOwner);
+S_API int32 SteamAPI_ISteamRemoteStorage_UGCRead(intptr_t instancePtr, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(intptr_t instancePtr);
+S_API UGCHandle_t SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(intptr_t instancePtr, int32 iCachedContent);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(intptr_t instancePtr, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType);
+S_API PublishedFileUpdateHandle_t SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_DeletePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(intptr_t instancePtr, class CSteamID steamId, uint32 unStartIndex, struct SteamParamStringArray_t * pRequiredTags, struct SteamParamStringArray_t * pExcludedTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishVideo(intptr_t instancePtr, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(intptr_t instancePtr, EWorkshopFileAction eAction, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(intptr_t instancePtr, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, struct SteamParamStringArray_t * pTags, struct SteamParamStringArray_t * pUserTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(intptr_t instancePtr, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority);
+S_API bool SteamAPI_ISteamUserStats_RequestCurrentStats(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUserStats_GetStat(intptr_t instancePtr, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetStat0(intptr_t instancePtr, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_SetStat(intptr_t instancePtr, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamUserStats_SetStat0(intptr_t instancePtr, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamUserStats_UpdateAvgRateStat(intptr_t instancePtr, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamUserStats_GetAchievement(intptr_t instancePtr, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_SetAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_ClearAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(intptr_t instancePtr, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_StoreStats(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetAchievementIcon(intptr_t instancePtr, const char * pchName);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(intptr_t instancePtr, const char * pchName, const char * pchKey);
+S_API bool SteamAPI_ISteamUserStats_IndicateAchievementProgress(intptr_t instancePtr, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress);
+S_API uint32 SteamAPI_ISteamUserStats_GetNumAchievements(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementName(intptr_t instancePtr, uint32 iAchievement);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_ResetAllStats(intptr_t instancePtr, bool bAchievementsToo);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName);
+S_API const char * SteamAPI_ISteamUserStats_GetLeaderboardName(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API int SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardSortMethod SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardDisplayType SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, class CSteamID * prgUsers, int cUsers);
+S_API bool SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(intptr_t instancePtr, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, struct LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_UploadLeaderboardScore(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_AttachLeaderboardUGC(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(intptr_t instancePtr, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API int SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(intptr_t instancePtr, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(intptr_t instancePtr, const char * pchName, float * pflPercent);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalStats(intptr_t instancePtr, int nHistoryDays);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat(intptr_t instancePtr, const char * pchStatName, int64 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat0(intptr_t instancePtr, const char * pchStatName, double * pData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory(intptr_t instancePtr, const char * pchStatName, int64 * pData, uint32 cubData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory0(intptr_t instancePtr, const char * pchStatName, double * pData, uint32 cubData);
+S_API bool SteamAPI_ISteamApps_BIsSubscribed(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsLowViolence(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsCybercafe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsVACBanned(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetCurrentGameLanguage(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetAvailableGameLanguages(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedApp(intptr_t instancePtr, AppId_t appID);
+S_API bool SteamAPI_ISteamApps_BIsDlcInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint32 SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(intptr_t instancePtr);
+S_API int SteamAPI_ISteamApps_GetDLCCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BGetDLCDataByIndex(intptr_t instancePtr, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize);
+S_API void SteamAPI_ISteamApps_InstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_UninstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_GetCurrentBetaName(intptr_t instancePtr, char * pchName, int cchNameBufferSize);
+S_API bool SteamAPI_ISteamApps_MarkContentCorrupt(intptr_t instancePtr, bool bMissingFilesOnly);
+S_API uint32 SteamAPI_ISteamApps_GetInstalledDepots(intptr_t instancePtr, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots);
+S_API uint32 SteamAPI_ISteamApps_GetAppInstallDir(intptr_t instancePtr, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize);
+S_API bool SteamAPI_ISteamApps_BIsAppInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint64 SteamAPI_ISteamApps_GetAppOwner(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetLaunchQueryParam(intptr_t instancePtr, const char * pchKey);
+S_API bool SteamAPI_ISteamApps_GetDlcDownloadProgress(intptr_t instancePtr, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API int SteamAPI_ISteamApps_GetAppBuildId(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamNetworking_SendP2PPacket(intptr_t instancePtr, class CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_IsP2PPacketAvailable(intptr_t instancePtr, uint32 * pcubMsgSize, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_ReadP2PPacket(intptr_t instancePtr, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, class CSteamID * psteamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(intptr_t instancePtr, class CSteamID steamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_GetP2PSessionState(intptr_t instancePtr, class CSteamID steamIDRemote, struct P2PSessionState_t * pConnectionState);
+S_API bool SteamAPI_ISteamNetworking_AllowP2PPacketRelay(intptr_t instancePtr, bool bAllow);
+S_API SNetListenSocket_t SteamAPI_ISteamNetworking_CreateListenSocket(intptr_t instancePtr, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(intptr_t instancePtr, class CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateConnectionSocket(intptr_t instancePtr, uint32 nIP, uint16 nPort, int nTimeoutSec);
+S_API bool SteamAPI_ISteamNetworking_DestroySocket(intptr_t instancePtr, SNetSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_DestroyListenSocket(intptr_t instancePtr, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_SendDataOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_RetrieveDataFromSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailable(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_RetrieveData(intptr_t instancePtr, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_GetSocketInfo(intptr_t instancePtr, SNetSocket_t hSocket, class CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote);
+S_API bool SteamAPI_ISteamNetworking_GetListenSocketInfo(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort);
+S_API ESNetSocketConnectionType SteamAPI_ISteamNetworking_GetSocketConnectionType(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API int SteamAPI_ISteamNetworking_GetMaxPacketSize(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_WriteScreenshot(intptr_t instancePtr, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(intptr_t instancePtr, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight);
+S_API void SteamAPI_ISteamScreenshots_TriggerScreenshot(intptr_t instancePtr);
+S_API void SteamAPI_ISteamScreenshots_HookScreenshots(intptr_t instancePtr, bool bHook);
+S_API bool SteamAPI_ISteamScreenshots_SetLocation(intptr_t instancePtr, ScreenshotHandle hScreenshot, const char * pchLocation);
+S_API bool SteamAPI_ISteamScreenshots_TagUser(intptr_t instancePtr, ScreenshotHandle hScreenshot, class CSteamID steamID);
+S_API bool SteamAPI_ISteamScreenshots_TagPublishedFile(intptr_t instancePtr, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID);
+S_API bool SteamAPI_ISteamMusic_BIsEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusic_BIsPlaying(intptr_t instancePtr);
+S_API AudioPlayback_Status SteamAPI_ISteamMusic_GetPlaybackStatus(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Play(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Pause(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayPrevious(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayNext(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_SetVolume(intptr_t instancePtr, float flVolume);
+S_API float SteamAPI_ISteamMusic_GetVolume(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BActivationSuccess(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_SetDisplayName(intptr_t instancePtr, const char * pchDisplayName);
+S_API bool SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayPrevious(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayNext(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableQueue(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlaylists(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(intptr_t instancePtr, AudioPlayback_Status nStatus);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateVolume(intptr_t instancePtr, float flValue);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(intptr_t instancePtr, bool bAvailable);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(intptr_t instancePtr, const char * pchText);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(intptr_t instancePtr, int nValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_QueueWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetQueueEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetQueueEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_QueueDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetPlaylistEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistDidChange(intptr_t instancePtr);
+S_API HTTPRequestHandle SteamAPI_ISteamHTTP_CreateHTTPRequest(intptr_t instancePtr, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(intptr_t instancePtr, HTTPRequestHandle hRequest, uint64 ulContextValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_DeferHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 * unBodySize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 cOffset, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_ReleaseHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(intptr_t instancePtr, HTTPRequestHandle hRequest, float * pflPercentOut);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen);
+S_API HTTPCookieContainerHandle SteamAPI_ISteamHTTP_CreateCookieContainer(intptr_t instancePtr, bool bAllowResponsesToModify);
+S_API bool SteamAPI_ISteamHTTP_ReleaseCookieContainer(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetCookie(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer, const char * pchHost, const char * pchUrl, const char * pchCookie);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(intptr_t instancePtr, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchUserAgentInfo);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(intptr_t instancePtr, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unMilliseconds);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(intptr_t instancePtr, HTTPRequestHandle hRequest, bool * pbWasTimedOut);
+S_API ClientUnifiedMessageHandle SteamAPI_ISteamUnifiedMessages_SendMethod(intptr_t instancePtr, const char * pchServiceMethod, const void * pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, uint32 * punResponseSize, EResult * peResult);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseData(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, void * pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease);
+S_API bool SteamAPI_ISteamUnifiedMessages_ReleaseMethod(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle);
+S_API bool SteamAPI_ISteamUnifiedMessages_SendNotification(intptr_t instancePtr, const char * pchServiceNotification, const void * pNotificationBuffer, uint32 unNotificationBufferSize);
+S_API bool SteamAPI_ISteamController_Init(intptr_t instancePtr, const char * pchAbsolutePathToControllerConfigVDF);
+S_API bool SteamAPI_ISteamController_Shutdown(intptr_t instancePtr);
+S_API void SteamAPI_ISteamController_RunFrame(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamController_GetControllerState(intptr_t instancePtr, uint32 unControllerIndex, struct SteamControllerState001_t * pState);
+S_API void SteamAPI_ISteamController_TriggerHapticPulse(intptr_t instancePtr, uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec);
+S_API void SteamAPI_ISteamController_SetOverrideMode(intptr_t instancePtr, const char * pchMode);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(intptr_t instancePtr, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(intptr_t instancePtr, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SendQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCResult(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, struct SteamUGCDetails_t * pDetails);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCPreviewURL(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCChildren(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCStatistic(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 * pStatValue);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, bool * pbIsImage);
+S_API bool SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_AddRequiredTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_AddExcludedTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_SetReturnLongDescription(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnLongDescription);
+S_API bool SteamAPI_ISteamUGC_SetReturnMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnMetadata);
+S_API bool SteamAPI_ISteamUGC_SetReturnChildren(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnChildren);
+S_API bool SteamAPI_ISteamUGC_SetReturnAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews);
+S_API bool SteamAPI_ISteamUGC_SetReturnTotalOnly(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnTotalOnly);
+S_API bool SteamAPI_ISteamUGC_SetAllowCachedResponse(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds);
+S_API bool SteamAPI_ISteamUGC_SetCloudFileNameFilter(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pMatchCloudFileName);
+S_API bool SteamAPI_ISteamUGC_SetMatchAnyTag(intptr_t instancePtr, UGCQueryHandle_t handle, bool bMatchAnyTag);
+S_API bool SteamAPI_ISteamUGC_SetSearchText(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pSearchText);
+S_API bool SteamAPI_ISteamUGC_SetRankedByTrendDays(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unDays);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RequestUGCDetails(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_CreateItem(intptr_t instancePtr, AppId_t nConsumerAppId, EWorkshopFileType eFileType);
+S_API UGCUpdateHandle_t SteamAPI_ISteamUGC_StartItemUpdate(intptr_t instancePtr, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_SetItemTitle(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchTitle);
+S_API bool SteamAPI_ISteamUGC_SetItemDescription(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchDescription);
+S_API bool SteamAPI_ISteamUGC_SetItemMetadata(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchMetaData);
+S_API bool SteamAPI_ISteamUGC_SetItemVisibility(intptr_t instancePtr, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamUGC_SetItemTags(intptr_t instancePtr, UGCUpdateHandle_t updateHandle, const struct SteamParamStringArray_t * pTags);
+S_API bool SteamAPI_ISteamUGC_SetItemContent(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszContentFolder);
+S_API bool SteamAPI_ISteamUGC_SetItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubmitItemUpdate(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchChangeNote);
+S_API EItemUpdateStatus SteamAPI_ISteamUGC_GetItemUpdateProgress(intptr_t instancePtr, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddItemToFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveItemFromFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_UnsubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API uint32 SteamAPI_ISteamUGC_GetNumSubscribedItems(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUGC_GetSubscribedItems(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API uint32 SteamAPI_ISteamUGC_GetItemState(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_GetItemInstallInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp);
+S_API bool SteamAPI_ISteamUGC_GetItemDownloadInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API bool SteamAPI_ISteamUGC_DownloadItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bHighPriority);
+S_API uint32 SteamAPI_ISteamAppList_GetNumInstalledApps(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamAppList_GetInstalledApps(intptr_t instancePtr, AppId_t * pvecAppID, uint32 unMaxAppIDs);
+S_API int SteamAPI_ISteamAppList_GetAppName(intptr_t instancePtr, AppId_t nAppID, char * pchName, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppInstallDir(intptr_t instancePtr, AppId_t nAppID, char * pchDirectory, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppBuildId(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Shutdown(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamHTMLSurface_CreateBrowser(intptr_t instancePtr, const char * pchUserAgent, const char * pchUserCSS);
+S_API void SteamAPI_ISteamHTMLSurface_RemoveBrowser(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_LoadURL(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData);
+S_API void SteamAPI_ISteamHTMLSurface_SetSize(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight);
+S_API void SteamAPI_ISteamHTMLSurface_StopLoad(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Reload(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoBack(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoForward(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_AddHeader(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamHTMLSurface_ExecuteJavascript(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchScript);
+S_API void SteamAPI_ISteamHTMLSurface_MouseUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDoubleClick(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseMove(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_MouseWheel(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int32 nDelta);
+S_API void SteamAPI_ISteamHTMLSurface_KeyDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyChar(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetVerticalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetKeyFocus(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus);
+S_API void SteamAPI_ISteamHTMLSurface_ViewSource(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_CopyToClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_PasteFromClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Find(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse);
+S_API void SteamAPI_ISteamHTMLSurface_StopFind(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_SetCookie(intptr_t instancePtr, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly);
+S_API void SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY);
+S_API void SteamAPI_ISteamHTMLSurface_SetBackgroundMode(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bBackgroundMode);
+S_API void SteamAPI_ISteamHTMLSurface_AllowStartRequest(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bAllowed);
+S_API void SteamAPI_ISteamHTMLSurface_JSDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bResult);
+S_API void SteamAPI_ISteamHTMLSurface_FileLoadDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char ** pchSelectedFiles);
+S_API EResult SteamAPI_ISteamInventory_GetResultStatus(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetResultItems(intptr_t instancePtr, SteamInventoryResult_t resultHandle, struct SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize);
+S_API uint32 SteamAPI_ISteamInventory_GetResultTimestamp(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_CheckResultSteamID(intptr_t instancePtr, SteamInventoryResult_t resultHandle, class CSteamID steamIDExpected);
+S_API void SteamAPI_ISteamInventory_DestroyResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetAllItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_GetItemsByID(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs);
+S_API bool SteamAPI_ISteamInventory_SerializeResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize);
+S_API bool SteamAPI_ISteamInventory_DeserializeResult(intptr_t instancePtr, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE);
+S_API bool SteamAPI_ISteamInventory_GenerateItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_GrantPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_AddPromoItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef);
+S_API bool SteamAPI_ISteamInventory_AddPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_ConsumeItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity);
+S_API bool SteamAPI_ISteamInventory_ExchangeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength);
+S_API bool SteamAPI_ISteamInventory_TransferItemQuantity(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest);
+S_API void SteamAPI_ISteamInventory_SendItemDropHeartbeat(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_TriggerItemDrop(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition);
+S_API bool SteamAPI_ISteamInventory_TradeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, class CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength);
+S_API bool SteamAPI_ISteamInventory_LoadItemDefinitions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionIDs(intptr_t instancePtr, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionProperty(intptr_t instancePtr, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSize);
+S_API void SteamAPI_ISteamVideo_GetVideoURL(intptr_t instancePtr, AppId_t unVideoAppID);
+S_API bool SteamAPI_ISteamVideo_IsBroadcasting(intptr_t instancePtr, int * pnNumViewers);
+S_API void SteamAPI_vr_IVRSystem_GetWindowBounds(intptr_t instancePtr, int32_t * pnX, int32_t * pnY, uint32_t * pnWidth, uint32_t * pnHeight);
+S_API void SteamAPI_vr_IVRSystem_GetRecommendedRenderTargetSize(intptr_t instancePtr, uint32_t * pnWidth, uint32_t * pnHeight);
+S_API void SteamAPI_vr_IVRSystem_GetEyeOutputViewport(intptr_t instancePtr, vr::Hmd_Eye eEye, uint32_t * pnX, uint32_t * pnY, uint32_t * pnWidth, uint32_t * pnHeight);
+S_API struct vr::HmdMatrix44_t SteamAPI_vr_IVRSystem_GetProjectionMatrix(intptr_t instancePtr, vr::Hmd_Eye eEye, float fNearZ, float fFarZ, vr::GraphicsAPIConvention eProjType);
+S_API void SteamAPI_vr_IVRSystem_GetProjectionRaw(intptr_t instancePtr, vr::Hmd_Eye eEye, float * pfLeft, float * pfRight, float * pfTop, float * pfBottom);
+S_API struct vr::DistortionCoordinates_t SteamAPI_vr_IVRSystem_ComputeDistortion(intptr_t instancePtr, vr::Hmd_Eye eEye, float fU, float fV);
+S_API struct vr::HmdMatrix34_t SteamAPI_vr_IVRSystem_GetEyeToHeadTransform(intptr_t instancePtr, vr::Hmd_Eye eEye);
+S_API bool SteamAPI_vr_IVRSystem_GetTimeSinceLastVsync(intptr_t instancePtr, float * pfSecondsSinceLastVsync, uint64_t * pulFrameCounter);
+S_API int32_t SteamAPI_vr_IVRSystem_GetD3D9AdapterIndex(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRSystem_GetDXGIOutputInfo(intptr_t instancePtr, int32_t * pnAdapterIndex, int32_t * pnAdapterOutputIndex);
+S_API void SteamAPI_vr_IVRSystem_AttachToWindow(intptr_t instancePtr, void * hWnd);
+S_API void SteamAPI_vr_IVRSystem_GetDeviceToAbsoluteTrackingPose(intptr_t instancePtr, vr::TrackingUniverseOrigin eOrigin, float fPredictedSecondsToPhotonsFromNow, struct vr::TrackedDevicePose_t * pTrackedDevicePoseArray, uint32_t unTrackedDevicePoseArrayCount);
+S_API void SteamAPI_vr_IVRSystem_ResetSeatedZeroPose(intptr_t instancePtr);
+S_API struct vr::HmdMatrix34_t SteamAPI_vr_IVRSystem_GetSeatedZeroPoseToStandingAbsoluteTrackingPose(intptr_t instancePtr);
+S_API bool SteamAPI_vr_IVRSystem_LoadRenderModel(intptr_t instancePtr, const char * pchRenderModelName, struct vr::RenderModel_t * pRenderModel);
+S_API void SteamAPI_vr_IVRSystem_FreeRenderModel(intptr_t instancePtr, struct vr::RenderModel_t * pRenderModel);
+S_API vr::TrackedDeviceClass SteamAPI_vr_IVRSystem_GetTrackedDeviceClass(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex);
+S_API bool SteamAPI_vr_IVRSystem_IsTrackedDeviceConnected(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex);
+S_API bool SteamAPI_vr_IVRSystem_GetBoolTrackedDeviceProperty(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError * pError);
+S_API float SteamAPI_vr_IVRSystem_GetFloatTrackedDeviceProperty(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError * pError);
+S_API int32_t SteamAPI_vr_IVRSystem_GetInt32TrackedDeviceProperty(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError * pError);
+S_API uint64_t SteamAPI_vr_IVRSystem_GetUint64TrackedDeviceProperty(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError * pError);
+S_API struct vr::HmdMatrix34_t SteamAPI_vr_IVRSystem_GetMatrix34TrackedDeviceProperty(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError * pError);
+S_API uint32_t SteamAPI_vr_IVRSystem_GetStringTrackedDeviceProperty(intptr_t instancePtr, vr::TrackedDeviceIndex_t unDeviceIndex, vr::TrackedDeviceProperty prop, char * pchValue, uint32_t unBufferSize, vr::TrackedPropertyError * pError);
+S_API const char * SteamAPI_vr_IVRSystem_GetPropErrorNameFromEnum(intptr_t instancePtr, vr::TrackedPropertyError error);
+S_API bool SteamAPI_vr_IVRSystem_PollNextEvent(intptr_t instancePtr, struct vr::VREvent_t * pEvent);
+S_API const char * SteamAPI_vr_IVRSystem_GetEventTypeNameFromEnum(intptr_t instancePtr, vr::EVREventType eType);
+S_API struct vr::HiddenAreaMesh_t SteamAPI_vr_IVRSystem_GetHiddenAreaMesh(intptr_t instancePtr, vr::Hmd_Eye eEye);
+S_API vr::ChaperoneCalibrationState SteamAPI_vr_IVRChaperone_GetCalibrationState(intptr_t instancePtr);
+S_API bool SteamAPI_vr_IVRChaperone_GetSoftBoundsInfo(intptr_t instancePtr, struct vr::ChaperoneSoftBoundsInfo_t * pInfo);
+S_API bool SteamAPI_vr_IVRChaperone_GetHardBoundsInfo(intptr_t instancePtr, struct vr::HmdQuad_t * pQuadsBuffer, uint32_t * punQuadsCount);
+S_API bool SteamAPI_vr_IVRChaperone_GetSeatedBoundsInfo(intptr_t instancePtr, struct vr::ChaperoneSeatedBoundsInfo_t * pInfo);
+S_API uint32_t SteamAPI_vr_IVRCompositor_GetLastError(intptr_t instancePtr, char * pchBuffer, uint32_t unBufferSize);
+S_API void SteamAPI_vr_IVRCompositor_SetVSync(intptr_t instancePtr, bool bVSync);
+S_API bool SteamAPI_vr_IVRCompositor_GetVSync(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRCompositor_SetGamma(intptr_t instancePtr, float fGamma);
+S_API float SteamAPI_vr_IVRCompositor_GetGamma(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRCompositor_SetGraphicsDevice(intptr_t instancePtr, vr::Compositor_DeviceType eType, void * pDevice);
+S_API void SteamAPI_vr_IVRCompositor_WaitGetPoses(intptr_t instancePtr, struct vr::TrackedDevicePose_t * pPoseArray, uint32_t unPoseArrayCount);
+S_API void SteamAPI_vr_IVRCompositor_Submit(intptr_t instancePtr, vr::Hmd_Eye eEye, void * pTexture, struct vr::Compositor_TextureBounds * pBounds);
+S_API void SteamAPI_vr_IVRCompositor_ClearLastSubmittedFrame(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRCompositor_GetOverlayDefaults(intptr_t instancePtr, struct vr::Compositor_OverlaySettings * pSettings);
+S_API void SteamAPI_vr_IVRCompositor_SetOverlay(intptr_t instancePtr, void * pTexture, struct vr::Compositor_OverlaySettings * pSettings);
+S_API void SteamAPI_vr_IVRCompositor_SetOverlayRaw(intptr_t instancePtr, void * buffer, uint32_t width, uint32_t height, uint32_t depth, struct vr::Compositor_OverlaySettings * pSettings);
+S_API void SteamAPI_vr_IVRCompositor_SetOverlayFromFile(intptr_t instancePtr, const char * pchFilePath, struct vr::Compositor_OverlaySettings * pSettings);
+S_API void SteamAPI_vr_IVRCompositor_ClearOverlay(intptr_t instancePtr);
+S_API bool SteamAPI_vr_IVRCompositor_GetFrameTiming(intptr_t instancePtr, struct vr::Compositor_FrameTiming * pTiming, uint32_t unFramesAgo);
+S_API void SteamAPI_vr_IVRCompositor_FadeToColor(intptr_t instancePtr, float fSeconds, float fRed, float fGreen, float fBlue, float fAlpha, bool bBackground);
+S_API void SteamAPI_vr_IVRCompositor_FadeGrid(intptr_t instancePtr, float fSeconds, bool bFadeIn);
+S_API void SteamAPI_vr_IVRCompositor_CompositorBringToFront(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRCompositor_CompositorGoToBack(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRCompositor_CompositorQuit(intptr_t instancePtr);
+S_API bool SteamAPI_vr_IVRCompositor_IsFullscreen(intptr_t instancePtr);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_GetDriverCount(intptr_t instancePtr);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_GetDriverId(intptr_t instancePtr, uint32_t unDriverIndex, char * pchBuffer, uint32_t unBufferLen);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_GetDriverDisplayCount(intptr_t instancePtr, const char * pchDriverId);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_GetDriverDisplayId(intptr_t instancePtr, const char * pchDriverId, uint32_t unDisplayIndex, char * pchBuffer, uint32_t unBufferLen);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_GetDriverDisplayModelNumber(intptr_t instancePtr, const char * pchDriverId, const char * pchDisplayId, char * pchBuffer, uint32_t unBufferLen);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_GetDriverDisplaySerialNumber(intptr_t instancePtr, const char * pchDriverId, const char * pchDisplayId, char * pchBuffer, uint32_t unBufferLen);
+S_API uint32_t SteamAPI_vr_IVRControlPanel_LoadSharedResource(intptr_t instancePtr, const char * pchResourceName, char * pchBuffer, uint32_t unBufferLen);
+S_API float SteamAPI_vr_IVRControlPanel_GetIPD(intptr_t instancePtr);
+S_API void SteamAPI_vr_IVRControlPanel_SetIPD(intptr_t instancePtr, float fIPD);
+S_API bool SteamAPI_ISteamGameServer_InitGameServer(intptr_t instancePtr, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString);
+S_API void SteamAPI_ISteamGameServer_SetProduct(intptr_t instancePtr, const char * pszProduct);
+S_API void SteamAPI_ISteamGameServer_SetGameDescription(intptr_t instancePtr, const char * pszGameDescription);
+S_API void SteamAPI_ISteamGameServer_SetModDir(intptr_t instancePtr, const char * pszModDir);
+S_API void SteamAPI_ISteamGameServer_SetDedicatedServer(intptr_t instancePtr, bool bDedicated);
+S_API void SteamAPI_ISteamGameServer_LogOn(intptr_t instancePtr, const char * pszToken);
+S_API void SteamAPI_ISteamGameServer_LogOnAnonymous(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_LogOff(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BLoggedOn(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BSecure(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamGameServer_GetSteamID(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_WasRestartRequested(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetMaxPlayerCount(intptr_t instancePtr, int cPlayersMax);
+S_API void SteamAPI_ISteamGameServer_SetBotPlayerCount(intptr_t instancePtr, int cBotplayers);
+S_API void SteamAPI_ISteamGameServer_SetServerName(intptr_t instancePtr, const char * pszServerName);
+S_API void SteamAPI_ISteamGameServer_SetMapName(intptr_t instancePtr, const char * pszMapName);
+S_API void SteamAPI_ISteamGameServer_SetPasswordProtected(intptr_t instancePtr, bool bPasswordProtected);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorPort(intptr_t instancePtr, uint16 unSpectatorPort);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorServerName(intptr_t instancePtr, const char * pszSpectatorServerName);
+S_API void SteamAPI_ISteamGameServer_ClearAllKeyValues(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetKeyValue(intptr_t instancePtr, const char * pKey, const char * pValue);
+S_API void SteamAPI_ISteamGameServer_SetGameTags(intptr_t instancePtr, const char * pchGameTags);
+S_API void SteamAPI_ISteamGameServer_SetGameData(intptr_t instancePtr, const char * pchGameData);
+S_API void SteamAPI_ISteamGameServer_SetRegion(intptr_t instancePtr, const char * pszRegion);
+S_API bool SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(intptr_t instancePtr, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, class CSteamID * pSteamIDUser);
+S_API uint64 SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SendUserDisconnect(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServer_BUpdateUserData(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore);
+S_API HAuthTicket SteamAPI_ISteamGameServer_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamGameServer_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamGameServer_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamGameServer_RequestUserGroupStatus(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDGroup);
+S_API void SteamAPI_ISteamGameServer_GetGameplayStats(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_GetServerReputation(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamGameServer_GetPublicIP(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_HandleIncomingPacket(intptr_t instancePtr, const void * pData, int cbData, uint32 srcIP, uint16 srcPort);
+S_API int SteamAPI_ISteamGameServer_GetNextOutgoingPacket(intptr_t instancePtr, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort);
+S_API void SteamAPI_ISteamGameServer_EnableHeartbeats(intptr_t instancePtr, bool bActive);
+S_API void SteamAPI_ISteamGameServer_SetHeartbeatInterval(intptr_t instancePtr, int iHeartbeatInterval);
+S_API void SteamAPI_ISteamGameServer_ForceHeartbeat(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_AssociateWithClan(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(intptr_t instancePtr, class CSteamID steamIDNewPlayer);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API bool SteamAPI_ISteamGameServerStats_ClearUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_StoreUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+#endif // STEAMAPIFLAT_H
+
+
diff --git a/lsteamclient/steamworks_sdk_133b/steam_gameserver.h b/lsteamclient/steamworks_sdk_133b/steam_gameserver.h
new file mode 100644
index 00000000..a926b4bd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/steam_gameserver.h
@@ -0,0 +1,179 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+S_API ISteamInventory *SteamGameServerInventory();
+S_API ISteamUGC *SteamGameServerUGC();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+ ISteamInventory *SteamInventory() { return m_pSteamInventory; }
+ ISteamUGC *SteamUGC() { return m_SteamUGC; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamInventory *m_pSteamInventory;
+ ISteamUGC *m_SteamUGC;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamInventory = NULL;
+ m_SteamUGC = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamInventory = g_pSteamClientGameServer->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_SteamUGC = g_pSteamClientGameServer->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_SteamUGC )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_133b/steamclientpublic.h b/lsteamclient/steamworks_sdk_133b/steamclientpublic.h
new file mode 100644
index 00000000..28fe1826
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/steamclientpublic.h
@@ -0,0 +1,1135 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to login
+ k_EResultItemDeleted = 86, // The thing we're trying to access has been deleted
+ k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to throttle response to possible attacker
+ k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch
+ k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for two-factor didn't match
+ k_EResultAccountAssociatedToMultiplePartners = 90, // account has been associated with multiple partners
+ k_EResultNotModified = 91, // data not modified
+ k_EResultNoMobileDevice = 92, // the account does not have a mobile device associated with it
+ k_EResultTimeNotSynced = 93, // the time presented is out of range or tolerance
+ k_EResultSmsCodeFailed = 94, // SMS code failure (no match, none pending, etc.)
+ k_EResultAccountLimitExceeded = 95, // Too many accounts access this resource
+ k_EResultAccountActivityLimitExceeded = 96, // Too many changes to this account
+ k_EResultPhoneActivityLimitExceeded = 97, // Too many changes to this phone
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+ k_EVoiceResultReceiverOutOfDate = 8,
+ k_EVoiceResultReceiverDidNotAnswer = 9,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+enum EDenyReason
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+};
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+enum EBeginAuthSessionResult
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+};
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+enum EAuthSessionResponse
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+ k_EAuthSessionResponsePublisherIssuedBan = 9, // The user is banned for this game. The ban came via the web api and not VAC
+};
+
+// results from UserHasLicenseForApp
+enum EUserHasLicenseForAppResult
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+};
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x0000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x0001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x0002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x0004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x0008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x0010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x0020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x0040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_RetailLicense = 0x0080, // has a retail license for game, (CD-Key etc)
+ k_EAppOwnershipFlags_LicenseLocked = 0x0100, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x0200, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x0400, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x0800, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x1000, // Recurring license, user is charged periodically
+ k_EAppOwnershipFlags_LicenseCanceled = 0x2000, // Mark as canceled, but might be still active if recurring
+ k_EAppOwnershipFlags_AutoGrant = 0x4000, // Ownership is based on any kind of autogrant license
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media_DEPRECATED = 0x010, // legacy - was used for game trailers, which are now just videos on the web
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+ k_EAppType_Hardware = 0x200, // a hardware device (Steam Machine, Steam Controller, Steam Link, etc.)
+ // 0x400 is up for grabs here
+ k_EAppType_Video = 0x800, // A video component of either a Film or TVSeries (may be the feature, an episode, preview, making-of, etc)
+ k_EAppType_Plugin = 0x1000, // Plug-in types for other Apps
+ k_EAppType_Music = 0x2000, // Music files
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+ k_EChatEntryTypeReserved1 = 12,
+ k_EChatEntryTypeReserved2 = 13,
+ k_EChatEntryTypeLinkBlocked = 14, // a link was removed by the chat filter.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Broadcast upload result details
+//-----------------------------------------------------------------------------
+enum EBroadcastUploadResult
+{
+ k_EBroadcastUploadResultNone = 0, // broadcast state unknown
+ k_EBroadcastUploadResultOK = 1, // broadcast was good, no problems
+ k_EBroadcastUploadResultInitFailed = 2, // broadcast init failed
+ k_EBroadcastUploadResultFrameFailed = 3, // broadcast frame upload failed
+ k_EBroadcastUploadResultTimeout = 4, // broadcast upload timed out
+ k_EBroadcastUploadResultBandwidthExceeded = 5, // broadcast send too much data
+ k_EBroadcastUploadResultLowFPS = 6, // broadcast FPS too low
+ k_EBroadcastUploadResultMissingKeyFrames = 7, // broadcast sending not enough key frames
+ k_EBroadcastUploadResultNoConnection = 8, // broadcast client failed to connect to relay
+ k_EBroadcastUploadResultRelayFailed = 9, // relay dropped the upload
+ k_EBroadcastUploadResultSettingsChanged = 10, // the client changed broadcast settings
+ k_EBroadcastUploadResultMissingAudio = 11, // client failed to send audio data
+ k_EBroadcastUploadResultTooFarBehind = 12, // clients was too slow uploading
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM2_USERID_STRUCTS )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ V_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, V_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, V_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, V_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, V_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_133b/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_133b/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_133b/steamhttpenums.h b/lsteamclient/steamworks_sdk_133b/steamhttpenums.h
new file mode 100644
index 00000000..2ec0982b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/steamhttpenums.h
@@ -0,0 +1,97 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401, // You probably want 403 or something else. 401 implies you're sending a WWW-Authenticate header and the client can sent an Authorization header in response.
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+ k_EHTTPStatusCode4xxUnknown = 418, // 418 is reserved, so we'll use it to mean unknown
+ k_EHTTPStatusCode429TooManyRequests = 429,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+ k_EHTTPStatusCode5xxUnknown = 599,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_133b/steamps3params.h b/lsteamclient/steamworks_sdk_133b/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_133b/steamtypes.h b/lsteamclient/steamworks_sdk_133b/steamtypes.h
new file mode 100644
index 00000000..2be3926c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/steamtypes.h
@@ -0,0 +1,179 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+#ifdef __clang__
+# define CLANG_ATTR(ATTR) __attribute__((annotate( ATTR )))
+#else
+# define CLANG_ATTR(ATTR)
+#endif
+
+#define METHOD_DESC(DESC) CLANG_ATTR( "desc:" #DESC ";" )
+#define IGNOREATTR() CLANG_ATTR( "ignore" )
+#define OUT_STRUCT() CLANG_ATTR( "out_struct: ;" )
+#define OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" )
+#define OUT_ARRAY_COUNT(COUNTER, DESC) CLANG_ATTR( "out_array_count:" #COUNTER ";desc:" #DESC )
+#define ARRAY_COUNT(COUNTER) CLANG_ATTR( "array_count:" #COUNTER ";" )
+#define ARRAY_COUNT_D(COUNTER, DESC) CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC )
+#define BUFFER_COUNT(COUNTER) CLANG_ATTR( "buffer_count:" #COUNTER ";" )
+#define OUT_BUFFER_COUNT(COUNTER) CLANG_ATTR( "out_buffer_count:" #COUNTER ";" )
+#define OUT_STRING_COUNT(COUNTER) CLANG_ATTR( "out_string_count:" #COUNTER ";" )
+#define DESC(DESC) CLANG_ATTR("desc:" #DESC ";")
+
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef uint64 JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+const JobID_t k_JobIDNil = 0xffffffffffffffffull;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+typedef uint32 BundleId_t;
+const BundleId_t k_uBundleIdInvalid = 0;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+// ID for a depot content manifest
+typedef uint64 ManifestId_t;
+const ManifestId_t k_uManifestIdInvalid = 0;
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_133b/steamuniverse.h b/lsteamclient/steamworks_sdk_133b/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_133b/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_134/isteamapplist.h b/lsteamclient/steamworks_sdk_134/isteamapplist.h
new file mode 100644
index 00000000..fc1d49ee
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_134/isteamapps.h b/lsteamclient/steamworks_sdk_134/isteamapps.h
new file mode 100644
index 00000000..f73fed4d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamapps.h
@@ -0,0 +1,154 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+ // get download progress for optional DLC
+ virtual bool GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // return the buildid of this app, may change at any time based on backend updates to the game
+ virtual int GetAppBuildId() = 0;
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION007"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_134/isteamappticket.h b/lsteamclient/steamworks_sdk_134/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_134/isteamclient.h b/lsteamclient/steamworks_sdk_134/isteamclient.h
new file mode 100644
index 00000000..9977f3a5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamclient.h
@@ -0,0 +1,503 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct ValvePackingSentinel_t
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+extern "C" typedef void( *SteamAPI_PostAPIResultInProcess_t )(SteamAPICall_t callHandle, void *, uint32 unCallbackSize, int iCallbackNum);
+extern "C" typedef uint32 ( *SteamAPI_CheckCallbackRegistered_t )( int iCallbackNum );
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamMusicRemote;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+class ISteamHTMLSurface;
+class ISteamInventory;
+class ISteamVideo;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player Remote
+ virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // html page display
+ virtual ISteamHTMLSurface *GetISteamHTMLSurface(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // Helper functions for internal Steam usage
+ virtual void Set_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) = 0;
+ virtual void Remove_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) = 0;
+ virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0;
+
+ // inventory
+ virtual ISteamInventory *GetISteamInventory( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Video
+ virtual ISteamVideo *GetISteamVideo( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient017"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iClientDepotBuilderCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+enum { k_iSteamMusicRemoteCallbacks = 4100 };
+enum { k_iClientVRCallbacks = 4200 };
+enum { k_iClientReservedCallbacks = 4300 };
+enum { k_iSteamReservedCallbacks = 4400 };
+enum { k_iSteamHTMLSurfaceCallbacks = 4500 };
+enum { k_iClientVideoCallbacks = 4600 };
+enum { k_iClientInventoryCallbacks = 4700 };
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+struct SteamCallback_t
+{
+public:
+ SteamCallback_t() {}
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname : SteamCallback_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_10() \
+ END_CALLBACK_INTERNAL_BEGIN( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_11() \
+ END_CALLBACK_INTERNAL_BEGIN( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_12() \
+ END_CALLBACK_INTERNAL_BEGIN( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_13() \
+ END_CALLBACK_INTERNAL_BEGIN( 13 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_14() \
+ END_CALLBACK_INTERNAL_BEGIN( 14 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 13 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_134/isteamcontroller.h b/lsteamclient/steamworks_sdk_134/isteamcontroller.h
new file mode 100644
index 00000000..6a3100e3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamcontroller.h
@@ -0,0 +1,138 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+#define MAX_STEAM_CONTROLLERS 16
+
+#pragma pack( pop )
+
+#define STEAM_RIGHT_TRIGGER_MASK 0x0000001
+#define STEAM_LEFT_TRIGGER_MASK 0x0000002
+#define STEAM_RIGHT_BUMPER_MASK 0x0000004
+#define STEAM_LEFT_BUMPER_MASK 0x0000008
+#define STEAM_BUTTON_0_MASK 0x0000010
+#define STEAM_BUTTON_1_MASK 0x0000020
+#define STEAM_BUTTON_2_MASK 0x0000040
+#define STEAM_BUTTON_3_MASK 0x0000080
+#define STEAM_TOUCH_0_MASK 0x0000100
+#define STEAM_TOUCH_1_MASK 0x0000200
+#define STEAM_TOUCH_2_MASK 0x0000400
+#define STEAM_TOUCH_3_MASK 0x0000800
+#define STEAM_BUTTON_MENU_MASK 0x0001000
+#define STEAM_BUTTON_STEAM_MASK 0x0002000
+#define STEAM_BUTTON_ESCAPE_MASK 0x0004000
+#define STEAM_BUTTON_BACK_LEFT_MASK 0x0008000
+#define STEAM_BUTTON_BACK_RIGHT_MASK 0x0010000
+#define STEAM_BUTTON_LEFTPAD_CLICKED_MASK 0x0020000
+#define STEAM_BUTTON_RIGHTPAD_CLICKED_MASK 0x0040000
+#define STEAM_LEFTPAD_FINGERDOWN_MASK 0x0080000
+#define STEAM_RIGHTPAD_FINGERDOWN_MASK 0x0100000
+#define STEAM_JOYSTICK_BUTTON_MASK 0x0400000
+
+
+#pragma pack( push, 1 )
+
+struct SteamControllerState001_t
+{
+ // If packet num matches that on your prior call, then the controller state hasn't been changed since
+ // your last call and there is no need to process it
+ uint32 unPacketNum;
+
+ // bit flags for each of the buttons
+ uint64 ulButtons;
+
+ // Left pad coordinates
+ short sLeftPadX;
+ short sLeftPadY;
+
+ // Right pad coordinates
+ short sRightPadX;
+ short sRightPadY;
+
+};
+
+#pragma pack( pop )
+
+#define SteamControllerState_t SteamControllerState001_t
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ //
+ // Native controller support API
+ //
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init( const char *pchAbsolutePathToControllerConfigVDF ) = 0;
+ virtual bool Shutdown() = 0;
+
+ // Pump callback/callresult events, SteamAPI_RunCallbacks will do this for you,
+ // normally never need to call directly.
+ virtual void RunFrame() = 0;
+
+ // Get the state of the specified controller, returns false if that controller is not connected
+ virtual bool GetControllerState( uint32 unControllerIndex, SteamControllerState_t *pState ) = 0;
+
+ // Trigger a haptic pulse on the controller
+ virtual void TriggerHapticPulse( uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ // Set the override mode which is used to choose to use different base/legacy bindings from your config file
+ virtual void SetOverrideMode( const char *pchMode ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "STEAMCONTROLLER_INTERFACE_VERSION"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+/*
+struct ControllerCallback_t
+{
+ enum { k_iCallback = k_iSteamControllerCallbacks + 1 };
+
+};
+*/
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_134/isteamfriends.h b/lsteamclient/steamworks_sdk_134/isteamfriends.h
new file mode 100644
index 00000000..a63d8ea7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamfriends.h
@@ -0,0 +1,629 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1, // this doesn't get stored; the user has just done an Ignore on an friendship invite
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5, // this is stored; the user has explicit blocked this other user from comments/chat/etc
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+// friends group identifier type
+typedef int16 FriendsGroupID_t;
+
+// invalid friends group identifier constant
+const FriendsGroupID_t k_FriendsGroupID_Invalid = -1;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, OUT_STRUCT() FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+ // friends steam level
+ virtual int GetFriendSteamLevel( CSteamID steamIDFriend ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // friend grouping (tag) apis
+ // returns the number of friends groups
+ virtual int GetFriendsGroupCount() = 0;
+ // returns the friends group ID for the given index (invalid indices return k_FriendsGroupID_Invalid)
+ virtual FriendsGroupID_t GetFriendsGroupIDByIndex( int iFG ) = 0;
+ // returns the name for the given friends group (NULL in the case of invalid friends group IDs)
+ virtual const char *GetFriendsGroupName( FriendsGroupID_t friendsGroupID ) = 0;
+ // returns the number of members in a given friends group
+ virtual int GetFriendsGroupMembersCount( FriendsGroupID_t friendsGroupID ) = 0;
+ // gets up to nMembersCount members of the given friends group, if fewer exist than requested those positions' SteamIDs will be invalid
+ virtual void GetFriendsGroupMembersList( FriendsGroupID_t friendsGroupID, OUT_ARRAY_CALL(nMembersCount, GetFriendsGroupMembersCount, friendsGroupID ) CSteamID *pOutSteamIDMembers, int nMembersCount ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( ARRAY_COUNT(cClansToRequest) CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, OUT_STRUCT() CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends015"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_134/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_134/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_134/isteamgameserver.h b/lsteamclient/steamworks_sdk_134/isteamgameserver.h
new file mode 100644
index 00000000..c97ad6f5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamgameserver.h
@@ -0,0 +1,384 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_134/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_134/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_134/isteamhtmlsurface.h b/lsteamclient/steamworks_sdk_134/isteamhtmlsurface.h
new file mode 100644
index 00000000..f72fd6c0
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamhtmlsurface.h
@@ -0,0 +1,444 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to display html pages in a texture
+//
+//=============================================================================
+
+#ifndef ISTEAMHTMLSURFACE_H
+#define ISTEAMHTMLSURFACE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+typedef uint32 HHTMLBrowser;
+const uint32 INVALID_HTMLBROWSER = 0;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for displaying HTML pages and interacting with them
+//-----------------------------------------------------------------------------
+class ISteamHTMLSurface
+{
+public:
+ virtual ~ISteamHTMLSurface() {}
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Create a browser object for display of a html page, when creation is complete the call handle
+ // will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser.
+ // The user agent string is a substring to be added to the general user agent string so you can
+ // identify your client on web servers.
+ // The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if
+ // you do not require this functionality.
+ virtual SteamAPICall_t CreateBrowser( const char *pchUserAgent, const char *pchUserCSS ) = 0;
+
+ // Call this when you are done with a html surface, this lets us free the resources being used by it
+ virtual void RemoveBrowser( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // Navigate to this URL, results in a HTML_StartRequest_t as the request commences
+ virtual void LoadURL( HHTMLBrowser unBrowserHandle, const char *pchURL, const char *pchPostData ) = 0;
+
+ // Tells the surface the size in pixels to display the surface
+ virtual void SetSize( HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight ) = 0;
+
+ // Stop the load of the current html page
+ virtual void StopLoad( HHTMLBrowser unBrowserHandle ) = 0;
+ // Reload (most likely from local cache) the current page
+ virtual void Reload( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate back in the page history
+ virtual void GoBack( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate forward in the page history
+ virtual void GoForward( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // add this header to any url requests from this browser
+ virtual void AddHeader( HHTMLBrowser unBrowserHandle, const char *pchKey, const char *pchValue ) = 0;
+ // run this javascript script in the currently loaded page
+ virtual void ExecuteJavascript( HHTMLBrowser unBrowserHandle, const char *pchScript ) = 0;
+
+ enum EHTMLMouseButton
+ {
+ eHTMLMouseButton_Left = 0,
+ eHTMLMouseButton_Right = 1,
+ eHTMLMouseButton_Middle = 2,
+ };
+
+ // Mouse click and mouse movement commands
+ virtual void MouseUp( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDown( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDoubleClick( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ // x and y are relative to the HTML bounds
+ virtual void MouseMove( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+ // nDelta is pixels of scroll
+ virtual void MouseWheel( HHTMLBrowser unBrowserHandle, int32 nDelta ) = 0;
+
+ enum EMouseCursor
+ {
+ dc_user = 0,
+ dc_none,
+ dc_arrow,
+ dc_ibeam,
+ dc_hourglass,
+ dc_waitarrow,
+ dc_crosshair,
+ dc_up,
+ dc_sizenw,
+ dc_sizese,
+ dc_sizene,
+ dc_sizesw,
+ dc_sizew,
+ dc_sizee,
+ dc_sizen,
+ dc_sizes,
+ dc_sizewe,
+ dc_sizens,
+ dc_sizeall,
+ dc_no,
+ dc_hand,
+ dc_blank, // don't show any custom cursor, just use your default
+ dc_middle_pan,
+ dc_north_pan,
+ dc_north_east_pan,
+ dc_east_pan,
+ dc_south_east_pan,
+ dc_south_pan,
+ dc_south_west_pan,
+ dc_west_pan,
+ dc_north_west_pan,
+ dc_alias,
+ dc_cell,
+ dc_colresize,
+ dc_copycur,
+ dc_verticaltext,
+ dc_rowresize,
+ dc_zoomin,
+ dc_zoomout,
+ dc_help,
+ dc_custom,
+
+ dc_last, // custom cursors start from this value and up
+ };
+
+ enum EHTMLKeyModifiers
+ {
+ k_eHTMLKeyModifier_None = 0,
+ k_eHTMLKeyModifier_AltDown = 1 << 0,
+ k_eHTMLKeyModifier_CtrlDown = 1 << 1,
+ k_eHTMLKeyModifier_ShiftDown = 1 << 2,
+ };
+
+ // keyboard interactions, native keycode is the virtual key code value from your OS
+ virtual void KeyDown( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ virtual void KeyUp( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ // cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press)
+ virtual void KeyChar( HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+
+ // programmatically scroll this many pixels on the page
+ virtual void SetHorizontalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+ virtual void SetVerticalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+
+ // tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things
+ virtual void SetKeyFocus( HHTMLBrowser unBrowserHandle, bool bHasKeyFocus ) = 0;
+
+ // open the current pages html code in the local editor of choice, used for debugging
+ virtual void ViewSource( HHTMLBrowser unBrowserHandle ) = 0;
+ // copy the currently selected text on the html page to the local clipboard
+ virtual void CopyToClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+ // paste from the local clipboard to the current html page
+ virtual void PasteFromClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element
+ virtual void Find( HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse ) = 0;
+ // cancel a currently running find
+ virtual void StopFind( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // return details about the link at position x,y on the current page
+ virtual void GetLinkAtPosition( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+
+ // set a webcookie for the hostname in question
+ virtual void SetCookie( const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath = "/", RTime32 nExpires = 0, bool bSecure = false, bool bHTTPOnly = false ) = 0;
+
+ // Zoom the current page by flZoom ( from 0.0 to 2.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care)
+ virtual void SetPageScaleFactor( HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY ) = 0;
+
+ // Enable/disable low-resource background mode, where javascript and repaint timers are throttled, resources are
+ // more aggressively purged from memory, and audio/video elements are paused. When background mode is enabled,
+ // all HTML5 video and audio objects will execute ".pause()" and gain the property "._steam_background_paused = 1".
+ // When background mode is disabled, any video or audio objects with that property will resume with ".play()".
+ virtual void SetBackgroundMode( HHTMLBrowser unBrowserHandle, bool bBackgroundMode ) = 0;
+
+ // CALLBACKS
+ //
+ // These set of functions are used as responses to callback requests
+ //
+
+ // You MUST call this in response to a HTML_StartRequest_t callback
+ // Set bAllowed to true to allow this navigation, false to cancel it and stay
+ // on the current page. You can use this feature to limit the valid pages
+ // allowed in your HTML surface.
+ virtual void AllowStartRequest( HHTMLBrowser unBrowserHandle, bool bAllowed ) = 0;
+
+ // You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback
+ // Set bResult to true for the OK option of a confirm, use false otherwise
+ virtual void JSDialogResponse( HHTMLBrowser unBrowserHandle, bool bResult ) = 0;
+
+ // You MUST call this in response to a HTML_FileOpenDialog_t callback
+ virtual void FileLoadDialogResponse( HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles ) = 0;
+};
+
+#define STEAMHTMLSURFACE_INTERFACE_VERSION "STEAMHTMLSURFACE_INTERFACE_VERSION_003"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser is ready for use
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_BrowserReady_t, k_iSteamHTMLSurfaceCallbacks + 1 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this browser is now fully created and ready to navigate to pages
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser has a pending paint
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_NeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 2)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint
+CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called
+CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture
+CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture
+CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update
+CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update
+CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update
+CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update
+CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered
+CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages
+END_DEFINE_CALLBACK_12()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser wanted to navigate to a new page
+// NOTE - you MUST call AllowStartRequest in response to this callback
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_StartRequest_t, k_iSteamHTMLSurfaceCallbacks + 3)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface navigating
+CALLBACK_MEMBER(1, const char *, pchURL) // the url they wish to navigate to
+CALLBACK_MEMBER(2, const char *, pchTarget) // the html link target type (i.e _blank, _self, _parent, _top )
+CALLBACK_MEMBER(3, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER(4, bool, bIsRedirect) // true if this was a http/html redirect from the last load request
+END_DEFINE_CALLBACK_5()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser has been requested to close due to user interaction (usually from a javascript window.close() call)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_CloseBrowser_t, k_iSteamHTMLSurfaceCallbacks + 4)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser is navigating to a new url
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_URLChanged_t, k_iSteamHTMLSurfaceCallbacks + 5 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface navigating
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the url they wish to navigate to
+CALLBACK_MEMBER( 2, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER( 3, bool, bIsRedirect ) // true if this was a http/html redirect from the last load request
+CALLBACK_MEMBER( 4, const char *, pchPageTitle ) // the title of the page
+CALLBACK_MEMBER( 5, bool, bNewNavigation ) // true if this was from a fresh tab and not a click on an existing page
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A page is finished loading
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FinishedRequest_t, k_iSteamHTMLSurfaceCallbacks + 6 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+CALLBACK_MEMBER( 2, const char *, pchPageTitle ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a request to load this url in a new tab
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_OpenLinkInNewTab_t, k_iSteamHTMLSurfaceCallbacks + 7 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the page has a new title now
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ChangedTitle_t, k_iSteamHTMLSurfaceCallbacks + 8 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: results from a search
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SearchResults_t, k_iSteamHTMLSurfaceCallbacks + 9 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unResults ) //
+CALLBACK_MEMBER( 2, uint32, unCurrentMatch ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: page history status changed on the ability to go backwards and forward
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_CanGoBackAndForward_t, k_iSteamHTMLSurfaceCallbacks + 10 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, bool, bCanGoBack ) //
+CALLBACK_MEMBER( 2, bool, bCanGoForward ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the horizontal scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HorizontalScroll_t, k_iSteamHTMLSurfaceCallbacks + 11 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool , bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the vertical scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_VerticalScroll_t, k_iSteamHTMLSurfaceCallbacks + 12 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool, bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetLinkAtPosition call
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_LinkAtPosition_t, k_iSteamHTMLSurfaceCallbacks + 13 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, x ) // NOTE - Not currently set
+CALLBACK_MEMBER( 2, uint32, y ) // NOTE - Not currently set
+CALLBACK_MEMBER( 3, const char *, pchURL ) //
+CALLBACK_MEMBER( 4, bool, bInput ) //
+CALLBACK_MEMBER( 5, bool, bLiveLink ) //
+END_DEFINE_CALLBACK_6()
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript alert dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSAlert_t, k_iSteamHTMLSurfaceCallbacks + 14 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript confirmation dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSConfirm_t, k_iSteamHTMLSurfaceCallbacks + 15 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: when received show a file open dialog
+// then call FileLoadDialogResponse with the file(s) the user selected.
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FileOpenDialog_t, k_iSteamHTMLSurfaceCallbacks + 16 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+CALLBACK_MEMBER( 2, const char *, pchInitialFile ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new html window has been created
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_NewWindow_t, k_iSteamHTMLSurfaceCallbacks + 21 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the current surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the page to load
+CALLBACK_MEMBER( 2, uint32, unX ) // the x pos into the page to display the popup
+CALLBACK_MEMBER( 3, uint32, unY ) // the y pos into the page to display the popup
+CALLBACK_MEMBER( 4, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 5, uint32, unTall ) // the total height of the pBGRA texture
+CALLBACK_MEMBER( 6, HHTMLBrowser, unNewWindow_BrowserHandle ) // the handle of the new window surface
+END_DEFINE_CALLBACK_7()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: change the cursor to display
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SetCursor_t, k_iSteamHTMLSurfaceCallbacks + 22 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, eMouseCursor ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: informational message from the browser
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_StatusText_t, k_iSteamHTMLSurfaceCallbacks + 23 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ShowToolTip_t, k_iSteamHTMLSurfaceCallbacks + 24 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: update the text of an existing tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_UpdateToolTip_t, k_iSteamHTMLSurfaceCallbacks + 25 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: hide the tooltip you are showing
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HideToolTip_t, k_iSteamHTMLSurfaceCallbacks + 26 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMHTMLSURFACE_H
diff --git a/lsteamclient/steamworks_sdk_134/isteamhttp.h b/lsteamclient/steamworks_sdk_134/isteamhttp.h
new file mode 100644
index 00000000..d96a631f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamhttp.h
@@ -0,0 +1,210 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+typedef uint32 HTTPCookieContainerHandle;
+#define INVALID_HTTPCOOKIE_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Both http and https are supported,
+ // so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+
+ // Creates a cookie container handle which you must later free with ReleaseCookieContainer(). If bAllowResponsesToModify=true
+ // than any response to your requests using this cookie container may add new cookies which may be transmitted with
+ // future requests. If bAllowResponsesToModify=false than only cookies you explicitly set will be sent. This API is just for
+ // during process lifetime, after steam restarts no cookies are persisted and you have no way to access the cookie container across
+ // repeat executions of your process.
+ virtual HTTPCookieContainerHandle CreateCookieContainer( bool bAllowResponsesToModify ) = 0;
+
+ // Release a cookie container you are finished using, freeing it's memory
+ virtual bool ReleaseCookieContainer( HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Adds a cookie to the specified cookie container that will be used with future requests.
+ virtual bool SetCookie( HTTPCookieContainerHandle hCookieContainer, const char *pchHost, const char *pchUrl, const char *pchCookie ) = 0;
+
+ // Set the cookie container to use for a HTTP request
+ virtual bool SetHTTPRequestCookieContainer( HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Set the extra user agent info for a request, this doesn't clobber the normal user agent, it just adds the extra info on the end
+ virtual bool SetHTTPRequestUserAgentInfo( HTTPRequestHandle hRequest, const char *pchUserAgentInfo ) = 0;
+
+ // Set that https request should require verified SSL certificate via machines certificate trust store
+ virtual bool SetHTTPRequestRequiresVerifiedCertificate( HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate ) = 0;
+
+ // Set an absolute timeout on the HTTP request, this is just a total time timeout different than the network activity timeout
+ // which can bump everytime we get more data
+ virtual bool SetHTTPRequestAbsoluteTimeoutMS( HTTPRequestHandle hRequest, uint32 unMilliseconds ) = 0;
+
+ // Check if the reason the request failed was because we timed it out (rather than some harder failure)
+ virtual bool GetHTTPRequestWasTimedOut( HTTPRequestHandle hRequest, bool *pbWasTimedOut ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+
+ uint32 m_unBodySize; // Same as GetHTTPResponseBodySize()
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_134/isteaminventory.h b/lsteamclient/steamworks_sdk_134/isteaminventory.h
new file mode 100644
index 00000000..b4cc4c38
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteaminventory.h
@@ -0,0 +1,354 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Inventory
+//
+//=============================================================================
+
+#ifndef ISTEAMINVENTORY_H
+#define ISTEAMINVENTORY_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// Every individual instance of an item has a globally-unique ItemInstanceID.
+// This ID is unique to the combination of (player, specific item instance)
+// and will not be transferred to another player or re-used for another item.
+typedef uint64 SteamItemInstanceID_t;
+
+static const SteamItemInstanceID_t k_SteamItemInstanceIDInvalid = ~(SteamItemInstanceID_t)0;
+
+// Types of items in your game are identified by a 32-bit "item definition number".
+// Valid definition numbers are between 1 and 999999999; numbers less than or equal to
+// zero are invalid, and numbers greater than or equal to one billion (1x10^9) are
+// reserved for internal Steam use.
+typedef int32 SteamItemDef_t;
+
+
+enum ESteamItemFlags
+{
+ // Item status flags - these flags are permanently attached to specific item instances
+ k_ESteamItemNoTrade = 1 << 0, // This item is account-locked and cannot be traded or given away.
+
+ // Action confirmation flags - these flags are set one time only, as part of a result set
+ k_ESteamItemRemoved = 1 << 8, // The item has been destroyed, traded away, expired, or otherwise invalidated
+ k_ESteamItemConsumed = 1 << 9, // The item quantity has been decreased by 1 via ConsumeItem API.
+
+ // All other flag bits are currently reserved for internal Steam use at this time.
+ // Do not assume anything about the state of other flags which are not defined here.
+};
+
+struct SteamItemDetails_t
+{
+ SteamItemInstanceID_t m_itemId;
+ SteamItemDef_t m_iDefinition;
+ uint16 m_unQuantity;
+ uint16 m_unFlags; // see ESteamItemFlags
+};
+
+typedef int32 SteamInventoryResult_t;
+
+static const SteamInventoryResult_t k_SteamInventoryResultInvalid = -1;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Inventory query and manipulation API
+//-----------------------------------------------------------------------------
+class ISteamInventory
+{
+public:
+
+ // INVENTORY ASYNC RESULT MANAGEMENT
+ //
+ // Asynchronous inventory queries always output a result handle which can be used with
+ // GetResultStatus, GetResultItems, etc. A SteamInventoryResultReady_t callback will
+ // be triggered when the asynchronous result becomes ready (or fails).
+ //
+
+ // Find out the status of an asynchronous inventory result handle. Possible values:
+ // k_EResultPending - still in progress
+ // k_EResultOK - done, result ready
+ // k_EResultExpired - done, result ready, maybe out of date (see DeserializeResult)
+ // k_EResultInvalidParam - ERROR: invalid API call parameters
+ // k_EResultServiceUnavailable - ERROR: service temporarily down, you may retry later
+ // k_EResultLimitExceeded - ERROR: operation would exceed per-user inventory limits
+ // k_EResultFail - ERROR: unknown / generic error
+ METHOD_DESC(Find out the status of an asynchronous inventory result handle.)
+ virtual EResult GetResultStatus( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Copies the contents of a result set into a flat array. The specific
+ // contents of the result set depend on which query which was used.
+ METHOD_DESC(Copies the contents of a result set into a flat array. The specific contents of the result set depend on which query which was used.)
+ virtual bool GetResultItems( SteamInventoryResult_t resultHandle,
+ OUT_ARRAY_COUNT( punOutItemsArraySize,Output array) SteamItemDetails_t *pOutItemsArray,
+ uint32 *punOutItemsArraySize ) = 0;
+
+ // Returns the server time at which the result was generated. Compare against
+ // the value of IClientUtils::GetServerRealTime() to determine age.
+ METHOD_DESC(Returns the server time at which the result was generated. Compare against the value of IClientUtils::GetServerRealTime() to determine age.)
+ virtual uint32 GetResultTimestamp( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Returns true if the result belongs to the target steam ID, false if the
+ // result does not. This is important when using DeserializeResult, to verify
+ // that a remote player is not pretending to have a different user's inventory.
+ METHOD_DESC(Returns true if the result belongs to the target steam ID or false if the result does not. This is important when using DeserializeResult to verify that a remote player is not pretending to have a different users inventory.)
+ virtual bool CheckResultSteamID( SteamInventoryResult_t resultHandle, CSteamID steamIDExpected ) = 0;
+
+ // Destroys a result handle and frees all associated memory.
+ METHOD_DESC(Destroys a result handle and frees all associated memory.)
+ virtual void DestroyResult( SteamInventoryResult_t resultHandle ) = 0;
+
+
+ // INVENTORY ASYNC QUERY
+ //
+
+ // Captures the entire state of the current user's Steam inventory.
+ // You must call DestroyResult on this handle when you are done with it.
+ // Returns false and sets *pResultHandle to zero if inventory is unavailable.
+ // Note: calls to this function are subject to rate limits and may return
+ // cached results if called too frequently. It is suggested that you call
+ // this function only when you are about to display the user's full inventory,
+ // or if you expect that the inventory may have changed.
+ METHOD_DESC(Captures the entire state of the current users Steam inventory.)
+ virtual bool GetAllItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+
+ // Captures the state of a subset of the current user's Steam inventory,
+ // identified by an array of item instance IDs. The results from this call
+ // can be serialized and passed to other players to "prove" that the current
+ // user owns specific items, without exposing the user's entire inventory.
+ // For example, you could call GetItemsByID with the IDs of the user's
+ // currently equipped cosmetic items and serialize this to a buffer, and
+ // then transmit this buffer to other players upon joining a game.
+ METHOD_DESC(Captures the state of a subset of the current users Steam inventory identified by an array of item instance IDs.)
+ virtual bool GetItemsByID( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT( unCountInstanceIDs ) const SteamItemInstanceID_t *pInstanceIDs, uint32 unCountInstanceIDs ) = 0;
+
+
+ // RESULT SERIALIZATION AND AUTHENTICATION
+ //
+ // Serialized result sets contain a short signature which can't be forged
+ // or replayed across different game sessions. A result set can be serialized
+ // on the local client, transmitted to other players via your game networking,
+ // and deserialized by the remote players. This is a secure way of preventing
+ // hackers from lying about posessing rare/high-value items.
+
+ // Serializes a result set with signature bytes to an output buffer. Pass
+ // NULL as an output buffer to get the required size via punOutBufferSize.
+ // The size of a serialized result depends on the number items which are being
+ // serialized. When securely transmitting items to other players, it is
+ // recommended to use "GetItemsByID" first to create a minimal result set.
+ // Results have a built-in timestamp which will be considered "expired" after
+ // an hour has elapsed. See DeserializeResult for expiration handling.
+ virtual bool SerializeResult( SteamInventoryResult_t resultHandle, OUT_BUFFER_COUNT(punOutBufferSize) void *pOutBuffer, uint32 *punOutBufferSize ) = 0;
+
+ // Deserializes a result set and verifies the signature bytes. Returns false
+ // if bRequireFullOnlineVerify is set but Steam is running in Offline mode.
+ // Otherwise returns true and then delivers error codes via GetResultStatus.
+ //
+ // The bRESERVED_MUST_BE_FALSE flag is reserved for future use and should not
+ // be set to true by your game at this time.
+ //
+ // DeserializeResult has a potential soft-failure mode where the handle status
+ // is set to k_EResultExpired. GetResultItems() still succeeds in this mode.
+ // The "expired" result could indicate that the data may be out of date - not
+ // just due to timed expiration (one hour), but also because one of the items
+ // in the result set may have been traded or consumed since the result set was
+ // generated. You could compare the timestamp from GetResultTimestamp() to
+ // ISteamUtils::GetServerRealTime() to determine how old the data is. You could
+ // simply ignore the "expired" result code and continue as normal, or you
+ // could challenge the player with expired data to send an updated result set.
+ virtual bool DeserializeResult( SteamInventoryResult_t *pOutResultHandle, BUFFER_COUNT(punOutBufferSize) const void *pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE = false ) = 0;
+
+
+ // INVENTORY ASYNC MODIFICATION
+ //
+
+ // GenerateItems() creates one or more items and then generates a SteamInventoryCallback_t
+ // notification with a matching nCallbackContext parameter. This API is insecure, and could
+ // be abused by hacked clients. It is, however, very useful as a development cheat or as
+ // a means of prototyping item-related features for your game. The use of GenerateItems can
+ // be restricted to certain item definitions or fully blocked via the Steamworks website.
+ // If punArrayQuantity is not NULL, it should be the same length as pArrayItems and should
+ // describe the quantity of each item to generate.
+ virtual bool GenerateItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, ARRAY_COUNT(unArrayLength) const uint32 *punArrayQuantity, uint32 unArrayLength ) = 0;
+
+ // GrantPromoItems() checks the list of promotional items for which the user may be eligible
+ // and grants the items (one time only). On success, the result set will include items which
+ // were granted, if any. If no items were granted because the user isn't eligible for any
+ // promotions, this is still considered a success.
+ METHOD_DESC(GrantPromoItems() checks the list of promotional items for which the user may be eligible and grants the items (one time only).)
+ virtual bool GrantPromoItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+ // AddPromoItem() / AddPromoItems() are restricted versions of GrantPromoItems(). Instead of
+ // scanning for all eligible promotional items, the check is restricted to a single item
+ // definition or set of item definitions. This can be useful if your game has custom UI for
+ // showing a specific promo item to the user.
+ virtual bool AddPromoItem( SteamInventoryResult_t *pResultHandle, SteamItemDef_t itemDef ) = 0;
+ virtual bool AddPromoItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, uint32 unArrayLength ) = 0;
+
+ // ConsumeItem() removes items from the inventory, permanently. They cannot be recovered.
+ // Not for the faint of heart - if your game implements item removal at all, a high-friction
+ // UI confirmation process is highly recommended. Similar to GenerateItems, punArrayQuantity
+ // can be NULL or else an array of the same length as pArrayItems which describe the quantity
+ // of each item to destroy. ConsumeItem can be restricted to certain item definitions or
+ // fully blocked via the Steamworks website to minimize support/abuse issues such as the
+ // clasic "my brother borrowed my laptop and deleted all of my rare items".
+ METHOD_DESC(ConsumeItem() removes items from the inventory permanently.)
+ virtual bool ConsumeItem( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity ) = 0;
+
+ // ExchangeItems() is an atomic combination of GenerateItems and DestroyItems. It can be
+ // used to implement crafting recipes or transmutations, or items which unpack themselves
+ // into other items. Like GenerateItems, this is a flexible and dangerous API which is
+ // meant for rapid prototyping. You can configure restrictions on ExchangeItems via the
+ // Steamworks website, such as limiting it to a whitelist of input/output combinations
+ // corresponding to recipes.
+ // (Note: although GenerateItems may be hard or impossible to use securely in your game,
+ // ExchangeItems is perfectly reasonable to use once the whitelists are set accordingly.)
+ virtual bool ExchangeItems( SteamInventoryResult_t *pResultHandle,
+ ARRAY_COUNT(unArrayGenerateLength) const SteamItemDef_t *pArrayGenerate, ARRAY_COUNT(unArrayGenerateLength) const uint32 *punArrayGenerateQuantity, uint32 unArrayGenerateLength,
+ ARRAY_COUNT(unArrayDestroyLength) const SteamItemInstanceID_t *pArrayDestroy, ARRAY_COUNT(unArrayDestroyLength) const uint32 *punArrayDestroyQuantity, uint32 unArrayDestroyLength ) = 0;
+
+
+ // TransferItemQuantity() is intended for use with items which are "stackable" (can have
+ // quantity greater than one). It can be used to split a stack into two, or to transfer
+ // quantity from one stack into another stack of identical items. To split one stack into
+ // two, pass k_SteamItemInstanceIDInvalid for itemIdDest and a new item will be generated.
+ virtual bool TransferItemQuantity( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest ) = 0;
+
+
+ // TIMED DROPS AND PLAYTIME CREDIT
+ //
+
+ // Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when
+ // active gameplay begins, and at least once every two minutes afterwards. The backend
+ // performs its own time calculations, so the precise timing of the heartbeat is not
+ // critical as long as you send at least one heartbeat every two minutes. Calling the
+ // function more often than that is not harmful, it will simply have no effect. Note:
+ // players may be able to spoof this message by hacking their client, so you should not
+ // attempt to use this as a mechanism to restrict playtime credits. It is simply meant
+ // to distinguish between being in any kind of gameplay situation vs the main menu or
+ // a pre-game launcher window. (If you are stingy with handing out playtime credit, it
+ // will only encourage players to run bots or use mouse/kb event simulators.)
+ //
+ // Playtime credit accumulation can be capped on a daily or weekly basis through your
+ // Steamworks configuration.
+ //
+ METHOD_DESC(Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when active gameplay begins and at least once every two minutes afterwards.)
+ virtual void SendItemDropHeartbeat() = 0;
+
+ // Playtime credit must be consumed and turned into item drops by your game. Only item
+ // definitions which are marked as "playtime item generators" can be spawned. The call
+ // will return an empty result set if there is not enough playtime credit for a drop.
+ // Your game should call TriggerItemDrop at an appropriate time for the user to receive
+ // new items, such as between rounds or while the player is dead. Note that players who
+ // hack their clients could modify the value of "dropListDefinition", so do not use it
+ // to directly control rarity. It is primarily useful during testing and development,
+ // where you may wish to perform experiments with different types of drops.
+ METHOD_DESC(Playtime credit must be consumed and turned into item drops by your game.)
+ virtual bool TriggerItemDrop( SteamInventoryResult_t *pResultHandle, SteamItemDef_t dropListDefinition ) = 0;
+
+
+ // IN-GAME TRADING
+ //
+ // TradeItems() implements limited in-game trading of items, if you prefer not to use
+ // the overlay or an in-game web browser to perform Steam Trading through the website.
+ // You should implement a UI where both players can see and agree to a trade, and then
+ // each client should call TradeItems simultaneously (+/- 5 seconds) with matching
+ // (but reversed) parameters. The result is the same as if both players performed a
+ // Steam Trading transaction through the web. Each player will get an inventory result
+ // confirming the removal or quantity changes of the items given away, and the new
+ // item instance id numbers and quantities of the received items.
+ // (Note: new item instance IDs are generated whenever an item changes ownership.)
+ virtual bool TradeItems( SteamInventoryResult_t *pResultHandle, CSteamID steamIDTradePartner,
+ ARRAY_COUNT(nArrayGiveLength) const SteamItemInstanceID_t *pArrayGive, ARRAY_COUNT(nArrayGiveLength) const uint32 *pArrayGiveQuantity, uint32 nArrayGiveLength,
+ ARRAY_COUNT(nArrayGetLength) const SteamItemInstanceID_t *pArrayGet, ARRAY_COUNT(nArrayGetLength) const uint32 *pArrayGetQuantity, uint32 nArrayGetLength ) = 0;
+
+
+ // ITEM DEFINITIONS
+ //
+ // Item definitions are a mapping of "definition IDs" (integers between 1 and 1000000)
+ // to a set of string properties. Some of these properties are required to display items
+ // on the Steam community web site. Other properties can be defined by applications.
+ // Use of these functions is optional; there is no reason to call LoadItemDefinitions
+ // if your game hardcodes the numeric definition IDs (eg, purple face mask = 20, blue
+ // weapon mod = 55) and does not allow for adding new item types without a client patch.
+ //
+
+ // LoadItemDefinitions triggers the automatic load and refresh of item definitions.
+ // Every time new item definitions are available (eg, from the dynamic addition of new
+ // item types while players are still in-game), a SteamInventoryDefinitionUpdate_t
+ // callback will be fired.
+ METHOD_DESC(LoadItemDefinitions triggers the automatic load and refresh of item definitions.)
+ virtual bool LoadItemDefinitions() = 0;
+
+ // GetItemDefinitionIDs returns the set of all defined item definition IDs (which are
+ // defined via Steamworks configuration, and not necessarily contiguous integers).
+ // If pItemDefIDs is null, the call will return true and *punItemDefIDsArraySize will
+ // contain the total size necessary for a subsequent call. Otherwise, the call will
+ // return false if and only if there is not enough space in the output array.
+ virtual bool GetItemDefinitionIDs(
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+
+ // GetItemDefinitionProperty returns a string property from a given item definition.
+ // Note that some properties (for example, "name") may be localized and will depend
+ // on the current Steam language settings (see ISteamApps::GetCurrentGameLanguage).
+ // Property names are always composed of ASCII letters, numbers, and/or underscores.
+ // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available
+ // property names.
+ virtual bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPropertyName,
+ OUT_STRING_COUNT(punValueBufferSize) char *pchValueBuffer, uint32 *punValueBufferSize ) = 0;
+};
+
+#define STEAMINVENTORY_INTERFACE_VERSION "STEAMINVENTORY_INTERFACE_V001"
+
+
+// SteamInventoryResultReady_t callbacks are fired whenever asynchronous
+// results transition from "Pending" to "OK" or an error state. There will
+// always be exactly one callback per handle.
+struct SteamInventoryResultReady_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 0 };
+ SteamInventoryResult_t m_handle;
+ EResult m_result;
+};
+
+
+// SteamInventoryFullUpdate_t callbacks are triggered when GetAllItems
+// successfully returns a result which is newer / fresher than the last
+// known result. (It will not trigger if the inventory hasn't changed,
+// or if results from two overlapping calls are reversed in flight and
+// the earlier result is already known to be stale/out-of-date.)
+// The normal ResultReady callback will still be triggered immediately
+// afterwards; this is an additional notification for your convenience.
+struct SteamInventoryFullUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 1 };
+ SteamInventoryResult_t m_handle;
+};
+
+
+// A SteamInventoryDefinitionUpdate_t callback is triggered whenever
+// item definitions have been updated, which could be in response to
+// LoadItemDefinitions() or any other async request which required
+// a definition update in order to process results from the server.
+struct SteamInventoryDefinitionUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_134/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_134/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_134/isteammatchmaking.h b/lsteamclient/steamworks_sdk_134/isteammatchmaking.h
new file mode 100644
index 00000000..80606dfd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteammatchmaking.h
@@ -0,0 +1,747 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) = 0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, OUT_STRUCT() CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, OUT_STRUCT() CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_134/isteammusic.h b/lsteamclient/steamworks_sdk_134/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_134/isteammusicremote.h b/lsteamclient/steamworks_sdk_134/isteammusicremote.h
new file mode 100644
index 00000000..5893ef4b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteammusicremote.h
@@ -0,0 +1,129 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSICREMOTE_H
+#define ISTEAMMUSICREMOTE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteammusic.h"
+
+#define k_SteamMusicNameMaxLength 255
+#define k_SteamMusicPNGMaxLength 65535
+
+
+class ISteamMusicRemote
+{
+public:
+ // Service Definition
+ virtual bool RegisterSteamMusicRemote( const char *pchName ) = 0;
+ virtual bool DeregisterSteamMusicRemote() = 0;
+ virtual bool BIsCurrentMusicRemote() = 0;
+ virtual bool BActivationSuccess( bool bValue ) = 0;
+
+ virtual bool SetDisplayName( const char *pchDisplayName ) = 0;
+ virtual bool SetPNGIcon_64x64( void *pvBuffer, uint32 cbBufferLength ) = 0;
+
+ // Abilities for the user interface
+ virtual bool EnablePlayPrevious(bool bValue) = 0;
+ virtual bool EnablePlayNext( bool bValue ) = 0;
+ virtual bool EnableShuffled( bool bValue ) = 0;
+ virtual bool EnableLooped( bool bValue ) = 0;
+ virtual bool EnableQueue( bool bValue ) = 0;
+ virtual bool EnablePlaylists( bool bValue ) = 0;
+
+ // Status
+ virtual bool UpdatePlaybackStatus( AudioPlayback_Status nStatus ) = 0;
+ virtual bool UpdateShuffled( bool bValue ) = 0;
+ virtual bool UpdateLooped( bool bValue ) = 0;
+ virtual bool UpdateVolume( float flValue ) = 0; // volume is between 0.0 and 1.0
+
+ // Current Entry
+ virtual bool CurrentEntryWillChange() = 0;
+ virtual bool CurrentEntryIsAvailable( bool bAvailable ) = 0;
+ virtual bool UpdateCurrentEntryText( const char *pchText ) = 0;
+ virtual bool UpdateCurrentEntryElapsedSeconds( int nValue ) = 0;
+ virtual bool UpdateCurrentEntryCoverArt( void *pvBuffer, uint32 cbBufferLength ) = 0;
+ virtual bool CurrentEntryDidChange() = 0;
+
+ // Queue
+ virtual bool QueueWillChange() = 0;
+ virtual bool ResetQueueEntries() = 0;
+ virtual bool SetQueueEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentQueueEntry( int nID ) = 0;
+ virtual bool QueueDidChange() = 0;
+
+ // Playlist
+ virtual bool PlaylistWillChange() = 0;
+ virtual bool ResetPlaylistEntries() = 0;
+ virtual bool SetPlaylistEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentPlaylistEntry( int nID ) = 0;
+ virtual bool PlaylistDidChange() = 0;
+};
+
+#define STEAMMUSICREMOTE_INTERFACE_VERSION "STEAMMUSICREMOTE_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillActivate_t, k_iSteamMusicRemoteCallbacks + 1)
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillDeactivate_t, k_iSteamMusicRemoteCallbacks + 2 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteToFront_t, k_iSteamMusicRemoteCallbacks + 3 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWillQuit_t, k_iSteamMusicRemoteCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlay_t, k_iSteamMusicRemoteCallbacks + 5 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPause_t, k_iSteamMusicRemoteCallbacks + 6 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayPrevious_t, k_iSteamMusicRemoteCallbacks + 7 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayNext_t, k_iSteamMusicRemoteCallbacks + 8 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsShuffled_t, k_iSteamMusicRemoteCallbacks + 9 )
+ CALLBACK_MEMBER( 0, bool, m_bShuffled )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsLooped_t, k_iSteamMusicRemoteCallbacks + 10 )
+ CALLBACK_MEMBER(0, bool, m_bLooped )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsVolume_t, k_iSteamMusicCallbacks + 11 )
+ CALLBACK_MEMBER(0, float, m_flNewVolume)
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsQueueEntry_t, k_iSteamMusicCallbacks + 12 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsPlaylistEntry_t, k_iSteamMusicCallbacks + 13 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayingRepeatStatus_t, k_iSteamMusicRemoteCallbacks + 14 )
+ CALLBACK_MEMBER(0, int, m_nPlayingRepeatStatus )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+
+#endif // #define ISTEAMMUSICREMOTE_H
diff --git a/lsteamclient/steamworks_sdk_134/isteamnetworking.h b/lsteamclient/steamworks_sdk_134/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_134/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_134/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_134/isteamremotestorage.h b/lsteamclient/steamworks_sdk_134/isteamremotestorage.h
new file mode 100644
index 00000000..a67a5357
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamremotestorage.h
@@ -0,0 +1,650 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0, // normal Workshop item that can be subscribed to
+ k_EWorkshopFileTypeMicrotransaction = 1, // Workshop item that is meant to be voted on for the purpose of selling in-game
+ k_EWorkshopFileTypeCollection = 2, // a collection of Workshop or Greenlight items
+ k_EWorkshopFileTypeArt = 3, // artwork
+ k_EWorkshopFileTypeVideo = 4, // external video
+ k_EWorkshopFileTypeScreenshot = 5, // screenshot
+ k_EWorkshopFileTypeGame = 6, // Greenlight game entry
+ k_EWorkshopFileTypeSoftware = 7, // Greenlight software entry
+ k_EWorkshopFileTypeConcept = 8, // Greenlight concept
+ k_EWorkshopFileTypeWebGuide = 9, // Steam web guide
+ k_EWorkshopFileTypeIntegratedGuide = 10, // application integrated guide
+ k_EWorkshopFileTypeMerch = 11, // Workshop merchandise meant to be voted on for the purpose of being sold
+ k_EWorkshopFileTypeControllerBinding = 12, // Steam Controller bindings
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13, // internal
+ k_EWorkshopFileTypeSteamVideo = 14, // Steam video
+ k_EWorkshopFileTypeGameManagedItem = 15, // managed completely by the game, not the user, and not shown on the web
+
+ // Update k_EWorkshopFileTypeMax if you add values.
+ k_EWorkshopFileTypeMax = 16
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+ k_EWorkshopVoteLater = 3,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, OUT_STRUCT() CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION012"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ UGCHandle_t m_hFile; // The new content
+};
+
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_134/isteamscreenshots.h b/lsteamclient/steamworks_sdk_134/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_134/isteamugc.h b/lsteamclient/steamworks_sdk_134/isteamugc.h
new file mode 100644
index 00000000..40196bed
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamugc.h
@@ -0,0 +1,377 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+ k_EUGCMatchingUGCType_GameManagedItems = 12, // game managed items (not managed by users)
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+ k_EUGCQuery_RankedByTotalUniqueSubscriptions = 12,
+};
+
+enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0, // The item update handle was invalid, job might be finished, listen too SubmitItemUpdateResult_t
+ k_EItemUpdateStatusPreparingConfig = 1, // The item update is processing configuration data
+ k_EItemUpdateStatusPreparingContent = 2, // The item update is reading and processing content files
+ k_EItemUpdateStatusUploadingContent = 3, // The item update is uploading content changes to Steam
+ k_EItemUpdateStatusUploadingPreviewFile = 4, // The item update is uploading new preview file image
+ k_EItemUpdateStatusCommittingChanges = 5 // The item update is committing all changes
+};
+
+enum EItemState
+{
+ k_EItemStateNone = 0, // item not tracked on client
+ k_EItemStateSubscribed = 1, // current user is subscribed to this item. Not just cached.
+ k_EItemStateLegacyItem = 2, // item was created with ISteamRemoteStorage
+ k_EItemStateInstalled = 4, // item is installed and usable (but maybe out of date)
+ k_EItemStateNeedsUpdate = 8, // items needs an update. Either because it's not installed yet or creator updated content
+ k_EItemStateDownloading = 16, // item update is currently downloading
+ k_EItemStateDownloadPending = 32, // DownloadItem() was called for this item, content isn't available until DownloadItemResult_t is fired
+};
+
+enum EItemStatistic
+{
+ k_EItemStatistic_NumSubscriptions = 0,
+ k_EItemStatistic_NumFavorites = 1,
+ k_EItemStatistic_NumFollowers = 2,
+ k_EItemStatistic_NumUniqueSubscriptions = 3,
+ k_EItemStatistic_NumUniqueFavorites = 4,
+ k_EItemStatistic_NumUniqueFollowers = 5,
+ k_EItemStatistic_NumUniqueWebsiteViews = 6,
+ k_EItemStatistic_ReportScore = 7,
+};
+
+const uint32 kNumUGCResultsPerPage = 50;
+const uint32 k_cchDeveloperMetadataMax = 5000;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+ // collection details
+ uint32 m_unNumChildren;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for the details of the given published file ids (the RequestUGCDetails call is deprecated and replaced with this)
+ virtual UGCQueryHandle_t CreateQueryUGCDetailsRequest( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+
+ // Send the query to Steam
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+ virtual bool GetQueryUGCPreviewURL( UGCQueryHandle_t handle, uint32 index, char *pchURL, uint32 cchURLSize ) = 0;
+ virtual bool GetQueryUGCMetadata( UGCQueryHandle_t handle, uint32 index, char *pchMetadata, uint32 cchMetadatasize ) = 0;
+ virtual bool GetQueryUGCChildren( UGCQueryHandle_t handle, uint32 index, PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0;
+ virtual bool GetQueryUGCStatistic( UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 *pStatValue ) = 0;
+ virtual uint32 GetQueryUGCNumAdditionalPreviews( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCAdditionalPreview( UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char *pchURLOrVideoID, uint32 cchURLSize, bool *pbIsImage ) = 0;
+ virtual uint32 GetQueryUGCNumKeyValueTags( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCKeyValueTag( UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char *pchKey, uint32 cchKeySize, char *pchValue, uint32 cchValueSize ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnKeyValueTags( UGCQueryHandle_t handle, bool bReturnKeyValueTags ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnMetadata( UGCQueryHandle_t handle, bool bReturnMetadata ) = 0;
+ virtual bool SetReturnChildren( UGCQueryHandle_t handle, bool bReturnChildren ) = 0;
+ virtual bool SetReturnAdditionalPreviews( UGCQueryHandle_t handle, bool bReturnAdditionalPreviews ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetLanguage( UGCQueryHandle_t handle, const char *pchLanguage ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+ virtual bool AddRequiredKeyValueTag( UGCQueryHandle_t handle, const char *pKey, const char *pValue ) = 0;
+
+ // DEPRECATED - Use CreateQueryUGCDetailsRequest call above instead!
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+ // Steam Workshop Creator API
+ virtual SteamAPICall_t CreateItem( AppId_t nConsumerAppId, EWorkshopFileType eFileType ) = 0; // create new item for this app with no content attached yet
+
+ virtual UGCUpdateHandle_t StartItemUpdate( AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID ) = 0; // start an UGC item update. Set changed properties before commiting update with CommitItemUpdate()
+
+ virtual bool SetItemTitle( UGCUpdateHandle_t handle, const char *pchTitle ) = 0; // change the title of an UGC item
+ virtual bool SetItemDescription( UGCUpdateHandle_t handle, const char *pchDescription ) = 0; // change the description of an UGC item
+ virtual bool SetItemUpdateLanguage( UGCUpdateHandle_t handle, const char *pchLanguage ) = 0; // specify the language of the title or description that will be set
+ virtual bool SetItemMetadata( UGCUpdateHandle_t handle, const char *pchMetaData ) = 0; // change the metadata of an UGC item (max = k_cchDeveloperMetadataMax)
+ virtual bool SetItemVisibility( UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item
+ virtual bool SetItemTags( UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item
+ virtual bool SetItemContent( UGCUpdateHandle_t handle, const char *pszContentFolder ) = 0; // update item content from this local folder
+ virtual bool SetItemPreview( UGCUpdateHandle_t handle, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file, which must be under 1MB in size
+ virtual bool RemoveItemKeyValueTags( UGCUpdateHandle_t handle, const char *pchKey ) = 0; // remove any existing key-value tags with the specified key
+ virtual bool AddItemKeyValueTag( UGCUpdateHandle_t handle, const char *pchKey, const char *pchValue ) = 0; // add new key-value tags for the item. Note that there can be multiple values for a tag.
+
+ virtual SteamAPICall_t SubmitItemUpdate( UGCUpdateHandle_t handle, const char *pchChangeNote ) = 0; // commit update process started with StartItemUpdate()
+ virtual EItemUpdateStatus GetItemUpdateProgress( UGCUpdateHandle_t handle, uint64 *punBytesProcessed, uint64* punBytesTotal ) = 0;
+
+ // Steam Workshop Consumer API
+ virtual SteamAPICall_t SetUserItemVote( PublishedFileId_t nPublishedFileID, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserItemVote( PublishedFileId_t nPublishedFileID ) = 0;
+ virtual SteamAPICall_t AddItemToFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ virtual SteamAPICall_t RemoveItemFromFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ virtual SteamAPICall_t SubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // subscribe to this item, will be installed ASAP
+ virtual SteamAPICall_t UnsubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // unsubscribe from this item, will be uninstalled after game quits
+ virtual uint32 GetNumSubscribedItems() = 0; // number of subscribed items
+ virtual uint32 GetSubscribedItems( PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; // all subscribed item PublishFileIDs
+
+ // get EItemState flags about item on this client
+ virtual uint32 GetItemState( PublishedFileId_t nPublishedFileID ) = 0;
+
+ // get info about currently installed content on disc for items that have k_EItemStateInstalled set
+ // if k_EItemStateLegacyItem is set, pchFolder contains the path to the legacy file itself (not a folder)
+ virtual bool GetItemInstallInfo( PublishedFileId_t nPublishedFileID, uint64 *punSizeOnDisk, char *pchFolder, uint32 cchFolderSize, uint32 *punTimeStamp ) = 0;
+
+ // get info about pending update for items that have k_EItemStateNeedsUpdate set. punBytesTotal will be valid after download started once
+ virtual bool GetItemDownloadInfo( PublishedFileId_t nPublishedFileID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // download new or update already installed item. If function returns true, wait for DownloadItemResult_t. If the item is already installed,
+ // then files on disk should not be used until callback received. If item is not subscribed to, it will be cached for some time.
+ // If bHighPriority is set, any other item download will be suspended and this item downloaded ASAP.
+ virtual bool DownloadItem( PublishedFileId_t nPublishedFileID, bool bHighPriority ) = 0;
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION007"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::CreateItem()
+//-----------------------------------------------------------------------------
+struct CreateItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 3 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId; // new item got this UGC PublishFileID
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::SubmitItemUpdate()
+//-----------------------------------------------------------------------------
+struct SubmitItemUpdateResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 4 };
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a Workshop item has been installed or updated
+//-----------------------------------------------------------------------------
+struct ItemInstalled_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 5 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of DownloadItem(), existing item files can be accessed again
+//-----------------------------------------------------------------------------
+struct DownloadItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 6 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: result of AddItemToFavorites() or RemoveItemFromFavorites()
+//-----------------------------------------------------------------------------
+struct UserFavoriteItemsListChanged_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 7 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bWasAddRequest;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SetUserItemVote()
+//-----------------------------------------------------------------------------
+struct SetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 8 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVoteUp;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserItemVote()
+//-----------------------------------------------------------------------------
+struct GetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 9 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVotedUp;
+ bool m_bVotedDown;
+ bool m_bVoteSkipped;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_134/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_134/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_134/isteamuser.h b/lsteamclient/steamworks_sdk_134/isteamuser.h
new file mode 100644
index 00000000..efdd6677
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamuser.h
@@ -0,0 +1,379 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+ // Requests a URL which authenticates an in-game browser for store check-out,
+ // and then redirects to the specified URL. As long as the in-game browser
+ // accepts and handles session cookies, Steam microtransaction checkout pages
+ // will automatically recognize the user instead of presenting a login page.
+ // The result of this API call will be a StoreAuthURLResponse_t callback.
+ // NOTE: The URL has a very short lifetime to prevent history-snooping attacks,
+ // so you should only call this API when you are about to launch the browser,
+ // or else immediately navigate to the result URL using a hidden browser window.
+ // NOTE 2: The resulting authorization cookie has an expiration time of one day,
+ // so it would be a good idea to request and visit a new auth URL every 12 hours.
+ virtual SteamAPICall_t RequestStoreAuthURL( const char *pchRedirectURL ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser018"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Signaled whenever licenses change
+//-----------------------------------------------------------------------------
+struct LicensesUpdated_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 25 };
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to ISteamUser::RequestStoreAuthURL
+//-----------------------------------------------------------------------------
+struct StoreAuthURLResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 65 };
+ char m_szURL[512];
+};
+
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_134/isteamuserstats.h b/lsteamclient/steamworks_sdk_134/isteamuserstats.h
new file mode 100644
index 00000000..8c0c210d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamuserstats.h
@@ -0,0 +1,465 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ METHOD_DESC(Downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers)
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard,
+ ARRAY_COUNT_D(cUsers, Array of users to retrieve) CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_134/isteamutils.h b/lsteamclient/steamworks_sdk_134/isteamutils.h
new file mode 100644
index 00000000..5c70ebe6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamutils.h
@@ -0,0 +1,310 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+
+ // Sets the inset of the overlay notification from the corner specified by SetOverlayNotificationPosition.
+ virtual void SetOverlayNotificationInset( int nHorizontalInset, int nVerticalInset ) = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils007"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_134/isteamvideo.h b/lsteamclient/steamworks_sdk_134/isteamvideo.h
new file mode 100644
index 00000000..4431b4a1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/isteamvideo.h
@@ -0,0 +1,60 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Video
+//
+//=============================================================================
+
+#ifndef ISTEAMVIDEO_H
+#define ISTEAMVIDEO_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Video API
+//-----------------------------------------------------------------------------
+class ISteamVideo
+{
+public:
+
+ // Get a URL suitable for streaming the given Video app ID's video
+ virtual void GetVideoURL( AppId_t unVideoAppID ) = 0;
+
+ // returns true if user is uploading a live broadcast
+ virtual bool IsBroadcasting( int *pnNumViewers ) = 0;
+};
+
+#define STEAMVIDEO_INTERFACE_VERSION "STEAMVIDEO_INTERFACE_V001"
+
+DEFINE_CALLBACK( BroadcastUploadStart_t, k_iClientVideoCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( BroadcastUploadStop_t, k_iClientVideoCallbacks + 5 )
+ CALLBACK_MEMBER( 0, EBroadcastUploadResult, m_eResult )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( GetVideoURLResult_t, k_iClientVideoCallbacks + 11 )
+ CALLBACK_MEMBER( 0, EResult, m_eResult )
+ CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID )
+ CALLBACK_MEMBER( 2, char, m_rgchURL[256] )
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMVIDEO_H
diff --git a/lsteamclient/steamworks_sdk_134/matchmakingtypes.h b/lsteamclient/steamworks_sdk_134/matchmakingtypes.h
new file mode 100644
index 00000000..fcb61664
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/matchmakingtypes.h
@@ -0,0 +1,251 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ servernetadr_t() : m_usConnectionPort( 0 ), m_usQueryPort( 0 ), m_unIP( 0 ) {}
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_134/steam_api.h b/lsteamclient/steamworks_sdk_134/steam_api.h
new file mode 100644
index 00000000..7c937109
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/steam_api.h
@@ -0,0 +1,604 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteammusicremote.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+#include "isteamhtmlsurface.h"
+#include "isteaminventory.h"
+#include "isteamvideo.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *S_CALLTYPE SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool S_CALLTYPE SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool S_CALLTYPE SteamAPI_Init();
+#endif
+
+S_API ISteamUser *S_CALLTYPE SteamUser();
+S_API ISteamFriends *S_CALLTYPE SteamFriends();
+S_API ISteamUtils *S_CALLTYPE SteamUtils();
+S_API ISteamMatchmaking *S_CALLTYPE SteamMatchmaking();
+S_API ISteamUserStats *S_CALLTYPE SteamUserStats();
+S_API ISteamApps *S_CALLTYPE SteamApps();
+S_API ISteamNetworking *S_CALLTYPE SteamNetworking();
+S_API ISteamMatchmakingServers *S_CALLTYPE SteamMatchmakingServers();
+S_API ISteamRemoteStorage *S_CALLTYPE SteamRemoteStorage();
+S_API ISteamScreenshots *S_CALLTYPE SteamScreenshots();
+S_API ISteamHTTP *S_CALLTYPE SteamHTTP();
+S_API ISteamUnifiedMessages *S_CALLTYPE SteamUnifiedMessages();
+S_API ISteamController *S_CALLTYPE SteamController();
+S_API ISteamUGC *S_CALLTYPE SteamUGC();
+S_API ISteamAppList *S_CALLTYPE SteamAppList();
+S_API ISteamMusic *S_CALLTYPE SteamMusic();
+S_API ISteamMusicRemote *S_CALLTYPE SteamMusicRemote();
+S_API ISteamHTMLSurface *S_CALLTYPE SteamHTMLSurface();
+S_API ISteamInventory *S_CALLTYPE SteamInventory();
+S_API ISteamVideo *S_CALLTYPE SteamVideo();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender *S_CALLTYPE SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback helper functions
+//
+// The following classes/macros are used to be able to easily multiplex callbacks
+// from the Steam API into various objects in the app in a thread-safe manner
+//
+// These functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
+// to as many functions/objects as are registered to it
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+
+// functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks,
+// used only by CCallback, shouldn't be used directly
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer >
+class CCallback : protected CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P* );
+
+ // If you can't support constructing a callback with the correct parameters
+ // then uncomment the empty constructor below and manually call
+ // ::Register() for your object
+ // Or, just call the regular constructor with (NULL, NULL)
+ // CCallback() {}
+
+ // constructor for initializing this object in owner's constructor
+ CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
+ {
+ if ( pObj && func )
+ Register( pObj, func );
+ }
+
+ ~CCallback()
+ {
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( m_nCallbackFlags & k_ECallbackFlagsRegistered )
+ Unregister();
+
+ if ( bGameServer )
+ {
+ m_nCallbackFlags |= k_ECallbackFlagsGameServer;
+ }
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ virtual void Run( void *pvParam, bool, SteamAPICall_t )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+ int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+// Allows you to defer registration of the callback
+template< class T, class P, bool bGameServer >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+};
+
+// utility macro for declaring the function and callback object together
+#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
+
+// same as above, but lets you defer the callback binding by calling Register later
+#define STEAM_CALLBACK_MANUAL( thisclass, func, param, var ) CCallbackManual< thisclass, param, false > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() { return m_pController; }
+ ISteamUGC* SteamUGC() { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() { return m_pSteamMusic; }
+ ISteamMusicRemote* SteamMusicRemote() { return m_pSteamMusicRemote; }
+ ISteamHTMLSurface* SteamHTMLSurface() { return m_pSteamHTMLSurface; }
+ ISteamInventory* SteamInventory() { return m_pSteamInventory; }
+ ISteamVideo* SteamVideo() { return m_pSteamVideo; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+ ISteamMusicRemote *m_pSteamMusicRemote;
+ ISteamHTMLSurface *m_pSteamHTMLSurface;
+ ISteamInventory *m_pSteamInventory;
+ ISteamVideo *m_pSteamVideo;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamMusicRemote= NULL;
+ m_pSteamHTMLSurface = NULL;
+ m_pSteamInventory = NULL;
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = NULL;
+#endif
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = SteamClient()->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = SteamClient()->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = SteamClient()->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = SteamClient()->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ {
+ return false;
+ }
+
+ m_pSteamMusicRemote = SteamClient()->GetISteamMusicRemote( hSteamUser, hSteamPipe, STEAMMUSICREMOTE_INTERFACE_VERSION );
+ if ( !m_pSteamMusicRemote )
+ {
+ return false;
+ }
+
+ m_pSteamHTMLSurface = SteamClient()->GetISteamHTMLSurface( hSteamUser, hSteamPipe, STEAMHTMLSURFACE_INTERFACE_VERSION );
+ if ( !m_pSteamHTMLSurface )
+ {
+ return false;
+ }
+
+ m_pSteamInventory = SteamClient()->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ {
+ return false;
+ }
+
+ m_pSteamVideo = SteamClient()->GetISteamVideo( hSteamUser, hSteamPipe, STEAMVIDEO_INTERFACE_VERSION );
+ if ( !m_pSteamVideo )
+ {
+ return false;
+ }
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_134/steam_api_flat.h b/lsteamclient/steamworks_sdk_134/steam_api_flat.h
new file mode 100644
index 00000000..b81ca879
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/steam_api_flat.h
@@ -0,0 +1,642 @@
+//====== Copyright (c) 1996-2014, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Header for flatted SteamAPI. Use this for binding to other languages.
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+#ifndef STEAMAPIFLAT_H
+#define STEAMAPIFLAT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <stdint.h>
+
+
+S_API HSteamPipe SteamAPI_ISteamClient_CreateSteamPipe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamClient_BReleaseSteamPipe(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_ConnectToGlobalUser(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_CreateLocalUser(intptr_t instancePtr, HSteamPipe * phSteamPipe, EAccountType eAccountType);
+S_API void SteamAPI_ISteamClient_ReleaseUser(intptr_t instancePtr, HSteamPipe hSteamPipe, HSteamUser hUser);
+S_API class ISteamUser * SteamAPI_ISteamClient_GetISteamUser(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServer * SteamAPI_ISteamClient_GetISteamGameServer(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_SetLocalIPBinding(intptr_t instancePtr, uint32 unIP, uint16 usPort);
+S_API class ISteamFriends * SteamAPI_ISteamClient_GetISteamFriends(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUtils * SteamAPI_ISteamClient_GetISteamUtils(intptr_t instancePtr, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmaking * SteamAPI_ISteamClient_GetISteamMatchmaking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmakingServers * SteamAPI_ISteamClient_GetISteamMatchmakingServers(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void * SteamAPI_ISteamClient_GetISteamGenericInterface(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUserStats * SteamAPI_ISteamClient_GetISteamUserStats(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServerStats * SteamAPI_ISteamClient_GetISteamGameServerStats(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamApps * SteamAPI_ISteamClient_GetISteamApps(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamNetworking * SteamAPI_ISteamClient_GetISteamNetworking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamRemoteStorage * SteamAPI_ISteamClient_GetISteamRemoteStorage(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamScreenshots * SteamAPI_ISteamClient_GetISteamScreenshots(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_RunFrame(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamClient_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamClient_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(intptr_t instancePtr);
+S_API class ISteamHTTP * SteamAPI_ISteamClient_GetISteamHTTP(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUnifiedMessages * SteamAPI_ISteamClient_GetISteamUnifiedMessages(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamController * SteamAPI_ISteamClient_GetISteamController(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUGC * SteamAPI_ISteamClient_GetISteamUGC(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamAppList * SteamAPI_ISteamClient_GetISteamAppList(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusic * SteamAPI_ISteamClient_GetISteamMusic(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusicRemote * SteamAPI_ISteamClient_GetISteamMusicRemote(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamHTMLSurface * SteamAPI_ISteamClient_GetISteamHTMLSurface(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_Set_SteamAPI_CPostAPIResultInProcess(intptr_t instancePtr, SteamAPI_PostAPIResultInProcess_t func);
+S_API void SteamAPI_ISteamClient_Remove_SteamAPI_CPostAPIResultInProcess(intptr_t instancePtr, SteamAPI_PostAPIResultInProcess_t func);
+S_API void SteamAPI_ISteamClient_Set_SteamAPI_CCheckCallbackRegisteredInProcess(intptr_t instancePtr, SteamAPI_CheckCallbackRegistered_t func);
+S_API class ISteamInventory * SteamAPI_ISteamClient_GetISteamInventory(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamVideo * SteamAPI_ISteamClient_GetISteamVideo(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API HSteamUser SteamAPI_ISteamUser_GetHSteamUser(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BLoggedOn(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamUser_GetSteamID(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUser_InitiateGameConnection(intptr_t instancePtr, void * pAuthBlob, int cbMaxAuthBlob, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure);
+S_API void SteamAPI_ISteamUser_TerminateGameConnection(intptr_t instancePtr, uint32 unIPServer, uint16 usPortServer);
+S_API void SteamAPI_ISteamUser_TrackAppUsageEvent(intptr_t instancePtr, class CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo);
+S_API bool SteamAPI_ISteamUser_GetUserDataFolder(intptr_t instancePtr, char * pchBuffer, int cubBuffer);
+S_API void SteamAPI_ISteamUser_StartVoiceRecording(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_StopVoiceRecording(intptr_t instancePtr);
+S_API EVoiceResult SteamAPI_ISteamUser_GetAvailableVoice(intptr_t instancePtr, uint32 * pcbCompressed, uint32 * pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_GetVoice(intptr_t instancePtr, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_DecompressVoice(intptr_t instancePtr, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate);
+S_API uint32 SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(intptr_t instancePtr);
+S_API HAuthTicket SteamAPI_ISteamUser_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamUser_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamUser_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamUser_BIsBehindNAT(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_AdvertiseGame(intptr_t instancePtr, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestEncryptedAppTicket(intptr_t instancePtr, void * pDataToInclude, int cbDataToInclude);
+S_API bool SteamAPI_ISteamUser_GetEncryptedAppTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API int SteamAPI_ISteamUser_GetGameBadgeLevel(intptr_t instancePtr, int nSeries, bool bFoil);
+S_API int SteamAPI_ISteamUser_GetPlayerSteamLevel(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestStoreAuthURL(intptr_t instancePtr, const char * pchRedirectURL);
+S_API const char * SteamAPI_ISteamFriends_GetPersonaName(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_SetPersonaName(intptr_t instancePtr, const char * pchPersonaName);
+S_API EPersonaState SteamAPI_ISteamFriends_GetPersonaState(intptr_t instancePtr);
+S_API int SteamAPI_ISteamFriends_GetFriendCount(intptr_t instancePtr, int iFriendFlags);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendByIndex(intptr_t instancePtr, int iFriend, int iFriendFlags);
+S_API EFriendRelationship SteamAPI_ISteamFriends_GetFriendRelationship(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API EPersonaState SteamAPI_ISteamFriends_GetFriendPersonaState(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaName(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_GetFriendGamePlayed(intptr_t instancePtr, class CSteamID steamIDFriend, struct FriendGameInfo_t * pFriendGameInfo);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(intptr_t instancePtr, class CSteamID steamIDFriend, int iPersonaName);
+S_API int SteamAPI_ISteamFriends_GetFriendSteamLevel(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetPlayerNickname(intptr_t instancePtr, class CSteamID steamIDPlayer);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupCount(intptr_t instancePtr);
+S_API FriendsGroupID_t SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(intptr_t instancePtr, int iFG);
+S_API const char * SteamAPI_ISteamFriends_GetFriendsGroupName(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API void SteamAPI_ISteamFriends_GetFriendsGroupMembersList(intptr_t instancePtr, FriendsGroupID_t friendsGroupID, class CSteamID * pOutSteamIDMembers, int nMembersCount);
+S_API bool SteamAPI_ISteamFriends_HasFriend(intptr_t instancePtr, class CSteamID steamIDFriend, int iFriendFlags);
+S_API int SteamAPI_ISteamFriends_GetClanCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetClanByIndex(intptr_t instancePtr, int iClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanName(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanTag(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_GetClanActivityCounts(intptr_t instancePtr, class CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_DownloadClanActivityCounts(intptr_t instancePtr, class CSteamID * psteamIDClans, int cClansToRequest);
+S_API int SteamAPI_ISteamFriends_GetFriendCountFromSource(intptr_t instancePtr, class CSteamID steamIDSource);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(intptr_t instancePtr, class CSteamID steamIDSource, int iFriend);
+S_API bool SteamAPI_ISteamFriends_IsUserInSource(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDSource);
+S_API void SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(intptr_t instancePtr, class CSteamID steamIDUser, bool bSpeaking);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlay(intptr_t instancePtr, const char * pchDialog);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToUser(intptr_t instancePtr, const char * pchDialog, class CSteamID steamID);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(intptr_t instancePtr, const char * pchURL);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToStore(intptr_t instancePtr, AppId_t nAppID, EOverlayToStoreFlag eFlag);
+S_API void SteamAPI_ISteamFriends_SetPlayedWith(intptr_t instancePtr, class CSteamID steamIDUserPlayedWith);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API int SteamAPI_ISteamFriends_GetSmallFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetMediumFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetLargeFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_RequestUserInformation(intptr_t instancePtr, class CSteamID steamIDUser, bool bRequireNameOnly);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_RequestClanOfficerList(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOwner(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanOfficerCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOfficerByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iOfficer);
+S_API uint32 SteamAPI_ISteamFriends_GetUserRestrictions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamFriends_SetRichPresence(intptr_t instancePtr, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamFriends_ClearRichPresence(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchKey);
+S_API int SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(intptr_t instancePtr, class CSteamID steamIDFriend, int iKey);
+S_API void SteamAPI_ISteamFriends_RequestFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_InviteUserToGame(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchConnectString);
+S_API int SteamAPI_ISteamFriends_GetCoplayFriendCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetCoplayFriend(intptr_t instancePtr, int iCoplayFriend);
+S_API int SteamAPI_ISteamFriends_GetFriendCoplayTime(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API AppId_t SteamAPI_ISteamFriends_GetFriendCoplayGame(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_JoinClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_LeaveClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanChatMemberCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetChatMemberByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iUser);
+S_API bool SteamAPI_ISteamFriends_SendClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, const char * pchText);
+S_API int SteamAPI_ISteamFriends_GetClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, class CSteamID * psteamidChatter);
+S_API bool SteamAPI_ISteamFriends_IsClanChatAdmin(intptr_t instancePtr, class CSteamID steamIDClanChat, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_SetListenForFriendsMessages(intptr_t instancePtr, bool bInterceptEnabled);
+S_API bool SteamAPI_ISteamFriends_ReplyToFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchMsgToSend);
+S_API int SteamAPI_ISteamFriends_GetFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_GetFollowerCount(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_IsFollowing(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_EnumerateFollowingList(intptr_t instancePtr, uint32 unStartIndex);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceAppActive(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(intptr_t instancePtr);
+S_API EUniverse SteamAPI_ISteamUtils_GetConnectedUniverse(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetServerRealTime(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUtils_GetIPCountry(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetImageSize(intptr_t instancePtr, int iImage, uint32 * pnWidth, uint32 * pnHeight);
+S_API bool SteamAPI_ISteamUtils_GetImageRGBA(intptr_t instancePtr, int iImage, uint8 * pubDest, int nDestBufferSize);
+S_API bool SteamAPI_ISteamUtils_GetCSERIPPort(intptr_t instancePtr, uint32 * unIP, uint16 * usPort);
+S_API uint8 SteamAPI_ISteamUtils_GetCurrentBatteryPower(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetAppID(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationPosition(intptr_t instancePtr, ENotificationPosition eNotificationPosition);
+S_API bool SteamAPI_ISteamUtils_IsAPICallCompleted(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, bool * pbFailed);
+S_API ESteamAPICallFailure SteamAPI_ISteamUtils_GetAPICallFailureReason(intptr_t instancePtr, SteamAPICall_t hSteamAPICall);
+S_API bool SteamAPI_ISteamUtils_GetAPICallResult(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed);
+S_API void SteamAPI_ISteamUtils_RunFrame(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamUtils_IsOverlayEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_BOverlayNeedsPresent(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUtils_CheckFileSignature(intptr_t instancePtr, const char * szFileName);
+S_API bool SteamAPI_ISteamUtils_ShowGamepadTextInput(intptr_t instancePtr, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText);
+S_API uint32 SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(intptr_t instancePtr, char * pchText, uint32 cchText);
+S_API const char * SteamAPI_ISteamUtils_GetSteamUILanguage(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_IsSteamRunningInVR(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationInset(intptr_t instancePtr, int nHorizontalInset, int nVerticalInset);
+S_API int SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMatchmaking_GetFavoriteGame(intptr_t instancePtr, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer);
+S_API int SteamAPI_ISteamMatchmaking_AddFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer);
+S_API bool SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_RequestLobbyList(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(intptr_t instancePtr, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToBeCloseTo);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(intptr_t instancePtr, int nSlotsAvailable);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(intptr_t instancePtr, ELobbyDistanceFilter eLobbyDistanceFilter);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(intptr_t instancePtr, int cMaxResults);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyByIndex(intptr_t instancePtr, int iLobby);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_CreateLobby(intptr_t instancePtr, ELobbyType eLobbyType, int cMaxMembers);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_JoinLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_LeaveLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_InviteUserToLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDInvitee);
+S_API int SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iMember);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyDataCount(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize);
+S_API bool SteamAPI_ISteamMatchmaking_DeleteLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDUser, const char * pchKey);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(intptr_t instancePtr, class CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(intptr_t instancePtr, class CSteamID steamIDLobby, int iChatID, class CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API bool SteamAPI_ISteamMatchmaking_RequestLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, class CSteamID steamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, class CSteamID * psteamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby, int cMaxMembers);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyType(intptr_t instancePtr, class CSteamID steamIDLobby, ELobbyType eLobbyType);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyJoinable(intptr_t instancePtr, class CSteamID steamIDLobby, bool bLobbyJoinable);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDNewOwner);
+S_API bool SteamAPI_ISteamMatchmaking_SetLinkedLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDLobbyDependent);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(intptr_t instancePtr, HServerListRequest hRequest, EMatchMakingServerResponse response);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(intptr_t instancePtr, class gameserveritem_t & server);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(intptr_t instancePtr, const char * pchName, int nScore, float flTimePlayed);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(intptr_t instancePtr, const char * pchRule, const char * pchValue);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(intptr_t instancePtr);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestLANServerList(intptr_t instancePtr, AppId_t iApp, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_ReleaseRequest(intptr_t instancePtr, HServerListRequest hServerListRequest);
+S_API class gameserveritem_t * SteamAPI_ISteamMatchmakingServers_GetServerDetails(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API bool SteamAPI_ISteamMatchmakingServers_IsRefreshing(intptr_t instancePtr, HServerListRequest hRequest);
+S_API int SteamAPI_ISteamMatchmakingServers_GetServerCount(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshServer(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PingServer(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPingResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PlayerDetails(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPlayersResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_ServerRules(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingRulesResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelServerQuery(intptr_t instancePtr, HServerQuery hServerQuery);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWrite(intptr_t instancePtr, const char * pchFile, const void * pvData, int32 cubData);
+S_API int32 SteamAPI_ISteamRemoteStorage_FileRead(intptr_t instancePtr, const char * pchFile, void * pvData, int32 cubDataToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileForget(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileDelete(intptr_t instancePtr, const char * pchFile);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileShare(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(intptr_t instancePtr, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform);
+S_API UGCFileWriteStreamHandle_t SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileExists(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FilePersisted(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileSize(intptr_t instancePtr, const char * pchFile);
+S_API int64 SteamAPI_ISteamRemoteStorage_GetFileTimestamp(intptr_t instancePtr, const char * pchFile);
+S_API ERemoteStoragePlatform SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileCount(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(intptr_t instancePtr, int iFile, int32 * pnFileSizeInBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_GetQuota(intptr_t instancePtr, int32 * pnTotalBytes, int32 * puAvailableBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(intptr_t instancePtr);
+S_API void SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(intptr_t instancePtr, bool bEnabled);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownload(intptr_t instancePtr, UGCHandle_t hContent, uint32 unPriority);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(intptr_t instancePtr, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDetails(intptr_t instancePtr, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, class CSteamID * pSteamIDOwner);
+S_API int32 SteamAPI_ISteamRemoteStorage_UGCRead(intptr_t instancePtr, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(intptr_t instancePtr);
+S_API UGCHandle_t SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(intptr_t instancePtr, int32 iCachedContent);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(intptr_t instancePtr, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType);
+S_API PublishedFileUpdateHandle_t SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_DeletePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(intptr_t instancePtr, class CSteamID steamId, uint32 unStartIndex, struct SteamParamStringArray_t * pRequiredTags, struct SteamParamStringArray_t * pExcludedTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishVideo(intptr_t instancePtr, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(intptr_t instancePtr, EWorkshopFileAction eAction, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(intptr_t instancePtr, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, struct SteamParamStringArray_t * pTags, struct SteamParamStringArray_t * pUserTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(intptr_t instancePtr, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority);
+S_API bool SteamAPI_ISteamUserStats_RequestCurrentStats(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUserStats_GetStat(intptr_t instancePtr, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetStat0(intptr_t instancePtr, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_SetStat(intptr_t instancePtr, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamUserStats_SetStat0(intptr_t instancePtr, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamUserStats_UpdateAvgRateStat(intptr_t instancePtr, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamUserStats_GetAchievement(intptr_t instancePtr, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_SetAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_ClearAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(intptr_t instancePtr, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_StoreStats(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetAchievementIcon(intptr_t instancePtr, const char * pchName);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(intptr_t instancePtr, const char * pchName, const char * pchKey);
+S_API bool SteamAPI_ISteamUserStats_IndicateAchievementProgress(intptr_t instancePtr, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress);
+S_API uint32 SteamAPI_ISteamUserStats_GetNumAchievements(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementName(intptr_t instancePtr, uint32 iAchievement);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_ResetAllStats(intptr_t instancePtr, bool bAchievementsToo);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName);
+S_API const char * SteamAPI_ISteamUserStats_GetLeaderboardName(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API int SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardSortMethod SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardDisplayType SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, class CSteamID * prgUsers, int cUsers);
+S_API bool SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(intptr_t instancePtr, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, struct LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_UploadLeaderboardScore(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_AttachLeaderboardUGC(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(intptr_t instancePtr, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API int SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(intptr_t instancePtr, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(intptr_t instancePtr, const char * pchName, float * pflPercent);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalStats(intptr_t instancePtr, int nHistoryDays);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat(intptr_t instancePtr, const char * pchStatName, int64 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat0(intptr_t instancePtr, const char * pchStatName, double * pData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory(intptr_t instancePtr, const char * pchStatName, int64 * pData, uint32 cubData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory0(intptr_t instancePtr, const char * pchStatName, double * pData, uint32 cubData);
+S_API bool SteamAPI_ISteamApps_BIsSubscribed(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsLowViolence(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsCybercafe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsVACBanned(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetCurrentGameLanguage(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetAvailableGameLanguages(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedApp(intptr_t instancePtr, AppId_t appID);
+S_API bool SteamAPI_ISteamApps_BIsDlcInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint32 SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(intptr_t instancePtr);
+S_API int SteamAPI_ISteamApps_GetDLCCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BGetDLCDataByIndex(intptr_t instancePtr, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize);
+S_API void SteamAPI_ISteamApps_InstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_UninstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_GetCurrentBetaName(intptr_t instancePtr, char * pchName, int cchNameBufferSize);
+S_API bool SteamAPI_ISteamApps_MarkContentCorrupt(intptr_t instancePtr, bool bMissingFilesOnly);
+S_API uint32 SteamAPI_ISteamApps_GetInstalledDepots(intptr_t instancePtr, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots);
+S_API uint32 SteamAPI_ISteamApps_GetAppInstallDir(intptr_t instancePtr, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize);
+S_API bool SteamAPI_ISteamApps_BIsAppInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint64 SteamAPI_ISteamApps_GetAppOwner(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetLaunchQueryParam(intptr_t instancePtr, const char * pchKey);
+S_API bool SteamAPI_ISteamApps_GetDlcDownloadProgress(intptr_t instancePtr, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API int SteamAPI_ISteamApps_GetAppBuildId(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamNetworking_SendP2PPacket(intptr_t instancePtr, class CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_IsP2PPacketAvailable(intptr_t instancePtr, uint32 * pcubMsgSize, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_ReadP2PPacket(intptr_t instancePtr, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, class CSteamID * psteamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(intptr_t instancePtr, class CSteamID steamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_GetP2PSessionState(intptr_t instancePtr, class CSteamID steamIDRemote, struct P2PSessionState_t * pConnectionState);
+S_API bool SteamAPI_ISteamNetworking_AllowP2PPacketRelay(intptr_t instancePtr, bool bAllow);
+S_API SNetListenSocket_t SteamAPI_ISteamNetworking_CreateListenSocket(intptr_t instancePtr, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(intptr_t instancePtr, class CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateConnectionSocket(intptr_t instancePtr, uint32 nIP, uint16 nPort, int nTimeoutSec);
+S_API bool SteamAPI_ISteamNetworking_DestroySocket(intptr_t instancePtr, SNetSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_DestroyListenSocket(intptr_t instancePtr, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_SendDataOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_RetrieveDataFromSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailable(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_RetrieveData(intptr_t instancePtr, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_GetSocketInfo(intptr_t instancePtr, SNetSocket_t hSocket, class CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote);
+S_API bool SteamAPI_ISteamNetworking_GetListenSocketInfo(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort);
+S_API ESNetSocketConnectionType SteamAPI_ISteamNetworking_GetSocketConnectionType(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API int SteamAPI_ISteamNetworking_GetMaxPacketSize(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_WriteScreenshot(intptr_t instancePtr, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(intptr_t instancePtr, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight);
+S_API void SteamAPI_ISteamScreenshots_TriggerScreenshot(intptr_t instancePtr);
+S_API void SteamAPI_ISteamScreenshots_HookScreenshots(intptr_t instancePtr, bool bHook);
+S_API bool SteamAPI_ISteamScreenshots_SetLocation(intptr_t instancePtr, ScreenshotHandle hScreenshot, const char * pchLocation);
+S_API bool SteamAPI_ISteamScreenshots_TagUser(intptr_t instancePtr, ScreenshotHandle hScreenshot, class CSteamID steamID);
+S_API bool SteamAPI_ISteamScreenshots_TagPublishedFile(intptr_t instancePtr, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID);
+S_API bool SteamAPI_ISteamMusic_BIsEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusic_BIsPlaying(intptr_t instancePtr);
+S_API AudioPlayback_Status SteamAPI_ISteamMusic_GetPlaybackStatus(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Play(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Pause(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayPrevious(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayNext(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_SetVolume(intptr_t instancePtr, float flVolume);
+S_API float SteamAPI_ISteamMusic_GetVolume(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BActivationSuccess(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_SetDisplayName(intptr_t instancePtr, const char * pchDisplayName);
+S_API bool SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayPrevious(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayNext(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableQueue(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlaylists(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(intptr_t instancePtr, AudioPlayback_Status nStatus);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateVolume(intptr_t instancePtr, float flValue);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(intptr_t instancePtr, bool bAvailable);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(intptr_t instancePtr, const char * pchText);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(intptr_t instancePtr, int nValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_QueueWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetQueueEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetQueueEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_QueueDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetPlaylistEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistDidChange(intptr_t instancePtr);
+S_API HTTPRequestHandle SteamAPI_ISteamHTTP_CreateHTTPRequest(intptr_t instancePtr, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(intptr_t instancePtr, HTTPRequestHandle hRequest, uint64 ulContextValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_DeferHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 * unBodySize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 cOffset, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_ReleaseHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(intptr_t instancePtr, HTTPRequestHandle hRequest, float * pflPercentOut);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen);
+S_API HTTPCookieContainerHandle SteamAPI_ISteamHTTP_CreateCookieContainer(intptr_t instancePtr, bool bAllowResponsesToModify);
+S_API bool SteamAPI_ISteamHTTP_ReleaseCookieContainer(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetCookie(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer, const char * pchHost, const char * pchUrl, const char * pchCookie);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(intptr_t instancePtr, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchUserAgentInfo);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(intptr_t instancePtr, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unMilliseconds);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(intptr_t instancePtr, HTTPRequestHandle hRequest, bool * pbWasTimedOut);
+S_API ClientUnifiedMessageHandle SteamAPI_ISteamUnifiedMessages_SendMethod(intptr_t instancePtr, const char * pchServiceMethod, const void * pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, uint32 * punResponseSize, EResult * peResult);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseData(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, void * pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease);
+S_API bool SteamAPI_ISteamUnifiedMessages_ReleaseMethod(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle);
+S_API bool SteamAPI_ISteamUnifiedMessages_SendNotification(intptr_t instancePtr, const char * pchServiceNotification, const void * pNotificationBuffer, uint32 unNotificationBufferSize);
+S_API bool SteamAPI_ISteamController_Init(intptr_t instancePtr, const char * pchAbsolutePathToControllerConfigVDF);
+S_API bool SteamAPI_ISteamController_Shutdown(intptr_t instancePtr);
+S_API void SteamAPI_ISteamController_RunFrame(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamController_GetControllerState(intptr_t instancePtr, uint32 unControllerIndex, struct SteamControllerState001_t * pState);
+S_API void SteamAPI_ISteamController_TriggerHapticPulse(intptr_t instancePtr, uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec);
+S_API void SteamAPI_ISteamController_SetOverrideMode(intptr_t instancePtr, const char * pchMode);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(intptr_t instancePtr, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(intptr_t instancePtr, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SendQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCResult(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, struct SteamUGCDetails_t * pDetails);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCPreviewURL(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCChildren(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCStatistic(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 * pStatValue);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, bool * pbIsImage);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize);
+S_API bool SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_AddRequiredTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_AddExcludedTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_SetReturnKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnKeyValueTags);
+S_API bool SteamAPI_ISteamUGC_SetReturnLongDescription(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnLongDescription);
+S_API bool SteamAPI_ISteamUGC_SetReturnMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnMetadata);
+S_API bool SteamAPI_ISteamUGC_SetReturnChildren(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnChildren);
+S_API bool SteamAPI_ISteamUGC_SetReturnAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews);
+S_API bool SteamAPI_ISteamUGC_SetReturnTotalOnly(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnTotalOnly);
+S_API bool SteamAPI_ISteamUGC_SetLanguage(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetAllowCachedResponse(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds);
+S_API bool SteamAPI_ISteamUGC_SetCloudFileNameFilter(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pMatchCloudFileName);
+S_API bool SteamAPI_ISteamUGC_SetMatchAnyTag(intptr_t instancePtr, UGCQueryHandle_t handle, bool bMatchAnyTag);
+S_API bool SteamAPI_ISteamUGC_SetSearchText(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pSearchText);
+S_API bool SteamAPI_ISteamUGC_SetRankedByTrendDays(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unDays);
+S_API bool SteamAPI_ISteamUGC_AddRequiredKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pKey, const char * pValue);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RequestUGCDetails(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_CreateItem(intptr_t instancePtr, AppId_t nConsumerAppId, EWorkshopFileType eFileType);
+S_API UGCUpdateHandle_t SteamAPI_ISteamUGC_StartItemUpdate(intptr_t instancePtr, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_SetItemTitle(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchTitle);
+S_API bool SteamAPI_ISteamUGC_SetItemDescription(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchDescription);
+S_API bool SteamAPI_ISteamUGC_SetItemUpdateLanguage(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetItemMetadata(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchMetaData);
+S_API bool SteamAPI_ISteamUGC_SetItemVisibility(intptr_t instancePtr, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamUGC_SetItemTags(intptr_t instancePtr, UGCUpdateHandle_t updateHandle, const struct SteamParamStringArray_t * pTags);
+S_API bool SteamAPI_ISteamUGC_SetItemContent(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszContentFolder);
+S_API bool SteamAPI_ISteamUGC_SetItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile);
+S_API bool SteamAPI_ISteamUGC_RemoveItemKeyValueTags(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey);
+S_API bool SteamAPI_ISteamUGC_AddItemKeyValueTag(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubmitItemUpdate(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchChangeNote);
+S_API EItemUpdateStatus SteamAPI_ISteamUGC_GetItemUpdateProgress(intptr_t instancePtr, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_GetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddItemToFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveItemFromFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_UnsubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API uint32 SteamAPI_ISteamUGC_GetNumSubscribedItems(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUGC_GetSubscribedItems(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API uint32 SteamAPI_ISteamUGC_GetItemState(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_GetItemInstallInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp);
+S_API bool SteamAPI_ISteamUGC_GetItemDownloadInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API bool SteamAPI_ISteamUGC_DownloadItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bHighPriority);
+S_API uint32 SteamAPI_ISteamAppList_GetNumInstalledApps(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamAppList_GetInstalledApps(intptr_t instancePtr, AppId_t * pvecAppID, uint32 unMaxAppIDs);
+S_API int SteamAPI_ISteamAppList_GetAppName(intptr_t instancePtr, AppId_t nAppID, char * pchName, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppInstallDir(intptr_t instancePtr, AppId_t nAppID, char * pchDirectory, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppBuildId(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Shutdown(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamHTMLSurface_CreateBrowser(intptr_t instancePtr, const char * pchUserAgent, const char * pchUserCSS);
+S_API void SteamAPI_ISteamHTMLSurface_RemoveBrowser(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_LoadURL(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData);
+S_API void SteamAPI_ISteamHTMLSurface_SetSize(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight);
+S_API void SteamAPI_ISteamHTMLSurface_StopLoad(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Reload(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoBack(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoForward(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_AddHeader(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamHTMLSurface_ExecuteJavascript(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchScript);
+S_API void SteamAPI_ISteamHTMLSurface_MouseUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDoubleClick(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseMove(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_MouseWheel(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int32 nDelta);
+S_API void SteamAPI_ISteamHTMLSurface_KeyDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyChar(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetVerticalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetKeyFocus(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus);
+S_API void SteamAPI_ISteamHTMLSurface_ViewSource(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_CopyToClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_PasteFromClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Find(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse);
+S_API void SteamAPI_ISteamHTMLSurface_StopFind(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_SetCookie(intptr_t instancePtr, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly);
+S_API void SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY);
+S_API void SteamAPI_ISteamHTMLSurface_SetBackgroundMode(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bBackgroundMode);
+S_API void SteamAPI_ISteamHTMLSurface_AllowStartRequest(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bAllowed);
+S_API void SteamAPI_ISteamHTMLSurface_JSDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bResult);
+S_API void SteamAPI_ISteamHTMLSurface_FileLoadDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char ** pchSelectedFiles);
+S_API EResult SteamAPI_ISteamInventory_GetResultStatus(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetResultItems(intptr_t instancePtr, SteamInventoryResult_t resultHandle, struct SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize);
+S_API uint32 SteamAPI_ISteamInventory_GetResultTimestamp(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_CheckResultSteamID(intptr_t instancePtr, SteamInventoryResult_t resultHandle, class CSteamID steamIDExpected);
+S_API void SteamAPI_ISteamInventory_DestroyResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetAllItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_GetItemsByID(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs);
+S_API bool SteamAPI_ISteamInventory_SerializeResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize);
+S_API bool SteamAPI_ISteamInventory_DeserializeResult(intptr_t instancePtr, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE);
+S_API bool SteamAPI_ISteamInventory_GenerateItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_GrantPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_AddPromoItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef);
+S_API bool SteamAPI_ISteamInventory_AddPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_ConsumeItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity);
+S_API bool SteamAPI_ISteamInventory_ExchangeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength);
+S_API bool SteamAPI_ISteamInventory_TransferItemQuantity(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest);
+S_API void SteamAPI_ISteamInventory_SendItemDropHeartbeat(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_TriggerItemDrop(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition);
+S_API bool SteamAPI_ISteamInventory_TradeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, class CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength);
+S_API bool SteamAPI_ISteamInventory_LoadItemDefinitions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionIDs(intptr_t instancePtr, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionProperty(intptr_t instancePtr, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSize);
+S_API void SteamAPI_ISteamVideo_GetVideoURL(intptr_t instancePtr, AppId_t unVideoAppID);
+S_API bool SteamAPI_ISteamVideo_IsBroadcasting(intptr_t instancePtr, int * pnNumViewers);
+S_API bool SteamAPI_ISteamGameServer_InitGameServer(intptr_t instancePtr, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString);
+S_API void SteamAPI_ISteamGameServer_SetProduct(intptr_t instancePtr, const char * pszProduct);
+S_API void SteamAPI_ISteamGameServer_SetGameDescription(intptr_t instancePtr, const char * pszGameDescription);
+S_API void SteamAPI_ISteamGameServer_SetModDir(intptr_t instancePtr, const char * pszModDir);
+S_API void SteamAPI_ISteamGameServer_SetDedicatedServer(intptr_t instancePtr, bool bDedicated);
+S_API void SteamAPI_ISteamGameServer_LogOn(intptr_t instancePtr, const char * pszToken);
+S_API void SteamAPI_ISteamGameServer_LogOnAnonymous(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_LogOff(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BLoggedOn(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BSecure(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamGameServer_GetSteamID(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_WasRestartRequested(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetMaxPlayerCount(intptr_t instancePtr, int cPlayersMax);
+S_API void SteamAPI_ISteamGameServer_SetBotPlayerCount(intptr_t instancePtr, int cBotplayers);
+S_API void SteamAPI_ISteamGameServer_SetServerName(intptr_t instancePtr, const char * pszServerName);
+S_API void SteamAPI_ISteamGameServer_SetMapName(intptr_t instancePtr, const char * pszMapName);
+S_API void SteamAPI_ISteamGameServer_SetPasswordProtected(intptr_t instancePtr, bool bPasswordProtected);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorPort(intptr_t instancePtr, uint16 unSpectatorPort);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorServerName(intptr_t instancePtr, const char * pszSpectatorServerName);
+S_API void SteamAPI_ISteamGameServer_ClearAllKeyValues(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetKeyValue(intptr_t instancePtr, const char * pKey, const char * pValue);
+S_API void SteamAPI_ISteamGameServer_SetGameTags(intptr_t instancePtr, const char * pchGameTags);
+S_API void SteamAPI_ISteamGameServer_SetGameData(intptr_t instancePtr, const char * pchGameData);
+S_API void SteamAPI_ISteamGameServer_SetRegion(intptr_t instancePtr, const char * pszRegion);
+S_API bool SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(intptr_t instancePtr, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, class CSteamID * pSteamIDUser);
+S_API uint64 SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SendUserDisconnect(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServer_BUpdateUserData(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore);
+S_API HAuthTicket SteamAPI_ISteamGameServer_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamGameServer_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamGameServer_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamGameServer_RequestUserGroupStatus(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDGroup);
+S_API void SteamAPI_ISteamGameServer_GetGameplayStats(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_GetServerReputation(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamGameServer_GetPublicIP(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_HandleIncomingPacket(intptr_t instancePtr, const void * pData, int cbData, uint32 srcIP, uint16 srcPort);
+S_API int SteamAPI_ISteamGameServer_GetNextOutgoingPacket(intptr_t instancePtr, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort);
+S_API void SteamAPI_ISteamGameServer_EnableHeartbeats(intptr_t instancePtr, bool bActive);
+S_API void SteamAPI_ISteamGameServer_SetHeartbeatInterval(intptr_t instancePtr, int iHeartbeatInterval);
+S_API void SteamAPI_ISteamGameServer_ForceHeartbeat(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_AssociateWithClan(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(intptr_t instancePtr, class CSteamID steamIDNewPlayer);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API bool SteamAPI_ISteamGameServerStats_ClearUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_StoreUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+#endif // STEAMAPIFLAT_H
+
+
diff --git a/lsteamclient/steamworks_sdk_134/steam_gameserver.h b/lsteamclient/steamworks_sdk_134/steam_gameserver.h
new file mode 100644
index 00000000..1f0baa81
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/steam_gameserver.h
@@ -0,0 +1,179 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+S_API ISteamInventory *SteamGameServerInventory();
+S_API ISteamUGC *SteamGameServerUGC();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, true > var; void func( param *pParam )
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+ ISteamInventory *SteamInventory() { return m_pSteamInventory; }
+ ISteamUGC *SteamUGC() { return m_pSteamUGC; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamInventory *m_pSteamInventory;
+ ISteamUGC *m_pSteamUGC;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamInventory = NULL;
+ m_pSteamUGC = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamInventory = g_pSteamClientGameServer->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_pSteamUGC = g_pSteamClientGameServer->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_134/steamclientpublic.h b/lsteamclient/steamworks_sdk_134/steamclientpublic.h
new file mode 100644
index 00000000..af0e39ed
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/steamclientpublic.h
@@ -0,0 +1,1138 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to login
+ k_EResultItemDeleted = 86, // The thing we're trying to access has been deleted
+ k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to throttle response to possible attacker
+ k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch
+ k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for two-factor didn't match
+ k_EResultAccountAssociatedToMultiplePartners = 90, // account has been associated with multiple partners
+ k_EResultNotModified = 91, // data not modified
+ k_EResultNoMobileDevice = 92, // the account does not have a mobile device associated with it
+ k_EResultTimeNotSynced = 93, // the time presented is out of range or tolerance
+ k_EResultSmsCodeFailed = 94, // SMS code failure (no match, none pending, etc.)
+ k_EResultAccountLimitExceeded = 95, // Too many accounts access this resource
+ k_EResultAccountActivityLimitExceeded = 96, // Too many changes to this account
+ k_EResultPhoneActivityLimitExceeded = 97, // Too many changes to this phone
+ k_EResultRefundToWallet = 98, // Cannot refund to payment method, must use wallet
+ k_EResultEmailSendFailure = 99, // Cannot send an email
+ k_EResultNotSettled = 100, // Can't perform operation till payment has settled
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+ k_EVoiceResultReceiverOutOfDate = 8,
+ k_EVoiceResultReceiverDidNotAnswer = 9,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+enum EDenyReason
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+};
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+enum EBeginAuthSessionResult
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+};
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+enum EAuthSessionResponse
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+ k_EAuthSessionResponsePublisherIssuedBan = 9, // The user is banned for this game. The ban came via the web api and not VAC
+};
+
+// results from UserHasLicenseForApp
+enum EUserHasLicenseForAppResult
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+};
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x0000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x0001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x0002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x0004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x0008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x0010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x0020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x0040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_RetailLicense = 0x0080, // has a retail license for game, (CD-Key etc)
+ k_EAppOwnershipFlags_LicenseLocked = 0x0100, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x0200, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x0400, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x0800, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x1000, // Recurring license, user is charged periodically
+ k_EAppOwnershipFlags_LicenseCanceled = 0x2000, // Mark as canceled, but might be still active if recurring
+ k_EAppOwnershipFlags_AutoGrant = 0x4000, // Ownership is based on any kind of autogrant license
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media_DEPRECATED = 0x010, // legacy - was used for game trailers, which are now just videos on the web
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+ k_EAppType_Hardware = 0x200, // a hardware device (Steam Machine, Steam Controller, Steam Link, etc.)
+ // 0x400 is up for grabs here
+ k_EAppType_Video = 0x800, // A video component of either a Film or TVSeries (may be the feature, an episode, preview, making-of, etc)
+ k_EAppType_Plugin = 0x1000, // Plug-in types for other Apps
+ k_EAppType_Music = 0x2000, // Music files
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+ k_EChatEntryTypeReserved1 = 12,
+ k_EChatEntryTypeReserved2 = 13,
+ k_EChatEntryTypeLinkBlocked = 14, // a link was removed by the chat filter.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Broadcast upload result details
+//-----------------------------------------------------------------------------
+enum EBroadcastUploadResult
+{
+ k_EBroadcastUploadResultNone = 0, // broadcast state unknown
+ k_EBroadcastUploadResultOK = 1, // broadcast was good, no problems
+ k_EBroadcastUploadResultInitFailed = 2, // broadcast init failed
+ k_EBroadcastUploadResultFrameFailed = 3, // broadcast frame upload failed
+ k_EBroadcastUploadResultTimeout = 4, // broadcast upload timed out
+ k_EBroadcastUploadResultBandwidthExceeded = 5, // broadcast send too much data
+ k_EBroadcastUploadResultLowFPS = 6, // broadcast FPS too low
+ k_EBroadcastUploadResultMissingKeyFrames = 7, // broadcast sending not enough key frames
+ k_EBroadcastUploadResultNoConnection = 8, // broadcast client failed to connect to relay
+ k_EBroadcastUploadResultRelayFailed = 9, // relay dropped the upload
+ k_EBroadcastUploadResultSettingsChanged = 10, // the client changed broadcast settings
+ k_EBroadcastUploadResultMissingAudio = 11, // client failed to send audio data
+ k_EBroadcastUploadResultTooFarBehind = 12, // clients was too slow uploading
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM2_USERID_STRUCTS )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ V_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, V_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, V_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, V_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, V_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_134/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_134/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_134/steamhttpenums.h b/lsteamclient/steamworks_sdk_134/steamhttpenums.h
new file mode 100644
index 00000000..2ec0982b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/steamhttpenums.h
@@ -0,0 +1,97 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401, // You probably want 403 or something else. 401 implies you're sending a WWW-Authenticate header and the client can sent an Authorization header in response.
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+ k_EHTTPStatusCode4xxUnknown = 418, // 418 is reserved, so we'll use it to mean unknown
+ k_EHTTPStatusCode429TooManyRequests = 429,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+ k_EHTTPStatusCode5xxUnknown = 599,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_134/steamps3params.h b/lsteamclient/steamworks_sdk_134/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_134/steamtypes.h b/lsteamclient/steamworks_sdk_134/steamtypes.h
new file mode 100644
index 00000000..2be3926c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/steamtypes.h
@@ -0,0 +1,179 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+#ifdef __clang__
+# define CLANG_ATTR(ATTR) __attribute__((annotate( ATTR )))
+#else
+# define CLANG_ATTR(ATTR)
+#endif
+
+#define METHOD_DESC(DESC) CLANG_ATTR( "desc:" #DESC ";" )
+#define IGNOREATTR() CLANG_ATTR( "ignore" )
+#define OUT_STRUCT() CLANG_ATTR( "out_struct: ;" )
+#define OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" )
+#define OUT_ARRAY_COUNT(COUNTER, DESC) CLANG_ATTR( "out_array_count:" #COUNTER ";desc:" #DESC )
+#define ARRAY_COUNT(COUNTER) CLANG_ATTR( "array_count:" #COUNTER ";" )
+#define ARRAY_COUNT_D(COUNTER, DESC) CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC )
+#define BUFFER_COUNT(COUNTER) CLANG_ATTR( "buffer_count:" #COUNTER ";" )
+#define OUT_BUFFER_COUNT(COUNTER) CLANG_ATTR( "out_buffer_count:" #COUNTER ";" )
+#define OUT_STRING_COUNT(COUNTER) CLANG_ATTR( "out_string_count:" #COUNTER ";" )
+#define DESC(DESC) CLANG_ATTR("desc:" #DESC ";")
+
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef uint64 JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+const JobID_t k_JobIDNil = 0xffffffffffffffffull;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+typedef uint32 BundleId_t;
+const BundleId_t k_uBundleIdInvalid = 0;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+// ID for a depot content manifest
+typedef uint64 ManifestId_t;
+const ManifestId_t k_uManifestIdInvalid = 0;
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_134/steamuniverse.h b/lsteamclient/steamworks_sdk_134/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_134/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_135/isteamapplist.h b/lsteamclient/steamworks_sdk_135/isteamapplist.h
new file mode 100644
index 00000000..fc1d49ee
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_135/isteamapps.h b/lsteamclient/steamworks_sdk_135/isteamapps.h
new file mode 100644
index 00000000..f73fed4d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamapps.h
@@ -0,0 +1,154 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+ // get download progress for optional DLC
+ virtual bool GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // return the buildid of this app, may change at any time based on backend updates to the game
+ virtual int GetAppBuildId() = 0;
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION007"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_135/isteamappticket.h b/lsteamclient/steamworks_sdk_135/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_135/isteamclient.h b/lsteamclient/steamworks_sdk_135/isteamclient.h
new file mode 100644
index 00000000..9977f3a5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamclient.h
@@ -0,0 +1,503 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct ValvePackingSentinel_t
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+extern "C" typedef void( *SteamAPI_PostAPIResultInProcess_t )(SteamAPICall_t callHandle, void *, uint32 unCallbackSize, int iCallbackNum);
+extern "C" typedef uint32 ( *SteamAPI_CheckCallbackRegistered_t )( int iCallbackNum );
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamMusicRemote;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+class ISteamHTMLSurface;
+class ISteamInventory;
+class ISteamVideo;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player Remote
+ virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // html page display
+ virtual ISteamHTMLSurface *GetISteamHTMLSurface(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // Helper functions for internal Steam usage
+ virtual void Set_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) = 0;
+ virtual void Remove_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) = 0;
+ virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0;
+
+ // inventory
+ virtual ISteamInventory *GetISteamInventory( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Video
+ virtual ISteamVideo *GetISteamVideo( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient017"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iClientDepotBuilderCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+enum { k_iSteamMusicRemoteCallbacks = 4100 };
+enum { k_iClientVRCallbacks = 4200 };
+enum { k_iClientReservedCallbacks = 4300 };
+enum { k_iSteamReservedCallbacks = 4400 };
+enum { k_iSteamHTMLSurfaceCallbacks = 4500 };
+enum { k_iClientVideoCallbacks = 4600 };
+enum { k_iClientInventoryCallbacks = 4700 };
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+struct SteamCallback_t
+{
+public:
+ SteamCallback_t() {}
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname : SteamCallback_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_10() \
+ END_CALLBACK_INTERNAL_BEGIN( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_11() \
+ END_CALLBACK_INTERNAL_BEGIN( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_12() \
+ END_CALLBACK_INTERNAL_BEGIN( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_13() \
+ END_CALLBACK_INTERNAL_BEGIN( 13 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_14() \
+ END_CALLBACK_INTERNAL_BEGIN( 14 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 13 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_135/isteamcontroller.h b/lsteamclient/steamworks_sdk_135/isteamcontroller.h
new file mode 100644
index 00000000..5c8eaf62
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamcontroller.h
@@ -0,0 +1,210 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define STEAM_CONTROLLER_MAX_COUNT 16
+
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTIONS 16
+
+#define STEAM_CONTROLLER_MAX_DIGITAL_ACTIONS 32
+
+#define STEAM_CONTROLLER_MAX_ORIGINS 8
+
+// When sending an option to a specific controller handle, you can send to all controllers via this command
+#define STEAM_CONTROLLER_HANDLE_ALL_CONTROLLERS UINT64_MAX
+
+#define STEAM_CONTROLLER_MIN_ANALOG_ACTION_DATA -1.0f
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTION_DATA 1.0f
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+enum EControllerSource
+{
+ k_EControllerSource_None,
+ k_EControllerSource_LeftTrackpad,
+ k_EControllerSource_RightTrackpad,
+ k_EControllerSource_Joystick,
+ k_EControllerSource_ABXY,
+ k_EControllerSource_Switch,
+ k_EControllerSource_LeftTrigger,
+ k_EControllerSource_RightTrigger,
+ k_EControllerSource_Gyro
+};
+
+enum EControllerSourceMode
+{
+ k_EControllerSourceMode_None,
+ k_EControllerSourceMode_Dpad,
+ k_EControllerSourceMode_Buttons,
+ k_EControllerSourceMode_FourButtons,
+ k_EControllerSourceMode_AbsoluteMouse,
+ k_EControllerSourceMode_RelativeMouse,
+ k_EControllerSourceMode_JoystickMove,
+ k_EControllerSourceMode_JoystickCamera,
+ k_EControllerSourceMode_ScrollWheel,
+ k_EControllerSourceMode_Trigger,
+ k_EControllerSourceMode_TouchMenu
+};
+
+enum EControllerActionOrigin
+{
+ k_EControllerActionOrigin_None,
+ k_EControllerActionOrigin_A,
+ k_EControllerActionOrigin_B,
+ k_EControllerActionOrigin_X,
+ k_EControllerActionOrigin_Y,
+ k_EControllerActionOrigin_LeftBumper,
+ k_EControllerActionOrigin_RightBumper,
+ k_EControllerActionOrigin_LeftGrip,
+ k_EControllerActionOrigin_RightGrip,
+ k_EControllerActionOrigin_Start,
+ k_EControllerActionOrigin_Back,
+ k_EControllerActionOrigin_LeftPad_Touch,
+ k_EControllerActionOrigin_LeftPad_Swipe,
+ k_EControllerActionOrigin_LeftPad_Click,
+ k_EControllerActionOrigin_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_LeftPad_DPadWest,
+ k_EControllerActionOrigin_LeftPad_DPadEast,
+ k_EControllerActionOrigin_RightPad_Touch,
+ k_EControllerActionOrigin_RightPad_Swipe,
+ k_EControllerActionOrigin_RightPad_Click,
+ k_EControllerActionOrigin_RightPad_DPadNorth,
+ k_EControllerActionOrigin_RightPad_DPadSouth,
+ k_EControllerActionOrigin_RightPad_DPadWest,
+ k_EControllerActionOrigin_RightPad_DPadEast,
+ k_EControllerActionOrigin_LeftTrigger_Pull,
+ k_EControllerActionOrigin_LeftTrigger_Click,
+ k_EControllerActionOrigin_RightTrigger_Pull,
+ k_EControllerActionOrigin_RightTrigger_Click,
+ k_EControllerActionOrigin_LeftStick_Move,
+ k_EControllerActionOrigin_LeftStick_Click,
+ k_EControllerActionOrigin_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_LeftStick_DPadWest,
+ k_EControllerActionOrigin_LeftStick_DPadEast,
+ k_EControllerActionOrigin_Gyro_Move,
+ k_EControllerActionOrigin_Gyro_Pitch,
+ k_EControllerActionOrigin_Gyro_Yaw,
+ k_EControllerActionOrigin_Gyro_Roll,
+
+ k_EControllerActionOrigin_Count
+};
+
+// ControllerHandle_t is used to refer to a specific controller.
+// This handle will consistently identify a controller, even if it is disconnected and re-connected
+typedef uint64 ControllerHandle_t;
+
+
+// These handles are used to refer to a specific in-game action or action set
+// All action handles should be queried during initialization for performance reasons
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+
+#pragma pack( push, 1 )
+
+struct ControllerAnalogActionData_t
+{
+ // Type of data coming from this action, this will match what got specified in the action set
+ EControllerSourceMode eMode;
+
+ // The current state of this action; will be delta updates for mouse actions
+ float x, y;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+struct ControllerDigitalActionData_t
+{
+ // The current state of this action; will be true if currently pressed
+ bool bState;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ // Init and Shutdown must be called when starting/ending use of this interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Pump callback/callresult events
+ // Note: SteamAPI_RunCallbacks will do this for you, so you should never need to call this directly.
+ virtual void RunFrame() = 0;
+
+ // Enumerate currently connected controllers
+ // handlesOut should point to a STEAM_CONTROLLER_MAX_COUNT sized array of ControllerHandle_t handles
+ // Returns the number of handles written to handlesOut
+ virtual int GetConnectedControllers( ControllerHandle_t *handlesOut ) = 0;
+
+ // Invokes the Steam overlay and brings up the binding screen
+ // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
+ virtual bool ShowBindingPanel( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTION SETS
+ // Lookup the handle for an Action Set. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerActionSetHandle_t GetActionSetHandle( const char *pszActionSetName ) = 0;
+
+ // Reconfigure the controller to use the specified action set (ie 'Menu', 'Walk' or 'Drive')
+ // This is cheap, and can be safely called repeatedly. It's often easier to repeatedly call it in
+ // your state loops, instead of trying to place it in all of your state transitions.
+ virtual void ActivateActionSet( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle ) = 0;
+ virtual ControllerActionSetHandle_t GetCurrentActionSet( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTIONS
+ // Lookup the handle for a digital action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerDigitalActionHandle_t GetDigitalActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of the supplied digital game action
+ virtual ControllerDigitalActionData_t GetDigitalActionData( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle ) = 0;
+
+ // Get the origin(s) for a digital action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ // Lookup the handle for an analog action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerAnalogActionHandle_t GetAnalogActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of these supplied analog game action
+ virtual ControllerAnalogActionData_t GetAnalogActionData( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle ) = 0;
+
+ // Get the origin(s) for an analog action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+
+
+ virtual void StopAnalogActionMomentum( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction ) = 0;
+
+ // Trigger a haptic pulse on a controller
+ virtual void TriggerHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "SteamController003"
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_135/isteamfriends.h b/lsteamclient/steamworks_sdk_135/isteamfriends.h
new file mode 100644
index 00000000..a63d8ea7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamfriends.h
@@ -0,0 +1,629 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1, // this doesn't get stored; the user has just done an Ignore on an friendship invite
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5, // this is stored; the user has explicit blocked this other user from comments/chat/etc
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+// friends group identifier type
+typedef int16 FriendsGroupID_t;
+
+// invalid friends group identifier constant
+const FriendsGroupID_t k_FriendsGroupID_Invalid = -1;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, OUT_STRUCT() FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+ // friends steam level
+ virtual int GetFriendSteamLevel( CSteamID steamIDFriend ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // friend grouping (tag) apis
+ // returns the number of friends groups
+ virtual int GetFriendsGroupCount() = 0;
+ // returns the friends group ID for the given index (invalid indices return k_FriendsGroupID_Invalid)
+ virtual FriendsGroupID_t GetFriendsGroupIDByIndex( int iFG ) = 0;
+ // returns the name for the given friends group (NULL in the case of invalid friends group IDs)
+ virtual const char *GetFriendsGroupName( FriendsGroupID_t friendsGroupID ) = 0;
+ // returns the number of members in a given friends group
+ virtual int GetFriendsGroupMembersCount( FriendsGroupID_t friendsGroupID ) = 0;
+ // gets up to nMembersCount members of the given friends group, if fewer exist than requested those positions' SteamIDs will be invalid
+ virtual void GetFriendsGroupMembersList( FriendsGroupID_t friendsGroupID, OUT_ARRAY_CALL(nMembersCount, GetFriendsGroupMembersCount, friendsGroupID ) CSteamID *pOutSteamIDMembers, int nMembersCount ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( ARRAY_COUNT(cClansToRequest) CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, OUT_STRUCT() CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends015"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_135/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_135/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_135/isteamgameserver.h b/lsteamclient/steamworks_sdk_135/isteamgameserver.h
new file mode 100644
index 00000000..c97ad6f5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamgameserver.h
@@ -0,0 +1,384 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_135/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_135/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_135/isteamhtmlsurface.h b/lsteamclient/steamworks_sdk_135/isteamhtmlsurface.h
new file mode 100644
index 00000000..f72fd6c0
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamhtmlsurface.h
@@ -0,0 +1,444 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to display html pages in a texture
+//
+//=============================================================================
+
+#ifndef ISTEAMHTMLSURFACE_H
+#define ISTEAMHTMLSURFACE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+typedef uint32 HHTMLBrowser;
+const uint32 INVALID_HTMLBROWSER = 0;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for displaying HTML pages and interacting with them
+//-----------------------------------------------------------------------------
+class ISteamHTMLSurface
+{
+public:
+ virtual ~ISteamHTMLSurface() {}
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Create a browser object for display of a html page, when creation is complete the call handle
+ // will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser.
+ // The user agent string is a substring to be added to the general user agent string so you can
+ // identify your client on web servers.
+ // The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if
+ // you do not require this functionality.
+ virtual SteamAPICall_t CreateBrowser( const char *pchUserAgent, const char *pchUserCSS ) = 0;
+
+ // Call this when you are done with a html surface, this lets us free the resources being used by it
+ virtual void RemoveBrowser( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // Navigate to this URL, results in a HTML_StartRequest_t as the request commences
+ virtual void LoadURL( HHTMLBrowser unBrowserHandle, const char *pchURL, const char *pchPostData ) = 0;
+
+ // Tells the surface the size in pixels to display the surface
+ virtual void SetSize( HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight ) = 0;
+
+ // Stop the load of the current html page
+ virtual void StopLoad( HHTMLBrowser unBrowserHandle ) = 0;
+ // Reload (most likely from local cache) the current page
+ virtual void Reload( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate back in the page history
+ virtual void GoBack( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate forward in the page history
+ virtual void GoForward( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // add this header to any url requests from this browser
+ virtual void AddHeader( HHTMLBrowser unBrowserHandle, const char *pchKey, const char *pchValue ) = 0;
+ // run this javascript script in the currently loaded page
+ virtual void ExecuteJavascript( HHTMLBrowser unBrowserHandle, const char *pchScript ) = 0;
+
+ enum EHTMLMouseButton
+ {
+ eHTMLMouseButton_Left = 0,
+ eHTMLMouseButton_Right = 1,
+ eHTMLMouseButton_Middle = 2,
+ };
+
+ // Mouse click and mouse movement commands
+ virtual void MouseUp( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDown( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDoubleClick( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ // x and y are relative to the HTML bounds
+ virtual void MouseMove( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+ // nDelta is pixels of scroll
+ virtual void MouseWheel( HHTMLBrowser unBrowserHandle, int32 nDelta ) = 0;
+
+ enum EMouseCursor
+ {
+ dc_user = 0,
+ dc_none,
+ dc_arrow,
+ dc_ibeam,
+ dc_hourglass,
+ dc_waitarrow,
+ dc_crosshair,
+ dc_up,
+ dc_sizenw,
+ dc_sizese,
+ dc_sizene,
+ dc_sizesw,
+ dc_sizew,
+ dc_sizee,
+ dc_sizen,
+ dc_sizes,
+ dc_sizewe,
+ dc_sizens,
+ dc_sizeall,
+ dc_no,
+ dc_hand,
+ dc_blank, // don't show any custom cursor, just use your default
+ dc_middle_pan,
+ dc_north_pan,
+ dc_north_east_pan,
+ dc_east_pan,
+ dc_south_east_pan,
+ dc_south_pan,
+ dc_south_west_pan,
+ dc_west_pan,
+ dc_north_west_pan,
+ dc_alias,
+ dc_cell,
+ dc_colresize,
+ dc_copycur,
+ dc_verticaltext,
+ dc_rowresize,
+ dc_zoomin,
+ dc_zoomout,
+ dc_help,
+ dc_custom,
+
+ dc_last, // custom cursors start from this value and up
+ };
+
+ enum EHTMLKeyModifiers
+ {
+ k_eHTMLKeyModifier_None = 0,
+ k_eHTMLKeyModifier_AltDown = 1 << 0,
+ k_eHTMLKeyModifier_CtrlDown = 1 << 1,
+ k_eHTMLKeyModifier_ShiftDown = 1 << 2,
+ };
+
+ // keyboard interactions, native keycode is the virtual key code value from your OS
+ virtual void KeyDown( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ virtual void KeyUp( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ // cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press)
+ virtual void KeyChar( HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+
+ // programmatically scroll this many pixels on the page
+ virtual void SetHorizontalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+ virtual void SetVerticalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+
+ // tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things
+ virtual void SetKeyFocus( HHTMLBrowser unBrowserHandle, bool bHasKeyFocus ) = 0;
+
+ // open the current pages html code in the local editor of choice, used for debugging
+ virtual void ViewSource( HHTMLBrowser unBrowserHandle ) = 0;
+ // copy the currently selected text on the html page to the local clipboard
+ virtual void CopyToClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+ // paste from the local clipboard to the current html page
+ virtual void PasteFromClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element
+ virtual void Find( HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse ) = 0;
+ // cancel a currently running find
+ virtual void StopFind( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // return details about the link at position x,y on the current page
+ virtual void GetLinkAtPosition( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+
+ // set a webcookie for the hostname in question
+ virtual void SetCookie( const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath = "/", RTime32 nExpires = 0, bool bSecure = false, bool bHTTPOnly = false ) = 0;
+
+ // Zoom the current page by flZoom ( from 0.0 to 2.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care)
+ virtual void SetPageScaleFactor( HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY ) = 0;
+
+ // Enable/disable low-resource background mode, where javascript and repaint timers are throttled, resources are
+ // more aggressively purged from memory, and audio/video elements are paused. When background mode is enabled,
+ // all HTML5 video and audio objects will execute ".pause()" and gain the property "._steam_background_paused = 1".
+ // When background mode is disabled, any video or audio objects with that property will resume with ".play()".
+ virtual void SetBackgroundMode( HHTMLBrowser unBrowserHandle, bool bBackgroundMode ) = 0;
+
+ // CALLBACKS
+ //
+ // These set of functions are used as responses to callback requests
+ //
+
+ // You MUST call this in response to a HTML_StartRequest_t callback
+ // Set bAllowed to true to allow this navigation, false to cancel it and stay
+ // on the current page. You can use this feature to limit the valid pages
+ // allowed in your HTML surface.
+ virtual void AllowStartRequest( HHTMLBrowser unBrowserHandle, bool bAllowed ) = 0;
+
+ // You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback
+ // Set bResult to true for the OK option of a confirm, use false otherwise
+ virtual void JSDialogResponse( HHTMLBrowser unBrowserHandle, bool bResult ) = 0;
+
+ // You MUST call this in response to a HTML_FileOpenDialog_t callback
+ virtual void FileLoadDialogResponse( HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles ) = 0;
+};
+
+#define STEAMHTMLSURFACE_INTERFACE_VERSION "STEAMHTMLSURFACE_INTERFACE_VERSION_003"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser is ready for use
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_BrowserReady_t, k_iSteamHTMLSurfaceCallbacks + 1 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this browser is now fully created and ready to navigate to pages
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser has a pending paint
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_NeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 2)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint
+CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called
+CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture
+CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture
+CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update
+CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update
+CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update
+CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update
+CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered
+CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages
+END_DEFINE_CALLBACK_12()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser wanted to navigate to a new page
+// NOTE - you MUST call AllowStartRequest in response to this callback
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_StartRequest_t, k_iSteamHTMLSurfaceCallbacks + 3)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface navigating
+CALLBACK_MEMBER(1, const char *, pchURL) // the url they wish to navigate to
+CALLBACK_MEMBER(2, const char *, pchTarget) // the html link target type (i.e _blank, _self, _parent, _top )
+CALLBACK_MEMBER(3, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER(4, bool, bIsRedirect) // true if this was a http/html redirect from the last load request
+END_DEFINE_CALLBACK_5()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser has been requested to close due to user interaction (usually from a javascript window.close() call)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_CloseBrowser_t, k_iSteamHTMLSurfaceCallbacks + 4)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser is navigating to a new url
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_URLChanged_t, k_iSteamHTMLSurfaceCallbacks + 5 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface navigating
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the url they wish to navigate to
+CALLBACK_MEMBER( 2, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER( 3, bool, bIsRedirect ) // true if this was a http/html redirect from the last load request
+CALLBACK_MEMBER( 4, const char *, pchPageTitle ) // the title of the page
+CALLBACK_MEMBER( 5, bool, bNewNavigation ) // true if this was from a fresh tab and not a click on an existing page
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A page is finished loading
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FinishedRequest_t, k_iSteamHTMLSurfaceCallbacks + 6 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+CALLBACK_MEMBER( 2, const char *, pchPageTitle ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a request to load this url in a new tab
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_OpenLinkInNewTab_t, k_iSteamHTMLSurfaceCallbacks + 7 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the page has a new title now
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ChangedTitle_t, k_iSteamHTMLSurfaceCallbacks + 8 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: results from a search
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SearchResults_t, k_iSteamHTMLSurfaceCallbacks + 9 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unResults ) //
+CALLBACK_MEMBER( 2, uint32, unCurrentMatch ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: page history status changed on the ability to go backwards and forward
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_CanGoBackAndForward_t, k_iSteamHTMLSurfaceCallbacks + 10 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, bool, bCanGoBack ) //
+CALLBACK_MEMBER( 2, bool, bCanGoForward ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the horizontal scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HorizontalScroll_t, k_iSteamHTMLSurfaceCallbacks + 11 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool , bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the vertical scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_VerticalScroll_t, k_iSteamHTMLSurfaceCallbacks + 12 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool, bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetLinkAtPosition call
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_LinkAtPosition_t, k_iSteamHTMLSurfaceCallbacks + 13 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, x ) // NOTE - Not currently set
+CALLBACK_MEMBER( 2, uint32, y ) // NOTE - Not currently set
+CALLBACK_MEMBER( 3, const char *, pchURL ) //
+CALLBACK_MEMBER( 4, bool, bInput ) //
+CALLBACK_MEMBER( 5, bool, bLiveLink ) //
+END_DEFINE_CALLBACK_6()
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript alert dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSAlert_t, k_iSteamHTMLSurfaceCallbacks + 14 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript confirmation dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSConfirm_t, k_iSteamHTMLSurfaceCallbacks + 15 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: when received show a file open dialog
+// then call FileLoadDialogResponse with the file(s) the user selected.
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FileOpenDialog_t, k_iSteamHTMLSurfaceCallbacks + 16 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+CALLBACK_MEMBER( 2, const char *, pchInitialFile ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new html window has been created
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_NewWindow_t, k_iSteamHTMLSurfaceCallbacks + 21 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the current surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the page to load
+CALLBACK_MEMBER( 2, uint32, unX ) // the x pos into the page to display the popup
+CALLBACK_MEMBER( 3, uint32, unY ) // the y pos into the page to display the popup
+CALLBACK_MEMBER( 4, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 5, uint32, unTall ) // the total height of the pBGRA texture
+CALLBACK_MEMBER( 6, HHTMLBrowser, unNewWindow_BrowserHandle ) // the handle of the new window surface
+END_DEFINE_CALLBACK_7()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: change the cursor to display
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SetCursor_t, k_iSteamHTMLSurfaceCallbacks + 22 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, eMouseCursor ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: informational message from the browser
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_StatusText_t, k_iSteamHTMLSurfaceCallbacks + 23 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ShowToolTip_t, k_iSteamHTMLSurfaceCallbacks + 24 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: update the text of an existing tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_UpdateToolTip_t, k_iSteamHTMLSurfaceCallbacks + 25 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: hide the tooltip you are showing
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HideToolTip_t, k_iSteamHTMLSurfaceCallbacks + 26 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMHTMLSURFACE_H
diff --git a/lsteamclient/steamworks_sdk_135/isteamhttp.h b/lsteamclient/steamworks_sdk_135/isteamhttp.h
new file mode 100644
index 00000000..d96a631f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamhttp.h
@@ -0,0 +1,210 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+typedef uint32 HTTPCookieContainerHandle;
+#define INVALID_HTTPCOOKIE_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Both http and https are supported,
+ // so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+
+ // Creates a cookie container handle which you must later free with ReleaseCookieContainer(). If bAllowResponsesToModify=true
+ // than any response to your requests using this cookie container may add new cookies which may be transmitted with
+ // future requests. If bAllowResponsesToModify=false than only cookies you explicitly set will be sent. This API is just for
+ // during process lifetime, after steam restarts no cookies are persisted and you have no way to access the cookie container across
+ // repeat executions of your process.
+ virtual HTTPCookieContainerHandle CreateCookieContainer( bool bAllowResponsesToModify ) = 0;
+
+ // Release a cookie container you are finished using, freeing it's memory
+ virtual bool ReleaseCookieContainer( HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Adds a cookie to the specified cookie container that will be used with future requests.
+ virtual bool SetCookie( HTTPCookieContainerHandle hCookieContainer, const char *pchHost, const char *pchUrl, const char *pchCookie ) = 0;
+
+ // Set the cookie container to use for a HTTP request
+ virtual bool SetHTTPRequestCookieContainer( HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Set the extra user agent info for a request, this doesn't clobber the normal user agent, it just adds the extra info on the end
+ virtual bool SetHTTPRequestUserAgentInfo( HTTPRequestHandle hRequest, const char *pchUserAgentInfo ) = 0;
+
+ // Set that https request should require verified SSL certificate via machines certificate trust store
+ virtual bool SetHTTPRequestRequiresVerifiedCertificate( HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate ) = 0;
+
+ // Set an absolute timeout on the HTTP request, this is just a total time timeout different than the network activity timeout
+ // which can bump everytime we get more data
+ virtual bool SetHTTPRequestAbsoluteTimeoutMS( HTTPRequestHandle hRequest, uint32 unMilliseconds ) = 0;
+
+ // Check if the reason the request failed was because we timed it out (rather than some harder failure)
+ virtual bool GetHTTPRequestWasTimedOut( HTTPRequestHandle hRequest, bool *pbWasTimedOut ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+
+ uint32 m_unBodySize; // Same as GetHTTPResponseBodySize()
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_135/isteaminventory.h b/lsteamclient/steamworks_sdk_135/isteaminventory.h
new file mode 100644
index 00000000..b4cc4c38
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteaminventory.h
@@ -0,0 +1,354 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Inventory
+//
+//=============================================================================
+
+#ifndef ISTEAMINVENTORY_H
+#define ISTEAMINVENTORY_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// Every individual instance of an item has a globally-unique ItemInstanceID.
+// This ID is unique to the combination of (player, specific item instance)
+// and will not be transferred to another player or re-used for another item.
+typedef uint64 SteamItemInstanceID_t;
+
+static const SteamItemInstanceID_t k_SteamItemInstanceIDInvalid = ~(SteamItemInstanceID_t)0;
+
+// Types of items in your game are identified by a 32-bit "item definition number".
+// Valid definition numbers are between 1 and 999999999; numbers less than or equal to
+// zero are invalid, and numbers greater than or equal to one billion (1x10^9) are
+// reserved for internal Steam use.
+typedef int32 SteamItemDef_t;
+
+
+enum ESteamItemFlags
+{
+ // Item status flags - these flags are permanently attached to specific item instances
+ k_ESteamItemNoTrade = 1 << 0, // This item is account-locked and cannot be traded or given away.
+
+ // Action confirmation flags - these flags are set one time only, as part of a result set
+ k_ESteamItemRemoved = 1 << 8, // The item has been destroyed, traded away, expired, or otherwise invalidated
+ k_ESteamItemConsumed = 1 << 9, // The item quantity has been decreased by 1 via ConsumeItem API.
+
+ // All other flag bits are currently reserved for internal Steam use at this time.
+ // Do not assume anything about the state of other flags which are not defined here.
+};
+
+struct SteamItemDetails_t
+{
+ SteamItemInstanceID_t m_itemId;
+ SteamItemDef_t m_iDefinition;
+ uint16 m_unQuantity;
+ uint16 m_unFlags; // see ESteamItemFlags
+};
+
+typedef int32 SteamInventoryResult_t;
+
+static const SteamInventoryResult_t k_SteamInventoryResultInvalid = -1;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Inventory query and manipulation API
+//-----------------------------------------------------------------------------
+class ISteamInventory
+{
+public:
+
+ // INVENTORY ASYNC RESULT MANAGEMENT
+ //
+ // Asynchronous inventory queries always output a result handle which can be used with
+ // GetResultStatus, GetResultItems, etc. A SteamInventoryResultReady_t callback will
+ // be triggered when the asynchronous result becomes ready (or fails).
+ //
+
+ // Find out the status of an asynchronous inventory result handle. Possible values:
+ // k_EResultPending - still in progress
+ // k_EResultOK - done, result ready
+ // k_EResultExpired - done, result ready, maybe out of date (see DeserializeResult)
+ // k_EResultInvalidParam - ERROR: invalid API call parameters
+ // k_EResultServiceUnavailable - ERROR: service temporarily down, you may retry later
+ // k_EResultLimitExceeded - ERROR: operation would exceed per-user inventory limits
+ // k_EResultFail - ERROR: unknown / generic error
+ METHOD_DESC(Find out the status of an asynchronous inventory result handle.)
+ virtual EResult GetResultStatus( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Copies the contents of a result set into a flat array. The specific
+ // contents of the result set depend on which query which was used.
+ METHOD_DESC(Copies the contents of a result set into a flat array. The specific contents of the result set depend on which query which was used.)
+ virtual bool GetResultItems( SteamInventoryResult_t resultHandle,
+ OUT_ARRAY_COUNT( punOutItemsArraySize,Output array) SteamItemDetails_t *pOutItemsArray,
+ uint32 *punOutItemsArraySize ) = 0;
+
+ // Returns the server time at which the result was generated. Compare against
+ // the value of IClientUtils::GetServerRealTime() to determine age.
+ METHOD_DESC(Returns the server time at which the result was generated. Compare against the value of IClientUtils::GetServerRealTime() to determine age.)
+ virtual uint32 GetResultTimestamp( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Returns true if the result belongs to the target steam ID, false if the
+ // result does not. This is important when using DeserializeResult, to verify
+ // that a remote player is not pretending to have a different user's inventory.
+ METHOD_DESC(Returns true if the result belongs to the target steam ID or false if the result does not. This is important when using DeserializeResult to verify that a remote player is not pretending to have a different users inventory.)
+ virtual bool CheckResultSteamID( SteamInventoryResult_t resultHandle, CSteamID steamIDExpected ) = 0;
+
+ // Destroys a result handle and frees all associated memory.
+ METHOD_DESC(Destroys a result handle and frees all associated memory.)
+ virtual void DestroyResult( SteamInventoryResult_t resultHandle ) = 0;
+
+
+ // INVENTORY ASYNC QUERY
+ //
+
+ // Captures the entire state of the current user's Steam inventory.
+ // You must call DestroyResult on this handle when you are done with it.
+ // Returns false and sets *pResultHandle to zero if inventory is unavailable.
+ // Note: calls to this function are subject to rate limits and may return
+ // cached results if called too frequently. It is suggested that you call
+ // this function only when you are about to display the user's full inventory,
+ // or if you expect that the inventory may have changed.
+ METHOD_DESC(Captures the entire state of the current users Steam inventory.)
+ virtual bool GetAllItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+
+ // Captures the state of a subset of the current user's Steam inventory,
+ // identified by an array of item instance IDs. The results from this call
+ // can be serialized and passed to other players to "prove" that the current
+ // user owns specific items, without exposing the user's entire inventory.
+ // For example, you could call GetItemsByID with the IDs of the user's
+ // currently equipped cosmetic items and serialize this to a buffer, and
+ // then transmit this buffer to other players upon joining a game.
+ METHOD_DESC(Captures the state of a subset of the current users Steam inventory identified by an array of item instance IDs.)
+ virtual bool GetItemsByID( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT( unCountInstanceIDs ) const SteamItemInstanceID_t *pInstanceIDs, uint32 unCountInstanceIDs ) = 0;
+
+
+ // RESULT SERIALIZATION AND AUTHENTICATION
+ //
+ // Serialized result sets contain a short signature which can't be forged
+ // or replayed across different game sessions. A result set can be serialized
+ // on the local client, transmitted to other players via your game networking,
+ // and deserialized by the remote players. This is a secure way of preventing
+ // hackers from lying about posessing rare/high-value items.
+
+ // Serializes a result set with signature bytes to an output buffer. Pass
+ // NULL as an output buffer to get the required size via punOutBufferSize.
+ // The size of a serialized result depends on the number items which are being
+ // serialized. When securely transmitting items to other players, it is
+ // recommended to use "GetItemsByID" first to create a minimal result set.
+ // Results have a built-in timestamp which will be considered "expired" after
+ // an hour has elapsed. See DeserializeResult for expiration handling.
+ virtual bool SerializeResult( SteamInventoryResult_t resultHandle, OUT_BUFFER_COUNT(punOutBufferSize) void *pOutBuffer, uint32 *punOutBufferSize ) = 0;
+
+ // Deserializes a result set and verifies the signature bytes. Returns false
+ // if bRequireFullOnlineVerify is set but Steam is running in Offline mode.
+ // Otherwise returns true and then delivers error codes via GetResultStatus.
+ //
+ // The bRESERVED_MUST_BE_FALSE flag is reserved for future use and should not
+ // be set to true by your game at this time.
+ //
+ // DeserializeResult has a potential soft-failure mode where the handle status
+ // is set to k_EResultExpired. GetResultItems() still succeeds in this mode.
+ // The "expired" result could indicate that the data may be out of date - not
+ // just due to timed expiration (one hour), but also because one of the items
+ // in the result set may have been traded or consumed since the result set was
+ // generated. You could compare the timestamp from GetResultTimestamp() to
+ // ISteamUtils::GetServerRealTime() to determine how old the data is. You could
+ // simply ignore the "expired" result code and continue as normal, or you
+ // could challenge the player with expired data to send an updated result set.
+ virtual bool DeserializeResult( SteamInventoryResult_t *pOutResultHandle, BUFFER_COUNT(punOutBufferSize) const void *pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE = false ) = 0;
+
+
+ // INVENTORY ASYNC MODIFICATION
+ //
+
+ // GenerateItems() creates one or more items and then generates a SteamInventoryCallback_t
+ // notification with a matching nCallbackContext parameter. This API is insecure, and could
+ // be abused by hacked clients. It is, however, very useful as a development cheat or as
+ // a means of prototyping item-related features for your game. The use of GenerateItems can
+ // be restricted to certain item definitions or fully blocked via the Steamworks website.
+ // If punArrayQuantity is not NULL, it should be the same length as pArrayItems and should
+ // describe the quantity of each item to generate.
+ virtual bool GenerateItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, ARRAY_COUNT(unArrayLength) const uint32 *punArrayQuantity, uint32 unArrayLength ) = 0;
+
+ // GrantPromoItems() checks the list of promotional items for which the user may be eligible
+ // and grants the items (one time only). On success, the result set will include items which
+ // were granted, if any. If no items were granted because the user isn't eligible for any
+ // promotions, this is still considered a success.
+ METHOD_DESC(GrantPromoItems() checks the list of promotional items for which the user may be eligible and grants the items (one time only).)
+ virtual bool GrantPromoItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+ // AddPromoItem() / AddPromoItems() are restricted versions of GrantPromoItems(). Instead of
+ // scanning for all eligible promotional items, the check is restricted to a single item
+ // definition or set of item definitions. This can be useful if your game has custom UI for
+ // showing a specific promo item to the user.
+ virtual bool AddPromoItem( SteamInventoryResult_t *pResultHandle, SteamItemDef_t itemDef ) = 0;
+ virtual bool AddPromoItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, uint32 unArrayLength ) = 0;
+
+ // ConsumeItem() removes items from the inventory, permanently. They cannot be recovered.
+ // Not for the faint of heart - if your game implements item removal at all, a high-friction
+ // UI confirmation process is highly recommended. Similar to GenerateItems, punArrayQuantity
+ // can be NULL or else an array of the same length as pArrayItems which describe the quantity
+ // of each item to destroy. ConsumeItem can be restricted to certain item definitions or
+ // fully blocked via the Steamworks website to minimize support/abuse issues such as the
+ // clasic "my brother borrowed my laptop and deleted all of my rare items".
+ METHOD_DESC(ConsumeItem() removes items from the inventory permanently.)
+ virtual bool ConsumeItem( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity ) = 0;
+
+ // ExchangeItems() is an atomic combination of GenerateItems and DestroyItems. It can be
+ // used to implement crafting recipes or transmutations, or items which unpack themselves
+ // into other items. Like GenerateItems, this is a flexible and dangerous API which is
+ // meant for rapid prototyping. You can configure restrictions on ExchangeItems via the
+ // Steamworks website, such as limiting it to a whitelist of input/output combinations
+ // corresponding to recipes.
+ // (Note: although GenerateItems may be hard or impossible to use securely in your game,
+ // ExchangeItems is perfectly reasonable to use once the whitelists are set accordingly.)
+ virtual bool ExchangeItems( SteamInventoryResult_t *pResultHandle,
+ ARRAY_COUNT(unArrayGenerateLength) const SteamItemDef_t *pArrayGenerate, ARRAY_COUNT(unArrayGenerateLength) const uint32 *punArrayGenerateQuantity, uint32 unArrayGenerateLength,
+ ARRAY_COUNT(unArrayDestroyLength) const SteamItemInstanceID_t *pArrayDestroy, ARRAY_COUNT(unArrayDestroyLength) const uint32 *punArrayDestroyQuantity, uint32 unArrayDestroyLength ) = 0;
+
+
+ // TransferItemQuantity() is intended for use with items which are "stackable" (can have
+ // quantity greater than one). It can be used to split a stack into two, or to transfer
+ // quantity from one stack into another stack of identical items. To split one stack into
+ // two, pass k_SteamItemInstanceIDInvalid for itemIdDest and a new item will be generated.
+ virtual bool TransferItemQuantity( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest ) = 0;
+
+
+ // TIMED DROPS AND PLAYTIME CREDIT
+ //
+
+ // Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when
+ // active gameplay begins, and at least once every two minutes afterwards. The backend
+ // performs its own time calculations, so the precise timing of the heartbeat is not
+ // critical as long as you send at least one heartbeat every two minutes. Calling the
+ // function more often than that is not harmful, it will simply have no effect. Note:
+ // players may be able to spoof this message by hacking their client, so you should not
+ // attempt to use this as a mechanism to restrict playtime credits. It is simply meant
+ // to distinguish between being in any kind of gameplay situation vs the main menu or
+ // a pre-game launcher window. (If you are stingy with handing out playtime credit, it
+ // will only encourage players to run bots or use mouse/kb event simulators.)
+ //
+ // Playtime credit accumulation can be capped on a daily or weekly basis through your
+ // Steamworks configuration.
+ //
+ METHOD_DESC(Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when active gameplay begins and at least once every two minutes afterwards.)
+ virtual void SendItemDropHeartbeat() = 0;
+
+ // Playtime credit must be consumed and turned into item drops by your game. Only item
+ // definitions which are marked as "playtime item generators" can be spawned. The call
+ // will return an empty result set if there is not enough playtime credit for a drop.
+ // Your game should call TriggerItemDrop at an appropriate time for the user to receive
+ // new items, such as between rounds or while the player is dead. Note that players who
+ // hack their clients could modify the value of "dropListDefinition", so do not use it
+ // to directly control rarity. It is primarily useful during testing and development,
+ // where you may wish to perform experiments with different types of drops.
+ METHOD_DESC(Playtime credit must be consumed and turned into item drops by your game.)
+ virtual bool TriggerItemDrop( SteamInventoryResult_t *pResultHandle, SteamItemDef_t dropListDefinition ) = 0;
+
+
+ // IN-GAME TRADING
+ //
+ // TradeItems() implements limited in-game trading of items, if you prefer not to use
+ // the overlay or an in-game web browser to perform Steam Trading through the website.
+ // You should implement a UI where both players can see and agree to a trade, and then
+ // each client should call TradeItems simultaneously (+/- 5 seconds) with matching
+ // (but reversed) parameters. The result is the same as if both players performed a
+ // Steam Trading transaction through the web. Each player will get an inventory result
+ // confirming the removal or quantity changes of the items given away, and the new
+ // item instance id numbers and quantities of the received items.
+ // (Note: new item instance IDs are generated whenever an item changes ownership.)
+ virtual bool TradeItems( SteamInventoryResult_t *pResultHandle, CSteamID steamIDTradePartner,
+ ARRAY_COUNT(nArrayGiveLength) const SteamItemInstanceID_t *pArrayGive, ARRAY_COUNT(nArrayGiveLength) const uint32 *pArrayGiveQuantity, uint32 nArrayGiveLength,
+ ARRAY_COUNT(nArrayGetLength) const SteamItemInstanceID_t *pArrayGet, ARRAY_COUNT(nArrayGetLength) const uint32 *pArrayGetQuantity, uint32 nArrayGetLength ) = 0;
+
+
+ // ITEM DEFINITIONS
+ //
+ // Item definitions are a mapping of "definition IDs" (integers between 1 and 1000000)
+ // to a set of string properties. Some of these properties are required to display items
+ // on the Steam community web site. Other properties can be defined by applications.
+ // Use of these functions is optional; there is no reason to call LoadItemDefinitions
+ // if your game hardcodes the numeric definition IDs (eg, purple face mask = 20, blue
+ // weapon mod = 55) and does not allow for adding new item types without a client patch.
+ //
+
+ // LoadItemDefinitions triggers the automatic load and refresh of item definitions.
+ // Every time new item definitions are available (eg, from the dynamic addition of new
+ // item types while players are still in-game), a SteamInventoryDefinitionUpdate_t
+ // callback will be fired.
+ METHOD_DESC(LoadItemDefinitions triggers the automatic load and refresh of item definitions.)
+ virtual bool LoadItemDefinitions() = 0;
+
+ // GetItemDefinitionIDs returns the set of all defined item definition IDs (which are
+ // defined via Steamworks configuration, and not necessarily contiguous integers).
+ // If pItemDefIDs is null, the call will return true and *punItemDefIDsArraySize will
+ // contain the total size necessary for a subsequent call. Otherwise, the call will
+ // return false if and only if there is not enough space in the output array.
+ virtual bool GetItemDefinitionIDs(
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+
+ // GetItemDefinitionProperty returns a string property from a given item definition.
+ // Note that some properties (for example, "name") may be localized and will depend
+ // on the current Steam language settings (see ISteamApps::GetCurrentGameLanguage).
+ // Property names are always composed of ASCII letters, numbers, and/or underscores.
+ // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available
+ // property names.
+ virtual bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPropertyName,
+ OUT_STRING_COUNT(punValueBufferSize) char *pchValueBuffer, uint32 *punValueBufferSize ) = 0;
+};
+
+#define STEAMINVENTORY_INTERFACE_VERSION "STEAMINVENTORY_INTERFACE_V001"
+
+
+// SteamInventoryResultReady_t callbacks are fired whenever asynchronous
+// results transition from "Pending" to "OK" or an error state. There will
+// always be exactly one callback per handle.
+struct SteamInventoryResultReady_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 0 };
+ SteamInventoryResult_t m_handle;
+ EResult m_result;
+};
+
+
+// SteamInventoryFullUpdate_t callbacks are triggered when GetAllItems
+// successfully returns a result which is newer / fresher than the last
+// known result. (It will not trigger if the inventory hasn't changed,
+// or if results from two overlapping calls are reversed in flight and
+// the earlier result is already known to be stale/out-of-date.)
+// The normal ResultReady callback will still be triggered immediately
+// afterwards; this is an additional notification for your convenience.
+struct SteamInventoryFullUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 1 };
+ SteamInventoryResult_t m_handle;
+};
+
+
+// A SteamInventoryDefinitionUpdate_t callback is triggered whenever
+// item definitions have been updated, which could be in response to
+// LoadItemDefinitions() or any other async request which required
+// a definition update in order to process results from the server.
+struct SteamInventoryDefinitionUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_135/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_135/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_135/isteammatchmaking.h b/lsteamclient/steamworks_sdk_135/isteammatchmaking.h
new file mode 100644
index 00000000..80606dfd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteammatchmaking.h
@@ -0,0 +1,747 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) = 0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, OUT_STRUCT() CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, OUT_STRUCT() CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_135/isteammusic.h b/lsteamclient/steamworks_sdk_135/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_135/isteammusicremote.h b/lsteamclient/steamworks_sdk_135/isteammusicremote.h
new file mode 100644
index 00000000..5893ef4b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteammusicremote.h
@@ -0,0 +1,129 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSICREMOTE_H
+#define ISTEAMMUSICREMOTE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteammusic.h"
+
+#define k_SteamMusicNameMaxLength 255
+#define k_SteamMusicPNGMaxLength 65535
+
+
+class ISteamMusicRemote
+{
+public:
+ // Service Definition
+ virtual bool RegisterSteamMusicRemote( const char *pchName ) = 0;
+ virtual bool DeregisterSteamMusicRemote() = 0;
+ virtual bool BIsCurrentMusicRemote() = 0;
+ virtual bool BActivationSuccess( bool bValue ) = 0;
+
+ virtual bool SetDisplayName( const char *pchDisplayName ) = 0;
+ virtual bool SetPNGIcon_64x64( void *pvBuffer, uint32 cbBufferLength ) = 0;
+
+ // Abilities for the user interface
+ virtual bool EnablePlayPrevious(bool bValue) = 0;
+ virtual bool EnablePlayNext( bool bValue ) = 0;
+ virtual bool EnableShuffled( bool bValue ) = 0;
+ virtual bool EnableLooped( bool bValue ) = 0;
+ virtual bool EnableQueue( bool bValue ) = 0;
+ virtual bool EnablePlaylists( bool bValue ) = 0;
+
+ // Status
+ virtual bool UpdatePlaybackStatus( AudioPlayback_Status nStatus ) = 0;
+ virtual bool UpdateShuffled( bool bValue ) = 0;
+ virtual bool UpdateLooped( bool bValue ) = 0;
+ virtual bool UpdateVolume( float flValue ) = 0; // volume is between 0.0 and 1.0
+
+ // Current Entry
+ virtual bool CurrentEntryWillChange() = 0;
+ virtual bool CurrentEntryIsAvailable( bool bAvailable ) = 0;
+ virtual bool UpdateCurrentEntryText( const char *pchText ) = 0;
+ virtual bool UpdateCurrentEntryElapsedSeconds( int nValue ) = 0;
+ virtual bool UpdateCurrentEntryCoverArt( void *pvBuffer, uint32 cbBufferLength ) = 0;
+ virtual bool CurrentEntryDidChange() = 0;
+
+ // Queue
+ virtual bool QueueWillChange() = 0;
+ virtual bool ResetQueueEntries() = 0;
+ virtual bool SetQueueEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentQueueEntry( int nID ) = 0;
+ virtual bool QueueDidChange() = 0;
+
+ // Playlist
+ virtual bool PlaylistWillChange() = 0;
+ virtual bool ResetPlaylistEntries() = 0;
+ virtual bool SetPlaylistEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentPlaylistEntry( int nID ) = 0;
+ virtual bool PlaylistDidChange() = 0;
+};
+
+#define STEAMMUSICREMOTE_INTERFACE_VERSION "STEAMMUSICREMOTE_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillActivate_t, k_iSteamMusicRemoteCallbacks + 1)
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillDeactivate_t, k_iSteamMusicRemoteCallbacks + 2 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteToFront_t, k_iSteamMusicRemoteCallbacks + 3 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWillQuit_t, k_iSteamMusicRemoteCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlay_t, k_iSteamMusicRemoteCallbacks + 5 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPause_t, k_iSteamMusicRemoteCallbacks + 6 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayPrevious_t, k_iSteamMusicRemoteCallbacks + 7 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayNext_t, k_iSteamMusicRemoteCallbacks + 8 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsShuffled_t, k_iSteamMusicRemoteCallbacks + 9 )
+ CALLBACK_MEMBER( 0, bool, m_bShuffled )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsLooped_t, k_iSteamMusicRemoteCallbacks + 10 )
+ CALLBACK_MEMBER(0, bool, m_bLooped )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsVolume_t, k_iSteamMusicCallbacks + 11 )
+ CALLBACK_MEMBER(0, float, m_flNewVolume)
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsQueueEntry_t, k_iSteamMusicCallbacks + 12 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsPlaylistEntry_t, k_iSteamMusicCallbacks + 13 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayingRepeatStatus_t, k_iSteamMusicRemoteCallbacks + 14 )
+ CALLBACK_MEMBER(0, int, m_nPlayingRepeatStatus )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+
+#endif // #define ISTEAMMUSICREMOTE_H
diff --git a/lsteamclient/steamworks_sdk_135/isteamnetworking.h b/lsteamclient/steamworks_sdk_135/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_135/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_135/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_135/isteamremotestorage.h b/lsteamclient/steamworks_sdk_135/isteamremotestorage.h
new file mode 100644
index 00000000..e85e4c81
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamremotestorage.h
@@ -0,0 +1,675 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0, // normal Workshop item that can be subscribed to
+ k_EWorkshopFileTypeMicrotransaction = 1, // Workshop item that is meant to be voted on for the purpose of selling in-game
+ k_EWorkshopFileTypeCollection = 2, // a collection of Workshop or Greenlight items
+ k_EWorkshopFileTypeArt = 3, // artwork
+ k_EWorkshopFileTypeVideo = 4, // external video
+ k_EWorkshopFileTypeScreenshot = 5, // screenshot
+ k_EWorkshopFileTypeGame = 6, // Greenlight game entry
+ k_EWorkshopFileTypeSoftware = 7, // Greenlight software entry
+ k_EWorkshopFileTypeConcept = 8, // Greenlight concept
+ k_EWorkshopFileTypeWebGuide = 9, // Steam web guide
+ k_EWorkshopFileTypeIntegratedGuide = 10, // application integrated guide
+ k_EWorkshopFileTypeMerch = 11, // Workshop merchandise meant to be voted on for the purpose of being sold
+ k_EWorkshopFileTypeControllerBinding = 12, // Steam Controller bindings
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13, // internal
+ k_EWorkshopFileTypeSteamVideo = 14, // Steam video
+ k_EWorkshopFileTypeGameManagedItem = 15, // managed completely by the game, not the user, and not shown on the web
+
+ // Update k_EWorkshopFileTypeMax if you add values.
+ k_EWorkshopFileTypeMax = 16
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+ k_EWorkshopVoteLater = 3,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+
+ virtual SteamAPICall_t FileWriteAsync( const char *pchFile, const void *pvData, uint32 cubData ) = 0;
+
+ virtual SteamAPICall_t FileReadAsync( const char *pchFile, uint32 nOffset, uint32 cubToRead ) = 0;
+ virtual bool FileReadAsyncComplete( SteamAPICall_t hReadCall, void *pvBuffer, uint32 cubToRead ) = 0;
+
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, OUT_STRUCT() CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION013"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ UGCHandle_t m_hFile; // The new content
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileWriteAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileWriteAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 31 };
+ EResult m_eResult; // result
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileReadAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileReadAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 32 };
+ SteamAPICall_t m_hFileReadAsync; // call handle of the async read which was made
+ EResult m_eResult; // result
+ uint32 m_nOffset; // offset in the file this read was at
+ uint32 m_cubRead; // amount read - will the <= the amount requested
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_135/isteamscreenshots.h b/lsteamclient/steamworks_sdk_135/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_135/isteamugc.h b/lsteamclient/steamworks_sdk_135/isteamugc.h
new file mode 100644
index 00000000..2ceec5d7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamugc.h
@@ -0,0 +1,385 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+ k_EUGCMatchingUGCType_GameManagedItems = 12, // game managed items (not managed by users)
+ k_EUGCMatchingUGCType_All = ~0, // return everything
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+ k_EUGCQuery_RankedByTotalUniqueSubscriptions = 12,
+};
+
+enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0, // The item update handle was invalid, job might be finished, listen too SubmitItemUpdateResult_t
+ k_EItemUpdateStatusPreparingConfig = 1, // The item update is processing configuration data
+ k_EItemUpdateStatusPreparingContent = 2, // The item update is reading and processing content files
+ k_EItemUpdateStatusUploadingContent = 3, // The item update is uploading content changes to Steam
+ k_EItemUpdateStatusUploadingPreviewFile = 4, // The item update is uploading new preview file image
+ k_EItemUpdateStatusCommittingChanges = 5 // The item update is committing all changes
+};
+
+enum EItemState
+{
+ k_EItemStateNone = 0, // item not tracked on client
+ k_EItemStateSubscribed = 1, // current user is subscribed to this item. Not just cached.
+ k_EItemStateLegacyItem = 2, // item was created with ISteamRemoteStorage
+ k_EItemStateInstalled = 4, // item is installed and usable (but maybe out of date)
+ k_EItemStateNeedsUpdate = 8, // items needs an update. Either because it's not installed yet or creator updated content
+ k_EItemStateDownloading = 16, // item update is currently downloading
+ k_EItemStateDownloadPending = 32, // DownloadItem() was called for this item, content isn't available until DownloadItemResult_t is fired
+};
+
+enum EItemStatistic
+{
+ k_EItemStatistic_NumSubscriptions = 0,
+ k_EItemStatistic_NumFavorites = 1,
+ k_EItemStatistic_NumFollowers = 2,
+ k_EItemStatistic_NumUniqueSubscriptions = 3,
+ k_EItemStatistic_NumUniqueFavorites = 4,
+ k_EItemStatistic_NumUniqueFollowers = 5,
+ k_EItemStatistic_NumUniqueWebsiteViews = 6,
+ k_EItemStatistic_ReportScore = 7,
+};
+
+const uint32 kNumUGCResultsPerPage = 50;
+const uint32 k_cchDeveloperMetadataMax = 5000;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+ // collection details
+ uint32 m_unNumChildren;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for the details of the given published file ids (the RequestUGCDetails call is deprecated and replaced with this)
+ virtual UGCQueryHandle_t CreateQueryUGCDetailsRequest( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+
+ // Send the query to Steam
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+ virtual bool GetQueryUGCPreviewURL( UGCQueryHandle_t handle, uint32 index, char *pchURL, uint32 cchURLSize ) = 0;
+ virtual bool GetQueryUGCMetadata( UGCQueryHandle_t handle, uint32 index, char *pchMetadata, uint32 cchMetadatasize ) = 0;
+ virtual bool GetQueryUGCChildren( UGCQueryHandle_t handle, uint32 index, PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0;
+ virtual bool GetQueryUGCStatistic( UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 *pStatValue ) = 0;
+ virtual uint32 GetQueryUGCNumAdditionalPreviews( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCAdditionalPreview( UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char *pchURLOrVideoID, uint32 cchURLSize, bool *pbIsImage ) = 0;
+ virtual uint32 GetQueryUGCNumKeyValueTags( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCKeyValueTag( UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char *pchKey, uint32 cchKeySize, char *pchValue, uint32 cchValueSize ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnKeyValueTags( UGCQueryHandle_t handle, bool bReturnKeyValueTags ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnMetadata( UGCQueryHandle_t handle, bool bReturnMetadata ) = 0;
+ virtual bool SetReturnChildren( UGCQueryHandle_t handle, bool bReturnChildren ) = 0;
+ virtual bool SetReturnAdditionalPreviews( UGCQueryHandle_t handle, bool bReturnAdditionalPreviews ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetLanguage( UGCQueryHandle_t handle, const char *pchLanguage ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+ virtual bool AddRequiredKeyValueTag( UGCQueryHandle_t handle, const char *pKey, const char *pValue ) = 0;
+
+ // DEPRECATED - Use CreateQueryUGCDetailsRequest call above instead!
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+ // Steam Workshop Creator API
+ virtual SteamAPICall_t CreateItem( AppId_t nConsumerAppId, EWorkshopFileType eFileType ) = 0; // create new item for this app with no content attached yet
+
+ virtual UGCUpdateHandle_t StartItemUpdate( AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID ) = 0; // start an UGC item update. Set changed properties before commiting update with CommitItemUpdate()
+
+ virtual bool SetItemTitle( UGCUpdateHandle_t handle, const char *pchTitle ) = 0; // change the title of an UGC item
+ virtual bool SetItemDescription( UGCUpdateHandle_t handle, const char *pchDescription ) = 0; // change the description of an UGC item
+ virtual bool SetItemUpdateLanguage( UGCUpdateHandle_t handle, const char *pchLanguage ) = 0; // specify the language of the title or description that will be set
+ virtual bool SetItemMetadata( UGCUpdateHandle_t handle, const char *pchMetaData ) = 0; // change the metadata of an UGC item (max = k_cchDeveloperMetadataMax)
+ virtual bool SetItemVisibility( UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item
+ virtual bool SetItemTags( UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item
+ virtual bool SetItemContent( UGCUpdateHandle_t handle, const char *pszContentFolder ) = 0; // update item content from this local folder
+ virtual bool SetItemPreview( UGCUpdateHandle_t handle, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file, which must be under 1MB in size
+ virtual bool RemoveItemKeyValueTags( UGCUpdateHandle_t handle, const char *pchKey ) = 0; // remove any existing key-value tags with the specified key
+ virtual bool AddItemKeyValueTag( UGCUpdateHandle_t handle, const char *pchKey, const char *pchValue ) = 0; // add new key-value tags for the item. Note that there can be multiple values for a tag.
+
+ virtual SteamAPICall_t SubmitItemUpdate( UGCUpdateHandle_t handle, const char *pchChangeNote ) = 0; // commit update process started with StartItemUpdate()
+ virtual EItemUpdateStatus GetItemUpdateProgress( UGCUpdateHandle_t handle, uint64 *punBytesProcessed, uint64* punBytesTotal ) = 0;
+
+ // Steam Workshop Consumer API
+ virtual SteamAPICall_t SetUserItemVote( PublishedFileId_t nPublishedFileID, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserItemVote( PublishedFileId_t nPublishedFileID ) = 0;
+ virtual SteamAPICall_t AddItemToFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ virtual SteamAPICall_t RemoveItemFromFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ virtual SteamAPICall_t SubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // subscribe to this item, will be installed ASAP
+ virtual SteamAPICall_t UnsubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // unsubscribe from this item, will be uninstalled after game quits
+ virtual uint32 GetNumSubscribedItems() = 0; // number of subscribed items
+ virtual uint32 GetSubscribedItems( PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; // all subscribed item PublishFileIDs
+
+ // get EItemState flags about item on this client
+ virtual uint32 GetItemState( PublishedFileId_t nPublishedFileID ) = 0;
+
+ // get info about currently installed content on disc for items that have k_EItemStateInstalled set
+ // if k_EItemStateLegacyItem is set, pchFolder contains the path to the legacy file itself (not a folder)
+ virtual bool GetItemInstallInfo( PublishedFileId_t nPublishedFileID, uint64 *punSizeOnDisk, char *pchFolder, uint32 cchFolderSize, uint32 *punTimeStamp ) = 0;
+
+ // get info about pending update for items that have k_EItemStateNeedsUpdate set. punBytesTotal will be valid after download started once
+ virtual bool GetItemDownloadInfo( PublishedFileId_t nPublishedFileID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // download new or update already installed item. If function returns true, wait for DownloadItemResult_t. If the item is already installed,
+ // then files on disk should not be used until callback received. If item is not subscribed to, it will be cached for some time.
+ // If bHighPriority is set, any other item download will be suspended and this item downloaded ASAP.
+ virtual bool DownloadItem( PublishedFileId_t nPublishedFileID, bool bHighPriority ) = 0;
+
+ // game servers can set a specific workshop folder before issuing any UGC commands.
+ // This is helpful if you want to support multiple game servers running out of the same install folder
+ virtual bool BInitWorkshopForGameServer( DepotId_t unWorkshopDepotID, const char *pszFolder ) = 0;
+
+ // SuspendDownloads( true ) will suspend all workshop downloads until SuspendDownloads( false ) is called or the game ends
+ virtual void SuspendDownloads( bool bSuspend ) = 0;
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION007"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::CreateItem()
+//-----------------------------------------------------------------------------
+struct CreateItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 3 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId; // new item got this UGC PublishFileID
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::SubmitItemUpdate()
+//-----------------------------------------------------------------------------
+struct SubmitItemUpdateResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 4 };
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a Workshop item has been installed or updated
+//-----------------------------------------------------------------------------
+struct ItemInstalled_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 5 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of DownloadItem(), existing item files can be accessed again
+//-----------------------------------------------------------------------------
+struct DownloadItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 6 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: result of AddItemToFavorites() or RemoveItemFromFavorites()
+//-----------------------------------------------------------------------------
+struct UserFavoriteItemsListChanged_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 7 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bWasAddRequest;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SetUserItemVote()
+//-----------------------------------------------------------------------------
+struct SetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 8 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVoteUp;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserItemVote()
+//-----------------------------------------------------------------------------
+struct GetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 9 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVotedUp;
+ bool m_bVotedDown;
+ bool m_bVoteSkipped;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_135/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_135/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_135/isteamuser.h b/lsteamclient/steamworks_sdk_135/isteamuser.h
new file mode 100644
index 00000000..2fd9ee4f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamuser.h
@@ -0,0 +1,380 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+ // Requests a URL which authenticates an in-game browser for store check-out,
+ // and then redirects to the specified URL. As long as the in-game browser
+ // accepts and handles session cookies, Steam microtransaction checkout pages
+ // will automatically recognize the user instead of presenting a login page.
+ // The result of this API call will be a StoreAuthURLResponse_t callback.
+ // NOTE: The URL has a very short lifetime to prevent history-snooping attacks,
+ // so you should only call this API when you are about to launch the browser,
+ // or else immediately navigate to the result URL using a hidden browser window.
+ // NOTE 2: The resulting authorization cookie has an expiration time of one day,
+ // so it would be a good idea to request and visit a new auth URL every 12 hours.
+ virtual SteamAPICall_t RequestStoreAuthURL( const char *pchRedirectURL ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser018"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+ bool m_bStillRetrying;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Signaled whenever licenses change
+//-----------------------------------------------------------------------------
+struct LicensesUpdated_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 25 };
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to ISteamUser::RequestStoreAuthURL
+//-----------------------------------------------------------------------------
+struct StoreAuthURLResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 65 };
+ char m_szURL[512];
+};
+
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_135/isteamuserstats.h b/lsteamclient/steamworks_sdk_135/isteamuserstats.h
new file mode 100644
index 00000000..8c0c210d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamuserstats.h
@@ -0,0 +1,465 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ METHOD_DESC(Downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers)
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard,
+ ARRAY_COUNT_D(cUsers, Array of users to retrieve) CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_135/isteamutils.h b/lsteamclient/steamworks_sdk_135/isteamutils.h
new file mode 100644
index 00000000..5c70ebe6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamutils.h
@@ -0,0 +1,310 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+
+ // Sets the inset of the overlay notification from the corner specified by SetOverlayNotificationPosition.
+ virtual void SetOverlayNotificationInset( int nHorizontalInset, int nVerticalInset ) = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils007"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_135/isteamvideo.h b/lsteamclient/steamworks_sdk_135/isteamvideo.h
new file mode 100644
index 00000000..4431b4a1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/isteamvideo.h
@@ -0,0 +1,60 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Video
+//
+//=============================================================================
+
+#ifndef ISTEAMVIDEO_H
+#define ISTEAMVIDEO_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Video API
+//-----------------------------------------------------------------------------
+class ISteamVideo
+{
+public:
+
+ // Get a URL suitable for streaming the given Video app ID's video
+ virtual void GetVideoURL( AppId_t unVideoAppID ) = 0;
+
+ // returns true if user is uploading a live broadcast
+ virtual bool IsBroadcasting( int *pnNumViewers ) = 0;
+};
+
+#define STEAMVIDEO_INTERFACE_VERSION "STEAMVIDEO_INTERFACE_V001"
+
+DEFINE_CALLBACK( BroadcastUploadStart_t, k_iClientVideoCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( BroadcastUploadStop_t, k_iClientVideoCallbacks + 5 )
+ CALLBACK_MEMBER( 0, EBroadcastUploadResult, m_eResult )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( GetVideoURLResult_t, k_iClientVideoCallbacks + 11 )
+ CALLBACK_MEMBER( 0, EResult, m_eResult )
+ CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID )
+ CALLBACK_MEMBER( 2, char, m_rgchURL[256] )
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMVIDEO_H
diff --git a/lsteamclient/steamworks_sdk_135/matchmakingtypes.h b/lsteamclient/steamworks_sdk_135/matchmakingtypes.h
new file mode 100644
index 00000000..fcb61664
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/matchmakingtypes.h
@@ -0,0 +1,251 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ servernetadr_t() : m_usConnectionPort( 0 ), m_usQueryPort( 0 ), m_unIP( 0 ) {}
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_135/steam_api.h b/lsteamclient/steamworks_sdk_135/steam_api.h
new file mode 100644
index 00000000..f0132553
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/steam_api.h
@@ -0,0 +1,650 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteammusicremote.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+#include "isteamhtmlsurface.h"
+#include "isteaminventory.h"
+#include "isteamvideo.h"
+
+#if defined( _PS3 )
+#include "steamps3params.h"
+#endif
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *S_CALLTYPE SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#else
+
+#if defined(_PS3)
+S_API bool S_CALLTYPE SteamAPI_Init( SteamPS3Params_t *pParams );
+#else
+S_API bool S_CALLTYPE SteamAPI_Init();
+#endif
+
+S_API ISteamUser *S_CALLTYPE SteamUser();
+S_API ISteamFriends *S_CALLTYPE SteamFriends();
+S_API ISteamUtils *S_CALLTYPE SteamUtils();
+S_API ISteamMatchmaking *S_CALLTYPE SteamMatchmaking();
+S_API ISteamUserStats *S_CALLTYPE SteamUserStats();
+S_API ISteamApps *S_CALLTYPE SteamApps();
+S_API ISteamNetworking *S_CALLTYPE SteamNetworking();
+S_API ISteamMatchmakingServers *S_CALLTYPE SteamMatchmakingServers();
+S_API ISteamRemoteStorage *S_CALLTYPE SteamRemoteStorage();
+S_API ISteamScreenshots *S_CALLTYPE SteamScreenshots();
+S_API ISteamHTTP *S_CALLTYPE SteamHTTP();
+S_API ISteamUnifiedMessages *S_CALLTYPE SteamUnifiedMessages();
+S_API ISteamController *S_CALLTYPE SteamController();
+S_API ISteamUGC *S_CALLTYPE SteamUGC();
+S_API ISteamAppList *S_CALLTYPE SteamAppList();
+S_API ISteamMusic *S_CALLTYPE SteamMusic();
+S_API ISteamMusicRemote *S_CALLTYPE SteamMusicRemote();
+S_API ISteamHTMLSurface *S_CALLTYPE SteamHTMLSurface();
+S_API ISteamInventory *S_CALLTYPE SteamInventory();
+S_API ISteamVideo *S_CALLTYPE SteamVideo();
+#ifdef _PS3
+S_API ISteamPS3OverlayRender *S_CALLTYPE SteamPS3OverlayRender();
+#endif
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback and call-result helpers
+//
+// The following macros and classes are used to register your application for
+// callbacks and call-results, which are delivered in a predictable manner.
+//
+// STEAM_CALLBACK macros are meant for use inside of a C++ class definition.
+// They map a Steam notification callback directly to a class member function
+// which is automatically prototyped as "void func( callback_type *pParam )".
+//
+// CCallResult is used with specific Steam APIs that return "result handles".
+// The handle can be passed to a CCallResult object's Set function, along with
+// an object pointer and member-function pointer. The member function will
+// be executed once the results of the Steam API call are available.
+//
+// CCallback and CCallbackManual classes can be used instead of STEAM_CALLBACK
+// macros if you require finer control over registration and unregistration.
+//
+// Callbacks and call-results are queued automatically and are only
+// delivered/executed when your application calls SteamAPI_RunCallbacks().
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+
+// Declares a callback member function plus a helper member variable which
+// registers the callback on object creation and unregisters on destruction.
+// The optional fourth 'var' param exists only for backwards-compatibility
+// and can be ignored.
+#define STEAM_CALLBACK( thisclass, func, .../*callback_type, [deprecated] var*/ ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, 4, 3 ), ( /**/, thisclass, func, __VA_ARGS__ ) )
+
+// Declares a callback function and a named CCallbackManual variable which
+// has Register and Unregister functions instead of automatic registration.
+#define STEAM_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type > var; void func( callback_type *pParam )
+
+
+// Internal functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// Internal functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks and call results - internal implementation detail
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+
+private:
+ CCallbackBase( const CCallbackBase& );
+ CCallbackBase& operator=( const CCallbackBase& );
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: templated base for callbacks - internal implementation detail
+//-----------------------------------------------------------------------------
+template< int sizeof_P >
+class CCallbackImpl : protected CCallbackBase
+{
+public:
+ ~CCallbackImpl() { if ( m_nCallbackFlags & k_ECallbackFlagsRegistered ) SteamAPI_UnregisterCallback( this ); }
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+
+protected:
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool /*bIOFailure*/, SteamAPICall_t /*hSteamAPICall*/ ) { Run( pvParam ); }
+ virtual int GetCallbackSizeBytes() { return sizeof_P; }
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ virtual int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct,
+// bGameserver = listen for gameserver callbacks instead of client callbacks
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameserver = false >
+class CCallback : public CCallbackImpl< sizeof( P ) >
+{
+public:
+ typedef void (T::*func_t)(P*);
+
+ // NOTE: If you can't provide the correct parameters at construction time, you should
+ // use the CCallbackManual callback object (STEAM_CALLBACK_MANUAL macro) instead.
+ CCallback( T *pObj, func_t func ) : m_pObj( NULL ), m_Func( NULL )
+ {
+ if ( bGameserver )
+ {
+ this->SetGameserverFlag();
+ }
+ Register( pObj, func );
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( this->m_nCallbackFlags & CCallbackBase::k_ECallbackFlagsRegistered )
+ Unregister();
+
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: subclass of CCallback which allows default-construction in
+// an unregistered state; you must call Register manually
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer = false >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+
+ // Inherits public Register and Unregister functions from base class
+};
+
+
+
+//-----------------------------------------------------------------------------
+// The following macros are implementation details, not intended for public use
+//-----------------------------------------------------------------------------
+#define _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param )
+#define _STEAM_CALLBACK_HELPER( _1, _2, SELECTED, ... ) _STEAM_CALLBACK_##SELECTED
+#define _STEAM_CALLBACK_SELECT( X, Y ) _STEAM_CALLBACK_HELPER X Y
+#define _STEAM_CALLBACK_3( extra_code, thisclass, func, param ) \
+ struct CCallbackInternal_ ## func : private CCallbackImpl< sizeof( param ) > { \
+ CCallbackInternal_ ## func () { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func ( const CCallbackInternal_ ## func & ) { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func & operator=( const CCallbackInternal_ ## func & ) { return *this; } \
+ private: virtual void Run( void *pvParam ) { _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param ) \
+ thisclass *pOuter = reinterpret_cast<thisclass*>( reinterpret_cast<char*>(this) - offsetof( thisclass, m_steamcallback_ ## func ) ); \
+ pOuter->func( reinterpret_cast<param*>( pvParam ) ); \
+ } \
+ } m_steamcallback_ ## func ; void func( param *pParam )
+#define _STEAM_CALLBACK_4( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() { return m_pController; }
+ ISteamUGC* SteamUGC() { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() { return m_pSteamMusic; }
+ ISteamMusicRemote* SteamMusicRemote() { return m_pSteamMusicRemote; }
+ ISteamHTMLSurface* SteamHTMLSurface() { return m_pSteamHTMLSurface; }
+ ISteamInventory* SteamInventory() { return m_pSteamInventory; }
+ ISteamVideo* SteamVideo() { return m_pSteamVideo; }
+#ifdef _PS3
+ ISteamPS3OverlayRender* SteamPS3OverlayRender() { return m_pSteamPS3OverlayRender; }
+#endif
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+ ISteamMusicRemote *m_pSteamMusicRemote;
+ ISteamHTMLSurface *m_pSteamHTMLSurface;
+ ISteamInventory *m_pSteamInventory;
+ ISteamVideo *m_pSteamVideo;
+#ifdef _PS3
+ ISteamPS3OverlayRender *m_pSteamPS3OverlayRender;
+#endif
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamMusicRemote= NULL;
+ m_pSteamHTMLSurface = NULL;
+ m_pSteamInventory = NULL;
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = NULL;
+#endif
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = SteamClient()->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = SteamClient()->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = SteamClient()->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = SteamClient()->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ {
+ return false;
+ }
+
+ m_pSteamMusicRemote = SteamClient()->GetISteamMusicRemote( hSteamUser, hSteamPipe, STEAMMUSICREMOTE_INTERFACE_VERSION );
+ if ( !m_pSteamMusicRemote )
+ {
+ return false;
+ }
+
+ m_pSteamHTMLSurface = SteamClient()->GetISteamHTMLSurface( hSteamUser, hSteamPipe, STEAMHTMLSURFACE_INTERFACE_VERSION );
+ if ( !m_pSteamHTMLSurface )
+ {
+ return false;
+ }
+
+ m_pSteamInventory = SteamClient()->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ {
+ return false;
+ }
+
+ m_pSteamVideo = SteamClient()->GetISteamVideo( hSteamUser, hSteamPipe, STEAMVIDEO_INTERFACE_VERSION );
+ if ( !m_pSteamVideo )
+ {
+ return false;
+ }
+
+#ifdef _PS3
+ m_pSteamPS3OverlayRender = SteamClient()->GetISteamPS3OverlayRender();
+#endif
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_135/steam_api_flat.h b/lsteamclient/steamworks_sdk_135/steam_api_flat.h
new file mode 100644
index 00000000..426cac78
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/steam_api_flat.h
@@ -0,0 +1,657 @@
+//====== Copyright (c) 1996-2014, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Header for flatted SteamAPI. Use this for binding to other languages.
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+#ifndef STEAMAPIFLAT_H
+#define STEAMAPIFLAT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <stdint.h>
+
+
+S_API HSteamPipe SteamAPI_ISteamClient_CreateSteamPipe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamClient_BReleaseSteamPipe(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_ConnectToGlobalUser(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_CreateLocalUser(intptr_t instancePtr, HSteamPipe * phSteamPipe, EAccountType eAccountType);
+S_API void SteamAPI_ISteamClient_ReleaseUser(intptr_t instancePtr, HSteamPipe hSteamPipe, HSteamUser hUser);
+S_API class ISteamUser * SteamAPI_ISteamClient_GetISteamUser(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServer * SteamAPI_ISteamClient_GetISteamGameServer(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_SetLocalIPBinding(intptr_t instancePtr, uint32 unIP, uint16 usPort);
+S_API class ISteamFriends * SteamAPI_ISteamClient_GetISteamFriends(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUtils * SteamAPI_ISteamClient_GetISteamUtils(intptr_t instancePtr, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmaking * SteamAPI_ISteamClient_GetISteamMatchmaking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmakingServers * SteamAPI_ISteamClient_GetISteamMatchmakingServers(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void * SteamAPI_ISteamClient_GetISteamGenericInterface(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUserStats * SteamAPI_ISteamClient_GetISteamUserStats(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServerStats * SteamAPI_ISteamClient_GetISteamGameServerStats(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamApps * SteamAPI_ISteamClient_GetISteamApps(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamNetworking * SteamAPI_ISteamClient_GetISteamNetworking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamRemoteStorage * SteamAPI_ISteamClient_GetISteamRemoteStorage(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamScreenshots * SteamAPI_ISteamClient_GetISteamScreenshots(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_RunFrame(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamClient_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamClient_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(intptr_t instancePtr);
+S_API class ISteamHTTP * SteamAPI_ISteamClient_GetISteamHTTP(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUnifiedMessages * SteamAPI_ISteamClient_GetISteamUnifiedMessages(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamController * SteamAPI_ISteamClient_GetISteamController(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUGC * SteamAPI_ISteamClient_GetISteamUGC(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamAppList * SteamAPI_ISteamClient_GetISteamAppList(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusic * SteamAPI_ISteamClient_GetISteamMusic(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusicRemote * SteamAPI_ISteamClient_GetISteamMusicRemote(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamHTMLSurface * SteamAPI_ISteamClient_GetISteamHTMLSurface(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_Set_SteamAPI_CPostAPIResultInProcess(intptr_t instancePtr, SteamAPI_PostAPIResultInProcess_t func);
+S_API void SteamAPI_ISteamClient_Remove_SteamAPI_CPostAPIResultInProcess(intptr_t instancePtr, SteamAPI_PostAPIResultInProcess_t func);
+S_API void SteamAPI_ISteamClient_Set_SteamAPI_CCheckCallbackRegisteredInProcess(intptr_t instancePtr, SteamAPI_CheckCallbackRegistered_t func);
+S_API class ISteamInventory * SteamAPI_ISteamClient_GetISteamInventory(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamVideo * SteamAPI_ISteamClient_GetISteamVideo(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API HSteamUser SteamAPI_ISteamUser_GetHSteamUser(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BLoggedOn(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamUser_GetSteamID(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUser_InitiateGameConnection(intptr_t instancePtr, void * pAuthBlob, int cbMaxAuthBlob, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure);
+S_API void SteamAPI_ISteamUser_TerminateGameConnection(intptr_t instancePtr, uint32 unIPServer, uint16 usPortServer);
+S_API void SteamAPI_ISteamUser_TrackAppUsageEvent(intptr_t instancePtr, class CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo);
+S_API bool SteamAPI_ISteamUser_GetUserDataFolder(intptr_t instancePtr, char * pchBuffer, int cubBuffer);
+S_API void SteamAPI_ISteamUser_StartVoiceRecording(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_StopVoiceRecording(intptr_t instancePtr);
+S_API EVoiceResult SteamAPI_ISteamUser_GetAvailableVoice(intptr_t instancePtr, uint32 * pcbCompressed, uint32 * pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_GetVoice(intptr_t instancePtr, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_DecompressVoice(intptr_t instancePtr, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate);
+S_API uint32 SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(intptr_t instancePtr);
+S_API HAuthTicket SteamAPI_ISteamUser_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamUser_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamUser_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamUser_BIsBehindNAT(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_AdvertiseGame(intptr_t instancePtr, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestEncryptedAppTicket(intptr_t instancePtr, void * pDataToInclude, int cbDataToInclude);
+S_API bool SteamAPI_ISteamUser_GetEncryptedAppTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API int SteamAPI_ISteamUser_GetGameBadgeLevel(intptr_t instancePtr, int nSeries, bool bFoil);
+S_API int SteamAPI_ISteamUser_GetPlayerSteamLevel(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestStoreAuthURL(intptr_t instancePtr, const char * pchRedirectURL);
+S_API const char * SteamAPI_ISteamFriends_GetPersonaName(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_SetPersonaName(intptr_t instancePtr, const char * pchPersonaName);
+S_API EPersonaState SteamAPI_ISteamFriends_GetPersonaState(intptr_t instancePtr);
+S_API int SteamAPI_ISteamFriends_GetFriendCount(intptr_t instancePtr, int iFriendFlags);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendByIndex(intptr_t instancePtr, int iFriend, int iFriendFlags);
+S_API EFriendRelationship SteamAPI_ISteamFriends_GetFriendRelationship(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API EPersonaState SteamAPI_ISteamFriends_GetFriendPersonaState(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaName(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_GetFriendGamePlayed(intptr_t instancePtr, class CSteamID steamIDFriend, struct FriendGameInfo_t * pFriendGameInfo);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(intptr_t instancePtr, class CSteamID steamIDFriend, int iPersonaName);
+S_API int SteamAPI_ISteamFriends_GetFriendSteamLevel(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetPlayerNickname(intptr_t instancePtr, class CSteamID steamIDPlayer);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupCount(intptr_t instancePtr);
+S_API FriendsGroupID_t SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(intptr_t instancePtr, int iFG);
+S_API const char * SteamAPI_ISteamFriends_GetFriendsGroupName(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API void SteamAPI_ISteamFriends_GetFriendsGroupMembersList(intptr_t instancePtr, FriendsGroupID_t friendsGroupID, class CSteamID * pOutSteamIDMembers, int nMembersCount);
+S_API bool SteamAPI_ISteamFriends_HasFriend(intptr_t instancePtr, class CSteamID steamIDFriend, int iFriendFlags);
+S_API int SteamAPI_ISteamFriends_GetClanCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetClanByIndex(intptr_t instancePtr, int iClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanName(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanTag(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_GetClanActivityCounts(intptr_t instancePtr, class CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_DownloadClanActivityCounts(intptr_t instancePtr, class CSteamID * psteamIDClans, int cClansToRequest);
+S_API int SteamAPI_ISteamFriends_GetFriendCountFromSource(intptr_t instancePtr, class CSteamID steamIDSource);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(intptr_t instancePtr, class CSteamID steamIDSource, int iFriend);
+S_API bool SteamAPI_ISteamFriends_IsUserInSource(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDSource);
+S_API void SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(intptr_t instancePtr, class CSteamID steamIDUser, bool bSpeaking);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlay(intptr_t instancePtr, const char * pchDialog);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToUser(intptr_t instancePtr, const char * pchDialog, class CSteamID steamID);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(intptr_t instancePtr, const char * pchURL);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToStore(intptr_t instancePtr, AppId_t nAppID, EOverlayToStoreFlag eFlag);
+S_API void SteamAPI_ISteamFriends_SetPlayedWith(intptr_t instancePtr, class CSteamID steamIDUserPlayedWith);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API int SteamAPI_ISteamFriends_GetSmallFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetMediumFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetLargeFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_RequestUserInformation(intptr_t instancePtr, class CSteamID steamIDUser, bool bRequireNameOnly);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_RequestClanOfficerList(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOwner(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanOfficerCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOfficerByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iOfficer);
+S_API uint32 SteamAPI_ISteamFriends_GetUserRestrictions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamFriends_SetRichPresence(intptr_t instancePtr, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamFriends_ClearRichPresence(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchKey);
+S_API int SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(intptr_t instancePtr, class CSteamID steamIDFriend, int iKey);
+S_API void SteamAPI_ISteamFriends_RequestFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_InviteUserToGame(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchConnectString);
+S_API int SteamAPI_ISteamFriends_GetCoplayFriendCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetCoplayFriend(intptr_t instancePtr, int iCoplayFriend);
+S_API int SteamAPI_ISteamFriends_GetFriendCoplayTime(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API AppId_t SteamAPI_ISteamFriends_GetFriendCoplayGame(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_JoinClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_LeaveClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanChatMemberCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetChatMemberByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iUser);
+S_API bool SteamAPI_ISteamFriends_SendClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, const char * pchText);
+S_API int SteamAPI_ISteamFriends_GetClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, class CSteamID * psteamidChatter);
+S_API bool SteamAPI_ISteamFriends_IsClanChatAdmin(intptr_t instancePtr, class CSteamID steamIDClanChat, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_SetListenForFriendsMessages(intptr_t instancePtr, bool bInterceptEnabled);
+S_API bool SteamAPI_ISteamFriends_ReplyToFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchMsgToSend);
+S_API int SteamAPI_ISteamFriends_GetFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_GetFollowerCount(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_IsFollowing(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_EnumerateFollowingList(intptr_t instancePtr, uint32 unStartIndex);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceAppActive(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(intptr_t instancePtr);
+S_API EUniverse SteamAPI_ISteamUtils_GetConnectedUniverse(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetServerRealTime(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUtils_GetIPCountry(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetImageSize(intptr_t instancePtr, int iImage, uint32 * pnWidth, uint32 * pnHeight);
+S_API bool SteamAPI_ISteamUtils_GetImageRGBA(intptr_t instancePtr, int iImage, uint8 * pubDest, int nDestBufferSize);
+S_API bool SteamAPI_ISteamUtils_GetCSERIPPort(intptr_t instancePtr, uint32 * unIP, uint16 * usPort);
+S_API uint8 SteamAPI_ISteamUtils_GetCurrentBatteryPower(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetAppID(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationPosition(intptr_t instancePtr, ENotificationPosition eNotificationPosition);
+S_API bool SteamAPI_ISteamUtils_IsAPICallCompleted(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, bool * pbFailed);
+S_API ESteamAPICallFailure SteamAPI_ISteamUtils_GetAPICallFailureReason(intptr_t instancePtr, SteamAPICall_t hSteamAPICall);
+S_API bool SteamAPI_ISteamUtils_GetAPICallResult(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed);
+S_API void SteamAPI_ISteamUtils_RunFrame(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamUtils_IsOverlayEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_BOverlayNeedsPresent(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUtils_CheckFileSignature(intptr_t instancePtr, const char * szFileName);
+S_API bool SteamAPI_ISteamUtils_ShowGamepadTextInput(intptr_t instancePtr, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText);
+S_API uint32 SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(intptr_t instancePtr, char * pchText, uint32 cchText);
+S_API const char * SteamAPI_ISteamUtils_GetSteamUILanguage(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_IsSteamRunningInVR(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationInset(intptr_t instancePtr, int nHorizontalInset, int nVerticalInset);
+S_API int SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMatchmaking_GetFavoriteGame(intptr_t instancePtr, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer);
+S_API int SteamAPI_ISteamMatchmaking_AddFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer);
+S_API bool SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_RequestLobbyList(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(intptr_t instancePtr, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToBeCloseTo);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(intptr_t instancePtr, int nSlotsAvailable);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(intptr_t instancePtr, ELobbyDistanceFilter eLobbyDistanceFilter);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(intptr_t instancePtr, int cMaxResults);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyByIndex(intptr_t instancePtr, int iLobby);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_CreateLobby(intptr_t instancePtr, ELobbyType eLobbyType, int cMaxMembers);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_JoinLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_LeaveLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_InviteUserToLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDInvitee);
+S_API int SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iMember);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyDataCount(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize);
+S_API bool SteamAPI_ISteamMatchmaking_DeleteLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDUser, const char * pchKey);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(intptr_t instancePtr, class CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(intptr_t instancePtr, class CSteamID steamIDLobby, int iChatID, class CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API bool SteamAPI_ISteamMatchmaking_RequestLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, class CSteamID steamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, class CSteamID * psteamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby, int cMaxMembers);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyType(intptr_t instancePtr, class CSteamID steamIDLobby, ELobbyType eLobbyType);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyJoinable(intptr_t instancePtr, class CSteamID steamIDLobby, bool bLobbyJoinable);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDNewOwner);
+S_API bool SteamAPI_ISteamMatchmaking_SetLinkedLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDLobbyDependent);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(intptr_t instancePtr, HServerListRequest hRequest, EMatchMakingServerResponse response);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(intptr_t instancePtr, class gameserveritem_t & server);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(intptr_t instancePtr, const char * pchName, int nScore, float flTimePlayed);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(intptr_t instancePtr, const char * pchRule, const char * pchValue);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(intptr_t instancePtr);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestLANServerList(intptr_t instancePtr, AppId_t iApp, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_ReleaseRequest(intptr_t instancePtr, HServerListRequest hServerListRequest);
+S_API class gameserveritem_t * SteamAPI_ISteamMatchmakingServers_GetServerDetails(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API bool SteamAPI_ISteamMatchmakingServers_IsRefreshing(intptr_t instancePtr, HServerListRequest hRequest);
+S_API int SteamAPI_ISteamMatchmakingServers_GetServerCount(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshServer(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PingServer(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPingResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PlayerDetails(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPlayersResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_ServerRules(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingRulesResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelServerQuery(intptr_t instancePtr, HServerQuery hServerQuery);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWrite(intptr_t instancePtr, const char * pchFile, const void * pvData, int32 cubData);
+S_API int32 SteamAPI_ISteamRemoteStorage_FileRead(intptr_t instancePtr, const char * pchFile, void * pvData, int32 cubDataToRead);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileWriteAsync(intptr_t instancePtr, const char * pchFile, const void * pvData, uint32 cubData);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileReadAsync(intptr_t instancePtr, const char * pchFile, uint32 nOffset, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileReadAsyncComplete(intptr_t instancePtr, SteamAPICall_t hReadCall, void * pvBuffer, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileForget(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileDelete(intptr_t instancePtr, const char * pchFile);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileShare(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(intptr_t instancePtr, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform);
+S_API UGCFileWriteStreamHandle_t SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileExists(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FilePersisted(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileSize(intptr_t instancePtr, const char * pchFile);
+S_API int64 SteamAPI_ISteamRemoteStorage_GetFileTimestamp(intptr_t instancePtr, const char * pchFile);
+S_API ERemoteStoragePlatform SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileCount(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(intptr_t instancePtr, int iFile, int32 * pnFileSizeInBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_GetQuota(intptr_t instancePtr, int32 * pnTotalBytes, int32 * puAvailableBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(intptr_t instancePtr);
+S_API void SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(intptr_t instancePtr, bool bEnabled);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownload(intptr_t instancePtr, UGCHandle_t hContent, uint32 unPriority);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(intptr_t instancePtr, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDetails(intptr_t instancePtr, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, class CSteamID * pSteamIDOwner);
+S_API int32 SteamAPI_ISteamRemoteStorage_UGCRead(intptr_t instancePtr, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(intptr_t instancePtr);
+S_API UGCHandle_t SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(intptr_t instancePtr, int32 iCachedContent);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(intptr_t instancePtr, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType);
+S_API PublishedFileUpdateHandle_t SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_DeletePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(intptr_t instancePtr, class CSteamID steamId, uint32 unStartIndex, struct SteamParamStringArray_t * pRequiredTags, struct SteamParamStringArray_t * pExcludedTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishVideo(intptr_t instancePtr, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(intptr_t instancePtr, EWorkshopFileAction eAction, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(intptr_t instancePtr, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, struct SteamParamStringArray_t * pTags, struct SteamParamStringArray_t * pUserTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(intptr_t instancePtr, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority);
+S_API bool SteamAPI_ISteamUserStats_RequestCurrentStats(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUserStats_GetStat(intptr_t instancePtr, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetStat0(intptr_t instancePtr, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_SetStat(intptr_t instancePtr, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamUserStats_SetStat0(intptr_t instancePtr, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamUserStats_UpdateAvgRateStat(intptr_t instancePtr, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamUserStats_GetAchievement(intptr_t instancePtr, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_SetAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_ClearAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(intptr_t instancePtr, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_StoreStats(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetAchievementIcon(intptr_t instancePtr, const char * pchName);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(intptr_t instancePtr, const char * pchName, const char * pchKey);
+S_API bool SteamAPI_ISteamUserStats_IndicateAchievementProgress(intptr_t instancePtr, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress);
+S_API uint32 SteamAPI_ISteamUserStats_GetNumAchievements(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementName(intptr_t instancePtr, uint32 iAchievement);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_ResetAllStats(intptr_t instancePtr, bool bAchievementsToo);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName);
+S_API const char * SteamAPI_ISteamUserStats_GetLeaderboardName(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API int SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardSortMethod SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardDisplayType SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, class CSteamID * prgUsers, int cUsers);
+S_API bool SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(intptr_t instancePtr, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, struct LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_UploadLeaderboardScore(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_AttachLeaderboardUGC(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(intptr_t instancePtr, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API int SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(intptr_t instancePtr, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(intptr_t instancePtr, const char * pchName, float * pflPercent);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalStats(intptr_t instancePtr, int nHistoryDays);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat(intptr_t instancePtr, const char * pchStatName, int64 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat0(intptr_t instancePtr, const char * pchStatName, double * pData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory(intptr_t instancePtr, const char * pchStatName, int64 * pData, uint32 cubData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory0(intptr_t instancePtr, const char * pchStatName, double * pData, uint32 cubData);
+S_API bool SteamAPI_ISteamApps_BIsSubscribed(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsLowViolence(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsCybercafe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsVACBanned(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetCurrentGameLanguage(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetAvailableGameLanguages(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedApp(intptr_t instancePtr, AppId_t appID);
+S_API bool SteamAPI_ISteamApps_BIsDlcInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint32 SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(intptr_t instancePtr);
+S_API int SteamAPI_ISteamApps_GetDLCCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BGetDLCDataByIndex(intptr_t instancePtr, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize);
+S_API void SteamAPI_ISteamApps_InstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_UninstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_GetCurrentBetaName(intptr_t instancePtr, char * pchName, int cchNameBufferSize);
+S_API bool SteamAPI_ISteamApps_MarkContentCorrupt(intptr_t instancePtr, bool bMissingFilesOnly);
+S_API uint32 SteamAPI_ISteamApps_GetInstalledDepots(intptr_t instancePtr, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots);
+S_API uint32 SteamAPI_ISteamApps_GetAppInstallDir(intptr_t instancePtr, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize);
+S_API bool SteamAPI_ISteamApps_BIsAppInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint64 SteamAPI_ISteamApps_GetAppOwner(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetLaunchQueryParam(intptr_t instancePtr, const char * pchKey);
+S_API bool SteamAPI_ISteamApps_GetDlcDownloadProgress(intptr_t instancePtr, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API int SteamAPI_ISteamApps_GetAppBuildId(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamNetworking_SendP2PPacket(intptr_t instancePtr, class CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_IsP2PPacketAvailable(intptr_t instancePtr, uint32 * pcubMsgSize, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_ReadP2PPacket(intptr_t instancePtr, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, class CSteamID * psteamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(intptr_t instancePtr, class CSteamID steamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_GetP2PSessionState(intptr_t instancePtr, class CSteamID steamIDRemote, struct P2PSessionState_t * pConnectionState);
+S_API bool SteamAPI_ISteamNetworking_AllowP2PPacketRelay(intptr_t instancePtr, bool bAllow);
+S_API SNetListenSocket_t SteamAPI_ISteamNetworking_CreateListenSocket(intptr_t instancePtr, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(intptr_t instancePtr, class CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateConnectionSocket(intptr_t instancePtr, uint32 nIP, uint16 nPort, int nTimeoutSec);
+S_API bool SteamAPI_ISteamNetworking_DestroySocket(intptr_t instancePtr, SNetSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_DestroyListenSocket(intptr_t instancePtr, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_SendDataOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_RetrieveDataFromSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailable(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_RetrieveData(intptr_t instancePtr, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_GetSocketInfo(intptr_t instancePtr, SNetSocket_t hSocket, class CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote);
+S_API bool SteamAPI_ISteamNetworking_GetListenSocketInfo(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort);
+S_API ESNetSocketConnectionType SteamAPI_ISteamNetworking_GetSocketConnectionType(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API int SteamAPI_ISteamNetworking_GetMaxPacketSize(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_WriteScreenshot(intptr_t instancePtr, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(intptr_t instancePtr, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight);
+S_API void SteamAPI_ISteamScreenshots_TriggerScreenshot(intptr_t instancePtr);
+S_API void SteamAPI_ISteamScreenshots_HookScreenshots(intptr_t instancePtr, bool bHook);
+S_API bool SteamAPI_ISteamScreenshots_SetLocation(intptr_t instancePtr, ScreenshotHandle hScreenshot, const char * pchLocation);
+S_API bool SteamAPI_ISteamScreenshots_TagUser(intptr_t instancePtr, ScreenshotHandle hScreenshot, class CSteamID steamID);
+S_API bool SteamAPI_ISteamScreenshots_TagPublishedFile(intptr_t instancePtr, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID);
+S_API bool SteamAPI_ISteamMusic_BIsEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusic_BIsPlaying(intptr_t instancePtr);
+S_API AudioPlayback_Status SteamAPI_ISteamMusic_GetPlaybackStatus(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Play(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Pause(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayPrevious(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayNext(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_SetVolume(intptr_t instancePtr, float flVolume);
+S_API float SteamAPI_ISteamMusic_GetVolume(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BActivationSuccess(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_SetDisplayName(intptr_t instancePtr, const char * pchDisplayName);
+S_API bool SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayPrevious(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayNext(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableQueue(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlaylists(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(intptr_t instancePtr, AudioPlayback_Status nStatus);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateVolume(intptr_t instancePtr, float flValue);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(intptr_t instancePtr, bool bAvailable);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(intptr_t instancePtr, const char * pchText);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(intptr_t instancePtr, int nValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_QueueWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetQueueEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetQueueEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_QueueDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetPlaylistEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistDidChange(intptr_t instancePtr);
+S_API HTTPRequestHandle SteamAPI_ISteamHTTP_CreateHTTPRequest(intptr_t instancePtr, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(intptr_t instancePtr, HTTPRequestHandle hRequest, uint64 ulContextValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_DeferHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 * unBodySize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 cOffset, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_ReleaseHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(intptr_t instancePtr, HTTPRequestHandle hRequest, float * pflPercentOut);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen);
+S_API HTTPCookieContainerHandle SteamAPI_ISteamHTTP_CreateCookieContainer(intptr_t instancePtr, bool bAllowResponsesToModify);
+S_API bool SteamAPI_ISteamHTTP_ReleaseCookieContainer(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetCookie(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer, const char * pchHost, const char * pchUrl, const char * pchCookie);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(intptr_t instancePtr, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchUserAgentInfo);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(intptr_t instancePtr, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unMilliseconds);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(intptr_t instancePtr, HTTPRequestHandle hRequest, bool * pbWasTimedOut);
+S_API ClientUnifiedMessageHandle SteamAPI_ISteamUnifiedMessages_SendMethod(intptr_t instancePtr, const char * pchServiceMethod, const void * pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, uint32 * punResponseSize, EResult * peResult);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseData(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, void * pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease);
+S_API bool SteamAPI_ISteamUnifiedMessages_ReleaseMethod(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle);
+S_API bool SteamAPI_ISteamUnifiedMessages_SendNotification(intptr_t instancePtr, const char * pchServiceNotification, const void * pNotificationBuffer, uint32 unNotificationBufferSize);
+S_API bool SteamAPI_ISteamController_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamController_Shutdown(intptr_t instancePtr);
+S_API void SteamAPI_ISteamController_RunFrame(intptr_t instancePtr);
+S_API int SteamAPI_ISteamController_GetConnectedControllers(intptr_t instancePtr, ControllerHandle_t * handlesOut);
+S_API bool SteamAPI_ISteamController_ShowBindingPanel(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetActionSetHandle(intptr_t instancePtr, const char * pszActionSetName);
+S_API void SteamAPI_ISteamController_ActivateActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetCurrentActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerDigitalActionHandle_t SteamAPI_ISteamController_GetDigitalActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerDigitalActionData_t SteamAPI_ISteamController_GetDigitalActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle);
+S_API int SteamAPI_ISteamController_GetDigitalActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin * originsOut);
+S_API ControllerAnalogActionHandle_t SteamAPI_ISteamController_GetAnalogActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerAnalogActionData_t SteamAPI_ISteamController_GetAnalogActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle);
+S_API int SteamAPI_ISteamController_GetAnalogActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin * originsOut);
+S_API void SteamAPI_ISteamController_StopAnalogActionMomentum(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction);
+S_API void SteamAPI_ISteamController_TriggerHapticPulse(intptr_t instancePtr, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(intptr_t instancePtr, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(intptr_t instancePtr, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SendQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCResult(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, struct SteamUGCDetails_t * pDetails);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCPreviewURL(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCChildren(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCStatistic(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 * pStatValue);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, bool * pbIsImage);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize);
+S_API bool SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_AddRequiredTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_AddExcludedTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_SetReturnKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnKeyValueTags);
+S_API bool SteamAPI_ISteamUGC_SetReturnLongDescription(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnLongDescription);
+S_API bool SteamAPI_ISteamUGC_SetReturnMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnMetadata);
+S_API bool SteamAPI_ISteamUGC_SetReturnChildren(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnChildren);
+S_API bool SteamAPI_ISteamUGC_SetReturnAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews);
+S_API bool SteamAPI_ISteamUGC_SetReturnTotalOnly(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnTotalOnly);
+S_API bool SteamAPI_ISteamUGC_SetLanguage(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetAllowCachedResponse(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds);
+S_API bool SteamAPI_ISteamUGC_SetCloudFileNameFilter(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pMatchCloudFileName);
+S_API bool SteamAPI_ISteamUGC_SetMatchAnyTag(intptr_t instancePtr, UGCQueryHandle_t handle, bool bMatchAnyTag);
+S_API bool SteamAPI_ISteamUGC_SetSearchText(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pSearchText);
+S_API bool SteamAPI_ISteamUGC_SetRankedByTrendDays(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unDays);
+S_API bool SteamAPI_ISteamUGC_AddRequiredKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pKey, const char * pValue);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RequestUGCDetails(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_CreateItem(intptr_t instancePtr, AppId_t nConsumerAppId, EWorkshopFileType eFileType);
+S_API UGCUpdateHandle_t SteamAPI_ISteamUGC_StartItemUpdate(intptr_t instancePtr, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_SetItemTitle(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchTitle);
+S_API bool SteamAPI_ISteamUGC_SetItemDescription(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchDescription);
+S_API bool SteamAPI_ISteamUGC_SetItemUpdateLanguage(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetItemMetadata(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchMetaData);
+S_API bool SteamAPI_ISteamUGC_SetItemVisibility(intptr_t instancePtr, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamUGC_SetItemTags(intptr_t instancePtr, UGCUpdateHandle_t updateHandle, const struct SteamParamStringArray_t * pTags);
+S_API bool SteamAPI_ISteamUGC_SetItemContent(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszContentFolder);
+S_API bool SteamAPI_ISteamUGC_SetItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile);
+S_API bool SteamAPI_ISteamUGC_RemoveItemKeyValueTags(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey);
+S_API bool SteamAPI_ISteamUGC_AddItemKeyValueTag(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubmitItemUpdate(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchChangeNote);
+S_API EItemUpdateStatus SteamAPI_ISteamUGC_GetItemUpdateProgress(intptr_t instancePtr, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_GetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddItemToFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveItemFromFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_UnsubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API uint32 SteamAPI_ISteamUGC_GetNumSubscribedItems(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUGC_GetSubscribedItems(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API uint32 SteamAPI_ISteamUGC_GetItemState(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_GetItemInstallInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp);
+S_API bool SteamAPI_ISteamUGC_GetItemDownloadInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API bool SteamAPI_ISteamUGC_DownloadItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bHighPriority);
+S_API bool SteamAPI_ISteamUGC_BInitWorkshopForGameServer(intptr_t instancePtr, DepotId_t unWorkshopDepotID, const char * pszFolder);
+S_API void SteamAPI_ISteamUGC_SuspendDownloads(intptr_t instancePtr, bool bSuspend);
+S_API uint32 SteamAPI_ISteamAppList_GetNumInstalledApps(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamAppList_GetInstalledApps(intptr_t instancePtr, AppId_t * pvecAppID, uint32 unMaxAppIDs);
+S_API int SteamAPI_ISteamAppList_GetAppName(intptr_t instancePtr, AppId_t nAppID, char * pchName, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppInstallDir(intptr_t instancePtr, AppId_t nAppID, char * pchDirectory, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppBuildId(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Shutdown(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamHTMLSurface_CreateBrowser(intptr_t instancePtr, const char * pchUserAgent, const char * pchUserCSS);
+S_API void SteamAPI_ISteamHTMLSurface_RemoveBrowser(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_LoadURL(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData);
+S_API void SteamAPI_ISteamHTMLSurface_SetSize(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight);
+S_API void SteamAPI_ISteamHTMLSurface_StopLoad(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Reload(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoBack(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoForward(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_AddHeader(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamHTMLSurface_ExecuteJavascript(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchScript);
+S_API void SteamAPI_ISteamHTMLSurface_MouseUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDoubleClick(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseMove(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_MouseWheel(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int32 nDelta);
+S_API void SteamAPI_ISteamHTMLSurface_KeyDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyChar(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetVerticalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetKeyFocus(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus);
+S_API void SteamAPI_ISteamHTMLSurface_ViewSource(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_CopyToClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_PasteFromClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Find(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse);
+S_API void SteamAPI_ISteamHTMLSurface_StopFind(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_SetCookie(intptr_t instancePtr, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly);
+S_API void SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY);
+S_API void SteamAPI_ISteamHTMLSurface_SetBackgroundMode(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bBackgroundMode);
+S_API void SteamAPI_ISteamHTMLSurface_AllowStartRequest(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bAllowed);
+S_API void SteamAPI_ISteamHTMLSurface_JSDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bResult);
+S_API void SteamAPI_ISteamHTMLSurface_FileLoadDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char ** pchSelectedFiles);
+S_API EResult SteamAPI_ISteamInventory_GetResultStatus(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetResultItems(intptr_t instancePtr, SteamInventoryResult_t resultHandle, struct SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize);
+S_API uint32 SteamAPI_ISteamInventory_GetResultTimestamp(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_CheckResultSteamID(intptr_t instancePtr, SteamInventoryResult_t resultHandle, class CSteamID steamIDExpected);
+S_API void SteamAPI_ISteamInventory_DestroyResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetAllItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_GetItemsByID(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs);
+S_API bool SteamAPI_ISteamInventory_SerializeResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize);
+S_API bool SteamAPI_ISteamInventory_DeserializeResult(intptr_t instancePtr, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE);
+S_API bool SteamAPI_ISteamInventory_GenerateItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_GrantPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_AddPromoItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef);
+S_API bool SteamAPI_ISteamInventory_AddPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_ConsumeItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity);
+S_API bool SteamAPI_ISteamInventory_ExchangeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength);
+S_API bool SteamAPI_ISteamInventory_TransferItemQuantity(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest);
+S_API void SteamAPI_ISteamInventory_SendItemDropHeartbeat(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_TriggerItemDrop(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition);
+S_API bool SteamAPI_ISteamInventory_TradeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, class CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength);
+S_API bool SteamAPI_ISteamInventory_LoadItemDefinitions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionIDs(intptr_t instancePtr, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionProperty(intptr_t instancePtr, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSize);
+S_API void SteamAPI_ISteamVideo_GetVideoURL(intptr_t instancePtr, AppId_t unVideoAppID);
+S_API bool SteamAPI_ISteamVideo_IsBroadcasting(intptr_t instancePtr, int * pnNumViewers);
+S_API bool SteamAPI_ISteamGameServer_InitGameServer(intptr_t instancePtr, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString);
+S_API void SteamAPI_ISteamGameServer_SetProduct(intptr_t instancePtr, const char * pszProduct);
+S_API void SteamAPI_ISteamGameServer_SetGameDescription(intptr_t instancePtr, const char * pszGameDescription);
+S_API void SteamAPI_ISteamGameServer_SetModDir(intptr_t instancePtr, const char * pszModDir);
+S_API void SteamAPI_ISteamGameServer_SetDedicatedServer(intptr_t instancePtr, bool bDedicated);
+S_API void SteamAPI_ISteamGameServer_LogOn(intptr_t instancePtr, const char * pszToken);
+S_API void SteamAPI_ISteamGameServer_LogOnAnonymous(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_LogOff(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BLoggedOn(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BSecure(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamGameServer_GetSteamID(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_WasRestartRequested(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetMaxPlayerCount(intptr_t instancePtr, int cPlayersMax);
+S_API void SteamAPI_ISteamGameServer_SetBotPlayerCount(intptr_t instancePtr, int cBotplayers);
+S_API void SteamAPI_ISteamGameServer_SetServerName(intptr_t instancePtr, const char * pszServerName);
+S_API void SteamAPI_ISteamGameServer_SetMapName(intptr_t instancePtr, const char * pszMapName);
+S_API void SteamAPI_ISteamGameServer_SetPasswordProtected(intptr_t instancePtr, bool bPasswordProtected);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorPort(intptr_t instancePtr, uint16 unSpectatorPort);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorServerName(intptr_t instancePtr, const char * pszSpectatorServerName);
+S_API void SteamAPI_ISteamGameServer_ClearAllKeyValues(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetKeyValue(intptr_t instancePtr, const char * pKey, const char * pValue);
+S_API void SteamAPI_ISteamGameServer_SetGameTags(intptr_t instancePtr, const char * pchGameTags);
+S_API void SteamAPI_ISteamGameServer_SetGameData(intptr_t instancePtr, const char * pchGameData);
+S_API void SteamAPI_ISteamGameServer_SetRegion(intptr_t instancePtr, const char * pszRegion);
+S_API bool SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(intptr_t instancePtr, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, class CSteamID * pSteamIDUser);
+S_API uint64 SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SendUserDisconnect(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServer_BUpdateUserData(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore);
+S_API HAuthTicket SteamAPI_ISteamGameServer_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamGameServer_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamGameServer_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamGameServer_RequestUserGroupStatus(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDGroup);
+S_API void SteamAPI_ISteamGameServer_GetGameplayStats(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_GetServerReputation(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamGameServer_GetPublicIP(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_HandleIncomingPacket(intptr_t instancePtr, const void * pData, int cbData, uint32 srcIP, uint16 srcPort);
+S_API int SteamAPI_ISteamGameServer_GetNextOutgoingPacket(intptr_t instancePtr, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort);
+S_API void SteamAPI_ISteamGameServer_EnableHeartbeats(intptr_t instancePtr, bool bActive);
+S_API void SteamAPI_ISteamGameServer_SetHeartbeatInterval(intptr_t instancePtr, int iHeartbeatInterval);
+S_API void SteamAPI_ISteamGameServer_ForceHeartbeat(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_AssociateWithClan(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(intptr_t instancePtr, class CSteamID steamIDNewPlayer);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API bool SteamAPI_ISteamGameServerStats_ClearUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_StoreUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+#endif // STEAMAPIFLAT_H
+
+
diff --git a/lsteamclient/steamworks_sdk_135/steam_gameserver.h b/lsteamclient/steamworks_sdk_135/steam_gameserver.h
new file mode 100644
index 00000000..a716f05f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/steam_gameserver.h
@@ -0,0 +1,191 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+S_API ISteamInventory *SteamGameServerInventory();
+S_API ISteamUGC *SteamGameServerUGC();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// These macros are similar to the STEAM_CALLBACK_* macros in steam_api.h, but only trigger for gameserver callbacks
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, /*callback_type, [deprecated] var*/... ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, GS, 3 ), ( this->SetGameserverFlag();, thisclass, func, __VA_ARGS__ ) )
+
+#define STEAM_GAMESERVER_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type, true > var; void func( callback_type *pParam )
+
+
+
+#define _STEAM_CALLBACK_GS( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param, true > var; void func( param *pParam )
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+ ISteamInventory *SteamInventory() { return m_pSteamInventory; }
+ ISteamUGC *SteamUGC() { return m_pSteamUGC; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamInventory *m_pSteamInventory;
+ ISteamUGC *m_pSteamUGC;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamInventory = NULL;
+ m_pSteamUGC = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamInventory = g_pSteamClientGameServer->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_pSteamUGC = g_pSteamClientGameServer->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_135/steamclientpublic.h b/lsteamclient/steamworks_sdk_135/steamclientpublic.h
new file mode 100644
index 00000000..1bbd097c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/steamclientpublic.h
@@ -0,0 +1,1165 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to login
+ k_EResultItemDeleted = 86, // The thing we're trying to access has been deleted
+ k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to throttle response to possible attacker
+ k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch
+ k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for two-factor didn't match
+ k_EResultAccountAssociatedToMultiplePartners = 90, // account has been associated with multiple partners
+ k_EResultNotModified = 91, // data not modified
+ k_EResultNoMobileDevice = 92, // the account does not have a mobile device associated with it
+ k_EResultTimeNotSynced = 93, // the time presented is out of range or tolerance
+ k_EResultSmsCodeFailed = 94, // SMS code failure (no match, none pending, etc.)
+ k_EResultAccountLimitExceeded = 95, // Too many accounts access this resource
+ k_EResultAccountActivityLimitExceeded = 96, // Too many changes to this account
+ k_EResultPhoneActivityLimitExceeded = 97, // Too many changes to this phone
+ k_EResultRefundToWallet = 98, // Cannot refund to payment method, must use wallet
+ k_EResultEmailSendFailure = 99, // Cannot send an email
+ k_EResultNotSettled = 100, // Can't perform operation till payment has settled
+ k_EResultNeedCaptcha = 101, // Needs to provide a valid captcha
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+ k_EVoiceResultReceiverOutOfDate = 8,
+ k_EVoiceResultReceiverDidNotAnswer = 9,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+enum EDenyReason
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+};
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+enum EBeginAuthSessionResult
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+};
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+enum EAuthSessionResponse
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+ k_EAuthSessionResponsePublisherIssuedBan = 9, // The user is banned for this game. The ban came via the web api and not VAC
+};
+
+// results from UserHasLicenseForApp
+enum EUserHasLicenseForAppResult
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+};
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x0000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x0001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x0002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x0004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x0008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x0010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x0020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x0040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_RetailLicense = 0x0080, // has a retail license for game, (CD-Key etc)
+ k_EAppOwnershipFlags_LicenseLocked = 0x0100, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x0200, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x0400, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x0800, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x1000, // Recurring license, user is charged periodically
+ k_EAppOwnershipFlags_LicenseCanceled = 0x2000, // Mark as canceled, but might be still active if recurring
+ k_EAppOwnershipFlags_AutoGrant = 0x4000, // Ownership is based on any kind of autogrant license
+ k_EAppOwnershipFlags_PendingGift = 0x8000, // user has pending gift to redeem
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media_DEPRECATED = 0x010, // legacy - was used for game trailers, which are now just videos on the web
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+ k_EAppType_Hardware = 0x200, // a hardware device (Steam Machine, Steam Controller, Steam Link, etc.)
+ // 0x400 is up for grabs here
+ k_EAppType_Video = 0x800, // A video component of either a Film or TVSeries (may be the feature, an episode, preview, making-of, etc)
+ k_EAppType_Plugin = 0x1000, // Plug-in types for other Apps
+ k_EAppType_Music = 0x2000, // Music files
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+ k_EChatEntryTypeReserved1 = 12,
+ k_EChatEntryTypeReserved2 = 13,
+ k_EChatEntryTypeLinkBlocked = 14, // a link was removed by the chat filter.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Broadcast upload result details
+//-----------------------------------------------------------------------------
+enum EBroadcastUploadResult
+{
+ k_EBroadcastUploadResultNone = 0, // broadcast state unknown
+ k_EBroadcastUploadResultOK = 1, // broadcast was good, no problems
+ k_EBroadcastUploadResultInitFailed = 2, // broadcast init failed
+ k_EBroadcastUploadResultFrameFailed = 3, // broadcast frame upload failed
+ k_EBroadcastUploadResultTimeout = 4, // broadcast upload timed out
+ k_EBroadcastUploadResultBandwidthExceeded = 5, // broadcast send too much data
+ k_EBroadcastUploadResultLowFPS = 6, // broadcast FPS too low
+ k_EBroadcastUploadResultMissingKeyFrames = 7, // broadcast sending not enough key frames
+ k_EBroadcastUploadResultNoConnection = 8, // broadcast client failed to connect to relay
+ k_EBroadcastUploadResultRelayFailed = 9, // relay dropped the upload
+ k_EBroadcastUploadResultSettingsChanged = 10, // the client changed broadcast settings
+ k_EBroadcastUploadResultMissingAudio = 11, // client failed to send audio data
+ k_EBroadcastUploadResultTooFarBehind = 12, // clients was too slow uploading
+ k_EBroadcastUploadResultTranscodeBehind = 13, // server failed to keep up with transcode
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: codes for well defined launch options
+//-----------------------------------------------------------------------------
+enum ELaunchOptionType
+{
+ k_ELaunchOptionType_None = 0, // unknown what launch option does
+ k_ELaunchOptionType_Default = 1, // runs the game, app, whatever in default mode
+ k_ELaunchOptionType_SafeMode = 2, // runs the game in safe mode
+ k_ELaunchOptionType_Multiplayer = 3, // runs the game in multiplayer mode
+ k_ELaunchOptionType_Config = 4, // runs config tool for this game
+ k_ELaunchOptionType_VR = 5, // runs game in VR mode
+ k_ELaunchOptionType_Server = 6, // runs dedicated server for this game
+ k_ELaunchOptionType_Editor = 7, // runs game editor
+ k_ELaunchOptionType_Manual = 8, // shows game manual
+ k_ELaunchOptionType_Benchmark = 9, // runs game benchmark
+ k_ELaunchOptionType_Option1 = 10, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option2 = 11, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option3 = 12, // generic run option, uses description field for game name
+
+
+ k_ELaunchOptionType_Dialog = 1000, // show launch options dialog
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM2_USERID_STRUCTS )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ V_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, V_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, V_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, V_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, V_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_135/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_135/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_135/steamhttpenums.h b/lsteamclient/steamworks_sdk_135/steamhttpenums.h
new file mode 100644
index 00000000..2ec0982b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/steamhttpenums.h
@@ -0,0 +1,97 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401, // You probably want 403 or something else. 401 implies you're sending a WWW-Authenticate header and the client can sent an Authorization header in response.
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+ k_EHTTPStatusCode4xxUnknown = 418, // 418 is reserved, so we'll use it to mean unknown
+ k_EHTTPStatusCode429TooManyRequests = 429,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+ k_EHTTPStatusCode5xxUnknown = 599,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_135/steamps3params.h b/lsteamclient/steamworks_sdk_135/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_135/steamtypes.h b/lsteamclient/steamworks_sdk_135/steamtypes.h
new file mode 100644
index 00000000..2be3926c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/steamtypes.h
@@ -0,0 +1,179 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+#ifdef __clang__
+# define CLANG_ATTR(ATTR) __attribute__((annotate( ATTR )))
+#else
+# define CLANG_ATTR(ATTR)
+#endif
+
+#define METHOD_DESC(DESC) CLANG_ATTR( "desc:" #DESC ";" )
+#define IGNOREATTR() CLANG_ATTR( "ignore" )
+#define OUT_STRUCT() CLANG_ATTR( "out_struct: ;" )
+#define OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" )
+#define OUT_ARRAY_COUNT(COUNTER, DESC) CLANG_ATTR( "out_array_count:" #COUNTER ";desc:" #DESC )
+#define ARRAY_COUNT(COUNTER) CLANG_ATTR( "array_count:" #COUNTER ";" )
+#define ARRAY_COUNT_D(COUNTER, DESC) CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC )
+#define BUFFER_COUNT(COUNTER) CLANG_ATTR( "buffer_count:" #COUNTER ";" )
+#define OUT_BUFFER_COUNT(COUNTER) CLANG_ATTR( "out_buffer_count:" #COUNTER ";" )
+#define OUT_STRING_COUNT(COUNTER) CLANG_ATTR( "out_string_count:" #COUNTER ";" )
+#define DESC(DESC) CLANG_ATTR("desc:" #DESC ";")
+
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef uint64 JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+const JobID_t k_JobIDNil = 0xffffffffffffffffull;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+typedef uint32 BundleId_t;
+const BundleId_t k_uBundleIdInvalid = 0;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+// ID for a depot content manifest
+typedef uint64 ManifestId_t;
+const ManifestId_t k_uManifestIdInvalid = 0;
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_135/steamuniverse.h b/lsteamclient/steamworks_sdk_135/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteamapplist.h b/lsteamclient/steamworks_sdk_135a/isteamapplist.h
new file mode 100644
index 00000000..fc1d49ee
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteamapps.h b/lsteamclient/steamworks_sdk_135a/isteamapps.h
new file mode 100644
index 00000000..f73fed4d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamapps.h
@@ -0,0 +1,154 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+ // get download progress for optional DLC
+ virtual bool GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // return the buildid of this app, may change at any time based on backend updates to the game
+ virtual int GetAppBuildId() = 0;
+#ifdef _PS3
+ // Result returned in a RegisterActivationCodeResponse_t callresult
+ virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0;
+#endif
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION007"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteamappticket.h b/lsteamclient/steamworks_sdk_135a/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteamclient.h b/lsteamclient/steamworks_sdk_135a/isteamclient.h
new file mode 100644
index 00000000..9977f3a5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamclient.h
@@ -0,0 +1,503 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct ValvePackingSentinel_t
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+extern "C" typedef void( *SteamAPI_PostAPIResultInProcess_t )(SteamAPICall_t callHandle, void *, uint32 unCallbackSize, int iCallbackNum);
+extern "C" typedef uint32 ( *SteamAPI_CheckCallbackRegistered_t )( int iCallbackNum );
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamMusicRemote;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+class ISteamHTMLSurface;
+class ISteamInventory;
+class ISteamVideo;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need to use these interfaces if you have a more complex versioning scheme,
+// where you want to get different versions of the same interface in different dll's in your project.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+#ifdef _PS3
+ virtual ISteamPS3OverlayRender *GetISteamPS3OverlayRender() = 0;
+#endif
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player Remote
+ virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // html page display
+ virtual ISteamHTMLSurface *GetISteamHTMLSurface(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // Helper functions for internal Steam usage
+ virtual void Set_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) = 0;
+ virtual void Remove_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) = 0;
+ virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0;
+
+ // inventory
+ virtual ISteamInventory *GetISteamInventory( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Video
+ virtual ISteamVideo *GetISteamVideo( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient017"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iClientDepotBuilderCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+enum { k_iSteamMusicRemoteCallbacks = 4100 };
+enum { k_iClientVRCallbacks = 4200 };
+enum { k_iClientReservedCallbacks = 4300 };
+enum { k_iSteamReservedCallbacks = 4400 };
+enum { k_iSteamHTMLSurfaceCallbacks = 4500 };
+enum { k_iClientVideoCallbacks = 4600 };
+enum { k_iClientInventoryCallbacks = 4700 };
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+struct SteamCallback_t
+{
+public:
+ SteamCallback_t() {}
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname : SteamCallback_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_10() \
+ END_CALLBACK_INTERNAL_BEGIN( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_11() \
+ END_CALLBACK_INTERNAL_BEGIN( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_12() \
+ END_CALLBACK_INTERNAL_BEGIN( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_13() \
+ END_CALLBACK_INTERNAL_BEGIN( 13 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_14() \
+ END_CALLBACK_INTERNAL_BEGIN( 14 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 13 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteamcontroller.h b/lsteamclient/steamworks_sdk_135a/isteamcontroller.h
new file mode 100644
index 00000000..13cb9267
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamcontroller.h
@@ -0,0 +1,211 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define STEAM_CONTROLLER_MAX_COUNT 16
+
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTIONS 16
+
+#define STEAM_CONTROLLER_MAX_DIGITAL_ACTIONS 128
+
+#define STEAM_CONTROLLER_MAX_ORIGINS 8
+
+// When sending an option to a specific controller handle, you can send to all controllers via this command
+#define STEAM_CONTROLLER_HANDLE_ALL_CONTROLLERS UINT64_MAX
+
+#define STEAM_CONTROLLER_MIN_ANALOG_ACTION_DATA -1.0f
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTION_DATA 1.0f
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+enum EControllerSource
+{
+ k_EControllerSource_None,
+ k_EControllerSource_LeftTrackpad,
+ k_EControllerSource_RightTrackpad,
+ k_EControllerSource_Joystick,
+ k_EControllerSource_ABXY,
+ k_EControllerSource_Switch,
+ k_EControllerSource_LeftTrigger,
+ k_EControllerSource_RightTrigger,
+ k_EControllerSource_Gyro,
+ k_EControllerSource_Count
+};
+
+enum EControllerSourceMode
+{
+ k_EControllerSourceMode_None,
+ k_EControllerSourceMode_Dpad,
+ k_EControllerSourceMode_Buttons,
+ k_EControllerSourceMode_FourButtons,
+ k_EControllerSourceMode_AbsoluteMouse,
+ k_EControllerSourceMode_RelativeMouse,
+ k_EControllerSourceMode_JoystickMove,
+ k_EControllerSourceMode_JoystickCamera,
+ k_EControllerSourceMode_ScrollWheel,
+ k_EControllerSourceMode_Trigger,
+ k_EControllerSourceMode_TouchMenu,
+ k_EControllerSourceMode_MouseJoystick,
+ k_EControllerSourceMode_MouseRegion
+};
+
+enum EControllerActionOrigin
+{
+ k_EControllerActionOrigin_None,
+ k_EControllerActionOrigin_A,
+ k_EControllerActionOrigin_B,
+ k_EControllerActionOrigin_X,
+ k_EControllerActionOrigin_Y,
+ k_EControllerActionOrigin_LeftBumper,
+ k_EControllerActionOrigin_RightBumper,
+ k_EControllerActionOrigin_LeftGrip,
+ k_EControllerActionOrigin_RightGrip,
+ k_EControllerActionOrigin_Start,
+ k_EControllerActionOrigin_Back,
+ k_EControllerActionOrigin_LeftPad_Touch,
+ k_EControllerActionOrigin_LeftPad_Swipe,
+ k_EControllerActionOrigin_LeftPad_Click,
+ k_EControllerActionOrigin_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_LeftPad_DPadWest,
+ k_EControllerActionOrigin_LeftPad_DPadEast,
+ k_EControllerActionOrigin_RightPad_Touch,
+ k_EControllerActionOrigin_RightPad_Swipe,
+ k_EControllerActionOrigin_RightPad_Click,
+ k_EControllerActionOrigin_RightPad_DPadNorth,
+ k_EControllerActionOrigin_RightPad_DPadSouth,
+ k_EControllerActionOrigin_RightPad_DPadWest,
+ k_EControllerActionOrigin_RightPad_DPadEast,
+ k_EControllerActionOrigin_LeftTrigger_Pull,
+ k_EControllerActionOrigin_LeftTrigger_Click,
+ k_EControllerActionOrigin_RightTrigger_Pull,
+ k_EControllerActionOrigin_RightTrigger_Click,
+ k_EControllerActionOrigin_LeftStick_Move,
+ k_EControllerActionOrigin_LeftStick_Click,
+ k_EControllerActionOrigin_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_LeftStick_DPadWest,
+ k_EControllerActionOrigin_LeftStick_DPadEast,
+ k_EControllerActionOrigin_Gyro_Move,
+ k_EControllerActionOrigin_Gyro_Pitch,
+ k_EControllerActionOrigin_Gyro_Yaw,
+ k_EControllerActionOrigin_Gyro_Roll,
+
+ k_EControllerActionOrigin_Count
+};
+
+// ControllerHandle_t is used to refer to a specific controller.
+// This handle will consistently identify a controller, even if it is disconnected and re-connected
+typedef uint64 ControllerHandle_t;
+
+
+// These handles are used to refer to a specific in-game action or action set
+// All action handles should be queried during initialization for performance reasons
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+
+#pragma pack( push, 1 )
+
+struct ControllerAnalogActionData_t
+{
+ // Type of data coming from this action, this will match what got specified in the action set
+ EControllerSourceMode eMode;
+
+ // The current state of this action; will be delta updates for mouse actions
+ float x, y;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+struct ControllerDigitalActionData_t
+{
+ // The current state of this action; will be true if currently pressed
+ bool bState;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ // Init and Shutdown must be called when starting/ending use of this interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Pump callback/callresult events
+ // Note: SteamAPI_RunCallbacks will do this for you, so you should never need to call this directly.
+ virtual void RunFrame() = 0;
+
+ // Enumerate currently connected controllers
+ // handlesOut should point to a STEAM_CONTROLLER_MAX_COUNT sized array of ControllerHandle_t handles
+ // Returns the number of handles written to handlesOut
+ virtual int GetConnectedControllers( ControllerHandle_t *handlesOut ) = 0;
+
+ // Invokes the Steam overlay and brings up the binding screen
+ // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
+ virtual bool ShowBindingPanel( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTION SETS
+ // Lookup the handle for an Action Set. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerActionSetHandle_t GetActionSetHandle( const char *pszActionSetName ) = 0;
+
+ // Reconfigure the controller to use the specified action set (ie 'Menu', 'Walk' or 'Drive')
+ // This is cheap, and can be safely called repeatedly. It's often easier to repeatedly call it in
+ // your state loops, instead of trying to place it in all of your state transitions.
+ virtual void ActivateActionSet( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle ) = 0;
+ virtual ControllerActionSetHandle_t GetCurrentActionSet( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTIONS
+ // Lookup the handle for a digital action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerDigitalActionHandle_t GetDigitalActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of the supplied digital game action
+ virtual ControllerDigitalActionData_t GetDigitalActionData( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle ) = 0;
+
+ // Get the origin(s) for a digital action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ // Lookup the handle for an analog action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerAnalogActionHandle_t GetAnalogActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of these supplied analog game action
+ virtual ControllerAnalogActionData_t GetAnalogActionData( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle ) = 0;
+
+ // Get the origin(s) for an analog action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ virtual void StopAnalogActionMomentum( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction ) = 0;
+
+ // Trigger a haptic pulse on a controller
+ virtual void TriggerHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "SteamController003"
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteamfriends.h b/lsteamclient/steamworks_sdk_135a/isteamfriends.h
new file mode 100644
index 00000000..a63d8ea7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamfriends.h
@@ -0,0 +1,629 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1, // this doesn't get stored; the user has just done an Ignore on an friendship invite
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5, // this is stored; the user has explicit blocked this other user from comments/chat/etc
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+// friends group identifier type
+typedef int16 FriendsGroupID_t;
+
+// invalid friends group identifier constant
+const FriendsGroupID_t k_FriendsGroupID_Invalid = -1;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, OUT_STRUCT() FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+ // friends steam level
+ virtual int GetFriendSteamLevel( CSteamID steamIDFriend ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // friend grouping (tag) apis
+ // returns the number of friends groups
+ virtual int GetFriendsGroupCount() = 0;
+ // returns the friends group ID for the given index (invalid indices return k_FriendsGroupID_Invalid)
+ virtual FriendsGroupID_t GetFriendsGroupIDByIndex( int iFG ) = 0;
+ // returns the name for the given friends group (NULL in the case of invalid friends group IDs)
+ virtual const char *GetFriendsGroupName( FriendsGroupID_t friendsGroupID ) = 0;
+ // returns the number of members in a given friends group
+ virtual int GetFriendsGroupMembersCount( FriendsGroupID_t friendsGroupID ) = 0;
+ // gets up to nMembersCount members of the given friends group, if fewer exist than requested those positions' SteamIDs will be invalid
+ virtual void GetFriendsGroupMembersList( FriendsGroupID_t friendsGroupID, OUT_ARRAY_CALL(nMembersCount, GetFriendsGroupMembersCount, friendsGroupID ) CSteamID *pOutSteamIDMembers, int nMembersCount ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( ARRAY_COUNT(cClansToRequest) CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, OUT_STRUCT() CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends015"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_135a/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_135a/isteamgameserver.h b/lsteamclient/steamworks_sdk_135a/isteamgameserver.h
new file mode 100644
index 00000000..c97ad6f5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamgameserver.h
@@ -0,0 +1,384 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ virtual SteamAPICall_t GetServerReputation( ) = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_135a/isteamgameserverstats.h
new file mode 100644
index 00000000..2cd0d2d3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamgameserverstats.h
@@ -0,0 +1,99 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteamhtmlsurface.h b/lsteamclient/steamworks_sdk_135a/isteamhtmlsurface.h
new file mode 100644
index 00000000..f72fd6c0
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamhtmlsurface.h
@@ -0,0 +1,444 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to display html pages in a texture
+//
+//=============================================================================
+
+#ifndef ISTEAMHTMLSURFACE_H
+#define ISTEAMHTMLSURFACE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+typedef uint32 HHTMLBrowser;
+const uint32 INVALID_HTMLBROWSER = 0;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for displaying HTML pages and interacting with them
+//-----------------------------------------------------------------------------
+class ISteamHTMLSurface
+{
+public:
+ virtual ~ISteamHTMLSurface() {}
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Create a browser object for display of a html page, when creation is complete the call handle
+ // will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser.
+ // The user agent string is a substring to be added to the general user agent string so you can
+ // identify your client on web servers.
+ // The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if
+ // you do not require this functionality.
+ virtual SteamAPICall_t CreateBrowser( const char *pchUserAgent, const char *pchUserCSS ) = 0;
+
+ // Call this when you are done with a html surface, this lets us free the resources being used by it
+ virtual void RemoveBrowser( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // Navigate to this URL, results in a HTML_StartRequest_t as the request commences
+ virtual void LoadURL( HHTMLBrowser unBrowserHandle, const char *pchURL, const char *pchPostData ) = 0;
+
+ // Tells the surface the size in pixels to display the surface
+ virtual void SetSize( HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight ) = 0;
+
+ // Stop the load of the current html page
+ virtual void StopLoad( HHTMLBrowser unBrowserHandle ) = 0;
+ // Reload (most likely from local cache) the current page
+ virtual void Reload( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate back in the page history
+ virtual void GoBack( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate forward in the page history
+ virtual void GoForward( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // add this header to any url requests from this browser
+ virtual void AddHeader( HHTMLBrowser unBrowserHandle, const char *pchKey, const char *pchValue ) = 0;
+ // run this javascript script in the currently loaded page
+ virtual void ExecuteJavascript( HHTMLBrowser unBrowserHandle, const char *pchScript ) = 0;
+
+ enum EHTMLMouseButton
+ {
+ eHTMLMouseButton_Left = 0,
+ eHTMLMouseButton_Right = 1,
+ eHTMLMouseButton_Middle = 2,
+ };
+
+ // Mouse click and mouse movement commands
+ virtual void MouseUp( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDown( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDoubleClick( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ // x and y are relative to the HTML bounds
+ virtual void MouseMove( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+ // nDelta is pixels of scroll
+ virtual void MouseWheel( HHTMLBrowser unBrowserHandle, int32 nDelta ) = 0;
+
+ enum EMouseCursor
+ {
+ dc_user = 0,
+ dc_none,
+ dc_arrow,
+ dc_ibeam,
+ dc_hourglass,
+ dc_waitarrow,
+ dc_crosshair,
+ dc_up,
+ dc_sizenw,
+ dc_sizese,
+ dc_sizene,
+ dc_sizesw,
+ dc_sizew,
+ dc_sizee,
+ dc_sizen,
+ dc_sizes,
+ dc_sizewe,
+ dc_sizens,
+ dc_sizeall,
+ dc_no,
+ dc_hand,
+ dc_blank, // don't show any custom cursor, just use your default
+ dc_middle_pan,
+ dc_north_pan,
+ dc_north_east_pan,
+ dc_east_pan,
+ dc_south_east_pan,
+ dc_south_pan,
+ dc_south_west_pan,
+ dc_west_pan,
+ dc_north_west_pan,
+ dc_alias,
+ dc_cell,
+ dc_colresize,
+ dc_copycur,
+ dc_verticaltext,
+ dc_rowresize,
+ dc_zoomin,
+ dc_zoomout,
+ dc_help,
+ dc_custom,
+
+ dc_last, // custom cursors start from this value and up
+ };
+
+ enum EHTMLKeyModifiers
+ {
+ k_eHTMLKeyModifier_None = 0,
+ k_eHTMLKeyModifier_AltDown = 1 << 0,
+ k_eHTMLKeyModifier_CtrlDown = 1 << 1,
+ k_eHTMLKeyModifier_ShiftDown = 1 << 2,
+ };
+
+ // keyboard interactions, native keycode is the virtual key code value from your OS
+ virtual void KeyDown( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ virtual void KeyUp( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ // cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press)
+ virtual void KeyChar( HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+
+ // programmatically scroll this many pixels on the page
+ virtual void SetHorizontalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+ virtual void SetVerticalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+
+ // tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things
+ virtual void SetKeyFocus( HHTMLBrowser unBrowserHandle, bool bHasKeyFocus ) = 0;
+
+ // open the current pages html code in the local editor of choice, used for debugging
+ virtual void ViewSource( HHTMLBrowser unBrowserHandle ) = 0;
+ // copy the currently selected text on the html page to the local clipboard
+ virtual void CopyToClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+ // paste from the local clipboard to the current html page
+ virtual void PasteFromClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element
+ virtual void Find( HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse ) = 0;
+ // cancel a currently running find
+ virtual void StopFind( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // return details about the link at position x,y on the current page
+ virtual void GetLinkAtPosition( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+
+ // set a webcookie for the hostname in question
+ virtual void SetCookie( const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath = "/", RTime32 nExpires = 0, bool bSecure = false, bool bHTTPOnly = false ) = 0;
+
+ // Zoom the current page by flZoom ( from 0.0 to 2.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care)
+ virtual void SetPageScaleFactor( HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY ) = 0;
+
+ // Enable/disable low-resource background mode, where javascript and repaint timers are throttled, resources are
+ // more aggressively purged from memory, and audio/video elements are paused. When background mode is enabled,
+ // all HTML5 video and audio objects will execute ".pause()" and gain the property "._steam_background_paused = 1".
+ // When background mode is disabled, any video or audio objects with that property will resume with ".play()".
+ virtual void SetBackgroundMode( HHTMLBrowser unBrowserHandle, bool bBackgroundMode ) = 0;
+
+ // CALLBACKS
+ //
+ // These set of functions are used as responses to callback requests
+ //
+
+ // You MUST call this in response to a HTML_StartRequest_t callback
+ // Set bAllowed to true to allow this navigation, false to cancel it and stay
+ // on the current page. You can use this feature to limit the valid pages
+ // allowed in your HTML surface.
+ virtual void AllowStartRequest( HHTMLBrowser unBrowserHandle, bool bAllowed ) = 0;
+
+ // You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback
+ // Set bResult to true for the OK option of a confirm, use false otherwise
+ virtual void JSDialogResponse( HHTMLBrowser unBrowserHandle, bool bResult ) = 0;
+
+ // You MUST call this in response to a HTML_FileOpenDialog_t callback
+ virtual void FileLoadDialogResponse( HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles ) = 0;
+};
+
+#define STEAMHTMLSURFACE_INTERFACE_VERSION "STEAMHTMLSURFACE_INTERFACE_VERSION_003"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser is ready for use
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_BrowserReady_t, k_iSteamHTMLSurfaceCallbacks + 1 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this browser is now fully created and ready to navigate to pages
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser has a pending paint
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_NeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 2)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint
+CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called
+CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture
+CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture
+CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update
+CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update
+CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update
+CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update
+CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered
+CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages
+END_DEFINE_CALLBACK_12()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser wanted to navigate to a new page
+// NOTE - you MUST call AllowStartRequest in response to this callback
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_StartRequest_t, k_iSteamHTMLSurfaceCallbacks + 3)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface navigating
+CALLBACK_MEMBER(1, const char *, pchURL) // the url they wish to navigate to
+CALLBACK_MEMBER(2, const char *, pchTarget) // the html link target type (i.e _blank, _self, _parent, _top )
+CALLBACK_MEMBER(3, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER(4, bool, bIsRedirect) // true if this was a http/html redirect from the last load request
+END_DEFINE_CALLBACK_5()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser has been requested to close due to user interaction (usually from a javascript window.close() call)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_CloseBrowser_t, k_iSteamHTMLSurfaceCallbacks + 4)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser is navigating to a new url
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_URLChanged_t, k_iSteamHTMLSurfaceCallbacks + 5 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface navigating
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the url they wish to navigate to
+CALLBACK_MEMBER( 2, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER( 3, bool, bIsRedirect ) // true if this was a http/html redirect from the last load request
+CALLBACK_MEMBER( 4, const char *, pchPageTitle ) // the title of the page
+CALLBACK_MEMBER( 5, bool, bNewNavigation ) // true if this was from a fresh tab and not a click on an existing page
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A page is finished loading
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FinishedRequest_t, k_iSteamHTMLSurfaceCallbacks + 6 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+CALLBACK_MEMBER( 2, const char *, pchPageTitle ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a request to load this url in a new tab
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_OpenLinkInNewTab_t, k_iSteamHTMLSurfaceCallbacks + 7 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the page has a new title now
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ChangedTitle_t, k_iSteamHTMLSurfaceCallbacks + 8 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: results from a search
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SearchResults_t, k_iSteamHTMLSurfaceCallbacks + 9 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unResults ) //
+CALLBACK_MEMBER( 2, uint32, unCurrentMatch ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: page history status changed on the ability to go backwards and forward
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_CanGoBackAndForward_t, k_iSteamHTMLSurfaceCallbacks + 10 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, bool, bCanGoBack ) //
+CALLBACK_MEMBER( 2, bool, bCanGoForward ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the horizontal scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HorizontalScroll_t, k_iSteamHTMLSurfaceCallbacks + 11 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool , bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the vertical scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_VerticalScroll_t, k_iSteamHTMLSurfaceCallbacks + 12 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool, bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetLinkAtPosition call
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_LinkAtPosition_t, k_iSteamHTMLSurfaceCallbacks + 13 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, x ) // NOTE - Not currently set
+CALLBACK_MEMBER( 2, uint32, y ) // NOTE - Not currently set
+CALLBACK_MEMBER( 3, const char *, pchURL ) //
+CALLBACK_MEMBER( 4, bool, bInput ) //
+CALLBACK_MEMBER( 5, bool, bLiveLink ) //
+END_DEFINE_CALLBACK_6()
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript alert dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSAlert_t, k_iSteamHTMLSurfaceCallbacks + 14 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript confirmation dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSConfirm_t, k_iSteamHTMLSurfaceCallbacks + 15 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: when received show a file open dialog
+// then call FileLoadDialogResponse with the file(s) the user selected.
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FileOpenDialog_t, k_iSteamHTMLSurfaceCallbacks + 16 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+CALLBACK_MEMBER( 2, const char *, pchInitialFile ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new html window has been created
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_NewWindow_t, k_iSteamHTMLSurfaceCallbacks + 21 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the current surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the page to load
+CALLBACK_MEMBER( 2, uint32, unX ) // the x pos into the page to display the popup
+CALLBACK_MEMBER( 3, uint32, unY ) // the y pos into the page to display the popup
+CALLBACK_MEMBER( 4, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 5, uint32, unTall ) // the total height of the pBGRA texture
+CALLBACK_MEMBER( 6, HHTMLBrowser, unNewWindow_BrowserHandle ) // the handle of the new window surface
+END_DEFINE_CALLBACK_7()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: change the cursor to display
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SetCursor_t, k_iSteamHTMLSurfaceCallbacks + 22 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, eMouseCursor ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: informational message from the browser
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_StatusText_t, k_iSteamHTMLSurfaceCallbacks + 23 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ShowToolTip_t, k_iSteamHTMLSurfaceCallbacks + 24 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: update the text of an existing tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_UpdateToolTip_t, k_iSteamHTMLSurfaceCallbacks + 25 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: hide the tooltip you are showing
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HideToolTip_t, k_iSteamHTMLSurfaceCallbacks + 26 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMHTMLSURFACE_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteamhttp.h b/lsteamclient/steamworks_sdk_135a/isteamhttp.h
new file mode 100644
index 00000000..d96a631f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamhttp.h
@@ -0,0 +1,210 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+typedef uint32 HTTPCookieContainerHandle;
+#define INVALID_HTTPCOOKIE_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Both http and https are supported,
+ // so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+
+ // Creates a cookie container handle which you must later free with ReleaseCookieContainer(). If bAllowResponsesToModify=true
+ // than any response to your requests using this cookie container may add new cookies which may be transmitted with
+ // future requests. If bAllowResponsesToModify=false than only cookies you explicitly set will be sent. This API is just for
+ // during process lifetime, after steam restarts no cookies are persisted and you have no way to access the cookie container across
+ // repeat executions of your process.
+ virtual HTTPCookieContainerHandle CreateCookieContainer( bool bAllowResponsesToModify ) = 0;
+
+ // Release a cookie container you are finished using, freeing it's memory
+ virtual bool ReleaseCookieContainer( HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Adds a cookie to the specified cookie container that will be used with future requests.
+ virtual bool SetCookie( HTTPCookieContainerHandle hCookieContainer, const char *pchHost, const char *pchUrl, const char *pchCookie ) = 0;
+
+ // Set the cookie container to use for a HTTP request
+ virtual bool SetHTTPRequestCookieContainer( HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Set the extra user agent info for a request, this doesn't clobber the normal user agent, it just adds the extra info on the end
+ virtual bool SetHTTPRequestUserAgentInfo( HTTPRequestHandle hRequest, const char *pchUserAgentInfo ) = 0;
+
+ // Set that https request should require verified SSL certificate via machines certificate trust store
+ virtual bool SetHTTPRequestRequiresVerifiedCertificate( HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate ) = 0;
+
+ // Set an absolute timeout on the HTTP request, this is just a total time timeout different than the network activity timeout
+ // which can bump everytime we get more data
+ virtual bool SetHTTPRequestAbsoluteTimeoutMS( HTTPRequestHandle hRequest, uint32 unMilliseconds ) = 0;
+
+ // Check if the reason the request failed was because we timed it out (rather than some harder failure)
+ virtual bool GetHTTPRequestWasTimedOut( HTTPRequestHandle hRequest, bool *pbWasTimedOut ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+
+ uint32 m_unBodySize; // Same as GetHTTPResponseBodySize()
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_135a/isteaminventory.h b/lsteamclient/steamworks_sdk_135a/isteaminventory.h
new file mode 100644
index 00000000..b4cc4c38
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteaminventory.h
@@ -0,0 +1,354 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Inventory
+//
+//=============================================================================
+
+#ifndef ISTEAMINVENTORY_H
+#define ISTEAMINVENTORY_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// Every individual instance of an item has a globally-unique ItemInstanceID.
+// This ID is unique to the combination of (player, specific item instance)
+// and will not be transferred to another player or re-used for another item.
+typedef uint64 SteamItemInstanceID_t;
+
+static const SteamItemInstanceID_t k_SteamItemInstanceIDInvalid = ~(SteamItemInstanceID_t)0;
+
+// Types of items in your game are identified by a 32-bit "item definition number".
+// Valid definition numbers are between 1 and 999999999; numbers less than or equal to
+// zero are invalid, and numbers greater than or equal to one billion (1x10^9) are
+// reserved for internal Steam use.
+typedef int32 SteamItemDef_t;
+
+
+enum ESteamItemFlags
+{
+ // Item status flags - these flags are permanently attached to specific item instances
+ k_ESteamItemNoTrade = 1 << 0, // This item is account-locked and cannot be traded or given away.
+
+ // Action confirmation flags - these flags are set one time only, as part of a result set
+ k_ESteamItemRemoved = 1 << 8, // The item has been destroyed, traded away, expired, or otherwise invalidated
+ k_ESteamItemConsumed = 1 << 9, // The item quantity has been decreased by 1 via ConsumeItem API.
+
+ // All other flag bits are currently reserved for internal Steam use at this time.
+ // Do not assume anything about the state of other flags which are not defined here.
+};
+
+struct SteamItemDetails_t
+{
+ SteamItemInstanceID_t m_itemId;
+ SteamItemDef_t m_iDefinition;
+ uint16 m_unQuantity;
+ uint16 m_unFlags; // see ESteamItemFlags
+};
+
+typedef int32 SteamInventoryResult_t;
+
+static const SteamInventoryResult_t k_SteamInventoryResultInvalid = -1;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Inventory query and manipulation API
+//-----------------------------------------------------------------------------
+class ISteamInventory
+{
+public:
+
+ // INVENTORY ASYNC RESULT MANAGEMENT
+ //
+ // Asynchronous inventory queries always output a result handle which can be used with
+ // GetResultStatus, GetResultItems, etc. A SteamInventoryResultReady_t callback will
+ // be triggered when the asynchronous result becomes ready (or fails).
+ //
+
+ // Find out the status of an asynchronous inventory result handle. Possible values:
+ // k_EResultPending - still in progress
+ // k_EResultOK - done, result ready
+ // k_EResultExpired - done, result ready, maybe out of date (see DeserializeResult)
+ // k_EResultInvalidParam - ERROR: invalid API call parameters
+ // k_EResultServiceUnavailable - ERROR: service temporarily down, you may retry later
+ // k_EResultLimitExceeded - ERROR: operation would exceed per-user inventory limits
+ // k_EResultFail - ERROR: unknown / generic error
+ METHOD_DESC(Find out the status of an asynchronous inventory result handle.)
+ virtual EResult GetResultStatus( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Copies the contents of a result set into a flat array. The specific
+ // contents of the result set depend on which query which was used.
+ METHOD_DESC(Copies the contents of a result set into a flat array. The specific contents of the result set depend on which query which was used.)
+ virtual bool GetResultItems( SteamInventoryResult_t resultHandle,
+ OUT_ARRAY_COUNT( punOutItemsArraySize,Output array) SteamItemDetails_t *pOutItemsArray,
+ uint32 *punOutItemsArraySize ) = 0;
+
+ // Returns the server time at which the result was generated. Compare against
+ // the value of IClientUtils::GetServerRealTime() to determine age.
+ METHOD_DESC(Returns the server time at which the result was generated. Compare against the value of IClientUtils::GetServerRealTime() to determine age.)
+ virtual uint32 GetResultTimestamp( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Returns true if the result belongs to the target steam ID, false if the
+ // result does not. This is important when using DeserializeResult, to verify
+ // that a remote player is not pretending to have a different user's inventory.
+ METHOD_DESC(Returns true if the result belongs to the target steam ID or false if the result does not. This is important when using DeserializeResult to verify that a remote player is not pretending to have a different users inventory.)
+ virtual bool CheckResultSteamID( SteamInventoryResult_t resultHandle, CSteamID steamIDExpected ) = 0;
+
+ // Destroys a result handle and frees all associated memory.
+ METHOD_DESC(Destroys a result handle and frees all associated memory.)
+ virtual void DestroyResult( SteamInventoryResult_t resultHandle ) = 0;
+
+
+ // INVENTORY ASYNC QUERY
+ //
+
+ // Captures the entire state of the current user's Steam inventory.
+ // You must call DestroyResult on this handle when you are done with it.
+ // Returns false and sets *pResultHandle to zero if inventory is unavailable.
+ // Note: calls to this function are subject to rate limits and may return
+ // cached results if called too frequently. It is suggested that you call
+ // this function only when you are about to display the user's full inventory,
+ // or if you expect that the inventory may have changed.
+ METHOD_DESC(Captures the entire state of the current users Steam inventory.)
+ virtual bool GetAllItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+
+ // Captures the state of a subset of the current user's Steam inventory,
+ // identified by an array of item instance IDs. The results from this call
+ // can be serialized and passed to other players to "prove" that the current
+ // user owns specific items, without exposing the user's entire inventory.
+ // For example, you could call GetItemsByID with the IDs of the user's
+ // currently equipped cosmetic items and serialize this to a buffer, and
+ // then transmit this buffer to other players upon joining a game.
+ METHOD_DESC(Captures the state of a subset of the current users Steam inventory identified by an array of item instance IDs.)
+ virtual bool GetItemsByID( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT( unCountInstanceIDs ) const SteamItemInstanceID_t *pInstanceIDs, uint32 unCountInstanceIDs ) = 0;
+
+
+ // RESULT SERIALIZATION AND AUTHENTICATION
+ //
+ // Serialized result sets contain a short signature which can't be forged
+ // or replayed across different game sessions. A result set can be serialized
+ // on the local client, transmitted to other players via your game networking,
+ // and deserialized by the remote players. This is a secure way of preventing
+ // hackers from lying about posessing rare/high-value items.
+
+ // Serializes a result set with signature bytes to an output buffer. Pass
+ // NULL as an output buffer to get the required size via punOutBufferSize.
+ // The size of a serialized result depends on the number items which are being
+ // serialized. When securely transmitting items to other players, it is
+ // recommended to use "GetItemsByID" first to create a minimal result set.
+ // Results have a built-in timestamp which will be considered "expired" after
+ // an hour has elapsed. See DeserializeResult for expiration handling.
+ virtual bool SerializeResult( SteamInventoryResult_t resultHandle, OUT_BUFFER_COUNT(punOutBufferSize) void *pOutBuffer, uint32 *punOutBufferSize ) = 0;
+
+ // Deserializes a result set and verifies the signature bytes. Returns false
+ // if bRequireFullOnlineVerify is set but Steam is running in Offline mode.
+ // Otherwise returns true and then delivers error codes via GetResultStatus.
+ //
+ // The bRESERVED_MUST_BE_FALSE flag is reserved for future use and should not
+ // be set to true by your game at this time.
+ //
+ // DeserializeResult has a potential soft-failure mode where the handle status
+ // is set to k_EResultExpired. GetResultItems() still succeeds in this mode.
+ // The "expired" result could indicate that the data may be out of date - not
+ // just due to timed expiration (one hour), but also because one of the items
+ // in the result set may have been traded or consumed since the result set was
+ // generated. You could compare the timestamp from GetResultTimestamp() to
+ // ISteamUtils::GetServerRealTime() to determine how old the data is. You could
+ // simply ignore the "expired" result code and continue as normal, or you
+ // could challenge the player with expired data to send an updated result set.
+ virtual bool DeserializeResult( SteamInventoryResult_t *pOutResultHandle, BUFFER_COUNT(punOutBufferSize) const void *pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE = false ) = 0;
+
+
+ // INVENTORY ASYNC MODIFICATION
+ //
+
+ // GenerateItems() creates one or more items and then generates a SteamInventoryCallback_t
+ // notification with a matching nCallbackContext parameter. This API is insecure, and could
+ // be abused by hacked clients. It is, however, very useful as a development cheat or as
+ // a means of prototyping item-related features for your game. The use of GenerateItems can
+ // be restricted to certain item definitions or fully blocked via the Steamworks website.
+ // If punArrayQuantity is not NULL, it should be the same length as pArrayItems and should
+ // describe the quantity of each item to generate.
+ virtual bool GenerateItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, ARRAY_COUNT(unArrayLength) const uint32 *punArrayQuantity, uint32 unArrayLength ) = 0;
+
+ // GrantPromoItems() checks the list of promotional items for which the user may be eligible
+ // and grants the items (one time only). On success, the result set will include items which
+ // were granted, if any. If no items were granted because the user isn't eligible for any
+ // promotions, this is still considered a success.
+ METHOD_DESC(GrantPromoItems() checks the list of promotional items for which the user may be eligible and grants the items (one time only).)
+ virtual bool GrantPromoItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+ // AddPromoItem() / AddPromoItems() are restricted versions of GrantPromoItems(). Instead of
+ // scanning for all eligible promotional items, the check is restricted to a single item
+ // definition or set of item definitions. This can be useful if your game has custom UI for
+ // showing a specific promo item to the user.
+ virtual bool AddPromoItem( SteamInventoryResult_t *pResultHandle, SteamItemDef_t itemDef ) = 0;
+ virtual bool AddPromoItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, uint32 unArrayLength ) = 0;
+
+ // ConsumeItem() removes items from the inventory, permanently. They cannot be recovered.
+ // Not for the faint of heart - if your game implements item removal at all, a high-friction
+ // UI confirmation process is highly recommended. Similar to GenerateItems, punArrayQuantity
+ // can be NULL or else an array of the same length as pArrayItems which describe the quantity
+ // of each item to destroy. ConsumeItem can be restricted to certain item definitions or
+ // fully blocked via the Steamworks website to minimize support/abuse issues such as the
+ // clasic "my brother borrowed my laptop and deleted all of my rare items".
+ METHOD_DESC(ConsumeItem() removes items from the inventory permanently.)
+ virtual bool ConsumeItem( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity ) = 0;
+
+ // ExchangeItems() is an atomic combination of GenerateItems and DestroyItems. It can be
+ // used to implement crafting recipes or transmutations, or items which unpack themselves
+ // into other items. Like GenerateItems, this is a flexible and dangerous API which is
+ // meant for rapid prototyping. You can configure restrictions on ExchangeItems via the
+ // Steamworks website, such as limiting it to a whitelist of input/output combinations
+ // corresponding to recipes.
+ // (Note: although GenerateItems may be hard or impossible to use securely in your game,
+ // ExchangeItems is perfectly reasonable to use once the whitelists are set accordingly.)
+ virtual bool ExchangeItems( SteamInventoryResult_t *pResultHandle,
+ ARRAY_COUNT(unArrayGenerateLength) const SteamItemDef_t *pArrayGenerate, ARRAY_COUNT(unArrayGenerateLength) const uint32 *punArrayGenerateQuantity, uint32 unArrayGenerateLength,
+ ARRAY_COUNT(unArrayDestroyLength) const SteamItemInstanceID_t *pArrayDestroy, ARRAY_COUNT(unArrayDestroyLength) const uint32 *punArrayDestroyQuantity, uint32 unArrayDestroyLength ) = 0;
+
+
+ // TransferItemQuantity() is intended for use with items which are "stackable" (can have
+ // quantity greater than one). It can be used to split a stack into two, or to transfer
+ // quantity from one stack into another stack of identical items. To split one stack into
+ // two, pass k_SteamItemInstanceIDInvalid for itemIdDest and a new item will be generated.
+ virtual bool TransferItemQuantity( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest ) = 0;
+
+
+ // TIMED DROPS AND PLAYTIME CREDIT
+ //
+
+ // Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when
+ // active gameplay begins, and at least once every two minutes afterwards. The backend
+ // performs its own time calculations, so the precise timing of the heartbeat is not
+ // critical as long as you send at least one heartbeat every two minutes. Calling the
+ // function more often than that is not harmful, it will simply have no effect. Note:
+ // players may be able to spoof this message by hacking their client, so you should not
+ // attempt to use this as a mechanism to restrict playtime credits. It is simply meant
+ // to distinguish between being in any kind of gameplay situation vs the main menu or
+ // a pre-game launcher window. (If you are stingy with handing out playtime credit, it
+ // will only encourage players to run bots or use mouse/kb event simulators.)
+ //
+ // Playtime credit accumulation can be capped on a daily or weekly basis through your
+ // Steamworks configuration.
+ //
+ METHOD_DESC(Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when active gameplay begins and at least once every two minutes afterwards.)
+ virtual void SendItemDropHeartbeat() = 0;
+
+ // Playtime credit must be consumed and turned into item drops by your game. Only item
+ // definitions which are marked as "playtime item generators" can be spawned. The call
+ // will return an empty result set if there is not enough playtime credit for a drop.
+ // Your game should call TriggerItemDrop at an appropriate time for the user to receive
+ // new items, such as between rounds or while the player is dead. Note that players who
+ // hack their clients could modify the value of "dropListDefinition", so do not use it
+ // to directly control rarity. It is primarily useful during testing and development,
+ // where you may wish to perform experiments with different types of drops.
+ METHOD_DESC(Playtime credit must be consumed and turned into item drops by your game.)
+ virtual bool TriggerItemDrop( SteamInventoryResult_t *pResultHandle, SteamItemDef_t dropListDefinition ) = 0;
+
+
+ // IN-GAME TRADING
+ //
+ // TradeItems() implements limited in-game trading of items, if you prefer not to use
+ // the overlay or an in-game web browser to perform Steam Trading through the website.
+ // You should implement a UI where both players can see and agree to a trade, and then
+ // each client should call TradeItems simultaneously (+/- 5 seconds) with matching
+ // (but reversed) parameters. The result is the same as if both players performed a
+ // Steam Trading transaction through the web. Each player will get an inventory result
+ // confirming the removal or quantity changes of the items given away, and the new
+ // item instance id numbers and quantities of the received items.
+ // (Note: new item instance IDs are generated whenever an item changes ownership.)
+ virtual bool TradeItems( SteamInventoryResult_t *pResultHandle, CSteamID steamIDTradePartner,
+ ARRAY_COUNT(nArrayGiveLength) const SteamItemInstanceID_t *pArrayGive, ARRAY_COUNT(nArrayGiveLength) const uint32 *pArrayGiveQuantity, uint32 nArrayGiveLength,
+ ARRAY_COUNT(nArrayGetLength) const SteamItemInstanceID_t *pArrayGet, ARRAY_COUNT(nArrayGetLength) const uint32 *pArrayGetQuantity, uint32 nArrayGetLength ) = 0;
+
+
+ // ITEM DEFINITIONS
+ //
+ // Item definitions are a mapping of "definition IDs" (integers between 1 and 1000000)
+ // to a set of string properties. Some of these properties are required to display items
+ // on the Steam community web site. Other properties can be defined by applications.
+ // Use of these functions is optional; there is no reason to call LoadItemDefinitions
+ // if your game hardcodes the numeric definition IDs (eg, purple face mask = 20, blue
+ // weapon mod = 55) and does not allow for adding new item types without a client patch.
+ //
+
+ // LoadItemDefinitions triggers the automatic load and refresh of item definitions.
+ // Every time new item definitions are available (eg, from the dynamic addition of new
+ // item types while players are still in-game), a SteamInventoryDefinitionUpdate_t
+ // callback will be fired.
+ METHOD_DESC(LoadItemDefinitions triggers the automatic load and refresh of item definitions.)
+ virtual bool LoadItemDefinitions() = 0;
+
+ // GetItemDefinitionIDs returns the set of all defined item definition IDs (which are
+ // defined via Steamworks configuration, and not necessarily contiguous integers).
+ // If pItemDefIDs is null, the call will return true and *punItemDefIDsArraySize will
+ // contain the total size necessary for a subsequent call. Otherwise, the call will
+ // return false if and only if there is not enough space in the output array.
+ virtual bool GetItemDefinitionIDs(
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+
+ // GetItemDefinitionProperty returns a string property from a given item definition.
+ // Note that some properties (for example, "name") may be localized and will depend
+ // on the current Steam language settings (see ISteamApps::GetCurrentGameLanguage).
+ // Property names are always composed of ASCII letters, numbers, and/or underscores.
+ // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available
+ // property names.
+ virtual bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPropertyName,
+ OUT_STRING_COUNT(punValueBufferSize) char *pchValueBuffer, uint32 *punValueBufferSize ) = 0;
+};
+
+#define STEAMINVENTORY_INTERFACE_VERSION "STEAMINVENTORY_INTERFACE_V001"
+
+
+// SteamInventoryResultReady_t callbacks are fired whenever asynchronous
+// results transition from "Pending" to "OK" or an error state. There will
+// always be exactly one callback per handle.
+struct SteamInventoryResultReady_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 0 };
+ SteamInventoryResult_t m_handle;
+ EResult m_result;
+};
+
+
+// SteamInventoryFullUpdate_t callbacks are triggered when GetAllItems
+// successfully returns a result which is newer / fresher than the last
+// known result. (It will not trigger if the inventory hasn't changed,
+// or if results from two overlapping calls are reversed in flight and
+// the earlier result is already known to be stale/out-of-date.)
+// The normal ResultReady callback will still be triggered immediately
+// afterwards; this is an additional notification for your convenience.
+struct SteamInventoryFullUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 1 };
+ SteamInventoryResult_t m_handle;
+};
+
+
+// A SteamInventoryDefinitionUpdate_t callback is triggered whenever
+// item definitions have been updated, which could be in response to
+// LoadItemDefinitions() or any other async request which required
+// a definition update in order to process results from the server.
+struct SteamInventoryDefinitionUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_135a/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_135a/isteammatchmaking.h b/lsteamclient/steamworks_sdk_135a/isteammatchmaking.h
new file mode 100644
index 00000000..80606dfd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteammatchmaking.h
@@ -0,0 +1,747 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) = 0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, OUT_STRUCT() CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, OUT_STRUCT() CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_135a/isteammusic.h b/lsteamclient/steamworks_sdk_135a/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteammusicremote.h b/lsteamclient/steamworks_sdk_135a/isteammusicremote.h
new file mode 100644
index 00000000..5893ef4b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteammusicremote.h
@@ -0,0 +1,129 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSICREMOTE_H
+#define ISTEAMMUSICREMOTE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteammusic.h"
+
+#define k_SteamMusicNameMaxLength 255
+#define k_SteamMusicPNGMaxLength 65535
+
+
+class ISteamMusicRemote
+{
+public:
+ // Service Definition
+ virtual bool RegisterSteamMusicRemote( const char *pchName ) = 0;
+ virtual bool DeregisterSteamMusicRemote() = 0;
+ virtual bool BIsCurrentMusicRemote() = 0;
+ virtual bool BActivationSuccess( bool bValue ) = 0;
+
+ virtual bool SetDisplayName( const char *pchDisplayName ) = 0;
+ virtual bool SetPNGIcon_64x64( void *pvBuffer, uint32 cbBufferLength ) = 0;
+
+ // Abilities for the user interface
+ virtual bool EnablePlayPrevious(bool bValue) = 0;
+ virtual bool EnablePlayNext( bool bValue ) = 0;
+ virtual bool EnableShuffled( bool bValue ) = 0;
+ virtual bool EnableLooped( bool bValue ) = 0;
+ virtual bool EnableQueue( bool bValue ) = 0;
+ virtual bool EnablePlaylists( bool bValue ) = 0;
+
+ // Status
+ virtual bool UpdatePlaybackStatus( AudioPlayback_Status nStatus ) = 0;
+ virtual bool UpdateShuffled( bool bValue ) = 0;
+ virtual bool UpdateLooped( bool bValue ) = 0;
+ virtual bool UpdateVolume( float flValue ) = 0; // volume is between 0.0 and 1.0
+
+ // Current Entry
+ virtual bool CurrentEntryWillChange() = 0;
+ virtual bool CurrentEntryIsAvailable( bool bAvailable ) = 0;
+ virtual bool UpdateCurrentEntryText( const char *pchText ) = 0;
+ virtual bool UpdateCurrentEntryElapsedSeconds( int nValue ) = 0;
+ virtual bool UpdateCurrentEntryCoverArt( void *pvBuffer, uint32 cbBufferLength ) = 0;
+ virtual bool CurrentEntryDidChange() = 0;
+
+ // Queue
+ virtual bool QueueWillChange() = 0;
+ virtual bool ResetQueueEntries() = 0;
+ virtual bool SetQueueEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentQueueEntry( int nID ) = 0;
+ virtual bool QueueDidChange() = 0;
+
+ // Playlist
+ virtual bool PlaylistWillChange() = 0;
+ virtual bool ResetPlaylistEntries() = 0;
+ virtual bool SetPlaylistEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentPlaylistEntry( int nID ) = 0;
+ virtual bool PlaylistDidChange() = 0;
+};
+
+#define STEAMMUSICREMOTE_INTERFACE_VERSION "STEAMMUSICREMOTE_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillActivate_t, k_iSteamMusicRemoteCallbacks + 1)
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillDeactivate_t, k_iSteamMusicRemoteCallbacks + 2 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteToFront_t, k_iSteamMusicRemoteCallbacks + 3 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWillQuit_t, k_iSteamMusicRemoteCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlay_t, k_iSteamMusicRemoteCallbacks + 5 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPause_t, k_iSteamMusicRemoteCallbacks + 6 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayPrevious_t, k_iSteamMusicRemoteCallbacks + 7 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayNext_t, k_iSteamMusicRemoteCallbacks + 8 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsShuffled_t, k_iSteamMusicRemoteCallbacks + 9 )
+ CALLBACK_MEMBER( 0, bool, m_bShuffled )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsLooped_t, k_iSteamMusicRemoteCallbacks + 10 )
+ CALLBACK_MEMBER(0, bool, m_bLooped )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsVolume_t, k_iSteamMusicCallbacks + 11 )
+ CALLBACK_MEMBER(0, float, m_flNewVolume)
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsQueueEntry_t, k_iSteamMusicCallbacks + 12 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsPlaylistEntry_t, k_iSteamMusicCallbacks + 13 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayingRepeatStatus_t, k_iSteamMusicRemoteCallbacks + 14 )
+ CALLBACK_MEMBER(0, int, m_nPlayingRepeatStatus )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+
+#endif // #define ISTEAMMUSICREMOTE_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteamnetworking.h b/lsteamclient/steamworks_sdk_135a/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_135a/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_135a/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_135a/isteamremotestorage.h b/lsteamclient/steamworks_sdk_135a/isteamremotestorage.h
new file mode 100644
index 00000000..e85e4c81
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamremotestorage.h
@@ -0,0 +1,675 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0, // normal Workshop item that can be subscribed to
+ k_EWorkshopFileTypeMicrotransaction = 1, // Workshop item that is meant to be voted on for the purpose of selling in-game
+ k_EWorkshopFileTypeCollection = 2, // a collection of Workshop or Greenlight items
+ k_EWorkshopFileTypeArt = 3, // artwork
+ k_EWorkshopFileTypeVideo = 4, // external video
+ k_EWorkshopFileTypeScreenshot = 5, // screenshot
+ k_EWorkshopFileTypeGame = 6, // Greenlight game entry
+ k_EWorkshopFileTypeSoftware = 7, // Greenlight software entry
+ k_EWorkshopFileTypeConcept = 8, // Greenlight concept
+ k_EWorkshopFileTypeWebGuide = 9, // Steam web guide
+ k_EWorkshopFileTypeIntegratedGuide = 10, // application integrated guide
+ k_EWorkshopFileTypeMerch = 11, // Workshop merchandise meant to be voted on for the purpose of being sold
+ k_EWorkshopFileTypeControllerBinding = 12, // Steam Controller bindings
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13, // internal
+ k_EWorkshopFileTypeSteamVideo = 14, // Steam video
+ k_EWorkshopFileTypeGameManagedItem = 15, // managed completely by the game, not the user, and not shown on the web
+
+ // Update k_EWorkshopFileTypeMax if you add values.
+ k_EWorkshopFileTypeMax = 16
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+ k_EWorkshopVoteLater = 3,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+
+ virtual SteamAPICall_t FileWriteAsync( const char *pchFile, const void *pvData, uint32 cubData ) = 0;
+
+ virtual SteamAPICall_t FileReadAsync( const char *pchFile, uint32 nOffset, uint32 cubToRead ) = 0;
+ virtual bool FileReadAsyncComplete( SteamAPICall_t hReadCall, void *pvBuffer, uint32 cubToRead ) = 0;
+
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, OUT_STRUCT() CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION013"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ UGCHandle_t m_hFile; // The new content
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileWriteAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileWriteAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 31 };
+ EResult m_eResult; // result
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileReadAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileReadAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 32 };
+ SteamAPICall_t m_hFileReadAsync; // call handle of the async read which was made
+ EResult m_eResult; // result
+ uint32 m_nOffset; // offset in the file this read was at
+ uint32 m_cubRead; // amount read - will the <= the amount requested
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteamscreenshots.h b/lsteamclient/steamworks_sdk_135a/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteamugc.h b/lsteamclient/steamworks_sdk_135a/isteamugc.h
new file mode 100644
index 00000000..2ceec5d7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamugc.h
@@ -0,0 +1,385 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+ k_EUGCMatchingUGCType_GameManagedItems = 12, // game managed items (not managed by users)
+ k_EUGCMatchingUGCType_All = ~0, // return everything
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+ k_EUGCQuery_RankedByTotalUniqueSubscriptions = 12,
+};
+
+enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0, // The item update handle was invalid, job might be finished, listen too SubmitItemUpdateResult_t
+ k_EItemUpdateStatusPreparingConfig = 1, // The item update is processing configuration data
+ k_EItemUpdateStatusPreparingContent = 2, // The item update is reading and processing content files
+ k_EItemUpdateStatusUploadingContent = 3, // The item update is uploading content changes to Steam
+ k_EItemUpdateStatusUploadingPreviewFile = 4, // The item update is uploading new preview file image
+ k_EItemUpdateStatusCommittingChanges = 5 // The item update is committing all changes
+};
+
+enum EItemState
+{
+ k_EItemStateNone = 0, // item not tracked on client
+ k_EItemStateSubscribed = 1, // current user is subscribed to this item. Not just cached.
+ k_EItemStateLegacyItem = 2, // item was created with ISteamRemoteStorage
+ k_EItemStateInstalled = 4, // item is installed and usable (but maybe out of date)
+ k_EItemStateNeedsUpdate = 8, // items needs an update. Either because it's not installed yet or creator updated content
+ k_EItemStateDownloading = 16, // item update is currently downloading
+ k_EItemStateDownloadPending = 32, // DownloadItem() was called for this item, content isn't available until DownloadItemResult_t is fired
+};
+
+enum EItemStatistic
+{
+ k_EItemStatistic_NumSubscriptions = 0,
+ k_EItemStatistic_NumFavorites = 1,
+ k_EItemStatistic_NumFollowers = 2,
+ k_EItemStatistic_NumUniqueSubscriptions = 3,
+ k_EItemStatistic_NumUniqueFavorites = 4,
+ k_EItemStatistic_NumUniqueFollowers = 5,
+ k_EItemStatistic_NumUniqueWebsiteViews = 6,
+ k_EItemStatistic_ReportScore = 7,
+};
+
+const uint32 kNumUGCResultsPerPage = 50;
+const uint32 k_cchDeveloperMetadataMax = 5000;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+ // collection details
+ uint32 m_unNumChildren;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for the details of the given published file ids (the RequestUGCDetails call is deprecated and replaced with this)
+ virtual UGCQueryHandle_t CreateQueryUGCDetailsRequest( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+
+ // Send the query to Steam
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+ virtual bool GetQueryUGCPreviewURL( UGCQueryHandle_t handle, uint32 index, char *pchURL, uint32 cchURLSize ) = 0;
+ virtual bool GetQueryUGCMetadata( UGCQueryHandle_t handle, uint32 index, char *pchMetadata, uint32 cchMetadatasize ) = 0;
+ virtual bool GetQueryUGCChildren( UGCQueryHandle_t handle, uint32 index, PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0;
+ virtual bool GetQueryUGCStatistic( UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 *pStatValue ) = 0;
+ virtual uint32 GetQueryUGCNumAdditionalPreviews( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCAdditionalPreview( UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char *pchURLOrVideoID, uint32 cchURLSize, bool *pbIsImage ) = 0;
+ virtual uint32 GetQueryUGCNumKeyValueTags( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCKeyValueTag( UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char *pchKey, uint32 cchKeySize, char *pchValue, uint32 cchValueSize ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnKeyValueTags( UGCQueryHandle_t handle, bool bReturnKeyValueTags ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnMetadata( UGCQueryHandle_t handle, bool bReturnMetadata ) = 0;
+ virtual bool SetReturnChildren( UGCQueryHandle_t handle, bool bReturnChildren ) = 0;
+ virtual bool SetReturnAdditionalPreviews( UGCQueryHandle_t handle, bool bReturnAdditionalPreviews ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetLanguage( UGCQueryHandle_t handle, const char *pchLanguage ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+ virtual bool AddRequiredKeyValueTag( UGCQueryHandle_t handle, const char *pKey, const char *pValue ) = 0;
+
+ // DEPRECATED - Use CreateQueryUGCDetailsRequest call above instead!
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+ // Steam Workshop Creator API
+ virtual SteamAPICall_t CreateItem( AppId_t nConsumerAppId, EWorkshopFileType eFileType ) = 0; // create new item for this app with no content attached yet
+
+ virtual UGCUpdateHandle_t StartItemUpdate( AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID ) = 0; // start an UGC item update. Set changed properties before commiting update with CommitItemUpdate()
+
+ virtual bool SetItemTitle( UGCUpdateHandle_t handle, const char *pchTitle ) = 0; // change the title of an UGC item
+ virtual bool SetItemDescription( UGCUpdateHandle_t handle, const char *pchDescription ) = 0; // change the description of an UGC item
+ virtual bool SetItemUpdateLanguage( UGCUpdateHandle_t handle, const char *pchLanguage ) = 0; // specify the language of the title or description that will be set
+ virtual bool SetItemMetadata( UGCUpdateHandle_t handle, const char *pchMetaData ) = 0; // change the metadata of an UGC item (max = k_cchDeveloperMetadataMax)
+ virtual bool SetItemVisibility( UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item
+ virtual bool SetItemTags( UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item
+ virtual bool SetItemContent( UGCUpdateHandle_t handle, const char *pszContentFolder ) = 0; // update item content from this local folder
+ virtual bool SetItemPreview( UGCUpdateHandle_t handle, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file, which must be under 1MB in size
+ virtual bool RemoveItemKeyValueTags( UGCUpdateHandle_t handle, const char *pchKey ) = 0; // remove any existing key-value tags with the specified key
+ virtual bool AddItemKeyValueTag( UGCUpdateHandle_t handle, const char *pchKey, const char *pchValue ) = 0; // add new key-value tags for the item. Note that there can be multiple values for a tag.
+
+ virtual SteamAPICall_t SubmitItemUpdate( UGCUpdateHandle_t handle, const char *pchChangeNote ) = 0; // commit update process started with StartItemUpdate()
+ virtual EItemUpdateStatus GetItemUpdateProgress( UGCUpdateHandle_t handle, uint64 *punBytesProcessed, uint64* punBytesTotal ) = 0;
+
+ // Steam Workshop Consumer API
+ virtual SteamAPICall_t SetUserItemVote( PublishedFileId_t nPublishedFileID, bool bVoteUp ) = 0;
+ virtual SteamAPICall_t GetUserItemVote( PublishedFileId_t nPublishedFileID ) = 0;
+ virtual SteamAPICall_t AddItemToFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ virtual SteamAPICall_t RemoveItemFromFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ virtual SteamAPICall_t SubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // subscribe to this item, will be installed ASAP
+ virtual SteamAPICall_t UnsubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // unsubscribe from this item, will be uninstalled after game quits
+ virtual uint32 GetNumSubscribedItems() = 0; // number of subscribed items
+ virtual uint32 GetSubscribedItems( PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; // all subscribed item PublishFileIDs
+
+ // get EItemState flags about item on this client
+ virtual uint32 GetItemState( PublishedFileId_t nPublishedFileID ) = 0;
+
+ // get info about currently installed content on disc for items that have k_EItemStateInstalled set
+ // if k_EItemStateLegacyItem is set, pchFolder contains the path to the legacy file itself (not a folder)
+ virtual bool GetItemInstallInfo( PublishedFileId_t nPublishedFileID, uint64 *punSizeOnDisk, char *pchFolder, uint32 cchFolderSize, uint32 *punTimeStamp ) = 0;
+
+ // get info about pending update for items that have k_EItemStateNeedsUpdate set. punBytesTotal will be valid after download started once
+ virtual bool GetItemDownloadInfo( PublishedFileId_t nPublishedFileID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // download new or update already installed item. If function returns true, wait for DownloadItemResult_t. If the item is already installed,
+ // then files on disk should not be used until callback received. If item is not subscribed to, it will be cached for some time.
+ // If bHighPriority is set, any other item download will be suspended and this item downloaded ASAP.
+ virtual bool DownloadItem( PublishedFileId_t nPublishedFileID, bool bHighPriority ) = 0;
+
+ // game servers can set a specific workshop folder before issuing any UGC commands.
+ // This is helpful if you want to support multiple game servers running out of the same install folder
+ virtual bool BInitWorkshopForGameServer( DepotId_t unWorkshopDepotID, const char *pszFolder ) = 0;
+
+ // SuspendDownloads( true ) will suspend all workshop downloads until SuspendDownloads( false ) is called or the game ends
+ virtual void SuspendDownloads( bool bSuspend ) = 0;
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION007"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::CreateItem()
+//-----------------------------------------------------------------------------
+struct CreateItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 3 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId; // new item got this UGC PublishFileID
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::SubmitItemUpdate()
+//-----------------------------------------------------------------------------
+struct SubmitItemUpdateResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 4 };
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a Workshop item has been installed or updated
+//-----------------------------------------------------------------------------
+struct ItemInstalled_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 5 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of DownloadItem(), existing item files can be accessed again
+//-----------------------------------------------------------------------------
+struct DownloadItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 6 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: result of AddItemToFavorites() or RemoveItemFromFavorites()
+//-----------------------------------------------------------------------------
+struct UserFavoriteItemsListChanged_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 7 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bWasAddRequest;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SetUserItemVote()
+//-----------------------------------------------------------------------------
+struct SetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 8 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVoteUp;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserItemVote()
+//-----------------------------------------------------------------------------
+struct GetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 9 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVotedUp;
+ bool m_bVotedDown;
+ bool m_bVoteSkipped;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_135a/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteamuser.h b/lsteamclient/steamworks_sdk_135a/isteamuser.h
new file mode 100644
index 00000000..2fd9ee4f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamuser.h
@@ -0,0 +1,380 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+ // Requests a URL which authenticates an in-game browser for store check-out,
+ // and then redirects to the specified URL. As long as the in-game browser
+ // accepts and handles session cookies, Steam microtransaction checkout pages
+ // will automatically recognize the user instead of presenting a login page.
+ // The result of this API call will be a StoreAuthURLResponse_t callback.
+ // NOTE: The URL has a very short lifetime to prevent history-snooping attacks,
+ // so you should only call this API when you are about to launch the browser,
+ // or else immediately navigate to the result URL using a hidden browser window.
+ // NOTE 2: The resulting authorization cookie has an expiration time of one day,
+ // so it would be a good idea to request and visit a new auth URL every 12 hours.
+ virtual SteamAPICall_t RequestStoreAuthURL( const char *pchRedirectURL ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser018"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+ bool m_bStillRetrying;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Signaled whenever licenses change
+//-----------------------------------------------------------------------------
+struct LicensesUpdated_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 25 };
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to ISteamUser::RequestStoreAuthURL
+//-----------------------------------------------------------------------------
+struct StoreAuthURLResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 65 };
+ char m_szURL[512];
+};
+
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteamuserstats.h b/lsteamclient/steamworks_sdk_135a/isteamuserstats.h
new file mode 100644
index 00000000..8c0c210d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamuserstats.h
@@ -0,0 +1,465 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ METHOD_DESC(Downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers)
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard,
+ ARRAY_COUNT_D(cUsers, Array of users to retrieve) CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteamutils.h b/lsteamclient/steamworks_sdk_135a/isteamutils.h
new file mode 100644
index 00000000..5c70ebe6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamutils.h
@@ -0,0 +1,310 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // this needs to be called every frame to process matchmaking results
+ // redundant if you're already calling SteamAPI_RunCallbacks()
+ virtual void RunFrame() = 0;
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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;
+
+#ifndef _PS3
+ // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+#endif
+
+#ifdef _PS3
+ virtual void PostPS3SysutilCallback( uint64_t status, uint64_t param, void* userdata ) = 0;
+ virtual bool BIsReadyToShutdown() = 0;
+ virtual bool BIsPSNOnline() = 0;
+
+ // Call this with localized strings for the language the game is running in, otherwise default english
+ // strings will be used by Steam.
+ virtual void SetPSNGameBootInviteStrings( const char *pchSubject, const char *pchBody ) = 0;
+#endif
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+
+ // Sets the inset of the overlay notification from the corner specified by SetOverlayNotificationPosition.
+ virtual void SetOverlayNotificationInset( int nHorizontalInset, int nVerticalInset ) = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils007"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+#ifdef _PS3
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog finishing on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 6 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NetCtlNetStartDialog unloaded on PS3
+//-----------------------------------------------------------------------------
+struct NetStartDialogUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 7 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for system menu closing on PS3 - should trigger resyncronizing friends list, etc.
+//-----------------------------------------------------------------------------
+struct PS3SystemMenuClosed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 8 };
+};
+
+//-----------------------------------------------------------------------------
+// callback for NP message being selected by user on PS3 - should trigger handling of message if it's a lobby invite, etc.
+//-----------------------------------------------------------------------------
+struct PS3NPMessageSelected_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 9 };
+ uint32 dataid;
+};
+
+//-----------------------------------------------------------------------------
+// callback for when the PS3 keyboard dialog closes
+//-----------------------------------------------------------------------------
+struct PS3KeyboardDialogFinished_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 10 };
+};
+
+// k_iSteamUtilsCallbacks + 11 is taken
+
+//-----------------------------------------------------------------------------
+// callback for PSN status changing on PS3
+//-----------------------------------------------------------------------------
+struct PS3PSNStatusChange_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 12 };
+ bool m_bPSNOnline;
+};
+
+#endif
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_135a/isteamvideo.h b/lsteamclient/steamworks_sdk_135a/isteamvideo.h
new file mode 100644
index 00000000..4431b4a1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/isteamvideo.h
@@ -0,0 +1,60 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Video
+//
+//=============================================================================
+
+#ifndef ISTEAMVIDEO_H
+#define ISTEAMVIDEO_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Video API
+//-----------------------------------------------------------------------------
+class ISteamVideo
+{
+public:
+
+ // Get a URL suitable for streaming the given Video app ID's video
+ virtual void GetVideoURL( AppId_t unVideoAppID ) = 0;
+
+ // returns true if user is uploading a live broadcast
+ virtual bool IsBroadcasting( int *pnNumViewers ) = 0;
+};
+
+#define STEAMVIDEO_INTERFACE_VERSION "STEAMVIDEO_INTERFACE_V001"
+
+DEFINE_CALLBACK( BroadcastUploadStart_t, k_iClientVideoCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( BroadcastUploadStop_t, k_iClientVideoCallbacks + 5 )
+ CALLBACK_MEMBER( 0, EBroadcastUploadResult, m_eResult )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( GetVideoURLResult_t, k_iClientVideoCallbacks + 11 )
+ CALLBACK_MEMBER( 0, EResult, m_eResult )
+ CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID )
+ CALLBACK_MEMBER( 2, char, m_rgchURL[256] )
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMVIDEO_H
diff --git a/lsteamclient/steamworks_sdk_135a/matchmakingtypes.h b/lsteamclient/steamworks_sdk_135a/matchmakingtypes.h
new file mode 100644
index 00000000..fcb61664
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/matchmakingtypes.h
@@ -0,0 +1,251 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ servernetadr_t() : m_usConnectionPort( 0 ), m_usQueryPort( 0 ), m_unIP( 0 ) {}
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_135a/steam_api.h b/lsteamclient/steamworks_sdk_135a/steam_api.h
new file mode 100644
index 00000000..47a2d65a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/steam_api.h
@@ -0,0 +1,638 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteammusicremote.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+#include "isteamhtmlsurface.h"
+#include "isteaminventory.h"
+#include "isteamvideo.h"
+
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *S_CALLTYPE SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+
+#else
+
+S_API bool S_CALLTYPE SteamAPI_Init();
+
+S_API ISteamUser *S_CALLTYPE SteamUser();
+S_API ISteamFriends *S_CALLTYPE SteamFriends();
+S_API ISteamUtils *S_CALLTYPE SteamUtils();
+S_API ISteamMatchmaking *S_CALLTYPE SteamMatchmaking();
+S_API ISteamUserStats *S_CALLTYPE SteamUserStats();
+S_API ISteamApps *S_CALLTYPE SteamApps();
+S_API ISteamNetworking *S_CALLTYPE SteamNetworking();
+S_API ISteamMatchmakingServers *S_CALLTYPE SteamMatchmakingServers();
+S_API ISteamRemoteStorage *S_CALLTYPE SteamRemoteStorage();
+S_API ISteamScreenshots *S_CALLTYPE SteamScreenshots();
+S_API ISteamHTTP *S_CALLTYPE SteamHTTP();
+S_API ISteamUnifiedMessages *S_CALLTYPE SteamUnifiedMessages();
+S_API ISteamController *S_CALLTYPE SteamController();
+S_API ISteamUGC *S_CALLTYPE SteamUGC();
+S_API ISteamAppList *S_CALLTYPE SteamAppList();
+S_API ISteamMusic *S_CALLTYPE SteamMusic();
+S_API ISteamMusicRemote *S_CALLTYPE SteamMusicRemote();
+S_API ISteamHTMLSurface *S_CALLTYPE SteamHTMLSurface();
+S_API ISteamInventory *S_CALLTYPE SteamInventory();
+S_API ISteamVideo *S_CALLTYPE SteamVideo();
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+// Most Steam API functions allocate some amount of thread-local memory for
+// parameter storage. The SteamAPI_ReleaseCurrentThreadMemory() function
+// will free all API-related memory associated with the calling thread.
+// This memory is also released automatically by SteamAPI_RunCallbacks(), so
+// a single-threaded program does not need to explicitly call this function.
+S_API void S_CALLTYPE SteamAPI_ReleaseCurrentThreadMemory();
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback and call-result helpers
+//
+// The following macros and classes are used to register your application for
+// callbacks and call-results, which are delivered in a predictable manner.
+//
+// STEAM_CALLBACK macros are meant for use inside of a C++ class definition.
+// They map a Steam notification callback directly to a class member function
+// which is automatically prototyped as "void func( callback_type *pParam )".
+//
+// CCallResult is used with specific Steam APIs that return "result handles".
+// The handle can be passed to a CCallResult object's Set function, along with
+// an object pointer and member-function pointer. The member function will
+// be executed once the results of the Steam API call are available.
+//
+// CCallback and CCallbackManual classes can be used instead of STEAM_CALLBACK
+// macros if you require finer control over registration and unregistration.
+//
+// Callbacks and call-results are queued automatically and are only
+// delivered/executed when your application calls SteamAPI_RunCallbacks().
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+
+// Declares a callback member function plus a helper member variable which
+// registers the callback on object creation and unregisters on destruction.
+// The optional fourth 'var' param exists only for backwards-compatibility
+// and can be ignored.
+#define STEAM_CALLBACK( thisclass, func, .../*callback_type, [deprecated] var*/ ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, 4, 3 ), ( /**/, thisclass, func, __VA_ARGS__ ) )
+
+// Declares a callback function and a named CCallbackManual variable which
+// has Register and Unregister functions instead of automatic registration.
+#define STEAM_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type > var; void func( callback_type *pParam )
+
+
+// Internal functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// Internal functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks and call results - internal implementation detail
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+
+private:
+ CCallbackBase( const CCallbackBase& );
+ CCallbackBase& operator=( const CCallbackBase& );
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: templated base for callbacks - internal implementation detail
+//-----------------------------------------------------------------------------
+template< int sizeof_P >
+class CCallbackImpl : protected CCallbackBase
+{
+public:
+ ~CCallbackImpl() { if ( m_nCallbackFlags & k_ECallbackFlagsRegistered ) SteamAPI_UnregisterCallback( this ); }
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+
+protected:
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool /*bIOFailure*/, SteamAPICall_t /*hSteamAPICall*/ ) { Run( pvParam ); }
+ virtual int GetCallbackSizeBytes() { return sizeof_P; }
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ virtual int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct,
+// bGameserver = listen for gameserver callbacks instead of client callbacks
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameserver = false >
+class CCallback : public CCallbackImpl< sizeof( P ) >
+{
+public:
+ typedef void (T::*func_t)(P*);
+
+ // NOTE: If you can't provide the correct parameters at construction time, you should
+ // use the CCallbackManual callback object (STEAM_CALLBACK_MANUAL macro) instead.
+ CCallback( T *pObj, func_t func ) : m_pObj( NULL ), m_Func( NULL )
+ {
+ if ( bGameserver )
+ {
+ this->SetGameserverFlag();
+ }
+ Register( pObj, func );
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( this->m_nCallbackFlags & CCallbackBase::k_ECallbackFlagsRegistered )
+ Unregister();
+
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: subclass of CCallback which allows default-construction in
+// an unregistered state; you must call Register manually
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer = false >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+
+ // Inherits public Register and Unregister functions from base class
+};
+
+
+
+//-----------------------------------------------------------------------------
+// The following macros are implementation details, not intended for public use
+//-----------------------------------------------------------------------------
+#define _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param )
+#define _STEAM_CALLBACK_HELPER( _1, _2, SELECTED, ... ) _STEAM_CALLBACK_##SELECTED
+#define _STEAM_CALLBACK_SELECT( X, Y ) _STEAM_CALLBACK_HELPER X Y
+#define _STEAM_CALLBACK_3( extra_code, thisclass, func, param ) \
+ struct CCallbackInternal_ ## func : private CCallbackImpl< sizeof( param ) > { \
+ CCallbackInternal_ ## func () { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func ( const CCallbackInternal_ ## func & ) { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func & operator=( const CCallbackInternal_ ## func & ) { return *this; } \
+ private: virtual void Run( void *pvParam ) { _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param ) \
+ thisclass *pOuter = reinterpret_cast<thisclass*>( reinterpret_cast<char*>(this) - offsetof( thisclass, m_steamcallback_ ## func ) ); \
+ pOuter->func( reinterpret_cast<param*>( pvParam ) ); \
+ } \
+ } m_steamcallback_ ## func ; void func( param *pParam )
+#define _STEAM_CALLBACK_4( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// pumps out all the steam messages, calling the register callback
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() { return m_pController; }
+ ISteamUGC* SteamUGC() { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() { return m_pSteamMusic; }
+ ISteamMusicRemote* SteamMusicRemote() { return m_pSteamMusicRemote; }
+ ISteamHTMLSurface* SteamHTMLSurface() { return m_pSteamHTMLSurface; }
+ ISteamInventory* SteamInventory() { return m_pSteamInventory; }
+ ISteamVideo* SteamVideo() { return m_pSteamVideo; }
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+ ISteamMusicRemote *m_pSteamMusicRemote;
+ ISteamHTMLSurface *m_pSteamHTMLSurface;
+ ISteamInventory *m_pSteamInventory;
+ ISteamVideo *m_pSteamVideo;
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamMusicRemote= NULL;
+ m_pSteamHTMLSurface = NULL;
+ m_pSteamInventory = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = SteamClient()->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = SteamClient()->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = SteamClient()->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = SteamClient()->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ {
+ return false;
+ }
+
+ m_pSteamMusicRemote = SteamClient()->GetISteamMusicRemote( hSteamUser, hSteamPipe, STEAMMUSICREMOTE_INTERFACE_VERSION );
+ if ( !m_pSteamMusicRemote )
+ {
+ return false;
+ }
+
+ m_pSteamHTMLSurface = SteamClient()->GetISteamHTMLSurface( hSteamUser, hSteamPipe, STEAMHTMLSURFACE_INTERFACE_VERSION );
+ if ( !m_pSteamHTMLSurface )
+ {
+ return false;
+ }
+
+ m_pSteamInventory = SteamClient()->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ {
+ return false;
+ }
+
+ m_pSteamVideo = SteamClient()->GetISteamVideo( hSteamUser, hSteamPipe, STEAMVIDEO_INTERFACE_VERSION );
+ if ( !m_pSteamVideo )
+ {
+ return false;
+ }
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// this should be called before the game initialized the steam APIs
+// pchDate should be of the format "Mmm dd yyyy" (such as from the under under DATE under under macro )
+// pchTime should be of the format "hh:mm:ss" (such as from the under under TIME under under macro )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_135a/steam_api_flat.h b/lsteamclient/steamworks_sdk_135a/steam_api_flat.h
new file mode 100644
index 00000000..426cac78
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/steam_api_flat.h
@@ -0,0 +1,657 @@
+//====== Copyright (c) 1996-2014, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Header for flatted SteamAPI. Use this for binding to other languages.
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+#ifndef STEAMAPIFLAT_H
+#define STEAMAPIFLAT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <stdint.h>
+
+
+S_API HSteamPipe SteamAPI_ISteamClient_CreateSteamPipe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamClient_BReleaseSteamPipe(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_ConnectToGlobalUser(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_CreateLocalUser(intptr_t instancePtr, HSteamPipe * phSteamPipe, EAccountType eAccountType);
+S_API void SteamAPI_ISteamClient_ReleaseUser(intptr_t instancePtr, HSteamPipe hSteamPipe, HSteamUser hUser);
+S_API class ISteamUser * SteamAPI_ISteamClient_GetISteamUser(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServer * SteamAPI_ISteamClient_GetISteamGameServer(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_SetLocalIPBinding(intptr_t instancePtr, uint32 unIP, uint16 usPort);
+S_API class ISteamFriends * SteamAPI_ISteamClient_GetISteamFriends(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUtils * SteamAPI_ISteamClient_GetISteamUtils(intptr_t instancePtr, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmaking * SteamAPI_ISteamClient_GetISteamMatchmaking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmakingServers * SteamAPI_ISteamClient_GetISteamMatchmakingServers(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void * SteamAPI_ISteamClient_GetISteamGenericInterface(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUserStats * SteamAPI_ISteamClient_GetISteamUserStats(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServerStats * SteamAPI_ISteamClient_GetISteamGameServerStats(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamApps * SteamAPI_ISteamClient_GetISteamApps(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamNetworking * SteamAPI_ISteamClient_GetISteamNetworking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamRemoteStorage * SteamAPI_ISteamClient_GetISteamRemoteStorage(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamScreenshots * SteamAPI_ISteamClient_GetISteamScreenshots(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_RunFrame(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamClient_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamClient_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(intptr_t instancePtr);
+S_API class ISteamHTTP * SteamAPI_ISteamClient_GetISteamHTTP(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUnifiedMessages * SteamAPI_ISteamClient_GetISteamUnifiedMessages(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamController * SteamAPI_ISteamClient_GetISteamController(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUGC * SteamAPI_ISteamClient_GetISteamUGC(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamAppList * SteamAPI_ISteamClient_GetISteamAppList(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusic * SteamAPI_ISteamClient_GetISteamMusic(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusicRemote * SteamAPI_ISteamClient_GetISteamMusicRemote(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamHTMLSurface * SteamAPI_ISteamClient_GetISteamHTMLSurface(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_Set_SteamAPI_CPostAPIResultInProcess(intptr_t instancePtr, SteamAPI_PostAPIResultInProcess_t func);
+S_API void SteamAPI_ISteamClient_Remove_SteamAPI_CPostAPIResultInProcess(intptr_t instancePtr, SteamAPI_PostAPIResultInProcess_t func);
+S_API void SteamAPI_ISteamClient_Set_SteamAPI_CCheckCallbackRegisteredInProcess(intptr_t instancePtr, SteamAPI_CheckCallbackRegistered_t func);
+S_API class ISteamInventory * SteamAPI_ISteamClient_GetISteamInventory(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamVideo * SteamAPI_ISteamClient_GetISteamVideo(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API HSteamUser SteamAPI_ISteamUser_GetHSteamUser(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BLoggedOn(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamUser_GetSteamID(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUser_InitiateGameConnection(intptr_t instancePtr, void * pAuthBlob, int cbMaxAuthBlob, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure);
+S_API void SteamAPI_ISteamUser_TerminateGameConnection(intptr_t instancePtr, uint32 unIPServer, uint16 usPortServer);
+S_API void SteamAPI_ISteamUser_TrackAppUsageEvent(intptr_t instancePtr, class CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo);
+S_API bool SteamAPI_ISteamUser_GetUserDataFolder(intptr_t instancePtr, char * pchBuffer, int cubBuffer);
+S_API void SteamAPI_ISteamUser_StartVoiceRecording(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_StopVoiceRecording(intptr_t instancePtr);
+S_API EVoiceResult SteamAPI_ISteamUser_GetAvailableVoice(intptr_t instancePtr, uint32 * pcbCompressed, uint32 * pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_GetVoice(intptr_t instancePtr, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_DecompressVoice(intptr_t instancePtr, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate);
+S_API uint32 SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(intptr_t instancePtr);
+S_API HAuthTicket SteamAPI_ISteamUser_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamUser_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamUser_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamUser_BIsBehindNAT(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_AdvertiseGame(intptr_t instancePtr, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestEncryptedAppTicket(intptr_t instancePtr, void * pDataToInclude, int cbDataToInclude);
+S_API bool SteamAPI_ISteamUser_GetEncryptedAppTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API int SteamAPI_ISteamUser_GetGameBadgeLevel(intptr_t instancePtr, int nSeries, bool bFoil);
+S_API int SteamAPI_ISteamUser_GetPlayerSteamLevel(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestStoreAuthURL(intptr_t instancePtr, const char * pchRedirectURL);
+S_API const char * SteamAPI_ISteamFriends_GetPersonaName(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_SetPersonaName(intptr_t instancePtr, const char * pchPersonaName);
+S_API EPersonaState SteamAPI_ISteamFriends_GetPersonaState(intptr_t instancePtr);
+S_API int SteamAPI_ISteamFriends_GetFriendCount(intptr_t instancePtr, int iFriendFlags);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendByIndex(intptr_t instancePtr, int iFriend, int iFriendFlags);
+S_API EFriendRelationship SteamAPI_ISteamFriends_GetFriendRelationship(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API EPersonaState SteamAPI_ISteamFriends_GetFriendPersonaState(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaName(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_GetFriendGamePlayed(intptr_t instancePtr, class CSteamID steamIDFriend, struct FriendGameInfo_t * pFriendGameInfo);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(intptr_t instancePtr, class CSteamID steamIDFriend, int iPersonaName);
+S_API int SteamAPI_ISteamFriends_GetFriendSteamLevel(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetPlayerNickname(intptr_t instancePtr, class CSteamID steamIDPlayer);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupCount(intptr_t instancePtr);
+S_API FriendsGroupID_t SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(intptr_t instancePtr, int iFG);
+S_API const char * SteamAPI_ISteamFriends_GetFriendsGroupName(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API void SteamAPI_ISteamFriends_GetFriendsGroupMembersList(intptr_t instancePtr, FriendsGroupID_t friendsGroupID, class CSteamID * pOutSteamIDMembers, int nMembersCount);
+S_API bool SteamAPI_ISteamFriends_HasFriend(intptr_t instancePtr, class CSteamID steamIDFriend, int iFriendFlags);
+S_API int SteamAPI_ISteamFriends_GetClanCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetClanByIndex(intptr_t instancePtr, int iClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanName(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanTag(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_GetClanActivityCounts(intptr_t instancePtr, class CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_DownloadClanActivityCounts(intptr_t instancePtr, class CSteamID * psteamIDClans, int cClansToRequest);
+S_API int SteamAPI_ISteamFriends_GetFriendCountFromSource(intptr_t instancePtr, class CSteamID steamIDSource);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(intptr_t instancePtr, class CSteamID steamIDSource, int iFriend);
+S_API bool SteamAPI_ISteamFriends_IsUserInSource(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDSource);
+S_API void SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(intptr_t instancePtr, class CSteamID steamIDUser, bool bSpeaking);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlay(intptr_t instancePtr, const char * pchDialog);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToUser(intptr_t instancePtr, const char * pchDialog, class CSteamID steamID);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(intptr_t instancePtr, const char * pchURL);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToStore(intptr_t instancePtr, AppId_t nAppID, EOverlayToStoreFlag eFlag);
+S_API void SteamAPI_ISteamFriends_SetPlayedWith(intptr_t instancePtr, class CSteamID steamIDUserPlayedWith);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API int SteamAPI_ISteamFriends_GetSmallFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetMediumFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetLargeFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_RequestUserInformation(intptr_t instancePtr, class CSteamID steamIDUser, bool bRequireNameOnly);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_RequestClanOfficerList(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOwner(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanOfficerCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOfficerByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iOfficer);
+S_API uint32 SteamAPI_ISteamFriends_GetUserRestrictions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamFriends_SetRichPresence(intptr_t instancePtr, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamFriends_ClearRichPresence(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchKey);
+S_API int SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(intptr_t instancePtr, class CSteamID steamIDFriend, int iKey);
+S_API void SteamAPI_ISteamFriends_RequestFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_InviteUserToGame(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchConnectString);
+S_API int SteamAPI_ISteamFriends_GetCoplayFriendCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetCoplayFriend(intptr_t instancePtr, int iCoplayFriend);
+S_API int SteamAPI_ISteamFriends_GetFriendCoplayTime(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API AppId_t SteamAPI_ISteamFriends_GetFriendCoplayGame(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_JoinClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_LeaveClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanChatMemberCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetChatMemberByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iUser);
+S_API bool SteamAPI_ISteamFriends_SendClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, const char * pchText);
+S_API int SteamAPI_ISteamFriends_GetClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, class CSteamID * psteamidChatter);
+S_API bool SteamAPI_ISteamFriends_IsClanChatAdmin(intptr_t instancePtr, class CSteamID steamIDClanChat, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_SetListenForFriendsMessages(intptr_t instancePtr, bool bInterceptEnabled);
+S_API bool SteamAPI_ISteamFriends_ReplyToFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchMsgToSend);
+S_API int SteamAPI_ISteamFriends_GetFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_GetFollowerCount(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_IsFollowing(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_EnumerateFollowingList(intptr_t instancePtr, uint32 unStartIndex);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceAppActive(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(intptr_t instancePtr);
+S_API EUniverse SteamAPI_ISteamUtils_GetConnectedUniverse(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetServerRealTime(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUtils_GetIPCountry(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetImageSize(intptr_t instancePtr, int iImage, uint32 * pnWidth, uint32 * pnHeight);
+S_API bool SteamAPI_ISteamUtils_GetImageRGBA(intptr_t instancePtr, int iImage, uint8 * pubDest, int nDestBufferSize);
+S_API bool SteamAPI_ISteamUtils_GetCSERIPPort(intptr_t instancePtr, uint32 * unIP, uint16 * usPort);
+S_API uint8 SteamAPI_ISteamUtils_GetCurrentBatteryPower(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetAppID(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationPosition(intptr_t instancePtr, ENotificationPosition eNotificationPosition);
+S_API bool SteamAPI_ISteamUtils_IsAPICallCompleted(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, bool * pbFailed);
+S_API ESteamAPICallFailure SteamAPI_ISteamUtils_GetAPICallFailureReason(intptr_t instancePtr, SteamAPICall_t hSteamAPICall);
+S_API bool SteamAPI_ISteamUtils_GetAPICallResult(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed);
+S_API void SteamAPI_ISteamUtils_RunFrame(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamUtils_IsOverlayEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_BOverlayNeedsPresent(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUtils_CheckFileSignature(intptr_t instancePtr, const char * szFileName);
+S_API bool SteamAPI_ISteamUtils_ShowGamepadTextInput(intptr_t instancePtr, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText);
+S_API uint32 SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(intptr_t instancePtr, char * pchText, uint32 cchText);
+S_API const char * SteamAPI_ISteamUtils_GetSteamUILanguage(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_IsSteamRunningInVR(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationInset(intptr_t instancePtr, int nHorizontalInset, int nVerticalInset);
+S_API int SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMatchmaking_GetFavoriteGame(intptr_t instancePtr, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer);
+S_API int SteamAPI_ISteamMatchmaking_AddFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer);
+S_API bool SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_RequestLobbyList(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(intptr_t instancePtr, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToBeCloseTo);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(intptr_t instancePtr, int nSlotsAvailable);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(intptr_t instancePtr, ELobbyDistanceFilter eLobbyDistanceFilter);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(intptr_t instancePtr, int cMaxResults);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyByIndex(intptr_t instancePtr, int iLobby);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_CreateLobby(intptr_t instancePtr, ELobbyType eLobbyType, int cMaxMembers);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_JoinLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_LeaveLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_InviteUserToLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDInvitee);
+S_API int SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iMember);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyDataCount(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize);
+S_API bool SteamAPI_ISteamMatchmaking_DeleteLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDUser, const char * pchKey);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(intptr_t instancePtr, class CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(intptr_t instancePtr, class CSteamID steamIDLobby, int iChatID, class CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API bool SteamAPI_ISteamMatchmaking_RequestLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, class CSteamID steamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, class CSteamID * psteamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby, int cMaxMembers);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyType(intptr_t instancePtr, class CSteamID steamIDLobby, ELobbyType eLobbyType);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyJoinable(intptr_t instancePtr, class CSteamID steamIDLobby, bool bLobbyJoinable);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDNewOwner);
+S_API bool SteamAPI_ISteamMatchmaking_SetLinkedLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDLobbyDependent);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(intptr_t instancePtr, HServerListRequest hRequest, EMatchMakingServerResponse response);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(intptr_t instancePtr, class gameserveritem_t & server);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(intptr_t instancePtr, const char * pchName, int nScore, float flTimePlayed);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(intptr_t instancePtr, const char * pchRule, const char * pchValue);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(intptr_t instancePtr);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestLANServerList(intptr_t instancePtr, AppId_t iApp, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_ReleaseRequest(intptr_t instancePtr, HServerListRequest hServerListRequest);
+S_API class gameserveritem_t * SteamAPI_ISteamMatchmakingServers_GetServerDetails(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API bool SteamAPI_ISteamMatchmakingServers_IsRefreshing(intptr_t instancePtr, HServerListRequest hRequest);
+S_API int SteamAPI_ISteamMatchmakingServers_GetServerCount(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshServer(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PingServer(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPingResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PlayerDetails(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPlayersResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_ServerRules(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingRulesResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelServerQuery(intptr_t instancePtr, HServerQuery hServerQuery);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWrite(intptr_t instancePtr, const char * pchFile, const void * pvData, int32 cubData);
+S_API int32 SteamAPI_ISteamRemoteStorage_FileRead(intptr_t instancePtr, const char * pchFile, void * pvData, int32 cubDataToRead);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileWriteAsync(intptr_t instancePtr, const char * pchFile, const void * pvData, uint32 cubData);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileReadAsync(intptr_t instancePtr, const char * pchFile, uint32 nOffset, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileReadAsyncComplete(intptr_t instancePtr, SteamAPICall_t hReadCall, void * pvBuffer, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileForget(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileDelete(intptr_t instancePtr, const char * pchFile);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileShare(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(intptr_t instancePtr, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform);
+S_API UGCFileWriteStreamHandle_t SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileExists(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FilePersisted(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileSize(intptr_t instancePtr, const char * pchFile);
+S_API int64 SteamAPI_ISteamRemoteStorage_GetFileTimestamp(intptr_t instancePtr, const char * pchFile);
+S_API ERemoteStoragePlatform SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileCount(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(intptr_t instancePtr, int iFile, int32 * pnFileSizeInBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_GetQuota(intptr_t instancePtr, int32 * pnTotalBytes, int32 * puAvailableBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(intptr_t instancePtr);
+S_API void SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(intptr_t instancePtr, bool bEnabled);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownload(intptr_t instancePtr, UGCHandle_t hContent, uint32 unPriority);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(intptr_t instancePtr, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDetails(intptr_t instancePtr, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, class CSteamID * pSteamIDOwner);
+S_API int32 SteamAPI_ISteamRemoteStorage_UGCRead(intptr_t instancePtr, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(intptr_t instancePtr);
+S_API UGCHandle_t SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(intptr_t instancePtr, int32 iCachedContent);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(intptr_t instancePtr, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType);
+S_API PublishedFileUpdateHandle_t SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_DeletePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(intptr_t instancePtr, class CSteamID steamId, uint32 unStartIndex, struct SteamParamStringArray_t * pRequiredTags, struct SteamParamStringArray_t * pExcludedTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishVideo(intptr_t instancePtr, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(intptr_t instancePtr, EWorkshopFileAction eAction, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(intptr_t instancePtr, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, struct SteamParamStringArray_t * pTags, struct SteamParamStringArray_t * pUserTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(intptr_t instancePtr, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority);
+S_API bool SteamAPI_ISteamUserStats_RequestCurrentStats(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUserStats_GetStat(intptr_t instancePtr, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetStat0(intptr_t instancePtr, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_SetStat(intptr_t instancePtr, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamUserStats_SetStat0(intptr_t instancePtr, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamUserStats_UpdateAvgRateStat(intptr_t instancePtr, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamUserStats_GetAchievement(intptr_t instancePtr, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_SetAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_ClearAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(intptr_t instancePtr, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_StoreStats(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetAchievementIcon(intptr_t instancePtr, const char * pchName);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(intptr_t instancePtr, const char * pchName, const char * pchKey);
+S_API bool SteamAPI_ISteamUserStats_IndicateAchievementProgress(intptr_t instancePtr, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress);
+S_API uint32 SteamAPI_ISteamUserStats_GetNumAchievements(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementName(intptr_t instancePtr, uint32 iAchievement);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_ResetAllStats(intptr_t instancePtr, bool bAchievementsToo);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName);
+S_API const char * SteamAPI_ISteamUserStats_GetLeaderboardName(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API int SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardSortMethod SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardDisplayType SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, class CSteamID * prgUsers, int cUsers);
+S_API bool SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(intptr_t instancePtr, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, struct LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_UploadLeaderboardScore(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_AttachLeaderboardUGC(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(intptr_t instancePtr, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API int SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(intptr_t instancePtr, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(intptr_t instancePtr, const char * pchName, float * pflPercent);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalStats(intptr_t instancePtr, int nHistoryDays);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat(intptr_t instancePtr, const char * pchStatName, int64 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat0(intptr_t instancePtr, const char * pchStatName, double * pData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory(intptr_t instancePtr, const char * pchStatName, int64 * pData, uint32 cubData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory0(intptr_t instancePtr, const char * pchStatName, double * pData, uint32 cubData);
+S_API bool SteamAPI_ISteamApps_BIsSubscribed(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsLowViolence(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsCybercafe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsVACBanned(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetCurrentGameLanguage(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetAvailableGameLanguages(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedApp(intptr_t instancePtr, AppId_t appID);
+S_API bool SteamAPI_ISteamApps_BIsDlcInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint32 SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(intptr_t instancePtr);
+S_API int SteamAPI_ISteamApps_GetDLCCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BGetDLCDataByIndex(intptr_t instancePtr, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize);
+S_API void SteamAPI_ISteamApps_InstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_UninstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_GetCurrentBetaName(intptr_t instancePtr, char * pchName, int cchNameBufferSize);
+S_API bool SteamAPI_ISteamApps_MarkContentCorrupt(intptr_t instancePtr, bool bMissingFilesOnly);
+S_API uint32 SteamAPI_ISteamApps_GetInstalledDepots(intptr_t instancePtr, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots);
+S_API uint32 SteamAPI_ISteamApps_GetAppInstallDir(intptr_t instancePtr, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize);
+S_API bool SteamAPI_ISteamApps_BIsAppInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint64 SteamAPI_ISteamApps_GetAppOwner(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetLaunchQueryParam(intptr_t instancePtr, const char * pchKey);
+S_API bool SteamAPI_ISteamApps_GetDlcDownloadProgress(intptr_t instancePtr, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API int SteamAPI_ISteamApps_GetAppBuildId(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamNetworking_SendP2PPacket(intptr_t instancePtr, class CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_IsP2PPacketAvailable(intptr_t instancePtr, uint32 * pcubMsgSize, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_ReadP2PPacket(intptr_t instancePtr, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, class CSteamID * psteamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(intptr_t instancePtr, class CSteamID steamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_GetP2PSessionState(intptr_t instancePtr, class CSteamID steamIDRemote, struct P2PSessionState_t * pConnectionState);
+S_API bool SteamAPI_ISteamNetworking_AllowP2PPacketRelay(intptr_t instancePtr, bool bAllow);
+S_API SNetListenSocket_t SteamAPI_ISteamNetworking_CreateListenSocket(intptr_t instancePtr, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(intptr_t instancePtr, class CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateConnectionSocket(intptr_t instancePtr, uint32 nIP, uint16 nPort, int nTimeoutSec);
+S_API bool SteamAPI_ISteamNetworking_DestroySocket(intptr_t instancePtr, SNetSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_DestroyListenSocket(intptr_t instancePtr, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_SendDataOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_RetrieveDataFromSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailable(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_RetrieveData(intptr_t instancePtr, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_GetSocketInfo(intptr_t instancePtr, SNetSocket_t hSocket, class CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote);
+S_API bool SteamAPI_ISteamNetworking_GetListenSocketInfo(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort);
+S_API ESNetSocketConnectionType SteamAPI_ISteamNetworking_GetSocketConnectionType(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API int SteamAPI_ISteamNetworking_GetMaxPacketSize(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_WriteScreenshot(intptr_t instancePtr, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(intptr_t instancePtr, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight);
+S_API void SteamAPI_ISteamScreenshots_TriggerScreenshot(intptr_t instancePtr);
+S_API void SteamAPI_ISteamScreenshots_HookScreenshots(intptr_t instancePtr, bool bHook);
+S_API bool SteamAPI_ISteamScreenshots_SetLocation(intptr_t instancePtr, ScreenshotHandle hScreenshot, const char * pchLocation);
+S_API bool SteamAPI_ISteamScreenshots_TagUser(intptr_t instancePtr, ScreenshotHandle hScreenshot, class CSteamID steamID);
+S_API bool SteamAPI_ISteamScreenshots_TagPublishedFile(intptr_t instancePtr, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID);
+S_API bool SteamAPI_ISteamMusic_BIsEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusic_BIsPlaying(intptr_t instancePtr);
+S_API AudioPlayback_Status SteamAPI_ISteamMusic_GetPlaybackStatus(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Play(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Pause(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayPrevious(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayNext(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_SetVolume(intptr_t instancePtr, float flVolume);
+S_API float SteamAPI_ISteamMusic_GetVolume(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BActivationSuccess(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_SetDisplayName(intptr_t instancePtr, const char * pchDisplayName);
+S_API bool SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayPrevious(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayNext(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableQueue(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlaylists(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(intptr_t instancePtr, AudioPlayback_Status nStatus);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateVolume(intptr_t instancePtr, float flValue);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(intptr_t instancePtr, bool bAvailable);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(intptr_t instancePtr, const char * pchText);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(intptr_t instancePtr, int nValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_QueueWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetQueueEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetQueueEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_QueueDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetPlaylistEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistDidChange(intptr_t instancePtr);
+S_API HTTPRequestHandle SteamAPI_ISteamHTTP_CreateHTTPRequest(intptr_t instancePtr, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(intptr_t instancePtr, HTTPRequestHandle hRequest, uint64 ulContextValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_DeferHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 * unBodySize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 cOffset, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_ReleaseHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(intptr_t instancePtr, HTTPRequestHandle hRequest, float * pflPercentOut);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen);
+S_API HTTPCookieContainerHandle SteamAPI_ISteamHTTP_CreateCookieContainer(intptr_t instancePtr, bool bAllowResponsesToModify);
+S_API bool SteamAPI_ISteamHTTP_ReleaseCookieContainer(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetCookie(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer, const char * pchHost, const char * pchUrl, const char * pchCookie);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(intptr_t instancePtr, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchUserAgentInfo);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(intptr_t instancePtr, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unMilliseconds);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(intptr_t instancePtr, HTTPRequestHandle hRequest, bool * pbWasTimedOut);
+S_API ClientUnifiedMessageHandle SteamAPI_ISteamUnifiedMessages_SendMethod(intptr_t instancePtr, const char * pchServiceMethod, const void * pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, uint32 * punResponseSize, EResult * peResult);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseData(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, void * pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease);
+S_API bool SteamAPI_ISteamUnifiedMessages_ReleaseMethod(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle);
+S_API bool SteamAPI_ISteamUnifiedMessages_SendNotification(intptr_t instancePtr, const char * pchServiceNotification, const void * pNotificationBuffer, uint32 unNotificationBufferSize);
+S_API bool SteamAPI_ISteamController_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamController_Shutdown(intptr_t instancePtr);
+S_API void SteamAPI_ISteamController_RunFrame(intptr_t instancePtr);
+S_API int SteamAPI_ISteamController_GetConnectedControllers(intptr_t instancePtr, ControllerHandle_t * handlesOut);
+S_API bool SteamAPI_ISteamController_ShowBindingPanel(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetActionSetHandle(intptr_t instancePtr, const char * pszActionSetName);
+S_API void SteamAPI_ISteamController_ActivateActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetCurrentActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerDigitalActionHandle_t SteamAPI_ISteamController_GetDigitalActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerDigitalActionData_t SteamAPI_ISteamController_GetDigitalActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle);
+S_API int SteamAPI_ISteamController_GetDigitalActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin * originsOut);
+S_API ControllerAnalogActionHandle_t SteamAPI_ISteamController_GetAnalogActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerAnalogActionData_t SteamAPI_ISteamController_GetAnalogActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle);
+S_API int SteamAPI_ISteamController_GetAnalogActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin * originsOut);
+S_API void SteamAPI_ISteamController_StopAnalogActionMomentum(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction);
+S_API void SteamAPI_ISteamController_TriggerHapticPulse(intptr_t instancePtr, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(intptr_t instancePtr, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(intptr_t instancePtr, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SendQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCResult(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, struct SteamUGCDetails_t * pDetails);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCPreviewURL(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCChildren(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCStatistic(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 * pStatValue);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, bool * pbIsImage);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize);
+S_API bool SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_AddRequiredTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_AddExcludedTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_SetReturnKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnKeyValueTags);
+S_API bool SteamAPI_ISteamUGC_SetReturnLongDescription(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnLongDescription);
+S_API bool SteamAPI_ISteamUGC_SetReturnMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnMetadata);
+S_API bool SteamAPI_ISteamUGC_SetReturnChildren(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnChildren);
+S_API bool SteamAPI_ISteamUGC_SetReturnAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews);
+S_API bool SteamAPI_ISteamUGC_SetReturnTotalOnly(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnTotalOnly);
+S_API bool SteamAPI_ISteamUGC_SetLanguage(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetAllowCachedResponse(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds);
+S_API bool SteamAPI_ISteamUGC_SetCloudFileNameFilter(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pMatchCloudFileName);
+S_API bool SteamAPI_ISteamUGC_SetMatchAnyTag(intptr_t instancePtr, UGCQueryHandle_t handle, bool bMatchAnyTag);
+S_API bool SteamAPI_ISteamUGC_SetSearchText(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pSearchText);
+S_API bool SteamAPI_ISteamUGC_SetRankedByTrendDays(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unDays);
+S_API bool SteamAPI_ISteamUGC_AddRequiredKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pKey, const char * pValue);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RequestUGCDetails(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_CreateItem(intptr_t instancePtr, AppId_t nConsumerAppId, EWorkshopFileType eFileType);
+S_API UGCUpdateHandle_t SteamAPI_ISteamUGC_StartItemUpdate(intptr_t instancePtr, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_SetItemTitle(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchTitle);
+S_API bool SteamAPI_ISteamUGC_SetItemDescription(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchDescription);
+S_API bool SteamAPI_ISteamUGC_SetItemUpdateLanguage(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetItemMetadata(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchMetaData);
+S_API bool SteamAPI_ISteamUGC_SetItemVisibility(intptr_t instancePtr, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamUGC_SetItemTags(intptr_t instancePtr, UGCUpdateHandle_t updateHandle, const struct SteamParamStringArray_t * pTags);
+S_API bool SteamAPI_ISteamUGC_SetItemContent(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszContentFolder);
+S_API bool SteamAPI_ISteamUGC_SetItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile);
+S_API bool SteamAPI_ISteamUGC_RemoveItemKeyValueTags(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey);
+S_API bool SteamAPI_ISteamUGC_AddItemKeyValueTag(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubmitItemUpdate(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchChangeNote);
+S_API EItemUpdateStatus SteamAPI_ISteamUGC_GetItemUpdateProgress(intptr_t instancePtr, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_GetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddItemToFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveItemFromFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_UnsubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API uint32 SteamAPI_ISteamUGC_GetNumSubscribedItems(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUGC_GetSubscribedItems(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API uint32 SteamAPI_ISteamUGC_GetItemState(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_GetItemInstallInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp);
+S_API bool SteamAPI_ISteamUGC_GetItemDownloadInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API bool SteamAPI_ISteamUGC_DownloadItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bHighPriority);
+S_API bool SteamAPI_ISteamUGC_BInitWorkshopForGameServer(intptr_t instancePtr, DepotId_t unWorkshopDepotID, const char * pszFolder);
+S_API void SteamAPI_ISteamUGC_SuspendDownloads(intptr_t instancePtr, bool bSuspend);
+S_API uint32 SteamAPI_ISteamAppList_GetNumInstalledApps(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamAppList_GetInstalledApps(intptr_t instancePtr, AppId_t * pvecAppID, uint32 unMaxAppIDs);
+S_API int SteamAPI_ISteamAppList_GetAppName(intptr_t instancePtr, AppId_t nAppID, char * pchName, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppInstallDir(intptr_t instancePtr, AppId_t nAppID, char * pchDirectory, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppBuildId(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Shutdown(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamHTMLSurface_CreateBrowser(intptr_t instancePtr, const char * pchUserAgent, const char * pchUserCSS);
+S_API void SteamAPI_ISteamHTMLSurface_RemoveBrowser(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_LoadURL(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData);
+S_API void SteamAPI_ISteamHTMLSurface_SetSize(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight);
+S_API void SteamAPI_ISteamHTMLSurface_StopLoad(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Reload(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoBack(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoForward(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_AddHeader(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamHTMLSurface_ExecuteJavascript(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchScript);
+S_API void SteamAPI_ISteamHTMLSurface_MouseUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDoubleClick(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseMove(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_MouseWheel(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int32 nDelta);
+S_API void SteamAPI_ISteamHTMLSurface_KeyDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyChar(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetVerticalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetKeyFocus(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus);
+S_API void SteamAPI_ISteamHTMLSurface_ViewSource(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_CopyToClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_PasteFromClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Find(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse);
+S_API void SteamAPI_ISteamHTMLSurface_StopFind(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_SetCookie(intptr_t instancePtr, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly);
+S_API void SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY);
+S_API void SteamAPI_ISteamHTMLSurface_SetBackgroundMode(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bBackgroundMode);
+S_API void SteamAPI_ISteamHTMLSurface_AllowStartRequest(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bAllowed);
+S_API void SteamAPI_ISteamHTMLSurface_JSDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bResult);
+S_API void SteamAPI_ISteamHTMLSurface_FileLoadDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char ** pchSelectedFiles);
+S_API EResult SteamAPI_ISteamInventory_GetResultStatus(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetResultItems(intptr_t instancePtr, SteamInventoryResult_t resultHandle, struct SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize);
+S_API uint32 SteamAPI_ISteamInventory_GetResultTimestamp(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_CheckResultSteamID(intptr_t instancePtr, SteamInventoryResult_t resultHandle, class CSteamID steamIDExpected);
+S_API void SteamAPI_ISteamInventory_DestroyResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetAllItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_GetItemsByID(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs);
+S_API bool SteamAPI_ISteamInventory_SerializeResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize);
+S_API bool SteamAPI_ISteamInventory_DeserializeResult(intptr_t instancePtr, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE);
+S_API bool SteamAPI_ISteamInventory_GenerateItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_GrantPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_AddPromoItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef);
+S_API bool SteamAPI_ISteamInventory_AddPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_ConsumeItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity);
+S_API bool SteamAPI_ISteamInventory_ExchangeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength);
+S_API bool SteamAPI_ISteamInventory_TransferItemQuantity(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest);
+S_API void SteamAPI_ISteamInventory_SendItemDropHeartbeat(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_TriggerItemDrop(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition);
+S_API bool SteamAPI_ISteamInventory_TradeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, class CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength);
+S_API bool SteamAPI_ISteamInventory_LoadItemDefinitions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionIDs(intptr_t instancePtr, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionProperty(intptr_t instancePtr, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSize);
+S_API void SteamAPI_ISteamVideo_GetVideoURL(intptr_t instancePtr, AppId_t unVideoAppID);
+S_API bool SteamAPI_ISteamVideo_IsBroadcasting(intptr_t instancePtr, int * pnNumViewers);
+S_API bool SteamAPI_ISteamGameServer_InitGameServer(intptr_t instancePtr, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString);
+S_API void SteamAPI_ISteamGameServer_SetProduct(intptr_t instancePtr, const char * pszProduct);
+S_API void SteamAPI_ISteamGameServer_SetGameDescription(intptr_t instancePtr, const char * pszGameDescription);
+S_API void SteamAPI_ISteamGameServer_SetModDir(intptr_t instancePtr, const char * pszModDir);
+S_API void SteamAPI_ISteamGameServer_SetDedicatedServer(intptr_t instancePtr, bool bDedicated);
+S_API void SteamAPI_ISteamGameServer_LogOn(intptr_t instancePtr, const char * pszToken);
+S_API void SteamAPI_ISteamGameServer_LogOnAnonymous(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_LogOff(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BLoggedOn(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BSecure(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamGameServer_GetSteamID(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_WasRestartRequested(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetMaxPlayerCount(intptr_t instancePtr, int cPlayersMax);
+S_API void SteamAPI_ISteamGameServer_SetBotPlayerCount(intptr_t instancePtr, int cBotplayers);
+S_API void SteamAPI_ISteamGameServer_SetServerName(intptr_t instancePtr, const char * pszServerName);
+S_API void SteamAPI_ISteamGameServer_SetMapName(intptr_t instancePtr, const char * pszMapName);
+S_API void SteamAPI_ISteamGameServer_SetPasswordProtected(intptr_t instancePtr, bool bPasswordProtected);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorPort(intptr_t instancePtr, uint16 unSpectatorPort);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorServerName(intptr_t instancePtr, const char * pszSpectatorServerName);
+S_API void SteamAPI_ISteamGameServer_ClearAllKeyValues(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetKeyValue(intptr_t instancePtr, const char * pKey, const char * pValue);
+S_API void SteamAPI_ISteamGameServer_SetGameTags(intptr_t instancePtr, const char * pchGameTags);
+S_API void SteamAPI_ISteamGameServer_SetGameData(intptr_t instancePtr, const char * pchGameData);
+S_API void SteamAPI_ISteamGameServer_SetRegion(intptr_t instancePtr, const char * pszRegion);
+S_API bool SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(intptr_t instancePtr, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, class CSteamID * pSteamIDUser);
+S_API uint64 SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SendUserDisconnect(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServer_BUpdateUserData(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore);
+S_API HAuthTicket SteamAPI_ISteamGameServer_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamGameServer_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamGameServer_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamGameServer_RequestUserGroupStatus(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDGroup);
+S_API void SteamAPI_ISteamGameServer_GetGameplayStats(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_GetServerReputation(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamGameServer_GetPublicIP(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_HandleIncomingPacket(intptr_t instancePtr, const void * pData, int cbData, uint32 srcIP, uint16 srcPort);
+S_API int SteamAPI_ISteamGameServer_GetNextOutgoingPacket(intptr_t instancePtr, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort);
+S_API void SteamAPI_ISteamGameServer_EnableHeartbeats(intptr_t instancePtr, bool bActive);
+S_API void SteamAPI_ISteamGameServer_SetHeartbeatInterval(intptr_t instancePtr, int iHeartbeatInterval);
+S_API void SteamAPI_ISteamGameServer_ForceHeartbeat(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_AssociateWithClan(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(intptr_t instancePtr, class CSteamID steamIDNewPlayer);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API bool SteamAPI_ISteamGameServerStats_ClearUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_StoreUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+#endif // STEAMAPIFLAT_H
+
+
diff --git a/lsteamclient/steamworks_sdk_135a/steam_gameserver.h b/lsteamclient/steamworks_sdk_135a/steam_gameserver.h
new file mode 100644
index 00000000..a716f05f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/steam_gameserver.h
@@ -0,0 +1,191 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+S_API ISteamInventory *SteamGameServerInventory();
+S_API ISteamUGC *SteamGameServerUGC();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// These macros are similar to the STEAM_CALLBACK_* macros in steam_api.h, but only trigger for gameserver callbacks
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, /*callback_type, [deprecated] var*/... ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, GS, 3 ), ( this->SetGameserverFlag();, thisclass, func, __VA_ARGS__ ) )
+
+#define STEAM_GAMESERVER_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type, true > var; void func( callback_type *pParam )
+
+
+
+#define _STEAM_CALLBACK_GS( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param, true > var; void func( param *pParam )
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+ ISteamInventory *SteamInventory() { return m_pSteamInventory; }
+ ISteamUGC *SteamUGC() { return m_pSteamUGC; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamInventory *m_pSteamInventory;
+ ISteamUGC *m_pSteamUGC;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamInventory = NULL;
+ m_pSteamUGC = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamInventory = g_pSteamClientGameServer->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_pSteamUGC = g_pSteamClientGameServer->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_135a/steamclientpublic.h b/lsteamclient/steamworks_sdk_135a/steamclientpublic.h
new file mode 100644
index 00000000..1bbd097c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/steamclientpublic.h
@@ -0,0 +1,1165 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to login
+ k_EResultItemDeleted = 86, // The thing we're trying to access has been deleted
+ k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to throttle response to possible attacker
+ k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch
+ k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for two-factor didn't match
+ k_EResultAccountAssociatedToMultiplePartners = 90, // account has been associated with multiple partners
+ k_EResultNotModified = 91, // data not modified
+ k_EResultNoMobileDevice = 92, // the account does not have a mobile device associated with it
+ k_EResultTimeNotSynced = 93, // the time presented is out of range or tolerance
+ k_EResultSmsCodeFailed = 94, // SMS code failure (no match, none pending, etc.)
+ k_EResultAccountLimitExceeded = 95, // Too many accounts access this resource
+ k_EResultAccountActivityLimitExceeded = 96, // Too many changes to this account
+ k_EResultPhoneActivityLimitExceeded = 97, // Too many changes to this phone
+ k_EResultRefundToWallet = 98, // Cannot refund to payment method, must use wallet
+ k_EResultEmailSendFailure = 99, // Cannot send an email
+ k_EResultNotSettled = 100, // Can't perform operation till payment has settled
+ k_EResultNeedCaptcha = 101, // Needs to provide a valid captcha
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+ k_EVoiceResultReceiverOutOfDate = 8,
+ k_EVoiceResultReceiverDidNotAnswer = 9,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+enum EDenyReason
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+};
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+enum EBeginAuthSessionResult
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+};
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+enum EAuthSessionResponse
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+ k_EAuthSessionResponsePublisherIssuedBan = 9, // The user is banned for this game. The ban came via the web api and not VAC
+};
+
+// results from UserHasLicenseForApp
+enum EUserHasLicenseForAppResult
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+};
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x0000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x0001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x0002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x0004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x0008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x0010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x0020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x0040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_RetailLicense = 0x0080, // has a retail license for game, (CD-Key etc)
+ k_EAppOwnershipFlags_LicenseLocked = 0x0100, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x0200, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x0400, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x0800, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x1000, // Recurring license, user is charged periodically
+ k_EAppOwnershipFlags_LicenseCanceled = 0x2000, // Mark as canceled, but might be still active if recurring
+ k_EAppOwnershipFlags_AutoGrant = 0x4000, // Ownership is based on any kind of autogrant license
+ k_EAppOwnershipFlags_PendingGift = 0x8000, // user has pending gift to redeem
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media_DEPRECATED = 0x010, // legacy - was used for game trailers, which are now just videos on the web
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+ k_EAppType_Hardware = 0x200, // a hardware device (Steam Machine, Steam Controller, Steam Link, etc.)
+ // 0x400 is up for grabs here
+ k_EAppType_Video = 0x800, // A video component of either a Film or TVSeries (may be the feature, an episode, preview, making-of, etc)
+ k_EAppType_Plugin = 0x1000, // Plug-in types for other Apps
+ k_EAppType_Music = 0x2000, // Music files
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+ k_EChatEntryTypeReserved1 = 12,
+ k_EChatEntryTypeReserved2 = 13,
+ k_EChatEntryTypeLinkBlocked = 14, // a link was removed by the chat filter.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Broadcast upload result details
+//-----------------------------------------------------------------------------
+enum EBroadcastUploadResult
+{
+ k_EBroadcastUploadResultNone = 0, // broadcast state unknown
+ k_EBroadcastUploadResultOK = 1, // broadcast was good, no problems
+ k_EBroadcastUploadResultInitFailed = 2, // broadcast init failed
+ k_EBroadcastUploadResultFrameFailed = 3, // broadcast frame upload failed
+ k_EBroadcastUploadResultTimeout = 4, // broadcast upload timed out
+ k_EBroadcastUploadResultBandwidthExceeded = 5, // broadcast send too much data
+ k_EBroadcastUploadResultLowFPS = 6, // broadcast FPS too low
+ k_EBroadcastUploadResultMissingKeyFrames = 7, // broadcast sending not enough key frames
+ k_EBroadcastUploadResultNoConnection = 8, // broadcast client failed to connect to relay
+ k_EBroadcastUploadResultRelayFailed = 9, // relay dropped the upload
+ k_EBroadcastUploadResultSettingsChanged = 10, // the client changed broadcast settings
+ k_EBroadcastUploadResultMissingAudio = 11, // client failed to send audio data
+ k_EBroadcastUploadResultTooFarBehind = 12, // clients was too slow uploading
+ k_EBroadcastUploadResultTranscodeBehind = 13, // server failed to keep up with transcode
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: codes for well defined launch options
+//-----------------------------------------------------------------------------
+enum ELaunchOptionType
+{
+ k_ELaunchOptionType_None = 0, // unknown what launch option does
+ k_ELaunchOptionType_Default = 1, // runs the game, app, whatever in default mode
+ k_ELaunchOptionType_SafeMode = 2, // runs the game in safe mode
+ k_ELaunchOptionType_Multiplayer = 3, // runs the game in multiplayer mode
+ k_ELaunchOptionType_Config = 4, // runs config tool for this game
+ k_ELaunchOptionType_VR = 5, // runs game in VR mode
+ k_ELaunchOptionType_Server = 6, // runs dedicated server for this game
+ k_ELaunchOptionType_Editor = 7, // runs game editor
+ k_ELaunchOptionType_Manual = 8, // shows game manual
+ k_ELaunchOptionType_Benchmark = 9, // runs game benchmark
+ k_ELaunchOptionType_Option1 = 10, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option2 = 11, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option3 = 12, // generic run option, uses description field for game name
+
+
+ k_ELaunchOptionType_Dialog = 1000, // show launch options dialog
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM2_USERID_STRUCTS )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ V_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, V_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, pchExePath, V_strlen( pchExePath ) );
+ CRC32_ProcessBuffer( &crc32, pchAppName, V_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, V_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_135a/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_135a/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_135a/steamhttpenums.h b/lsteamclient/steamworks_sdk_135a/steamhttpenums.h
new file mode 100644
index 00000000..2ec0982b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/steamhttpenums.h
@@ -0,0 +1,97 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401, // You probably want 403 or something else. 401 implies you're sending a WWW-Authenticate header and the client can sent an Authorization header in response.
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+ k_EHTTPStatusCode4xxUnknown = 418, // 418 is reserved, so we'll use it to mean unknown
+ k_EHTTPStatusCode429TooManyRequests = 429,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+ k_EHTTPStatusCode5xxUnknown = 599,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_135a/steamps3params.h b/lsteamclient/steamworks_sdk_135a/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_135a/steamtypes.h b/lsteamclient/steamworks_sdk_135a/steamtypes.h
new file mode 100644
index 00000000..2be3926c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/steamtypes.h
@@ -0,0 +1,179 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+#ifdef __clang__
+# define CLANG_ATTR(ATTR) __attribute__((annotate( ATTR )))
+#else
+# define CLANG_ATTR(ATTR)
+#endif
+
+#define METHOD_DESC(DESC) CLANG_ATTR( "desc:" #DESC ";" )
+#define IGNOREATTR() CLANG_ATTR( "ignore" )
+#define OUT_STRUCT() CLANG_ATTR( "out_struct: ;" )
+#define OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" )
+#define OUT_ARRAY_COUNT(COUNTER, DESC) CLANG_ATTR( "out_array_count:" #COUNTER ";desc:" #DESC )
+#define ARRAY_COUNT(COUNTER) CLANG_ATTR( "array_count:" #COUNTER ";" )
+#define ARRAY_COUNT_D(COUNTER, DESC) CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC )
+#define BUFFER_COUNT(COUNTER) CLANG_ATTR( "buffer_count:" #COUNTER ";" )
+#define OUT_BUFFER_COUNT(COUNTER) CLANG_ATTR( "out_buffer_count:" #COUNTER ";" )
+#define OUT_STRING_COUNT(COUNTER) CLANG_ATTR( "out_string_count:" #COUNTER ";" )
+#define DESC(DESC) CLANG_ATTR("desc:" #DESC ";")
+
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef uint64 JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+const JobID_t k_JobIDNil = 0xffffffffffffffffull;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+typedef uint32 BundleId_t;
+const BundleId_t k_uBundleIdInvalid = 0;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+// ID for a depot content manifest
+typedef uint64 ManifestId_t;
+const ManifestId_t k_uManifestIdInvalid = 0;
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_135a/steamuniverse.h b/lsteamclient/steamworks_sdk_135a/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_135a/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_136/isteamapplist.h b/lsteamclient/steamworks_sdk_136/isteamapplist.h
new file mode 100644
index 00000000..d0d7e7e7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, OUT_STRING() char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_136/isteamapps.h b/lsteamclient/steamworks_sdk_136/isteamapps.h
new file mode 100644
index 00000000..ce78230d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamapps.h
@@ -0,0 +1,149 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 64; // max bytes of a legacy cd key we support
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+ // get download progress for optional DLC
+ virtual bool GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // return the buildid of this app, may change at any time based on backend updates to the game
+ virtual int GetAppBuildId() = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION007"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 13 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];
+};
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_136/isteamappticket.h b/lsteamclient/steamworks_sdk_136/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_136/isteamclient.h b/lsteamclient/steamworks_sdk_136/isteamclient.h
new file mode 100644
index 00000000..2e914d64
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamclient.h
@@ -0,0 +1,511 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#ifdef STEAM_API_EXPORTS
+#define STEAM_PRIVATE_API( ... ) __VA_ARGS__
+#else
+#define STEAM_PRIVATE_API( ... ) protected: __VA_ARGS__ public:
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct ValvePackingSentinel_t
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+extern "C" typedef void( *SteamAPI_PostAPIResultInProcess_t )(SteamAPICall_t callHandle, void *, uint32 unCallbackSize, int iCallbackNum);
+extern "C" typedef uint32 ( *SteamAPI_CheckCallbackRegistered_t )( int iCallbackNum );
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamMusicRemote;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+class ISteamHTMLSurface;
+class ISteamInventory;
+class ISteamVideo;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need these APIs if you have a more complex versioning scheme,
+// or if you want to implement a multiplexed gameserver where a single process
+// is handling multiple games at once with independent gameserver SteamIDs.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client.
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Deprecated. Applications should use SteamAPI_RunCallbacks() or SteamGameServer_RunCallbacks() instead.
+ STEAM_PRIVATE_API( virtual void RunFrame() = 0; )
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message.
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player Remote
+ virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // html page display
+ virtual ISteamHTMLSurface *GetISteamHTMLSurface(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // Helper functions for internal Steam usage
+ STEAM_PRIVATE_API( virtual void Set_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) = 0; )
+ STEAM_PRIVATE_API( virtual void Remove_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) = 0; )
+ STEAM_PRIVATE_API( virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0; )
+
+ // inventory
+ virtual ISteamInventory *GetISteamInventory( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Video
+ virtual ISteamVideo *GetISteamVideo( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient017"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iClientDepotBuilderCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+enum { k_iSteamMusicRemoteCallbacks = 4100 };
+enum { k_iClientVRCallbacks = 4200 };
+enum { k_iClientReservedCallbacks = 4300 };
+enum { k_iSteamReservedCallbacks = 4400 };
+enum { k_iSteamHTMLSurfaceCallbacks = 4500 };
+enum { k_iClientVideoCallbacks = 4600 };
+enum { k_iClientInventoryCallbacks = 4700 };
+enum { k_iClientBluetoothManagerCallbacks = 4800 };
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+struct SteamCallback_t
+{
+public:
+ SteamCallback_t() {}
+};
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname : SteamCallback_t { \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_10() \
+ END_CALLBACK_INTERNAL_BEGIN( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_11() \
+ END_CALLBACK_INTERNAL_BEGIN( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_12() \
+ END_CALLBACK_INTERNAL_BEGIN( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_13() \
+ END_CALLBACK_INTERNAL_BEGIN( 13 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_14() \
+ END_CALLBACK_INTERNAL_BEGIN( 14 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 13 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_136/isteamcontroller.h b/lsteamclient/steamworks_sdk_136/isteamcontroller.h
new file mode 100644
index 00000000..9ab5b916
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamcontroller.h
@@ -0,0 +1,213 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define STEAM_CONTROLLER_MAX_COUNT 16
+
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTIONS 16
+
+#define STEAM_CONTROLLER_MAX_DIGITAL_ACTIONS 128
+
+#define STEAM_CONTROLLER_MAX_ORIGINS 8
+
+// When sending an option to a specific controller handle, you can send to all controllers via this command
+#define STEAM_CONTROLLER_HANDLE_ALL_CONTROLLERS UINT64_MAX
+
+#define STEAM_CONTROLLER_MIN_ANALOG_ACTION_DATA -1.0f
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTION_DATA 1.0f
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+enum EControllerSource
+{
+ k_EControllerSource_None,
+ k_EControllerSource_LeftTrackpad,
+ k_EControllerSource_RightTrackpad,
+ k_EControllerSource_Joystick,
+ k_EControllerSource_ABXY,
+ k_EControllerSource_Switch,
+ k_EControllerSource_LeftTrigger,
+ k_EControllerSource_RightTrigger,
+ k_EControllerSource_Gyro,
+ k_EControllerSource_Count
+};
+
+enum EControllerSourceMode
+{
+ k_EControllerSourceMode_None,
+ k_EControllerSourceMode_Dpad,
+ k_EControllerSourceMode_Buttons,
+ k_EControllerSourceMode_FourButtons,
+ k_EControllerSourceMode_AbsoluteMouse,
+ k_EControllerSourceMode_RelativeMouse,
+ k_EControllerSourceMode_JoystickMove,
+ k_EControllerSourceMode_JoystickCamera,
+ k_EControllerSourceMode_ScrollWheel,
+ k_EControllerSourceMode_Trigger,
+ k_EControllerSourceMode_TouchMenu,
+ k_EControllerSourceMode_MouseJoystick,
+ k_EControllerSourceMode_MouseRegion
+};
+
+enum EControllerActionOrigin
+{
+ k_EControllerActionOrigin_None,
+ k_EControllerActionOrigin_A,
+ k_EControllerActionOrigin_B,
+ k_EControllerActionOrigin_X,
+ k_EControllerActionOrigin_Y,
+ k_EControllerActionOrigin_LeftBumper,
+ k_EControllerActionOrigin_RightBumper,
+ k_EControllerActionOrigin_LeftGrip,
+ k_EControllerActionOrigin_RightGrip,
+ k_EControllerActionOrigin_Start,
+ k_EControllerActionOrigin_Back,
+ k_EControllerActionOrigin_LeftPad_Touch,
+ k_EControllerActionOrigin_LeftPad_Swipe,
+ k_EControllerActionOrigin_LeftPad_Click,
+ k_EControllerActionOrigin_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_LeftPad_DPadWest,
+ k_EControllerActionOrigin_LeftPad_DPadEast,
+ k_EControllerActionOrigin_RightPad_Touch,
+ k_EControllerActionOrigin_RightPad_Swipe,
+ k_EControllerActionOrigin_RightPad_Click,
+ k_EControllerActionOrigin_RightPad_DPadNorth,
+ k_EControllerActionOrigin_RightPad_DPadSouth,
+ k_EControllerActionOrigin_RightPad_DPadWest,
+ k_EControllerActionOrigin_RightPad_DPadEast,
+ k_EControllerActionOrigin_LeftTrigger_Pull,
+ k_EControllerActionOrigin_LeftTrigger_Click,
+ k_EControllerActionOrigin_RightTrigger_Pull,
+ k_EControllerActionOrigin_RightTrigger_Click,
+ k_EControllerActionOrigin_LeftStick_Move,
+ k_EControllerActionOrigin_LeftStick_Click,
+ k_EControllerActionOrigin_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_LeftStick_DPadWest,
+ k_EControllerActionOrigin_LeftStick_DPadEast,
+ k_EControllerActionOrigin_Gyro_Move,
+ k_EControllerActionOrigin_Gyro_Pitch,
+ k_EControllerActionOrigin_Gyro_Yaw,
+ k_EControllerActionOrigin_Gyro_Roll,
+
+ k_EControllerActionOrigin_Count
+};
+
+// ControllerHandle_t is used to refer to a specific controller.
+// This handle will consistently identify a controller, even if it is disconnected and re-connected
+typedef uint64 ControllerHandle_t;
+
+
+// These handles are used to refer to a specific in-game action or action set
+// All action handles should be queried during initialization for performance reasons
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+
+#pragma pack( push, 1 )
+
+struct ControllerAnalogActionData_t
+{
+ // Type of data coming from this action, this will match what got specified in the action set
+ EControllerSourceMode eMode;
+
+ // The current state of this action; will be delta updates for mouse actions
+ float x, y;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+struct ControllerDigitalActionData_t
+{
+ // The current state of this action; will be true if currently pressed
+ bool bState;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ // Init and Shutdown must be called when starting/ending use of this interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Pump callback/callresult events
+ // Note: SteamAPI_RunCallbacks will do this for you, so you should never need to call this directly.
+ virtual void RunFrame() = 0;
+
+ // Enumerate currently connected controllers
+ // handlesOut should point to a STEAM_CONTROLLER_MAX_COUNT sized array of ControllerHandle_t handles
+ // Returns the number of handles written to handlesOut
+ virtual int GetConnectedControllers( ControllerHandle_t *handlesOut ) = 0;
+
+ // Invokes the Steam overlay and brings up the binding screen
+ // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
+ virtual bool ShowBindingPanel( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTION SETS
+ // Lookup the handle for an Action Set. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerActionSetHandle_t GetActionSetHandle( const char *pszActionSetName ) = 0;
+
+ // Reconfigure the controller to use the specified action set (ie 'Menu', 'Walk' or 'Drive')
+ // This is cheap, and can be safely called repeatedly. It's often easier to repeatedly call it in
+ // your state loops, instead of trying to place it in all of your state transitions.
+ virtual void ActivateActionSet( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle ) = 0;
+ virtual ControllerActionSetHandle_t GetCurrentActionSet( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTIONS
+ // Lookup the handle for a digital action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerDigitalActionHandle_t GetDigitalActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of the supplied digital game action
+ virtual ControllerDigitalActionData_t GetDigitalActionData( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle ) = 0;
+
+ // Get the origin(s) for a digital action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ // Lookup the handle for an analog action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerAnalogActionHandle_t GetAnalogActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of these supplied analog game action
+ virtual ControllerAnalogActionData_t GetAnalogActionData( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle ) = 0;
+
+ // Get the origin(s) for an analog action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ virtual void StopAnalogActionMomentum( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction ) = 0;
+
+ // Trigger a haptic pulse on a controller
+ virtual void TriggerHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ virtual void TriggerRepeatedHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "SteamController003"
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_136/isteamfriends.h b/lsteamclient/steamworks_sdk_136/isteamfriends.h
new file mode 100644
index 00000000..0e154869
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamfriends.h
@@ -0,0 +1,636 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1, // this doesn't get stored; the user has just done an Ignore on an friendship invite
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5, // this is stored; the user has explicit blocked this other user from comments/chat/etc
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+// friends group identifier type
+typedef int16 FriendsGroupID_t;
+
+// invalid friends group identifier constant
+const FriendsGroupID_t k_FriendsGroupID_Invalid = -1;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagChatMember = 0x1000,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ CALL_RESULT( SetPersonaNameResponse_t )
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, OUT_STRUCT() FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+ // friends steam level
+ virtual int GetFriendSteamLevel( CSteamID steamIDFriend ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // friend grouping (tag) apis
+ // returns the number of friends groups
+ virtual int GetFriendsGroupCount() = 0;
+ // returns the friends group ID for the given index (invalid indices return k_FriendsGroupID_Invalid)
+ virtual FriendsGroupID_t GetFriendsGroupIDByIndex( int iFG ) = 0;
+ // returns the name for the given friends group (NULL in the case of invalid friends group IDs)
+ virtual const char *GetFriendsGroupName( FriendsGroupID_t friendsGroupID ) = 0;
+ // returns the number of members in a given friends group
+ virtual int GetFriendsGroupMembersCount( FriendsGroupID_t friendsGroupID ) = 0;
+ // gets up to nMembersCount members of the given friends group, if fewer exist than requested those positions' SteamIDs will be invalid
+ virtual void GetFriendsGroupMembersList( FriendsGroupID_t friendsGroupID, OUT_ARRAY_CALL(nMembersCount, GetFriendsGroupMembersCount, friendsGroupID ) CSteamID *pOutSteamIDMembers, int nMembersCount ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( ARRAY_COUNT(cClansToRequest) CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ CALL_RESULT( ClanOfficerListResponse_t )
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ CALL_RESULT( JoinClanChatRoomCompletionResult_t )
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, OUT_STRUCT() CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ CALL_RESULT( FriendsGetFollowerCount_t )
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ CALL_RESULT( FriendsIsFollowing_t )
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ CALL_RESULT( FriendsEnumerateFollowingList_t )
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends015"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_136/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_136/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_136/isteamgameserver.h b/lsteamclient/steamworks_sdk_136/isteamgameserver.h
new file mode 100644
index 00000000..2004c830
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamgameserver.h
@@ -0,0 +1,387 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ CALL_RESULT( GSReputation_t )
+ virtual SteamAPICall_t GetServerReputation() = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ CALL_RESULT( AssociateWithClanResult_t )
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ CALL_RESULT( ComputeNewPlayerCompatibilityResult_t )
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_136/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_136/isteamgameserverstats.h
new file mode 100644
index 00000000..e4c7d648
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamgameserverstats.h
@@ -0,0 +1,101 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ CALL_RESULT( GSStatsReceived_t )
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ CALL_RESULT( GSStatsStored_t )
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_136/isteamhtmlsurface.h b/lsteamclient/steamworks_sdk_136/isteamhtmlsurface.h
new file mode 100644
index 00000000..3e822e29
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamhtmlsurface.h
@@ -0,0 +1,446 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to display html pages in a texture
+//
+//=============================================================================
+
+#ifndef ISTEAMHTMLSURFACE_H
+#define ISTEAMHTMLSURFACE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+typedef uint32 HHTMLBrowser;
+const uint32 INVALID_HTMLBROWSER = 0;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for displaying HTML pages and interacting with them
+//-----------------------------------------------------------------------------
+class ISteamHTMLSurface
+{
+public:
+ virtual ~ISteamHTMLSurface() {}
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Create a browser object for display of a html page, when creation is complete the call handle
+ // will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser.
+ // The user agent string is a substring to be added to the general user agent string so you can
+ // identify your client on web servers.
+ // The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if
+ // you do not require this functionality.
+ CALL_RESULT( HTML_BrowserReady_t )
+ virtual SteamAPICall_t CreateBrowser( const char *pchUserAgent, const char *pchUserCSS ) = 0;
+
+ // Call this when you are done with a html surface, this lets us free the resources being used by it
+ virtual void RemoveBrowser( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // Navigate to this URL, results in a HTML_StartRequest_t as the request commences
+ virtual void LoadURL( HHTMLBrowser unBrowserHandle, const char *pchURL, const char *pchPostData ) = 0;
+
+ // Tells the surface the size in pixels to display the surface
+ virtual void SetSize( HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight ) = 0;
+
+ // Stop the load of the current html page
+ virtual void StopLoad( HHTMLBrowser unBrowserHandle ) = 0;
+ // Reload (most likely from local cache) the current page
+ virtual void Reload( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate back in the page history
+ virtual void GoBack( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate forward in the page history
+ virtual void GoForward( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // add this header to any url requests from this browser
+ virtual void AddHeader( HHTMLBrowser unBrowserHandle, const char *pchKey, const char *pchValue ) = 0;
+ // run this javascript script in the currently loaded page
+ virtual void ExecuteJavascript( HHTMLBrowser unBrowserHandle, const char *pchScript ) = 0;
+
+ enum EHTMLMouseButton
+ {
+ eHTMLMouseButton_Left = 0,
+ eHTMLMouseButton_Right = 1,
+ eHTMLMouseButton_Middle = 2,
+ };
+
+ // Mouse click and mouse movement commands
+ virtual void MouseUp( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDown( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDoubleClick( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ // x and y are relative to the HTML bounds
+ virtual void MouseMove( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+ // nDelta is pixels of scroll
+ virtual void MouseWheel( HHTMLBrowser unBrowserHandle, int32 nDelta ) = 0;
+
+ enum EMouseCursor
+ {
+ dc_user = 0,
+ dc_none,
+ dc_arrow,
+ dc_ibeam,
+ dc_hourglass,
+ dc_waitarrow,
+ dc_crosshair,
+ dc_up,
+ dc_sizenw,
+ dc_sizese,
+ dc_sizene,
+ dc_sizesw,
+ dc_sizew,
+ dc_sizee,
+ dc_sizen,
+ dc_sizes,
+ dc_sizewe,
+ dc_sizens,
+ dc_sizeall,
+ dc_no,
+ dc_hand,
+ dc_blank, // don't show any custom cursor, just use your default
+ dc_middle_pan,
+ dc_north_pan,
+ dc_north_east_pan,
+ dc_east_pan,
+ dc_south_east_pan,
+ dc_south_pan,
+ dc_south_west_pan,
+ dc_west_pan,
+ dc_north_west_pan,
+ dc_alias,
+ dc_cell,
+ dc_colresize,
+ dc_copycur,
+ dc_verticaltext,
+ dc_rowresize,
+ dc_zoomin,
+ dc_zoomout,
+ dc_help,
+ dc_custom,
+
+ dc_last, // custom cursors start from this value and up
+ };
+
+ enum EHTMLKeyModifiers
+ {
+ k_eHTMLKeyModifier_None = 0,
+ k_eHTMLKeyModifier_AltDown = 1 << 0,
+ k_eHTMLKeyModifier_CtrlDown = 1 << 1,
+ k_eHTMLKeyModifier_ShiftDown = 1 << 2,
+ };
+
+ // keyboard interactions, native keycode is the virtual key code value from your OS
+ virtual void KeyDown( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ virtual void KeyUp( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ // cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press)
+ virtual void KeyChar( HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+
+ // programmatically scroll this many pixels on the page
+ virtual void SetHorizontalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+ virtual void SetVerticalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+
+ // tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things
+ virtual void SetKeyFocus( HHTMLBrowser unBrowserHandle, bool bHasKeyFocus ) = 0;
+
+ // open the current pages html code in the local editor of choice, used for debugging
+ virtual void ViewSource( HHTMLBrowser unBrowserHandle ) = 0;
+ // copy the currently selected text on the html page to the local clipboard
+ virtual void CopyToClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+ // paste from the local clipboard to the current html page
+ virtual void PasteFromClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element
+ virtual void Find( HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse ) = 0;
+ // cancel a currently running find
+ virtual void StopFind( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // return details about the link at position x,y on the current page
+ virtual void GetLinkAtPosition( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+
+ // set a webcookie for the hostname in question
+ virtual void SetCookie( const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath = "/", RTime32 nExpires = 0, bool bSecure = false, bool bHTTPOnly = false ) = 0;
+
+ // Zoom the current page by flZoom ( from 0.0 to 2.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care)
+ virtual void SetPageScaleFactor( HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY ) = 0;
+
+ // Enable/disable low-resource background mode, where javascript and repaint timers are throttled, resources are
+ // more aggressively purged from memory, and audio/video elements are paused. When background mode is enabled,
+ // all HTML5 video and audio objects will execute ".pause()" and gain the property "._steam_background_paused = 1".
+ // When background mode is disabled, any video or audio objects with that property will resume with ".play()".
+ virtual void SetBackgroundMode( HHTMLBrowser unBrowserHandle, bool bBackgroundMode ) = 0;
+
+ // CALLBACKS
+ //
+ // These set of functions are used as responses to callback requests
+ //
+
+ // You MUST call this in response to a HTML_StartRequest_t callback
+ // Set bAllowed to true to allow this navigation, false to cancel it and stay
+ // on the current page. You can use this feature to limit the valid pages
+ // allowed in your HTML surface.
+ virtual void AllowStartRequest( HHTMLBrowser unBrowserHandle, bool bAllowed ) = 0;
+
+ // You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback
+ // Set bResult to true for the OK option of a confirm, use false otherwise
+ virtual void JSDialogResponse( HHTMLBrowser unBrowserHandle, bool bResult ) = 0;
+
+ // You MUST call this in response to a HTML_FileOpenDialog_t callback
+ IGNOREATTR()
+ virtual void FileLoadDialogResponse( HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles ) = 0;
+};
+
+#define STEAMHTMLSURFACE_INTERFACE_VERSION "STEAMHTMLSURFACE_INTERFACE_VERSION_003"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser is ready for use
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_BrowserReady_t, k_iSteamHTMLSurfaceCallbacks + 1 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this browser is now fully created and ready to navigate to pages
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser has a pending paint
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_NeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 2)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint
+CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called
+CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture
+CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture
+CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update
+CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update
+CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update
+CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update
+CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered
+CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages
+END_DEFINE_CALLBACK_12()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser wanted to navigate to a new page
+// NOTE - you MUST call AllowStartRequest in response to this callback
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_StartRequest_t, k_iSteamHTMLSurfaceCallbacks + 3)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface navigating
+CALLBACK_MEMBER(1, const char *, pchURL) // the url they wish to navigate to
+CALLBACK_MEMBER(2, const char *, pchTarget) // the html link target type (i.e _blank, _self, _parent, _top )
+CALLBACK_MEMBER(3, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER(4, bool, bIsRedirect) // true if this was a http/html redirect from the last load request
+END_DEFINE_CALLBACK_5()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser has been requested to close due to user interaction (usually from a javascript window.close() call)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_CloseBrowser_t, k_iSteamHTMLSurfaceCallbacks + 4)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser is navigating to a new url
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_URLChanged_t, k_iSteamHTMLSurfaceCallbacks + 5 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface navigating
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the url they wish to navigate to
+CALLBACK_MEMBER( 2, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER( 3, bool, bIsRedirect ) // true if this was a http/html redirect from the last load request
+CALLBACK_MEMBER( 4, const char *, pchPageTitle ) // the title of the page
+CALLBACK_MEMBER( 5, bool, bNewNavigation ) // true if this was from a fresh tab and not a click on an existing page
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A page is finished loading
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FinishedRequest_t, k_iSteamHTMLSurfaceCallbacks + 6 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+CALLBACK_MEMBER( 2, const char *, pchPageTitle ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a request to load this url in a new tab
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_OpenLinkInNewTab_t, k_iSteamHTMLSurfaceCallbacks + 7 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the page has a new title now
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ChangedTitle_t, k_iSteamHTMLSurfaceCallbacks + 8 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: results from a search
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SearchResults_t, k_iSteamHTMLSurfaceCallbacks + 9 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unResults ) //
+CALLBACK_MEMBER( 2, uint32, unCurrentMatch ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: page history status changed on the ability to go backwards and forward
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_CanGoBackAndForward_t, k_iSteamHTMLSurfaceCallbacks + 10 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, bool, bCanGoBack ) //
+CALLBACK_MEMBER( 2, bool, bCanGoForward ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the horizontal scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HorizontalScroll_t, k_iSteamHTMLSurfaceCallbacks + 11 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool , bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the vertical scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_VerticalScroll_t, k_iSteamHTMLSurfaceCallbacks + 12 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool, bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetLinkAtPosition call
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_LinkAtPosition_t, k_iSteamHTMLSurfaceCallbacks + 13 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, x ) // NOTE - Not currently set
+CALLBACK_MEMBER( 2, uint32, y ) // NOTE - Not currently set
+CALLBACK_MEMBER( 3, const char *, pchURL ) //
+CALLBACK_MEMBER( 4, bool, bInput ) //
+CALLBACK_MEMBER( 5, bool, bLiveLink ) //
+END_DEFINE_CALLBACK_6()
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript alert dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSAlert_t, k_iSteamHTMLSurfaceCallbacks + 14 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript confirmation dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSConfirm_t, k_iSteamHTMLSurfaceCallbacks + 15 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: when received show a file open dialog
+// then call FileLoadDialogResponse with the file(s) the user selected.
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FileOpenDialog_t, k_iSteamHTMLSurfaceCallbacks + 16 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+CALLBACK_MEMBER( 2, const char *, pchInitialFile ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new html window has been created
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_NewWindow_t, k_iSteamHTMLSurfaceCallbacks + 21 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the current surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the page to load
+CALLBACK_MEMBER( 2, uint32, unX ) // the x pos into the page to display the popup
+CALLBACK_MEMBER( 3, uint32, unY ) // the y pos into the page to display the popup
+CALLBACK_MEMBER( 4, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 5, uint32, unTall ) // the total height of the pBGRA texture
+CALLBACK_MEMBER( 6, HHTMLBrowser, unNewWindow_BrowserHandle ) // the handle of the new window surface
+END_DEFINE_CALLBACK_7()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: change the cursor to display
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SetCursor_t, k_iSteamHTMLSurfaceCallbacks + 22 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, eMouseCursor ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: informational message from the browser
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_StatusText_t, k_iSteamHTMLSurfaceCallbacks + 23 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ShowToolTip_t, k_iSteamHTMLSurfaceCallbacks + 24 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: update the text of an existing tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_UpdateToolTip_t, k_iSteamHTMLSurfaceCallbacks + 25 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: hide the tooltip you are showing
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HideToolTip_t, k_iSteamHTMLSurfaceCallbacks + 26 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMHTMLSURFACE_H
diff --git a/lsteamclient/steamworks_sdk_136/isteamhttp.h b/lsteamclient/steamworks_sdk_136/isteamhttp.h
new file mode 100644
index 00000000..d96a631f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamhttp.h
@@ -0,0 +1,210 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+typedef uint32 HTTPCookieContainerHandle;
+#define INVALID_HTTPCOOKIE_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Both http and https are supported,
+ // so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+
+ // Creates a cookie container handle which you must later free with ReleaseCookieContainer(). If bAllowResponsesToModify=true
+ // than any response to your requests using this cookie container may add new cookies which may be transmitted with
+ // future requests. If bAllowResponsesToModify=false than only cookies you explicitly set will be sent. This API is just for
+ // during process lifetime, after steam restarts no cookies are persisted and you have no way to access the cookie container across
+ // repeat executions of your process.
+ virtual HTTPCookieContainerHandle CreateCookieContainer( bool bAllowResponsesToModify ) = 0;
+
+ // Release a cookie container you are finished using, freeing it's memory
+ virtual bool ReleaseCookieContainer( HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Adds a cookie to the specified cookie container that will be used with future requests.
+ virtual bool SetCookie( HTTPCookieContainerHandle hCookieContainer, const char *pchHost, const char *pchUrl, const char *pchCookie ) = 0;
+
+ // Set the cookie container to use for a HTTP request
+ virtual bool SetHTTPRequestCookieContainer( HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Set the extra user agent info for a request, this doesn't clobber the normal user agent, it just adds the extra info on the end
+ virtual bool SetHTTPRequestUserAgentInfo( HTTPRequestHandle hRequest, const char *pchUserAgentInfo ) = 0;
+
+ // Set that https request should require verified SSL certificate via machines certificate trust store
+ virtual bool SetHTTPRequestRequiresVerifiedCertificate( HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate ) = 0;
+
+ // Set an absolute timeout on the HTTP request, this is just a total time timeout different than the network activity timeout
+ // which can bump everytime we get more data
+ virtual bool SetHTTPRequestAbsoluteTimeoutMS( HTTPRequestHandle hRequest, uint32 unMilliseconds ) = 0;
+
+ // Check if the reason the request failed was because we timed it out (rather than some harder failure)
+ virtual bool GetHTTPRequestWasTimedOut( HTTPRequestHandle hRequest, bool *pbWasTimedOut ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+
+ uint32 m_unBodySize; // Same as GetHTTPResponseBodySize()
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_136/isteaminventory.h b/lsteamclient/steamworks_sdk_136/isteaminventory.h
new file mode 100644
index 00000000..934df7b1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteaminventory.h
@@ -0,0 +1,354 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Inventory
+//
+//=============================================================================
+
+#ifndef ISTEAMINVENTORY_H
+#define ISTEAMINVENTORY_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// Every individual instance of an item has a globally-unique ItemInstanceID.
+// This ID is unique to the combination of (player, specific item instance)
+// and will not be transferred to another player or re-used for another item.
+typedef uint64 SteamItemInstanceID_t;
+
+static const SteamItemInstanceID_t k_SteamItemInstanceIDInvalid = (SteamItemInstanceID_t)~0;
+
+// Types of items in your game are identified by a 32-bit "item definition number".
+// Valid definition numbers are between 1 and 999999999; numbers less than or equal to
+// zero are invalid, and numbers greater than or equal to one billion (1x10^9) are
+// reserved for internal Steam use.
+typedef int32 SteamItemDef_t;
+
+
+enum ESteamItemFlags
+{
+ // Item status flags - these flags are permanently attached to specific item instances
+ k_ESteamItemNoTrade = 1 << 0, // This item is account-locked and cannot be traded or given away.
+
+ // Action confirmation flags - these flags are set one time only, as part of a result set
+ k_ESteamItemRemoved = 1 << 8, // The item has been destroyed, traded away, expired, or otherwise invalidated
+ k_ESteamItemConsumed = 1 << 9, // The item quantity has been decreased by 1 via ConsumeItem API.
+
+ // All other flag bits are currently reserved for internal Steam use at this time.
+ // Do not assume anything about the state of other flags which are not defined here.
+};
+
+struct SteamItemDetails_t
+{
+ SteamItemInstanceID_t m_itemId;
+ SteamItemDef_t m_iDefinition;
+ uint16 m_unQuantity;
+ uint16 m_unFlags; // see ESteamItemFlags
+};
+
+typedef int32 SteamInventoryResult_t;
+
+static const SteamInventoryResult_t k_SteamInventoryResultInvalid = -1;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Inventory query and manipulation API
+//-----------------------------------------------------------------------------
+class ISteamInventory
+{
+public:
+
+ // INVENTORY ASYNC RESULT MANAGEMENT
+ //
+ // Asynchronous inventory queries always output a result handle which can be used with
+ // GetResultStatus, GetResultItems, etc. A SteamInventoryResultReady_t callback will
+ // be triggered when the asynchronous result becomes ready (or fails).
+ //
+
+ // Find out the status of an asynchronous inventory result handle. Possible values:
+ // k_EResultPending - still in progress
+ // k_EResultOK - done, result ready
+ // k_EResultExpired - done, result ready, maybe out of date (see DeserializeResult)
+ // k_EResultInvalidParam - ERROR: invalid API call parameters
+ // k_EResultServiceUnavailable - ERROR: service temporarily down, you may retry later
+ // k_EResultLimitExceeded - ERROR: operation would exceed per-user inventory limits
+ // k_EResultFail - ERROR: unknown / generic error
+ METHOD_DESC(Find out the status of an asynchronous inventory result handle.)
+ virtual EResult GetResultStatus( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Copies the contents of a result set into a flat array. The specific
+ // contents of the result set depend on which query which was used.
+ METHOD_DESC(Copies the contents of a result set into a flat array. The specific contents of the result set depend on which query which was used.)
+ virtual bool GetResultItems( SteamInventoryResult_t resultHandle,
+ OUT_ARRAY_COUNT( punOutItemsArraySize,Output array) SteamItemDetails_t *pOutItemsArray,
+ uint32 *punOutItemsArraySize ) = 0;
+
+ // Returns the server time at which the result was generated. Compare against
+ // the value of IClientUtils::GetServerRealTime() to determine age.
+ METHOD_DESC(Returns the server time at which the result was generated. Compare against the value of IClientUtils::GetServerRealTime() to determine age.)
+ virtual uint32 GetResultTimestamp( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Returns true if the result belongs to the target steam ID, false if the
+ // result does not. This is important when using DeserializeResult, to verify
+ // that a remote player is not pretending to have a different user's inventory.
+ METHOD_DESC(Returns true if the result belongs to the target steam ID or false if the result does not. This is important when using DeserializeResult to verify that a remote player is not pretending to have a different users inventory.)
+ virtual bool CheckResultSteamID( SteamInventoryResult_t resultHandle, CSteamID steamIDExpected ) = 0;
+
+ // Destroys a result handle and frees all associated memory.
+ METHOD_DESC(Destroys a result handle and frees all associated memory.)
+ virtual void DestroyResult( SteamInventoryResult_t resultHandle ) = 0;
+
+
+ // INVENTORY ASYNC QUERY
+ //
+
+ // Captures the entire state of the current user's Steam inventory.
+ // You must call DestroyResult on this handle when you are done with it.
+ // Returns false and sets *pResultHandle to zero if inventory is unavailable.
+ // Note: calls to this function are subject to rate limits and may return
+ // cached results if called too frequently. It is suggested that you call
+ // this function only when you are about to display the user's full inventory,
+ // or if you expect that the inventory may have changed.
+ METHOD_DESC(Captures the entire state of the current users Steam inventory.)
+ virtual bool GetAllItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+
+ // Captures the state of a subset of the current user's Steam inventory,
+ // identified by an array of item instance IDs. The results from this call
+ // can be serialized and passed to other players to "prove" that the current
+ // user owns specific items, without exposing the user's entire inventory.
+ // For example, you could call GetItemsByID with the IDs of the user's
+ // currently equipped cosmetic items and serialize this to a buffer, and
+ // then transmit this buffer to other players upon joining a game.
+ METHOD_DESC(Captures the state of a subset of the current users Steam inventory identified by an array of item instance IDs.)
+ virtual bool GetItemsByID( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT( unCountInstanceIDs ) const SteamItemInstanceID_t *pInstanceIDs, uint32 unCountInstanceIDs ) = 0;
+
+
+ // RESULT SERIALIZATION AND AUTHENTICATION
+ //
+ // Serialized result sets contain a short signature which can't be forged
+ // or replayed across different game sessions. A result set can be serialized
+ // on the local client, transmitted to other players via your game networking,
+ // and deserialized by the remote players. This is a secure way of preventing
+ // hackers from lying about posessing rare/high-value items.
+
+ // Serializes a result set with signature bytes to an output buffer. Pass
+ // NULL as an output buffer to get the required size via punOutBufferSize.
+ // The size of a serialized result depends on the number items which are being
+ // serialized. When securely transmitting items to other players, it is
+ // recommended to use "GetItemsByID" first to create a minimal result set.
+ // Results have a built-in timestamp which will be considered "expired" after
+ // an hour has elapsed. See DeserializeResult for expiration handling.
+ virtual bool SerializeResult( SteamInventoryResult_t resultHandle, OUT_BUFFER_COUNT(punOutBufferSize) void *pOutBuffer, uint32 *punOutBufferSize ) = 0;
+
+ // Deserializes a result set and verifies the signature bytes. Returns false
+ // if bRequireFullOnlineVerify is set but Steam is running in Offline mode.
+ // Otherwise returns true and then delivers error codes via GetResultStatus.
+ //
+ // The bRESERVED_MUST_BE_FALSE flag is reserved for future use and should not
+ // be set to true by your game at this time.
+ //
+ // DeserializeResult has a potential soft-failure mode where the handle status
+ // is set to k_EResultExpired. GetResultItems() still succeeds in this mode.
+ // The "expired" result could indicate that the data may be out of date - not
+ // just due to timed expiration (one hour), but also because one of the items
+ // in the result set may have been traded or consumed since the result set was
+ // generated. You could compare the timestamp from GetResultTimestamp() to
+ // ISteamUtils::GetServerRealTime() to determine how old the data is. You could
+ // simply ignore the "expired" result code and continue as normal, or you
+ // could challenge the player with expired data to send an updated result set.
+ virtual bool DeserializeResult( SteamInventoryResult_t *pOutResultHandle, BUFFER_COUNT(punOutBufferSize) const void *pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE = false ) = 0;
+
+
+ // INVENTORY ASYNC MODIFICATION
+ //
+
+ // GenerateItems() creates one or more items and then generates a SteamInventoryCallback_t
+ // notification with a matching nCallbackContext parameter. This API is insecure, and could
+ // be abused by hacked clients. It is, however, very useful as a development cheat or as
+ // a means of prototyping item-related features for your game. The use of GenerateItems can
+ // be restricted to certain item definitions or fully blocked via the Steamworks website.
+ // If punArrayQuantity is not NULL, it should be the same length as pArrayItems and should
+ // describe the quantity of each item to generate.
+ virtual bool GenerateItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, ARRAY_COUNT(unArrayLength) const uint32 *punArrayQuantity, uint32 unArrayLength ) = 0;
+
+ // GrantPromoItems() checks the list of promotional items for which the user may be eligible
+ // and grants the items (one time only). On success, the result set will include items which
+ // were granted, if any. If no items were granted because the user isn't eligible for any
+ // promotions, this is still considered a success.
+ METHOD_DESC(GrantPromoItems() checks the list of promotional items for which the user may be eligible and grants the items (one time only).)
+ virtual bool GrantPromoItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+ // AddPromoItem() / AddPromoItems() are restricted versions of GrantPromoItems(). Instead of
+ // scanning for all eligible promotional items, the check is restricted to a single item
+ // definition or set of item definitions. This can be useful if your game has custom UI for
+ // showing a specific promo item to the user.
+ virtual bool AddPromoItem( SteamInventoryResult_t *pResultHandle, SteamItemDef_t itemDef ) = 0;
+ virtual bool AddPromoItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, uint32 unArrayLength ) = 0;
+
+ // ConsumeItem() removes items from the inventory, permanently. They cannot be recovered.
+ // Not for the faint of heart - if your game implements item removal at all, a high-friction
+ // UI confirmation process is highly recommended. Similar to GenerateItems, punArrayQuantity
+ // can be NULL or else an array of the same length as pArrayItems which describe the quantity
+ // of each item to destroy. ConsumeItem can be restricted to certain item definitions or
+ // fully blocked via the Steamworks website to minimize support/abuse issues such as the
+ // clasic "my brother borrowed my laptop and deleted all of my rare items".
+ METHOD_DESC(ConsumeItem() removes items from the inventory permanently.)
+ virtual bool ConsumeItem( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity ) = 0;
+
+ // ExchangeItems() is an atomic combination of GenerateItems and DestroyItems. It can be
+ // used to implement crafting recipes or transmutations, or items which unpack themselves
+ // into other items. Like GenerateItems, this is a flexible and dangerous API which is
+ // meant for rapid prototyping. You can configure restrictions on ExchangeItems via the
+ // Steamworks website, such as limiting it to a whitelist of input/output combinations
+ // corresponding to recipes.
+ // (Note: although GenerateItems may be hard or impossible to use securely in your game,
+ // ExchangeItems is perfectly reasonable to use once the whitelists are set accordingly.)
+ virtual bool ExchangeItems( SteamInventoryResult_t *pResultHandle,
+ ARRAY_COUNT(unArrayGenerateLength) const SteamItemDef_t *pArrayGenerate, ARRAY_COUNT(unArrayGenerateLength) const uint32 *punArrayGenerateQuantity, uint32 unArrayGenerateLength,
+ ARRAY_COUNT(unArrayDestroyLength) const SteamItemInstanceID_t *pArrayDestroy, ARRAY_COUNT(unArrayDestroyLength) const uint32 *punArrayDestroyQuantity, uint32 unArrayDestroyLength ) = 0;
+
+
+ // TransferItemQuantity() is intended for use with items which are "stackable" (can have
+ // quantity greater than one). It can be used to split a stack into two, or to transfer
+ // quantity from one stack into another stack of identical items. To split one stack into
+ // two, pass k_SteamItemInstanceIDInvalid for itemIdDest and a new item will be generated.
+ virtual bool TransferItemQuantity( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest ) = 0;
+
+
+ // TIMED DROPS AND PLAYTIME CREDIT
+ //
+
+ // Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when
+ // active gameplay begins, and at least once every two minutes afterwards. The backend
+ // performs its own time calculations, so the precise timing of the heartbeat is not
+ // critical as long as you send at least one heartbeat every two minutes. Calling the
+ // function more often than that is not harmful, it will simply have no effect. Note:
+ // players may be able to spoof this message by hacking their client, so you should not
+ // attempt to use this as a mechanism to restrict playtime credits. It is simply meant
+ // to distinguish between being in any kind of gameplay situation vs the main menu or
+ // a pre-game launcher window. (If you are stingy with handing out playtime credit, it
+ // will only encourage players to run bots or use mouse/kb event simulators.)
+ //
+ // Playtime credit accumulation can be capped on a daily or weekly basis through your
+ // Steamworks configuration.
+ //
+ METHOD_DESC(Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when active gameplay begins and at least once every two minutes afterwards.)
+ virtual void SendItemDropHeartbeat() = 0;
+
+ // Playtime credit must be consumed and turned into item drops by your game. Only item
+ // definitions which are marked as "playtime item generators" can be spawned. The call
+ // will return an empty result set if there is not enough playtime credit for a drop.
+ // Your game should call TriggerItemDrop at an appropriate time for the user to receive
+ // new items, such as between rounds or while the player is dead. Note that players who
+ // hack their clients could modify the value of "dropListDefinition", so do not use it
+ // to directly control rarity. It is primarily useful during testing and development,
+ // where you may wish to perform experiments with different types of drops.
+ METHOD_DESC(Playtime credit must be consumed and turned into item drops by your game.)
+ virtual bool TriggerItemDrop( SteamInventoryResult_t *pResultHandle, SteamItemDef_t dropListDefinition ) = 0;
+
+
+ // IN-GAME TRADING
+ //
+ // TradeItems() implements limited in-game trading of items, if you prefer not to use
+ // the overlay or an in-game web browser to perform Steam Trading through the website.
+ // You should implement a UI where both players can see and agree to a trade, and then
+ // each client should call TradeItems simultaneously (+/- 5 seconds) with matching
+ // (but reversed) parameters. The result is the same as if both players performed a
+ // Steam Trading transaction through the web. Each player will get an inventory result
+ // confirming the removal or quantity changes of the items given away, and the new
+ // item instance id numbers and quantities of the received items.
+ // (Note: new item instance IDs are generated whenever an item changes ownership.)
+ virtual bool TradeItems( SteamInventoryResult_t *pResultHandle, CSteamID steamIDTradePartner,
+ ARRAY_COUNT(nArrayGiveLength) const SteamItemInstanceID_t *pArrayGive, ARRAY_COUNT(nArrayGiveLength) const uint32 *pArrayGiveQuantity, uint32 nArrayGiveLength,
+ ARRAY_COUNT(nArrayGetLength) const SteamItemInstanceID_t *pArrayGet, ARRAY_COUNT(nArrayGetLength) const uint32 *pArrayGetQuantity, uint32 nArrayGetLength ) = 0;
+
+
+ // ITEM DEFINITIONS
+ //
+ // Item definitions are a mapping of "definition IDs" (integers between 1 and 1000000)
+ // to a set of string properties. Some of these properties are required to display items
+ // on the Steam community web site. Other properties can be defined by applications.
+ // Use of these functions is optional; there is no reason to call LoadItemDefinitions
+ // if your game hardcodes the numeric definition IDs (eg, purple face mask = 20, blue
+ // weapon mod = 55) and does not allow for adding new item types without a client patch.
+ //
+
+ // LoadItemDefinitions triggers the automatic load and refresh of item definitions.
+ // Every time new item definitions are available (eg, from the dynamic addition of new
+ // item types while players are still in-game), a SteamInventoryDefinitionUpdate_t
+ // callback will be fired.
+ METHOD_DESC(LoadItemDefinitions triggers the automatic load and refresh of item definitions.)
+ virtual bool LoadItemDefinitions() = 0;
+
+ // GetItemDefinitionIDs returns the set of all defined item definition IDs (which are
+ // defined via Steamworks configuration, and not necessarily contiguous integers).
+ // If pItemDefIDs is null, the call will return true and *punItemDefIDsArraySize will
+ // contain the total size necessary for a subsequent call. Otherwise, the call will
+ // return false if and only if there is not enough space in the output array.
+ virtual bool GetItemDefinitionIDs(
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+
+ // GetItemDefinitionProperty returns a string property from a given item definition.
+ // Note that some properties (for example, "name") may be localized and will depend
+ // on the current Steam language settings (see ISteamApps::GetCurrentGameLanguage).
+ // Property names are always composed of ASCII letters, numbers, and/or underscores.
+ // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available
+ // property names.
+ virtual bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPropertyName,
+ OUT_STRING_COUNT(punValueBufferSize) char *pchValueBuffer, uint32 *punValueBufferSize ) = 0;
+};
+
+#define STEAMINVENTORY_INTERFACE_VERSION "STEAMINVENTORY_INTERFACE_V001"
+
+
+// SteamInventoryResultReady_t callbacks are fired whenever asynchronous
+// results transition from "Pending" to "OK" or an error state. There will
+// always be exactly one callback per handle.
+struct SteamInventoryResultReady_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 0 };
+ SteamInventoryResult_t m_handle;
+ EResult m_result;
+};
+
+
+// SteamInventoryFullUpdate_t callbacks are triggered when GetAllItems
+// successfully returns a result which is newer / fresher than the last
+// known result. (It will not trigger if the inventory hasn't changed,
+// or if results from two overlapping calls are reversed in flight and
+// the earlier result is already known to be stale/out-of-date.)
+// The normal ResultReady callback will still be triggered immediately
+// afterwards; this is an additional notification for your convenience.
+struct SteamInventoryFullUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 1 };
+ SteamInventoryResult_t m_handle;
+};
+
+
+// A SteamInventoryDefinitionUpdate_t callback is triggered whenever
+// item definitions have been updated, which could be in response to
+// LoadItemDefinitions() or any other async request which required
+// a definition update in order to process results from the server.
+struct SteamInventoryDefinitionUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_136/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_136/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_136/isteammatchmaking.h b/lsteamclient/steamworks_sdk_136/isteammatchmaking.h
new file mode 100644
index 00000000..e32cbf63
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteammatchmaking.h
@@ -0,0 +1,750 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) = 0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ CALL_RESULT( LobbyMatchList_t )
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ CALL_RESULT( LobbyCreated_t )
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ CALL_RESULT( LobbyEnter_t )
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, OUT_STRUCT() CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, OUT_STRUCT() CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_136/isteammusic.h b/lsteamclient/steamworks_sdk_136/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_136/isteammusicremote.h b/lsteamclient/steamworks_sdk_136/isteammusicremote.h
new file mode 100644
index 00000000..5893ef4b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteammusicremote.h
@@ -0,0 +1,129 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSICREMOTE_H
+#define ISTEAMMUSICREMOTE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteammusic.h"
+
+#define k_SteamMusicNameMaxLength 255
+#define k_SteamMusicPNGMaxLength 65535
+
+
+class ISteamMusicRemote
+{
+public:
+ // Service Definition
+ virtual bool RegisterSteamMusicRemote( const char *pchName ) = 0;
+ virtual bool DeregisterSteamMusicRemote() = 0;
+ virtual bool BIsCurrentMusicRemote() = 0;
+ virtual bool BActivationSuccess( bool bValue ) = 0;
+
+ virtual bool SetDisplayName( const char *pchDisplayName ) = 0;
+ virtual bool SetPNGIcon_64x64( void *pvBuffer, uint32 cbBufferLength ) = 0;
+
+ // Abilities for the user interface
+ virtual bool EnablePlayPrevious(bool bValue) = 0;
+ virtual bool EnablePlayNext( bool bValue ) = 0;
+ virtual bool EnableShuffled( bool bValue ) = 0;
+ virtual bool EnableLooped( bool bValue ) = 0;
+ virtual bool EnableQueue( bool bValue ) = 0;
+ virtual bool EnablePlaylists( bool bValue ) = 0;
+
+ // Status
+ virtual bool UpdatePlaybackStatus( AudioPlayback_Status nStatus ) = 0;
+ virtual bool UpdateShuffled( bool bValue ) = 0;
+ virtual bool UpdateLooped( bool bValue ) = 0;
+ virtual bool UpdateVolume( float flValue ) = 0; // volume is between 0.0 and 1.0
+
+ // Current Entry
+ virtual bool CurrentEntryWillChange() = 0;
+ virtual bool CurrentEntryIsAvailable( bool bAvailable ) = 0;
+ virtual bool UpdateCurrentEntryText( const char *pchText ) = 0;
+ virtual bool UpdateCurrentEntryElapsedSeconds( int nValue ) = 0;
+ virtual bool UpdateCurrentEntryCoverArt( void *pvBuffer, uint32 cbBufferLength ) = 0;
+ virtual bool CurrentEntryDidChange() = 0;
+
+ // Queue
+ virtual bool QueueWillChange() = 0;
+ virtual bool ResetQueueEntries() = 0;
+ virtual bool SetQueueEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentQueueEntry( int nID ) = 0;
+ virtual bool QueueDidChange() = 0;
+
+ // Playlist
+ virtual bool PlaylistWillChange() = 0;
+ virtual bool ResetPlaylistEntries() = 0;
+ virtual bool SetPlaylistEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentPlaylistEntry( int nID ) = 0;
+ virtual bool PlaylistDidChange() = 0;
+};
+
+#define STEAMMUSICREMOTE_INTERFACE_VERSION "STEAMMUSICREMOTE_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillActivate_t, k_iSteamMusicRemoteCallbacks + 1)
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillDeactivate_t, k_iSteamMusicRemoteCallbacks + 2 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteToFront_t, k_iSteamMusicRemoteCallbacks + 3 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWillQuit_t, k_iSteamMusicRemoteCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlay_t, k_iSteamMusicRemoteCallbacks + 5 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPause_t, k_iSteamMusicRemoteCallbacks + 6 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayPrevious_t, k_iSteamMusicRemoteCallbacks + 7 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayNext_t, k_iSteamMusicRemoteCallbacks + 8 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsShuffled_t, k_iSteamMusicRemoteCallbacks + 9 )
+ CALLBACK_MEMBER( 0, bool, m_bShuffled )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsLooped_t, k_iSteamMusicRemoteCallbacks + 10 )
+ CALLBACK_MEMBER(0, bool, m_bLooped )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsVolume_t, k_iSteamMusicCallbacks + 11 )
+ CALLBACK_MEMBER(0, float, m_flNewVolume)
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsQueueEntry_t, k_iSteamMusicCallbacks + 12 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsPlaylistEntry_t, k_iSteamMusicCallbacks + 13 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayingRepeatStatus_t, k_iSteamMusicRemoteCallbacks + 14 )
+ CALLBACK_MEMBER(0, int, m_nPlayingRepeatStatus )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+
+#endif // #define ISTEAMMUSICREMOTE_H
diff --git a/lsteamclient/steamworks_sdk_136/isteamnetworking.h b/lsteamclient/steamworks_sdk_136/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_136/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_136/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_136/isteamremotestorage.h b/lsteamclient/steamworks_sdk_136/isteamremotestorage.h
new file mode 100644
index 00000000..22bbbbca
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamremotestorage.h
@@ -0,0 +1,696 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0, // normal Workshop item that can be subscribed to
+ k_EWorkshopFileTypeMicrotransaction = 1, // Workshop item that is meant to be voted on for the purpose of selling in-game
+ k_EWorkshopFileTypeCollection = 2, // a collection of Workshop or Greenlight items
+ k_EWorkshopFileTypeArt = 3, // artwork
+ k_EWorkshopFileTypeVideo = 4, // external video
+ k_EWorkshopFileTypeScreenshot = 5, // screenshot
+ k_EWorkshopFileTypeGame = 6, // Greenlight game entry
+ k_EWorkshopFileTypeSoftware = 7, // Greenlight software entry
+ k_EWorkshopFileTypeConcept = 8, // Greenlight concept
+ k_EWorkshopFileTypeWebGuide = 9, // Steam web guide
+ k_EWorkshopFileTypeIntegratedGuide = 10, // application integrated guide
+ k_EWorkshopFileTypeMerch = 11, // Workshop merchandise meant to be voted on for the purpose of being sold
+ k_EWorkshopFileTypeControllerBinding = 12, // Steam Controller bindings
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13, // internal
+ k_EWorkshopFileTypeSteamVideo = 14, // Steam video
+ k_EWorkshopFileTypeGameManagedItem = 15, // managed completely by the game, not the user, and not shown on the web
+
+ // Update k_EWorkshopFileTypeMax if you add values.
+ k_EWorkshopFileTypeMax = 16
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+ k_EWorkshopVoteLater = 3,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+
+ CALL_RESULT( RemoteStorageFileWriteAsyncComplete_t )
+ virtual SteamAPICall_t FileWriteAsync( const char *pchFile, const void *pvData, uint32 cubData ) = 0;
+
+ CALL_RESULT( RemoteStorageFileReadAsyncComplete_t )
+ virtual SteamAPICall_t FileReadAsync( const char *pchFile, uint32 nOffset, uint32 cubToRead ) = 0;
+ virtual bool FileReadAsyncComplete( SteamAPICall_t hReadCall, void *pvBuffer, uint32 cubToRead ) = 0;
+
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ CALL_RESULT( RemoteStorageFileShareResult_t )
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ CALL_RESULT( RemoteStorageDownloadUGCResult_t )
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, OUT_STRING() char **ppchName, int32 *pnFileSizeInBytes, OUT_STRUCT() CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ CALL_RESULT( RemoteStoragePublishFileProgress_t )
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ CALL_RESULT( RemoteStorageUpdatePublishedFileResult_t )
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ CALL_RESULT( RemoteStorageGetPublishedFileDetailsResult_t )
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ CALL_RESULT( RemoteStorageDeletePublishedFileResult_t )
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ CALL_RESULT( RemoteStorageEnumerateUserPublishedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ CALL_RESULT( RemoteStorageSubscribePublishedFileResult_t )
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageEnumerateUserSubscribedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ CALL_RESULT( RemoteStorageUnsubscribePublishedFileResult_t )
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ CALL_RESULT( RemoteStorageGetPublishedItemVoteDetailsResult_t )
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageUpdateUserPublishedItemVoteResult_t )
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ CALL_RESULT( RemoteStorageGetPublishedItemVoteDetailsResult_t )
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageEnumerateUserPublishedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ CALL_RESULT( RemoteStoragePublishFileProgress_t )
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ CALL_RESULT( RemoteStorageEnumeratePublishedFilesByUserActionResult_t )
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ CALL_RESULT( RemoteStorageEnumeratePublishedFilesByUserActionResult_t )
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ CALL_RESULT( RemoteStorageEnumerateWorkshopFilesResult_t )
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ CALL_RESULT( RemoteStorageDownloadUGCResult_t )
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION013"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ UGCHandle_t m_hFile; // The new content
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileWriteAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileWriteAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 31 };
+ EResult m_eResult; // result
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileReadAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileReadAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 32 };
+ SteamAPICall_t m_hFileReadAsync; // call handle of the async read which was made
+ EResult m_eResult; // result
+ uint32 m_nOffset; // offset in the file this read was at
+ uint32 m_cubRead; // amount read - will the <= the amount requested
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_136/isteamscreenshots.h b/lsteamclient/steamworks_sdk_136/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_136/isteamugc.h b/lsteamclient/steamworks_sdk_136/isteamugc.h
new file mode 100644
index 00000000..ab9c94d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamugc.h
@@ -0,0 +1,394 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+ k_EUGCMatchingUGCType_GameManagedItems = 12, // game managed items (not managed by users)
+ k_EUGCMatchingUGCType_All = ~0, // return everything
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+ k_EUGCQuery_RankedByTotalUniqueSubscriptions = 12,
+};
+
+enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0, // The item update handle was invalid, job might be finished, listen too SubmitItemUpdateResult_t
+ k_EItemUpdateStatusPreparingConfig = 1, // The item update is processing configuration data
+ k_EItemUpdateStatusPreparingContent = 2, // The item update is reading and processing content files
+ k_EItemUpdateStatusUploadingContent = 3, // The item update is uploading content changes to Steam
+ k_EItemUpdateStatusUploadingPreviewFile = 4, // The item update is uploading new preview file image
+ k_EItemUpdateStatusCommittingChanges = 5 // The item update is committing all changes
+};
+
+enum EItemState
+{
+ k_EItemStateNone = 0, // item not tracked on client
+ k_EItemStateSubscribed = 1, // current user is subscribed to this item. Not just cached.
+ k_EItemStateLegacyItem = 2, // item was created with ISteamRemoteStorage
+ k_EItemStateInstalled = 4, // item is installed and usable (but maybe out of date)
+ k_EItemStateNeedsUpdate = 8, // items needs an update. Either because it's not installed yet or creator updated content
+ k_EItemStateDownloading = 16, // item update is currently downloading
+ k_EItemStateDownloadPending = 32, // DownloadItem() was called for this item, content isn't available until DownloadItemResult_t is fired
+};
+
+enum EItemStatistic
+{
+ k_EItemStatistic_NumSubscriptions = 0,
+ k_EItemStatistic_NumFavorites = 1,
+ k_EItemStatistic_NumFollowers = 2,
+ k_EItemStatistic_NumUniqueSubscriptions = 3,
+ k_EItemStatistic_NumUniqueFavorites = 4,
+ k_EItemStatistic_NumUniqueFollowers = 5,
+ k_EItemStatistic_NumUniqueWebsiteViews = 6,
+ k_EItemStatistic_ReportScore = 7,
+};
+
+const uint32 kNumUGCResultsPerPage = 50;
+const uint32 k_cchDeveloperMetadataMax = 5000;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+ // collection details
+ uint32 m_unNumChildren;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for the details of the given published file ids (the RequestUGCDetails call is deprecated and replaced with this)
+ virtual UGCQueryHandle_t CreateQueryUGCDetailsRequest( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+
+ // Send the query to Steam
+ CALL_RESULT( SteamUGCQueryCompleted_t )
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+ virtual bool GetQueryUGCPreviewURL( UGCQueryHandle_t handle, uint32 index, OUT_STRING_COUNT(cchURLSize) char *pchURL, uint32 cchURLSize ) = 0;
+ virtual bool GetQueryUGCMetadata( UGCQueryHandle_t handle, uint32 index, OUT_STRING_COUNT(cchMetadatasize) char *pchMetadata, uint32 cchMetadatasize ) = 0;
+ virtual bool GetQueryUGCChildren( UGCQueryHandle_t handle, uint32 index, PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0;
+ virtual bool GetQueryUGCStatistic( UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 *pStatValue ) = 0;
+ virtual uint32 GetQueryUGCNumAdditionalPreviews( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCAdditionalPreview( UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, OUT_STRING_COUNT(cchURLSize) char *pchURLOrVideoID, uint32 cchURLSize, bool *pbIsImage ) = 0;
+ virtual uint32 GetQueryUGCNumKeyValueTags( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCKeyValueTag( UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, OUT_STRING_COUNT(cchKeySize) char *pchKey, uint32 cchKeySize, OUT_STRING_COUNT(cchValueSize) char *pchValue, uint32 cchValueSize ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnKeyValueTags( UGCQueryHandle_t handle, bool bReturnKeyValueTags ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnMetadata( UGCQueryHandle_t handle, bool bReturnMetadata ) = 0;
+ virtual bool SetReturnChildren( UGCQueryHandle_t handle, bool bReturnChildren ) = 0;
+ virtual bool SetReturnAdditionalPreviews( UGCQueryHandle_t handle, bool bReturnAdditionalPreviews ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetLanguage( UGCQueryHandle_t handle, const char *pchLanguage ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+ virtual bool AddRequiredKeyValueTag( UGCQueryHandle_t handle, const char *pKey, const char *pValue ) = 0;
+
+ // DEPRECATED - Use CreateQueryUGCDetailsRequest call above instead!
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+ // Steam Workshop Creator API
+ CALL_RESULT( CreateItemResult_t )
+ virtual SteamAPICall_t CreateItem( AppId_t nConsumerAppId, EWorkshopFileType eFileType ) = 0; // create new item for this app with no content attached yet
+
+ virtual UGCUpdateHandle_t StartItemUpdate( AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID ) = 0; // start an UGC item update. Set changed properties before commiting update with CommitItemUpdate()
+
+ virtual bool SetItemTitle( UGCUpdateHandle_t handle, const char *pchTitle ) = 0; // change the title of an UGC item
+ virtual bool SetItemDescription( UGCUpdateHandle_t handle, const char *pchDescription ) = 0; // change the description of an UGC item
+ virtual bool SetItemUpdateLanguage( UGCUpdateHandle_t handle, const char *pchLanguage ) = 0; // specify the language of the title or description that will be set
+ virtual bool SetItemMetadata( UGCUpdateHandle_t handle, const char *pchMetaData ) = 0; // change the metadata of an UGC item (max = k_cchDeveloperMetadataMax)
+ virtual bool SetItemVisibility( UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item
+ virtual bool SetItemTags( UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item
+ virtual bool SetItemContent( UGCUpdateHandle_t handle, const char *pszContentFolder ) = 0; // update item content from this local folder
+ virtual bool SetItemPreview( UGCUpdateHandle_t handle, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file, which must be under 1MB in size
+ virtual bool RemoveItemKeyValueTags( UGCUpdateHandle_t handle, const char *pchKey ) = 0; // remove any existing key-value tags with the specified key
+ virtual bool AddItemKeyValueTag( UGCUpdateHandle_t handle, const char *pchKey, const char *pchValue ) = 0; // add new key-value tags for the item. Note that there can be multiple values for a tag.
+
+ CALL_RESULT( SubmitItemUpdateResult_t )
+ virtual SteamAPICall_t SubmitItemUpdate( UGCUpdateHandle_t handle, const char *pchChangeNote ) = 0; // commit update process started with StartItemUpdate()
+ virtual EItemUpdateStatus GetItemUpdateProgress( UGCUpdateHandle_t handle, uint64 *punBytesProcessed, uint64* punBytesTotal ) = 0;
+
+ // Steam Workshop Consumer API
+ CALL_RESULT( SetUserItemVoteResult_t )
+ virtual SteamAPICall_t SetUserItemVote( PublishedFileId_t nPublishedFileID, bool bVoteUp ) = 0;
+ CALL_RESULT( GetUserItemVoteResult_t )
+ virtual SteamAPICall_t GetUserItemVote( PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( UserFavoriteItemsListChanged_t )
+ virtual SteamAPICall_t AddItemToFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( UserFavoriteItemsListChanged_t )
+ virtual SteamAPICall_t RemoveItemFromFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( RemoteStorageSubscribePublishedFileResult_t )
+ virtual SteamAPICall_t SubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // subscribe to this item, will be installed ASAP
+ CALL_RESULT( RemoteStorageUnsubscribePublishedFileResult_t )
+ virtual SteamAPICall_t UnsubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // unsubscribe from this item, will be uninstalled after game quits
+ virtual uint32 GetNumSubscribedItems() = 0; // number of subscribed items
+ virtual uint32 GetSubscribedItems( PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; // all subscribed item PublishFileIDs
+
+ // get EItemState flags about item on this client
+ virtual uint32 GetItemState( PublishedFileId_t nPublishedFileID ) = 0;
+
+ // get info about currently installed content on disc for items that have k_EItemStateInstalled set
+ // if k_EItemStateLegacyItem is set, pchFolder contains the path to the legacy file itself (not a folder)
+ virtual bool GetItemInstallInfo( PublishedFileId_t nPublishedFileID, uint64 *punSizeOnDisk, OUT_STRING_COUNT( cchFolderSize ) char *pchFolder, uint32 cchFolderSize, uint32 *punTimeStamp ) = 0;
+
+ // get info about pending update for items that have k_EItemStateNeedsUpdate set. punBytesTotal will be valid after download started once
+ virtual bool GetItemDownloadInfo( PublishedFileId_t nPublishedFileID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // download new or update already installed item. If function returns true, wait for DownloadItemResult_t. If the item is already installed,
+ // then files on disk should not be used until callback received. If item is not subscribed to, it will be cached for some time.
+ // If bHighPriority is set, any other item download will be suspended and this item downloaded ASAP.
+ virtual bool DownloadItem( PublishedFileId_t nPublishedFileID, bool bHighPriority ) = 0;
+
+ // game servers can set a specific workshop folder before issuing any UGC commands.
+ // This is helpful if you want to support multiple game servers running out of the same install folder
+ virtual bool BInitWorkshopForGameServer( DepotId_t unWorkshopDepotID, const char *pszFolder ) = 0;
+
+ // SuspendDownloads( true ) will suspend all workshop downloads until SuspendDownloads( false ) is called or the game ends
+ virtual void SuspendDownloads( bool bSuspend ) = 0;
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION007"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::CreateItem()
+//-----------------------------------------------------------------------------
+struct CreateItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 3 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId; // new item got this UGC PublishFileID
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::SubmitItemUpdate()
+//-----------------------------------------------------------------------------
+struct SubmitItemUpdateResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 4 };
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a Workshop item has been installed or updated
+//-----------------------------------------------------------------------------
+struct ItemInstalled_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 5 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of DownloadItem(), existing item files can be accessed again
+//-----------------------------------------------------------------------------
+struct DownloadItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 6 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: result of AddItemToFavorites() or RemoveItemFromFavorites()
+//-----------------------------------------------------------------------------
+struct UserFavoriteItemsListChanged_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 7 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bWasAddRequest;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SetUserItemVote()
+//-----------------------------------------------------------------------------
+struct SetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 8 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVoteUp;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserItemVote()
+//-----------------------------------------------------------------------------
+struct GetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 9 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVotedUp;
+ bool m_bVotedDown;
+ bool m_bVoteSkipped;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_136/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_136/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_136/isteamuser.h b/lsteamclient/steamworks_sdk_136/isteamuser.h
new file mode 100644
index 00000000..fbd9c9a1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamuser.h
@@ -0,0 +1,382 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+// reference to a steam call, to filter results by
+typedef int32 HSteamCall;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ CALL_RESULT( EncryptedAppTicketResponse_t )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+ // Requests a URL which authenticates an in-game browser for store check-out,
+ // and then redirects to the specified URL. As long as the in-game browser
+ // accepts and handles session cookies, Steam microtransaction checkout pages
+ // will automatically recognize the user instead of presenting a login page.
+ // The result of this API call will be a StoreAuthURLResponse_t callback.
+ // NOTE: The URL has a very short lifetime to prevent history-snooping attacks,
+ // so you should only call this API when you are about to launch the browser,
+ // or else immediately navigate to the result URL using a hidden browser window.
+ // NOTE 2: The resulting authorization cookie has an expiration time of one day,
+ // so it would be a good idea to request and visit a new auth URL every 12 hours.
+ CALL_RESULT( StoreAuthURLResponse_t )
+ virtual SteamAPICall_t RequestStoreAuthURL( const char *pchRedirectURL ) = 0;
+
+#ifdef _PS3
+ // Initiates PS3 Logon request using just PSN ticket.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultExternalAccountUnlinked if the PSN account is unknown to Steam. You should
+ // then call LogOnAndLinkSteamAccountToPSN() after prompting the user for credentials to establish a link.
+ // Future calls to LogOn() after the one time link call should succeed as long as the user is connected to PSN.
+ virtual void LogOn( bool bInteractive ) = 0;
+
+ // Initiates a request to logon with a specific steam username/password and create a PSN account link at
+ // the same time. Should call this only if LogOn() has failed and indicated the PSN account is unlinked.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon. pchUserName
+ // should be the users Steam username, and pchPassword should be the users Steam password.
+ //
+ // Listen for SteamServersConnected_t or SteamServerConnectFailure_t for status. SteamServerConnectFailure_t
+ // may return with EResult k_EResultOtherAccountAlreadyLinked if already linked to another account.
+ virtual void LogOnAndLinkSteamAccountToPSN( bool bInteractive, const char *pchUserName, const char *pchPassword ) = 0;
+
+ // Final logon option for PS3, this logs into an existing account if already linked, but if not already linked
+ // creates a new account using the info in the PSN ticket to generate a unique account name. The new account is
+ // then linked to the PSN ticket. This is the faster option for new users who don't have an existing Steam account
+ // to get into multiplayer.
+ //
+ // PARAMS: bInteractive - If set tells Steam to go ahead and show the PS3 NetStart dialog if needed to
+ // prompt the user for network setup/PSN logon before initiating the Steam side of the logon.
+ virtual void LogOnAndCreateNewSteamAccountIfNeeded( bool bInteractive ) = 0;
+
+ // Returns a special SteamID that represents the user's PSN information. Can be used to query the user's PSN avatar,
+ // online name, etc. through the standard Steamworks interfaces.
+ virtual CSteamID GetConsoleSteamID() = 0;
+#endif
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser018"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+ bool m_bStillRetrying;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Signaled whenever licenses change
+//-----------------------------------------------------------------------------
+struct LicensesUpdated_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 25 };
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to ISteamUser::RequestStoreAuthURL
+//-----------------------------------------------------------------------------
+struct StoreAuthURLResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 65 };
+ char m_szURL[512];
+};
+
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_136/isteamuserstats.h b/lsteamclient/steamworks_sdk_136/isteamuserstats.h
new file mode 100644
index 00000000..8bb42697
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamuserstats.h
@@ -0,0 +1,476 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ CALL_BACK( UserStatsReceived_t )
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ CALL_RESULT( UserStatsReceived_t )
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ CALL_RESULT(LeaderboardFindResult_t)
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ CALL_RESULT( LeaderboardFindResult_t )
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ CALL_RESULT( LeaderboardScoresDownloaded_t )
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ METHOD_DESC(Downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers)
+ CALL_RESULT( LeaderboardScoresDownloaded_t )
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard,
+ ARRAY_COUNT_D(cUsers, Array of users to retrieve) CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ CALL_RESULT( LeaderboardScoreUploaded_t )
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ CALL_RESULT( LeaderboardUGCSet_t )
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ CALL_RESULT( NumberOfCurrentPlayers_t )
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ CALL_RESULT( GlobalAchievementPercentagesReady_t )
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ CALL_RESULT( GlobalStatsReceived_t )
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_136/isteamutils.h b/lsteamclient/steamworks_sdk_136/isteamutils.h
new file mode 100644
index 00000000..35730ca0
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamutils.h
@@ -0,0 +1,244 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // Deprecated. Applications should use SteamAPI_RunCallbacks() instead. Game servers do not need to call this function.
+ STEAM_PRIVATE_API( virtual void RunFrame() = 0; )
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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 an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ CALL_RESULT( CheckFileSignature_t )
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+
+ // Sets the inset of the overlay notification from the corner specified by SetOverlayNotificationPosition.
+ virtual void SetOverlayNotificationInset( int nHorizontalInset, int nVerticalInset ) = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils007"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_136/isteamvideo.h b/lsteamclient/steamworks_sdk_136/isteamvideo.h
new file mode 100644
index 00000000..4431b4a1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/isteamvideo.h
@@ -0,0 +1,60 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Video
+//
+//=============================================================================
+
+#ifndef ISTEAMVIDEO_H
+#define ISTEAMVIDEO_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Video API
+//-----------------------------------------------------------------------------
+class ISteamVideo
+{
+public:
+
+ // Get a URL suitable for streaming the given Video app ID's video
+ virtual void GetVideoURL( AppId_t unVideoAppID ) = 0;
+
+ // returns true if user is uploading a live broadcast
+ virtual bool IsBroadcasting( int *pnNumViewers ) = 0;
+};
+
+#define STEAMVIDEO_INTERFACE_VERSION "STEAMVIDEO_INTERFACE_V001"
+
+DEFINE_CALLBACK( BroadcastUploadStart_t, k_iClientVideoCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( BroadcastUploadStop_t, k_iClientVideoCallbacks + 5 )
+ CALLBACK_MEMBER( 0, EBroadcastUploadResult, m_eResult )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( GetVideoURLResult_t, k_iClientVideoCallbacks + 11 )
+ CALLBACK_MEMBER( 0, EResult, m_eResult )
+ CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID )
+ CALLBACK_MEMBER( 2, char, m_rgchURL[256] )
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMVIDEO_H
diff --git a/lsteamclient/steamworks_sdk_136/matchmakingtypes.h b/lsteamclient/steamworks_sdk_136/matchmakingtypes.h
new file mode 100644
index 00000000..fcb61664
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/matchmakingtypes.h
@@ -0,0 +1,251 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ servernetadr_t() : m_usConnectionPort( 0 ), m_usQueryPort( 0 ), m_unIP( 0 ) {}
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_136/steam_api.h b/lsteamclient/steamworks_sdk_136/steam_api.h
new file mode 100644
index 00000000..826f3783
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/steam_api.h
@@ -0,0 +1,641 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteammusicremote.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+#include "isteamhtmlsurface.h"
+#include "isteaminventory.h"
+#include "isteamvideo.h"
+
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// S_API void SteamAPI_Init(); (see below)
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// checks if a local Steam client is running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Detects if your executable was launched through the Steam client, and restarts your game through
+// the client if necessary. The Steam client will be started if it is not running.
+//
+// Returns: true if your executable was NOT launched through the Steam client. This function will
+// then start your application through the client. Your current process should exit.
+//
+// false if your executable was started through the Steam client or a steam_appid.txt file
+// is present in your game's directory (for development). Your current process should continue.
+//
+// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied
+// to your executable, Steam's DRM will handle restarting through Steam if necessary.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+// interface pointers, configured by SteamAPI_Init()
+S_API ISteamClient *S_CALLTYPE SteamClient();
+
+
+//
+// VERSION_SAFE_STEAM_API_INTERFACES is usually not necessary, but it provides safety against releasing
+// new steam_api.dll's without recompiling/rereleasing modules that use it.
+//
+// If you use VERSION_SAFE_STEAM_API_INTERFACES, then you should call SteamAPI_InitSafe(). Also, to get the
+// Steam interfaces, you must create and Init() a CSteamAPIContext (below) and use the interfaces in there.
+//
+// If you don't use VERSION_SAFE_STEAM_API_INTERFACES, then you can use SteamAPI_Init() and the SteamXXXX()
+// functions below to get at the Steam interfaces.
+//
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+
+#else
+
+S_API bool S_CALLTYPE SteamAPI_Init();
+
+S_API ISteamUser *S_CALLTYPE SteamUser();
+S_API ISteamFriends *S_CALLTYPE SteamFriends();
+S_API ISteamUtils *S_CALLTYPE SteamUtils();
+S_API ISteamMatchmaking *S_CALLTYPE SteamMatchmaking();
+S_API ISteamUserStats *S_CALLTYPE SteamUserStats();
+S_API ISteamApps *S_CALLTYPE SteamApps();
+S_API ISteamNetworking *S_CALLTYPE SteamNetworking();
+S_API ISteamMatchmakingServers *S_CALLTYPE SteamMatchmakingServers();
+S_API ISteamRemoteStorage *S_CALLTYPE SteamRemoteStorage();
+S_API ISteamScreenshots *S_CALLTYPE SteamScreenshots();
+S_API ISteamHTTP *S_CALLTYPE SteamHTTP();
+S_API ISteamUnifiedMessages *S_CALLTYPE SteamUnifiedMessages();
+S_API ISteamController *S_CALLTYPE SteamController();
+S_API ISteamUGC *S_CALLTYPE SteamUGC();
+S_API ISteamAppList *S_CALLTYPE SteamAppList();
+S_API ISteamMusic *S_CALLTYPE SteamMusic();
+S_API ISteamMusicRemote *S_CALLTYPE SteamMusicRemote();
+S_API ISteamHTMLSurface *S_CALLTYPE SteamHTMLSurface();
+S_API ISteamInventory *S_CALLTYPE SteamInventory();
+S_API ISteamVideo *S_CALLTYPE SteamVideo();
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+// Most Steam API functions allocate some amount of thread-local memory for
+// parameter storage. The SteamAPI_ReleaseCurrentThreadMemory() function
+// will free all API-related memory associated with the calling thread.
+// This memory is also released automatically by SteamAPI_RunCallbacks(), so
+// a single-threaded program does not need to explicitly call this function.
+S_API void S_CALLTYPE SteamAPI_ReleaseCurrentThreadMemory();
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback and call-result helpers
+//
+// The following macros and classes are used to register your application for
+// callbacks and call-results, which are delivered in a predictable manner.
+//
+// STEAM_CALLBACK macros are meant for use inside of a C++ class definition.
+// They map a Steam notification callback directly to a class member function
+// which is automatically prototyped as "void func( callback_type *pParam )".
+//
+// CCallResult is used with specific Steam APIs that return "result handles".
+// The handle can be passed to a CCallResult object's Set function, along with
+// an object pointer and member-function pointer. The member function will
+// be executed once the results of the Steam API call are available.
+//
+// CCallback and CCallbackManual classes can be used instead of STEAM_CALLBACK
+// macros if you require finer control over registration and unregistration.
+//
+// Callbacks and call-results are queued automatically and are only
+// delivered/executed when your application calls SteamAPI_RunCallbacks().
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// SteamAPI_RunCallbacks is safe to call from multiple threads simultaneously,
+// but if you choose to do this, callback code may be executed on any thread.
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+
+// Declares a callback member function plus a helper member variable which
+// registers the callback on object creation and unregisters on destruction.
+// The optional fourth 'var' param exists only for backwards-compatibility
+// and can be ignored.
+#define STEAM_CALLBACK( thisclass, func, .../*callback_type, [deprecated] var*/ ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, 4, 3 ), ( /**/, thisclass, func, __VA_ARGS__ ) )
+
+// Declares a callback function and a named CCallbackManual variable which
+// has Register and Unregister functions instead of automatic registration.
+#define STEAM_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type > var; void func( callback_type *pParam )
+
+
+// Internal functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// Internal functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks and call results - internal implementation detail
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+
+private:
+ CCallbackBase( const CCallbackBase& );
+ CCallbackBase& operator=( const CCallbackBase& );
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: templated base for callbacks - internal implementation detail
+//-----------------------------------------------------------------------------
+template< int sizeof_P >
+class CCallbackImpl : protected CCallbackBase
+{
+public:
+ ~CCallbackImpl() { if ( m_nCallbackFlags & k_ECallbackFlagsRegistered ) SteamAPI_UnregisterCallback( this ); }
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+
+protected:
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool /*bIOFailure*/, SteamAPICall_t /*hSteamAPICall*/ ) { Run( pvParam ); }
+ virtual int GetCallbackSizeBytes() { return sizeof_P; }
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult()
+ {
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+ }
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func )
+ {
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+ }
+
+ bool IsActive() const
+ {
+ return ( m_hAPICall != k_uAPICallInvalid );
+ }
+
+ void Cancel()
+ {
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+ }
+
+ ~CCallResult()
+ {
+ Cancel();
+ }
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, false );
+ }
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+ {
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)( (P *)pvParam, bIOFailure );
+ }
+ }
+ virtual int GetCallbackSizeBytes()
+ {
+ return sizeof( P );
+ }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct,
+// bGameserver = listen for gameserver callbacks instead of client callbacks
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameserver = false >
+class CCallback : public CCallbackImpl< sizeof( P ) >
+{
+public:
+ typedef void (T::*func_t)(P*);
+
+ // NOTE: If you can't provide the correct parameters at construction time, you should
+ // use the CCallbackManual callback object (STEAM_CALLBACK_MANUAL macro) instead.
+ CCallback( T *pObj, func_t func ) : m_pObj( NULL ), m_Func( NULL )
+ {
+ if ( bGameserver )
+ {
+ this->SetGameserverFlag();
+ }
+ Register( pObj, func );
+ }
+
+ // manual registration of the callback
+ void Register( T *pObj, func_t func )
+ {
+ if ( !pObj || !func )
+ return;
+
+ if ( this->m_nCallbackFlags & CCallbackBase::k_ECallbackFlagsRegistered )
+ Unregister();
+
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+ }
+
+ void Unregister()
+ {
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+ }
+
+protected:
+ virtual void Run( void *pvParam )
+ {
+ (m_pObj->*m_Func)( (P *)pvParam );
+ }
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: subclass of CCallback which allows default-construction in
+// an unregistered state; you must call Register manually
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer = false >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+
+ // Inherits public Register and Unregister functions from base class
+};
+
+
+
+//-----------------------------------------------------------------------------
+// The following macros are implementation details, not intended for public use
+//-----------------------------------------------------------------------------
+#define _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param )
+#define _STEAM_CALLBACK_HELPER( _1, _2, SELECTED, ... ) _STEAM_CALLBACK_##SELECTED
+#define _STEAM_CALLBACK_SELECT( X, Y ) _STEAM_CALLBACK_HELPER X Y
+#define _STEAM_CALLBACK_3( extra_code, thisclass, func, param ) \
+ struct CCallbackInternal_ ## func : private CCallbackImpl< sizeof( param ) > { \
+ CCallbackInternal_ ## func () { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func ( const CCallbackInternal_ ## func & ) { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func & operator=( const CCallbackInternal_ ## func & ) { return *this; } \
+ private: virtual void Run( void *pvParam ) { _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param ) \
+ thisclass *pOuter = reinterpret_cast<thisclass*>( reinterpret_cast<char*>(this) - offsetof( thisclass, m_steamcallback_ ## func ) ); \
+ pOuter->func( reinterpret_cast<param*>( pvParam ) ); \
+ } \
+ } m_steamcallback_ ## func ; void func( param *pParam )
+#define _STEAM_CALLBACK_4( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param > var; void func( param *pParam )
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// Pumps out all the steam messages, calling registered callbacks.
+// NOT THREADSAFE - do not call from multiple threads simultaneously.
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamUser* SteamUser() { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() { return m_pController; }
+ ISteamUGC* SteamUGC() { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() { return m_pSteamMusic; }
+ ISteamMusicRemote* SteamMusicRemote() { return m_pSteamMusicRemote; }
+ ISteamHTMLSurface* SteamHTMLSurface() { return m_pSteamHTMLSurface; }
+ ISteamInventory* SteamInventory() { return m_pSteamInventory; }
+ ISteamVideo* SteamVideo() { return m_pSteamVideo; }
+
+private:
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages*m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+ ISteamMusicRemote *m_pSteamMusicRemote;
+ ISteamHTMLSurface *m_pSteamHTMLSurface;
+ ISteamInventory *m_pSteamInventory;
+ ISteamVideo *m_pSteamVideo;
+};
+
+inline CSteamAPIContext::CSteamAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamMusicRemote= NULL;
+ m_pSteamHTMLSurface = NULL;
+ m_pSteamInventory = NULL;
+}
+
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ if ( !SteamClient() )
+ return false;
+
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+
+ m_pSteamUser = SteamClient()->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = SteamClient()->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = SteamClient()->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = SteamClient()->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = SteamClient()->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = SteamClient()->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = SteamClient()->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = SteamClient()->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = SteamClient()->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = SteamClient()->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = SteamClient()->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = SteamClient()->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = SteamClient()->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = SteamClient()->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = SteamClient()->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = SteamClient()->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ {
+ return false;
+ }
+
+ m_pSteamMusicRemote = SteamClient()->GetISteamMusicRemote( hSteamUser, hSteamPipe, STEAMMUSICREMOTE_INTERFACE_VERSION );
+ if ( !m_pSteamMusicRemote )
+ {
+ return false;
+ }
+
+ m_pSteamHTMLSurface = SteamClient()->GetISteamHTMLSurface( hSteamUser, hSteamPipe, STEAMHTMLSURFACE_INTERFACE_VERSION );
+ if ( !m_pSteamHTMLSurface )
+ {
+ return false;
+ }
+
+ m_pSteamInventory = SteamClient()->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ {
+ return false;
+ }
+
+ m_pSteamVideo = SteamClient()->GetISteamVideo( hSteamUser, hSteamPipe, STEAMVIDEO_INTERFACE_VERSION );
+ if ( !m_pSteamVideo )
+ {
+ return false;
+ }
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// this should be called before the game initialized the steam APIs
+// pchDate should be of the format "Mmm dd yyyy" (such as from the under under DATE under under macro )
+// pchTime should be of the format "hh:mm:ss" (such as from the under under TIME under under macro )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_136/steam_api_flat.h b/lsteamclient/steamworks_sdk_136/steam_api_flat.h
new file mode 100644
index 00000000..7f746cf8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/steam_api_flat.h
@@ -0,0 +1,786 @@
+//====== Copyright (c) 1996-2014, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Header for flatted SteamAPI. Use this for binding to other languages.
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+#ifndef STEAMAPIFLAT_H
+#define STEAMAPIFLAT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <stdint.h>
+
+
+typedef unsigned char uint8;
+typedef unsigned char uint8;
+typedef signed char int8;
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+typedef int64 lint64;
+typedef uint64 ulint64;
+typedef uint8 Salt_t[8];
+typedef uint64 GID_t;
+typedef uint64 JobID_t;
+typedef GID_t TxnID_t;
+typedef uint32 PackageId_t;
+typedef uint32 BundleId_t;
+typedef uint32 AppId_t;
+typedef uint64 AssetClassId_t;
+typedef uint32 PhysicalItemId_t;
+typedef uint32 DepotId_t;
+typedef uint32 RTime32;
+typedef uint32 CellID_t;
+typedef uint64 SteamAPICall_t;
+typedef uint32 AccountID_t;
+typedef uint32 PartnerId_t;
+typedef uint64 ManifestId_t;
+typedef uint32 HAuthTicket;
+typedef void * BREAKPAD_HANDLE;
+typedef char compile_time_assert_type[1];
+typedef int32 HSteamPipe;
+typedef int32 HSteamUser;
+typedef int32 HSteamCall;
+typedef int16 FriendsGroupID_t;
+typedef void * HServerListRequest;
+typedef int HServerQuery;
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+typedef uint64 UGCFileWriteStreamHandle_t;
+typedef char compile_time_assert_type[1];
+typedef uint64 SteamLeaderboard_t;
+typedef uint64 SteamLeaderboardEntries_t;
+typedef uint32 SNetSocket_t;
+typedef uint32 SNetListenSocket_t;
+typedef uint32 ScreenshotHandle;
+typedef uint32 HTTPRequestHandle;
+typedef uint32 HTTPCookieContainerHandle;
+typedef uint64 ClientUnifiedMessageHandle;
+typedef uint64 ControllerHandle_t;
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+typedef uint32 HHTMLBrowser;
+typedef uint64 SteamItemInstanceID_t;
+typedef int32 SteamItemDef_t;
+typedef int32 SteamInventoryResult_t;
+// OpenVR Constants
+int const_k_iSteamUserCallbacks = 100;
+int const_k_iSteamGameServerCallbacks = 200;
+int const_k_iSteamFriendsCallbacks = 300;
+int const_k_iSteamBillingCallbacks = 400;
+int const_k_iSteamMatchmakingCallbacks = 500;
+int const_k_iSteamContentServerCallbacks = 600;
+int const_k_iSteamUtilsCallbacks = 700;
+int const_k_iClientFriendsCallbacks = 800;
+int const_k_iClientUserCallbacks = 900;
+int const_k_iSteamAppsCallbacks = 1000;
+int const_k_iSteamUserStatsCallbacks = 1100;
+int const_k_iSteamNetworkingCallbacks = 1200;
+int const_k_iClientRemoteStorageCallbacks = 1300;
+int const_k_iClientDepotBuilderCallbacks = 1400;
+int const_k_iSteamGameServerItemsCallbacks = 1500;
+int const_k_iClientUtilsCallbacks = 1600;
+int const_k_iSteamGameCoordinatorCallbacks = 1700;
+int const_k_iSteamGameServerStatsCallbacks = 1800;
+int const_k_iSteam2AsyncCallbacks = 1900;
+int const_k_iSteamGameStatsCallbacks = 2000;
+int const_k_iClientHTTPCallbacks = 2100;
+int const_k_iClientScreenshotsCallbacks = 2200;
+int const_k_iSteamScreenshotsCallbacks = 2300;
+int const_k_iClientAudioCallbacks = 2400;
+int const_k_iClientUnifiedMessagesCallbacks = 2500;
+int const_k_iSteamStreamLauncherCallbacks = 2600;
+int const_k_iClientControllerCallbacks = 2700;
+int const_k_iSteamControllerCallbacks = 2800;
+int const_k_iClientParentalSettingsCallbacks = 2900;
+int const_k_iClientDeviceAuthCallbacks = 3000;
+int const_k_iClientNetworkDeviceManagerCallbacks = 3100;
+int const_k_iClientMusicCallbacks = 3200;
+int const_k_iClientRemoteClientManagerCallbacks = 3300;
+int const_k_iClientUGCCallbacks = 3400;
+int const_k_iSteamStreamClientCallbacks = 3500;
+int const_k_IClientProductBuilderCallbacks = 3600;
+int const_k_iClientShortcutsCallbacks = 3700;
+int const_k_iClientRemoteControlManagerCallbacks = 3800;
+int const_k_iSteamAppListCallbacks = 3900;
+int const_k_iSteamMusicCallbacks = 4000;
+int const_k_iSteamMusicRemoteCallbacks = 4100;
+int const_k_iClientVRCallbacks = 4200;
+int const_k_iClientReservedCallbacks = 4300;
+int const_k_iSteamReservedCallbacks = 4400;
+int const_k_iSteamHTMLSurfaceCallbacks = 4500;
+int const_k_iClientVideoCallbacks = 4600;
+int const_k_iClientInventoryCallbacks = 4700;
+int const_k_iClientBluetoothManagerCallbacks = 4800;
+int const_k_cchPersonaNameMax = 128;
+int const_k_cwchPersonaNameMax = 32;
+int const_k_cchMaxRichPresenceKeys = 20;
+int const_k_cchMaxRichPresenceKeyLength = 64;
+int const_k_cchMaxRichPresenceValueLength = 256;
+int const_k_cchStatNameMax = 128;
+int const_k_cchLeaderboardNameMax = 128;
+int const_k_cLeaderboardDetailsMax = 64;
+unsigned long const_k_InvalidUnifiedMessageHandle = 0;
+unsigned long const_k_SteamItemInstanceIDInvalid = 0xffffffff;
+int const_k_SteamInventoryResultInvalid = -1;
+
+
+
+// OpenVR Enums
+// OpenVR Structs
+
+
+
+S_API HSteamPipe SteamAPI_ISteamClient_CreateSteamPipe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamClient_BReleaseSteamPipe(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_ConnectToGlobalUser(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_CreateLocalUser(intptr_t instancePtr, HSteamPipe * phSteamPipe, EAccountType eAccountType);
+S_API void SteamAPI_ISteamClient_ReleaseUser(intptr_t instancePtr, HSteamPipe hSteamPipe, HSteamUser hUser);
+S_API class ISteamUser * SteamAPI_ISteamClient_GetISteamUser(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServer * SteamAPI_ISteamClient_GetISteamGameServer(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_SetLocalIPBinding(intptr_t instancePtr, uint32 unIP, uint16 usPort);
+S_API class ISteamFriends * SteamAPI_ISteamClient_GetISteamFriends(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUtils * SteamAPI_ISteamClient_GetISteamUtils(intptr_t instancePtr, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmaking * SteamAPI_ISteamClient_GetISteamMatchmaking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmakingServers * SteamAPI_ISteamClient_GetISteamMatchmakingServers(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void * SteamAPI_ISteamClient_GetISteamGenericInterface(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUserStats * SteamAPI_ISteamClient_GetISteamUserStats(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServerStats * SteamAPI_ISteamClient_GetISteamGameServerStats(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamApps * SteamAPI_ISteamClient_GetISteamApps(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamNetworking * SteamAPI_ISteamClient_GetISteamNetworking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamRemoteStorage * SteamAPI_ISteamClient_GetISteamRemoteStorage(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamScreenshots * SteamAPI_ISteamClient_GetISteamScreenshots(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_RunFrame(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamClient_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamClient_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(intptr_t instancePtr);
+S_API class ISteamHTTP * SteamAPI_ISteamClient_GetISteamHTTP(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUnifiedMessages * SteamAPI_ISteamClient_GetISteamUnifiedMessages(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamController * SteamAPI_ISteamClient_GetISteamController(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUGC * SteamAPI_ISteamClient_GetISteamUGC(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamAppList * SteamAPI_ISteamClient_GetISteamAppList(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusic * SteamAPI_ISteamClient_GetISteamMusic(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusicRemote * SteamAPI_ISteamClient_GetISteamMusicRemote(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamHTMLSurface * SteamAPI_ISteamClient_GetISteamHTMLSurface(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_Set_SteamAPI_CPostAPIResultInProcess(intptr_t instancePtr, SteamAPI_PostAPIResultInProcess_t func);
+S_API void SteamAPI_ISteamClient_Remove_SteamAPI_CPostAPIResultInProcess(intptr_t instancePtr, SteamAPI_PostAPIResultInProcess_t func);
+S_API void SteamAPI_ISteamClient_Set_SteamAPI_CCheckCallbackRegisteredInProcess(intptr_t instancePtr, SteamAPI_CheckCallbackRegistered_t func);
+S_API class ISteamInventory * SteamAPI_ISteamClient_GetISteamInventory(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamVideo * SteamAPI_ISteamClient_GetISteamVideo(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API HSteamUser SteamAPI_ISteamUser_GetHSteamUser(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BLoggedOn(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamUser_GetSteamID(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUser_InitiateGameConnection(intptr_t instancePtr, void * pAuthBlob, int cbMaxAuthBlob, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure);
+S_API void SteamAPI_ISteamUser_TerminateGameConnection(intptr_t instancePtr, uint32 unIPServer, uint16 usPortServer);
+S_API void SteamAPI_ISteamUser_TrackAppUsageEvent(intptr_t instancePtr, class CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo);
+S_API bool SteamAPI_ISteamUser_GetUserDataFolder(intptr_t instancePtr, char * pchBuffer, int cubBuffer);
+S_API void SteamAPI_ISteamUser_StartVoiceRecording(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_StopVoiceRecording(intptr_t instancePtr);
+S_API EVoiceResult SteamAPI_ISteamUser_GetAvailableVoice(intptr_t instancePtr, uint32 * pcbCompressed, uint32 * pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_GetVoice(intptr_t instancePtr, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_DecompressVoice(intptr_t instancePtr, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate);
+S_API uint32 SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(intptr_t instancePtr);
+S_API HAuthTicket SteamAPI_ISteamUser_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamUser_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamUser_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamUser_BIsBehindNAT(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_AdvertiseGame(intptr_t instancePtr, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestEncryptedAppTicket(intptr_t instancePtr, void * pDataToInclude, int cbDataToInclude);
+S_API bool SteamAPI_ISteamUser_GetEncryptedAppTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API int SteamAPI_ISteamUser_GetGameBadgeLevel(intptr_t instancePtr, int nSeries, bool bFoil);
+S_API int SteamAPI_ISteamUser_GetPlayerSteamLevel(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestStoreAuthURL(intptr_t instancePtr, const char * pchRedirectURL);
+S_API const char * SteamAPI_ISteamFriends_GetPersonaName(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_SetPersonaName(intptr_t instancePtr, const char * pchPersonaName);
+S_API EPersonaState SteamAPI_ISteamFriends_GetPersonaState(intptr_t instancePtr);
+S_API int SteamAPI_ISteamFriends_GetFriendCount(intptr_t instancePtr, int iFriendFlags);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendByIndex(intptr_t instancePtr, int iFriend, int iFriendFlags);
+S_API EFriendRelationship SteamAPI_ISteamFriends_GetFriendRelationship(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API EPersonaState SteamAPI_ISteamFriends_GetFriendPersonaState(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaName(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_GetFriendGamePlayed(intptr_t instancePtr, class CSteamID steamIDFriend, struct FriendGameInfo_t * pFriendGameInfo);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(intptr_t instancePtr, class CSteamID steamIDFriend, int iPersonaName);
+S_API int SteamAPI_ISteamFriends_GetFriendSteamLevel(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetPlayerNickname(intptr_t instancePtr, class CSteamID steamIDPlayer);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupCount(intptr_t instancePtr);
+S_API FriendsGroupID_t SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(intptr_t instancePtr, int iFG);
+S_API const char * SteamAPI_ISteamFriends_GetFriendsGroupName(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API void SteamAPI_ISteamFriends_GetFriendsGroupMembersList(intptr_t instancePtr, FriendsGroupID_t friendsGroupID, class CSteamID * pOutSteamIDMembers, int nMembersCount);
+S_API bool SteamAPI_ISteamFriends_HasFriend(intptr_t instancePtr, class CSteamID steamIDFriend, int iFriendFlags);
+S_API int SteamAPI_ISteamFriends_GetClanCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetClanByIndex(intptr_t instancePtr, int iClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanName(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanTag(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_GetClanActivityCounts(intptr_t instancePtr, class CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_DownloadClanActivityCounts(intptr_t instancePtr, class CSteamID * psteamIDClans, int cClansToRequest);
+S_API int SteamAPI_ISteamFriends_GetFriendCountFromSource(intptr_t instancePtr, class CSteamID steamIDSource);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(intptr_t instancePtr, class CSteamID steamIDSource, int iFriend);
+S_API bool SteamAPI_ISteamFriends_IsUserInSource(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDSource);
+S_API void SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(intptr_t instancePtr, class CSteamID steamIDUser, bool bSpeaking);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlay(intptr_t instancePtr, const char * pchDialog);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToUser(intptr_t instancePtr, const char * pchDialog, class CSteamID steamID);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(intptr_t instancePtr, const char * pchURL);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToStore(intptr_t instancePtr, AppId_t nAppID, EOverlayToStoreFlag eFlag);
+S_API void SteamAPI_ISteamFriends_SetPlayedWith(intptr_t instancePtr, class CSteamID steamIDUserPlayedWith);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API int SteamAPI_ISteamFriends_GetSmallFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetMediumFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetLargeFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_RequestUserInformation(intptr_t instancePtr, class CSteamID steamIDUser, bool bRequireNameOnly);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_RequestClanOfficerList(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOwner(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanOfficerCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOfficerByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iOfficer);
+S_API uint32 SteamAPI_ISteamFriends_GetUserRestrictions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamFriends_SetRichPresence(intptr_t instancePtr, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamFriends_ClearRichPresence(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchKey);
+S_API int SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(intptr_t instancePtr, class CSteamID steamIDFriend, int iKey);
+S_API void SteamAPI_ISteamFriends_RequestFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_InviteUserToGame(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchConnectString);
+S_API int SteamAPI_ISteamFriends_GetCoplayFriendCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetCoplayFriend(intptr_t instancePtr, int iCoplayFriend);
+S_API int SteamAPI_ISteamFriends_GetFriendCoplayTime(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API AppId_t SteamAPI_ISteamFriends_GetFriendCoplayGame(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_JoinClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_LeaveClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanChatMemberCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetChatMemberByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iUser);
+S_API bool SteamAPI_ISteamFriends_SendClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, const char * pchText);
+S_API int SteamAPI_ISteamFriends_GetClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, class CSteamID * psteamidChatter);
+S_API bool SteamAPI_ISteamFriends_IsClanChatAdmin(intptr_t instancePtr, class CSteamID steamIDClanChat, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_SetListenForFriendsMessages(intptr_t instancePtr, bool bInterceptEnabled);
+S_API bool SteamAPI_ISteamFriends_ReplyToFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchMsgToSend);
+S_API int SteamAPI_ISteamFriends_GetFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_GetFollowerCount(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_IsFollowing(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_EnumerateFollowingList(intptr_t instancePtr, uint32 unStartIndex);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceAppActive(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(intptr_t instancePtr);
+S_API EUniverse SteamAPI_ISteamUtils_GetConnectedUniverse(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetServerRealTime(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUtils_GetIPCountry(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetImageSize(intptr_t instancePtr, int iImage, uint32 * pnWidth, uint32 * pnHeight);
+S_API bool SteamAPI_ISteamUtils_GetImageRGBA(intptr_t instancePtr, int iImage, uint8 * pubDest, int nDestBufferSize);
+S_API bool SteamAPI_ISteamUtils_GetCSERIPPort(intptr_t instancePtr, uint32 * unIP, uint16 * usPort);
+S_API uint8 SteamAPI_ISteamUtils_GetCurrentBatteryPower(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetAppID(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationPosition(intptr_t instancePtr, ENotificationPosition eNotificationPosition);
+S_API bool SteamAPI_ISteamUtils_IsAPICallCompleted(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, bool * pbFailed);
+S_API ESteamAPICallFailure SteamAPI_ISteamUtils_GetAPICallFailureReason(intptr_t instancePtr, SteamAPICall_t hSteamAPICall);
+S_API bool SteamAPI_ISteamUtils_GetAPICallResult(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed);
+S_API void SteamAPI_ISteamUtils_RunFrame(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamUtils_IsOverlayEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_BOverlayNeedsPresent(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUtils_CheckFileSignature(intptr_t instancePtr, const char * szFileName);
+S_API bool SteamAPI_ISteamUtils_ShowGamepadTextInput(intptr_t instancePtr, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText);
+S_API uint32 SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(intptr_t instancePtr, char * pchText, uint32 cchText);
+S_API const char * SteamAPI_ISteamUtils_GetSteamUILanguage(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_IsSteamRunningInVR(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationInset(intptr_t instancePtr, int nHorizontalInset, int nVerticalInset);
+S_API int SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMatchmaking_GetFavoriteGame(intptr_t instancePtr, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer);
+S_API int SteamAPI_ISteamMatchmaking_AddFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer);
+S_API bool SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_RequestLobbyList(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(intptr_t instancePtr, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToBeCloseTo);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(intptr_t instancePtr, int nSlotsAvailable);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(intptr_t instancePtr, ELobbyDistanceFilter eLobbyDistanceFilter);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(intptr_t instancePtr, int cMaxResults);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyByIndex(intptr_t instancePtr, int iLobby);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_CreateLobby(intptr_t instancePtr, ELobbyType eLobbyType, int cMaxMembers);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_JoinLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_LeaveLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_InviteUserToLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDInvitee);
+S_API int SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iMember);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyDataCount(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize);
+S_API bool SteamAPI_ISteamMatchmaking_DeleteLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDUser, const char * pchKey);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(intptr_t instancePtr, class CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(intptr_t instancePtr, class CSteamID steamIDLobby, int iChatID, class CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API bool SteamAPI_ISteamMatchmaking_RequestLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, class CSteamID steamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, class CSteamID * psteamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby, int cMaxMembers);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyType(intptr_t instancePtr, class CSteamID steamIDLobby, ELobbyType eLobbyType);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyJoinable(intptr_t instancePtr, class CSteamID steamIDLobby, bool bLobbyJoinable);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDNewOwner);
+S_API bool SteamAPI_ISteamMatchmaking_SetLinkedLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDLobbyDependent);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(intptr_t instancePtr, HServerListRequest hRequest, EMatchMakingServerResponse response);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(intptr_t instancePtr, class gameserveritem_t & server);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(intptr_t instancePtr, const char * pchName, int nScore, float flTimePlayed);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(intptr_t instancePtr, const char * pchRule, const char * pchValue);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(intptr_t instancePtr);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestLANServerList(intptr_t instancePtr, AppId_t iApp, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_ReleaseRequest(intptr_t instancePtr, HServerListRequest hServerListRequest);
+S_API class gameserveritem_t * SteamAPI_ISteamMatchmakingServers_GetServerDetails(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API bool SteamAPI_ISteamMatchmakingServers_IsRefreshing(intptr_t instancePtr, HServerListRequest hRequest);
+S_API int SteamAPI_ISteamMatchmakingServers_GetServerCount(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshServer(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PingServer(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPingResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PlayerDetails(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPlayersResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_ServerRules(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingRulesResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelServerQuery(intptr_t instancePtr, HServerQuery hServerQuery);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWrite(intptr_t instancePtr, const char * pchFile, const void * pvData, int32 cubData);
+S_API int32 SteamAPI_ISteamRemoteStorage_FileRead(intptr_t instancePtr, const char * pchFile, void * pvData, int32 cubDataToRead);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileWriteAsync(intptr_t instancePtr, const char * pchFile, const void * pvData, uint32 cubData);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileReadAsync(intptr_t instancePtr, const char * pchFile, uint32 nOffset, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileReadAsyncComplete(intptr_t instancePtr, SteamAPICall_t hReadCall, void * pvBuffer, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileForget(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileDelete(intptr_t instancePtr, const char * pchFile);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileShare(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(intptr_t instancePtr, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform);
+S_API UGCFileWriteStreamHandle_t SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileExists(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FilePersisted(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileSize(intptr_t instancePtr, const char * pchFile);
+S_API int64 SteamAPI_ISteamRemoteStorage_GetFileTimestamp(intptr_t instancePtr, const char * pchFile);
+S_API ERemoteStoragePlatform SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileCount(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(intptr_t instancePtr, int iFile, int32 * pnFileSizeInBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_GetQuota(intptr_t instancePtr, int32 * pnTotalBytes, int32 * puAvailableBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(intptr_t instancePtr);
+S_API void SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(intptr_t instancePtr, bool bEnabled);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownload(intptr_t instancePtr, UGCHandle_t hContent, uint32 unPriority);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(intptr_t instancePtr, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDetails(intptr_t instancePtr, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, class CSteamID * pSteamIDOwner);
+S_API int32 SteamAPI_ISteamRemoteStorage_UGCRead(intptr_t instancePtr, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(intptr_t instancePtr);
+S_API UGCHandle_t SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(intptr_t instancePtr, int32 iCachedContent);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(intptr_t instancePtr, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType);
+S_API PublishedFileUpdateHandle_t SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_DeletePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(intptr_t instancePtr, class CSteamID steamId, uint32 unStartIndex, struct SteamParamStringArray_t * pRequiredTags, struct SteamParamStringArray_t * pExcludedTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishVideo(intptr_t instancePtr, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(intptr_t instancePtr, EWorkshopFileAction eAction, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(intptr_t instancePtr, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, struct SteamParamStringArray_t * pTags, struct SteamParamStringArray_t * pUserTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(intptr_t instancePtr, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority);
+S_API bool SteamAPI_ISteamUserStats_RequestCurrentStats(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUserStats_GetStat(intptr_t instancePtr, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetStat0(intptr_t instancePtr, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_SetStat(intptr_t instancePtr, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamUserStats_SetStat0(intptr_t instancePtr, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamUserStats_UpdateAvgRateStat(intptr_t instancePtr, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamUserStats_GetAchievement(intptr_t instancePtr, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_SetAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_ClearAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(intptr_t instancePtr, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_StoreStats(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetAchievementIcon(intptr_t instancePtr, const char * pchName);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(intptr_t instancePtr, const char * pchName, const char * pchKey);
+S_API bool SteamAPI_ISteamUserStats_IndicateAchievementProgress(intptr_t instancePtr, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress);
+S_API uint32 SteamAPI_ISteamUserStats_GetNumAchievements(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementName(intptr_t instancePtr, uint32 iAchievement);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_ResetAllStats(intptr_t instancePtr, bool bAchievementsToo);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName);
+S_API const char * SteamAPI_ISteamUserStats_GetLeaderboardName(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API int SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardSortMethod SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardDisplayType SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, class CSteamID * prgUsers, int cUsers);
+S_API bool SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(intptr_t instancePtr, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, struct LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_UploadLeaderboardScore(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_AttachLeaderboardUGC(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(intptr_t instancePtr, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API int SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(intptr_t instancePtr, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(intptr_t instancePtr, const char * pchName, float * pflPercent);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalStats(intptr_t instancePtr, int nHistoryDays);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat(intptr_t instancePtr, const char * pchStatName, int64 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat0(intptr_t instancePtr, const char * pchStatName, double * pData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory(intptr_t instancePtr, const char * pchStatName, int64 * pData, uint32 cubData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory0(intptr_t instancePtr, const char * pchStatName, double * pData, uint32 cubData);
+S_API bool SteamAPI_ISteamApps_BIsSubscribed(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsLowViolence(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsCybercafe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsVACBanned(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetCurrentGameLanguage(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetAvailableGameLanguages(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedApp(intptr_t instancePtr, AppId_t appID);
+S_API bool SteamAPI_ISteamApps_BIsDlcInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint32 SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(intptr_t instancePtr);
+S_API int SteamAPI_ISteamApps_GetDLCCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BGetDLCDataByIndex(intptr_t instancePtr, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize);
+S_API void SteamAPI_ISteamApps_InstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_UninstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_GetCurrentBetaName(intptr_t instancePtr, char * pchName, int cchNameBufferSize);
+S_API bool SteamAPI_ISteamApps_MarkContentCorrupt(intptr_t instancePtr, bool bMissingFilesOnly);
+S_API uint32 SteamAPI_ISteamApps_GetInstalledDepots(intptr_t instancePtr, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots);
+S_API uint32 SteamAPI_ISteamApps_GetAppInstallDir(intptr_t instancePtr, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize);
+S_API bool SteamAPI_ISteamApps_BIsAppInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint64 SteamAPI_ISteamApps_GetAppOwner(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetLaunchQueryParam(intptr_t instancePtr, const char * pchKey);
+S_API bool SteamAPI_ISteamApps_GetDlcDownloadProgress(intptr_t instancePtr, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API int SteamAPI_ISteamApps_GetAppBuildId(intptr_t instancePtr);
+S_API void SteamAPI_ISteamApps_RequestPublisherOwnedAppData(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamApps_GetPublisherOwnedAppData(intptr_t instancePtr, unsigned char * pubBuffer, uint32 unMaxBytes);
+S_API bool SteamAPI_ISteamNetworking_SendP2PPacket(intptr_t instancePtr, class CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_IsP2PPacketAvailable(intptr_t instancePtr, uint32 * pcubMsgSize, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_ReadP2PPacket(intptr_t instancePtr, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, class CSteamID * psteamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(intptr_t instancePtr, class CSteamID steamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_GetP2PSessionState(intptr_t instancePtr, class CSteamID steamIDRemote, struct P2PSessionState_t * pConnectionState);
+S_API bool SteamAPI_ISteamNetworking_AllowP2PPacketRelay(intptr_t instancePtr, bool bAllow);
+S_API SNetListenSocket_t SteamAPI_ISteamNetworking_CreateListenSocket(intptr_t instancePtr, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(intptr_t instancePtr, class CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateConnectionSocket(intptr_t instancePtr, uint32 nIP, uint16 nPort, int nTimeoutSec);
+S_API bool SteamAPI_ISteamNetworking_DestroySocket(intptr_t instancePtr, SNetSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_DestroyListenSocket(intptr_t instancePtr, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_SendDataOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_RetrieveDataFromSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailable(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_RetrieveData(intptr_t instancePtr, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_GetSocketInfo(intptr_t instancePtr, SNetSocket_t hSocket, class CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote);
+S_API bool SteamAPI_ISteamNetworking_GetListenSocketInfo(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort);
+S_API ESNetSocketConnectionType SteamAPI_ISteamNetworking_GetSocketConnectionType(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API int SteamAPI_ISteamNetworking_GetMaxPacketSize(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_WriteScreenshot(intptr_t instancePtr, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(intptr_t instancePtr, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight);
+S_API void SteamAPI_ISteamScreenshots_TriggerScreenshot(intptr_t instancePtr);
+S_API void SteamAPI_ISteamScreenshots_HookScreenshots(intptr_t instancePtr, bool bHook);
+S_API bool SteamAPI_ISteamScreenshots_SetLocation(intptr_t instancePtr, ScreenshotHandle hScreenshot, const char * pchLocation);
+S_API bool SteamAPI_ISteamScreenshots_TagUser(intptr_t instancePtr, ScreenshotHandle hScreenshot, class CSteamID steamID);
+S_API bool SteamAPI_ISteamScreenshots_TagPublishedFile(intptr_t instancePtr, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID);
+S_API bool SteamAPI_ISteamMusic_BIsEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusic_BIsPlaying(intptr_t instancePtr);
+S_API AudioPlayback_Status SteamAPI_ISteamMusic_GetPlaybackStatus(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Play(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Pause(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayPrevious(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayNext(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_SetVolume(intptr_t instancePtr, float flVolume);
+S_API float SteamAPI_ISteamMusic_GetVolume(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BActivationSuccess(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_SetDisplayName(intptr_t instancePtr, const char * pchDisplayName);
+S_API bool SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayPrevious(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayNext(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableQueue(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlaylists(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(intptr_t instancePtr, AudioPlayback_Status nStatus);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateVolume(intptr_t instancePtr, float flValue);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(intptr_t instancePtr, bool bAvailable);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(intptr_t instancePtr, const char * pchText);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(intptr_t instancePtr, int nValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_QueueWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetQueueEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetQueueEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_QueueDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetPlaylistEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistDidChange(intptr_t instancePtr);
+S_API HTTPRequestHandle SteamAPI_ISteamHTTP_CreateHTTPRequest(intptr_t instancePtr, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(intptr_t instancePtr, HTTPRequestHandle hRequest, uint64 ulContextValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_DeferHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 * unBodySize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 cOffset, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_ReleaseHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(intptr_t instancePtr, HTTPRequestHandle hRequest, float * pflPercentOut);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen);
+S_API HTTPCookieContainerHandle SteamAPI_ISteamHTTP_CreateCookieContainer(intptr_t instancePtr, bool bAllowResponsesToModify);
+S_API bool SteamAPI_ISteamHTTP_ReleaseCookieContainer(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetCookie(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer, const char * pchHost, const char * pchUrl, const char * pchCookie);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(intptr_t instancePtr, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchUserAgentInfo);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(intptr_t instancePtr, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unMilliseconds);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(intptr_t instancePtr, HTTPRequestHandle hRequest, bool * pbWasTimedOut);
+S_API ClientUnifiedMessageHandle SteamAPI_ISteamUnifiedMessages_SendMethod(intptr_t instancePtr, const char * pchServiceMethod, const void * pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, uint32 * punResponseSize, EResult * peResult);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseData(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, void * pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease);
+S_API bool SteamAPI_ISteamUnifiedMessages_ReleaseMethod(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle);
+S_API bool SteamAPI_ISteamUnifiedMessages_SendNotification(intptr_t instancePtr, const char * pchServiceNotification, const void * pNotificationBuffer, uint32 unNotificationBufferSize);
+S_API bool SteamAPI_ISteamController_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamController_Shutdown(intptr_t instancePtr);
+S_API void SteamAPI_ISteamController_RunFrame(intptr_t instancePtr);
+S_API int SteamAPI_ISteamController_GetConnectedControllers(intptr_t instancePtr, ControllerHandle_t * handlesOut);
+S_API bool SteamAPI_ISteamController_ShowBindingPanel(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetActionSetHandle(intptr_t instancePtr, const char * pszActionSetName);
+S_API void SteamAPI_ISteamController_ActivateActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetCurrentActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerDigitalActionHandle_t SteamAPI_ISteamController_GetDigitalActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerDigitalActionData_t SteamAPI_ISteamController_GetDigitalActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle);
+S_API int SteamAPI_ISteamController_GetDigitalActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin * originsOut);
+S_API ControllerAnalogActionHandle_t SteamAPI_ISteamController_GetAnalogActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerAnalogActionData_t SteamAPI_ISteamController_GetAnalogActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle);
+S_API int SteamAPI_ISteamController_GetAnalogActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin * originsOut);
+S_API void SteamAPI_ISteamController_StopAnalogActionMomentum(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction);
+S_API void SteamAPI_ISteamController_TriggerHapticPulse(intptr_t instancePtr, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec);
+S_API void SteamAPI_ISteamController_TriggerRepeatedHapticPulse(intptr_t instancePtr, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(intptr_t instancePtr, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(intptr_t instancePtr, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SendQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCResult(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, struct SteamUGCDetails_t * pDetails);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCPreviewURL(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCChildren(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCStatistic(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 * pStatValue);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, bool * pbIsImage);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize);
+S_API bool SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_AddRequiredTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_AddExcludedTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_SetReturnKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnKeyValueTags);
+S_API bool SteamAPI_ISteamUGC_SetReturnLongDescription(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnLongDescription);
+S_API bool SteamAPI_ISteamUGC_SetReturnMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnMetadata);
+S_API bool SteamAPI_ISteamUGC_SetReturnChildren(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnChildren);
+S_API bool SteamAPI_ISteamUGC_SetReturnAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews);
+S_API bool SteamAPI_ISteamUGC_SetReturnTotalOnly(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnTotalOnly);
+S_API bool SteamAPI_ISteamUGC_SetLanguage(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetAllowCachedResponse(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds);
+S_API bool SteamAPI_ISteamUGC_SetCloudFileNameFilter(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pMatchCloudFileName);
+S_API bool SteamAPI_ISteamUGC_SetMatchAnyTag(intptr_t instancePtr, UGCQueryHandle_t handle, bool bMatchAnyTag);
+S_API bool SteamAPI_ISteamUGC_SetSearchText(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pSearchText);
+S_API bool SteamAPI_ISteamUGC_SetRankedByTrendDays(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unDays);
+S_API bool SteamAPI_ISteamUGC_AddRequiredKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pKey, const char * pValue);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RequestUGCDetails(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_CreateItem(intptr_t instancePtr, AppId_t nConsumerAppId, EWorkshopFileType eFileType);
+S_API UGCUpdateHandle_t SteamAPI_ISteamUGC_StartItemUpdate(intptr_t instancePtr, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_SetItemTitle(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchTitle);
+S_API bool SteamAPI_ISteamUGC_SetItemDescription(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchDescription);
+S_API bool SteamAPI_ISteamUGC_SetItemUpdateLanguage(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetItemMetadata(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchMetaData);
+S_API bool SteamAPI_ISteamUGC_SetItemVisibility(intptr_t instancePtr, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamUGC_SetItemTags(intptr_t instancePtr, UGCUpdateHandle_t updateHandle, const struct SteamParamStringArray_t * pTags);
+S_API bool SteamAPI_ISteamUGC_SetItemContent(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszContentFolder);
+S_API bool SteamAPI_ISteamUGC_SetItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile);
+S_API bool SteamAPI_ISteamUGC_RemoveItemKeyValueTags(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey);
+S_API bool SteamAPI_ISteamUGC_AddItemKeyValueTag(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubmitItemUpdate(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchChangeNote);
+S_API EItemUpdateStatus SteamAPI_ISteamUGC_GetItemUpdateProgress(intptr_t instancePtr, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_GetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddItemToFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveItemFromFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_UnsubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API uint32 SteamAPI_ISteamUGC_GetNumSubscribedItems(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUGC_GetSubscribedItems(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API uint32 SteamAPI_ISteamUGC_GetItemState(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_GetItemInstallInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp);
+S_API bool SteamAPI_ISteamUGC_GetItemDownloadInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API bool SteamAPI_ISteamUGC_DownloadItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bHighPriority);
+S_API bool SteamAPI_ISteamUGC_BInitWorkshopForGameServer(intptr_t instancePtr, DepotId_t unWorkshopDepotID, const char * pszFolder);
+S_API void SteamAPI_ISteamUGC_SuspendDownloads(intptr_t instancePtr, bool bSuspend);
+S_API uint32 SteamAPI_ISteamAppList_GetNumInstalledApps(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamAppList_GetInstalledApps(intptr_t instancePtr, AppId_t * pvecAppID, uint32 unMaxAppIDs);
+S_API int SteamAPI_ISteamAppList_GetAppName(intptr_t instancePtr, AppId_t nAppID, char * pchName, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppInstallDir(intptr_t instancePtr, AppId_t nAppID, char * pchDirectory, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppBuildId(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Shutdown(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamHTMLSurface_CreateBrowser(intptr_t instancePtr, const char * pchUserAgent, const char * pchUserCSS);
+S_API void SteamAPI_ISteamHTMLSurface_RemoveBrowser(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_LoadURL(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData);
+S_API void SteamAPI_ISteamHTMLSurface_SetSize(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight);
+S_API void SteamAPI_ISteamHTMLSurface_StopLoad(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Reload(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoBack(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoForward(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_AddHeader(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamHTMLSurface_ExecuteJavascript(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchScript);
+S_API void SteamAPI_ISteamHTMLSurface_MouseUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDoubleClick(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseMove(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_MouseWheel(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int32 nDelta);
+S_API void SteamAPI_ISteamHTMLSurface_KeyDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyChar(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetVerticalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetKeyFocus(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus);
+S_API void SteamAPI_ISteamHTMLSurface_ViewSource(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_CopyToClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_PasteFromClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Find(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse);
+S_API void SteamAPI_ISteamHTMLSurface_StopFind(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_SetCookie(intptr_t instancePtr, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly);
+S_API void SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY);
+S_API void SteamAPI_ISteamHTMLSurface_SetBackgroundMode(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bBackgroundMode);
+S_API void SteamAPI_ISteamHTMLSurface_AllowStartRequest(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bAllowed);
+S_API void SteamAPI_ISteamHTMLSurface_JSDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bResult);
+S_API EResult SteamAPI_ISteamInventory_GetResultStatus(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetResultItems(intptr_t instancePtr, SteamInventoryResult_t resultHandle, struct SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize);
+S_API uint32 SteamAPI_ISteamInventory_GetResultTimestamp(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_CheckResultSteamID(intptr_t instancePtr, SteamInventoryResult_t resultHandle, class CSteamID steamIDExpected);
+S_API void SteamAPI_ISteamInventory_DestroyResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetAllItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_GetItemsByID(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs);
+S_API bool SteamAPI_ISteamInventory_SerializeResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize);
+S_API bool SteamAPI_ISteamInventory_DeserializeResult(intptr_t instancePtr, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE);
+S_API bool SteamAPI_ISteamInventory_GenerateItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_GrantPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_AddPromoItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef);
+S_API bool SteamAPI_ISteamInventory_AddPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_ConsumeItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity);
+S_API bool SteamAPI_ISteamInventory_ExchangeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength);
+S_API bool SteamAPI_ISteamInventory_TransferItemQuantity(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest);
+S_API void SteamAPI_ISteamInventory_SendItemDropHeartbeat(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_TriggerItemDrop(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition);
+S_API bool SteamAPI_ISteamInventory_TradeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, class CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength);
+S_API bool SteamAPI_ISteamInventory_LoadItemDefinitions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionIDs(intptr_t instancePtr, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionProperty(intptr_t instancePtr, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSize);
+S_API void SteamAPI_ISteamVideo_GetVideoURL(intptr_t instancePtr, AppId_t unVideoAppID);
+S_API bool SteamAPI_ISteamVideo_IsBroadcasting(intptr_t instancePtr, int * pnNumViewers);
+S_API bool SteamAPI_ISteamGameServer_InitGameServer(intptr_t instancePtr, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString);
+S_API void SteamAPI_ISteamGameServer_SetProduct(intptr_t instancePtr, const char * pszProduct);
+S_API void SteamAPI_ISteamGameServer_SetGameDescription(intptr_t instancePtr, const char * pszGameDescription);
+S_API void SteamAPI_ISteamGameServer_SetModDir(intptr_t instancePtr, const char * pszModDir);
+S_API void SteamAPI_ISteamGameServer_SetDedicatedServer(intptr_t instancePtr, bool bDedicated);
+S_API void SteamAPI_ISteamGameServer_LogOn(intptr_t instancePtr, const char * pszToken);
+S_API void SteamAPI_ISteamGameServer_LogOnAnonymous(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_LogOff(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BLoggedOn(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BSecure(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamGameServer_GetSteamID(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_WasRestartRequested(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetMaxPlayerCount(intptr_t instancePtr, int cPlayersMax);
+S_API void SteamAPI_ISteamGameServer_SetBotPlayerCount(intptr_t instancePtr, int cBotplayers);
+S_API void SteamAPI_ISteamGameServer_SetServerName(intptr_t instancePtr, const char * pszServerName);
+S_API void SteamAPI_ISteamGameServer_SetMapName(intptr_t instancePtr, const char * pszMapName);
+S_API void SteamAPI_ISteamGameServer_SetPasswordProtected(intptr_t instancePtr, bool bPasswordProtected);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorPort(intptr_t instancePtr, uint16 unSpectatorPort);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorServerName(intptr_t instancePtr, const char * pszSpectatorServerName);
+S_API void SteamAPI_ISteamGameServer_ClearAllKeyValues(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetKeyValue(intptr_t instancePtr, const char * pKey, const char * pValue);
+S_API void SteamAPI_ISteamGameServer_SetGameTags(intptr_t instancePtr, const char * pchGameTags);
+S_API void SteamAPI_ISteamGameServer_SetGameData(intptr_t instancePtr, const char * pchGameData);
+S_API void SteamAPI_ISteamGameServer_SetRegion(intptr_t instancePtr, const char * pszRegion);
+S_API bool SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(intptr_t instancePtr, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, class CSteamID * pSteamIDUser);
+S_API uint64 SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SendUserDisconnect(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServer_BUpdateUserData(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore);
+S_API HAuthTicket SteamAPI_ISteamGameServer_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamGameServer_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamGameServer_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamGameServer_RequestUserGroupStatus(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDGroup);
+S_API void SteamAPI_ISteamGameServer_GetGameplayStats(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_GetServerReputation(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamGameServer_GetPublicIP(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_HandleIncomingPacket(intptr_t instancePtr, const void * pData, int cbData, uint32 srcIP, uint16 srcPort);
+S_API int SteamAPI_ISteamGameServer_GetNextOutgoingPacket(intptr_t instancePtr, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort);
+S_API void SteamAPI_ISteamGameServer_EnableHeartbeats(intptr_t instancePtr, bool bActive);
+S_API void SteamAPI_ISteamGameServer_SetHeartbeatInterval(intptr_t instancePtr, int iHeartbeatInterval);
+S_API void SteamAPI_ISteamGameServer_ForceHeartbeat(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_AssociateWithClan(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(intptr_t instancePtr, class CSteamID steamIDNewPlayer);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API bool SteamAPI_ISteamGameServerStats_ClearUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_StoreUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+#endif // STEAMAPIFLAT_H
+
+
diff --git a/lsteamclient/steamworks_sdk_136/steam_gameserver.h b/lsteamclient/steamworks_sdk_136/steam_gameserver.h
new file mode 100644
index 00000000..a716f05f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/steam_gameserver.h
@@ -0,0 +1,191 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+#ifndef _PS3
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#else
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+S_API bool SteamGameServer_InitSafe( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#else
+S_API bool SteamGameServer_Init( const SteamPS3Params_t *ps3Params, uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+#endif
+
+#endif
+
+#ifndef VERSION_SAFE_STEAM_API_INTERFACES
+S_API ISteamGameServer *SteamGameServer();
+S_API ISteamUtils *SteamGameServerUtils();
+S_API ISteamNetworking *SteamGameServerNetworking();
+S_API ISteamGameServerStats *SteamGameServerStats();
+S_API ISteamHTTP *SteamGameServerHTTP();
+S_API ISteamInventory *SteamGameServerInventory();
+S_API ISteamUGC *SteamGameServerUGC();
+#endif
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// These macros are similar to the STEAM_CALLBACK_* macros in steam_api.h, but only trigger for gameserver callbacks
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, /*callback_type, [deprecated] var*/... ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, GS, 3 ), ( this->SetGameserverFlag();, thisclass, func, __VA_ARGS__ ) )
+
+#define STEAM_GAMESERVER_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type, true > var; void func( callback_type *pParam )
+
+
+
+#define _STEAM_CALLBACK_GS( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param, true > var; void func( param *pParam )
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe SteamGameServer_GetHSteamPipe();
+
+#ifdef VERSION_SAFE_STEAM_API_INTERFACES
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// VERSION_SAFE_STEAM_API_INTERFACES uses CSteamAPIContext to provide interfaces to each module in a way that
+// lets them each specify the interface versions they are compiled with.
+//
+// It's important that these stay inlined in the header so the calling module specifies the interface versions
+// for whatever Steam API version it has.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+S_API HSteamUser SteamGameServer_GetHSteamUser();
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext();
+ void Clear();
+
+ bool Init();
+
+ ISteamGameServer *SteamGameServer() { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() { return m_pSteamHTTP; }
+ ISteamInventory *SteamInventory() { return m_pSteamInventory; }
+ ISteamUGC *SteamUGC() { return m_pSteamUGC; }
+
+private:
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamInventory *m_pSteamInventory;
+ ISteamUGC *m_pSteamUGC;
+};
+
+inline CSteamGameServerAPIContext::CSteamGameServerAPIContext()
+{
+ Clear();
+}
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamInventory = NULL;
+ m_pSteamUGC = NULL;
+}
+
+S_API ISteamClient *g_pSteamClientGameServer;
+// This function must be inlined so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ if ( !g_pSteamClientGameServer )
+ return false;
+
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+
+ m_pSteamGameServer = g_pSteamClientGameServer->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = g_pSteamClientGameServer->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = g_pSteamClientGameServer->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = g_pSteamClientGameServer->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = g_pSteamClientGameServer->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamInventory = g_pSteamClientGameServer->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_pSteamUGC = g_pSteamClientGameServer->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ return true;
+}
+
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_136/steamclientpublic.h b/lsteamclient/steamworks_sdk_136/steamclientpublic.h
new file mode 100644
index 00000000..2387fc82
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/steamclientpublic.h
@@ -0,0 +1,1173 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to login
+ k_EResultItemDeleted = 86, // The thing we're trying to access has been deleted
+ k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to throttle response to possible attacker
+ k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch
+ k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for two-factor didn't match
+ k_EResultAccountAssociatedToMultiplePartners = 90, // account has been associated with multiple partners
+ k_EResultNotModified = 91, // data not modified
+ k_EResultNoMobileDevice = 92, // the account does not have a mobile device associated with it
+ k_EResultTimeNotSynced = 93, // the time presented is out of range or tolerance
+ k_EResultSmsCodeFailed = 94, // SMS code failure (no match, none pending, etc.)
+ k_EResultAccountLimitExceeded = 95, // Too many accounts access this resource
+ k_EResultAccountActivityLimitExceeded = 96, // Too many changes to this account
+ k_EResultPhoneActivityLimitExceeded = 97, // Too many changes to this phone
+ k_EResultRefundToWallet = 98, // Cannot refund to payment method, must use wallet
+ k_EResultEmailSendFailure = 99, // Cannot send an email
+ k_EResultNotSettled = 100, // Can't perform operation till payment has settled
+ k_EResultNeedCaptcha = 101, // Needs to provide a valid captcha
+ k_EResultGSLTDenied = 102, // a game server login token owned by this token's owner has been banned
+ k_EResultGSOwnerDenied = 103, // game server owner is denied for other reason (account lock, community ban, vac ban, missing phone)
+ k_EResultInvalidItemType = 104, // the type of thing we were requested to act on is invalid
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+ k_EVoiceResultReceiverOutOfDate = 8,
+ k_EVoiceResultReceiverDidNotAnswer = 9,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+enum EDenyReason
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+};
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+enum EBeginAuthSessionResult
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+};
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+enum EAuthSessionResponse
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+ k_EAuthSessionResponsePublisherIssuedBan = 9, // The user is banned for this game. The ban came via the web api and not VAC
+};
+
+// results from UserHasLicenseForApp
+enum EUserHasLicenseForAppResult
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+};
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x0000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x0001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x0002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x0004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x0008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x0010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x0020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x0040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_RetailLicense = 0x0080, // has a retail license for game, (CD-Key etc)
+ k_EAppOwnershipFlags_LicenseLocked = 0x0100, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x0200, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x0400, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x0800, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x1000, // Recurring license, user is charged periodically
+ k_EAppOwnershipFlags_LicenseCanceled = 0x2000, // Mark as canceled, but might be still active if recurring
+ k_EAppOwnershipFlags_AutoGrant = 0x4000, // Ownership is based on any kind of autogrant license
+ k_EAppOwnershipFlags_PendingGift = 0x8000, // user has pending gift to redeem
+ k_EAppOwnershipFlags_RentalNotActivated = 0x10000, // Rental hasn't been activated yet
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media_DEPRECATED = 0x010, // legacy - was used for game trailers, which are now just videos on the web
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+ k_EAppType_Hardware = 0x200, // a hardware device (Steam Machine, Steam Controller, Steam Link, etc.)
+ // 0x400 is up for grabs here
+ k_EAppType_Video = 0x800, // A video component of either a Film or TVSeries (may be the feature, an episode, preview, making-of, etc)
+ k_EAppType_Plugin = 0x1000, // Plug-in types for other Apps
+ k_EAppType_Music = 0x2000, // Music files
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+ k_EChatEntryTypeReserved1 = 12,
+ k_EChatEntryTypeReserved2 = 13,
+ k_EChatEntryTypeLinkBlocked = 14, // a link was removed by the chat filter.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Broadcast upload result details
+//-----------------------------------------------------------------------------
+enum EBroadcastUploadResult
+{
+ k_EBroadcastUploadResultNone = 0, // broadcast state unknown
+ k_EBroadcastUploadResultOK = 1, // broadcast was good, no problems
+ k_EBroadcastUploadResultInitFailed = 2, // broadcast init failed
+ k_EBroadcastUploadResultFrameFailed = 3, // broadcast frame upload failed
+ k_EBroadcastUploadResultTimeout = 4, // broadcast upload timed out
+ k_EBroadcastUploadResultBandwidthExceeded = 5, // broadcast send too much data
+ k_EBroadcastUploadResultLowFPS = 6, // broadcast FPS too low
+ k_EBroadcastUploadResultMissingKeyFrames = 7, // broadcast sending not enough key frames
+ k_EBroadcastUploadResultNoConnection = 8, // broadcast client failed to connect to relay
+ k_EBroadcastUploadResultRelayFailed = 9, // relay dropped the upload
+ k_EBroadcastUploadResultSettingsChanged = 10, // the client changed broadcast settings
+ k_EBroadcastUploadResultMissingAudio = 11, // client failed to send audio data
+ k_EBroadcastUploadResultTooFarBehind = 12, // clients was too slow uploading
+ k_EBroadcastUploadResultTranscodeBehind = 13, // server failed to keep up with transcode
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: codes for well defined launch options
+//-----------------------------------------------------------------------------
+enum ELaunchOptionType
+{
+ k_ELaunchOptionType_None = 0, // unknown what launch option does
+ k_ELaunchOptionType_Default = 1, // runs the game, app, whatever in default mode
+ k_ELaunchOptionType_SafeMode = 2, // runs the game in safe mode
+ k_ELaunchOptionType_Multiplayer = 3, // runs the game in multiplayer mode
+ k_ELaunchOptionType_Config = 4, // runs config tool for this game
+ k_ELaunchOptionType_OpenVR = 5, // runs game in VR mode using OpenVR
+ k_ELaunchOptionType_Server = 6, // runs dedicated server for this game
+ k_ELaunchOptionType_Editor = 7, // runs game editor
+ k_ELaunchOptionType_Manual = 8, // shows game manual
+ k_ELaunchOptionType_Benchmark = 9, // runs game benchmark
+ k_ELaunchOptionType_Option1 = 10, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option2 = 11, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option3 = 12, // generic run option, uses description field for game name
+ k_ELaunchOptionType_OtherVR = 13, // runs game in VR mode using the Oculus SDK or other vendor-specific VR SDK
+ k_ELaunchOptionType_OpenVROverlay = 14, // runs an OpenVR dashboard overlay
+
+
+ k_ELaunchOptionType_Dialog = 1000, // show launch options dialog
+};
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM2_USERID_STRUCTS )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ V_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, V_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ if ( pchExePath )
+ CRC32_ProcessBuffer( &crc32, pchExePath, V_strlen( pchExePath ) );
+ if ( pchAppName )
+ CRC32_ProcessBuffer( &crc32, pchAppName, V_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, V_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_136/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_136/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_136/steamhttpenums.h b/lsteamclient/steamworks_sdk_136/steamhttpenums.h
new file mode 100644
index 00000000..2ec0982b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/steamhttpenums.h
@@ -0,0 +1,97 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401, // You probably want 403 or something else. 401 implies you're sending a WWW-Authenticate header and the client can sent an Authorization header in response.
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+ k_EHTTPStatusCode4xxUnknown = 418, // 418 is reserved, so we'll use it to mean unknown
+ k_EHTTPStatusCode429TooManyRequests = 429,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+ k_EHTTPStatusCode5xxUnknown = 599,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_136/steamps3params.h b/lsteamclient/steamworks_sdk_136/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_136/steamtypes.h b/lsteamclient/steamworks_sdk_136/steamtypes.h
new file mode 100644
index 00000000..ab12a9be
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/steamtypes.h
@@ -0,0 +1,181 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+#ifdef __clang__
+# define CLANG_ATTR(ATTR) __attribute__((annotate( ATTR )))
+#else
+# define CLANG_ATTR(ATTR)
+#endif
+
+#define METHOD_DESC(DESC) CLANG_ATTR( "desc:" #DESC ";" )
+#define IGNOREATTR() CLANG_ATTR( "ignore" )
+#define OUT_STRUCT() CLANG_ATTR( "out_struct: ;" )
+#define OUT_STRING() CLANG_ATTR( "out_string: ;" )
+#define OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" )
+#define OUT_ARRAY_COUNT(COUNTER, DESC) CLANG_ATTR( "out_array_count:" #COUNTER ";desc:" #DESC )
+#define ARRAY_COUNT(COUNTER) CLANG_ATTR( "array_count:" #COUNTER ";" )
+#define ARRAY_COUNT_D(COUNTER, DESC) CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC )
+#define BUFFER_COUNT(COUNTER) CLANG_ATTR( "buffer_count:" #COUNTER ";" )
+#define OUT_BUFFER_COUNT(COUNTER) CLANG_ATTR( "out_buffer_count:" #COUNTER ";" )
+#define OUT_STRING_COUNT(COUNTER) CLANG_ATTR( "out_string_count:" #COUNTER ";" )
+#define DESC(DESC) CLANG_ATTR("desc:" #DESC ";")
+#define CALL_RESULT(RESULT_TYPE) CLANG_ATTR("callresult:" #RESULT_TYPE ";")
+#define CALL_BACK(RESULT_TYPE) CLANG_ATTR("callback:" #RESULT_TYPE ";")
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef uint64 JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+const JobID_t k_JobIDNil = 0xffffffffffffffffull;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+typedef uint32 BundleId_t;
+const BundleId_t k_uBundleIdInvalid = 0;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+// ID for a depot content manifest
+typedef uint64 ManifestId_t;
+const ManifestId_t k_uManifestIdInvalid = 0;
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_136/steamuniverse.h b/lsteamclient/steamworks_sdk_136/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_136/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_137/isteamapplist.h b/lsteamclient/steamworks_sdk_137/isteamapplist.h
new file mode 100644
index 00000000..d0d7e7e7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, OUT_STRING() char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_137/isteamapps.h b/lsteamclient/steamworks_sdk_137/isteamapps.h
new file mode 100644
index 00000000..d280afb7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamapps.h
@@ -0,0 +1,160 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 240; // max supported length of a legacy cd key
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request legacy cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+ // get download progress for optional DLC
+ virtual bool GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // return the buildid of this app, may change at any time based on backend updates to the game
+ virtual int GetAppBuildId() = 0;
+
+ // Request all proof of purchase keys for the calling appid and asociated DLC.
+ // A series of AppProofOfPurchaseKeyResponse_t callbacks will be sent with
+ // appropriate appid values, ending with a final callback where the m_nAppId
+ // member is k_uAppIdInvalid (zero).
+ virtual void RequestAllProofOfPurchaseKeys() = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION008"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RequestAppProofOfPurchaseKey/RequestAllProofOfPurchaseKeys
+// for supporting third-party CD keys, or other proof-of-purchase systems.
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 21 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ uint32 m_cchKeyLength;
+ char m_rgchKey[k_cubAppProofOfPurchaseKeyMax];
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_137/isteamappticket.h b/lsteamclient/steamworks_sdk_137/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_137/isteamclient.h b/lsteamclient/steamworks_sdk_137/isteamclient.h
new file mode 100644
index 00000000..b6eb6b3d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamclient.h
@@ -0,0 +1,520 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#if defined(STEAM_API_EXPORTS) && !defined(API_GEN)
+#define STEAM_PRIVATE_API( ... ) __VA_ARGS__
+#elif defined(STEAM_API_EXPORTS) && defined(API_GEN)
+#define STEAM_PRIVATE_API( ... )
+#else
+#define STEAM_PRIVATE_API( ... ) protected: __VA_ARGS__ public:
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct ValvePackingSentinel_t
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+extern "C" typedef uint32 ( *SteamAPI_CheckCallbackRegistered_t )( int iCallbackNum );
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamMusicRemote;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+class ISteamHTMLSurface;
+class ISteamInventory;
+class ISteamVideo;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need these APIs if you have a more complex versioning scheme,
+// or if you want to implement a multiplexed gameserver where a single process
+// is handling multiple games at once with independent gameserver SteamIDs.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client.
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Deprecated. Applications should use SteamAPI_RunCallbacks() or SteamGameServer_RunCallbacks() instead.
+ STEAM_PRIVATE_API( virtual void RunFrame() = 0; )
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message.
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player Remote
+ virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // html page display
+ virtual ISteamHTMLSurface *GetISteamHTMLSurface(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // Helper functions for internal Steam usage
+ STEAM_PRIVATE_API( virtual void DEPRECATED_Set_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; )
+ STEAM_PRIVATE_API( virtual void DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; )
+ STEAM_PRIVATE_API( virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0; )
+
+ // inventory
+ virtual ISteamInventory *GetISteamInventory( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Video
+ virtual ISteamVideo *GetISteamVideo( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient017"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iClientDepotBuilderCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+enum { k_iSteamMusicRemoteCallbacks = 4100 };
+enum { k_iClientVRCallbacks = 4200 };
+enum { k_iClientGameNotificationCallbacks = 4300 };
+enum { k_iSteamGameNotificationCallbacks = 4400 };
+enum { k_iSteamHTMLSurfaceCallbacks = 4500 };
+enum { k_iClientVideoCallbacks = 4600 };
+enum { k_iClientInventoryCallbacks = 4700 };
+enum { k_iClientBluetoothManagerCallbacks = 4800 };
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+#ifdef STEAM_CALLBACK_INSPECTION_ENABLED
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname { \
+ typedef callbackname SteamCallback_t; \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+#else
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) struct callbackname { typedef callbackname SteamCallback_t; enum { k_iCallback = callbackid };
+#define CALLBACK_MEMBER( varidx, vartype, varname ) public: vartype varname ;
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) public: vartype varname [ varcount ];
+#define END_CALLBACK_INTERNAL_BEGIN( numvars )
+#define END_CALLBACK_INTERNAL_SWITCH( varidx )
+#define END_CALLBACK_INTERNAL_END() };
+#define END_DEFINE_CALLBACK_0() };
+
+#endif
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_10() \
+ END_CALLBACK_INTERNAL_BEGIN( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_11() \
+ END_CALLBACK_INTERNAL_BEGIN( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_12() \
+ END_CALLBACK_INTERNAL_BEGIN( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_13() \
+ END_CALLBACK_INTERNAL_BEGIN( 13 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_14() \
+ END_CALLBACK_INTERNAL_BEGIN( 14 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 13 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_137/isteamcontroller.h b/lsteamclient/steamworks_sdk_137/isteamcontroller.h
new file mode 100644
index 00000000..99994f28
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamcontroller.h
@@ -0,0 +1,214 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define STEAM_CONTROLLER_MAX_COUNT 16
+
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTIONS 16
+
+#define STEAM_CONTROLLER_MAX_DIGITAL_ACTIONS 128
+
+#define STEAM_CONTROLLER_MAX_ORIGINS 8
+
+// When sending an option to a specific controller handle, you can send to all controllers via this command
+#define STEAM_CONTROLLER_HANDLE_ALL_CONTROLLERS UINT64_MAX
+
+#define STEAM_CONTROLLER_MIN_ANALOG_ACTION_DATA -1.0f
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTION_DATA 1.0f
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+enum EControllerSource
+{
+ k_EControllerSource_None,
+ k_EControllerSource_LeftTrackpad,
+ k_EControllerSource_RightTrackpad,
+ k_EControllerSource_Joystick,
+ k_EControllerSource_ABXY,
+ k_EControllerSource_Switch,
+ k_EControllerSource_LeftTrigger,
+ k_EControllerSource_RightTrigger,
+ k_EControllerSource_Gyro,
+ k_EControllerSource_Count
+};
+
+enum EControllerSourceMode
+{
+ k_EControllerSourceMode_None,
+ k_EControllerSourceMode_Dpad,
+ k_EControllerSourceMode_Buttons,
+ k_EControllerSourceMode_FourButtons,
+ k_EControllerSourceMode_AbsoluteMouse,
+ k_EControllerSourceMode_RelativeMouse,
+ k_EControllerSourceMode_JoystickMove,
+ k_EControllerSourceMode_JoystickCamera,
+ k_EControllerSourceMode_ScrollWheel,
+ k_EControllerSourceMode_Trigger,
+ k_EControllerSourceMode_TouchMenu,
+ k_EControllerSourceMode_MouseJoystick,
+ k_EControllerSourceMode_MouseRegion
+};
+
+enum EControllerActionOrigin
+{
+ k_EControllerActionOrigin_None,
+ k_EControllerActionOrigin_A,
+ k_EControllerActionOrigin_B,
+ k_EControllerActionOrigin_X,
+ k_EControllerActionOrigin_Y,
+ k_EControllerActionOrigin_LeftBumper,
+ k_EControllerActionOrigin_RightBumper,
+ k_EControllerActionOrigin_LeftGrip,
+ k_EControllerActionOrigin_RightGrip,
+ k_EControllerActionOrigin_Start,
+ k_EControllerActionOrigin_Back,
+ k_EControllerActionOrigin_LeftPad_Touch,
+ k_EControllerActionOrigin_LeftPad_Swipe,
+ k_EControllerActionOrigin_LeftPad_Click,
+ k_EControllerActionOrigin_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_LeftPad_DPadWest,
+ k_EControllerActionOrigin_LeftPad_DPadEast,
+ k_EControllerActionOrigin_RightPad_Touch,
+ k_EControllerActionOrigin_RightPad_Swipe,
+ k_EControllerActionOrigin_RightPad_Click,
+ k_EControllerActionOrigin_RightPad_DPadNorth,
+ k_EControllerActionOrigin_RightPad_DPadSouth,
+ k_EControllerActionOrigin_RightPad_DPadWest,
+ k_EControllerActionOrigin_RightPad_DPadEast,
+ k_EControllerActionOrigin_LeftTrigger_Pull,
+ k_EControllerActionOrigin_LeftTrigger_Click,
+ k_EControllerActionOrigin_RightTrigger_Pull,
+ k_EControllerActionOrigin_RightTrigger_Click,
+ k_EControllerActionOrigin_LeftStick_Move,
+ k_EControllerActionOrigin_LeftStick_Click,
+ k_EControllerActionOrigin_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_LeftStick_DPadWest,
+ k_EControllerActionOrigin_LeftStick_DPadEast,
+ k_EControllerActionOrigin_Gyro_Move,
+ k_EControllerActionOrigin_Gyro_Pitch,
+ k_EControllerActionOrigin_Gyro_Yaw,
+ k_EControllerActionOrigin_Gyro_Roll,
+
+ k_EControllerActionOrigin_Count
+};
+
+// ControllerHandle_t is used to refer to a specific controller.
+// This handle will consistently identify a controller, even if it is disconnected and re-connected
+typedef uint64 ControllerHandle_t;
+
+
+// These handles are used to refer to a specific in-game action or action set
+// All action handles should be queried during initialization for performance reasons
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+
+#pragma pack( push, 1 )
+
+struct ControllerAnalogActionData_t
+{
+ // Type of data coming from this action, this will match what got specified in the action set
+ EControllerSourceMode eMode;
+
+ // The current state of this action; will be delta updates for mouse actions
+ float x, y;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+struct ControllerDigitalActionData_t
+{
+ // The current state of this action; will be true if currently pressed
+ bool bState;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ // Init and Shutdown must be called when starting/ending use of this interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Synchronize API state with the latest Steam Controller inputs available. This
+ // is performed automatically by SteamAPI_RunCallbacks, but for the absolute lowest
+ // possible latency, you call this directly before reading controller state.
+ virtual void RunFrame() = 0;
+
+ // Enumerate currently connected controllers
+ // handlesOut should point to a STEAM_CONTROLLER_MAX_COUNT sized array of ControllerHandle_t handles
+ // Returns the number of handles written to handlesOut
+ virtual int GetConnectedControllers( ControllerHandle_t *handlesOut ) = 0;
+
+ // Invokes the Steam overlay and brings up the binding screen
+ // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
+ virtual bool ShowBindingPanel( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTION SETS
+ // Lookup the handle for an Action Set. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerActionSetHandle_t GetActionSetHandle( const char *pszActionSetName ) = 0;
+
+ // Reconfigure the controller to use the specified action set (ie 'Menu', 'Walk' or 'Drive')
+ // This is cheap, and can be safely called repeatedly. It's often easier to repeatedly call it in
+ // your state loops, instead of trying to place it in all of your state transitions.
+ virtual void ActivateActionSet( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle ) = 0;
+ virtual ControllerActionSetHandle_t GetCurrentActionSet( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTIONS
+ // Lookup the handle for a digital action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerDigitalActionHandle_t GetDigitalActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of the supplied digital game action
+ virtual ControllerDigitalActionData_t GetDigitalActionData( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle ) = 0;
+
+ // Get the origin(s) for a digital action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ // Lookup the handle for an analog action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerAnalogActionHandle_t GetAnalogActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of these supplied analog game action
+ virtual ControllerAnalogActionData_t GetAnalogActionData( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle ) = 0;
+
+ // Get the origin(s) for an analog action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ virtual void StopAnalogActionMomentum( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction ) = 0;
+
+ // Trigger a haptic pulse on a controller
+ virtual void TriggerHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ virtual void TriggerRepeatedHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "SteamController003"
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_137/isteamfriends.h b/lsteamclient/steamworks_sdk_137/isteamfriends.h
new file mode 100644
index 00000000..0e154869
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamfriends.h
@@ -0,0 +1,636 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1, // this doesn't get stored; the user has just done an Ignore on an friendship invite
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5, // this is stored; the user has explicit blocked this other user from comments/chat/etc
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested = 7,
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+// friends group identifier type
+typedef int16 FriendsGroupID_t;
+
+// invalid friends group identifier constant
+const FriendsGroupID_t k_FriendsGroupID_Invalid = -1;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagChatMember = 0x1000,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ CALL_RESULT( SetPersonaNameResponse_t )
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, OUT_STRUCT() FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+ // friends steam level
+ virtual int GetFriendSteamLevel( CSteamID steamIDFriend ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // friend grouping (tag) apis
+ // returns the number of friends groups
+ virtual int GetFriendsGroupCount() = 0;
+ // returns the friends group ID for the given index (invalid indices return k_FriendsGroupID_Invalid)
+ virtual FriendsGroupID_t GetFriendsGroupIDByIndex( int iFG ) = 0;
+ // returns the name for the given friends group (NULL in the case of invalid friends group IDs)
+ virtual const char *GetFriendsGroupName( FriendsGroupID_t friendsGroupID ) = 0;
+ // returns the number of members in a given friends group
+ virtual int GetFriendsGroupMembersCount( FriendsGroupID_t friendsGroupID ) = 0;
+ // gets up to nMembersCount members of the given friends group, if fewer exist than requested those positions' SteamIDs will be invalid
+ virtual void GetFriendsGroupMembersList( FriendsGroupID_t friendsGroupID, OUT_ARRAY_CALL(nMembersCount, GetFriendsGroupMembersCount, friendsGroupID ) CSteamID *pOutSteamIDMembers, int nMembersCount ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( ARRAY_COUNT(cClansToRequest) CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ CALL_RESULT( ClanOfficerListResponse_t )
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Up to 20 different keys can be set
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ CALL_RESULT( JoinClanChatRoomCompletionResult_t )
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, OUT_STRUCT() CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ CALL_RESULT( FriendsGetFollowerCount_t )
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ CALL_RESULT( FriendsIsFollowing_t )
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ CALL_RESULT( FriendsEnumerateFollowingList_t )
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends015"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_137/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_137/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_137/isteamgameserver.h b/lsteamclient/steamworks_sdk_137/isteamgameserver.h
new file mode 100644
index 00000000..2004c830
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamgameserver.h
@@ -0,0 +1,387 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ CALL_RESULT( GSReputation_t )
+ virtual SteamAPICall_t GetServerReputation() = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ CALL_RESULT( AssociateWithClanResult_t )
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ CALL_RESULT( ComputeNewPlayerCompatibilityResult_t )
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_137/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_137/isteamgameserverstats.h
new file mode 100644
index 00000000..e4c7d648
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamgameserverstats.h
@@ -0,0 +1,101 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ CALL_RESULT( GSStatsReceived_t )
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ CALL_RESULT( GSStatsStored_t )
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_137/isteamhtmlsurface.h b/lsteamclient/steamworks_sdk_137/isteamhtmlsurface.h
new file mode 100644
index 00000000..9b08e4c3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamhtmlsurface.h
@@ -0,0 +1,453 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to display html pages in a texture
+//
+//=============================================================================
+
+#ifndef ISTEAMHTMLSURFACE_H
+#define ISTEAMHTMLSURFACE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+typedef uint32 HHTMLBrowser;
+const uint32 INVALID_HTMLBROWSER = 0;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for displaying HTML pages and interacting with them
+//-----------------------------------------------------------------------------
+class ISteamHTMLSurface
+{
+public:
+ virtual ~ISteamHTMLSurface() {}
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Create a browser object for display of a html page, when creation is complete the call handle
+ // will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser.
+ // The user agent string is a substring to be added to the general user agent string so you can
+ // identify your client on web servers.
+ // The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if
+ // you do not require this functionality.
+ //
+ // YOU MUST HAVE IMPLEMENTED HANDLERS FOR HTML_BrowserReady_t, HTML_StartRequest_t,
+ // HTML_JSAlert_t, HTML_JSConfirm_t, and HTML_FileOpenDialog_t! See the CALLBACKS
+ // section of this interface (AllowStartRequest, etc) for more details. If you do
+ // not implement these callback handlers, the browser may appear to hang instead of
+ // navigating to new pages or triggering javascript popups.
+ //
+ CALL_RESULT( HTML_BrowserReady_t )
+ virtual SteamAPICall_t CreateBrowser( const char *pchUserAgent, const char *pchUserCSS ) = 0;
+
+ // Call this when you are done with a html surface, this lets us free the resources being used by it
+ virtual void RemoveBrowser( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // Navigate to this URL, results in a HTML_StartRequest_t as the request commences
+ virtual void LoadURL( HHTMLBrowser unBrowserHandle, const char *pchURL, const char *pchPostData ) = 0;
+
+ // Tells the surface the size in pixels to display the surface
+ virtual void SetSize( HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight ) = 0;
+
+ // Stop the load of the current html page
+ virtual void StopLoad( HHTMLBrowser unBrowserHandle ) = 0;
+ // Reload (most likely from local cache) the current page
+ virtual void Reload( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate back in the page history
+ virtual void GoBack( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate forward in the page history
+ virtual void GoForward( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // add this header to any url requests from this browser
+ virtual void AddHeader( HHTMLBrowser unBrowserHandle, const char *pchKey, const char *pchValue ) = 0;
+ // run this javascript script in the currently loaded page
+ virtual void ExecuteJavascript( HHTMLBrowser unBrowserHandle, const char *pchScript ) = 0;
+
+ enum EHTMLMouseButton
+ {
+ eHTMLMouseButton_Left = 0,
+ eHTMLMouseButton_Right = 1,
+ eHTMLMouseButton_Middle = 2,
+ };
+
+ // Mouse click and mouse movement commands
+ virtual void MouseUp( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDown( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDoubleClick( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ // x and y are relative to the HTML bounds
+ virtual void MouseMove( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+ // nDelta is pixels of scroll
+ virtual void MouseWheel( HHTMLBrowser unBrowserHandle, int32 nDelta ) = 0;
+
+ enum EMouseCursor
+ {
+ dc_user = 0,
+ dc_none,
+ dc_arrow,
+ dc_ibeam,
+ dc_hourglass,
+ dc_waitarrow,
+ dc_crosshair,
+ dc_up,
+ dc_sizenw,
+ dc_sizese,
+ dc_sizene,
+ dc_sizesw,
+ dc_sizew,
+ dc_sizee,
+ dc_sizen,
+ dc_sizes,
+ dc_sizewe,
+ dc_sizens,
+ dc_sizeall,
+ dc_no,
+ dc_hand,
+ dc_blank, // don't show any custom cursor, just use your default
+ dc_middle_pan,
+ dc_north_pan,
+ dc_north_east_pan,
+ dc_east_pan,
+ dc_south_east_pan,
+ dc_south_pan,
+ dc_south_west_pan,
+ dc_west_pan,
+ dc_north_west_pan,
+ dc_alias,
+ dc_cell,
+ dc_colresize,
+ dc_copycur,
+ dc_verticaltext,
+ dc_rowresize,
+ dc_zoomin,
+ dc_zoomout,
+ dc_help,
+ dc_custom,
+
+ dc_last, // custom cursors start from this value and up
+ };
+
+ enum EHTMLKeyModifiers
+ {
+ k_eHTMLKeyModifier_None = 0,
+ k_eHTMLKeyModifier_AltDown = 1 << 0,
+ k_eHTMLKeyModifier_CtrlDown = 1 << 1,
+ k_eHTMLKeyModifier_ShiftDown = 1 << 2,
+ };
+
+ // keyboard interactions, native keycode is the virtual key code value from your OS
+ virtual void KeyDown( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ virtual void KeyUp( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ // cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press)
+ virtual void KeyChar( HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+
+ // programmatically scroll this many pixels on the page
+ virtual void SetHorizontalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+ virtual void SetVerticalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+
+ // tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things
+ virtual void SetKeyFocus( HHTMLBrowser unBrowserHandle, bool bHasKeyFocus ) = 0;
+
+ // open the current pages html code in the local editor of choice, used for debugging
+ virtual void ViewSource( HHTMLBrowser unBrowserHandle ) = 0;
+ // copy the currently selected text on the html page to the local clipboard
+ virtual void CopyToClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+ // paste from the local clipboard to the current html page
+ virtual void PasteFromClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element
+ virtual void Find( HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse ) = 0;
+ // cancel a currently running find
+ virtual void StopFind( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // return details about the link at position x,y on the current page
+ virtual void GetLinkAtPosition( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+
+ // set a webcookie for the hostname in question
+ virtual void SetCookie( const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath = "/", RTime32 nExpires = 0, bool bSecure = false, bool bHTTPOnly = false ) = 0;
+
+ // Zoom the current page by flZoom ( from 0.0 to 2.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care)
+ virtual void SetPageScaleFactor( HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY ) = 0;
+
+ // Enable/disable low-resource background mode, where javascript and repaint timers are throttled, resources are
+ // more aggressively purged from memory, and audio/video elements are paused. When background mode is enabled,
+ // all HTML5 video and audio objects will execute ".pause()" and gain the property "._steam_background_paused = 1".
+ // When background mode is disabled, any video or audio objects with that property will resume with ".play()".
+ virtual void SetBackgroundMode( HHTMLBrowser unBrowserHandle, bool bBackgroundMode ) = 0;
+
+ // CALLBACKS
+ //
+ // These set of functions are used as responses to callback requests
+ //
+
+ // You MUST call this in response to a HTML_StartRequest_t callback
+ // Set bAllowed to true to allow this navigation, false to cancel it and stay
+ // on the current page. You can use this feature to limit the valid pages
+ // allowed in your HTML surface.
+ virtual void AllowStartRequest( HHTMLBrowser unBrowserHandle, bool bAllowed ) = 0;
+
+ // You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback
+ // Set bResult to true for the OK option of a confirm, use false otherwise
+ virtual void JSDialogResponse( HHTMLBrowser unBrowserHandle, bool bResult ) = 0;
+
+ // You MUST call this in response to a HTML_FileOpenDialog_t callback
+ IGNOREATTR()
+ virtual void FileLoadDialogResponse( HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles ) = 0;
+};
+
+#define STEAMHTMLSURFACE_INTERFACE_VERSION "STEAMHTMLSURFACE_INTERFACE_VERSION_003"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser is ready for use
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_BrowserReady_t, k_iSteamHTMLSurfaceCallbacks + 1 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this browser is now fully created and ready to navigate to pages
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser has a pending paint
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_NeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 2)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint
+CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called
+CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture
+CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture
+CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update
+CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update
+CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update
+CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update
+CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered
+CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages
+END_DEFINE_CALLBACK_12()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser wanted to navigate to a new page
+// NOTE - you MUST call AllowStartRequest in response to this callback
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_StartRequest_t, k_iSteamHTMLSurfaceCallbacks + 3)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface navigating
+CALLBACK_MEMBER(1, const char *, pchURL) // the url they wish to navigate to
+CALLBACK_MEMBER(2, const char *, pchTarget) // the html link target type (i.e _blank, _self, _parent, _top )
+CALLBACK_MEMBER(3, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER(4, bool, bIsRedirect) // true if this was a http/html redirect from the last load request
+END_DEFINE_CALLBACK_5()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser has been requested to close due to user interaction (usually from a javascript window.close() call)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_CloseBrowser_t, k_iSteamHTMLSurfaceCallbacks + 4)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser is navigating to a new url
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_URLChanged_t, k_iSteamHTMLSurfaceCallbacks + 5 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface navigating
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the url they wish to navigate to
+CALLBACK_MEMBER( 2, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER( 3, bool, bIsRedirect ) // true if this was a http/html redirect from the last load request
+CALLBACK_MEMBER( 4, const char *, pchPageTitle ) // the title of the page
+CALLBACK_MEMBER( 5, bool, bNewNavigation ) // true if this was from a fresh tab and not a click on an existing page
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A page is finished loading
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FinishedRequest_t, k_iSteamHTMLSurfaceCallbacks + 6 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+CALLBACK_MEMBER( 2, const char *, pchPageTitle ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a request to load this url in a new tab
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_OpenLinkInNewTab_t, k_iSteamHTMLSurfaceCallbacks + 7 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the page has a new title now
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ChangedTitle_t, k_iSteamHTMLSurfaceCallbacks + 8 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: results from a search
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SearchResults_t, k_iSteamHTMLSurfaceCallbacks + 9 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unResults ) //
+CALLBACK_MEMBER( 2, uint32, unCurrentMatch ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: page history status changed on the ability to go backwards and forward
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_CanGoBackAndForward_t, k_iSteamHTMLSurfaceCallbacks + 10 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, bool, bCanGoBack ) //
+CALLBACK_MEMBER( 2, bool, bCanGoForward ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the horizontal scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HorizontalScroll_t, k_iSteamHTMLSurfaceCallbacks + 11 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool , bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the vertical scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_VerticalScroll_t, k_iSteamHTMLSurfaceCallbacks + 12 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool, bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetLinkAtPosition call
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_LinkAtPosition_t, k_iSteamHTMLSurfaceCallbacks + 13 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, x ) // NOTE - Not currently set
+CALLBACK_MEMBER( 2, uint32, y ) // NOTE - Not currently set
+CALLBACK_MEMBER( 3, const char *, pchURL ) //
+CALLBACK_MEMBER( 4, bool, bInput ) //
+CALLBACK_MEMBER( 5, bool, bLiveLink ) //
+END_DEFINE_CALLBACK_6()
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript alert dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSAlert_t, k_iSteamHTMLSurfaceCallbacks + 14 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript confirmation dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSConfirm_t, k_iSteamHTMLSurfaceCallbacks + 15 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: when received show a file open dialog
+// then call FileLoadDialogResponse with the file(s) the user selected.
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FileOpenDialog_t, k_iSteamHTMLSurfaceCallbacks + 16 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+CALLBACK_MEMBER( 2, const char *, pchInitialFile ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new html window has been created
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_NewWindow_t, k_iSteamHTMLSurfaceCallbacks + 21 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the current surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the page to load
+CALLBACK_MEMBER( 2, uint32, unX ) // the x pos into the page to display the popup
+CALLBACK_MEMBER( 3, uint32, unY ) // the y pos into the page to display the popup
+CALLBACK_MEMBER( 4, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 5, uint32, unTall ) // the total height of the pBGRA texture
+CALLBACK_MEMBER( 6, HHTMLBrowser, unNewWindow_BrowserHandle ) // the handle of the new window surface
+END_DEFINE_CALLBACK_7()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: change the cursor to display
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SetCursor_t, k_iSteamHTMLSurfaceCallbacks + 22 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, eMouseCursor ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: informational message from the browser
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_StatusText_t, k_iSteamHTMLSurfaceCallbacks + 23 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ShowToolTip_t, k_iSteamHTMLSurfaceCallbacks + 24 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: update the text of an existing tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_UpdateToolTip_t, k_iSteamHTMLSurfaceCallbacks + 25 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: hide the tooltip you are showing
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HideToolTip_t, k_iSteamHTMLSurfaceCallbacks + 26 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMHTMLSURFACE_H
diff --git a/lsteamclient/steamworks_sdk_137/isteamhttp.h b/lsteamclient/steamworks_sdk_137/isteamhttp.h
new file mode 100644
index 00000000..d96a631f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamhttp.h
@@ -0,0 +1,210 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+typedef uint32 HTTPCookieContainerHandle;
+#define INVALID_HTTPCOOKIE_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Both http and https are supported,
+ // so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+
+ // Creates a cookie container handle which you must later free with ReleaseCookieContainer(). If bAllowResponsesToModify=true
+ // than any response to your requests using this cookie container may add new cookies which may be transmitted with
+ // future requests. If bAllowResponsesToModify=false than only cookies you explicitly set will be sent. This API is just for
+ // during process lifetime, after steam restarts no cookies are persisted and you have no way to access the cookie container across
+ // repeat executions of your process.
+ virtual HTTPCookieContainerHandle CreateCookieContainer( bool bAllowResponsesToModify ) = 0;
+
+ // Release a cookie container you are finished using, freeing it's memory
+ virtual bool ReleaseCookieContainer( HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Adds a cookie to the specified cookie container that will be used with future requests.
+ virtual bool SetCookie( HTTPCookieContainerHandle hCookieContainer, const char *pchHost, const char *pchUrl, const char *pchCookie ) = 0;
+
+ // Set the cookie container to use for a HTTP request
+ virtual bool SetHTTPRequestCookieContainer( HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Set the extra user agent info for a request, this doesn't clobber the normal user agent, it just adds the extra info on the end
+ virtual bool SetHTTPRequestUserAgentInfo( HTTPRequestHandle hRequest, const char *pchUserAgentInfo ) = 0;
+
+ // Set that https request should require verified SSL certificate via machines certificate trust store
+ virtual bool SetHTTPRequestRequiresVerifiedCertificate( HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate ) = 0;
+
+ // Set an absolute timeout on the HTTP request, this is just a total time timeout different than the network activity timeout
+ // which can bump everytime we get more data
+ virtual bool SetHTTPRequestAbsoluteTimeoutMS( HTTPRequestHandle hRequest, uint32 unMilliseconds ) = 0;
+
+ // Check if the reason the request failed was because we timed it out (rather than some harder failure)
+ virtual bool GetHTTPRequestWasTimedOut( HTTPRequestHandle hRequest, bool *pbWasTimedOut ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+
+ uint32 m_unBodySize; // Same as GetHTTPResponseBodySize()
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_137/isteaminventory.h b/lsteamclient/steamworks_sdk_137/isteaminventory.h
new file mode 100644
index 00000000..934df7b1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteaminventory.h
@@ -0,0 +1,354 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Inventory
+//
+//=============================================================================
+
+#ifndef ISTEAMINVENTORY_H
+#define ISTEAMINVENTORY_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// Every individual instance of an item has a globally-unique ItemInstanceID.
+// This ID is unique to the combination of (player, specific item instance)
+// and will not be transferred to another player or re-used for another item.
+typedef uint64 SteamItemInstanceID_t;
+
+static const SteamItemInstanceID_t k_SteamItemInstanceIDInvalid = (SteamItemInstanceID_t)~0;
+
+// Types of items in your game are identified by a 32-bit "item definition number".
+// Valid definition numbers are between 1 and 999999999; numbers less than or equal to
+// zero are invalid, and numbers greater than or equal to one billion (1x10^9) are
+// reserved for internal Steam use.
+typedef int32 SteamItemDef_t;
+
+
+enum ESteamItemFlags
+{
+ // Item status flags - these flags are permanently attached to specific item instances
+ k_ESteamItemNoTrade = 1 << 0, // This item is account-locked and cannot be traded or given away.
+
+ // Action confirmation flags - these flags are set one time only, as part of a result set
+ k_ESteamItemRemoved = 1 << 8, // The item has been destroyed, traded away, expired, or otherwise invalidated
+ k_ESteamItemConsumed = 1 << 9, // The item quantity has been decreased by 1 via ConsumeItem API.
+
+ // All other flag bits are currently reserved for internal Steam use at this time.
+ // Do not assume anything about the state of other flags which are not defined here.
+};
+
+struct SteamItemDetails_t
+{
+ SteamItemInstanceID_t m_itemId;
+ SteamItemDef_t m_iDefinition;
+ uint16 m_unQuantity;
+ uint16 m_unFlags; // see ESteamItemFlags
+};
+
+typedef int32 SteamInventoryResult_t;
+
+static const SteamInventoryResult_t k_SteamInventoryResultInvalid = -1;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Inventory query and manipulation API
+//-----------------------------------------------------------------------------
+class ISteamInventory
+{
+public:
+
+ // INVENTORY ASYNC RESULT MANAGEMENT
+ //
+ // Asynchronous inventory queries always output a result handle which can be used with
+ // GetResultStatus, GetResultItems, etc. A SteamInventoryResultReady_t callback will
+ // be triggered when the asynchronous result becomes ready (or fails).
+ //
+
+ // Find out the status of an asynchronous inventory result handle. Possible values:
+ // k_EResultPending - still in progress
+ // k_EResultOK - done, result ready
+ // k_EResultExpired - done, result ready, maybe out of date (see DeserializeResult)
+ // k_EResultInvalidParam - ERROR: invalid API call parameters
+ // k_EResultServiceUnavailable - ERROR: service temporarily down, you may retry later
+ // k_EResultLimitExceeded - ERROR: operation would exceed per-user inventory limits
+ // k_EResultFail - ERROR: unknown / generic error
+ METHOD_DESC(Find out the status of an asynchronous inventory result handle.)
+ virtual EResult GetResultStatus( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Copies the contents of a result set into a flat array. The specific
+ // contents of the result set depend on which query which was used.
+ METHOD_DESC(Copies the contents of a result set into a flat array. The specific contents of the result set depend on which query which was used.)
+ virtual bool GetResultItems( SteamInventoryResult_t resultHandle,
+ OUT_ARRAY_COUNT( punOutItemsArraySize,Output array) SteamItemDetails_t *pOutItemsArray,
+ uint32 *punOutItemsArraySize ) = 0;
+
+ // Returns the server time at which the result was generated. Compare against
+ // the value of IClientUtils::GetServerRealTime() to determine age.
+ METHOD_DESC(Returns the server time at which the result was generated. Compare against the value of IClientUtils::GetServerRealTime() to determine age.)
+ virtual uint32 GetResultTimestamp( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Returns true if the result belongs to the target steam ID, false if the
+ // result does not. This is important when using DeserializeResult, to verify
+ // that a remote player is not pretending to have a different user's inventory.
+ METHOD_DESC(Returns true if the result belongs to the target steam ID or false if the result does not. This is important when using DeserializeResult to verify that a remote player is not pretending to have a different users inventory.)
+ virtual bool CheckResultSteamID( SteamInventoryResult_t resultHandle, CSteamID steamIDExpected ) = 0;
+
+ // Destroys a result handle and frees all associated memory.
+ METHOD_DESC(Destroys a result handle and frees all associated memory.)
+ virtual void DestroyResult( SteamInventoryResult_t resultHandle ) = 0;
+
+
+ // INVENTORY ASYNC QUERY
+ //
+
+ // Captures the entire state of the current user's Steam inventory.
+ // You must call DestroyResult on this handle when you are done with it.
+ // Returns false and sets *pResultHandle to zero if inventory is unavailable.
+ // Note: calls to this function are subject to rate limits and may return
+ // cached results if called too frequently. It is suggested that you call
+ // this function only when you are about to display the user's full inventory,
+ // or if you expect that the inventory may have changed.
+ METHOD_DESC(Captures the entire state of the current users Steam inventory.)
+ virtual bool GetAllItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+
+ // Captures the state of a subset of the current user's Steam inventory,
+ // identified by an array of item instance IDs. The results from this call
+ // can be serialized and passed to other players to "prove" that the current
+ // user owns specific items, without exposing the user's entire inventory.
+ // For example, you could call GetItemsByID with the IDs of the user's
+ // currently equipped cosmetic items and serialize this to a buffer, and
+ // then transmit this buffer to other players upon joining a game.
+ METHOD_DESC(Captures the state of a subset of the current users Steam inventory identified by an array of item instance IDs.)
+ virtual bool GetItemsByID( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT( unCountInstanceIDs ) const SteamItemInstanceID_t *pInstanceIDs, uint32 unCountInstanceIDs ) = 0;
+
+
+ // RESULT SERIALIZATION AND AUTHENTICATION
+ //
+ // Serialized result sets contain a short signature which can't be forged
+ // or replayed across different game sessions. A result set can be serialized
+ // on the local client, transmitted to other players via your game networking,
+ // and deserialized by the remote players. This is a secure way of preventing
+ // hackers from lying about posessing rare/high-value items.
+
+ // Serializes a result set with signature bytes to an output buffer. Pass
+ // NULL as an output buffer to get the required size via punOutBufferSize.
+ // The size of a serialized result depends on the number items which are being
+ // serialized. When securely transmitting items to other players, it is
+ // recommended to use "GetItemsByID" first to create a minimal result set.
+ // Results have a built-in timestamp which will be considered "expired" after
+ // an hour has elapsed. See DeserializeResult for expiration handling.
+ virtual bool SerializeResult( SteamInventoryResult_t resultHandle, OUT_BUFFER_COUNT(punOutBufferSize) void *pOutBuffer, uint32 *punOutBufferSize ) = 0;
+
+ // Deserializes a result set and verifies the signature bytes. Returns false
+ // if bRequireFullOnlineVerify is set but Steam is running in Offline mode.
+ // Otherwise returns true and then delivers error codes via GetResultStatus.
+ //
+ // The bRESERVED_MUST_BE_FALSE flag is reserved for future use and should not
+ // be set to true by your game at this time.
+ //
+ // DeserializeResult has a potential soft-failure mode where the handle status
+ // is set to k_EResultExpired. GetResultItems() still succeeds in this mode.
+ // The "expired" result could indicate that the data may be out of date - not
+ // just due to timed expiration (one hour), but also because one of the items
+ // in the result set may have been traded or consumed since the result set was
+ // generated. You could compare the timestamp from GetResultTimestamp() to
+ // ISteamUtils::GetServerRealTime() to determine how old the data is. You could
+ // simply ignore the "expired" result code and continue as normal, or you
+ // could challenge the player with expired data to send an updated result set.
+ virtual bool DeserializeResult( SteamInventoryResult_t *pOutResultHandle, BUFFER_COUNT(punOutBufferSize) const void *pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE = false ) = 0;
+
+
+ // INVENTORY ASYNC MODIFICATION
+ //
+
+ // GenerateItems() creates one or more items and then generates a SteamInventoryCallback_t
+ // notification with a matching nCallbackContext parameter. This API is insecure, and could
+ // be abused by hacked clients. It is, however, very useful as a development cheat or as
+ // a means of prototyping item-related features for your game. The use of GenerateItems can
+ // be restricted to certain item definitions or fully blocked via the Steamworks website.
+ // If punArrayQuantity is not NULL, it should be the same length as pArrayItems and should
+ // describe the quantity of each item to generate.
+ virtual bool GenerateItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, ARRAY_COUNT(unArrayLength) const uint32 *punArrayQuantity, uint32 unArrayLength ) = 0;
+
+ // GrantPromoItems() checks the list of promotional items for which the user may be eligible
+ // and grants the items (one time only). On success, the result set will include items which
+ // were granted, if any. If no items were granted because the user isn't eligible for any
+ // promotions, this is still considered a success.
+ METHOD_DESC(GrantPromoItems() checks the list of promotional items for which the user may be eligible and grants the items (one time only).)
+ virtual bool GrantPromoItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+ // AddPromoItem() / AddPromoItems() are restricted versions of GrantPromoItems(). Instead of
+ // scanning for all eligible promotional items, the check is restricted to a single item
+ // definition or set of item definitions. This can be useful if your game has custom UI for
+ // showing a specific promo item to the user.
+ virtual bool AddPromoItem( SteamInventoryResult_t *pResultHandle, SteamItemDef_t itemDef ) = 0;
+ virtual bool AddPromoItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, uint32 unArrayLength ) = 0;
+
+ // ConsumeItem() removes items from the inventory, permanently. They cannot be recovered.
+ // Not for the faint of heart - if your game implements item removal at all, a high-friction
+ // UI confirmation process is highly recommended. Similar to GenerateItems, punArrayQuantity
+ // can be NULL or else an array of the same length as pArrayItems which describe the quantity
+ // of each item to destroy. ConsumeItem can be restricted to certain item definitions or
+ // fully blocked via the Steamworks website to minimize support/abuse issues such as the
+ // clasic "my brother borrowed my laptop and deleted all of my rare items".
+ METHOD_DESC(ConsumeItem() removes items from the inventory permanently.)
+ virtual bool ConsumeItem( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity ) = 0;
+
+ // ExchangeItems() is an atomic combination of GenerateItems and DestroyItems. It can be
+ // used to implement crafting recipes or transmutations, or items which unpack themselves
+ // into other items. Like GenerateItems, this is a flexible and dangerous API which is
+ // meant for rapid prototyping. You can configure restrictions on ExchangeItems via the
+ // Steamworks website, such as limiting it to a whitelist of input/output combinations
+ // corresponding to recipes.
+ // (Note: although GenerateItems may be hard or impossible to use securely in your game,
+ // ExchangeItems is perfectly reasonable to use once the whitelists are set accordingly.)
+ virtual bool ExchangeItems( SteamInventoryResult_t *pResultHandle,
+ ARRAY_COUNT(unArrayGenerateLength) const SteamItemDef_t *pArrayGenerate, ARRAY_COUNT(unArrayGenerateLength) const uint32 *punArrayGenerateQuantity, uint32 unArrayGenerateLength,
+ ARRAY_COUNT(unArrayDestroyLength) const SteamItemInstanceID_t *pArrayDestroy, ARRAY_COUNT(unArrayDestroyLength) const uint32 *punArrayDestroyQuantity, uint32 unArrayDestroyLength ) = 0;
+
+
+ // TransferItemQuantity() is intended for use with items which are "stackable" (can have
+ // quantity greater than one). It can be used to split a stack into two, or to transfer
+ // quantity from one stack into another stack of identical items. To split one stack into
+ // two, pass k_SteamItemInstanceIDInvalid for itemIdDest and a new item will be generated.
+ virtual bool TransferItemQuantity( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest ) = 0;
+
+
+ // TIMED DROPS AND PLAYTIME CREDIT
+ //
+
+ // Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when
+ // active gameplay begins, and at least once every two minutes afterwards. The backend
+ // performs its own time calculations, so the precise timing of the heartbeat is not
+ // critical as long as you send at least one heartbeat every two minutes. Calling the
+ // function more often than that is not harmful, it will simply have no effect. Note:
+ // players may be able to spoof this message by hacking their client, so you should not
+ // attempt to use this as a mechanism to restrict playtime credits. It is simply meant
+ // to distinguish between being in any kind of gameplay situation vs the main menu or
+ // a pre-game launcher window. (If you are stingy with handing out playtime credit, it
+ // will only encourage players to run bots or use mouse/kb event simulators.)
+ //
+ // Playtime credit accumulation can be capped on a daily or weekly basis through your
+ // Steamworks configuration.
+ //
+ METHOD_DESC(Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when active gameplay begins and at least once every two minutes afterwards.)
+ virtual void SendItemDropHeartbeat() = 0;
+
+ // Playtime credit must be consumed and turned into item drops by your game. Only item
+ // definitions which are marked as "playtime item generators" can be spawned. The call
+ // will return an empty result set if there is not enough playtime credit for a drop.
+ // Your game should call TriggerItemDrop at an appropriate time for the user to receive
+ // new items, such as between rounds or while the player is dead. Note that players who
+ // hack their clients could modify the value of "dropListDefinition", so do not use it
+ // to directly control rarity. It is primarily useful during testing and development,
+ // where you may wish to perform experiments with different types of drops.
+ METHOD_DESC(Playtime credit must be consumed and turned into item drops by your game.)
+ virtual bool TriggerItemDrop( SteamInventoryResult_t *pResultHandle, SteamItemDef_t dropListDefinition ) = 0;
+
+
+ // IN-GAME TRADING
+ //
+ // TradeItems() implements limited in-game trading of items, if you prefer not to use
+ // the overlay or an in-game web browser to perform Steam Trading through the website.
+ // You should implement a UI where both players can see and agree to a trade, and then
+ // each client should call TradeItems simultaneously (+/- 5 seconds) with matching
+ // (but reversed) parameters. The result is the same as if both players performed a
+ // Steam Trading transaction through the web. Each player will get an inventory result
+ // confirming the removal or quantity changes of the items given away, and the new
+ // item instance id numbers and quantities of the received items.
+ // (Note: new item instance IDs are generated whenever an item changes ownership.)
+ virtual bool TradeItems( SteamInventoryResult_t *pResultHandle, CSteamID steamIDTradePartner,
+ ARRAY_COUNT(nArrayGiveLength) const SteamItemInstanceID_t *pArrayGive, ARRAY_COUNT(nArrayGiveLength) const uint32 *pArrayGiveQuantity, uint32 nArrayGiveLength,
+ ARRAY_COUNT(nArrayGetLength) const SteamItemInstanceID_t *pArrayGet, ARRAY_COUNT(nArrayGetLength) const uint32 *pArrayGetQuantity, uint32 nArrayGetLength ) = 0;
+
+
+ // ITEM DEFINITIONS
+ //
+ // Item definitions are a mapping of "definition IDs" (integers between 1 and 1000000)
+ // to a set of string properties. Some of these properties are required to display items
+ // on the Steam community web site. Other properties can be defined by applications.
+ // Use of these functions is optional; there is no reason to call LoadItemDefinitions
+ // if your game hardcodes the numeric definition IDs (eg, purple face mask = 20, blue
+ // weapon mod = 55) and does not allow for adding new item types without a client patch.
+ //
+
+ // LoadItemDefinitions triggers the automatic load and refresh of item definitions.
+ // Every time new item definitions are available (eg, from the dynamic addition of new
+ // item types while players are still in-game), a SteamInventoryDefinitionUpdate_t
+ // callback will be fired.
+ METHOD_DESC(LoadItemDefinitions triggers the automatic load and refresh of item definitions.)
+ virtual bool LoadItemDefinitions() = 0;
+
+ // GetItemDefinitionIDs returns the set of all defined item definition IDs (which are
+ // defined via Steamworks configuration, and not necessarily contiguous integers).
+ // If pItemDefIDs is null, the call will return true and *punItemDefIDsArraySize will
+ // contain the total size necessary for a subsequent call. Otherwise, the call will
+ // return false if and only if there is not enough space in the output array.
+ virtual bool GetItemDefinitionIDs(
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+
+ // GetItemDefinitionProperty returns a string property from a given item definition.
+ // Note that some properties (for example, "name") may be localized and will depend
+ // on the current Steam language settings (see ISteamApps::GetCurrentGameLanguage).
+ // Property names are always composed of ASCII letters, numbers, and/or underscores.
+ // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available
+ // property names.
+ virtual bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPropertyName,
+ OUT_STRING_COUNT(punValueBufferSize) char *pchValueBuffer, uint32 *punValueBufferSize ) = 0;
+};
+
+#define STEAMINVENTORY_INTERFACE_VERSION "STEAMINVENTORY_INTERFACE_V001"
+
+
+// SteamInventoryResultReady_t callbacks are fired whenever asynchronous
+// results transition from "Pending" to "OK" or an error state. There will
+// always be exactly one callback per handle.
+struct SteamInventoryResultReady_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 0 };
+ SteamInventoryResult_t m_handle;
+ EResult m_result;
+};
+
+
+// SteamInventoryFullUpdate_t callbacks are triggered when GetAllItems
+// successfully returns a result which is newer / fresher than the last
+// known result. (It will not trigger if the inventory hasn't changed,
+// or if results from two overlapping calls are reversed in flight and
+// the earlier result is already known to be stale/out-of-date.)
+// The normal ResultReady callback will still be triggered immediately
+// afterwards; this is an additional notification for your convenience.
+struct SteamInventoryFullUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 1 };
+ SteamInventoryResult_t m_handle;
+};
+
+
+// A SteamInventoryDefinitionUpdate_t callback is triggered whenever
+// item definitions have been updated, which could be in response to
+// LoadItemDefinitions() or any other async request which required
+// a definition update in order to process results from the server.
+struct SteamInventoryDefinitionUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_137/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_137/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_137/isteammatchmaking.h b/lsteamclient/steamworks_sdk_137/isteammatchmaking.h
new file mode 100644
index 00000000..6b935084
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteammatchmaking.h
@@ -0,0 +1,751 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) = 0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ CALL_RESULT( LobbyMatchList_t )
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ CALL_RESULT( LobbyCreated_t )
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ CALL_RESULT( LobbyEnter_t )
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, OUT_STRUCT() CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, OUT_STRUCT() CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+ CALL_BACK( LobbyChatUpdate_t );
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_137/isteammusic.h b/lsteamclient/steamworks_sdk_137/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_137/isteammusicremote.h b/lsteamclient/steamworks_sdk_137/isteammusicremote.h
new file mode 100644
index 00000000..5893ef4b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteammusicremote.h
@@ -0,0 +1,129 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSICREMOTE_H
+#define ISTEAMMUSICREMOTE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteammusic.h"
+
+#define k_SteamMusicNameMaxLength 255
+#define k_SteamMusicPNGMaxLength 65535
+
+
+class ISteamMusicRemote
+{
+public:
+ // Service Definition
+ virtual bool RegisterSteamMusicRemote( const char *pchName ) = 0;
+ virtual bool DeregisterSteamMusicRemote() = 0;
+ virtual bool BIsCurrentMusicRemote() = 0;
+ virtual bool BActivationSuccess( bool bValue ) = 0;
+
+ virtual bool SetDisplayName( const char *pchDisplayName ) = 0;
+ virtual bool SetPNGIcon_64x64( void *pvBuffer, uint32 cbBufferLength ) = 0;
+
+ // Abilities for the user interface
+ virtual bool EnablePlayPrevious(bool bValue) = 0;
+ virtual bool EnablePlayNext( bool bValue ) = 0;
+ virtual bool EnableShuffled( bool bValue ) = 0;
+ virtual bool EnableLooped( bool bValue ) = 0;
+ virtual bool EnableQueue( bool bValue ) = 0;
+ virtual bool EnablePlaylists( bool bValue ) = 0;
+
+ // Status
+ virtual bool UpdatePlaybackStatus( AudioPlayback_Status nStatus ) = 0;
+ virtual bool UpdateShuffled( bool bValue ) = 0;
+ virtual bool UpdateLooped( bool bValue ) = 0;
+ virtual bool UpdateVolume( float flValue ) = 0; // volume is between 0.0 and 1.0
+
+ // Current Entry
+ virtual bool CurrentEntryWillChange() = 0;
+ virtual bool CurrentEntryIsAvailable( bool bAvailable ) = 0;
+ virtual bool UpdateCurrentEntryText( const char *pchText ) = 0;
+ virtual bool UpdateCurrentEntryElapsedSeconds( int nValue ) = 0;
+ virtual bool UpdateCurrentEntryCoverArt( void *pvBuffer, uint32 cbBufferLength ) = 0;
+ virtual bool CurrentEntryDidChange() = 0;
+
+ // Queue
+ virtual bool QueueWillChange() = 0;
+ virtual bool ResetQueueEntries() = 0;
+ virtual bool SetQueueEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentQueueEntry( int nID ) = 0;
+ virtual bool QueueDidChange() = 0;
+
+ // Playlist
+ virtual bool PlaylistWillChange() = 0;
+ virtual bool ResetPlaylistEntries() = 0;
+ virtual bool SetPlaylistEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentPlaylistEntry( int nID ) = 0;
+ virtual bool PlaylistDidChange() = 0;
+};
+
+#define STEAMMUSICREMOTE_INTERFACE_VERSION "STEAMMUSICREMOTE_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillActivate_t, k_iSteamMusicRemoteCallbacks + 1)
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillDeactivate_t, k_iSteamMusicRemoteCallbacks + 2 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteToFront_t, k_iSteamMusicRemoteCallbacks + 3 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWillQuit_t, k_iSteamMusicRemoteCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlay_t, k_iSteamMusicRemoteCallbacks + 5 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPause_t, k_iSteamMusicRemoteCallbacks + 6 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayPrevious_t, k_iSteamMusicRemoteCallbacks + 7 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayNext_t, k_iSteamMusicRemoteCallbacks + 8 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsShuffled_t, k_iSteamMusicRemoteCallbacks + 9 )
+ CALLBACK_MEMBER( 0, bool, m_bShuffled )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsLooped_t, k_iSteamMusicRemoteCallbacks + 10 )
+ CALLBACK_MEMBER(0, bool, m_bLooped )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsVolume_t, k_iSteamMusicCallbacks + 11 )
+ CALLBACK_MEMBER(0, float, m_flNewVolume)
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsQueueEntry_t, k_iSteamMusicCallbacks + 12 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsPlaylistEntry_t, k_iSteamMusicCallbacks + 13 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayingRepeatStatus_t, k_iSteamMusicRemoteCallbacks + 14 )
+ CALLBACK_MEMBER(0, int, m_nPlayingRepeatStatus )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+
+#endif // #define ISTEAMMUSICREMOTE_H
diff --git a/lsteamclient/steamworks_sdk_137/isteamnetworking.h b/lsteamclient/steamworks_sdk_137/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_137/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_137/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_137/isteamremotestorage.h b/lsteamclient/steamworks_sdk_137/isteamremotestorage.h
new file mode 100644
index 00000000..822df05d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamremotestorage.h
@@ -0,0 +1,696 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+// Ways to handle a synchronization conflict
+enum EResolveConflict
+{
+ k_EResolveConflictKeepClient = 1, // The local version of each file will be used to overwrite the server version
+ k_EResolveConflictKeepServer = 2, // The server version of each file will be used to overwrite the local version
+};
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0, // normal Workshop item that can be subscribed to
+ k_EWorkshopFileTypeMicrotransaction = 1, // Workshop item that is meant to be voted on for the purpose of selling in-game
+ k_EWorkshopFileTypeCollection = 2, // a collection of Workshop or Greenlight items
+ k_EWorkshopFileTypeArt = 3, // artwork
+ k_EWorkshopFileTypeVideo = 4, // external video
+ k_EWorkshopFileTypeScreenshot = 5, // screenshot
+ k_EWorkshopFileTypeGame = 6, // Greenlight game entry
+ k_EWorkshopFileTypeSoftware = 7, // Greenlight software entry
+ k_EWorkshopFileTypeConcept = 8, // Greenlight concept
+ k_EWorkshopFileTypeWebGuide = 9, // Steam web guide
+ k_EWorkshopFileTypeIntegratedGuide = 10, // application integrated guide
+ k_EWorkshopFileTypeMerch = 11, // Workshop merchandise meant to be voted on for the purpose of being sold
+ k_EWorkshopFileTypeControllerBinding = 12, // Steam Controller bindings
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13, // internal
+ k_EWorkshopFileTypeSteamVideo = 14, // Steam video
+ k_EWorkshopFileTypeGameManagedItem = 15, // managed completely by the game, not the user, and not shown on the web
+
+ // Update k_EWorkshopFileTypeMax if you add values.
+ k_EWorkshopFileTypeMax = 16
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+ k_EWorkshopVoteLater = 3,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+
+ CALL_RESULT( RemoteStorageFileWriteAsyncComplete_t )
+ virtual SteamAPICall_t FileWriteAsync( const char *pchFile, const void *pvData, uint32 cubData ) = 0;
+
+ CALL_RESULT( RemoteStorageFileReadAsyncComplete_t )
+ virtual SteamAPICall_t FileReadAsync( const char *pchFile, uint32 nOffset, uint32 cubToRead ) = 0;
+ virtual bool FileReadAsyncComplete( SteamAPICall_t hReadCall, void *pvBuffer, uint32 cubToRead ) = 0;
+
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ CALL_RESULT( RemoteStorageFileShareResult_t )
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ CALL_RESULT( RemoteStorageDownloadUGCResult_t )
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, OUT_STRING() char **ppchName, int32 *pnFileSizeInBytes, OUT_STRUCT() CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ CALL_RESULT( RemoteStoragePublishFileProgress_t )
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ CALL_RESULT( RemoteStorageUpdatePublishedFileResult_t )
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ CALL_RESULT( RemoteStorageGetPublishedFileDetailsResult_t )
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ CALL_RESULT( RemoteStorageDeletePublishedFileResult_t )
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ CALL_RESULT( RemoteStorageEnumerateUserPublishedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ CALL_RESULT( RemoteStorageSubscribePublishedFileResult_t )
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageEnumerateUserSubscribedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ CALL_RESULT( RemoteStorageUnsubscribePublishedFileResult_t )
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ CALL_RESULT( RemoteStorageGetPublishedItemVoteDetailsResult_t )
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageUpdateUserPublishedItemVoteResult_t )
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ CALL_RESULT( RemoteStorageGetPublishedItemVoteDetailsResult_t )
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageEnumerateUserPublishedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ CALL_RESULT( RemoteStoragePublishFileProgress_t )
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ CALL_RESULT( RemoteStorageEnumeratePublishedFilesByUserActionResult_t )
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ CALL_RESULT( RemoteStorageEnumeratePublishedFilesByUserActionResult_t )
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ CALL_RESULT( RemoteStorageEnumerateWorkshopFilesResult_t )
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ CALL_RESULT( RemoteStorageDownloadUGCResult_t )
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION013"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after a conflict resolution attempt.
+//-----------------------------------------------------------------------------
+struct RemoteStorageConflictResolution_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 6 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ uint64 m_ulUnused; // not used anymore
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileWriteAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileWriteAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 31 };
+ EResult m_eResult; // result
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileReadAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileReadAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 32 };
+ SteamAPICall_t m_hFileReadAsync; // call handle of the async read which was made
+ EResult m_eResult; // result
+ uint32 m_nOffset; // offset in the file this read was at
+ uint32 m_cubRead; // amount read - will the <= the amount requested
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_137/isteamscreenshots.h b/lsteamclient/steamworks_sdk_137/isteamscreenshots.h
new file mode 100644
index 00000000..ce8fb06e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamscreenshots.h
@@ -0,0 +1,96 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMSCREENSHOTS_H
diff --git a/lsteamclient/steamworks_sdk_137/isteamugc.h b/lsteamclient/steamworks_sdk_137/isteamugc.h
new file mode 100644
index 00000000..16c5e202
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamugc.h
@@ -0,0 +1,416 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+ k_EUGCMatchingUGCType_GameManagedItems = 12, // game managed items (not managed by users)
+ k_EUGCMatchingUGCType_All = ~0, // return everything
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+ k_EUGCQuery_RankedByTotalUniqueSubscriptions = 12,
+};
+
+enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0, // The item update handle was invalid, job might be finished, listen too SubmitItemUpdateResult_t
+ k_EItemUpdateStatusPreparingConfig = 1, // The item update is processing configuration data
+ k_EItemUpdateStatusPreparingContent = 2, // The item update is reading and processing content files
+ k_EItemUpdateStatusUploadingContent = 3, // The item update is uploading content changes to Steam
+ k_EItemUpdateStatusUploadingPreviewFile = 4, // The item update is uploading new preview file image
+ k_EItemUpdateStatusCommittingChanges = 5 // The item update is committing all changes
+};
+
+enum EItemState
+{
+ k_EItemStateNone = 0, // item not tracked on client
+ k_EItemStateSubscribed = 1, // current user is subscribed to this item. Not just cached.
+ k_EItemStateLegacyItem = 2, // item was created with ISteamRemoteStorage
+ k_EItemStateInstalled = 4, // item is installed and usable (but maybe out of date)
+ k_EItemStateNeedsUpdate = 8, // items needs an update. Either because it's not installed yet or creator updated content
+ k_EItemStateDownloading = 16, // item update is currently downloading
+ k_EItemStateDownloadPending = 32, // DownloadItem() was called for this item, content isn't available until DownloadItemResult_t is fired
+};
+
+enum EItemStatistic
+{
+ k_EItemStatistic_NumSubscriptions = 0,
+ k_EItemStatistic_NumFavorites = 1,
+ k_EItemStatistic_NumFollowers = 2,
+ k_EItemStatistic_NumUniqueSubscriptions = 3,
+ k_EItemStatistic_NumUniqueFavorites = 4,
+ k_EItemStatistic_NumUniqueFollowers = 5,
+ k_EItemStatistic_NumUniqueWebsiteViews = 6,
+ k_EItemStatistic_ReportScore = 7,
+};
+
+enum EItemPreviewType
+{
+ k_EItemPreviewType_Image = 0, // standard image file expected (e.g. jpg, png, gif, etc.)
+ k_EItemPreviewType_YouTubeVideo = 1, // video id is stored
+ k_EItemPreviewType_Sketchfab = 2, // model id is stored
+ k_EItemPreviewType_EnvironmentMap_HorizontalCross = 3, // standard image file expected - cube map in the layout
+ // +---+---+-------+
+ // | |Up | |
+ // +---+---+---+---+
+ // | L | F | R | B |
+ // +---+---+---+---+
+ // | |Dn | |
+ // +---+---+---+---+
+ k_EItemPreviewType_EnvironmentMap_LatLong = 4, // standard image file expected
+ k_EItemPreviewType_ReservedMax = 255, // you can specify your own types above this value
+};
+
+const uint32 kNumUGCResultsPerPage = 50;
+const uint32 k_cchDeveloperMetadataMax = 5000;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+ // collection details
+ uint32 m_unNumChildren;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for the details of the given published file ids (the RequestUGCDetails call is deprecated and replaced with this)
+ virtual UGCQueryHandle_t CreateQueryUGCDetailsRequest( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+
+ // Send the query to Steam
+ CALL_RESULT( SteamUGCQueryCompleted_t )
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+ virtual bool GetQueryUGCPreviewURL( UGCQueryHandle_t handle, uint32 index, OUT_STRING_COUNT(cchURLSize) char *pchURL, uint32 cchURLSize ) = 0;
+ virtual bool GetQueryUGCMetadata( UGCQueryHandle_t handle, uint32 index, OUT_STRING_COUNT(cchMetadatasize) char *pchMetadata, uint32 cchMetadatasize ) = 0;
+ virtual bool GetQueryUGCChildren( UGCQueryHandle_t handle, uint32 index, PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0;
+ virtual bool GetQueryUGCStatistic( UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 *pStatValue ) = 0;
+ virtual uint32 GetQueryUGCNumAdditionalPreviews( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCAdditionalPreview( UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, OUT_STRING_COUNT(cchURLSize) char *pchURLOrVideoID, uint32 cchURLSize, OUT_STRING_COUNT(cchURLSize) char *pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType *pPreviewType ) = 0;
+ virtual uint32 GetQueryUGCNumKeyValueTags( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCKeyValueTag( UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, OUT_STRING_COUNT(cchKeySize) char *pchKey, uint32 cchKeySize, OUT_STRING_COUNT(cchValueSize) char *pchValue, uint32 cchValueSize ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnKeyValueTags( UGCQueryHandle_t handle, bool bReturnKeyValueTags ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnMetadata( UGCQueryHandle_t handle, bool bReturnMetadata ) = 0;
+ virtual bool SetReturnChildren( UGCQueryHandle_t handle, bool bReturnChildren ) = 0;
+ virtual bool SetReturnAdditionalPreviews( UGCQueryHandle_t handle, bool bReturnAdditionalPreviews ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetLanguage( UGCQueryHandle_t handle, const char *pchLanguage ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+ virtual bool AddRequiredKeyValueTag( UGCQueryHandle_t handle, const char *pKey, const char *pValue ) = 0;
+
+ // DEPRECATED - Use CreateQueryUGCDetailsRequest call above instead!
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+ // Steam Workshop Creator API
+ CALL_RESULT( CreateItemResult_t )
+ virtual SteamAPICall_t CreateItem( AppId_t nConsumerAppId, EWorkshopFileType eFileType ) = 0; // create new item for this app with no content attached yet
+
+ virtual UGCUpdateHandle_t StartItemUpdate( AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID ) = 0; // start an UGC item update. Set changed properties before commiting update with CommitItemUpdate()
+
+ virtual bool SetItemTitle( UGCUpdateHandle_t handle, const char *pchTitle ) = 0; // change the title of an UGC item
+ virtual bool SetItemDescription( UGCUpdateHandle_t handle, const char *pchDescription ) = 0; // change the description of an UGC item
+ virtual bool SetItemUpdateLanguage( UGCUpdateHandle_t handle, const char *pchLanguage ) = 0; // specify the language of the title or description that will be set
+ virtual bool SetItemMetadata( UGCUpdateHandle_t handle, const char *pchMetaData ) = 0; // change the metadata of an UGC item (max = k_cchDeveloperMetadataMax)
+ virtual bool SetItemVisibility( UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item
+ virtual bool SetItemTags( UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item
+ virtual bool SetItemContent( UGCUpdateHandle_t handle, const char *pszContentFolder ) = 0; // update item content from this local folder
+ virtual bool SetItemPreview( UGCUpdateHandle_t handle, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file, which must be under 1MB in size
+ virtual bool RemoveItemKeyValueTags( UGCUpdateHandle_t handle, const char *pchKey ) = 0; // remove any existing key-value tags with the specified key
+ virtual bool AddItemKeyValueTag( UGCUpdateHandle_t handle, const char *pchKey, const char *pchValue ) = 0; // add new key-value tags for the item. Note that there can be multiple values for a tag.
+ virtual bool AddItemPreviewFile( UGCUpdateHandle_t handle, const char *pszPreviewFile, EItemPreviewType type ) = 0; // add preview file for this item. pszPreviewFile points to local file, which must be under 1MB in size
+ virtual bool AddItemPreviewVideo( UGCUpdateHandle_t handle, const char *pszVideoID ) = 0; // add preview video for this item
+ virtual bool UpdateItemPreviewFile( UGCUpdateHandle_t handle, uint32 index, const char *pszPreviewFile ) = 0; // updates an existing preview file for this item. pszPreviewFile points to local file, which must be under 1MB in size
+ virtual bool UpdateItemPreviewVideo( UGCUpdateHandle_t handle, uint32 index, const char *pszVideoID ) = 0; // updates an existing preview video for this item
+ virtual bool RemoveItemPreview( UGCUpdateHandle_t handle, uint32 index ) = 0; // remove a preview by index starting at 0 (previews are sorted)
+
+ CALL_RESULT( SubmitItemUpdateResult_t )
+ virtual SteamAPICall_t SubmitItemUpdate( UGCUpdateHandle_t handle, const char *pchChangeNote ) = 0; // commit update process started with StartItemUpdate()
+ virtual EItemUpdateStatus GetItemUpdateProgress( UGCUpdateHandle_t handle, uint64 *punBytesProcessed, uint64* punBytesTotal ) = 0;
+
+ // Steam Workshop Consumer API
+ CALL_RESULT( SetUserItemVoteResult_t )
+ virtual SteamAPICall_t SetUserItemVote( PublishedFileId_t nPublishedFileID, bool bVoteUp ) = 0;
+ CALL_RESULT( GetUserItemVoteResult_t )
+ virtual SteamAPICall_t GetUserItemVote( PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( UserFavoriteItemsListChanged_t )
+ virtual SteamAPICall_t AddItemToFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( UserFavoriteItemsListChanged_t )
+ virtual SteamAPICall_t RemoveItemFromFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( RemoteStorageSubscribePublishedFileResult_t )
+ virtual SteamAPICall_t SubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // subscribe to this item, will be installed ASAP
+ CALL_RESULT( RemoteStorageUnsubscribePublishedFileResult_t )
+ virtual SteamAPICall_t UnsubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // unsubscribe from this item, will be uninstalled after game quits
+ virtual uint32 GetNumSubscribedItems() = 0; // number of subscribed items
+ virtual uint32 GetSubscribedItems( PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; // all subscribed item PublishFileIDs
+
+ // get EItemState flags about item on this client
+ virtual uint32 GetItemState( PublishedFileId_t nPublishedFileID ) = 0;
+
+ // get info about currently installed content on disc for items that have k_EItemStateInstalled set
+ // if k_EItemStateLegacyItem is set, pchFolder contains the path to the legacy file itself (not a folder)
+ virtual bool GetItemInstallInfo( PublishedFileId_t nPublishedFileID, uint64 *punSizeOnDisk, OUT_STRING_COUNT( cchFolderSize ) char *pchFolder, uint32 cchFolderSize, uint32 *punTimeStamp ) = 0;
+
+ // get info about pending update for items that have k_EItemStateNeedsUpdate set. punBytesTotal will be valid after download started once
+ virtual bool GetItemDownloadInfo( PublishedFileId_t nPublishedFileID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // download new or update already installed item. If function returns true, wait for DownloadItemResult_t. If the item is already installed,
+ // then files on disk should not be used until callback received. If item is not subscribed to, it will be cached for some time.
+ // If bHighPriority is set, any other item download will be suspended and this item downloaded ASAP.
+ virtual bool DownloadItem( PublishedFileId_t nPublishedFileID, bool bHighPriority ) = 0;
+
+ // game servers can set a specific workshop folder before issuing any UGC commands.
+ // This is helpful if you want to support multiple game servers running out of the same install folder
+ virtual bool BInitWorkshopForGameServer( DepotId_t unWorkshopDepotID, const char *pszFolder ) = 0;
+
+ // SuspendDownloads( true ) will suspend all workshop downloads until SuspendDownloads( false ) is called or the game ends
+ virtual void SuspendDownloads( bool bSuspend ) = 0;
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION008"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::CreateItem()
+//-----------------------------------------------------------------------------
+struct CreateItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 3 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId; // new item got this UGC PublishFileID
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::SubmitItemUpdate()
+//-----------------------------------------------------------------------------
+struct SubmitItemUpdateResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 4 };
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a Workshop item has been installed or updated
+//-----------------------------------------------------------------------------
+struct ItemInstalled_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 5 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of DownloadItem(), existing item files can be accessed again
+//-----------------------------------------------------------------------------
+struct DownloadItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 6 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: result of AddItemToFavorites() or RemoveItemFromFavorites()
+//-----------------------------------------------------------------------------
+struct UserFavoriteItemsListChanged_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 7 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bWasAddRequest;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SetUserItemVote()
+//-----------------------------------------------------------------------------
+struct SetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 8 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVoteUp;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserItemVote()
+//-----------------------------------------------------------------------------
+struct GetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 9 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVotedUp;
+ bool m_bVotedDown;
+ bool m_bVoteSkipped;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_137/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_137/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_137/isteamuser.h b/lsteamclient/steamworks_sdk_137/isteamuser.h
new file mode 100644
index 00000000..c73c0fe2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamuser.h
@@ -0,0 +1,349 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ CALL_RESULT( EncryptedAppTicketResponse_t )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+ // Requests a URL which authenticates an in-game browser for store check-out,
+ // and then redirects to the specified URL. As long as the in-game browser
+ // accepts and handles session cookies, Steam microtransaction checkout pages
+ // will automatically recognize the user instead of presenting a login page.
+ // The result of this API call will be a StoreAuthURLResponse_t callback.
+ // NOTE: The URL has a very short lifetime to prevent history-snooping attacks,
+ // so you should only call this API when you are about to launch the browser,
+ // or else immediately navigate to the result URL using a hidden browser window.
+ // NOTE 2: The resulting authorization cookie has an expiration time of one day,
+ // so it would be a good idea to request and visit a new auth URL every 12 hours.
+ CALL_RESULT( StoreAuthURLResponse_t )
+ virtual SteamAPICall_t RequestStoreAuthURL( const char *pchRedirectURL ) = 0;
+
+ // gets whether the users phone number is verified
+ virtual bool BIsPhoneVerified() = 0;
+
+ // gets whether the user has two factor enabled on their account
+ virtual bool BIsTwoFactorEnabled() = 0;
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser019"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+ bool m_bStillRetrying;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Signaled whenever licenses change
+//-----------------------------------------------------------------------------
+struct LicensesUpdated_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 25 };
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to ISteamUser::RequestStoreAuthURL
+//-----------------------------------------------------------------------------
+struct StoreAuthURLResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 65 };
+ char m_szURL[512];
+};
+
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_137/isteamuserstats.h b/lsteamclient/steamworks_sdk_137/isteamuserstats.h
new file mode 100644
index 00000000..8bb42697
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamuserstats.h
@@ -0,0 +1,476 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ CALL_BACK( UserStatsReceived_t )
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ CALL_RESULT( UserStatsReceived_t )
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ CALL_RESULT(LeaderboardFindResult_t)
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ CALL_RESULT( LeaderboardFindResult_t )
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ CALL_RESULT( LeaderboardScoresDownloaded_t )
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ METHOD_DESC(Downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers)
+ CALL_RESULT( LeaderboardScoresDownloaded_t )
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard,
+ ARRAY_COUNT_D(cUsers, Array of users to retrieve) CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ CALL_RESULT( LeaderboardScoreUploaded_t )
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ CALL_RESULT( LeaderboardUGCSet_t )
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ CALL_RESULT( NumberOfCurrentPlayers_t )
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ CALL_RESULT( GlobalAchievementPercentagesReady_t )
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ CALL_RESULT( GlobalStatsReceived_t )
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_137/isteamutils.h b/lsteamclient/steamworks_sdk_137/isteamutils.h
new file mode 100644
index 00000000..b2691e13
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamutils.h
@@ -0,0 +1,254 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // Deprecated. Applications should use SteamAPI_RunCallbacks() instead. Game servers do not need to call this function.
+ STEAM_PRIVATE_API( virtual void RunFrame() = 0; )
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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 an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ CALL_RESULT( CheckFileSignature_t )
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+
+ // Sets the inset of the overlay notification from the corner specified by SetOverlayNotificationPosition.
+ virtual void SetOverlayNotificationInset( int nHorizontalInset, int nVerticalInset ) = 0;
+
+ // returns true if Steam & the Steam Overlay are running in Big Picture mode
+ // Games much be launched through the Steam client to enable the Big Picture overlay. During development,
+ // a game can be added as a non-steam game to the developers library to test this feature
+ virtual bool IsSteamInBigPictureMode() = 0;
+
+ // ask SteamUI to create and render its OpenVR dashboard
+ virtual void StartVRDashboard() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils008"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+ int m_iCallback;
+ uint32 m_cubParam;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_137/isteamvideo.h b/lsteamclient/steamworks_sdk_137/isteamvideo.h
new file mode 100644
index 00000000..4431b4a1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/isteamvideo.h
@@ -0,0 +1,60 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Video
+//
+//=============================================================================
+
+#ifndef ISTEAMVIDEO_H
+#define ISTEAMVIDEO_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Video API
+//-----------------------------------------------------------------------------
+class ISteamVideo
+{
+public:
+
+ // Get a URL suitable for streaming the given Video app ID's video
+ virtual void GetVideoURL( AppId_t unVideoAppID ) = 0;
+
+ // returns true if user is uploading a live broadcast
+ virtual bool IsBroadcasting( int *pnNumViewers ) = 0;
+};
+
+#define STEAMVIDEO_INTERFACE_VERSION "STEAMVIDEO_INTERFACE_V001"
+
+DEFINE_CALLBACK( BroadcastUploadStart_t, k_iClientVideoCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( BroadcastUploadStop_t, k_iClientVideoCallbacks + 5 )
+ CALLBACK_MEMBER( 0, EBroadcastUploadResult, m_eResult )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( GetVideoURLResult_t, k_iClientVideoCallbacks + 11 )
+ CALLBACK_MEMBER( 0, EResult, m_eResult )
+ CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID )
+ CALLBACK_MEMBER( 2, char, m_rgchURL[256] )
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMVIDEO_H
diff --git a/lsteamclient/steamworks_sdk_137/matchmakingtypes.h b/lsteamclient/steamworks_sdk_137/matchmakingtypes.h
new file mode 100644
index 00000000..fcb61664
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/matchmakingtypes.h
@@ -0,0 +1,251 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ servernetadr_t() : m_usConnectionPort( 0 ), m_usQueryPort( 0 ), m_unIP( 0 ) {}
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_137/steam_api.h b/lsteamclient/steamworks_sdk_137/steam_api.h
new file mode 100644
index 00000000..908a7a55
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/steam_api.h
@@ -0,0 +1,393 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteammusicremote.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+#include "isteamhtmlsurface.h"
+#include "isteaminventory.h"
+#include "isteamvideo.h"
+
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+
+// SteamAPI_Init must be called before using any other API functions. If it fails, an
+// error message will be output to the debugger (or stderr) with further information.
+S_API bool S_CALLTYPE SteamAPI_Init();
+
+// SteamAPI_Shutdown should be called during process shutdown if possible.
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// SteamAPI_RestartAppIfNecessary ensures that your executable was launched through Steam.
+//
+// Returns true if the current process should terminate. Steam is now re-launching your application.
+//
+// Returns false if no action needs to be taken. This means that your executable was started through
+// the Steam client, or a steam_appid.txt file is present in your game's directory (for development).
+// Your current process should continue if false is returned.
+//
+// NOTE: If you use the Steam DRM wrapper on your primary executable file, this check is unnecessary
+// since the DRM wrapper will ensure that your application was launched properly through Steam.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// Most Steam API functions allocate some amount of thread-local memory for parameter storage.
+// SteamAPI_ReleaseCurrentThreadMemory() will free API memory associated with the calling thread.
+// This function is also called automatically by SteamAPI_RunCallbacks(), so a single-threaded
+// program never needs to explicitly call this function.
+S_API void S_CALLTYPE SteamAPI_ReleaseCurrentThreadMemory();
+
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+
+// If your application contains modules or libraries which could be built against different SDK
+// versions, then you should define VERSION_SAFE_STEAM_API_INTERFACES to enforce that you cannot
+// use the un-versioned global accessors. Instead, always create and use CSteamAPIContext objects
+// to retrieve interface pointers which match the Steamworks SDK headers which match your build.
+#if !defined( VERSION_SAFE_STEAM_API_INTERFACES ) && !defined( STEAM_API_EXPORTS )
+inline ISteamClient *SteamClient();
+inline ISteamUser *SteamUser();
+inline ISteamFriends *SteamFriends();
+inline ISteamUtils *SteamUtils();
+inline ISteamMatchmaking *SteamMatchmaking();
+inline ISteamUserStats *SteamUserStats();
+inline ISteamApps *SteamApps();
+inline ISteamNetworking *SteamNetworking();
+inline ISteamMatchmakingServers *SteamMatchmakingServers();
+inline ISteamRemoteStorage *SteamRemoteStorage();
+inline ISteamScreenshots *SteamScreenshots();
+inline ISteamHTTP *SteamHTTP();
+inline ISteamUnifiedMessages *SteamUnifiedMessages();
+inline ISteamController *SteamController();
+inline ISteamUGC *SteamUGC();
+inline ISteamAppList *SteamAppList();
+inline ISteamMusic *SteamMusic();
+inline ISteamMusicRemote *SteamMusicRemote();
+inline ISteamHTMLSurface *SteamHTMLSurface();
+inline ISteamInventory *SteamInventory();
+inline ISteamVideo *SteamVideo();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+// Every compiled module will have its own inlined definitions of CSteamAPIContext::Init.
+// Do NOT share CSteamAPIContext pointers across modules unless you are sure that they will
+// all be compiled against the same SDK!
+class CSteamAPIContext
+{
+public:
+ CSteamAPIContext() { Clear(); }
+ void Clear();
+
+ bool Init();
+
+ ISteamClient* SteamClient() const { return m_pSteamClient; }
+ ISteamUser* SteamUser() const { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() const { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() const { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() const { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() const { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() const { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() const { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() const { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() const { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() const { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() const { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() const { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() const { return m_pController; }
+ ISteamUGC* SteamUGC() const { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() const { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() const { return m_pSteamMusic; }
+ ISteamMusicRemote* SteamMusicRemote() const { return m_pSteamMusicRemote; }
+ ISteamHTMLSurface* SteamHTMLSurface() const { return m_pSteamHTMLSurface; }
+ ISteamInventory* SteamInventory() const { return m_pSteamInventory; }
+ ISteamVideo* SteamVideo() const { return m_pSteamVideo; }
+
+private:
+ ISteamClient *m_pSteamClient;
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages *m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+ ISteamMusicRemote *m_pSteamMusicRemote;
+ ISteamHTMLSurface *m_pSteamHTMLSurface;
+ ISteamInventory *m_pSteamInventory;
+ ISteamVideo *m_pSteamVideo;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback and call-result helpers
+//
+// The following macros and classes are used to register your application for
+// callbacks and call-results, which are delivered in a predictable manner.
+//
+// STEAM_CALLBACK macros are meant for use inside of a C++ class definition.
+// They map a Steam notification callback directly to a class member function
+// which is automatically prototyped as "void func( callback_type *pParam )".
+//
+// CCallResult is used with specific Steam APIs that return "result handles".
+// The handle can be passed to a CCallResult object's Set function, along with
+// an object pointer and member-function pointer. The member function will
+// be executed once the results of the Steam API call are available.
+//
+// CCallback and CCallbackManual classes can be used instead of STEAM_CALLBACK
+// macros if you require finer control over registration and unregistration.
+//
+// Callbacks and call-results are queued automatically and are only
+// delivered/executed when your application calls SteamAPI_RunCallbacks().
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// SteamAPI_RunCallbacks is safe to call from multiple threads simultaneously,
+// but if you choose to do this, callback code could be executed on any thread.
+// One alternative is to call SteamAPI_RunCallbacks from the main thread only,
+// and call SteamAPI_ReleaseCurrentThreadMemory regularly on other threads.
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+// Declares a callback member function plus a helper member variable which
+// registers the callback on object creation and unregisters on destruction.
+// The optional fourth 'var' param exists only for backwards-compatibility
+// and can be ignored.
+#define STEAM_CALLBACK( thisclass, func, .../*callback_type, [deprecated] var*/ ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, 4, 3 ), ( /**/, thisclass, func, __VA_ARGS__ ) )
+
+// Declares a callback function and a named CCallbackManual variable which
+// has Register and Unregister functions instead of automatic registration.
+#define STEAM_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type > var; void func( callback_type *pParam )
+
+
+// Internal functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// Internal functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks and call results - internal implementation detail
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+
+private:
+ CCallbackBase( const CCallbackBase& );
+ CCallbackBase& operator=( const CCallbackBase& );
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: templated base for callbacks - internal implementation detail
+//-----------------------------------------------------------------------------
+template< int sizeof_P >
+class CCallbackImpl : protected CCallbackBase
+{
+public:
+ ~CCallbackImpl() { if ( m_nCallbackFlags & k_ECallbackFlagsRegistered ) SteamAPI_UnregisterCallback( this ); }
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+
+protected:
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool /*bIOFailure*/, SteamAPICall_t /*hSteamAPICall*/ ) { Run( pvParam ); }
+ virtual int GetCallbackSizeBytes() { return sizeof_P; }
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult();
+ ~CCallResult();
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func );
+ bool IsActive() const;
+ void Cancel();
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam );
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall );
+ virtual int GetCallbackSizeBytes() { return sizeof( P ); }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct,
+// bGameserver = listen for gameserver callbacks instead of client callbacks
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameserver = false >
+class CCallback : public CCallbackImpl< sizeof( P ) >
+{
+public:
+ typedef void (T::*func_t)(P*);
+
+ // NOTE: If you can't provide the correct parameters at construction time, you should
+ // use the CCallbackManual callback object (STEAM_CALLBACK_MANUAL macro) instead.
+ CCallback( T *pObj, func_t func );
+
+ void Register( T *pObj, func_t func );
+ void Unregister();
+
+protected:
+ virtual void Run( void *pvParam );
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: subclass of CCallback which allows default-construction in
+// an unregistered state; you must call Register manually
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer = false >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+
+ // Inherits public Register and Unregister functions from base class
+};
+
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// SteamAPI_IsSteamRunning() returns true if Steam is currently running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Pumps out all the steam messages, calling registered callbacks.
+// NOT THREADSAFE - do not call from multiple threads simultaneously.
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name.
+// DEPRECATED - implementation is Windows only, and the path returned is a UTF-8 string which must be converted to UTF-16 for use with Win32 APIs
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+
+#if defined( VERSION_SAFE_STEAM_API_INTERFACES )
+// backwards compat with older SDKs
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#endif
+
+#include "steam_api_internal.h"
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_137/steam_api_flat.h b/lsteamclient/steamworks_sdk_137/steam_api_flat.h
new file mode 100644
index 00000000..f983e919
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/steam_api_flat.h
@@ -0,0 +1,788 @@
+//====== Copyright (c) 1996-2014, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Header for flatted SteamAPI. Use this for binding to other languages.
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+#ifndef STEAMAPIFLAT_H
+#define STEAMAPIFLAT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <stdint.h>
+
+
+typedef unsigned char uint8;
+typedef unsigned char uint8;
+typedef signed char int8;
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+typedef int64 lint64;
+typedef uint64 ulint64;
+typedef uint8 Salt_t[8];
+typedef uint64 GID_t;
+typedef uint64 JobID_t;
+typedef GID_t TxnID_t;
+typedef uint32 PackageId_t;
+typedef uint32 BundleId_t;
+typedef uint32 AppId_t;
+typedef uint64 AssetClassId_t;
+typedef uint32 PhysicalItemId_t;
+typedef uint32 DepotId_t;
+typedef uint32 RTime32;
+typedef uint32 CellID_t;
+typedef uint64 SteamAPICall_t;
+typedef uint32 AccountID_t;
+typedef uint32 PartnerId_t;
+typedef uint64 ManifestId_t;
+typedef uint32 HAuthTicket;
+typedef void * BREAKPAD_HANDLE;
+typedef char compile_time_assert_type[1];
+typedef int32 HSteamPipe;
+typedef int32 HSteamUser;
+typedef int16 FriendsGroupID_t;
+typedef void * HServerListRequest;
+typedef int HServerQuery;
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+typedef uint64 UGCFileWriteStreamHandle_t;
+typedef char compile_time_assert_type[1];
+typedef uint64 SteamLeaderboard_t;
+typedef uint64 SteamLeaderboardEntries_t;
+typedef uint32 SNetSocket_t;
+typedef uint32 SNetListenSocket_t;
+typedef uint32 ScreenshotHandle;
+typedef uint32 HTTPRequestHandle;
+typedef uint32 HTTPCookieContainerHandle;
+typedef uint64 ClientUnifiedMessageHandle;
+typedef uint64 ControllerHandle_t;
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+typedef uint32 HHTMLBrowser;
+typedef uint64 SteamItemInstanceID_t;
+typedef int32 SteamItemDef_t;
+typedef int32 SteamInventoryResult_t;
+// OpenVR Constants
+int const_k_iSteamUserCallbacks = 100;
+int const_k_iSteamGameServerCallbacks = 200;
+int const_k_iSteamFriendsCallbacks = 300;
+int const_k_iSteamBillingCallbacks = 400;
+int const_k_iSteamMatchmakingCallbacks = 500;
+int const_k_iSteamContentServerCallbacks = 600;
+int const_k_iSteamUtilsCallbacks = 700;
+int const_k_iClientFriendsCallbacks = 800;
+int const_k_iClientUserCallbacks = 900;
+int const_k_iSteamAppsCallbacks = 1000;
+int const_k_iSteamUserStatsCallbacks = 1100;
+int const_k_iSteamNetworkingCallbacks = 1200;
+int const_k_iClientRemoteStorageCallbacks = 1300;
+int const_k_iClientDepotBuilderCallbacks = 1400;
+int const_k_iSteamGameServerItemsCallbacks = 1500;
+int const_k_iClientUtilsCallbacks = 1600;
+int const_k_iSteamGameCoordinatorCallbacks = 1700;
+int const_k_iSteamGameServerStatsCallbacks = 1800;
+int const_k_iSteam2AsyncCallbacks = 1900;
+int const_k_iSteamGameStatsCallbacks = 2000;
+int const_k_iClientHTTPCallbacks = 2100;
+int const_k_iClientScreenshotsCallbacks = 2200;
+int const_k_iSteamScreenshotsCallbacks = 2300;
+int const_k_iClientAudioCallbacks = 2400;
+int const_k_iClientUnifiedMessagesCallbacks = 2500;
+int const_k_iSteamStreamLauncherCallbacks = 2600;
+int const_k_iClientControllerCallbacks = 2700;
+int const_k_iSteamControllerCallbacks = 2800;
+int const_k_iClientParentalSettingsCallbacks = 2900;
+int const_k_iClientDeviceAuthCallbacks = 3000;
+int const_k_iClientNetworkDeviceManagerCallbacks = 3100;
+int const_k_iClientMusicCallbacks = 3200;
+int const_k_iClientRemoteClientManagerCallbacks = 3300;
+int const_k_iClientUGCCallbacks = 3400;
+int const_k_iSteamStreamClientCallbacks = 3500;
+int const_k_IClientProductBuilderCallbacks = 3600;
+int const_k_iClientShortcutsCallbacks = 3700;
+int const_k_iClientRemoteControlManagerCallbacks = 3800;
+int const_k_iSteamAppListCallbacks = 3900;
+int const_k_iSteamMusicCallbacks = 4000;
+int const_k_iSteamMusicRemoteCallbacks = 4100;
+int const_k_iClientVRCallbacks = 4200;
+int const_k_iClientGameNotificationCallbacks = 4300;
+int const_k_iSteamGameNotificationCallbacks = 4400;
+int const_k_iSteamHTMLSurfaceCallbacks = 4500;
+int const_k_iClientVideoCallbacks = 4600;
+int const_k_iClientInventoryCallbacks = 4700;
+int const_k_iClientBluetoothManagerCallbacks = 4800;
+int const_k_cchPersonaNameMax = 128;
+int const_k_cwchPersonaNameMax = 32;
+int const_k_cchMaxRichPresenceKeys = 20;
+int const_k_cchMaxRichPresenceKeyLength = 64;
+int const_k_cchMaxRichPresenceValueLength = 256;
+int const_k_cchStatNameMax = 128;
+int const_k_cchLeaderboardNameMax = 128;
+int const_k_cLeaderboardDetailsMax = 64;
+unsigned long const_k_InvalidUnifiedMessageHandle = 0;
+unsigned long const_k_SteamItemInstanceIDInvalid = 0xffffffff;
+int const_k_SteamInventoryResultInvalid = -1;
+
+
+
+// OpenVR Enums
+// OpenVR Structs
+
+
+
+S_API HSteamPipe SteamAPI_ISteamClient_CreateSteamPipe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamClient_BReleaseSteamPipe(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_ConnectToGlobalUser(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_CreateLocalUser(intptr_t instancePtr, HSteamPipe * phSteamPipe, EAccountType eAccountType);
+S_API void SteamAPI_ISteamClient_ReleaseUser(intptr_t instancePtr, HSteamPipe hSteamPipe, HSteamUser hUser);
+S_API class ISteamUser * SteamAPI_ISteamClient_GetISteamUser(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServer * SteamAPI_ISteamClient_GetISteamGameServer(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_SetLocalIPBinding(intptr_t instancePtr, uint32 unIP, uint16 usPort);
+S_API class ISteamFriends * SteamAPI_ISteamClient_GetISteamFriends(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUtils * SteamAPI_ISteamClient_GetISteamUtils(intptr_t instancePtr, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmaking * SteamAPI_ISteamClient_GetISteamMatchmaking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmakingServers * SteamAPI_ISteamClient_GetISteamMatchmakingServers(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void * SteamAPI_ISteamClient_GetISteamGenericInterface(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUserStats * SteamAPI_ISteamClient_GetISteamUserStats(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServerStats * SteamAPI_ISteamClient_GetISteamGameServerStats(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamApps * SteamAPI_ISteamClient_GetISteamApps(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamNetworking * SteamAPI_ISteamClient_GetISteamNetworking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamRemoteStorage * SteamAPI_ISteamClient_GetISteamRemoteStorage(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamScreenshots * SteamAPI_ISteamClient_GetISteamScreenshots(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API uint32 SteamAPI_ISteamClient_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamClient_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(intptr_t instancePtr);
+S_API class ISteamHTTP * SteamAPI_ISteamClient_GetISteamHTTP(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUnifiedMessages * SteamAPI_ISteamClient_GetISteamUnifiedMessages(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamController * SteamAPI_ISteamClient_GetISteamController(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUGC * SteamAPI_ISteamClient_GetISteamUGC(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamAppList * SteamAPI_ISteamClient_GetISteamAppList(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusic * SteamAPI_ISteamClient_GetISteamMusic(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusicRemote * SteamAPI_ISteamClient_GetISteamMusicRemote(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamHTMLSurface * SteamAPI_ISteamClient_GetISteamHTMLSurface(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamInventory * SteamAPI_ISteamClient_GetISteamInventory(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamVideo * SteamAPI_ISteamClient_GetISteamVideo(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API HSteamUser SteamAPI_ISteamUser_GetHSteamUser(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BLoggedOn(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamUser_GetSteamID(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUser_InitiateGameConnection(intptr_t instancePtr, void * pAuthBlob, int cbMaxAuthBlob, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure);
+S_API void SteamAPI_ISteamUser_TerminateGameConnection(intptr_t instancePtr, uint32 unIPServer, uint16 usPortServer);
+S_API void SteamAPI_ISteamUser_TrackAppUsageEvent(intptr_t instancePtr, class CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo);
+S_API bool SteamAPI_ISteamUser_GetUserDataFolder(intptr_t instancePtr, char * pchBuffer, int cubBuffer);
+S_API void SteamAPI_ISteamUser_StartVoiceRecording(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_StopVoiceRecording(intptr_t instancePtr);
+S_API EVoiceResult SteamAPI_ISteamUser_GetAvailableVoice(intptr_t instancePtr, uint32 * pcbCompressed, uint32 * pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_GetVoice(intptr_t instancePtr, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_DecompressVoice(intptr_t instancePtr, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate);
+S_API uint32 SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(intptr_t instancePtr);
+S_API HAuthTicket SteamAPI_ISteamUser_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamUser_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamUser_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamUser_BIsBehindNAT(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_AdvertiseGame(intptr_t instancePtr, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestEncryptedAppTicket(intptr_t instancePtr, void * pDataToInclude, int cbDataToInclude);
+S_API bool SteamAPI_ISteamUser_GetEncryptedAppTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API int SteamAPI_ISteamUser_GetGameBadgeLevel(intptr_t instancePtr, int nSeries, bool bFoil);
+S_API int SteamAPI_ISteamUser_GetPlayerSteamLevel(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestStoreAuthURL(intptr_t instancePtr, const char * pchRedirectURL);
+S_API bool SteamAPI_ISteamUser_BIsPhoneVerified(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsTwoFactorEnabled(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetPersonaName(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_SetPersonaName(intptr_t instancePtr, const char * pchPersonaName);
+S_API EPersonaState SteamAPI_ISteamFriends_GetPersonaState(intptr_t instancePtr);
+S_API int SteamAPI_ISteamFriends_GetFriendCount(intptr_t instancePtr, int iFriendFlags);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendByIndex(intptr_t instancePtr, int iFriend, int iFriendFlags);
+S_API EFriendRelationship SteamAPI_ISteamFriends_GetFriendRelationship(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API EPersonaState SteamAPI_ISteamFriends_GetFriendPersonaState(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaName(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_GetFriendGamePlayed(intptr_t instancePtr, class CSteamID steamIDFriend, struct FriendGameInfo_t * pFriendGameInfo);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(intptr_t instancePtr, class CSteamID steamIDFriend, int iPersonaName);
+S_API int SteamAPI_ISteamFriends_GetFriendSteamLevel(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetPlayerNickname(intptr_t instancePtr, class CSteamID steamIDPlayer);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupCount(intptr_t instancePtr);
+S_API FriendsGroupID_t SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(intptr_t instancePtr, int iFG);
+S_API const char * SteamAPI_ISteamFriends_GetFriendsGroupName(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API void SteamAPI_ISteamFriends_GetFriendsGroupMembersList(intptr_t instancePtr, FriendsGroupID_t friendsGroupID, class CSteamID * pOutSteamIDMembers, int nMembersCount);
+S_API bool SteamAPI_ISteamFriends_HasFriend(intptr_t instancePtr, class CSteamID steamIDFriend, int iFriendFlags);
+S_API int SteamAPI_ISteamFriends_GetClanCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetClanByIndex(intptr_t instancePtr, int iClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanName(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanTag(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_GetClanActivityCounts(intptr_t instancePtr, class CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_DownloadClanActivityCounts(intptr_t instancePtr, class CSteamID * psteamIDClans, int cClansToRequest);
+S_API int SteamAPI_ISteamFriends_GetFriendCountFromSource(intptr_t instancePtr, class CSteamID steamIDSource);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(intptr_t instancePtr, class CSteamID steamIDSource, int iFriend);
+S_API bool SteamAPI_ISteamFriends_IsUserInSource(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDSource);
+S_API void SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(intptr_t instancePtr, class CSteamID steamIDUser, bool bSpeaking);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlay(intptr_t instancePtr, const char * pchDialog);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToUser(intptr_t instancePtr, const char * pchDialog, class CSteamID steamID);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(intptr_t instancePtr, const char * pchURL);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToStore(intptr_t instancePtr, AppId_t nAppID, EOverlayToStoreFlag eFlag);
+S_API void SteamAPI_ISteamFriends_SetPlayedWith(intptr_t instancePtr, class CSteamID steamIDUserPlayedWith);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API int SteamAPI_ISteamFriends_GetSmallFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetMediumFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetLargeFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_RequestUserInformation(intptr_t instancePtr, class CSteamID steamIDUser, bool bRequireNameOnly);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_RequestClanOfficerList(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOwner(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanOfficerCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOfficerByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iOfficer);
+S_API uint32 SteamAPI_ISteamFriends_GetUserRestrictions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamFriends_SetRichPresence(intptr_t instancePtr, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamFriends_ClearRichPresence(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchKey);
+S_API int SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(intptr_t instancePtr, class CSteamID steamIDFriend, int iKey);
+S_API void SteamAPI_ISteamFriends_RequestFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_InviteUserToGame(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchConnectString);
+S_API int SteamAPI_ISteamFriends_GetCoplayFriendCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetCoplayFriend(intptr_t instancePtr, int iCoplayFriend);
+S_API int SteamAPI_ISteamFriends_GetFriendCoplayTime(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API AppId_t SteamAPI_ISteamFriends_GetFriendCoplayGame(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_JoinClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_LeaveClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanChatMemberCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetChatMemberByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iUser);
+S_API bool SteamAPI_ISteamFriends_SendClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, const char * pchText);
+S_API int SteamAPI_ISteamFriends_GetClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, class CSteamID * psteamidChatter);
+S_API bool SteamAPI_ISteamFriends_IsClanChatAdmin(intptr_t instancePtr, class CSteamID steamIDClanChat, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_SetListenForFriendsMessages(intptr_t instancePtr, bool bInterceptEnabled);
+S_API bool SteamAPI_ISteamFriends_ReplyToFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchMsgToSend);
+S_API int SteamAPI_ISteamFriends_GetFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_GetFollowerCount(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_IsFollowing(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_EnumerateFollowingList(intptr_t instancePtr, uint32 unStartIndex);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceAppActive(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(intptr_t instancePtr);
+S_API EUniverse SteamAPI_ISteamUtils_GetConnectedUniverse(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetServerRealTime(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUtils_GetIPCountry(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetImageSize(intptr_t instancePtr, int iImage, uint32 * pnWidth, uint32 * pnHeight);
+S_API bool SteamAPI_ISteamUtils_GetImageRGBA(intptr_t instancePtr, int iImage, uint8 * pubDest, int nDestBufferSize);
+S_API bool SteamAPI_ISteamUtils_GetCSERIPPort(intptr_t instancePtr, uint32 * unIP, uint16 * usPort);
+S_API uint8 SteamAPI_ISteamUtils_GetCurrentBatteryPower(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetAppID(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationPosition(intptr_t instancePtr, ENotificationPosition eNotificationPosition);
+S_API bool SteamAPI_ISteamUtils_IsAPICallCompleted(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, bool * pbFailed);
+S_API ESteamAPICallFailure SteamAPI_ISteamUtils_GetAPICallFailureReason(intptr_t instancePtr, SteamAPICall_t hSteamAPICall);
+S_API bool SteamAPI_ISteamUtils_GetAPICallResult(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed);
+S_API uint32 SteamAPI_ISteamUtils_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamUtils_IsOverlayEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_BOverlayNeedsPresent(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUtils_CheckFileSignature(intptr_t instancePtr, const char * szFileName);
+S_API bool SteamAPI_ISteamUtils_ShowGamepadTextInput(intptr_t instancePtr, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText);
+S_API uint32 SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(intptr_t instancePtr, char * pchText, uint32 cchText);
+S_API const char * SteamAPI_ISteamUtils_GetSteamUILanguage(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_IsSteamRunningInVR(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationInset(intptr_t instancePtr, int nHorizontalInset, int nVerticalInset);
+S_API bool SteamAPI_ISteamUtils_IsSteamInBigPictureMode(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_StartVRDashboard(intptr_t instancePtr);
+S_API int SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMatchmaking_GetFavoriteGame(intptr_t instancePtr, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer);
+S_API int SteamAPI_ISteamMatchmaking_AddFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer);
+S_API bool SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_RequestLobbyList(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(intptr_t instancePtr, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToBeCloseTo);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(intptr_t instancePtr, int nSlotsAvailable);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(intptr_t instancePtr, ELobbyDistanceFilter eLobbyDistanceFilter);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(intptr_t instancePtr, int cMaxResults);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyByIndex(intptr_t instancePtr, int iLobby);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_CreateLobby(intptr_t instancePtr, ELobbyType eLobbyType, int cMaxMembers);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_JoinLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_LeaveLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_InviteUserToLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDInvitee);
+S_API int SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iMember);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyDataCount(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize);
+S_API bool SteamAPI_ISteamMatchmaking_DeleteLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDUser, const char * pchKey);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(intptr_t instancePtr, class CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(intptr_t instancePtr, class CSteamID steamIDLobby, int iChatID, class CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API bool SteamAPI_ISteamMatchmaking_RequestLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, class CSteamID steamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, class CSteamID * psteamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby, int cMaxMembers);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyType(intptr_t instancePtr, class CSteamID steamIDLobby, ELobbyType eLobbyType);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyJoinable(intptr_t instancePtr, class CSteamID steamIDLobby, bool bLobbyJoinable);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDNewOwner);
+S_API bool SteamAPI_ISteamMatchmaking_SetLinkedLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDLobbyDependent);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(intptr_t instancePtr, HServerListRequest hRequest, EMatchMakingServerResponse response);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(intptr_t instancePtr, class gameserveritem_t & server);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(intptr_t instancePtr, const char * pchName, int nScore, float flTimePlayed);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(intptr_t instancePtr, const char * pchRule, const char * pchValue);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(intptr_t instancePtr);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestLANServerList(intptr_t instancePtr, AppId_t iApp, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_ReleaseRequest(intptr_t instancePtr, HServerListRequest hServerListRequest);
+S_API class gameserveritem_t * SteamAPI_ISteamMatchmakingServers_GetServerDetails(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API bool SteamAPI_ISteamMatchmakingServers_IsRefreshing(intptr_t instancePtr, HServerListRequest hRequest);
+S_API int SteamAPI_ISteamMatchmakingServers_GetServerCount(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshServer(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PingServer(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPingResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PlayerDetails(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPlayersResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_ServerRules(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingRulesResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelServerQuery(intptr_t instancePtr, HServerQuery hServerQuery);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWrite(intptr_t instancePtr, const char * pchFile, const void * pvData, int32 cubData);
+S_API int32 SteamAPI_ISteamRemoteStorage_FileRead(intptr_t instancePtr, const char * pchFile, void * pvData, int32 cubDataToRead);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileWriteAsync(intptr_t instancePtr, const char * pchFile, const void * pvData, uint32 cubData);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileReadAsync(intptr_t instancePtr, const char * pchFile, uint32 nOffset, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileReadAsyncComplete(intptr_t instancePtr, SteamAPICall_t hReadCall, void * pvBuffer, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileForget(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileDelete(intptr_t instancePtr, const char * pchFile);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileShare(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(intptr_t instancePtr, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform);
+S_API UGCFileWriteStreamHandle_t SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileExists(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FilePersisted(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileSize(intptr_t instancePtr, const char * pchFile);
+S_API int64 SteamAPI_ISteamRemoteStorage_GetFileTimestamp(intptr_t instancePtr, const char * pchFile);
+S_API ERemoteStoragePlatform SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileCount(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(intptr_t instancePtr, int iFile, int32 * pnFileSizeInBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_GetQuota(intptr_t instancePtr, int32 * pnTotalBytes, int32 * puAvailableBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(intptr_t instancePtr);
+S_API void SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(intptr_t instancePtr, bool bEnabled);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownload(intptr_t instancePtr, UGCHandle_t hContent, uint32 unPriority);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(intptr_t instancePtr, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDetails(intptr_t instancePtr, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, class CSteamID * pSteamIDOwner);
+S_API int32 SteamAPI_ISteamRemoteStorage_UGCRead(intptr_t instancePtr, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(intptr_t instancePtr);
+S_API UGCHandle_t SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(intptr_t instancePtr, int32 iCachedContent);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(intptr_t instancePtr, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType);
+S_API PublishedFileUpdateHandle_t SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_DeletePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(intptr_t instancePtr, class CSteamID steamId, uint32 unStartIndex, struct SteamParamStringArray_t * pRequiredTags, struct SteamParamStringArray_t * pExcludedTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishVideo(intptr_t instancePtr, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(intptr_t instancePtr, EWorkshopFileAction eAction, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(intptr_t instancePtr, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, struct SteamParamStringArray_t * pTags, struct SteamParamStringArray_t * pUserTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(intptr_t instancePtr, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority);
+S_API bool SteamAPI_ISteamUserStats_RequestCurrentStats(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUserStats_GetStat(intptr_t instancePtr, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetStat0(intptr_t instancePtr, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_SetStat(intptr_t instancePtr, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamUserStats_SetStat0(intptr_t instancePtr, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamUserStats_UpdateAvgRateStat(intptr_t instancePtr, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamUserStats_GetAchievement(intptr_t instancePtr, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_SetAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_ClearAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(intptr_t instancePtr, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_StoreStats(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetAchievementIcon(intptr_t instancePtr, const char * pchName);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(intptr_t instancePtr, const char * pchName, const char * pchKey);
+S_API bool SteamAPI_ISteamUserStats_IndicateAchievementProgress(intptr_t instancePtr, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress);
+S_API uint32 SteamAPI_ISteamUserStats_GetNumAchievements(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementName(intptr_t instancePtr, uint32 iAchievement);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_ResetAllStats(intptr_t instancePtr, bool bAchievementsToo);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName);
+S_API const char * SteamAPI_ISteamUserStats_GetLeaderboardName(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API int SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardSortMethod SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardDisplayType SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, class CSteamID * prgUsers, int cUsers);
+S_API bool SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(intptr_t instancePtr, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, struct LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_UploadLeaderboardScore(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_AttachLeaderboardUGC(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(intptr_t instancePtr, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API int SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(intptr_t instancePtr, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(intptr_t instancePtr, const char * pchName, float * pflPercent);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalStats(intptr_t instancePtr, int nHistoryDays);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat(intptr_t instancePtr, const char * pchStatName, int64 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat0(intptr_t instancePtr, const char * pchStatName, double * pData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory(intptr_t instancePtr, const char * pchStatName, int64 * pData, uint32 cubData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory0(intptr_t instancePtr, const char * pchStatName, double * pData, uint32 cubData);
+S_API bool SteamAPI_ISteamApps_BIsSubscribed(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsLowViolence(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsCybercafe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsVACBanned(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetCurrentGameLanguage(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetAvailableGameLanguages(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedApp(intptr_t instancePtr, AppId_t appID);
+S_API bool SteamAPI_ISteamApps_BIsDlcInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint32 SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(intptr_t instancePtr);
+S_API int SteamAPI_ISteamApps_GetDLCCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BGetDLCDataByIndex(intptr_t instancePtr, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize);
+S_API void SteamAPI_ISteamApps_InstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_UninstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_GetCurrentBetaName(intptr_t instancePtr, char * pchName, int cchNameBufferSize);
+S_API bool SteamAPI_ISteamApps_MarkContentCorrupt(intptr_t instancePtr, bool bMissingFilesOnly);
+S_API uint32 SteamAPI_ISteamApps_GetInstalledDepots(intptr_t instancePtr, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots);
+S_API uint32 SteamAPI_ISteamApps_GetAppInstallDir(intptr_t instancePtr, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize);
+S_API bool SteamAPI_ISteamApps_BIsAppInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint64 SteamAPI_ISteamApps_GetAppOwner(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetLaunchQueryParam(intptr_t instancePtr, const char * pchKey);
+S_API bool SteamAPI_ISteamApps_GetDlcDownloadProgress(intptr_t instancePtr, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API int SteamAPI_ISteamApps_GetAppBuildId(intptr_t instancePtr);
+S_API void SteamAPI_ISteamApps_RequestAllProofOfPurchaseKeys(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamNetworking_SendP2PPacket(intptr_t instancePtr, class CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_IsP2PPacketAvailable(intptr_t instancePtr, uint32 * pcubMsgSize, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_ReadP2PPacket(intptr_t instancePtr, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, class CSteamID * psteamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(intptr_t instancePtr, class CSteamID steamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_GetP2PSessionState(intptr_t instancePtr, class CSteamID steamIDRemote, struct P2PSessionState_t * pConnectionState);
+S_API bool SteamAPI_ISteamNetworking_AllowP2PPacketRelay(intptr_t instancePtr, bool bAllow);
+S_API SNetListenSocket_t SteamAPI_ISteamNetworking_CreateListenSocket(intptr_t instancePtr, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(intptr_t instancePtr, class CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateConnectionSocket(intptr_t instancePtr, uint32 nIP, uint16 nPort, int nTimeoutSec);
+S_API bool SteamAPI_ISteamNetworking_DestroySocket(intptr_t instancePtr, SNetSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_DestroyListenSocket(intptr_t instancePtr, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_SendDataOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_RetrieveDataFromSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailable(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_RetrieveData(intptr_t instancePtr, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_GetSocketInfo(intptr_t instancePtr, SNetSocket_t hSocket, class CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote);
+S_API bool SteamAPI_ISteamNetworking_GetListenSocketInfo(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort);
+S_API ESNetSocketConnectionType SteamAPI_ISteamNetworking_GetSocketConnectionType(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API int SteamAPI_ISteamNetworking_GetMaxPacketSize(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_WriteScreenshot(intptr_t instancePtr, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(intptr_t instancePtr, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight);
+S_API void SteamAPI_ISteamScreenshots_TriggerScreenshot(intptr_t instancePtr);
+S_API void SteamAPI_ISteamScreenshots_HookScreenshots(intptr_t instancePtr, bool bHook);
+S_API bool SteamAPI_ISteamScreenshots_SetLocation(intptr_t instancePtr, ScreenshotHandle hScreenshot, const char * pchLocation);
+S_API bool SteamAPI_ISteamScreenshots_TagUser(intptr_t instancePtr, ScreenshotHandle hScreenshot, class CSteamID steamID);
+S_API bool SteamAPI_ISteamScreenshots_TagPublishedFile(intptr_t instancePtr, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID);
+S_API bool SteamAPI_ISteamMusic_BIsEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusic_BIsPlaying(intptr_t instancePtr);
+S_API AudioPlayback_Status SteamAPI_ISteamMusic_GetPlaybackStatus(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Play(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Pause(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayPrevious(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayNext(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_SetVolume(intptr_t instancePtr, float flVolume);
+S_API float SteamAPI_ISteamMusic_GetVolume(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BActivationSuccess(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_SetDisplayName(intptr_t instancePtr, const char * pchDisplayName);
+S_API bool SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayPrevious(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayNext(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableQueue(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlaylists(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(intptr_t instancePtr, AudioPlayback_Status nStatus);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateVolume(intptr_t instancePtr, float flValue);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(intptr_t instancePtr, bool bAvailable);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(intptr_t instancePtr, const char * pchText);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(intptr_t instancePtr, int nValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_QueueWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetQueueEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetQueueEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_QueueDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetPlaylistEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistDidChange(intptr_t instancePtr);
+S_API HTTPRequestHandle SteamAPI_ISteamHTTP_CreateHTTPRequest(intptr_t instancePtr, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(intptr_t instancePtr, HTTPRequestHandle hRequest, uint64 ulContextValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_DeferHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 * unBodySize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 cOffset, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_ReleaseHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(intptr_t instancePtr, HTTPRequestHandle hRequest, float * pflPercentOut);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen);
+S_API HTTPCookieContainerHandle SteamAPI_ISteamHTTP_CreateCookieContainer(intptr_t instancePtr, bool bAllowResponsesToModify);
+S_API bool SteamAPI_ISteamHTTP_ReleaseCookieContainer(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetCookie(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer, const char * pchHost, const char * pchUrl, const char * pchCookie);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(intptr_t instancePtr, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchUserAgentInfo);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(intptr_t instancePtr, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unMilliseconds);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(intptr_t instancePtr, HTTPRequestHandle hRequest, bool * pbWasTimedOut);
+S_API ClientUnifiedMessageHandle SteamAPI_ISteamUnifiedMessages_SendMethod(intptr_t instancePtr, const char * pchServiceMethod, const void * pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, uint32 * punResponseSize, EResult * peResult);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseData(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, void * pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease);
+S_API bool SteamAPI_ISteamUnifiedMessages_ReleaseMethod(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle);
+S_API bool SteamAPI_ISteamUnifiedMessages_SendNotification(intptr_t instancePtr, const char * pchServiceNotification, const void * pNotificationBuffer, uint32 unNotificationBufferSize);
+S_API bool SteamAPI_ISteamController_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamController_Shutdown(intptr_t instancePtr);
+S_API void SteamAPI_ISteamController_RunFrame(intptr_t instancePtr);
+S_API int SteamAPI_ISteamController_GetConnectedControllers(intptr_t instancePtr, ControllerHandle_t * handlesOut);
+S_API bool SteamAPI_ISteamController_ShowBindingPanel(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetActionSetHandle(intptr_t instancePtr, const char * pszActionSetName);
+S_API void SteamAPI_ISteamController_ActivateActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetCurrentActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerDigitalActionHandle_t SteamAPI_ISteamController_GetDigitalActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerDigitalActionData_t SteamAPI_ISteamController_GetDigitalActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle);
+S_API int SteamAPI_ISteamController_GetDigitalActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin * originsOut);
+S_API ControllerAnalogActionHandle_t SteamAPI_ISteamController_GetAnalogActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerAnalogActionData_t SteamAPI_ISteamController_GetAnalogActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle);
+S_API int SteamAPI_ISteamController_GetAnalogActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin * originsOut);
+S_API void SteamAPI_ISteamController_StopAnalogActionMomentum(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction);
+S_API void SteamAPI_ISteamController_TriggerHapticPulse(intptr_t instancePtr, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec);
+S_API void SteamAPI_ISteamController_TriggerRepeatedHapticPulse(intptr_t instancePtr, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(intptr_t instancePtr, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(intptr_t instancePtr, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SendQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCResult(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, struct SteamUGCDetails_t * pDetails);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCPreviewURL(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCChildren(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCStatistic(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 * pStatValue);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, char * pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType * pPreviewType);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize);
+S_API bool SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_AddRequiredTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_AddExcludedTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_SetReturnKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnKeyValueTags);
+S_API bool SteamAPI_ISteamUGC_SetReturnLongDescription(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnLongDescription);
+S_API bool SteamAPI_ISteamUGC_SetReturnMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnMetadata);
+S_API bool SteamAPI_ISteamUGC_SetReturnChildren(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnChildren);
+S_API bool SteamAPI_ISteamUGC_SetReturnAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews);
+S_API bool SteamAPI_ISteamUGC_SetReturnTotalOnly(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnTotalOnly);
+S_API bool SteamAPI_ISteamUGC_SetLanguage(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetAllowCachedResponse(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds);
+S_API bool SteamAPI_ISteamUGC_SetCloudFileNameFilter(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pMatchCloudFileName);
+S_API bool SteamAPI_ISteamUGC_SetMatchAnyTag(intptr_t instancePtr, UGCQueryHandle_t handle, bool bMatchAnyTag);
+S_API bool SteamAPI_ISteamUGC_SetSearchText(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pSearchText);
+S_API bool SteamAPI_ISteamUGC_SetRankedByTrendDays(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unDays);
+S_API bool SteamAPI_ISteamUGC_AddRequiredKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pKey, const char * pValue);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RequestUGCDetails(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_CreateItem(intptr_t instancePtr, AppId_t nConsumerAppId, EWorkshopFileType eFileType);
+S_API UGCUpdateHandle_t SteamAPI_ISteamUGC_StartItemUpdate(intptr_t instancePtr, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_SetItemTitle(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchTitle);
+S_API bool SteamAPI_ISteamUGC_SetItemDescription(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchDescription);
+S_API bool SteamAPI_ISteamUGC_SetItemUpdateLanguage(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetItemMetadata(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchMetaData);
+S_API bool SteamAPI_ISteamUGC_SetItemVisibility(intptr_t instancePtr, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamUGC_SetItemTags(intptr_t instancePtr, UGCUpdateHandle_t updateHandle, const struct SteamParamStringArray_t * pTags);
+S_API bool SteamAPI_ISteamUGC_SetItemContent(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszContentFolder);
+S_API bool SteamAPI_ISteamUGC_SetItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile);
+S_API bool SteamAPI_ISteamUGC_RemoveItemKeyValueTags(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey);
+S_API bool SteamAPI_ISteamUGC_AddItemKeyValueTag(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamUGC_AddItemPreviewFile(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile, EItemPreviewType type);
+S_API bool SteamAPI_ISteamUGC_AddItemPreviewVideo(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszVideoID);
+S_API bool SteamAPI_ISteamUGC_UpdateItemPreviewFile(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index, const char * pszPreviewFile);
+S_API bool SteamAPI_ISteamUGC_UpdateItemPreviewVideo(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index, const char * pszVideoID);
+S_API bool SteamAPI_ISteamUGC_RemoveItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubmitItemUpdate(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchChangeNote);
+S_API EItemUpdateStatus SteamAPI_ISteamUGC_GetItemUpdateProgress(intptr_t instancePtr, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_GetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddItemToFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveItemFromFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_UnsubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API uint32 SteamAPI_ISteamUGC_GetNumSubscribedItems(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUGC_GetSubscribedItems(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API uint32 SteamAPI_ISteamUGC_GetItemState(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_GetItemInstallInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp);
+S_API bool SteamAPI_ISteamUGC_GetItemDownloadInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API bool SteamAPI_ISteamUGC_DownloadItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bHighPriority);
+S_API bool SteamAPI_ISteamUGC_BInitWorkshopForGameServer(intptr_t instancePtr, DepotId_t unWorkshopDepotID, const char * pszFolder);
+S_API void SteamAPI_ISteamUGC_SuspendDownloads(intptr_t instancePtr, bool bSuspend);
+S_API uint32 SteamAPI_ISteamAppList_GetNumInstalledApps(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamAppList_GetInstalledApps(intptr_t instancePtr, AppId_t * pvecAppID, uint32 unMaxAppIDs);
+S_API int SteamAPI_ISteamAppList_GetAppName(intptr_t instancePtr, AppId_t nAppID, char * pchName, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppInstallDir(intptr_t instancePtr, AppId_t nAppID, char * pchDirectory, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppBuildId(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Shutdown(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamHTMLSurface_CreateBrowser(intptr_t instancePtr, const char * pchUserAgent, const char * pchUserCSS);
+S_API void SteamAPI_ISteamHTMLSurface_RemoveBrowser(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_LoadURL(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData);
+S_API void SteamAPI_ISteamHTMLSurface_SetSize(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight);
+S_API void SteamAPI_ISteamHTMLSurface_StopLoad(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Reload(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoBack(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoForward(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_AddHeader(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamHTMLSurface_ExecuteJavascript(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchScript);
+S_API void SteamAPI_ISteamHTMLSurface_MouseUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDoubleClick(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseMove(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_MouseWheel(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int32 nDelta);
+S_API void SteamAPI_ISteamHTMLSurface_KeyDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyChar(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetVerticalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetKeyFocus(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus);
+S_API void SteamAPI_ISteamHTMLSurface_ViewSource(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_CopyToClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_PasteFromClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Find(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse);
+S_API void SteamAPI_ISteamHTMLSurface_StopFind(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_SetCookie(intptr_t instancePtr, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly);
+S_API void SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY);
+S_API void SteamAPI_ISteamHTMLSurface_SetBackgroundMode(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bBackgroundMode);
+S_API void SteamAPI_ISteamHTMLSurface_AllowStartRequest(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bAllowed);
+S_API void SteamAPI_ISteamHTMLSurface_JSDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bResult);
+S_API EResult SteamAPI_ISteamInventory_GetResultStatus(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetResultItems(intptr_t instancePtr, SteamInventoryResult_t resultHandle, struct SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize);
+S_API uint32 SteamAPI_ISteamInventory_GetResultTimestamp(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_CheckResultSteamID(intptr_t instancePtr, SteamInventoryResult_t resultHandle, class CSteamID steamIDExpected);
+S_API void SteamAPI_ISteamInventory_DestroyResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetAllItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_GetItemsByID(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs);
+S_API bool SteamAPI_ISteamInventory_SerializeResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize);
+S_API bool SteamAPI_ISteamInventory_DeserializeResult(intptr_t instancePtr, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE);
+S_API bool SteamAPI_ISteamInventory_GenerateItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_GrantPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_AddPromoItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef);
+S_API bool SteamAPI_ISteamInventory_AddPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_ConsumeItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity);
+S_API bool SteamAPI_ISteamInventory_ExchangeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength);
+S_API bool SteamAPI_ISteamInventory_TransferItemQuantity(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest);
+S_API void SteamAPI_ISteamInventory_SendItemDropHeartbeat(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_TriggerItemDrop(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition);
+S_API bool SteamAPI_ISteamInventory_TradeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, class CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength);
+S_API bool SteamAPI_ISteamInventory_LoadItemDefinitions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionIDs(intptr_t instancePtr, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionProperty(intptr_t instancePtr, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSize);
+S_API void SteamAPI_ISteamVideo_GetVideoURL(intptr_t instancePtr, AppId_t unVideoAppID);
+S_API bool SteamAPI_ISteamVideo_IsBroadcasting(intptr_t instancePtr, int * pnNumViewers);
+S_API bool SteamAPI_ISteamGameServer_InitGameServer(intptr_t instancePtr, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString);
+S_API void SteamAPI_ISteamGameServer_SetProduct(intptr_t instancePtr, const char * pszProduct);
+S_API void SteamAPI_ISteamGameServer_SetGameDescription(intptr_t instancePtr, const char * pszGameDescription);
+S_API void SteamAPI_ISteamGameServer_SetModDir(intptr_t instancePtr, const char * pszModDir);
+S_API void SteamAPI_ISteamGameServer_SetDedicatedServer(intptr_t instancePtr, bool bDedicated);
+S_API void SteamAPI_ISteamGameServer_LogOn(intptr_t instancePtr, const char * pszToken);
+S_API void SteamAPI_ISteamGameServer_LogOnAnonymous(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_LogOff(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BLoggedOn(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BSecure(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamGameServer_GetSteamID(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_WasRestartRequested(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetMaxPlayerCount(intptr_t instancePtr, int cPlayersMax);
+S_API void SteamAPI_ISteamGameServer_SetBotPlayerCount(intptr_t instancePtr, int cBotplayers);
+S_API void SteamAPI_ISteamGameServer_SetServerName(intptr_t instancePtr, const char * pszServerName);
+S_API void SteamAPI_ISteamGameServer_SetMapName(intptr_t instancePtr, const char * pszMapName);
+S_API void SteamAPI_ISteamGameServer_SetPasswordProtected(intptr_t instancePtr, bool bPasswordProtected);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorPort(intptr_t instancePtr, uint16 unSpectatorPort);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorServerName(intptr_t instancePtr, const char * pszSpectatorServerName);
+S_API void SteamAPI_ISteamGameServer_ClearAllKeyValues(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetKeyValue(intptr_t instancePtr, const char * pKey, const char * pValue);
+S_API void SteamAPI_ISteamGameServer_SetGameTags(intptr_t instancePtr, const char * pchGameTags);
+S_API void SteamAPI_ISteamGameServer_SetGameData(intptr_t instancePtr, const char * pchGameData);
+S_API void SteamAPI_ISteamGameServer_SetRegion(intptr_t instancePtr, const char * pszRegion);
+S_API bool SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(intptr_t instancePtr, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, class CSteamID * pSteamIDUser);
+S_API uint64 SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SendUserDisconnect(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServer_BUpdateUserData(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore);
+S_API HAuthTicket SteamAPI_ISteamGameServer_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamGameServer_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamGameServer_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamGameServer_RequestUserGroupStatus(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDGroup);
+S_API void SteamAPI_ISteamGameServer_GetGameplayStats(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_GetServerReputation(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamGameServer_GetPublicIP(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_HandleIncomingPacket(intptr_t instancePtr, const void * pData, int cbData, uint32 srcIP, uint16 srcPort);
+S_API int SteamAPI_ISteamGameServer_GetNextOutgoingPacket(intptr_t instancePtr, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort);
+S_API void SteamAPI_ISteamGameServer_EnableHeartbeats(intptr_t instancePtr, bool bActive);
+S_API void SteamAPI_ISteamGameServer_SetHeartbeatInterval(intptr_t instancePtr, int iHeartbeatInterval);
+S_API void SteamAPI_ISteamGameServer_ForceHeartbeat(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_AssociateWithClan(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(intptr_t instancePtr, class CSteamID steamIDNewPlayer);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API bool SteamAPI_ISteamGameServerStats_ClearUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_StoreUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+#endif // STEAMAPIFLAT_H
+
+
diff --git a/lsteamclient/steamworks_sdk_137/steam_api_internal.h b/lsteamclient/steamworks_sdk_137/steam_api_internal.h
new file mode 100644
index 00000000..8770efa0
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/steam_api_internal.h
@@ -0,0 +1,325 @@
+//====== Copyright 1996-2015, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Internal private Steamworks API declarations and definitions
+//
+//=============================================================================
+
+#ifndef STEAM_API_INTERNAL_H
+#define STEAM_API_INTERNAL_H
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+S_API bool S_CALLTYPE SteamInternal_Init();
+S_API void * S_CALLTYPE SteamInternal_CreateInterface( const char *ver );
+
+#if !defined( STEAM_API_EXPORTS )
+
+#if !defined( VERSION_SAFE_STEAM_API_INTERFACES )
+inline CSteamAPIContext& SteamInternal_ModuleContext()
+{
+ // NOTE: declaring "static CSteamAPIConext" creates a large function
+ // which queries the initialization status of the object. We know that
+ // it is pointer-aligned and fully memset with zeros, so just alias a
+ // static buffer of the appropriate size and call it a CSteamAPIContext.
+ static void* ctx[ sizeof(CSteamAPIContext)/sizeof(void*) ];
+ return *(CSteamAPIContext*)ctx;
+}
+#define _STEAMINTERNAL_ACCESSOR_BODY( AccessFunc ) \
+ if ( !SteamAPI_GetHSteamPipe() ) return 0; \
+ CSteamAPIContext &ctx = SteamInternal_ModuleContext(); \
+ if ( !ctx.AccessFunc() ) ctx.Init(); \
+ return ctx.AccessFunc();
+inline ISteamClient *SteamClient() { _STEAMINTERNAL_ACCESSOR_BODY( SteamClient ) }
+inline ISteamUser *SteamUser() { _STEAMINTERNAL_ACCESSOR_BODY( SteamUser ) }
+inline ISteamFriends *SteamFriends() { _STEAMINTERNAL_ACCESSOR_BODY( SteamFriends ) }
+inline ISteamUtils *SteamUtils() { _STEAMINTERNAL_ACCESSOR_BODY( SteamUtils ) }
+inline ISteamMatchmaking *SteamMatchmaking() { _STEAMINTERNAL_ACCESSOR_BODY( SteamMatchmaking ) }
+inline ISteamUserStats *SteamUserStats() { _STEAMINTERNAL_ACCESSOR_BODY( SteamUserStats ) }
+inline ISteamApps *SteamApps() { _STEAMINTERNAL_ACCESSOR_BODY( SteamApps ) }
+inline ISteamMatchmakingServers *SteamMatchmakingServers() { _STEAMINTERNAL_ACCESSOR_BODY( SteamMatchmakingServers ) }
+inline ISteamNetworking *SteamNetworking() { _STEAMINTERNAL_ACCESSOR_BODY( SteamNetworking ) }
+inline ISteamRemoteStorage *SteamRemoteStorage() { _STEAMINTERNAL_ACCESSOR_BODY( SteamRemoteStorage ) }
+inline ISteamScreenshots *SteamScreenshots() { _STEAMINTERNAL_ACCESSOR_BODY( SteamScreenshots ) }
+inline ISteamHTTP *SteamHTTP() { _STEAMINTERNAL_ACCESSOR_BODY( SteamHTTP ) }
+inline ISteamUnifiedMessages *SteamUnifiedMessages() { _STEAMINTERNAL_ACCESSOR_BODY( SteamUnifiedMessages ) }
+inline ISteamController *SteamController() { _STEAMINTERNAL_ACCESSOR_BODY( SteamController ) }
+inline ISteamUGC *SteamUGC() { _STEAMINTERNAL_ACCESSOR_BODY( SteamUGC ) }
+inline ISteamAppList *SteamAppList() { _STEAMINTERNAL_ACCESSOR_BODY( SteamAppList ) }
+inline ISteamMusic *SteamMusic() { _STEAMINTERNAL_ACCESSOR_BODY( SteamMusic ) }
+inline ISteamMusicRemote *SteamMusicRemote() { _STEAMINTERNAL_ACCESSOR_BODY( SteamMusicRemote ) }
+inline ISteamHTMLSurface *SteamHTMLSurface() { _STEAMINTERNAL_ACCESSOR_BODY( SteamHTMLSurface ) }
+inline ISteamInventory *SteamInventory() { _STEAMINTERNAL_ACCESSOR_BODY( SteamInventory ) }
+inline ISteamVideo *SteamVideo() { _STEAMINTERNAL_ACCESSOR_BODY( SteamVideo ) }
+#undef _STEAMINTERNAL_ACCESSOR_BODY
+#endif // !defined( VERSION_SAFE_STEAM_API_INTERFACES )
+
+#endif // !defined( STEAM_API_EXPORTS )
+
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamClient = NULL;
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamMusicRemote = NULL;
+ m_pSteamHTMLSurface = NULL;
+ m_pSteamInventory = NULL;
+}
+
+
+// This function must be declared inline in the header so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+ if ( !hSteamPipe )
+ return false;
+
+ m_pSteamClient = (ISteamClient*) SteamInternal_CreateInterface( STEAMCLIENT_INTERFACE_VERSION );
+ if ( !m_pSteamClient )
+ return false;
+
+ m_pSteamUser = m_pSteamClient->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = m_pSteamClient->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = m_pSteamClient->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = m_pSteamClient->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = m_pSteamClient->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = m_pSteamClient->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = m_pSteamClient->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = m_pSteamClient->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = m_pSteamClient->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = m_pSteamClient->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = m_pSteamClient->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = m_pSteamClient->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = m_pSteamClient->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = m_pSteamClient->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = m_pSteamClient->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = m_pSteamClient->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ return false;
+
+ m_pSteamMusicRemote = m_pSteamClient->GetISteamMusicRemote( hSteamUser, hSteamPipe, STEAMMUSICREMOTE_INTERFACE_VERSION );
+ if ( !m_pSteamMusicRemote )
+ return false;
+
+ m_pSteamHTMLSurface = m_pSteamClient->GetISteamHTMLSurface( hSteamUser, hSteamPipe, STEAMHTMLSURFACE_INTERFACE_VERSION );
+ if ( !m_pSteamHTMLSurface )
+ return false;
+
+ m_pSteamInventory = m_pSteamClient->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_pSteamVideo = m_pSteamClient->GetISteamVideo( hSteamUser, hSteamPipe, STEAMVIDEO_INTERFACE_VERSION );
+ if ( !m_pSteamVideo )
+ return false;
+
+ return true;
+}
+
+
+//-----------------------------------------------------------------------------
+// The following macros are implementation details, not intended for public use
+//-----------------------------------------------------------------------------
+#define _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param )
+#define _STEAM_CALLBACK_HELPER( _1, _2, SELECTED, ... ) _STEAM_CALLBACK_##SELECTED
+#define _STEAM_CALLBACK_SELECT( X, Y ) _STEAM_CALLBACK_HELPER X Y
+#define _STEAM_CALLBACK_3( extra_code, thisclass, func, param ) \
+ struct CCallbackInternal_ ## func : private CCallbackImpl< sizeof( param ) > { \
+ CCallbackInternal_ ## func () { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func ( const CCallbackInternal_ ## func & ) { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func & operator=( const CCallbackInternal_ ## func & ) { return *this; } \
+ private: virtual void Run( void *pvParam ) { _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param ) \
+ thisclass *pOuter = reinterpret_cast<thisclass*>( reinterpret_cast<char*>(this) - offsetof( thisclass, m_steamcallback_ ## func ) ); \
+ pOuter->func( reinterpret_cast<param*>( pvParam ) ); \
+ } \
+ } m_steamcallback_ ## func ; void func( param *pParam )
+#define _STEAM_CALLBACK_4( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param > var; void func( param *pParam )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+inline CCallResult<T, P>::CCallResult()
+{
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Set( SteamAPICall_t hAPICall, T *p, func_t func )
+{
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+}
+
+template< class T, class P >
+inline bool CCallResult<T, P>::IsActive() const
+{
+ return (m_hAPICall != k_uAPICallInvalid);
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Cancel()
+{
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+}
+
+template< class T, class P >
+inline CCallResult<T, P>::~CCallResult()
+{
+ Cancel();
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Run( void *pvParam )
+{
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)((P *)pvParam, false);
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+{
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)((P *)pvParam, bIOFailure);
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct,
+// bGameserver = listen for gameserver callbacks instead of client callbacks
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameserver >
+inline CCallback< T, P, bGameserver >::CCallback( T *pObj, func_t func )
+ : m_pObj( NULL ), m_Func( NULL )
+{
+ if ( bGameserver )
+ {
+ this->SetGameserverFlag();
+ }
+ Register( pObj, func );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Register( T *pObj, func_t func )
+{
+ if ( !pObj || !func )
+ return;
+
+ if ( this->m_nCallbackFlags & CCallbackBase::k_ECallbackFlagsRegistered )
+ Unregister();
+
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Unregister()
+{
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Run( void *pvParam )
+{
+ (m_pObj->*m_Func)((P *)pvParam);
+}
+
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+
+#endif // STEAM_API_INTERNAL_H
diff --git a/lsteamclient/steamworks_sdk_137/steam_gameserver.h b/lsteamclient/steamworks_sdk_137/steam_gameserver.h
new file mode 100644
index 00000000..dfc70370
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/steam_gameserver.h
@@ -0,0 +1,237 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+
+inline bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+// Most Steam API functions allocate some amount of thread-local memory for
+// parameter storage. Calling SteamGameServer_ReleaseCurrentThreadMemory()
+// will free all API-related memory associated with the calling thread.
+// This memory is released automatically by SteamGameServer_RunCallbacks(),
+// so single-threaded servers do not need to explicitly call this function.
+inline void SteamGameServer_ReleaseCurrentThreadMemory();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+// If your application contains modules which could be built against different Steamworks SDK
+// versions, then you should define VERSION_SAFE_STEAM_API_INTERFACES to enforce that you cannot
+// use the version-less global accessors. Instead, create and use CSteamGameServerAPIContext
+// objects to retrieve interface pointers which are appropriate for your Steamworks SDK headers.
+#if !defined( VERSION_SAFE_STEAM_API_INTERFACES ) && !defined( STEAM_API_EXPORTS )
+inline ISteamClient *SteamGameServerClient();
+inline ISteamGameServer *SteamGameServer();
+inline ISteamUtils *SteamGameServerUtils();
+inline ISteamNetworking *SteamGameServerNetworking();
+inline ISteamGameServerStats *SteamGameServerStats();
+inline ISteamHTTP *SteamGameServerHTTP();
+inline ISteamInventory *SteamGameServerInventory();
+inline ISteamUGC *SteamGameServerUGC();
+inline ISteamApps *SteamGameServerApps();
+#endif
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext() { Clear(); }
+ inline void Clear();
+ inline bool Init();
+
+ ISteamClient *SteamClient() const { return m_pSteamClient; }
+ ISteamGameServer *SteamGameServer() const { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() const { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() const { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() const { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() const { return m_pSteamHTTP; }
+ ISteamInventory *SteamInventory() const { return m_pSteamInventory; }
+ ISteamUGC *SteamUGC() const { return m_pSteamUGC; }
+ ISteamApps *SteamApps() const { return m_pSteamApps; }
+
+private:
+ ISteamClient *m_pSteamClient;
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamInventory *m_pSteamInventory;
+ ISteamUGC *m_pSteamUGC;
+ ISteamApps *m_pSteamApps;
+};
+
+
+// Older SDKs exported this global pointer, but it is no longer supported.
+// You should use SteamGameServerClient() or CSteamGameServerAPIContext to
+// safely access the ISteamClient APIs from your game server application.
+//S_API ISteamClient *g_pSteamClientGameServer;
+
+// SteamGameServer_InitSafe has been replaced with SteamGameServer_Init and
+// is no longer supported. Use SteamGameServer_Init instead.
+//S_API void S_CALLTYPE SteamGameServer_InitSafe();
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// These macros are similar to the STEAM_CALLBACK_* macros in steam_api.h, but only trigger for gameserver callbacks
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, /*callback_type, [deprecated] var*/... ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, GS, 3 ), ( this->SetGameserverFlag();, thisclass, func, __VA_ARGS__ ) )
+
+#define STEAM_GAMESERVER_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type, true > var; void func( callback_type *pParam )
+
+
+#define _STEAM_CALLBACK_GS( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param, true > var; void func( param *pParam )
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe S_CALLTYPE SteamGameServer_GetHSteamPipe();
+S_API HSteamUser S_CALLTYPE SteamGameServer_GetHSteamUser();
+S_API bool S_CALLTYPE SteamInternal_GameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+
+
+#if !defined( VERSION_SAFE_STEAM_API_INTERFACES ) && !defined( STEAM_API_EXPORTS )
+inline CSteamGameServerAPIContext& SteamGameServerInternal_ModuleContext()
+{
+ // NOTE: declaring "static CSteamAPIConext" creates a large function
+ // which queries the initialization status of the object. We know that
+ // it is pointer-aligned and fully memset with zeros, so just alias a
+ // static buffer of the appropriate size and call it a CSteamAPIContext.
+ static void* ctx[ sizeof(CSteamGameServerAPIContext)/sizeof(void*) ];
+ return *(CSteamGameServerAPIContext*)ctx;
+}
+#define _STEAMINTERNAL_ACCESSOR_BODY( AccessFunc ) \
+ if ( !SteamGameServer_GetHSteamPipe() ) return 0; \
+ CSteamGameServerAPIContext &ctx = SteamGameServerInternal_ModuleContext(); \
+ if ( !ctx.AccessFunc() ) ctx.Init(); \
+ return ctx.AccessFunc();
+
+inline ISteamClient *SteamGameServerClient() { _STEAMINTERNAL_ACCESSOR_BODY( SteamClient ) }
+inline ISteamGameServer *SteamGameServer() { _STEAMINTERNAL_ACCESSOR_BODY( SteamGameServer ) }
+inline ISteamUtils *SteamGameServerUtils() { _STEAMINTERNAL_ACCESSOR_BODY( SteamGameServerUtils ) }
+inline ISteamNetworking *SteamGameServerNetworking() { _STEAMINTERNAL_ACCESSOR_BODY( SteamGameServerNetworking ) }
+inline ISteamGameServerStats *SteamGameServerStats() { _STEAMINTERNAL_ACCESSOR_BODY( SteamGameServerStats ) }
+inline ISteamHTTP *SteamGameServerHTTP() { _STEAMINTERNAL_ACCESSOR_BODY( SteamHTTP ) }
+inline ISteamInventory *SteamGameServerInventory() { _STEAMINTERNAL_ACCESSOR_BODY( SteamInventory ) }
+inline ISteamUGC *SteamGameServerUGC() { _STEAMINTERNAL_ACCESSOR_BODY( SteamUGC ) }
+inline ISteamApps *SteamGameServerApps() { _STEAMINTERNAL_ACCESSOR_BODY( SteamApps ) }
+#undef _STEAMINTERNAL_ACCESSOR_BODY
+#endif // !defined( VERSION_SAFE_STEAM_API_INTERFACES ) && !defined( STEAM_API_EXPORTS )
+
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamClient = NULL;
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamInventory = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamApps = NULL;
+}
+
+// This function must be declared inline in the header so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+ if ( !hSteamPipe )
+ return false;
+
+ m_pSteamClient = (ISteamClient*) SteamInternal_CreateInterface( STEAMCLIENT_INTERFACE_VERSION );
+ if ( !m_pSteamClient )
+ return false;
+
+ m_pSteamGameServer = m_pSteamClient->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = m_pSteamClient->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = m_pSteamClient->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = m_pSteamClient->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = m_pSteamClient->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamInventory = m_pSteamClient->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_pSteamUGC = m_pSteamClient->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamApps = m_pSteamClient->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ return true;
+}
+
+
+inline bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString )
+{
+ if ( !SteamInternal_GameServer_Init( unIP, usSteamPort, usGamePort, usQueryPort, eServerMode, pchVersionString ) )
+ return false;
+
+ return true;
+}
+
+
+inline void SteamGameServer_ReleaseCurrentThreadMemory()
+{
+ SteamAPI_ReleaseCurrentThreadMemory();
+}
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_137/steamclientpublic.h b/lsteamclient/steamworks_sdk_137/steamclientpublic.h
new file mode 100644
index 00000000..47a72c63
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/steamclientpublic.h
@@ -0,0 +1,1224 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to login
+ k_EResultItemDeleted = 86, // The thing we're trying to access has been deleted
+ k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to throttle response to possible attacker
+ k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch
+ k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for two-factor didn't match
+ k_EResultAccountAssociatedToMultiplePartners = 90, // account has been associated with multiple partners
+ k_EResultNotModified = 91, // data not modified
+ k_EResultNoMobileDevice = 92, // the account does not have a mobile device associated with it
+ k_EResultTimeNotSynced = 93, // the time presented is out of range or tolerance
+ k_EResultSmsCodeFailed = 94, // SMS code failure (no match, none pending, etc.)
+ k_EResultAccountLimitExceeded = 95, // Too many accounts access this resource
+ k_EResultAccountActivityLimitExceeded = 96, // Too many changes to this account
+ k_EResultPhoneActivityLimitExceeded = 97, // Too many changes to this phone
+ k_EResultRefundToWallet = 98, // Cannot refund to payment method, must use wallet
+ k_EResultEmailSendFailure = 99, // Cannot send an email
+ k_EResultNotSettled = 100, // Can't perform operation till payment has settled
+ k_EResultNeedCaptcha = 101, // Needs to provide a valid captcha
+ k_EResultGSLTDenied = 102, // a game server login token owned by this token's owner has been banned
+ k_EResultGSOwnerDenied = 103, // game server owner is denied for other reason (account lock, community ban, vac ban, missing phone)
+ k_EResultInvalidItemType = 104, // the type of thing we were requested to act on is invalid
+ k_EResultIPBanned = 105, // the ip address has been banned from taking this action
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+ k_EVoiceResultReceiverOutOfDate = 8,
+ k_EVoiceResultReceiverDidNotAnswer = 9,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+enum EDenyReason
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+};
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+enum EBeginAuthSessionResult
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+};
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+enum EAuthSessionResponse
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+ k_EAuthSessionResponsePublisherIssuedBan = 9, // The user is banned for this game. The ban came via the web api and not VAC
+};
+
+// results from UserHasLicenseForApp
+enum EUserHasLicenseForAppResult
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+};
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x0000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x0001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x0002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x0004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x0008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x0010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x0020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x0040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_RetailLicense = 0x0080, // has a retail license for game, (CD-Key etc)
+ k_EAppOwnershipFlags_LicenseLocked = 0x0100, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x0200, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x0400, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x0800, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x1000, // Recurring license, user is charged periodically
+ k_EAppOwnershipFlags_LicenseCanceled = 0x2000, // Mark as canceled, but might be still active if recurring
+ k_EAppOwnershipFlags_AutoGrant = 0x4000, // Ownership is based on any kind of autogrant license
+ k_EAppOwnershipFlags_PendingGift = 0x8000, // user has pending gift to redeem
+ k_EAppOwnershipFlags_RentalNotActivated = 0x10000, // Rental hasn't been activated yet
+ k_EAppOwnershipFlags_Rental = 0x20000, // Is a rental
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media_DEPRECATED = 0x010, // legacy - was used for game trailers, which are now just videos on the web
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+ k_EAppType_Hardware = 0x200, // a hardware device (Steam Machine, Steam Controller, Steam Link, etc.)
+ // 0x400 is up for grabs here
+ k_EAppType_Video = 0x800, // A video component of either a Film or TVSeries (may be the feature, an episode, preview, making-of, etc)
+ k_EAppType_Plugin = 0x1000, // Plug-in types for other Apps
+ k_EAppType_Music = 0x2000, // Music files
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+ //k_EChatEntryTypeReserved1 = 12, // No longer used
+ //k_EChatEntryTypeReserved2 = 13, // No longer used
+ k_EChatEntryTypeLinkBlocked = 14, // a link was removed by the chat filter.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Broadcast upload result details
+//-----------------------------------------------------------------------------
+enum EBroadcastUploadResult
+{
+ k_EBroadcastUploadResultNone = 0, // broadcast state unknown
+ k_EBroadcastUploadResultOK = 1, // broadcast was good, no problems
+ k_EBroadcastUploadResultInitFailed = 2, // broadcast init failed
+ k_EBroadcastUploadResultFrameFailed = 3, // broadcast frame upload failed
+ k_EBroadcastUploadResultTimeout = 4, // broadcast upload timed out
+ k_EBroadcastUploadResultBandwidthExceeded = 5, // broadcast send too much data
+ k_EBroadcastUploadResultLowFPS = 6, // broadcast FPS too low
+ k_EBroadcastUploadResultMissingKeyFrames = 7, // broadcast sending not enough key frames
+ k_EBroadcastUploadResultNoConnection = 8, // broadcast client failed to connect to relay
+ k_EBroadcastUploadResultRelayFailed = 9, // relay dropped the upload
+ k_EBroadcastUploadResultSettingsChanged = 10, // the client changed broadcast settings
+ k_EBroadcastUploadResultMissingAudio = 11, // client failed to send audio data
+ k_EBroadcastUploadResultTooFarBehind = 12, // clients was too slow uploading
+ k_EBroadcastUploadResultTranscodeBehind = 13, // server failed to keep up with transcode
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: codes for well defined launch options
+//-----------------------------------------------------------------------------
+enum ELaunchOptionType
+{
+ k_ELaunchOptionType_None = 0, // unknown what launch option does
+ k_ELaunchOptionType_Default = 1, // runs the game, app, whatever in default mode
+ k_ELaunchOptionType_SafeMode = 2, // runs the game in safe mode
+ k_ELaunchOptionType_Multiplayer = 3, // runs the game in multiplayer mode
+ k_ELaunchOptionType_Config = 4, // runs config tool for this game
+ k_ELaunchOptionType_OpenVR = 5, // runs game in VR mode using OpenVR
+ k_ELaunchOptionType_Server = 6, // runs dedicated server for this game
+ k_ELaunchOptionType_Editor = 7, // runs game editor
+ k_ELaunchOptionType_Manual = 8, // shows game manual
+ k_ELaunchOptionType_Benchmark = 9, // runs game benchmark
+ k_ELaunchOptionType_Option1 = 10, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option2 = 11, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option3 = 12, // generic run option, uses description field for game name
+ k_ELaunchOptionType_OtherVR = 13, // runs game in VR mode using the Oculus SDK or other vendor-specific VR SDK
+ k_ELaunchOptionType_OpenVROverlay = 14, // runs an OpenVR dashboard overlay
+
+
+ k_ELaunchOptionType_Dialog = 1000, // show launch options dialog
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this launch option is any of the vr launching types
+//-----------------------------------------------------------------------------
+static inline bool BIsVRLaunchOptionType( const ELaunchOptionType eType )
+{
+ return eType == k_ELaunchOptionType_OpenVR || eType == k_ELaunchOptionType_OpenVROverlay || eType == k_ELaunchOptionType_OtherVR;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: code points for VR HMD vendors and models
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN A DATABASE
+//-----------------------------------------------------------------------------
+enum EVRHMDType
+{
+ k_eEVRHMDType_Unknown = 0, // unknown vendor and model
+
+ k_eEVRHMDType_HTC_Dev = 1, // original HTC dev kits
+ k_eEVRHMDType_HTC_VivePre = 2, // htc vive pre
+ k_eEVRHMDType_HTC_Vive = 3, // htc vive consumer release
+
+ k_eEVRHMDType_HTC_Unknown = 20, // unknown htc hmd
+
+ k_eEVRHMDType_Oculus_DK1 = 21, // occulus DK1
+ k_eEVRHMDType_Oculus_DK2 = 22, // occulus DK2
+ k_eEVRHMDType_Oculus_Rift = 23, // occulus rift
+
+ k_eEVRHMDType_Oculus_Unknown = 40, // // occulus unknown HMD
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this is from an Oculus HMD
+//-----------------------------------------------------------------------------
+static inline bool BIsOcculusHMD( EVRHMDType eType )
+{
+ return eType == k_eEVRHMDType_Oculus_DK1 || eType == k_eEVRHMDType_Oculus_DK2 || eType == k_eEVRHMDType_Oculus_Rift || eType == k_eEVRHMDType_Oculus_Unknown;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this is from an Vive HMD
+//-----------------------------------------------------------------------------
+static inline bool BIsViveHMD( EVRHMDType eType )
+{
+ return eType == k_eEVRHMDType_HTC_Dev || eType == k_eEVRHMDType_HTC_VivePre || eType == k_eEVRHMDType_HTC_Vive || eType == k_eEVRHMDType_HTC_Unknown;
+}
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM2_USERID_STRUCTS )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ V_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, V_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ if ( pchExePath )
+ CRC32_ProcessBuffer( &crc32, pchExePath, V_strlen( pchExePath ) );
+ if ( pchAppName )
+ CRC32_ProcessBuffer( &crc32, pchAppName, V_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, V_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_137/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_137/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_137/steamhttpenums.h b/lsteamclient/steamworks_sdk_137/steamhttpenums.h
new file mode 100644
index 00000000..b2f05d94
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/steamhttpenums.h
@@ -0,0 +1,98 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+ k_EHTTPMethodPATCH,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401, // You probably want 403 or something else. 401 implies you're sending a WWW-Authenticate header and the client can sent an Authorization header in response.
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+ k_EHTTPStatusCode4xxUnknown = 418, // 418 is reserved, so we'll use it to mean unknown
+ k_EHTTPStatusCode429TooManyRequests = 429,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+ k_EHTTPStatusCode5xxUnknown = 599,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_137/steamps3params.h b/lsteamclient/steamworks_sdk_137/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_137/steamtypes.h b/lsteamclient/steamworks_sdk_137/steamtypes.h
new file mode 100644
index 00000000..2b805ce7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/steamtypes.h
@@ -0,0 +1,181 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+#ifdef API_GEN
+# define CLANG_ATTR(ATTR) __attribute__((annotate( ATTR )))
+#else
+# define CLANG_ATTR(ATTR)
+#endif
+
+#define METHOD_DESC(DESC) CLANG_ATTR( "desc:" #DESC ";" )
+#define IGNOREATTR() CLANG_ATTR( "ignore" )
+#define OUT_STRUCT() CLANG_ATTR( "out_struct: ;" )
+#define OUT_STRING() CLANG_ATTR( "out_string: ;" )
+#define OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" )
+#define OUT_ARRAY_COUNT(COUNTER, DESC) CLANG_ATTR( "out_array_count:" #COUNTER ";desc:" #DESC )
+#define ARRAY_COUNT(COUNTER) CLANG_ATTR( "array_count:" #COUNTER ";" )
+#define ARRAY_COUNT_D(COUNTER, DESC) CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC )
+#define BUFFER_COUNT(COUNTER) CLANG_ATTR( "buffer_count:" #COUNTER ";" )
+#define OUT_BUFFER_COUNT(COUNTER) CLANG_ATTR( "out_buffer_count:" #COUNTER ";" )
+#define OUT_STRING_COUNT(COUNTER) CLANG_ATTR( "out_string_count:" #COUNTER ";" )
+#define DESC(DESC) CLANG_ATTR("desc:" #DESC ";")
+#define CALL_RESULT(RESULT_TYPE) CLANG_ATTR("callresult:" #RESULT_TYPE ";")
+#define CALL_BACK(RESULT_TYPE) CLANG_ATTR("callback:" #RESULT_TYPE ";")
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef uint64 JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+const JobID_t k_JobIDNil = 0xffffffffffffffffull;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+typedef uint32 BundleId_t;
+const BundleId_t k_uBundleIdInvalid = 0;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+// ID for a depot content manifest
+typedef uint64 ManifestId_t;
+const ManifestId_t k_uManifestIdInvalid = 0;
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_137/steamuniverse.h b/lsteamclient/steamworks_sdk_137/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_137/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_138/isteamapplist.h b/lsteamclient/steamworks_sdk_138/isteamapplist.h
new file mode 100644
index 00000000..d0d7e7e7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, OUT_STRING() char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_138/isteamapps.h b/lsteamclient/steamworks_sdk_138/isteamapps.h
new file mode 100644
index 00000000..89c0aaf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamapps.h
@@ -0,0 +1,176 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 240; // max supported length of a legacy cd key
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request legacy cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+ // get download progress for optional DLC
+ virtual bool GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // return the buildid of this app, may change at any time based on backend updates to the game
+ virtual int GetAppBuildId() = 0;
+
+ // Request all proof of purchase keys for the calling appid and asociated DLC.
+ // A series of AppProofOfPurchaseKeyResponse_t callbacks will be sent with
+ // appropriate appid values, ending with a final callback where the m_nAppId
+ // member is k_uAppIdInvalid (zero).
+ virtual void RequestAllProofOfPurchaseKeys() = 0;
+
+ CALL_RESULT( FileDetailsResult_t )
+ virtual SteamAPICall_t GetFileDetails( const char* pszFileName ) = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION008"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RequestAppProofOfPurchaseKey/RequestAllProofOfPurchaseKeys
+// for supporting third-party CD keys, or other proof-of-purchase systems.
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 21 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ uint32 m_cchKeyLength;
+ char m_rgchKey[k_cubAppProofOfPurchaseKeyMax];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetFileDetails
+//-----------------------------------------------------------------------------
+struct FileDetailsResult_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 23 };
+ EResult m_eResult;
+ uint64 m_ulFileSize; // original file size in bytes
+ uint8 m_FileSHA[20]; // original file SHA1 hash
+ uint32 m_unFlags; //
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_138/isteamappticket.h b/lsteamclient/steamworks_sdk_138/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_138/isteamclient.h b/lsteamclient/steamworks_sdk_138/isteamclient.h
new file mode 100644
index 00000000..b6eb6b3d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamclient.h
@@ -0,0 +1,520 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#if defined(STEAM_API_EXPORTS) && !defined(API_GEN)
+#define STEAM_PRIVATE_API( ... ) __VA_ARGS__
+#elif defined(STEAM_API_EXPORTS) && defined(API_GEN)
+#define STEAM_PRIVATE_API( ... )
+#else
+#define STEAM_PRIVATE_API( ... ) protected: __VA_ARGS__ public:
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct ValvePackingSentinel_t
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+extern "C" typedef uint32 ( *SteamAPI_CheckCallbackRegistered_t )( int iCallbackNum );
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamMusicRemote;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+class ISteamHTMLSurface;
+class ISteamInventory;
+class ISteamVideo;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need these APIs if you have a more complex versioning scheme,
+// or if you want to implement a multiplexed gameserver where a single process
+// is handling multiple games at once with independent gameserver SteamIDs.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client.
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Deprecated. Applications should use SteamAPI_RunCallbacks() or SteamGameServer_RunCallbacks() instead.
+ STEAM_PRIVATE_API( virtual void RunFrame() = 0; )
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message.
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player Remote
+ virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // html page display
+ virtual ISteamHTMLSurface *GetISteamHTMLSurface(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // Helper functions for internal Steam usage
+ STEAM_PRIVATE_API( virtual void DEPRECATED_Set_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; )
+ STEAM_PRIVATE_API( virtual void DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; )
+ STEAM_PRIVATE_API( virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0; )
+
+ // inventory
+ virtual ISteamInventory *GetISteamInventory( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Video
+ virtual ISteamVideo *GetISteamVideo( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient017"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iClientDepotBuilderCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+enum { k_iSteamMusicRemoteCallbacks = 4100 };
+enum { k_iClientVRCallbacks = 4200 };
+enum { k_iClientGameNotificationCallbacks = 4300 };
+enum { k_iSteamGameNotificationCallbacks = 4400 };
+enum { k_iSteamHTMLSurfaceCallbacks = 4500 };
+enum { k_iClientVideoCallbacks = 4600 };
+enum { k_iClientInventoryCallbacks = 4700 };
+enum { k_iClientBluetoothManagerCallbacks = 4800 };
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+#ifdef STEAM_CALLBACK_INSPECTION_ENABLED
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname { \
+ typedef callbackname SteamCallback_t; \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+#else
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) struct callbackname { typedef callbackname SteamCallback_t; enum { k_iCallback = callbackid };
+#define CALLBACK_MEMBER( varidx, vartype, varname ) public: vartype varname ;
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) public: vartype varname [ varcount ];
+#define END_CALLBACK_INTERNAL_BEGIN( numvars )
+#define END_CALLBACK_INTERNAL_SWITCH( varidx )
+#define END_CALLBACK_INTERNAL_END() };
+#define END_DEFINE_CALLBACK_0() };
+
+#endif
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_10() \
+ END_CALLBACK_INTERNAL_BEGIN( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_11() \
+ END_CALLBACK_INTERNAL_BEGIN( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_12() \
+ END_CALLBACK_INTERNAL_BEGIN( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_13() \
+ END_CALLBACK_INTERNAL_BEGIN( 13 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_14() \
+ END_CALLBACK_INTERNAL_BEGIN( 14 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 13 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_138/isteamcontroller.h b/lsteamclient/steamworks_sdk_138/isteamcontroller.h
new file mode 100644
index 00000000..7ee4779d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamcontroller.h
@@ -0,0 +1,251 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define STEAM_CONTROLLER_MAX_COUNT 16
+
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTIONS 16
+
+#define STEAM_CONTROLLER_MAX_DIGITAL_ACTIONS 128
+
+#define STEAM_CONTROLLER_MAX_ORIGINS 8
+
+// When sending an option to a specific controller handle, you can send to all controllers via this command
+#define STEAM_CONTROLLER_HANDLE_ALL_CONTROLLERS UINT64_MAX
+
+#define STEAM_CONTROLLER_MIN_ANALOG_ACTION_DATA -1.0f
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTION_DATA 1.0f
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+enum EControllerSource
+{
+ k_EControllerSource_None,
+ k_EControllerSource_LeftTrackpad,
+ k_EControllerSource_RightTrackpad,
+ k_EControllerSource_Joystick,
+ k_EControllerSource_ABXY,
+ k_EControllerSource_Switch,
+ k_EControllerSource_LeftTrigger,
+ k_EControllerSource_RightTrigger,
+ k_EControllerSource_Gyro,
+ k_EControllerSource_Count
+};
+
+enum EControllerSourceMode
+{
+ k_EControllerSourceMode_None,
+ k_EControllerSourceMode_Dpad,
+ k_EControllerSourceMode_Buttons,
+ k_EControllerSourceMode_FourButtons,
+ k_EControllerSourceMode_AbsoluteMouse,
+ k_EControllerSourceMode_RelativeMouse,
+ k_EControllerSourceMode_JoystickMove,
+ k_EControllerSourceMode_JoystickCamera,
+ k_EControllerSourceMode_ScrollWheel,
+ k_EControllerSourceMode_Trigger,
+ k_EControllerSourceMode_TouchMenu,
+ k_EControllerSourceMode_MouseJoystick,
+ k_EControllerSourceMode_MouseRegion,
+ k_EControllerSourceMode_RadialMenu,
+ k_EControllerSourceMode_Switches
+};
+
+enum EControllerActionOrigin
+{
+ k_EControllerActionOrigin_None,
+ k_EControllerActionOrigin_A,
+ k_EControllerActionOrigin_B,
+ k_EControllerActionOrigin_X,
+ k_EControllerActionOrigin_Y,
+ k_EControllerActionOrigin_LeftBumper,
+ k_EControllerActionOrigin_RightBumper,
+ k_EControllerActionOrigin_LeftGrip,
+ k_EControllerActionOrigin_RightGrip,
+ k_EControllerActionOrigin_Start,
+ k_EControllerActionOrigin_Back,
+ k_EControllerActionOrigin_LeftPad_Touch,
+ k_EControllerActionOrigin_LeftPad_Swipe,
+ k_EControllerActionOrigin_LeftPad_Click,
+ k_EControllerActionOrigin_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_LeftPad_DPadWest,
+ k_EControllerActionOrigin_LeftPad_DPadEast,
+ k_EControllerActionOrigin_RightPad_Touch,
+ k_EControllerActionOrigin_RightPad_Swipe,
+ k_EControllerActionOrigin_RightPad_Click,
+ k_EControllerActionOrigin_RightPad_DPadNorth,
+ k_EControllerActionOrigin_RightPad_DPadSouth,
+ k_EControllerActionOrigin_RightPad_DPadWest,
+ k_EControllerActionOrigin_RightPad_DPadEast,
+ k_EControllerActionOrigin_LeftTrigger_Pull,
+ k_EControllerActionOrigin_LeftTrigger_Click,
+ k_EControllerActionOrigin_RightTrigger_Pull,
+ k_EControllerActionOrigin_RightTrigger_Click,
+ k_EControllerActionOrigin_LeftStick_Move,
+ k_EControllerActionOrigin_LeftStick_Click,
+ k_EControllerActionOrigin_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_LeftStick_DPadWest,
+ k_EControllerActionOrigin_LeftStick_DPadEast,
+ k_EControllerActionOrigin_Gyro_Move,
+ k_EControllerActionOrigin_Gyro_Pitch,
+ k_EControllerActionOrigin_Gyro_Yaw,
+ k_EControllerActionOrigin_Gyro_Roll,
+
+ k_EControllerActionOrigin_Count
+};
+
+// ControllerHandle_t is used to refer to a specific controller.
+// This handle will consistently identify a controller, even if it is disconnected and re-connected
+typedef uint64 ControllerHandle_t;
+
+
+// These handles are used to refer to a specific in-game action or action set
+// All action handles should be queried during initialization for performance reasons
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+
+#pragma pack( push, 1 )
+
+struct ControllerAnalogActionData_t
+{
+ // Type of data coming from this action, this will match what got specified in the action set
+ EControllerSourceMode eMode;
+
+ // The current state of this action; will be delta updates for mouse actions
+ float x, y;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+struct ControllerDigitalActionData_t
+{
+ // The current state of this action; will be true if currently pressed
+ bool bState;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+struct ControllerMotionData_t
+{
+ // Sensor-fused absolute rotation; will drift in heading
+ float rotQuatX;
+ float rotQuatY;
+ float rotQuatZ;
+ float rotQuatW;
+
+ // Positional acceleration
+ float posAccelX;
+ float posAccelY;
+ float posAccelZ;
+
+ // Angular velocity
+ float rotVelX;
+ float rotVelY;
+ float rotVelZ;
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ // Init and Shutdown must be called when starting/ending use of this interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Synchronize API state with the latest Steam Controller inputs available. This
+ // is performed automatically by SteamAPI_RunCallbacks, but for the absolute lowest
+ // possible latency, you call this directly before reading controller state.
+ virtual void RunFrame() = 0;
+
+ // Enumerate currently connected controllers
+ // handlesOut should point to a STEAM_CONTROLLER_MAX_COUNT sized array of ControllerHandle_t handles
+ // Returns the number of handles written to handlesOut
+ virtual int GetConnectedControllers( ControllerHandle_t *handlesOut ) = 0;
+
+ // Invokes the Steam overlay and brings up the binding screen
+ // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
+ virtual bool ShowBindingPanel( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTION SETS
+ // Lookup the handle for an Action Set. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerActionSetHandle_t GetActionSetHandle( const char *pszActionSetName ) = 0;
+
+ // Reconfigure the controller to use the specified action set (ie 'Menu', 'Walk' or 'Drive')
+ // This is cheap, and can be safely called repeatedly. It's often easier to repeatedly call it in
+ // your state loops, instead of trying to place it in all of your state transitions.
+ virtual void ActivateActionSet( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle ) = 0;
+ virtual ControllerActionSetHandle_t GetCurrentActionSet( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTIONS
+ // Lookup the handle for a digital action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerDigitalActionHandle_t GetDigitalActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of the supplied digital game action
+ virtual ControllerDigitalActionData_t GetDigitalActionData( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle ) = 0;
+
+ // Get the origin(s) for a digital action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ // Lookup the handle for an analog action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerAnalogActionHandle_t GetAnalogActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of these supplied analog game action
+ virtual ControllerAnalogActionData_t GetAnalogActionData( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle ) = 0;
+
+ // Get the origin(s) for an analog action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ virtual void StopAnalogActionMomentum( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction ) = 0;
+
+ // Trigger a haptic pulse on a controller
+ virtual void TriggerHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ // Trigger a pulse with a duty cycle of usDurationMicroSec / usOffMicroSec, unRepeat times.
+ // nFlags is currently unused and reserved for future use.
+ virtual void TriggerRepeatedHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags ) = 0;
+
+ // Returns the associated gamepad index for the specified controller, if emulating a gamepad
+ virtual int GetGamepadIndexForController( ControllerHandle_t ulControllerHandle ) = 0;
+
+ // Returns the associated controller handle for the specified emulated gamepad
+ virtual ControllerHandle_t GetControllerForGamepadIndex( int nIndex ) = 0;
+
+ // Returns raw motion data from the specified controller
+ virtual ControllerMotionData_t GetMotionData( ControllerHandle_t controllerHandle ) = 0;
+
+ // Attempt to display origins of given action in the controller HUD, for the currently active action set
+ // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
+ virtual bool ShowDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition ) = 0;
+ virtual bool ShowAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "SteamController004"
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_138/isteamfriends.h b/lsteamclient/steamworks_sdk_138/isteamfriends.h
new file mode 100644
index 00000000..865c9644
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamfriends.h
@@ -0,0 +1,636 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1, // this doesn't get stored; the user has just done an Ignore on an friendship invite
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5, // this is stored; the user has explicit blocked this other user from comments/chat/etc
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested_DEPRECATED = 7, // was used by the original implementation of the facebook linking feature, but now unused.
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+// friends group identifier type
+typedef int16 FriendsGroupID_t;
+
+// invalid friends group identifier constant
+const FriendsGroupID_t k_FriendsGroupID_Invalid = -1;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagChatMember = 0x1000,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ CALL_RESULT( SetPersonaNameResponse_t )
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, OUT_STRUCT() FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+ // friends steam level
+ virtual int GetFriendSteamLevel( CSteamID steamIDFriend ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // friend grouping (tag) apis
+ // returns the number of friends groups
+ virtual int GetFriendsGroupCount() = 0;
+ // returns the friends group ID for the given index (invalid indices return k_FriendsGroupID_Invalid)
+ virtual FriendsGroupID_t GetFriendsGroupIDByIndex( int iFG ) = 0;
+ // returns the name for the given friends group (NULL in the case of invalid friends group IDs)
+ virtual const char *GetFriendsGroupName( FriendsGroupID_t friendsGroupID ) = 0;
+ // returns the number of members in a given friends group
+ virtual int GetFriendsGroupMembersCount( FriendsGroupID_t friendsGroupID ) = 0;
+ // gets up to nMembersCount members of the given friends group, if fewer exist than requested those positions' SteamIDs will be invalid
+ virtual void GetFriendsGroupMembersList( FriendsGroupID_t friendsGroupID, OUT_ARRAY_CALL(nMembersCount, GetFriendsGroupMembersCount, friendsGroupID ) CSteamID *pOutSteamIDMembers, int nMembersCount ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( ARRAY_COUNT(cClansToRequest) CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ CALL_RESULT( ClanOfficerListResponse_t )
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Note the following limits: k_cchMaxRichPresenceKeys, k_cchMaxRichPresenceKeyLength, k_cchMaxRichPresenceValueLength
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ CALL_RESULT( JoinClanChatRoomCompletionResult_t )
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, OUT_STRUCT() CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ CALL_RESULT( FriendsGetFollowerCount_t )
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ CALL_RESULT( FriendsIsFollowing_t )
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ CALL_RESULT( FriendsEnumerateFollowingList_t )
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends015"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_138/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_138/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_138/isteamgameserver.h b/lsteamclient/steamworks_sdk_138/isteamgameserver.h
new file mode 100644
index 00000000..2004c830
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamgameserver.h
@@ -0,0 +1,387 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ CALL_RESULT( GSReputation_t )
+ virtual SteamAPICall_t GetServerReputation() = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ CALL_RESULT( AssociateWithClanResult_t )
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ CALL_RESULT( ComputeNewPlayerCompatibilityResult_t )
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_138/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_138/isteamgameserverstats.h
new file mode 100644
index 00000000..e4c7d648
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamgameserverstats.h
@@ -0,0 +1,101 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ CALL_RESULT( GSStatsReceived_t )
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ CALL_RESULT( GSStatsStored_t )
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_138/isteamhtmlsurface.h b/lsteamclient/steamworks_sdk_138/isteamhtmlsurface.h
new file mode 100644
index 00000000..9b08e4c3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamhtmlsurface.h
@@ -0,0 +1,453 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to display html pages in a texture
+//
+//=============================================================================
+
+#ifndef ISTEAMHTMLSURFACE_H
+#define ISTEAMHTMLSURFACE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+typedef uint32 HHTMLBrowser;
+const uint32 INVALID_HTMLBROWSER = 0;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for displaying HTML pages and interacting with them
+//-----------------------------------------------------------------------------
+class ISteamHTMLSurface
+{
+public:
+ virtual ~ISteamHTMLSurface() {}
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Create a browser object for display of a html page, when creation is complete the call handle
+ // will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser.
+ // The user agent string is a substring to be added to the general user agent string so you can
+ // identify your client on web servers.
+ // The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if
+ // you do not require this functionality.
+ //
+ // YOU MUST HAVE IMPLEMENTED HANDLERS FOR HTML_BrowserReady_t, HTML_StartRequest_t,
+ // HTML_JSAlert_t, HTML_JSConfirm_t, and HTML_FileOpenDialog_t! See the CALLBACKS
+ // section of this interface (AllowStartRequest, etc) for more details. If you do
+ // not implement these callback handlers, the browser may appear to hang instead of
+ // navigating to new pages or triggering javascript popups.
+ //
+ CALL_RESULT( HTML_BrowserReady_t )
+ virtual SteamAPICall_t CreateBrowser( const char *pchUserAgent, const char *pchUserCSS ) = 0;
+
+ // Call this when you are done with a html surface, this lets us free the resources being used by it
+ virtual void RemoveBrowser( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // Navigate to this URL, results in a HTML_StartRequest_t as the request commences
+ virtual void LoadURL( HHTMLBrowser unBrowserHandle, const char *pchURL, const char *pchPostData ) = 0;
+
+ // Tells the surface the size in pixels to display the surface
+ virtual void SetSize( HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight ) = 0;
+
+ // Stop the load of the current html page
+ virtual void StopLoad( HHTMLBrowser unBrowserHandle ) = 0;
+ // Reload (most likely from local cache) the current page
+ virtual void Reload( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate back in the page history
+ virtual void GoBack( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate forward in the page history
+ virtual void GoForward( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // add this header to any url requests from this browser
+ virtual void AddHeader( HHTMLBrowser unBrowserHandle, const char *pchKey, const char *pchValue ) = 0;
+ // run this javascript script in the currently loaded page
+ virtual void ExecuteJavascript( HHTMLBrowser unBrowserHandle, const char *pchScript ) = 0;
+
+ enum EHTMLMouseButton
+ {
+ eHTMLMouseButton_Left = 0,
+ eHTMLMouseButton_Right = 1,
+ eHTMLMouseButton_Middle = 2,
+ };
+
+ // Mouse click and mouse movement commands
+ virtual void MouseUp( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDown( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDoubleClick( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ // x and y are relative to the HTML bounds
+ virtual void MouseMove( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+ // nDelta is pixels of scroll
+ virtual void MouseWheel( HHTMLBrowser unBrowserHandle, int32 nDelta ) = 0;
+
+ enum EMouseCursor
+ {
+ dc_user = 0,
+ dc_none,
+ dc_arrow,
+ dc_ibeam,
+ dc_hourglass,
+ dc_waitarrow,
+ dc_crosshair,
+ dc_up,
+ dc_sizenw,
+ dc_sizese,
+ dc_sizene,
+ dc_sizesw,
+ dc_sizew,
+ dc_sizee,
+ dc_sizen,
+ dc_sizes,
+ dc_sizewe,
+ dc_sizens,
+ dc_sizeall,
+ dc_no,
+ dc_hand,
+ dc_blank, // don't show any custom cursor, just use your default
+ dc_middle_pan,
+ dc_north_pan,
+ dc_north_east_pan,
+ dc_east_pan,
+ dc_south_east_pan,
+ dc_south_pan,
+ dc_south_west_pan,
+ dc_west_pan,
+ dc_north_west_pan,
+ dc_alias,
+ dc_cell,
+ dc_colresize,
+ dc_copycur,
+ dc_verticaltext,
+ dc_rowresize,
+ dc_zoomin,
+ dc_zoomout,
+ dc_help,
+ dc_custom,
+
+ dc_last, // custom cursors start from this value and up
+ };
+
+ enum EHTMLKeyModifiers
+ {
+ k_eHTMLKeyModifier_None = 0,
+ k_eHTMLKeyModifier_AltDown = 1 << 0,
+ k_eHTMLKeyModifier_CtrlDown = 1 << 1,
+ k_eHTMLKeyModifier_ShiftDown = 1 << 2,
+ };
+
+ // keyboard interactions, native keycode is the virtual key code value from your OS
+ virtual void KeyDown( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ virtual void KeyUp( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ // cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press)
+ virtual void KeyChar( HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+
+ // programmatically scroll this many pixels on the page
+ virtual void SetHorizontalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+ virtual void SetVerticalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+
+ // tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things
+ virtual void SetKeyFocus( HHTMLBrowser unBrowserHandle, bool bHasKeyFocus ) = 0;
+
+ // open the current pages html code in the local editor of choice, used for debugging
+ virtual void ViewSource( HHTMLBrowser unBrowserHandle ) = 0;
+ // copy the currently selected text on the html page to the local clipboard
+ virtual void CopyToClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+ // paste from the local clipboard to the current html page
+ virtual void PasteFromClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element
+ virtual void Find( HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse ) = 0;
+ // cancel a currently running find
+ virtual void StopFind( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // return details about the link at position x,y on the current page
+ virtual void GetLinkAtPosition( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+
+ // set a webcookie for the hostname in question
+ virtual void SetCookie( const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath = "/", RTime32 nExpires = 0, bool bSecure = false, bool bHTTPOnly = false ) = 0;
+
+ // Zoom the current page by flZoom ( from 0.0 to 2.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care)
+ virtual void SetPageScaleFactor( HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY ) = 0;
+
+ // Enable/disable low-resource background mode, where javascript and repaint timers are throttled, resources are
+ // more aggressively purged from memory, and audio/video elements are paused. When background mode is enabled,
+ // all HTML5 video and audio objects will execute ".pause()" and gain the property "._steam_background_paused = 1".
+ // When background mode is disabled, any video or audio objects with that property will resume with ".play()".
+ virtual void SetBackgroundMode( HHTMLBrowser unBrowserHandle, bool bBackgroundMode ) = 0;
+
+ // CALLBACKS
+ //
+ // These set of functions are used as responses to callback requests
+ //
+
+ // You MUST call this in response to a HTML_StartRequest_t callback
+ // Set bAllowed to true to allow this navigation, false to cancel it and stay
+ // on the current page. You can use this feature to limit the valid pages
+ // allowed in your HTML surface.
+ virtual void AllowStartRequest( HHTMLBrowser unBrowserHandle, bool bAllowed ) = 0;
+
+ // You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback
+ // Set bResult to true for the OK option of a confirm, use false otherwise
+ virtual void JSDialogResponse( HHTMLBrowser unBrowserHandle, bool bResult ) = 0;
+
+ // You MUST call this in response to a HTML_FileOpenDialog_t callback
+ IGNOREATTR()
+ virtual void FileLoadDialogResponse( HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles ) = 0;
+};
+
+#define STEAMHTMLSURFACE_INTERFACE_VERSION "STEAMHTMLSURFACE_INTERFACE_VERSION_003"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser is ready for use
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_BrowserReady_t, k_iSteamHTMLSurfaceCallbacks + 1 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this browser is now fully created and ready to navigate to pages
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser has a pending paint
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_NeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 2)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint
+CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called
+CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture
+CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture
+CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update
+CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update
+CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update
+CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update
+CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered
+CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages
+END_DEFINE_CALLBACK_12()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser wanted to navigate to a new page
+// NOTE - you MUST call AllowStartRequest in response to this callback
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_StartRequest_t, k_iSteamHTMLSurfaceCallbacks + 3)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface navigating
+CALLBACK_MEMBER(1, const char *, pchURL) // the url they wish to navigate to
+CALLBACK_MEMBER(2, const char *, pchTarget) // the html link target type (i.e _blank, _self, _parent, _top )
+CALLBACK_MEMBER(3, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER(4, bool, bIsRedirect) // true if this was a http/html redirect from the last load request
+END_DEFINE_CALLBACK_5()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser has been requested to close due to user interaction (usually from a javascript window.close() call)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_CloseBrowser_t, k_iSteamHTMLSurfaceCallbacks + 4)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser is navigating to a new url
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_URLChanged_t, k_iSteamHTMLSurfaceCallbacks + 5 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface navigating
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the url they wish to navigate to
+CALLBACK_MEMBER( 2, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER( 3, bool, bIsRedirect ) // true if this was a http/html redirect from the last load request
+CALLBACK_MEMBER( 4, const char *, pchPageTitle ) // the title of the page
+CALLBACK_MEMBER( 5, bool, bNewNavigation ) // true if this was from a fresh tab and not a click on an existing page
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A page is finished loading
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FinishedRequest_t, k_iSteamHTMLSurfaceCallbacks + 6 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+CALLBACK_MEMBER( 2, const char *, pchPageTitle ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a request to load this url in a new tab
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_OpenLinkInNewTab_t, k_iSteamHTMLSurfaceCallbacks + 7 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the page has a new title now
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ChangedTitle_t, k_iSteamHTMLSurfaceCallbacks + 8 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: results from a search
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SearchResults_t, k_iSteamHTMLSurfaceCallbacks + 9 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unResults ) //
+CALLBACK_MEMBER( 2, uint32, unCurrentMatch ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: page history status changed on the ability to go backwards and forward
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_CanGoBackAndForward_t, k_iSteamHTMLSurfaceCallbacks + 10 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, bool, bCanGoBack ) //
+CALLBACK_MEMBER( 2, bool, bCanGoForward ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the horizontal scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HorizontalScroll_t, k_iSteamHTMLSurfaceCallbacks + 11 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool , bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the vertical scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_VerticalScroll_t, k_iSteamHTMLSurfaceCallbacks + 12 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool, bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetLinkAtPosition call
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_LinkAtPosition_t, k_iSteamHTMLSurfaceCallbacks + 13 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, x ) // NOTE - Not currently set
+CALLBACK_MEMBER( 2, uint32, y ) // NOTE - Not currently set
+CALLBACK_MEMBER( 3, const char *, pchURL ) //
+CALLBACK_MEMBER( 4, bool, bInput ) //
+CALLBACK_MEMBER( 5, bool, bLiveLink ) //
+END_DEFINE_CALLBACK_6()
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript alert dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSAlert_t, k_iSteamHTMLSurfaceCallbacks + 14 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript confirmation dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSConfirm_t, k_iSteamHTMLSurfaceCallbacks + 15 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: when received show a file open dialog
+// then call FileLoadDialogResponse with the file(s) the user selected.
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FileOpenDialog_t, k_iSteamHTMLSurfaceCallbacks + 16 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+CALLBACK_MEMBER( 2, const char *, pchInitialFile ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new html window has been created
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_NewWindow_t, k_iSteamHTMLSurfaceCallbacks + 21 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the current surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the page to load
+CALLBACK_MEMBER( 2, uint32, unX ) // the x pos into the page to display the popup
+CALLBACK_MEMBER( 3, uint32, unY ) // the y pos into the page to display the popup
+CALLBACK_MEMBER( 4, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 5, uint32, unTall ) // the total height of the pBGRA texture
+CALLBACK_MEMBER( 6, HHTMLBrowser, unNewWindow_BrowserHandle ) // the handle of the new window surface
+END_DEFINE_CALLBACK_7()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: change the cursor to display
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SetCursor_t, k_iSteamHTMLSurfaceCallbacks + 22 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, eMouseCursor ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: informational message from the browser
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_StatusText_t, k_iSteamHTMLSurfaceCallbacks + 23 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ShowToolTip_t, k_iSteamHTMLSurfaceCallbacks + 24 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: update the text of an existing tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_UpdateToolTip_t, k_iSteamHTMLSurfaceCallbacks + 25 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: hide the tooltip you are showing
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HideToolTip_t, k_iSteamHTMLSurfaceCallbacks + 26 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMHTMLSURFACE_H
diff --git a/lsteamclient/steamworks_sdk_138/isteamhttp.h b/lsteamclient/steamworks_sdk_138/isteamhttp.h
new file mode 100644
index 00000000..d96a631f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamhttp.h
@@ -0,0 +1,210 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+typedef uint32 HTTPCookieContainerHandle;
+#define INVALID_HTTPCOOKIE_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Both http and https are supported,
+ // so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+
+ // Creates a cookie container handle which you must later free with ReleaseCookieContainer(). If bAllowResponsesToModify=true
+ // than any response to your requests using this cookie container may add new cookies which may be transmitted with
+ // future requests. If bAllowResponsesToModify=false than only cookies you explicitly set will be sent. This API is just for
+ // during process lifetime, after steam restarts no cookies are persisted and you have no way to access the cookie container across
+ // repeat executions of your process.
+ virtual HTTPCookieContainerHandle CreateCookieContainer( bool bAllowResponsesToModify ) = 0;
+
+ // Release a cookie container you are finished using, freeing it's memory
+ virtual bool ReleaseCookieContainer( HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Adds a cookie to the specified cookie container that will be used with future requests.
+ virtual bool SetCookie( HTTPCookieContainerHandle hCookieContainer, const char *pchHost, const char *pchUrl, const char *pchCookie ) = 0;
+
+ // Set the cookie container to use for a HTTP request
+ virtual bool SetHTTPRequestCookieContainer( HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Set the extra user agent info for a request, this doesn't clobber the normal user agent, it just adds the extra info on the end
+ virtual bool SetHTTPRequestUserAgentInfo( HTTPRequestHandle hRequest, const char *pchUserAgentInfo ) = 0;
+
+ // Set that https request should require verified SSL certificate via machines certificate trust store
+ virtual bool SetHTTPRequestRequiresVerifiedCertificate( HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate ) = 0;
+
+ // Set an absolute timeout on the HTTP request, this is just a total time timeout different than the network activity timeout
+ // which can bump everytime we get more data
+ virtual bool SetHTTPRequestAbsoluteTimeoutMS( HTTPRequestHandle hRequest, uint32 unMilliseconds ) = 0;
+
+ // Check if the reason the request failed was because we timed it out (rather than some harder failure)
+ virtual bool GetHTTPRequestWasTimedOut( HTTPRequestHandle hRequest, bool *pbWasTimedOut ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+
+ uint32 m_unBodySize; // Same as GetHTTPResponseBodySize()
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_138/isteaminventory.h b/lsteamclient/steamworks_sdk_138/isteaminventory.h
new file mode 100644
index 00000000..b18043dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteaminventory.h
@@ -0,0 +1,357 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Inventory
+//
+//=============================================================================
+
+#ifndef ISTEAMINVENTORY_H
+#define ISTEAMINVENTORY_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// Every individual instance of an item has a globally-unique ItemInstanceID.
+// This ID is unique to the combination of (player, specific item instance)
+// and will not be transferred to another player or re-used for another item.
+typedef uint64 SteamItemInstanceID_t;
+
+static const SteamItemInstanceID_t k_SteamItemInstanceIDInvalid = (SteamItemInstanceID_t)~0;
+
+// Types of items in your game are identified by a 32-bit "item definition number".
+// Valid definition numbers are between 1 and 999999999; numbers less than or equal to
+// zero are invalid, and numbers greater than or equal to one billion (1x10^9) are
+// reserved for internal Steam use.
+typedef int32 SteamItemDef_t;
+
+
+enum ESteamItemFlags
+{
+ // Item status flags - these flags are permanently attached to specific item instances
+ k_ESteamItemNoTrade = 1 << 0, // This item is account-locked and cannot be traded or given away.
+
+ // Action confirmation flags - these flags are set one time only, as part of a result set
+ k_ESteamItemRemoved = 1 << 8, // The item has been destroyed, traded away, expired, or otherwise invalidated
+ k_ESteamItemConsumed = 1 << 9, // The item quantity has been decreased by 1 via ConsumeItem API.
+
+ // All other flag bits are currently reserved for internal Steam use at this time.
+ // Do not assume anything about the state of other flags which are not defined here.
+};
+
+struct SteamItemDetails_t
+{
+ SteamItemInstanceID_t m_itemId;
+ SteamItemDef_t m_iDefinition;
+ uint16 m_unQuantity;
+ uint16 m_unFlags; // see ESteamItemFlags
+};
+
+typedef int32 SteamInventoryResult_t;
+
+static const SteamInventoryResult_t k_SteamInventoryResultInvalid = -1;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Inventory query and manipulation API
+//-----------------------------------------------------------------------------
+class ISteamInventory
+{
+public:
+
+ // INVENTORY ASYNC RESULT MANAGEMENT
+ //
+ // Asynchronous inventory queries always output a result handle which can be used with
+ // GetResultStatus, GetResultItems, etc. A SteamInventoryResultReady_t callback will
+ // be triggered when the asynchronous result becomes ready (or fails).
+ //
+
+ // Find out the status of an asynchronous inventory result handle. Possible values:
+ // k_EResultPending - still in progress
+ // k_EResultOK - done, result ready
+ // k_EResultExpired - done, result ready, maybe out of date (see DeserializeResult)
+ // k_EResultInvalidParam - ERROR: invalid API call parameters
+ // k_EResultServiceUnavailable - ERROR: service temporarily down, you may retry later
+ // k_EResultLimitExceeded - ERROR: operation would exceed per-user inventory limits
+ // k_EResultFail - ERROR: unknown / generic error
+ METHOD_DESC(Find out the status of an asynchronous inventory result handle.)
+ virtual EResult GetResultStatus( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Copies the contents of a result set into a flat array. The specific
+ // contents of the result set depend on which query which was used.
+ METHOD_DESC(Copies the contents of a result set into a flat array. The specific contents of the result set depend on which query which was used.)
+ virtual bool GetResultItems( SteamInventoryResult_t resultHandle,
+ OUT_ARRAY_COUNT( punOutItemsArraySize,Output array) SteamItemDetails_t *pOutItemsArray,
+ uint32 *punOutItemsArraySize ) = 0;
+
+ // Returns the server time at which the result was generated. Compare against
+ // the value of IClientUtils::GetServerRealTime() to determine age.
+ METHOD_DESC(Returns the server time at which the result was generated. Compare against the value of IClientUtils::GetServerRealTime() to determine age.)
+ virtual uint32 GetResultTimestamp( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Returns true if the result belongs to the target steam ID, false if the
+ // result does not. This is important when using DeserializeResult, to verify
+ // that a remote player is not pretending to have a different user's inventory.
+ METHOD_DESC(Returns true if the result belongs to the target steam ID or false if the result does not. This is important when using DeserializeResult to verify that a remote player is not pretending to have a different users inventory.)
+ virtual bool CheckResultSteamID( SteamInventoryResult_t resultHandle, CSteamID steamIDExpected ) = 0;
+
+ // Destroys a result handle and frees all associated memory.
+ METHOD_DESC(Destroys a result handle and frees all associated memory.)
+ virtual void DestroyResult( SteamInventoryResult_t resultHandle ) = 0;
+
+
+ // INVENTORY ASYNC QUERY
+ //
+
+ // Captures the entire state of the current user's Steam inventory.
+ // You must call DestroyResult on this handle when you are done with it.
+ // Returns false and sets *pResultHandle to zero if inventory is unavailable.
+ // Note: calls to this function are subject to rate limits and may return
+ // cached results if called too frequently. It is suggested that you call
+ // this function only when you are about to display the user's full inventory,
+ // or if you expect that the inventory may have changed.
+ METHOD_DESC(Captures the entire state of the current users Steam inventory.)
+ virtual bool GetAllItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+
+ // Captures the state of a subset of the current user's Steam inventory,
+ // identified by an array of item instance IDs. The results from this call
+ // can be serialized and passed to other players to "prove" that the current
+ // user owns specific items, without exposing the user's entire inventory.
+ // For example, you could call GetItemsByID with the IDs of the user's
+ // currently equipped cosmetic items and serialize this to a buffer, and
+ // then transmit this buffer to other players upon joining a game.
+ METHOD_DESC(Captures the state of a subset of the current users Steam inventory identified by an array of item instance IDs.)
+ virtual bool GetItemsByID( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT( unCountInstanceIDs ) const SteamItemInstanceID_t *pInstanceIDs, uint32 unCountInstanceIDs ) = 0;
+
+
+ // RESULT SERIALIZATION AND AUTHENTICATION
+ //
+ // Serialized result sets contain a short signature which can't be forged
+ // or replayed across different game sessions. A result set can be serialized
+ // on the local client, transmitted to other players via your game networking,
+ // and deserialized by the remote players. This is a secure way of preventing
+ // hackers from lying about posessing rare/high-value items.
+
+ // Serializes a result set with signature bytes to an output buffer. Pass
+ // NULL as an output buffer to get the required size via punOutBufferSize.
+ // The size of a serialized result depends on the number items which are being
+ // serialized. When securely transmitting items to other players, it is
+ // recommended to use "GetItemsByID" first to create a minimal result set.
+ // Results have a built-in timestamp which will be considered "expired" after
+ // an hour has elapsed. See DeserializeResult for expiration handling.
+ virtual bool SerializeResult( SteamInventoryResult_t resultHandle, OUT_BUFFER_COUNT(punOutBufferSize) void *pOutBuffer, uint32 *punOutBufferSize ) = 0;
+
+ // Deserializes a result set and verifies the signature bytes. Returns false
+ // if bRequireFullOnlineVerify is set but Steam is running in Offline mode.
+ // Otherwise returns true and then delivers error codes via GetResultStatus.
+ //
+ // The bRESERVED_MUST_BE_FALSE flag is reserved for future use and should not
+ // be set to true by your game at this time.
+ //
+ // DeserializeResult has a potential soft-failure mode where the handle status
+ // is set to k_EResultExpired. GetResultItems() still succeeds in this mode.
+ // The "expired" result could indicate that the data may be out of date - not
+ // just due to timed expiration (one hour), but also because one of the items
+ // in the result set may have been traded or consumed since the result set was
+ // generated. You could compare the timestamp from GetResultTimestamp() to
+ // ISteamUtils::GetServerRealTime() to determine how old the data is. You could
+ // simply ignore the "expired" result code and continue as normal, or you
+ // could challenge the player with expired data to send an updated result set.
+ virtual bool DeserializeResult( SteamInventoryResult_t *pOutResultHandle, BUFFER_COUNT(punOutBufferSize) const void *pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE = false ) = 0;
+
+
+ // INVENTORY ASYNC MODIFICATION
+ //
+
+ // GenerateItems() creates one or more items and then generates a SteamInventoryCallback_t
+ // notification with a matching nCallbackContext parameter. This API is insecure, and could
+ // be abused by hacked clients. It is, however, very useful as a development cheat or as
+ // a means of prototyping item-related features for your game. The use of GenerateItems can
+ // be restricted to certain item definitions or fully blocked via the Steamworks website.
+ // If punArrayQuantity is not NULL, it should be the same length as pArrayItems and should
+ // describe the quantity of each item to generate.
+ virtual bool GenerateItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, ARRAY_COUNT(unArrayLength) const uint32 *punArrayQuantity, uint32 unArrayLength ) = 0;
+
+ // GrantPromoItems() checks the list of promotional items for which the user may be eligible
+ // and grants the items (one time only). On success, the result set will include items which
+ // were granted, if any. If no items were granted because the user isn't eligible for any
+ // promotions, this is still considered a success.
+ METHOD_DESC(GrantPromoItems() checks the list of promotional items for which the user may be eligible and grants the items (one time only).)
+ virtual bool GrantPromoItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+ // AddPromoItem() / AddPromoItems() are restricted versions of GrantPromoItems(). Instead of
+ // scanning for all eligible promotional items, the check is restricted to a single item
+ // definition or set of item definitions. This can be useful if your game has custom UI for
+ // showing a specific promo item to the user.
+ virtual bool AddPromoItem( SteamInventoryResult_t *pResultHandle, SteamItemDef_t itemDef ) = 0;
+ virtual bool AddPromoItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, uint32 unArrayLength ) = 0;
+
+ // ConsumeItem() removes items from the inventory, permanently. They cannot be recovered.
+ // Not for the faint of heart - if your game implements item removal at all, a high-friction
+ // UI confirmation process is highly recommended. Similar to GenerateItems, punArrayQuantity
+ // can be NULL or else an array of the same length as pArrayItems which describe the quantity
+ // of each item to destroy. ConsumeItem can be restricted to certain item definitions or
+ // fully blocked via the Steamworks website to minimize support/abuse issues such as the
+ // clasic "my brother borrowed my laptop and deleted all of my rare items".
+ METHOD_DESC(ConsumeItem() removes items from the inventory permanently.)
+ virtual bool ConsumeItem( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity ) = 0;
+
+ // ExchangeItems() is an atomic combination of GenerateItems and DestroyItems. It can be
+ // used to implement crafting recipes or transmutations, or items which unpack themselves
+ // into other items. Like GenerateItems, this is a flexible and dangerous API which is
+ // meant for rapid prototyping. You can configure restrictions on ExchangeItems via the
+ // Steamworks website, such as limiting it to a whitelist of input/output combinations
+ // corresponding to recipes.
+ // (Note: although GenerateItems may be hard or impossible to use securely in your game,
+ // ExchangeItems is perfectly reasonable to use once the whitelists are set accordingly.)
+ virtual bool ExchangeItems( SteamInventoryResult_t *pResultHandle,
+ ARRAY_COUNT(unArrayGenerateLength) const SteamItemDef_t *pArrayGenerate, ARRAY_COUNT(unArrayGenerateLength) const uint32 *punArrayGenerateQuantity, uint32 unArrayGenerateLength,
+ ARRAY_COUNT(unArrayDestroyLength) const SteamItemInstanceID_t *pArrayDestroy, ARRAY_COUNT(unArrayDestroyLength) const uint32 *punArrayDestroyQuantity, uint32 unArrayDestroyLength ) = 0;
+
+
+ // TransferItemQuantity() is intended for use with items which are "stackable" (can have
+ // quantity greater than one). It can be used to split a stack into two, or to transfer
+ // quantity from one stack into another stack of identical items. To split one stack into
+ // two, pass k_SteamItemInstanceIDInvalid for itemIdDest and a new item will be generated.
+ virtual bool TransferItemQuantity( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest ) = 0;
+
+
+ // TIMED DROPS AND PLAYTIME CREDIT
+ //
+
+ // Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when
+ // active gameplay begins, and at least once every two minutes afterwards. The backend
+ // performs its own time calculations, so the precise timing of the heartbeat is not
+ // critical as long as you send at least one heartbeat every two minutes. Calling the
+ // function more often than that is not harmful, it will simply have no effect. Note:
+ // players may be able to spoof this message by hacking their client, so you should not
+ // attempt to use this as a mechanism to restrict playtime credits. It is simply meant
+ // to distinguish between being in any kind of gameplay situation vs the main menu or
+ // a pre-game launcher window. (If you are stingy with handing out playtime credit, it
+ // will only encourage players to run bots or use mouse/kb event simulators.)
+ //
+ // Playtime credit accumulation can be capped on a daily or weekly basis through your
+ // Steamworks configuration.
+ //
+ METHOD_DESC(Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when active gameplay begins and at least once every two minutes afterwards.)
+ virtual void SendItemDropHeartbeat() = 0;
+
+ // Playtime credit must be consumed and turned into item drops by your game. Only item
+ // definitions which are marked as "playtime item generators" can be spawned. The call
+ // will return an empty result set if there is not enough playtime credit for a drop.
+ // Your game should call TriggerItemDrop at an appropriate time for the user to receive
+ // new items, such as between rounds or while the player is dead. Note that players who
+ // hack their clients could modify the value of "dropListDefinition", so do not use it
+ // to directly control rarity. It is primarily useful during testing and development,
+ // where you may wish to perform experiments with different types of drops.
+ METHOD_DESC(Playtime credit must be consumed and turned into item drops by your game.)
+ virtual bool TriggerItemDrop( SteamInventoryResult_t *pResultHandle, SteamItemDef_t dropListDefinition ) = 0;
+
+
+ // IN-GAME TRADING
+ //
+ // TradeItems() implements limited in-game trading of items, if you prefer not to use
+ // the overlay or an in-game web browser to perform Steam Trading through the website.
+ // You should implement a UI where both players can see and agree to a trade, and then
+ // each client should call TradeItems simultaneously (+/- 5 seconds) with matching
+ // (but reversed) parameters. The result is the same as if both players performed a
+ // Steam Trading transaction through the web. Each player will get an inventory result
+ // confirming the removal or quantity changes of the items given away, and the new
+ // item instance id numbers and quantities of the received items.
+ // (Note: new item instance IDs are generated whenever an item changes ownership.)
+ virtual bool TradeItems( SteamInventoryResult_t *pResultHandle, CSteamID steamIDTradePartner,
+ ARRAY_COUNT(nArrayGiveLength) const SteamItemInstanceID_t *pArrayGive, ARRAY_COUNT(nArrayGiveLength) const uint32 *pArrayGiveQuantity, uint32 nArrayGiveLength,
+ ARRAY_COUNT(nArrayGetLength) const SteamItemInstanceID_t *pArrayGet, ARRAY_COUNT(nArrayGetLength) const uint32 *pArrayGetQuantity, uint32 nArrayGetLength ) = 0;
+
+
+ // ITEM DEFINITIONS
+ //
+ // Item definitions are a mapping of "definition IDs" (integers between 1 and 1000000)
+ // to a set of string properties. Some of these properties are required to display items
+ // on the Steam community web site. Other properties can be defined by applications.
+ // Use of these functions is optional; there is no reason to call LoadItemDefinitions
+ // if your game hardcodes the numeric definition IDs (eg, purple face mask = 20, blue
+ // weapon mod = 55) and does not allow for adding new item types without a client patch.
+ //
+
+ // LoadItemDefinitions triggers the automatic load and refresh of item definitions.
+ // Every time new item definitions are available (eg, from the dynamic addition of new
+ // item types while players are still in-game), a SteamInventoryDefinitionUpdate_t
+ // callback will be fired.
+ METHOD_DESC(LoadItemDefinitions triggers the automatic load and refresh of item definitions.)
+ virtual bool LoadItemDefinitions() = 0;
+
+ // GetItemDefinitionIDs returns the set of all defined item definition IDs (which are
+ // defined via Steamworks configuration, and not necessarily contiguous integers).
+ // If pItemDefIDs is null, the call will return true and *punItemDefIDsArraySize will
+ // contain the total size necessary for a subsequent call. Otherwise, the call will
+ // return false if and only if there is not enough space in the output array.
+ virtual bool GetItemDefinitionIDs(
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+
+ // GetItemDefinitionProperty returns a string property from a given item definition.
+ // Note that some properties (for example, "name") may be localized and will depend
+ // on the current Steam language settings (see ISteamApps::GetCurrentGameLanguage).
+ // Property names are always composed of ASCII letters, numbers, and/or underscores.
+ // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available
+ // property names. If pchValueBuffer is NULL, *punValueBufferSize will contain the
+ // suggested buffer size. Otherwise it will be the number of bytes actually copied
+ // to pchValueBuffer. If the results do not fit in the given buffer, partial
+ // results may be copied.
+ virtual bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPropertyName,
+ OUT_STRING_COUNT(punValueBufferSizeOut) char *pchValueBuffer, uint32 *punValueBufferSizeOut ) = 0;
+};
+
+#define STEAMINVENTORY_INTERFACE_VERSION "STEAMINVENTORY_INTERFACE_V001"
+
+
+// SteamInventoryResultReady_t callbacks are fired whenever asynchronous
+// results transition from "Pending" to "OK" or an error state. There will
+// always be exactly one callback per handle.
+struct SteamInventoryResultReady_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 0 };
+ SteamInventoryResult_t m_handle;
+ EResult m_result;
+};
+
+
+// SteamInventoryFullUpdate_t callbacks are triggered when GetAllItems
+// successfully returns a result which is newer / fresher than the last
+// known result. (It will not trigger if the inventory hasn't changed,
+// or if results from two overlapping calls are reversed in flight and
+// the earlier result is already known to be stale/out-of-date.)
+// The normal ResultReady callback will still be triggered immediately
+// afterwards; this is an additional notification for your convenience.
+struct SteamInventoryFullUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 1 };
+ SteamInventoryResult_t m_handle;
+};
+
+
+// A SteamInventoryDefinitionUpdate_t callback is triggered whenever
+// item definitions have been updated, which could be in response to
+// LoadItemDefinitions() or any other async request which required
+// a definition update in order to process results from the server.
+struct SteamInventoryDefinitionUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_138/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_138/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_138/isteammatchmaking.h b/lsteamclient/steamworks_sdk_138/isteammatchmaking.h
new file mode 100644
index 00000000..5af69129
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteammatchmaking.h
@@ -0,0 +1,751 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) = 0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ CALL_RESULT( LobbyMatchList_t )
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ CALL_RESULT( LobbyCreated_t )
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ CALL_RESULT( LobbyEnter_t )
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, OUT_STRUCT() CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, OUT_STRUCT() CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+ CALL_BACK( LobbyChatUpdate_t )
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_138/isteammusic.h b/lsteamclient/steamworks_sdk_138/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_138/isteammusicremote.h b/lsteamclient/steamworks_sdk_138/isteammusicremote.h
new file mode 100644
index 00000000..5893ef4b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteammusicremote.h
@@ -0,0 +1,129 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSICREMOTE_H
+#define ISTEAMMUSICREMOTE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteammusic.h"
+
+#define k_SteamMusicNameMaxLength 255
+#define k_SteamMusicPNGMaxLength 65535
+
+
+class ISteamMusicRemote
+{
+public:
+ // Service Definition
+ virtual bool RegisterSteamMusicRemote( const char *pchName ) = 0;
+ virtual bool DeregisterSteamMusicRemote() = 0;
+ virtual bool BIsCurrentMusicRemote() = 0;
+ virtual bool BActivationSuccess( bool bValue ) = 0;
+
+ virtual bool SetDisplayName( const char *pchDisplayName ) = 0;
+ virtual bool SetPNGIcon_64x64( void *pvBuffer, uint32 cbBufferLength ) = 0;
+
+ // Abilities for the user interface
+ virtual bool EnablePlayPrevious(bool bValue) = 0;
+ virtual bool EnablePlayNext( bool bValue ) = 0;
+ virtual bool EnableShuffled( bool bValue ) = 0;
+ virtual bool EnableLooped( bool bValue ) = 0;
+ virtual bool EnableQueue( bool bValue ) = 0;
+ virtual bool EnablePlaylists( bool bValue ) = 0;
+
+ // Status
+ virtual bool UpdatePlaybackStatus( AudioPlayback_Status nStatus ) = 0;
+ virtual bool UpdateShuffled( bool bValue ) = 0;
+ virtual bool UpdateLooped( bool bValue ) = 0;
+ virtual bool UpdateVolume( float flValue ) = 0; // volume is between 0.0 and 1.0
+
+ // Current Entry
+ virtual bool CurrentEntryWillChange() = 0;
+ virtual bool CurrentEntryIsAvailable( bool bAvailable ) = 0;
+ virtual bool UpdateCurrentEntryText( const char *pchText ) = 0;
+ virtual bool UpdateCurrentEntryElapsedSeconds( int nValue ) = 0;
+ virtual bool UpdateCurrentEntryCoverArt( void *pvBuffer, uint32 cbBufferLength ) = 0;
+ virtual bool CurrentEntryDidChange() = 0;
+
+ // Queue
+ virtual bool QueueWillChange() = 0;
+ virtual bool ResetQueueEntries() = 0;
+ virtual bool SetQueueEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentQueueEntry( int nID ) = 0;
+ virtual bool QueueDidChange() = 0;
+
+ // Playlist
+ virtual bool PlaylistWillChange() = 0;
+ virtual bool ResetPlaylistEntries() = 0;
+ virtual bool SetPlaylistEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentPlaylistEntry( int nID ) = 0;
+ virtual bool PlaylistDidChange() = 0;
+};
+
+#define STEAMMUSICREMOTE_INTERFACE_VERSION "STEAMMUSICREMOTE_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillActivate_t, k_iSteamMusicRemoteCallbacks + 1)
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillDeactivate_t, k_iSteamMusicRemoteCallbacks + 2 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteToFront_t, k_iSteamMusicRemoteCallbacks + 3 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWillQuit_t, k_iSteamMusicRemoteCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlay_t, k_iSteamMusicRemoteCallbacks + 5 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPause_t, k_iSteamMusicRemoteCallbacks + 6 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayPrevious_t, k_iSteamMusicRemoteCallbacks + 7 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayNext_t, k_iSteamMusicRemoteCallbacks + 8 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsShuffled_t, k_iSteamMusicRemoteCallbacks + 9 )
+ CALLBACK_MEMBER( 0, bool, m_bShuffled )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsLooped_t, k_iSteamMusicRemoteCallbacks + 10 )
+ CALLBACK_MEMBER(0, bool, m_bLooped )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsVolume_t, k_iSteamMusicCallbacks + 11 )
+ CALLBACK_MEMBER(0, float, m_flNewVolume)
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsQueueEntry_t, k_iSteamMusicCallbacks + 12 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsPlaylistEntry_t, k_iSteamMusicCallbacks + 13 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayingRepeatStatus_t, k_iSteamMusicRemoteCallbacks + 14 )
+ CALLBACK_MEMBER(0, int, m_nPlayingRepeatStatus )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+
+#endif // #define ISTEAMMUSICREMOTE_H
diff --git a/lsteamclient/steamworks_sdk_138/isteamnetworking.h b/lsteamclient/steamworks_sdk_138/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_138/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_138/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_138/isteamremotestorage.h b/lsteamclient/steamworks_sdk_138/isteamremotestorage.h
new file mode 100644
index 00000000..7ca558e2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamremotestorage.h
@@ -0,0 +1,681 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0, // normal Workshop item that can be subscribed to
+ k_EWorkshopFileTypeMicrotransaction = 1, // Workshop item that is meant to be voted on for the purpose of selling in-game
+ k_EWorkshopFileTypeCollection = 2, // a collection of Workshop or Greenlight items
+ k_EWorkshopFileTypeArt = 3, // artwork
+ k_EWorkshopFileTypeVideo = 4, // external video
+ k_EWorkshopFileTypeScreenshot = 5, // screenshot
+ k_EWorkshopFileTypeGame = 6, // Greenlight game entry
+ k_EWorkshopFileTypeSoftware = 7, // Greenlight software entry
+ k_EWorkshopFileTypeConcept = 8, // Greenlight concept
+ k_EWorkshopFileTypeWebGuide = 9, // Steam web guide
+ k_EWorkshopFileTypeIntegratedGuide = 10, // application integrated guide
+ k_EWorkshopFileTypeMerch = 11, // Workshop merchandise meant to be voted on for the purpose of being sold
+ k_EWorkshopFileTypeControllerBinding = 12, // Steam Controller bindings
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13, // internal
+ k_EWorkshopFileTypeSteamVideo = 14, // Steam video
+ k_EWorkshopFileTypeGameManagedItem = 15, // managed completely by the game, not the user, and not shown on the web
+
+ // Update k_EWorkshopFileTypeMax if you add values.
+ k_EWorkshopFileTypeMax = 16
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+ k_EWorkshopVoteLater = 3,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+
+ CALL_RESULT( RemoteStorageFileWriteAsyncComplete_t )
+ virtual SteamAPICall_t FileWriteAsync( const char *pchFile, const void *pvData, uint32 cubData ) = 0;
+
+ CALL_RESULT( RemoteStorageFileReadAsyncComplete_t )
+ virtual SteamAPICall_t FileReadAsync( const char *pchFile, uint32 nOffset, uint32 cubToRead ) = 0;
+ virtual bool FileReadAsyncComplete( SteamAPICall_t hReadCall, void *pvBuffer, uint32 cubToRead ) = 0;
+
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ CALL_RESULT( RemoteStorageFileShareResult_t )
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( uint64 *pnTotalBytes, uint64 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ CALL_RESULT( RemoteStorageDownloadUGCResult_t )
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, OUT_STRING() char **ppchName, int32 *pnFileSizeInBytes, OUT_STRUCT() CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ CALL_RESULT( RemoteStoragePublishFileProgress_t )
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ CALL_RESULT( RemoteStorageUpdatePublishedFileResult_t )
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ CALL_RESULT( RemoteStorageGetPublishedFileDetailsResult_t )
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ CALL_RESULT( RemoteStorageDeletePublishedFileResult_t )
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ CALL_RESULT( RemoteStorageEnumerateUserPublishedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ CALL_RESULT( RemoteStorageSubscribePublishedFileResult_t )
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageEnumerateUserSubscribedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ CALL_RESULT( RemoteStorageUnsubscribePublishedFileResult_t )
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ CALL_RESULT( RemoteStorageGetPublishedItemVoteDetailsResult_t )
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageUpdateUserPublishedItemVoteResult_t )
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ CALL_RESULT( RemoteStorageGetPublishedItemVoteDetailsResult_t )
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageEnumerateUserPublishedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ CALL_RESULT( RemoteStoragePublishFileProgress_t )
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ CALL_RESULT( RemoteStorageSetUserPublishedFileActionResult_t )
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ CALL_RESULT( RemoteStorageEnumeratePublishedFilesByUserActionResult_t )
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ CALL_RESULT( RemoteStorageEnumerateWorkshopFilesResult_t )
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ CALL_RESULT( RemoteStorageDownloadUGCResult_t )
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION014"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ uint64 m_ulUnused; // not used anymore
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileWriteAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileWriteAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 31 };
+ EResult m_eResult; // result
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileReadAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileReadAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 32 };
+ SteamAPICall_t m_hFileReadAsync; // call handle of the async read which was made
+ EResult m_eResult; // result
+ uint32 m_nOffset; // offset in the file this read was at
+ uint32 m_cubRead; // amount read - will the <= the amount requested
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_138/isteamscreenshots.h b/lsteamclient/steamworks_sdk_138/isteamscreenshots.h
new file mode 100644
index 00000000..653b28a4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamscreenshots.h
@@ -0,0 +1,116 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+enum EVRScreenshotType
+{
+ k_EVRScreenshotType_None = 0,
+ k_EVRScreenshotType_Mono = 1,
+ k_EVRScreenshotType_Stereo = 2,
+ k_EVRScreenshotType_MonoCubemap = 3,
+ k_EVRScreenshotType_MonoPanorama = 4,
+ k_EVRScreenshotType_StereoPanorama = 5
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+
+ // Returns true if the app has hooked the screenshot
+ virtual bool IsScreenshotsHooked() = 0;
+
+ // Adds a VR screenshot to the user's screenshot library from disk in the supported type.
+ // pchFilename should be the normal 2D image used in the library view
+ // pchVRFilename should contain the image that matches the correct type
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddVRScreenshotToLibrary( EVRScreenshotType eType, const char *pchFilename, const char *pchVRFilename ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION003"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMSCREENSHOTS_H
+
diff --git a/lsteamclient/steamworks_sdk_138/isteamugc.h b/lsteamclient/steamworks_sdk_138/isteamugc.h
new file mode 100644
index 00000000..34af559f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamugc.h
@@ -0,0 +1,453 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+ k_EUGCMatchingUGCType_GameManagedItems = 12, // game managed items (not managed by users)
+ k_EUGCMatchingUGCType_All = ~0, // return everything
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+ k_EUGCQuery_RankedByTotalUniqueSubscriptions = 12,
+ k_EUGCQuery_RankedByPlaytimeTrend = 13,
+ k_EUGCQuery_RankedByTotalPlaytime = 14,
+ k_EUGCQuery_RankedByAveragePlaytimeTrend = 15,
+ k_EUGCQuery_RankedByLifetimeAveragePlaytime = 16,
+ k_EUGCQuery_RankedByPlaytimeSessionsTrend = 17,
+ k_EUGCQuery_RankedByLifetimePlaytimeSessions = 18,
+};
+
+enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0, // The item update handle was invalid, job might be finished, listen too SubmitItemUpdateResult_t
+ k_EItemUpdateStatusPreparingConfig = 1, // The item update is processing configuration data
+ k_EItemUpdateStatusPreparingContent = 2, // The item update is reading and processing content files
+ k_EItemUpdateStatusUploadingContent = 3, // The item update is uploading content changes to Steam
+ k_EItemUpdateStatusUploadingPreviewFile = 4, // The item update is uploading new preview file image
+ k_EItemUpdateStatusCommittingChanges = 5 // The item update is committing all changes
+};
+
+enum EItemState
+{
+ k_EItemStateNone = 0, // item not tracked on client
+ k_EItemStateSubscribed = 1, // current user is subscribed to this item. Not just cached.
+ k_EItemStateLegacyItem = 2, // item was created with ISteamRemoteStorage
+ k_EItemStateInstalled = 4, // item is installed and usable (but maybe out of date)
+ k_EItemStateNeedsUpdate = 8, // items needs an update. Either because it's not installed yet or creator updated content
+ k_EItemStateDownloading = 16, // item update is currently downloading
+ k_EItemStateDownloadPending = 32, // DownloadItem() was called for this item, content isn't available until DownloadItemResult_t is fired
+};
+
+enum EItemStatistic
+{
+ k_EItemStatistic_NumSubscriptions = 0,
+ k_EItemStatistic_NumFavorites = 1,
+ k_EItemStatistic_NumFollowers = 2,
+ k_EItemStatistic_NumUniqueSubscriptions = 3,
+ k_EItemStatistic_NumUniqueFavorites = 4,
+ k_EItemStatistic_NumUniqueFollowers = 5,
+ k_EItemStatistic_NumUniqueWebsiteViews = 6,
+ k_EItemStatistic_ReportScore = 7,
+ k_EItemStatistic_NumSecondsPlayed = 8,
+ k_EItemStatistic_NumPlaytimeSessions = 9,
+ k_EItemStatistic_NumComments = 10,
+};
+
+enum EItemPreviewType
+{
+ k_EItemPreviewType_Image = 0, // standard image file expected (e.g. jpg, png, gif, etc.)
+ k_EItemPreviewType_YouTubeVideo = 1, // video id is stored
+ k_EItemPreviewType_Sketchfab = 2, // model id is stored
+ k_EItemPreviewType_EnvironmentMap_HorizontalCross = 3, // standard image file expected - cube map in the layout
+ // +---+---+-------+
+ // | |Up | |
+ // +---+---+---+---+
+ // | L | F | R | B |
+ // +---+---+---+---+
+ // | |Dn | |
+ // +---+---+---+---+
+ k_EItemPreviewType_EnvironmentMap_LatLong = 4, // standard image file expected
+ k_EItemPreviewType_ReservedMax = 255, // you can specify your own types above this value
+};
+
+const uint32 kNumUGCResultsPerPage = 50;
+const uint32 k_cchDeveloperMetadataMax = 5000;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+ // collection details
+ uint32 m_unNumChildren;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for the details of the given published file ids (the RequestUGCDetails call is deprecated and replaced with this)
+ virtual UGCQueryHandle_t CreateQueryUGCDetailsRequest( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+
+ // Send the query to Steam
+ CALL_RESULT( SteamUGCQueryCompleted_t )
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+ virtual bool GetQueryUGCPreviewURL( UGCQueryHandle_t handle, uint32 index, OUT_STRING_COUNT(cchURLSize) char *pchURL, uint32 cchURLSize ) = 0;
+ virtual bool GetQueryUGCMetadata( UGCQueryHandle_t handle, uint32 index, OUT_STRING_COUNT(cchMetadatasize) char *pchMetadata, uint32 cchMetadatasize ) = 0;
+ virtual bool GetQueryUGCChildren( UGCQueryHandle_t handle, uint32 index, PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0;
+ virtual bool GetQueryUGCStatistic( UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint64 *pStatValue ) = 0;
+ virtual uint32 GetQueryUGCNumAdditionalPreviews( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCAdditionalPreview( UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, OUT_STRING_COUNT(cchURLSize) char *pchURLOrVideoID, uint32 cchURLSize, OUT_STRING_COUNT(cchURLSize) char *pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType *pPreviewType ) = 0;
+ virtual uint32 GetQueryUGCNumKeyValueTags( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCKeyValueTag( UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, OUT_STRING_COUNT(cchKeySize) char *pchKey, uint32 cchKeySize, OUT_STRING_COUNT(cchValueSize) char *pchValue, uint32 cchValueSize ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnOnlyIDs( UGCQueryHandle_t handle, bool bReturnOnlyIDs ) = 0;
+ virtual bool SetReturnKeyValueTags( UGCQueryHandle_t handle, bool bReturnKeyValueTags ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnMetadata( UGCQueryHandle_t handle, bool bReturnMetadata ) = 0;
+ virtual bool SetReturnChildren( UGCQueryHandle_t handle, bool bReturnChildren ) = 0;
+ virtual bool SetReturnAdditionalPreviews( UGCQueryHandle_t handle, bool bReturnAdditionalPreviews ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetLanguage( UGCQueryHandle_t handle, const char *pchLanguage ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+ virtual bool AddRequiredKeyValueTag( UGCQueryHandle_t handle, const char *pKey, const char *pValue ) = 0;
+
+ // DEPRECATED - Use CreateQueryUGCDetailsRequest call above instead!
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+ // Steam Workshop Creator API
+ CALL_RESULT( CreateItemResult_t )
+ virtual SteamAPICall_t CreateItem( AppId_t nConsumerAppId, EWorkshopFileType eFileType ) = 0; // create new item for this app with no content attached yet
+
+ virtual UGCUpdateHandle_t StartItemUpdate( AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID ) = 0; // start an UGC item update. Set changed properties before commiting update with CommitItemUpdate()
+
+ virtual bool SetItemTitle( UGCUpdateHandle_t handle, const char *pchTitle ) = 0; // change the title of an UGC item
+ virtual bool SetItemDescription( UGCUpdateHandle_t handle, const char *pchDescription ) = 0; // change the description of an UGC item
+ virtual bool SetItemUpdateLanguage( UGCUpdateHandle_t handle, const char *pchLanguage ) = 0; // specify the language of the title or description that will be set
+ virtual bool SetItemMetadata( UGCUpdateHandle_t handle, const char *pchMetaData ) = 0; // change the metadata of an UGC item (max = k_cchDeveloperMetadataMax)
+ virtual bool SetItemVisibility( UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item
+ virtual bool SetItemTags( UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item
+ virtual bool SetItemContent( UGCUpdateHandle_t handle, const char *pszContentFolder ) = 0; // update item content from this local folder
+ virtual bool SetItemPreview( UGCUpdateHandle_t handle, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file, which must be under 1MB in size
+ virtual bool RemoveItemKeyValueTags( UGCUpdateHandle_t handle, const char *pchKey ) = 0; // remove any existing key-value tags with the specified key
+ virtual bool AddItemKeyValueTag( UGCUpdateHandle_t handle, const char *pchKey, const char *pchValue ) = 0; // add new key-value tags for the item. Note that there can be multiple values for a tag.
+ virtual bool AddItemPreviewFile( UGCUpdateHandle_t handle, const char *pszPreviewFile, EItemPreviewType type ) = 0; // add preview file for this item. pszPreviewFile points to local file, which must be under 1MB in size
+ virtual bool AddItemPreviewVideo( UGCUpdateHandle_t handle, const char *pszVideoID ) = 0; // add preview video for this item
+ virtual bool UpdateItemPreviewFile( UGCUpdateHandle_t handle, uint32 index, const char *pszPreviewFile ) = 0; // updates an existing preview file for this item. pszPreviewFile points to local file, which must be under 1MB in size
+ virtual bool UpdateItemPreviewVideo( UGCUpdateHandle_t handle, uint32 index, const char *pszVideoID ) = 0; // updates an existing preview video for this item
+ virtual bool RemoveItemPreview( UGCUpdateHandle_t handle, uint32 index ) = 0; // remove a preview by index starting at 0 (previews are sorted)
+
+ CALL_RESULT( SubmitItemUpdateResult_t )
+ virtual SteamAPICall_t SubmitItemUpdate( UGCUpdateHandle_t handle, const char *pchChangeNote ) = 0; // commit update process started with StartItemUpdate()
+ virtual EItemUpdateStatus GetItemUpdateProgress( UGCUpdateHandle_t handle, uint64 *punBytesProcessed, uint64* punBytesTotal ) = 0;
+
+ // Steam Workshop Consumer API
+ CALL_RESULT( SetUserItemVoteResult_t )
+ virtual SteamAPICall_t SetUserItemVote( PublishedFileId_t nPublishedFileID, bool bVoteUp ) = 0;
+ CALL_RESULT( GetUserItemVoteResult_t )
+ virtual SteamAPICall_t GetUserItemVote( PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( UserFavoriteItemsListChanged_t )
+ virtual SteamAPICall_t AddItemToFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( UserFavoriteItemsListChanged_t )
+ virtual SteamAPICall_t RemoveItemFromFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( RemoteStorageSubscribePublishedFileResult_t )
+ virtual SteamAPICall_t SubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // subscribe to this item, will be installed ASAP
+ CALL_RESULT( RemoteStorageUnsubscribePublishedFileResult_t )
+ virtual SteamAPICall_t UnsubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // unsubscribe from this item, will be uninstalled after game quits
+ virtual uint32 GetNumSubscribedItems() = 0; // number of subscribed items
+ virtual uint32 GetSubscribedItems( PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; // all subscribed item PublishFileIDs
+
+ // get EItemState flags about item on this client
+ virtual uint32 GetItemState( PublishedFileId_t nPublishedFileID ) = 0;
+
+ // get info about currently installed content on disc for items that have k_EItemStateInstalled set
+ // if k_EItemStateLegacyItem is set, pchFolder contains the path to the legacy file itself (not a folder)
+ virtual bool GetItemInstallInfo( PublishedFileId_t nPublishedFileID, uint64 *punSizeOnDisk, OUT_STRING_COUNT( cchFolderSize ) char *pchFolder, uint32 cchFolderSize, uint32 *punTimeStamp ) = 0;
+
+ // get info about pending update for items that have k_EItemStateNeedsUpdate set. punBytesTotal will be valid after download started once
+ virtual bool GetItemDownloadInfo( PublishedFileId_t nPublishedFileID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // download new or update already installed item. If function returns true, wait for DownloadItemResult_t. If the item is already installed,
+ // then files on disk should not be used until callback received. If item is not subscribed to, it will be cached for some time.
+ // If bHighPriority is set, any other item download will be suspended and this item downloaded ASAP.
+ virtual bool DownloadItem( PublishedFileId_t nPublishedFileID, bool bHighPriority ) = 0;
+
+ // game servers can set a specific workshop folder before issuing any UGC commands.
+ // This is helpful if you want to support multiple game servers running out of the same install folder
+ virtual bool BInitWorkshopForGameServer( DepotId_t unWorkshopDepotID, const char *pszFolder ) = 0;
+
+ // SuspendDownloads( true ) will suspend all workshop downloads until SuspendDownloads( false ) is called or the game ends
+ virtual void SuspendDownloads( bool bSuspend ) = 0;
+
+ // usage tracking
+ CALL_RESULT( StartPlaytimeTrackingResult_t );
+ virtual SteamAPICall_t StartPlaytimeTracking( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+ CALL_RESULT( StopPlaytimeTrackingResult_t );
+ virtual SteamAPICall_t StopPlaytimeTracking( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+ CALL_RESULT( StopPlaytimeTrackingResult_t );
+ virtual SteamAPICall_t StopPlaytimeTrackingForAllItems() = 0;
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION009"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::CreateItem()
+//-----------------------------------------------------------------------------
+struct CreateItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 3 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId; // new item got this UGC PublishFileID
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::SubmitItemUpdate()
+//-----------------------------------------------------------------------------
+struct SubmitItemUpdateResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 4 };
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a Workshop item has been installed or updated
+//-----------------------------------------------------------------------------
+struct ItemInstalled_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 5 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of DownloadItem(), existing item files can be accessed again
+//-----------------------------------------------------------------------------
+struct DownloadItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 6 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: result of AddItemToFavorites() or RemoveItemFromFavorites()
+//-----------------------------------------------------------------------------
+struct UserFavoriteItemsListChanged_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 7 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bWasAddRequest;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SetUserItemVote()
+//-----------------------------------------------------------------------------
+struct SetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 8 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVoteUp;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserItemVote()
+//-----------------------------------------------------------------------------
+struct GetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 9 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVotedUp;
+ bool m_bVotedDown;
+ bool m_bVoteSkipped;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to StartPlaytimeTracking()
+//-----------------------------------------------------------------------------
+struct StartPlaytimeTrackingResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 10 };
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to StopPlaytimeTracking()
+//-----------------------------------------------------------------------------
+struct StopPlaytimeTrackingResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 11 };
+ EResult m_eResult;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_138/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_138/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_138/isteamuser.h b/lsteamclient/steamworks_sdk_138/isteamuser.h
new file mode 100644
index 00000000..151e0e18
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamuser.h
@@ -0,0 +1,355 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ CALL_RESULT( EncryptedAppTicketResponse_t )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+ // Requests a URL which authenticates an in-game browser for store check-out,
+ // and then redirects to the specified URL. As long as the in-game browser
+ // accepts and handles session cookies, Steam microtransaction checkout pages
+ // will automatically recognize the user instead of presenting a login page.
+ // The result of this API call will be a StoreAuthURLResponse_t callback.
+ // NOTE: The URL has a very short lifetime to prevent history-snooping attacks,
+ // so you should only call this API when you are about to launch the browser,
+ // or else immediately navigate to the result URL using a hidden browser window.
+ // NOTE 2: The resulting authorization cookie has an expiration time of one day,
+ // so it would be a good idea to request and visit a new auth URL every 12 hours.
+ CALL_RESULT( StoreAuthURLResponse_t )
+ virtual SteamAPICall_t RequestStoreAuthURL( const char *pchRedirectURL ) = 0;
+
+ // gets whether the users phone number is verified
+ virtual bool BIsPhoneVerified() = 0;
+
+ // gets whether the user has two factor enabled on their account
+ virtual bool BIsTwoFactorEnabled() = 0;
+
+ // gets whether the users phone number is identifying
+ virtual bool BIsPhoneIdentifying() = 0;
+
+ // gets whether the users phone number is awaiting (re)verification
+ virtual bool BIsPhoneRequiringVerification() = 0;
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser019"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+ bool m_bStillRetrying;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Signaled whenever licenses change
+//-----------------------------------------------------------------------------
+struct LicensesUpdated_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 25 };
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to ISteamUser::RequestStoreAuthURL
+//-----------------------------------------------------------------------------
+struct StoreAuthURLResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 65 };
+ char m_szURL[512];
+};
+
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_138/isteamuserstats.h b/lsteamclient/steamworks_sdk_138/isteamuserstats.h
new file mode 100644
index 00000000..8bb42697
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamuserstats.h
@@ -0,0 +1,476 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ CALL_BACK( UserStatsReceived_t )
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ CALL_RESULT( UserStatsReceived_t )
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ CALL_RESULT(LeaderboardFindResult_t)
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ CALL_RESULT( LeaderboardFindResult_t )
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ CALL_RESULT( LeaderboardScoresDownloaded_t )
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ METHOD_DESC(Downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers)
+ CALL_RESULT( LeaderboardScoresDownloaded_t )
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard,
+ ARRAY_COUNT_D(cUsers, Array of users to retrieve) CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ CALL_RESULT( LeaderboardScoreUploaded_t )
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ CALL_RESULT( LeaderboardUGCSet_t )
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ CALL_RESULT( NumberOfCurrentPlayers_t )
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ CALL_RESULT( GlobalAchievementPercentagesReady_t )
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ CALL_RESULT( GlobalStatsReceived_t )
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_138/isteamutils.h b/lsteamclient/steamworks_sdk_138/isteamutils.h
new file mode 100644
index 00000000..4c7b8ef1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamutils.h
@@ -0,0 +1,254 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time. Number of seconds since January 1, 1970, GMT (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // Deprecated. Applications should use SteamAPI_RunCallbacks() instead. Game servers do not need to call this function.
+ STEAM_PRIVATE_API( virtual void RunFrame() = 0; )
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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 an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ CALL_RESULT( CheckFileSignature_t )
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+
+ // Sets the inset of the overlay notification from the corner specified by SetOverlayNotificationPosition.
+ virtual void SetOverlayNotificationInset( int nHorizontalInset, int nVerticalInset ) = 0;
+
+ // returns true if Steam & the Steam Overlay are running in Big Picture mode
+ // Games much be launched through the Steam client to enable the Big Picture overlay. During development,
+ // a game can be added as a non-steam game to the developers library to test this feature
+ virtual bool IsSteamInBigPictureMode() = 0;
+
+ // ask SteamUI to create and render its OpenVR dashboard
+ virtual void StartVRDashboard() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils008"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+ int m_iCallback;
+ uint32 m_cubParam;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_138/isteamvideo.h b/lsteamclient/steamworks_sdk_138/isteamvideo.h
new file mode 100644
index 00000000..4431b4a1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/isteamvideo.h
@@ -0,0 +1,60 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Video
+//
+//=============================================================================
+
+#ifndef ISTEAMVIDEO_H
+#define ISTEAMVIDEO_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Video API
+//-----------------------------------------------------------------------------
+class ISteamVideo
+{
+public:
+
+ // Get a URL suitable for streaming the given Video app ID's video
+ virtual void GetVideoURL( AppId_t unVideoAppID ) = 0;
+
+ // returns true if user is uploading a live broadcast
+ virtual bool IsBroadcasting( int *pnNumViewers ) = 0;
+};
+
+#define STEAMVIDEO_INTERFACE_VERSION "STEAMVIDEO_INTERFACE_V001"
+
+DEFINE_CALLBACK( BroadcastUploadStart_t, k_iClientVideoCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( BroadcastUploadStop_t, k_iClientVideoCallbacks + 5 )
+ CALLBACK_MEMBER( 0, EBroadcastUploadResult, m_eResult )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( GetVideoURLResult_t, k_iClientVideoCallbacks + 11 )
+ CALLBACK_MEMBER( 0, EResult, m_eResult )
+ CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID )
+ CALLBACK_MEMBER( 2, char, m_rgchURL[256] )
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMVIDEO_H
diff --git a/lsteamclient/steamworks_sdk_138/matchmakingtypes.h b/lsteamclient/steamworks_sdk_138/matchmakingtypes.h
new file mode 100644
index 00000000..fcb61664
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/matchmakingtypes.h
@@ -0,0 +1,251 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ servernetadr_t() : m_usConnectionPort( 0 ), m_usQueryPort( 0 ), m_unIP( 0 ) {}
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_138/steam_api.h b/lsteamclient/steamworks_sdk_138/steam_api.h
new file mode 100644
index 00000000..788db9b8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/steam_api.h
@@ -0,0 +1,394 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteammusicremote.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+#include "isteamhtmlsurface.h"
+#include "isteaminventory.h"
+#include "isteamvideo.h"
+
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+
+// SteamAPI_Init must be called before using any other API functions. If it fails, an
+// error message will be output to the debugger (or stderr) with further information.
+S_API bool S_CALLTYPE SteamAPI_Init();
+
+// SteamAPI_Shutdown should be called during process shutdown if possible.
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// SteamAPI_RestartAppIfNecessary ensures that your executable was launched through Steam.
+//
+// Returns true if the current process should terminate. Steam is now re-launching your application.
+//
+// Returns false if no action needs to be taken. This means that your executable was started through
+// the Steam client, or a steam_appid.txt file is present in your game's directory (for development).
+// Your current process should continue if false is returned.
+//
+// NOTE: If you use the Steam DRM wrapper on your primary executable file, this check is unnecessary
+// since the DRM wrapper will ensure that your application was launched properly through Steam.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// Many Steam API functions allocate a small amount of thread-local memory for parameter storage.
+// SteamAPI_ReleaseCurrentThreadMemory() will free API memory associated with the calling thread.
+// This function is also called automatically by SteamAPI_RunCallbacks(), so a single-threaded
+// program never needs to explicitly call this function.
+S_API void S_CALLTYPE SteamAPI_ReleaseCurrentThreadMemory();
+
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Global accessors for Steamworks C++ APIs. See individual isteam*.h files for details.
+// You should not cache the results of these accessors or pass the result pointers across
+// modules! Different modules may be compiled against different SDK header versions, and
+// the interface pointers could therefore be different across modules. Every line of code
+// which calls into a Steamworks API should retrieve the interface from a global accessor.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#if !defined( STEAM_API_EXPORTS )
+inline ISteamClient *SteamClient();
+inline ISteamUser *SteamUser();
+inline ISteamFriends *SteamFriends();
+inline ISteamUtils *SteamUtils();
+inline ISteamMatchmaking *SteamMatchmaking();
+inline ISteamUserStats *SteamUserStats();
+inline ISteamApps *SteamApps();
+inline ISteamNetworking *SteamNetworking();
+inline ISteamMatchmakingServers *SteamMatchmakingServers();
+inline ISteamRemoteStorage *SteamRemoteStorage();
+inline ISteamScreenshots *SteamScreenshots();
+inline ISteamHTTP *SteamHTTP();
+inline ISteamUnifiedMessages *SteamUnifiedMessages();
+inline ISteamController *SteamController();
+inline ISteamUGC *SteamUGC();
+inline ISteamAppList *SteamAppList();
+inline ISteamMusic *SteamMusic();
+inline ISteamMusicRemote *SteamMusicRemote();
+inline ISteamHTMLSurface *SteamHTMLSurface();
+inline ISteamInventory *SteamInventory();
+inline ISteamVideo *SteamVideo();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+// CSteamAPIContext encapsulates the Steamworks API global accessors into
+// a single object. This is DEPRECATED and only remains for compatibility.
+class CSteamAPIContext
+{
+public:
+ // DEPRECATED - there is no benefit to using this over the global accessors
+ CSteamAPIContext() { Clear(); }
+ void Clear();
+ bool Init();
+ ISteamClient* SteamClient() const { return m_pSteamClient; }
+ ISteamUser* SteamUser() const { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() const { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() const { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() const { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() const { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() const { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() const { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() const { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() const { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() const { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() const { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() const { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() const { return m_pController; }
+ ISteamUGC* SteamUGC() const { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() const { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() const { return m_pSteamMusic; }
+ ISteamMusicRemote* SteamMusicRemote() const { return m_pSteamMusicRemote; }
+ ISteamHTMLSurface* SteamHTMLSurface() const { return m_pSteamHTMLSurface; }
+ ISteamInventory* SteamInventory() const { return m_pSteamInventory; }
+ ISteamVideo* SteamVideo() const { return m_pSteamVideo; }
+ // DEPRECATED - there is no benefit to using this over the global accessors
+private:
+ ISteamClient *m_pSteamClient;
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages *m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+ ISteamMusicRemote *m_pSteamMusicRemote;
+ ISteamHTMLSurface *m_pSteamHTMLSurface;
+ ISteamInventory *m_pSteamInventory;
+ ISteamVideo *m_pSteamVideo;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback and call-result helpers
+//
+// The following macros and classes are used to register your application for
+// callbacks and call-results, which are delivered in a predictable manner.
+//
+// STEAM_CALLBACK macros are meant for use inside of a C++ class definition.
+// They map a Steam notification callback directly to a class member function
+// which is automatically prototyped as "void func( callback_type *pParam )".
+//
+// CCallResult is used with specific Steam APIs that return "result handles".
+// The handle can be passed to a CCallResult object's Set function, along with
+// an object pointer and member-function pointer. The member function will
+// be executed once the results of the Steam API call are available.
+//
+// CCallback and CCallbackManual classes can be used instead of STEAM_CALLBACK
+// macros if you require finer control over registration and unregistration.
+//
+// Callbacks and call-results are queued automatically and are only
+// delivered/executed when your application calls SteamAPI_RunCallbacks().
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// SteamAPI_RunCallbacks is safe to call from multiple threads simultaneously,
+// but if you choose to do this, callback code could be executed on any thread.
+// One alternative is to call SteamAPI_RunCallbacks from the main thread only,
+// and call SteamAPI_ReleaseCurrentThreadMemory regularly on other threads.
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+// Declares a callback member function plus a helper member variable which
+// registers the callback on object creation and unregisters on destruction.
+// The optional fourth 'var' param exists only for backwards-compatibility
+// and can be ignored.
+#define STEAM_CALLBACK( thisclass, func, .../*callback_type, [deprecated] var*/ ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, 4, 3 ), ( /**/, thisclass, func, __VA_ARGS__ ) )
+
+// Declares a callback function and a named CCallbackManual variable which
+// has Register and Unregister functions instead of automatic registration.
+#define STEAM_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type > var; void func( callback_type *pParam )
+
+
+// Internal functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// Internal functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks and call results - internal implementation detail
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+
+private:
+ CCallbackBase( const CCallbackBase& );
+ CCallbackBase& operator=( const CCallbackBase& );
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: templated base for callbacks - internal implementation detail
+//-----------------------------------------------------------------------------
+template< int sizeof_P >
+class CCallbackImpl : protected CCallbackBase
+{
+public:
+ ~CCallbackImpl() { if ( m_nCallbackFlags & k_ECallbackFlagsRegistered ) SteamAPI_UnregisterCallback( this ); }
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+
+protected:
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool /*bIOFailure*/, SteamAPICall_t /*hSteamAPICall*/ ) { Run( pvParam ); }
+ virtual int GetCallbackSizeBytes() { return sizeof_P; }
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult();
+ ~CCallResult();
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func );
+ bool IsActive() const;
+ void Cancel();
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam );
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall );
+ virtual int GetCallbackSizeBytes() { return sizeof( P ); }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct,
+// bGameserver = listen for gameserver callbacks instead of client callbacks
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameserver = false >
+class CCallback : public CCallbackImpl< sizeof( P ) >
+{
+public:
+ typedef void (T::*func_t)(P*);
+
+ // NOTE: If you can't provide the correct parameters at construction time, you should
+ // use the CCallbackManual callback object (STEAM_CALLBACK_MANUAL macro) instead.
+ CCallback( T *pObj, func_t func );
+
+ void Register( T *pObj, func_t func );
+ void Unregister();
+
+protected:
+ virtual void Run( void *pvParam );
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: subclass of CCallback which allows default-construction in
+// an unregistered state; you must call Register manually
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer = false >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+
+ // Inherits public Register and Unregister functions from base class
+};
+
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// SteamAPI_IsSteamRunning() returns true if Steam is currently running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Pumps out all the steam messages, calling registered callbacks.
+// NOT THREADSAFE - do not call from multiple threads simultaneously.
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name.
+// DEPRECATED - implementation is Windows only, and the path returned is a UTF-8 string which must be converted to UTF-16 for use with Win32 APIs
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+
+#if defined( VERSION_SAFE_STEAM_API_INTERFACES )
+// exists only for backwards compat with code written against older SDKs
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#endif
+
+#include "steam_api_internal.h"
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_138/steam_api_flat.h b/lsteamclient/steamworks_sdk_138/steam_api_flat.h
new file mode 100644
index 00000000..ea6d1de3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/steam_api_flat.h
@@ -0,0 +1,802 @@
+//====== Copyright (c) 1996-2014, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Header for flatted SteamAPI. Use this for binding to other languages.
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+#ifndef STEAMAPIFLAT_H
+#define STEAMAPIFLAT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <stdint.h>
+
+
+typedef unsigned char uint8;
+typedef unsigned char uint8;
+typedef signed char int8;
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+typedef int64 lint64;
+typedef uint64 ulint64;
+typedef uint8 Salt_t[8];
+typedef uint64 GID_t;
+typedef uint64 JobID_t;
+typedef GID_t TxnID_t;
+typedef uint32 PackageId_t;
+typedef uint32 BundleId_t;
+typedef uint32 AppId_t;
+typedef uint64 AssetClassId_t;
+typedef uint32 PhysicalItemId_t;
+typedef uint32 DepotId_t;
+typedef uint32 RTime32;
+typedef uint32 CellID_t;
+typedef uint64 SteamAPICall_t;
+typedef uint32 AccountID_t;
+typedef uint32 PartnerId_t;
+typedef uint64 ManifestId_t;
+typedef uint32 HAuthTicket;
+typedef void * BREAKPAD_HANDLE;
+typedef char compile_time_assert_type[1];
+typedef int32 HSteamPipe;
+typedef int32 HSteamUser;
+typedef int16 FriendsGroupID_t;
+typedef void * HServerListRequest;
+typedef int HServerQuery;
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+typedef uint64 UGCFileWriteStreamHandle_t;
+typedef char compile_time_assert_type[1];
+typedef uint64 SteamLeaderboard_t;
+typedef uint64 SteamLeaderboardEntries_t;
+typedef uint32 SNetSocket_t;
+typedef uint32 SNetListenSocket_t;
+typedef uint32 ScreenshotHandle;
+typedef uint32 HTTPRequestHandle;
+typedef uint32 HTTPCookieContainerHandle;
+typedef uint64 ClientUnifiedMessageHandle;
+typedef uint64 ControllerHandle_t;
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+typedef uint32 HHTMLBrowser;
+typedef uint64 SteamItemInstanceID_t;
+typedef int32 SteamItemDef_t;
+typedef int32 SteamInventoryResult_t;
+// OpenVR Constants
+int const_k_iSteamUserCallbacks = 100;
+int const_k_iSteamGameServerCallbacks = 200;
+int const_k_iSteamFriendsCallbacks = 300;
+int const_k_iSteamBillingCallbacks = 400;
+int const_k_iSteamMatchmakingCallbacks = 500;
+int const_k_iSteamContentServerCallbacks = 600;
+int const_k_iSteamUtilsCallbacks = 700;
+int const_k_iClientFriendsCallbacks = 800;
+int const_k_iClientUserCallbacks = 900;
+int const_k_iSteamAppsCallbacks = 1000;
+int const_k_iSteamUserStatsCallbacks = 1100;
+int const_k_iSteamNetworkingCallbacks = 1200;
+int const_k_iClientRemoteStorageCallbacks = 1300;
+int const_k_iClientDepotBuilderCallbacks = 1400;
+int const_k_iSteamGameServerItemsCallbacks = 1500;
+int const_k_iClientUtilsCallbacks = 1600;
+int const_k_iSteamGameCoordinatorCallbacks = 1700;
+int const_k_iSteamGameServerStatsCallbacks = 1800;
+int const_k_iSteam2AsyncCallbacks = 1900;
+int const_k_iSteamGameStatsCallbacks = 2000;
+int const_k_iClientHTTPCallbacks = 2100;
+int const_k_iClientScreenshotsCallbacks = 2200;
+int const_k_iSteamScreenshotsCallbacks = 2300;
+int const_k_iClientAudioCallbacks = 2400;
+int const_k_iClientUnifiedMessagesCallbacks = 2500;
+int const_k_iSteamStreamLauncherCallbacks = 2600;
+int const_k_iClientControllerCallbacks = 2700;
+int const_k_iSteamControllerCallbacks = 2800;
+int const_k_iClientParentalSettingsCallbacks = 2900;
+int const_k_iClientDeviceAuthCallbacks = 3000;
+int const_k_iClientNetworkDeviceManagerCallbacks = 3100;
+int const_k_iClientMusicCallbacks = 3200;
+int const_k_iClientRemoteClientManagerCallbacks = 3300;
+int const_k_iClientUGCCallbacks = 3400;
+int const_k_iSteamStreamClientCallbacks = 3500;
+int const_k_IClientProductBuilderCallbacks = 3600;
+int const_k_iClientShortcutsCallbacks = 3700;
+int const_k_iClientRemoteControlManagerCallbacks = 3800;
+int const_k_iSteamAppListCallbacks = 3900;
+int const_k_iSteamMusicCallbacks = 4000;
+int const_k_iSteamMusicRemoteCallbacks = 4100;
+int const_k_iClientVRCallbacks = 4200;
+int const_k_iClientGameNotificationCallbacks = 4300;
+int const_k_iSteamGameNotificationCallbacks = 4400;
+int const_k_iSteamHTMLSurfaceCallbacks = 4500;
+int const_k_iClientVideoCallbacks = 4600;
+int const_k_iClientInventoryCallbacks = 4700;
+int const_k_iClientBluetoothManagerCallbacks = 4800;
+int const_k_cchPersonaNameMax = 128;
+int const_k_cwchPersonaNameMax = 32;
+int const_k_cchMaxRichPresenceKeys = 20;
+int const_k_cchMaxRichPresenceKeyLength = 64;
+int const_k_cchMaxRichPresenceValueLength = 256;
+int const_k_cchStatNameMax = 128;
+int const_k_cchLeaderboardNameMax = 128;
+int const_k_cLeaderboardDetailsMax = 64;
+unsigned long const_k_InvalidUnifiedMessageHandle = 0;
+unsigned long const_k_SteamItemInstanceIDInvalid = 0xffffffff;
+int const_k_SteamInventoryResultInvalid = -1;
+
+
+
+// OpenVR Enums
+// OpenVR Structs
+
+
+
+S_API HSteamPipe SteamAPI_ISteamClient_CreateSteamPipe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamClient_BReleaseSteamPipe(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_ConnectToGlobalUser(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_CreateLocalUser(intptr_t instancePtr, HSteamPipe * phSteamPipe, EAccountType eAccountType);
+S_API void SteamAPI_ISteamClient_ReleaseUser(intptr_t instancePtr, HSteamPipe hSteamPipe, HSteamUser hUser);
+S_API class ISteamUser * SteamAPI_ISteamClient_GetISteamUser(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServer * SteamAPI_ISteamClient_GetISteamGameServer(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_SetLocalIPBinding(intptr_t instancePtr, uint32 unIP, uint16 usPort);
+S_API class ISteamFriends * SteamAPI_ISteamClient_GetISteamFriends(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUtils * SteamAPI_ISteamClient_GetISteamUtils(intptr_t instancePtr, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmaking * SteamAPI_ISteamClient_GetISteamMatchmaking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmakingServers * SteamAPI_ISteamClient_GetISteamMatchmakingServers(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void * SteamAPI_ISteamClient_GetISteamGenericInterface(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUserStats * SteamAPI_ISteamClient_GetISteamUserStats(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServerStats * SteamAPI_ISteamClient_GetISteamGameServerStats(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamApps * SteamAPI_ISteamClient_GetISteamApps(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamNetworking * SteamAPI_ISteamClient_GetISteamNetworking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamRemoteStorage * SteamAPI_ISteamClient_GetISteamRemoteStorage(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamScreenshots * SteamAPI_ISteamClient_GetISteamScreenshots(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API uint32 SteamAPI_ISteamClient_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamClient_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(intptr_t instancePtr);
+S_API class ISteamHTTP * SteamAPI_ISteamClient_GetISteamHTTP(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUnifiedMessages * SteamAPI_ISteamClient_GetISteamUnifiedMessages(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamController * SteamAPI_ISteamClient_GetISteamController(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUGC * SteamAPI_ISteamClient_GetISteamUGC(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamAppList * SteamAPI_ISteamClient_GetISteamAppList(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusic * SteamAPI_ISteamClient_GetISteamMusic(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusicRemote * SteamAPI_ISteamClient_GetISteamMusicRemote(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamHTMLSurface * SteamAPI_ISteamClient_GetISteamHTMLSurface(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamInventory * SteamAPI_ISteamClient_GetISteamInventory(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamVideo * SteamAPI_ISteamClient_GetISteamVideo(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API HSteamUser SteamAPI_ISteamUser_GetHSteamUser(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BLoggedOn(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamUser_GetSteamID(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUser_InitiateGameConnection(intptr_t instancePtr, void * pAuthBlob, int cbMaxAuthBlob, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure);
+S_API void SteamAPI_ISteamUser_TerminateGameConnection(intptr_t instancePtr, uint32 unIPServer, uint16 usPortServer);
+S_API void SteamAPI_ISteamUser_TrackAppUsageEvent(intptr_t instancePtr, class CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo);
+S_API bool SteamAPI_ISteamUser_GetUserDataFolder(intptr_t instancePtr, char * pchBuffer, int cubBuffer);
+S_API void SteamAPI_ISteamUser_StartVoiceRecording(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_StopVoiceRecording(intptr_t instancePtr);
+S_API EVoiceResult SteamAPI_ISteamUser_GetAvailableVoice(intptr_t instancePtr, uint32 * pcbCompressed, uint32 * pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_GetVoice(intptr_t instancePtr, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_DecompressVoice(intptr_t instancePtr, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate);
+S_API uint32 SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(intptr_t instancePtr);
+S_API HAuthTicket SteamAPI_ISteamUser_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamUser_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamUser_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamUser_BIsBehindNAT(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_AdvertiseGame(intptr_t instancePtr, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestEncryptedAppTicket(intptr_t instancePtr, void * pDataToInclude, int cbDataToInclude);
+S_API bool SteamAPI_ISteamUser_GetEncryptedAppTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API int SteamAPI_ISteamUser_GetGameBadgeLevel(intptr_t instancePtr, int nSeries, bool bFoil);
+S_API int SteamAPI_ISteamUser_GetPlayerSteamLevel(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestStoreAuthURL(intptr_t instancePtr, const char * pchRedirectURL);
+S_API bool SteamAPI_ISteamUser_BIsPhoneVerified(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsTwoFactorEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsPhoneIdentifying(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsPhoneRequiringVerification(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetPersonaName(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_SetPersonaName(intptr_t instancePtr, const char * pchPersonaName);
+S_API EPersonaState SteamAPI_ISteamFriends_GetPersonaState(intptr_t instancePtr);
+S_API int SteamAPI_ISteamFriends_GetFriendCount(intptr_t instancePtr, int iFriendFlags);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendByIndex(intptr_t instancePtr, int iFriend, int iFriendFlags);
+S_API EFriendRelationship SteamAPI_ISteamFriends_GetFriendRelationship(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API EPersonaState SteamAPI_ISteamFriends_GetFriendPersonaState(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaName(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_GetFriendGamePlayed(intptr_t instancePtr, class CSteamID steamIDFriend, struct FriendGameInfo_t * pFriendGameInfo);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(intptr_t instancePtr, class CSteamID steamIDFriend, int iPersonaName);
+S_API int SteamAPI_ISteamFriends_GetFriendSteamLevel(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetPlayerNickname(intptr_t instancePtr, class CSteamID steamIDPlayer);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupCount(intptr_t instancePtr);
+S_API FriendsGroupID_t SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(intptr_t instancePtr, int iFG);
+S_API const char * SteamAPI_ISteamFriends_GetFriendsGroupName(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API void SteamAPI_ISteamFriends_GetFriendsGroupMembersList(intptr_t instancePtr, FriendsGroupID_t friendsGroupID, class CSteamID * pOutSteamIDMembers, int nMembersCount);
+S_API bool SteamAPI_ISteamFriends_HasFriend(intptr_t instancePtr, class CSteamID steamIDFriend, int iFriendFlags);
+S_API int SteamAPI_ISteamFriends_GetClanCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetClanByIndex(intptr_t instancePtr, int iClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanName(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanTag(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_GetClanActivityCounts(intptr_t instancePtr, class CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_DownloadClanActivityCounts(intptr_t instancePtr, class CSteamID * psteamIDClans, int cClansToRequest);
+S_API int SteamAPI_ISteamFriends_GetFriendCountFromSource(intptr_t instancePtr, class CSteamID steamIDSource);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(intptr_t instancePtr, class CSteamID steamIDSource, int iFriend);
+S_API bool SteamAPI_ISteamFriends_IsUserInSource(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDSource);
+S_API void SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(intptr_t instancePtr, class CSteamID steamIDUser, bool bSpeaking);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlay(intptr_t instancePtr, const char * pchDialog);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToUser(intptr_t instancePtr, const char * pchDialog, class CSteamID steamID);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(intptr_t instancePtr, const char * pchURL);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToStore(intptr_t instancePtr, AppId_t nAppID, EOverlayToStoreFlag eFlag);
+S_API void SteamAPI_ISteamFriends_SetPlayedWith(intptr_t instancePtr, class CSteamID steamIDUserPlayedWith);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API int SteamAPI_ISteamFriends_GetSmallFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetMediumFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetLargeFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_RequestUserInformation(intptr_t instancePtr, class CSteamID steamIDUser, bool bRequireNameOnly);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_RequestClanOfficerList(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOwner(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanOfficerCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOfficerByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iOfficer);
+S_API uint32 SteamAPI_ISteamFriends_GetUserRestrictions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamFriends_SetRichPresence(intptr_t instancePtr, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamFriends_ClearRichPresence(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchKey);
+S_API int SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(intptr_t instancePtr, class CSteamID steamIDFriend, int iKey);
+S_API void SteamAPI_ISteamFriends_RequestFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_InviteUserToGame(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchConnectString);
+S_API int SteamAPI_ISteamFriends_GetCoplayFriendCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetCoplayFriend(intptr_t instancePtr, int iCoplayFriend);
+S_API int SteamAPI_ISteamFriends_GetFriendCoplayTime(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API AppId_t SteamAPI_ISteamFriends_GetFriendCoplayGame(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_JoinClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_LeaveClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanChatMemberCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetChatMemberByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iUser);
+S_API bool SteamAPI_ISteamFriends_SendClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, const char * pchText);
+S_API int SteamAPI_ISteamFriends_GetClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, class CSteamID * psteamidChatter);
+S_API bool SteamAPI_ISteamFriends_IsClanChatAdmin(intptr_t instancePtr, class CSteamID steamIDClanChat, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_SetListenForFriendsMessages(intptr_t instancePtr, bool bInterceptEnabled);
+S_API bool SteamAPI_ISteamFriends_ReplyToFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchMsgToSend);
+S_API int SteamAPI_ISteamFriends_GetFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_GetFollowerCount(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_IsFollowing(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_EnumerateFollowingList(intptr_t instancePtr, uint32 unStartIndex);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceAppActive(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(intptr_t instancePtr);
+S_API EUniverse SteamAPI_ISteamUtils_GetConnectedUniverse(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetServerRealTime(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUtils_GetIPCountry(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetImageSize(intptr_t instancePtr, int iImage, uint32 * pnWidth, uint32 * pnHeight);
+S_API bool SteamAPI_ISteamUtils_GetImageRGBA(intptr_t instancePtr, int iImage, uint8 * pubDest, int nDestBufferSize);
+S_API bool SteamAPI_ISteamUtils_GetCSERIPPort(intptr_t instancePtr, uint32 * unIP, uint16 * usPort);
+S_API uint8 SteamAPI_ISteamUtils_GetCurrentBatteryPower(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetAppID(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationPosition(intptr_t instancePtr, ENotificationPosition eNotificationPosition);
+S_API bool SteamAPI_ISteamUtils_IsAPICallCompleted(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, bool * pbFailed);
+S_API ESteamAPICallFailure SteamAPI_ISteamUtils_GetAPICallFailureReason(intptr_t instancePtr, SteamAPICall_t hSteamAPICall);
+S_API bool SteamAPI_ISteamUtils_GetAPICallResult(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed);
+S_API uint32 SteamAPI_ISteamUtils_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamUtils_IsOverlayEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_BOverlayNeedsPresent(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUtils_CheckFileSignature(intptr_t instancePtr, const char * szFileName);
+S_API bool SteamAPI_ISteamUtils_ShowGamepadTextInput(intptr_t instancePtr, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText);
+S_API uint32 SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(intptr_t instancePtr, char * pchText, uint32 cchText);
+S_API const char * SteamAPI_ISteamUtils_GetSteamUILanguage(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_IsSteamRunningInVR(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationInset(intptr_t instancePtr, int nHorizontalInset, int nVerticalInset);
+S_API bool SteamAPI_ISteamUtils_IsSteamInBigPictureMode(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_StartVRDashboard(intptr_t instancePtr);
+S_API int SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMatchmaking_GetFavoriteGame(intptr_t instancePtr, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer);
+S_API int SteamAPI_ISteamMatchmaking_AddFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer);
+S_API bool SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_RequestLobbyList(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(intptr_t instancePtr, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToBeCloseTo);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(intptr_t instancePtr, int nSlotsAvailable);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(intptr_t instancePtr, ELobbyDistanceFilter eLobbyDistanceFilter);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(intptr_t instancePtr, int cMaxResults);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyByIndex(intptr_t instancePtr, int iLobby);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_CreateLobby(intptr_t instancePtr, ELobbyType eLobbyType, int cMaxMembers);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_JoinLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_LeaveLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_InviteUserToLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDInvitee);
+S_API int SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iMember);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyDataCount(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize);
+S_API bool SteamAPI_ISteamMatchmaking_DeleteLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDUser, const char * pchKey);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(intptr_t instancePtr, class CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(intptr_t instancePtr, class CSteamID steamIDLobby, int iChatID, class CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API bool SteamAPI_ISteamMatchmaking_RequestLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, class CSteamID steamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, class CSteamID * psteamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby, int cMaxMembers);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyType(intptr_t instancePtr, class CSteamID steamIDLobby, ELobbyType eLobbyType);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyJoinable(intptr_t instancePtr, class CSteamID steamIDLobby, bool bLobbyJoinable);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDNewOwner);
+S_API bool SteamAPI_ISteamMatchmaking_SetLinkedLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDLobbyDependent);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(intptr_t instancePtr, HServerListRequest hRequest, EMatchMakingServerResponse response);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(intptr_t instancePtr, class gameserveritem_t & server);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(intptr_t instancePtr, const char * pchName, int nScore, float flTimePlayed);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(intptr_t instancePtr, const char * pchRule, const char * pchValue);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(intptr_t instancePtr);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestLANServerList(intptr_t instancePtr, AppId_t iApp, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_ReleaseRequest(intptr_t instancePtr, HServerListRequest hServerListRequest);
+S_API class gameserveritem_t * SteamAPI_ISteamMatchmakingServers_GetServerDetails(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API bool SteamAPI_ISteamMatchmakingServers_IsRefreshing(intptr_t instancePtr, HServerListRequest hRequest);
+S_API int SteamAPI_ISteamMatchmakingServers_GetServerCount(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshServer(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PingServer(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPingResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PlayerDetails(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPlayersResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_ServerRules(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingRulesResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelServerQuery(intptr_t instancePtr, HServerQuery hServerQuery);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWrite(intptr_t instancePtr, const char * pchFile, const void * pvData, int32 cubData);
+S_API int32 SteamAPI_ISteamRemoteStorage_FileRead(intptr_t instancePtr, const char * pchFile, void * pvData, int32 cubDataToRead);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileWriteAsync(intptr_t instancePtr, const char * pchFile, const void * pvData, uint32 cubData);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileReadAsync(intptr_t instancePtr, const char * pchFile, uint32 nOffset, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileReadAsyncComplete(intptr_t instancePtr, SteamAPICall_t hReadCall, void * pvBuffer, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileForget(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileDelete(intptr_t instancePtr, const char * pchFile);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileShare(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(intptr_t instancePtr, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform);
+S_API UGCFileWriteStreamHandle_t SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileExists(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FilePersisted(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileSize(intptr_t instancePtr, const char * pchFile);
+S_API int64 SteamAPI_ISteamRemoteStorage_GetFileTimestamp(intptr_t instancePtr, const char * pchFile);
+S_API ERemoteStoragePlatform SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileCount(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(intptr_t instancePtr, int iFile, int32 * pnFileSizeInBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_GetQuota(intptr_t instancePtr, uint64 * pnTotalBytes, uint64 * puAvailableBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(intptr_t instancePtr);
+S_API void SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(intptr_t instancePtr, bool bEnabled);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownload(intptr_t instancePtr, UGCHandle_t hContent, uint32 unPriority);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(intptr_t instancePtr, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDetails(intptr_t instancePtr, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, class CSteamID * pSteamIDOwner);
+S_API int32 SteamAPI_ISteamRemoteStorage_UGCRead(intptr_t instancePtr, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(intptr_t instancePtr);
+S_API UGCHandle_t SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(intptr_t instancePtr, int32 iCachedContent);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(intptr_t instancePtr, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType);
+S_API PublishedFileUpdateHandle_t SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_DeletePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(intptr_t instancePtr, class CSteamID steamId, uint32 unStartIndex, struct SteamParamStringArray_t * pRequiredTags, struct SteamParamStringArray_t * pExcludedTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishVideo(intptr_t instancePtr, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(intptr_t instancePtr, EWorkshopFileAction eAction, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(intptr_t instancePtr, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, struct SteamParamStringArray_t * pTags, struct SteamParamStringArray_t * pUserTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(intptr_t instancePtr, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority);
+S_API bool SteamAPI_ISteamUserStats_RequestCurrentStats(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUserStats_GetStat(intptr_t instancePtr, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetStat0(intptr_t instancePtr, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_SetStat(intptr_t instancePtr, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamUserStats_SetStat0(intptr_t instancePtr, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamUserStats_UpdateAvgRateStat(intptr_t instancePtr, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamUserStats_GetAchievement(intptr_t instancePtr, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_SetAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_ClearAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(intptr_t instancePtr, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_StoreStats(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetAchievementIcon(intptr_t instancePtr, const char * pchName);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(intptr_t instancePtr, const char * pchName, const char * pchKey);
+S_API bool SteamAPI_ISteamUserStats_IndicateAchievementProgress(intptr_t instancePtr, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress);
+S_API uint32 SteamAPI_ISteamUserStats_GetNumAchievements(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementName(intptr_t instancePtr, uint32 iAchievement);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_ResetAllStats(intptr_t instancePtr, bool bAchievementsToo);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName);
+S_API const char * SteamAPI_ISteamUserStats_GetLeaderboardName(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API int SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardSortMethod SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardDisplayType SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, class CSteamID * prgUsers, int cUsers);
+S_API bool SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(intptr_t instancePtr, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, struct LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_UploadLeaderboardScore(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_AttachLeaderboardUGC(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(intptr_t instancePtr, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API int SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(intptr_t instancePtr, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(intptr_t instancePtr, const char * pchName, float * pflPercent);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalStats(intptr_t instancePtr, int nHistoryDays);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat(intptr_t instancePtr, const char * pchStatName, int64 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat0(intptr_t instancePtr, const char * pchStatName, double * pData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory(intptr_t instancePtr, const char * pchStatName, int64 * pData, uint32 cubData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory0(intptr_t instancePtr, const char * pchStatName, double * pData, uint32 cubData);
+S_API bool SteamAPI_ISteamApps_BIsSubscribed(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsLowViolence(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsCybercafe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsVACBanned(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetCurrentGameLanguage(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetAvailableGameLanguages(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedApp(intptr_t instancePtr, AppId_t appID);
+S_API bool SteamAPI_ISteamApps_BIsDlcInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint32 SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(intptr_t instancePtr);
+S_API int SteamAPI_ISteamApps_GetDLCCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BGetDLCDataByIndex(intptr_t instancePtr, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize);
+S_API void SteamAPI_ISteamApps_InstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_UninstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_GetCurrentBetaName(intptr_t instancePtr, char * pchName, int cchNameBufferSize);
+S_API bool SteamAPI_ISteamApps_MarkContentCorrupt(intptr_t instancePtr, bool bMissingFilesOnly);
+S_API uint32 SteamAPI_ISteamApps_GetInstalledDepots(intptr_t instancePtr, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots);
+S_API uint32 SteamAPI_ISteamApps_GetAppInstallDir(intptr_t instancePtr, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize);
+S_API bool SteamAPI_ISteamApps_BIsAppInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint64 SteamAPI_ISteamApps_GetAppOwner(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetLaunchQueryParam(intptr_t instancePtr, const char * pchKey);
+S_API bool SteamAPI_ISteamApps_GetDlcDownloadProgress(intptr_t instancePtr, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API int SteamAPI_ISteamApps_GetAppBuildId(intptr_t instancePtr);
+S_API void SteamAPI_ISteamApps_RequestAllProofOfPurchaseKeys(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamApps_GetFileDetails(intptr_t instancePtr, const char * pszFileName);
+S_API bool SteamAPI_ISteamNetworking_SendP2PPacket(intptr_t instancePtr, class CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_IsP2PPacketAvailable(intptr_t instancePtr, uint32 * pcubMsgSize, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_ReadP2PPacket(intptr_t instancePtr, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, class CSteamID * psteamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(intptr_t instancePtr, class CSteamID steamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_GetP2PSessionState(intptr_t instancePtr, class CSteamID steamIDRemote, struct P2PSessionState_t * pConnectionState);
+S_API bool SteamAPI_ISteamNetworking_AllowP2PPacketRelay(intptr_t instancePtr, bool bAllow);
+S_API SNetListenSocket_t SteamAPI_ISteamNetworking_CreateListenSocket(intptr_t instancePtr, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(intptr_t instancePtr, class CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateConnectionSocket(intptr_t instancePtr, uint32 nIP, uint16 nPort, int nTimeoutSec);
+S_API bool SteamAPI_ISteamNetworking_DestroySocket(intptr_t instancePtr, SNetSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_DestroyListenSocket(intptr_t instancePtr, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_SendDataOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_RetrieveDataFromSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailable(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_RetrieveData(intptr_t instancePtr, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_GetSocketInfo(intptr_t instancePtr, SNetSocket_t hSocket, class CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote);
+S_API bool SteamAPI_ISteamNetworking_GetListenSocketInfo(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort);
+S_API ESNetSocketConnectionType SteamAPI_ISteamNetworking_GetSocketConnectionType(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API int SteamAPI_ISteamNetworking_GetMaxPacketSize(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_WriteScreenshot(intptr_t instancePtr, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(intptr_t instancePtr, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight);
+S_API void SteamAPI_ISteamScreenshots_TriggerScreenshot(intptr_t instancePtr);
+S_API void SteamAPI_ISteamScreenshots_HookScreenshots(intptr_t instancePtr, bool bHook);
+S_API bool SteamAPI_ISteamScreenshots_SetLocation(intptr_t instancePtr, ScreenshotHandle hScreenshot, const char * pchLocation);
+S_API bool SteamAPI_ISteamScreenshots_TagUser(intptr_t instancePtr, ScreenshotHandle hScreenshot, class CSteamID steamID);
+S_API bool SteamAPI_ISteamScreenshots_TagPublishedFile(intptr_t instancePtr, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID);
+S_API bool SteamAPI_ISteamScreenshots_IsScreenshotsHooked(intptr_t instancePtr);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddVRScreenshotToLibrary(intptr_t instancePtr, EVRScreenshotType eType, const char * pchFilename, const char * pchVRFilename);
+S_API bool SteamAPI_ISteamMusic_BIsEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusic_BIsPlaying(intptr_t instancePtr);
+S_API AudioPlayback_Status SteamAPI_ISteamMusic_GetPlaybackStatus(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Play(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Pause(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayPrevious(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayNext(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_SetVolume(intptr_t instancePtr, float flVolume);
+S_API float SteamAPI_ISteamMusic_GetVolume(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BActivationSuccess(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_SetDisplayName(intptr_t instancePtr, const char * pchDisplayName);
+S_API bool SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayPrevious(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayNext(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableQueue(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlaylists(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(intptr_t instancePtr, AudioPlayback_Status nStatus);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateVolume(intptr_t instancePtr, float flValue);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(intptr_t instancePtr, bool bAvailable);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(intptr_t instancePtr, const char * pchText);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(intptr_t instancePtr, int nValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_QueueWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetQueueEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetQueueEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_QueueDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetPlaylistEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistDidChange(intptr_t instancePtr);
+S_API HTTPRequestHandle SteamAPI_ISteamHTTP_CreateHTTPRequest(intptr_t instancePtr, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(intptr_t instancePtr, HTTPRequestHandle hRequest, uint64 ulContextValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_DeferHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 * unBodySize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 cOffset, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_ReleaseHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(intptr_t instancePtr, HTTPRequestHandle hRequest, float * pflPercentOut);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen);
+S_API HTTPCookieContainerHandle SteamAPI_ISteamHTTP_CreateCookieContainer(intptr_t instancePtr, bool bAllowResponsesToModify);
+S_API bool SteamAPI_ISteamHTTP_ReleaseCookieContainer(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetCookie(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer, const char * pchHost, const char * pchUrl, const char * pchCookie);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(intptr_t instancePtr, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchUserAgentInfo);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(intptr_t instancePtr, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unMilliseconds);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(intptr_t instancePtr, HTTPRequestHandle hRequest, bool * pbWasTimedOut);
+S_API ClientUnifiedMessageHandle SteamAPI_ISteamUnifiedMessages_SendMethod(intptr_t instancePtr, const char * pchServiceMethod, const void * pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, uint32 * punResponseSize, EResult * peResult);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseData(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, void * pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease);
+S_API bool SteamAPI_ISteamUnifiedMessages_ReleaseMethod(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle);
+S_API bool SteamAPI_ISteamUnifiedMessages_SendNotification(intptr_t instancePtr, const char * pchServiceNotification, const void * pNotificationBuffer, uint32 unNotificationBufferSize);
+S_API bool SteamAPI_ISteamController_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamController_Shutdown(intptr_t instancePtr);
+S_API void SteamAPI_ISteamController_RunFrame(intptr_t instancePtr);
+S_API int SteamAPI_ISteamController_GetConnectedControllers(intptr_t instancePtr, ControllerHandle_t * handlesOut);
+S_API bool SteamAPI_ISteamController_ShowBindingPanel(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetActionSetHandle(intptr_t instancePtr, const char * pszActionSetName);
+S_API void SteamAPI_ISteamController_ActivateActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetCurrentActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerDigitalActionHandle_t SteamAPI_ISteamController_GetDigitalActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerDigitalActionData_t SteamAPI_ISteamController_GetDigitalActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle);
+S_API int SteamAPI_ISteamController_GetDigitalActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin * originsOut);
+S_API ControllerAnalogActionHandle_t SteamAPI_ISteamController_GetAnalogActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerAnalogActionData_t SteamAPI_ISteamController_GetAnalogActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle);
+S_API int SteamAPI_ISteamController_GetAnalogActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin * originsOut);
+S_API void SteamAPI_ISteamController_StopAnalogActionMomentum(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction);
+S_API void SteamAPI_ISteamController_TriggerHapticPulse(intptr_t instancePtr, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec);
+S_API void SteamAPI_ISteamController_TriggerRepeatedHapticPulse(intptr_t instancePtr, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags);
+S_API int SteamAPI_ISteamController_GetGamepadIndexForController(intptr_t instancePtr, ControllerHandle_t ulControllerHandle);
+S_API ControllerHandle_t SteamAPI_ISteamController_GetControllerForGamepadIndex(intptr_t instancePtr, int nIndex);
+S_API struct ControllerMotionData_t SteamAPI_ISteamController_GetMotionData(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API bool SteamAPI_ISteamController_ShowDigitalActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition);
+S_API bool SteamAPI_ISteamController_ShowAnalogActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(intptr_t instancePtr, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(intptr_t instancePtr, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SendQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCResult(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, struct SteamUGCDetails_t * pDetails);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCPreviewURL(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCChildren(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCStatistic(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint64 * pStatValue);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, char * pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType * pPreviewType);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize);
+S_API bool SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_AddRequiredTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_AddExcludedTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_SetReturnOnlyIDs(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnOnlyIDs);
+S_API bool SteamAPI_ISteamUGC_SetReturnKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnKeyValueTags);
+S_API bool SteamAPI_ISteamUGC_SetReturnLongDescription(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnLongDescription);
+S_API bool SteamAPI_ISteamUGC_SetReturnMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnMetadata);
+S_API bool SteamAPI_ISteamUGC_SetReturnChildren(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnChildren);
+S_API bool SteamAPI_ISteamUGC_SetReturnAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews);
+S_API bool SteamAPI_ISteamUGC_SetReturnTotalOnly(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnTotalOnly);
+S_API bool SteamAPI_ISteamUGC_SetLanguage(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetAllowCachedResponse(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds);
+S_API bool SteamAPI_ISteamUGC_SetCloudFileNameFilter(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pMatchCloudFileName);
+S_API bool SteamAPI_ISteamUGC_SetMatchAnyTag(intptr_t instancePtr, UGCQueryHandle_t handle, bool bMatchAnyTag);
+S_API bool SteamAPI_ISteamUGC_SetSearchText(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pSearchText);
+S_API bool SteamAPI_ISteamUGC_SetRankedByTrendDays(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unDays);
+S_API bool SteamAPI_ISteamUGC_AddRequiredKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pKey, const char * pValue);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RequestUGCDetails(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_CreateItem(intptr_t instancePtr, AppId_t nConsumerAppId, EWorkshopFileType eFileType);
+S_API UGCUpdateHandle_t SteamAPI_ISteamUGC_StartItemUpdate(intptr_t instancePtr, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_SetItemTitle(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchTitle);
+S_API bool SteamAPI_ISteamUGC_SetItemDescription(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchDescription);
+S_API bool SteamAPI_ISteamUGC_SetItemUpdateLanguage(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetItemMetadata(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchMetaData);
+S_API bool SteamAPI_ISteamUGC_SetItemVisibility(intptr_t instancePtr, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamUGC_SetItemTags(intptr_t instancePtr, UGCUpdateHandle_t updateHandle, const struct SteamParamStringArray_t * pTags);
+S_API bool SteamAPI_ISteamUGC_SetItemContent(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszContentFolder);
+S_API bool SteamAPI_ISteamUGC_SetItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile);
+S_API bool SteamAPI_ISteamUGC_RemoveItemKeyValueTags(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey);
+S_API bool SteamAPI_ISteamUGC_AddItemKeyValueTag(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamUGC_AddItemPreviewFile(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile, EItemPreviewType type);
+S_API bool SteamAPI_ISteamUGC_AddItemPreviewVideo(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszVideoID);
+S_API bool SteamAPI_ISteamUGC_UpdateItemPreviewFile(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index, const char * pszPreviewFile);
+S_API bool SteamAPI_ISteamUGC_UpdateItemPreviewVideo(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index, const char * pszVideoID);
+S_API bool SteamAPI_ISteamUGC_RemoveItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubmitItemUpdate(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchChangeNote);
+S_API EItemUpdateStatus SteamAPI_ISteamUGC_GetItemUpdateProgress(intptr_t instancePtr, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_GetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddItemToFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveItemFromFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_UnsubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API uint32 SteamAPI_ISteamUGC_GetNumSubscribedItems(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUGC_GetSubscribedItems(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API uint32 SteamAPI_ISteamUGC_GetItemState(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_GetItemInstallInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp);
+S_API bool SteamAPI_ISteamUGC_GetItemDownloadInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API bool SteamAPI_ISteamUGC_DownloadItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bHighPriority);
+S_API bool SteamAPI_ISteamUGC_BInitWorkshopForGameServer(intptr_t instancePtr, DepotId_t unWorkshopDepotID, const char * pszFolder);
+S_API void SteamAPI_ISteamUGC_SuspendDownloads(intptr_t instancePtr, bool bSuspend);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_StartPlaytimeTracking(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_StopPlaytimeTracking(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_StopPlaytimeTrackingForAllItems(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamAppList_GetNumInstalledApps(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamAppList_GetInstalledApps(intptr_t instancePtr, AppId_t * pvecAppID, uint32 unMaxAppIDs);
+S_API int SteamAPI_ISteamAppList_GetAppName(intptr_t instancePtr, AppId_t nAppID, char * pchName, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppInstallDir(intptr_t instancePtr, AppId_t nAppID, char * pchDirectory, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppBuildId(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Shutdown(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamHTMLSurface_CreateBrowser(intptr_t instancePtr, const char * pchUserAgent, const char * pchUserCSS);
+S_API void SteamAPI_ISteamHTMLSurface_RemoveBrowser(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_LoadURL(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData);
+S_API void SteamAPI_ISteamHTMLSurface_SetSize(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight);
+S_API void SteamAPI_ISteamHTMLSurface_StopLoad(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Reload(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoBack(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoForward(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_AddHeader(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamHTMLSurface_ExecuteJavascript(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchScript);
+S_API void SteamAPI_ISteamHTMLSurface_MouseUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDoubleClick(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseMove(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_MouseWheel(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int32 nDelta);
+S_API void SteamAPI_ISteamHTMLSurface_KeyDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyChar(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetVerticalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetKeyFocus(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus);
+S_API void SteamAPI_ISteamHTMLSurface_ViewSource(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_CopyToClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_PasteFromClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Find(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse);
+S_API void SteamAPI_ISteamHTMLSurface_StopFind(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_SetCookie(intptr_t instancePtr, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly);
+S_API void SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY);
+S_API void SteamAPI_ISteamHTMLSurface_SetBackgroundMode(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bBackgroundMode);
+S_API void SteamAPI_ISteamHTMLSurface_AllowStartRequest(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bAllowed);
+S_API void SteamAPI_ISteamHTMLSurface_JSDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bResult);
+S_API EResult SteamAPI_ISteamInventory_GetResultStatus(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetResultItems(intptr_t instancePtr, SteamInventoryResult_t resultHandle, struct SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize);
+S_API uint32 SteamAPI_ISteamInventory_GetResultTimestamp(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_CheckResultSteamID(intptr_t instancePtr, SteamInventoryResult_t resultHandle, class CSteamID steamIDExpected);
+S_API void SteamAPI_ISteamInventory_DestroyResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetAllItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_GetItemsByID(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs);
+S_API bool SteamAPI_ISteamInventory_SerializeResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize);
+S_API bool SteamAPI_ISteamInventory_DeserializeResult(intptr_t instancePtr, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE);
+S_API bool SteamAPI_ISteamInventory_GenerateItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_GrantPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_AddPromoItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef);
+S_API bool SteamAPI_ISteamInventory_AddPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_ConsumeItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity);
+S_API bool SteamAPI_ISteamInventory_ExchangeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength);
+S_API bool SteamAPI_ISteamInventory_TransferItemQuantity(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest);
+S_API void SteamAPI_ISteamInventory_SendItemDropHeartbeat(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_TriggerItemDrop(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition);
+S_API bool SteamAPI_ISteamInventory_TradeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, class CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength);
+S_API bool SteamAPI_ISteamInventory_LoadItemDefinitions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionIDs(intptr_t instancePtr, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionProperty(intptr_t instancePtr, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSizeOut);
+S_API void SteamAPI_ISteamVideo_GetVideoURL(intptr_t instancePtr, AppId_t unVideoAppID);
+S_API bool SteamAPI_ISteamVideo_IsBroadcasting(intptr_t instancePtr, int * pnNumViewers);
+S_API bool SteamAPI_ISteamGameServer_InitGameServer(intptr_t instancePtr, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString);
+S_API void SteamAPI_ISteamGameServer_SetProduct(intptr_t instancePtr, const char * pszProduct);
+S_API void SteamAPI_ISteamGameServer_SetGameDescription(intptr_t instancePtr, const char * pszGameDescription);
+S_API void SteamAPI_ISteamGameServer_SetModDir(intptr_t instancePtr, const char * pszModDir);
+S_API void SteamAPI_ISteamGameServer_SetDedicatedServer(intptr_t instancePtr, bool bDedicated);
+S_API void SteamAPI_ISteamGameServer_LogOn(intptr_t instancePtr, const char * pszToken);
+S_API void SteamAPI_ISteamGameServer_LogOnAnonymous(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_LogOff(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BLoggedOn(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BSecure(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamGameServer_GetSteamID(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_WasRestartRequested(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetMaxPlayerCount(intptr_t instancePtr, int cPlayersMax);
+S_API void SteamAPI_ISteamGameServer_SetBotPlayerCount(intptr_t instancePtr, int cBotplayers);
+S_API void SteamAPI_ISteamGameServer_SetServerName(intptr_t instancePtr, const char * pszServerName);
+S_API void SteamAPI_ISteamGameServer_SetMapName(intptr_t instancePtr, const char * pszMapName);
+S_API void SteamAPI_ISteamGameServer_SetPasswordProtected(intptr_t instancePtr, bool bPasswordProtected);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorPort(intptr_t instancePtr, uint16 unSpectatorPort);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorServerName(intptr_t instancePtr, const char * pszSpectatorServerName);
+S_API void SteamAPI_ISteamGameServer_ClearAllKeyValues(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetKeyValue(intptr_t instancePtr, const char * pKey, const char * pValue);
+S_API void SteamAPI_ISteamGameServer_SetGameTags(intptr_t instancePtr, const char * pchGameTags);
+S_API void SteamAPI_ISteamGameServer_SetGameData(intptr_t instancePtr, const char * pchGameData);
+S_API void SteamAPI_ISteamGameServer_SetRegion(intptr_t instancePtr, const char * pszRegion);
+S_API bool SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(intptr_t instancePtr, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, class CSteamID * pSteamIDUser);
+S_API uint64 SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SendUserDisconnect(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServer_BUpdateUserData(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore);
+S_API HAuthTicket SteamAPI_ISteamGameServer_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamGameServer_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamGameServer_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamGameServer_RequestUserGroupStatus(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDGroup);
+S_API void SteamAPI_ISteamGameServer_GetGameplayStats(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_GetServerReputation(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamGameServer_GetPublicIP(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_HandleIncomingPacket(intptr_t instancePtr, const void * pData, int cbData, uint32 srcIP, uint16 srcPort);
+S_API int SteamAPI_ISteamGameServer_GetNextOutgoingPacket(intptr_t instancePtr, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort);
+S_API void SteamAPI_ISteamGameServer_EnableHeartbeats(intptr_t instancePtr, bool bActive);
+S_API void SteamAPI_ISteamGameServer_SetHeartbeatInterval(intptr_t instancePtr, int iHeartbeatInterval);
+S_API void SteamAPI_ISteamGameServer_ForceHeartbeat(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_AssociateWithClan(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(intptr_t instancePtr, class CSteamID steamIDNewPlayer);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API bool SteamAPI_ISteamGameServerStats_ClearUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_StoreUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+#endif // STEAMAPIFLAT_H
+
+
diff --git a/lsteamclient/steamworks_sdk_138/steam_api_internal.h b/lsteamclient/steamworks_sdk_138/steam_api_internal.h
new file mode 100644
index 00000000..ef3a949c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/steam_api_internal.h
@@ -0,0 +1,327 @@
+//====== Copyright 1996-2015, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Internal private Steamworks API declarations and definitions
+//
+//=============================================================================
+
+#ifndef STEAM_API_INTERNAL_H
+#define STEAM_API_INTERNAL_H
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+S_API void * S_CALLTYPE SteamInternal_ContextInit( void *pContextInitData );
+S_API void * S_CALLTYPE SteamInternal_CreateInterface( const char *ver );
+
+#if !defined( STEAM_API_EXPORTS )
+
+inline void S_CALLTYPE SteamInternal_OnContextInit( void* p )
+{
+ ((CSteamAPIContext*)p)->Clear();
+ if ( SteamAPI_GetHSteamPipe() )
+ ((CSteamAPIContext*)p)->Init();
+}
+inline CSteamAPIContext& SteamInternal_ModuleContext()
+{
+ // SteamInternal_ContextInit takes a base pointer for the equivalent of
+ // struct { void (*pFn)(void* pCtx); uintp counter; CSteamAPIContext ctx; }
+ // Do not change layout of 2 + sizeof... or add non-pointer aligned data!
+ // NOTE: declaring "static CSteamAPIConext" creates a large function
+ // which queries the initialization status of the object. We know that
+ // it is pointer-aligned and fully memset with zeros, so just alias a
+ // static buffer of the appropriate size and call it a CSteamAPIContext.
+ static void* s_CallbackCounterAndContext[ 2 + sizeof(CSteamAPIContext)/sizeof(void*) ] = { (void*)&SteamInternal_OnContextInit, 0 };
+ return *(CSteamAPIContext*)SteamInternal_ContextInit( s_CallbackCounterAndContext );
+}
+
+inline ISteamClient *SteamClient() { return SteamInternal_ModuleContext().SteamClient(); }
+inline ISteamUser *SteamUser() { return SteamInternal_ModuleContext().SteamUser(); }
+inline ISteamFriends *SteamFriends() { return SteamInternal_ModuleContext().SteamFriends(); }
+inline ISteamUtils *SteamUtils() { return SteamInternal_ModuleContext().SteamUtils(); }
+inline ISteamMatchmaking *SteamMatchmaking() { return SteamInternal_ModuleContext().SteamMatchmaking(); }
+inline ISteamUserStats *SteamUserStats() { return SteamInternal_ModuleContext().SteamUserStats(); }
+inline ISteamApps *SteamApps() { return SteamInternal_ModuleContext().SteamApps(); }
+inline ISteamMatchmakingServers *SteamMatchmakingServers() { return SteamInternal_ModuleContext().SteamMatchmakingServers(); }
+inline ISteamNetworking *SteamNetworking() { return SteamInternal_ModuleContext().SteamNetworking(); }
+inline ISteamRemoteStorage *SteamRemoteStorage() { return SteamInternal_ModuleContext().SteamRemoteStorage(); }
+inline ISteamScreenshots *SteamScreenshots() { return SteamInternal_ModuleContext().SteamScreenshots(); }
+inline ISteamHTTP *SteamHTTP() { return SteamInternal_ModuleContext().SteamHTTP(); }
+inline ISteamUnifiedMessages *SteamUnifiedMessages() { return SteamInternal_ModuleContext().SteamUnifiedMessages(); }
+inline ISteamController *SteamController() { return SteamInternal_ModuleContext().SteamController(); }
+inline ISteamUGC *SteamUGC() { return SteamInternal_ModuleContext().SteamUGC(); }
+inline ISteamAppList *SteamAppList() { return SteamInternal_ModuleContext().SteamAppList(); }
+inline ISteamMusic *SteamMusic() { return SteamInternal_ModuleContext().SteamMusic(); }
+inline ISteamMusicRemote *SteamMusicRemote() { return SteamInternal_ModuleContext().SteamMusicRemote(); }
+inline ISteamHTMLSurface *SteamHTMLSurface() { return SteamInternal_ModuleContext().SteamHTMLSurface(); }
+inline ISteamInventory *SteamInventory() { return SteamInternal_ModuleContext().SteamInventory(); }
+inline ISteamVideo *SteamVideo() { return SteamInternal_ModuleContext().SteamVideo(); }
+
+#endif // !defined( STEAM_API_EXPORTS )
+
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamClient = NULL;
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamMusicRemote = NULL;
+ m_pSteamHTMLSurface = NULL;
+ m_pSteamInventory = NULL;
+}
+
+
+// This function must be declared inline in the header so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+ if ( !hSteamPipe )
+ return false;
+
+ m_pSteamClient = (ISteamClient*) SteamInternal_CreateInterface( STEAMCLIENT_INTERFACE_VERSION );
+ if ( !m_pSteamClient )
+ return false;
+
+ m_pSteamUser = m_pSteamClient->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = m_pSteamClient->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = m_pSteamClient->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = m_pSteamClient->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = m_pSteamClient->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = m_pSteamClient->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = m_pSteamClient->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = m_pSteamClient->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = m_pSteamClient->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = m_pSteamClient->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = m_pSteamClient->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = m_pSteamClient->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = m_pSteamClient->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = m_pSteamClient->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = m_pSteamClient->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = m_pSteamClient->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ return false;
+
+ m_pSteamMusicRemote = m_pSteamClient->GetISteamMusicRemote( hSteamUser, hSteamPipe, STEAMMUSICREMOTE_INTERFACE_VERSION );
+ if ( !m_pSteamMusicRemote )
+ return false;
+
+ m_pSteamHTMLSurface = m_pSteamClient->GetISteamHTMLSurface( hSteamUser, hSteamPipe, STEAMHTMLSURFACE_INTERFACE_VERSION );
+ if ( !m_pSteamHTMLSurface )
+ return false;
+
+ m_pSteamInventory = m_pSteamClient->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_pSteamVideo = m_pSteamClient->GetISteamVideo( hSteamUser, hSteamPipe, STEAMVIDEO_INTERFACE_VERSION );
+ if ( !m_pSteamVideo )
+ return false;
+
+ return true;
+}
+
+
+//-----------------------------------------------------------------------------
+// The following macros are implementation details, not intended for public use
+//-----------------------------------------------------------------------------
+#define _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param )
+#define _STEAM_CALLBACK_HELPER( _1, _2, SELECTED, ... ) _STEAM_CALLBACK_##SELECTED
+#define _STEAM_CALLBACK_SELECT( X, Y ) _STEAM_CALLBACK_HELPER X Y
+#define _STEAM_CALLBACK_3( extra_code, thisclass, func, param ) \
+ struct CCallbackInternal_ ## func : private CCallbackImpl< sizeof( param ) > { \
+ CCallbackInternal_ ## func () { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func ( const CCallbackInternal_ ## func & ) { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func & operator=( const CCallbackInternal_ ## func & ) { return *this; } \
+ private: virtual void Run( void *pvParam ) { _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param ) \
+ thisclass *pOuter = reinterpret_cast<thisclass*>( reinterpret_cast<char*>(this) - offsetof( thisclass, m_steamcallback_ ## func ) ); \
+ pOuter->func( reinterpret_cast<param*>( pvParam ) ); \
+ } \
+ } m_steamcallback_ ## func ; void func( param *pParam )
+#define _STEAM_CALLBACK_4( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param > var; void func( param *pParam )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+inline CCallResult<T, P>::CCallResult()
+{
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Set( SteamAPICall_t hAPICall, T *p, func_t func )
+{
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+}
+
+template< class T, class P >
+inline bool CCallResult<T, P>::IsActive() const
+{
+ return (m_hAPICall != k_uAPICallInvalid);
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Cancel()
+{
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+}
+
+template< class T, class P >
+inline CCallResult<T, P>::~CCallResult()
+{
+ Cancel();
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Run( void *pvParam )
+{
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)((P *)pvParam, false);
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+{
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)((P *)pvParam, bIOFailure);
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct,
+// bGameserver = listen for gameserver callbacks instead of client callbacks
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameserver >
+inline CCallback< T, P, bGameserver >::CCallback( T *pObj, func_t func )
+ : m_pObj( NULL ), m_Func( NULL )
+{
+ if ( bGameserver )
+ {
+ this->SetGameserverFlag();
+ }
+ Register( pObj, func );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Register( T *pObj, func_t func )
+{
+ if ( !pObj || !func )
+ return;
+
+ if ( this->m_nCallbackFlags & CCallbackBase::k_ECallbackFlagsRegistered )
+ Unregister();
+
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Unregister()
+{
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Run( void *pvParam )
+{
+ (m_pObj->*m_Func)((P *)pvParam);
+}
+
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+
+#endif // STEAM_API_INTERNAL_H
diff --git a/lsteamclient/steamworks_sdk_138/steam_gameserver.h b/lsteamclient/steamworks_sdk_138/steam_gameserver.h
new file mode 100644
index 00000000..dfc70370
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/steam_gameserver.h
@@ -0,0 +1,237 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+
+inline bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+// Most Steam API functions allocate some amount of thread-local memory for
+// parameter storage. Calling SteamGameServer_ReleaseCurrentThreadMemory()
+// will free all API-related memory associated with the calling thread.
+// This memory is released automatically by SteamGameServer_RunCallbacks(),
+// so single-threaded servers do not need to explicitly call this function.
+inline void SteamGameServer_ReleaseCurrentThreadMemory();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+// If your application contains modules which could be built against different Steamworks SDK
+// versions, then you should define VERSION_SAFE_STEAM_API_INTERFACES to enforce that you cannot
+// use the version-less global accessors. Instead, create and use CSteamGameServerAPIContext
+// objects to retrieve interface pointers which are appropriate for your Steamworks SDK headers.
+#if !defined( VERSION_SAFE_STEAM_API_INTERFACES ) && !defined( STEAM_API_EXPORTS )
+inline ISteamClient *SteamGameServerClient();
+inline ISteamGameServer *SteamGameServer();
+inline ISteamUtils *SteamGameServerUtils();
+inline ISteamNetworking *SteamGameServerNetworking();
+inline ISteamGameServerStats *SteamGameServerStats();
+inline ISteamHTTP *SteamGameServerHTTP();
+inline ISteamInventory *SteamGameServerInventory();
+inline ISteamUGC *SteamGameServerUGC();
+inline ISteamApps *SteamGameServerApps();
+#endif
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext() { Clear(); }
+ inline void Clear();
+ inline bool Init();
+
+ ISteamClient *SteamClient() const { return m_pSteamClient; }
+ ISteamGameServer *SteamGameServer() const { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() const { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() const { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() const { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() const { return m_pSteamHTTP; }
+ ISteamInventory *SteamInventory() const { return m_pSteamInventory; }
+ ISteamUGC *SteamUGC() const { return m_pSteamUGC; }
+ ISteamApps *SteamApps() const { return m_pSteamApps; }
+
+private:
+ ISteamClient *m_pSteamClient;
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamInventory *m_pSteamInventory;
+ ISteamUGC *m_pSteamUGC;
+ ISteamApps *m_pSteamApps;
+};
+
+
+// Older SDKs exported this global pointer, but it is no longer supported.
+// You should use SteamGameServerClient() or CSteamGameServerAPIContext to
+// safely access the ISteamClient APIs from your game server application.
+//S_API ISteamClient *g_pSteamClientGameServer;
+
+// SteamGameServer_InitSafe has been replaced with SteamGameServer_Init and
+// is no longer supported. Use SteamGameServer_Init instead.
+//S_API void S_CALLTYPE SteamGameServer_InitSafe();
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// These macros are similar to the STEAM_CALLBACK_* macros in steam_api.h, but only trigger for gameserver callbacks
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, /*callback_type, [deprecated] var*/... ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, GS, 3 ), ( this->SetGameserverFlag();, thisclass, func, __VA_ARGS__ ) )
+
+#define STEAM_GAMESERVER_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type, true > var; void func( callback_type *pParam )
+
+
+#define _STEAM_CALLBACK_GS( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param, true > var; void func( param *pParam )
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe S_CALLTYPE SteamGameServer_GetHSteamPipe();
+S_API HSteamUser S_CALLTYPE SteamGameServer_GetHSteamUser();
+S_API bool S_CALLTYPE SteamInternal_GameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+
+
+#if !defined( VERSION_SAFE_STEAM_API_INTERFACES ) && !defined( STEAM_API_EXPORTS )
+inline CSteamGameServerAPIContext& SteamGameServerInternal_ModuleContext()
+{
+ // NOTE: declaring "static CSteamAPIConext" creates a large function
+ // which queries the initialization status of the object. We know that
+ // it is pointer-aligned and fully memset with zeros, so just alias a
+ // static buffer of the appropriate size and call it a CSteamAPIContext.
+ static void* ctx[ sizeof(CSteamGameServerAPIContext)/sizeof(void*) ];
+ return *(CSteamGameServerAPIContext*)ctx;
+}
+#define _STEAMINTERNAL_ACCESSOR_BODY( AccessFunc ) \
+ if ( !SteamGameServer_GetHSteamPipe() ) return 0; \
+ CSteamGameServerAPIContext &ctx = SteamGameServerInternal_ModuleContext(); \
+ if ( !ctx.AccessFunc() ) ctx.Init(); \
+ return ctx.AccessFunc();
+
+inline ISteamClient *SteamGameServerClient() { _STEAMINTERNAL_ACCESSOR_BODY( SteamClient ) }
+inline ISteamGameServer *SteamGameServer() { _STEAMINTERNAL_ACCESSOR_BODY( SteamGameServer ) }
+inline ISteamUtils *SteamGameServerUtils() { _STEAMINTERNAL_ACCESSOR_BODY( SteamGameServerUtils ) }
+inline ISteamNetworking *SteamGameServerNetworking() { _STEAMINTERNAL_ACCESSOR_BODY( SteamGameServerNetworking ) }
+inline ISteamGameServerStats *SteamGameServerStats() { _STEAMINTERNAL_ACCESSOR_BODY( SteamGameServerStats ) }
+inline ISteamHTTP *SteamGameServerHTTP() { _STEAMINTERNAL_ACCESSOR_BODY( SteamHTTP ) }
+inline ISteamInventory *SteamGameServerInventory() { _STEAMINTERNAL_ACCESSOR_BODY( SteamInventory ) }
+inline ISteamUGC *SteamGameServerUGC() { _STEAMINTERNAL_ACCESSOR_BODY( SteamUGC ) }
+inline ISteamApps *SteamGameServerApps() { _STEAMINTERNAL_ACCESSOR_BODY( SteamApps ) }
+#undef _STEAMINTERNAL_ACCESSOR_BODY
+#endif // !defined( VERSION_SAFE_STEAM_API_INTERFACES ) && !defined( STEAM_API_EXPORTS )
+
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamClient = NULL;
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamInventory = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamApps = NULL;
+}
+
+// This function must be declared inline in the header so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+ if ( !hSteamPipe )
+ return false;
+
+ m_pSteamClient = (ISteamClient*) SteamInternal_CreateInterface( STEAMCLIENT_INTERFACE_VERSION );
+ if ( !m_pSteamClient )
+ return false;
+
+ m_pSteamGameServer = m_pSteamClient->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = m_pSteamClient->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = m_pSteamClient->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = m_pSteamClient->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = m_pSteamClient->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamInventory = m_pSteamClient->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_pSteamUGC = m_pSteamClient->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamApps = m_pSteamClient->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ return true;
+}
+
+
+inline bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString )
+{
+ if ( !SteamInternal_GameServer_Init( unIP, usSteamPort, usGamePort, usQueryPort, eServerMode, pchVersionString ) )
+ return false;
+
+ return true;
+}
+
+
+inline void SteamGameServer_ReleaseCurrentThreadMemory()
+{
+ SteamAPI_ReleaseCurrentThreadMemory();
+}
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_138/steamclientpublic.h b/lsteamclient/steamworks_sdk_138/steamclientpublic.h
new file mode 100644
index 00000000..646c75ba
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/steamclientpublic.h
@@ -0,0 +1,1255 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to login
+ k_EResultItemDeleted = 86, // The thing we're trying to access has been deleted
+ k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to throttle response to possible attacker
+ k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch
+ k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for two-factor didn't match
+ k_EResultAccountAssociatedToMultiplePartners = 90, // account has been associated with multiple partners
+ k_EResultNotModified = 91, // data not modified
+ k_EResultNoMobileDevice = 92, // the account does not have a mobile device associated with it
+ k_EResultTimeNotSynced = 93, // the time presented is out of range or tolerance
+ k_EResultSmsCodeFailed = 94, // SMS code failure (no match, none pending, etc.)
+ k_EResultAccountLimitExceeded = 95, // Too many accounts access this resource
+ k_EResultAccountActivityLimitExceeded = 96, // Too many changes to this account
+ k_EResultPhoneActivityLimitExceeded = 97, // Too many changes to this phone
+ k_EResultRefundToWallet = 98, // Cannot refund to payment method, must use wallet
+ k_EResultEmailSendFailure = 99, // Cannot send an email
+ k_EResultNotSettled = 100, // Can't perform operation till payment has settled
+ k_EResultNeedCaptcha = 101, // Needs to provide a valid captcha
+ k_EResultGSLTDenied = 102, // a game server login token owned by this token's owner has been banned
+ k_EResultGSOwnerDenied = 103, // game server owner is denied for other reason (account lock, community ban, vac ban, missing phone)
+ k_EResultInvalidItemType = 104, // the type of thing we were requested to act on is invalid
+ k_EResultIPBanned = 105, // the ip address has been banned from taking this action
+ k_EResultGSLTExpired = 106, // this token has expired from disuse; can be reset for use
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+ k_EVoiceResultReceiverOutOfDate = 8,
+ k_EVoiceResultReceiverDidNotAnswer = 9,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+enum EDenyReason
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+};
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+enum EBeginAuthSessionResult
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+};
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+enum EAuthSessionResponse
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+ k_EAuthSessionResponsePublisherIssuedBan = 9, // The user is banned for this game. The ban came via the web api and not VAC
+};
+
+// results from UserHasLicenseForApp
+enum EUserHasLicenseForAppResult
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+};
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x0000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x0001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x0002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x0004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x0008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x0010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x0020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x0040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_RetailLicense = 0x0080, // has a retail license for game, (CD-Key etc)
+ k_EAppOwnershipFlags_LicenseLocked = 0x0100, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x0200, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x0400, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x0800, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x1000, // Recurring license, user is charged periodically
+ k_EAppOwnershipFlags_LicenseCanceled = 0x2000, // Mark as canceled, but might be still active if recurring
+ k_EAppOwnershipFlags_AutoGrant = 0x4000, // Ownership is based on any kind of autogrant license
+ k_EAppOwnershipFlags_PendingGift = 0x8000, // user has pending gift to redeem
+ k_EAppOwnershipFlags_RentalNotActivated = 0x10000, // Rental hasn't been activated yet
+ k_EAppOwnershipFlags_Rental = 0x20000, // Is a rental
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media_DEPRECATED = 0x010, // legacy - was used for game trailers, which are now just videos on the web
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+ k_EAppType_Hardware = 0x200, // a hardware device (Steam Machine, Steam Controller, Steam Link, etc.)
+ k_EAppType_Franchise = 0x400, // A hub for collections of multiple apps, eg films, series, games
+ k_EAppType_Video = 0x800, // A video component of either a Film or TVSeries (may be the feature, an episode, preview, making-of, etc)
+ k_EAppType_Plugin = 0x1000, // Plug-in types for other Apps
+ k_EAppType_Music = 0x2000, // Music files
+ k_EAppType_Series = 0x4000, // Container app for video series
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+ //k_EChatEntryTypeReserved1 = 12, // No longer used
+ //k_EChatEntryTypeReserved2 = 13, // No longer used
+ k_EChatEntryTypeLinkBlocked = 14, // a link was removed by the chat filter.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Broadcast upload result details
+//-----------------------------------------------------------------------------
+enum EBroadcastUploadResult
+{
+ k_EBroadcastUploadResultNone = 0, // broadcast state unknown
+ k_EBroadcastUploadResultOK = 1, // broadcast was good, no problems
+ k_EBroadcastUploadResultInitFailed = 2, // broadcast init failed
+ k_EBroadcastUploadResultFrameFailed = 3, // broadcast frame upload failed
+ k_EBroadcastUploadResultTimeout = 4, // broadcast upload timed out
+ k_EBroadcastUploadResultBandwidthExceeded = 5, // broadcast send too much data
+ k_EBroadcastUploadResultLowFPS = 6, // broadcast FPS too low
+ k_EBroadcastUploadResultMissingKeyFrames = 7, // broadcast sending not enough key frames
+ k_EBroadcastUploadResultNoConnection = 8, // broadcast client failed to connect to relay
+ k_EBroadcastUploadResultRelayFailed = 9, // relay dropped the upload
+ k_EBroadcastUploadResultSettingsChanged = 10, // the client changed broadcast settings
+ k_EBroadcastUploadResultMissingAudio = 11, // client failed to send audio data
+ k_EBroadcastUploadResultTooFarBehind = 12, // clients was too slow uploading
+ k_EBroadcastUploadResultTranscodeBehind = 13, // server failed to keep up with transcode
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: codes for well defined launch options
+//-----------------------------------------------------------------------------
+enum ELaunchOptionType
+{
+ k_ELaunchOptionType_None = 0, // unknown what launch option does
+ k_ELaunchOptionType_Default = 1, // runs the game, app, whatever in default mode
+ k_ELaunchOptionType_SafeMode = 2, // runs the game in safe mode
+ k_ELaunchOptionType_Multiplayer = 3, // runs the game in multiplayer mode
+ k_ELaunchOptionType_Config = 4, // runs config tool for this game
+ k_ELaunchOptionType_OpenVR = 5, // runs game in VR mode using OpenVR
+ k_ELaunchOptionType_Server = 6, // runs dedicated server for this game
+ k_ELaunchOptionType_Editor = 7, // runs game editor
+ k_ELaunchOptionType_Manual = 8, // shows game manual
+ k_ELaunchOptionType_Benchmark = 9, // runs game benchmark
+ k_ELaunchOptionType_Option1 = 10, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option2 = 11, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option3 = 12, // generic run option, uses description field for game name
+ k_ELaunchOptionType_OculusVR = 13, // runs game in VR mode using the Oculus SDK
+ k_ELaunchOptionType_OpenVROverlay = 14, // runs an OpenVR dashboard overlay
+ k_ELaunchOptionType_OSVR = 15, // runs game in VR mode using the OSVR SDK
+
+
+ k_ELaunchOptionType_Dialog = 1000, // show launch options dialog
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this launch option is any of the vr launching types
+//-----------------------------------------------------------------------------
+static inline bool BIsVRLaunchOptionType( const ELaunchOptionType eType )
+{
+ return eType == k_ELaunchOptionType_OpenVR
+ || eType == k_ELaunchOptionType_OpenVROverlay
+ || eType == k_ELaunchOptionType_OculusVR
+ || eType == k_ELaunchOptionType_OSVR;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: code points for VR HMD vendors and models
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN A DATABASE
+//-----------------------------------------------------------------------------
+enum EVRHMDType
+{
+ k_eEVRHMDType_None = -1, // unknown vendor and model
+
+ k_eEVRHMDType_Unknown = 0, // unknown vendor and model
+
+ k_eEVRHMDType_HTC_Dev = 1, // original HTC dev kits
+ k_eEVRHMDType_HTC_VivePre = 2, // htc vive pre
+ k_eEVRHMDType_HTC_Vive = 3, // htc vive consumer release
+
+ k_eEVRHMDType_HTC_Unknown = 20, // unknown htc hmd
+
+ k_eEVRHMDType_Oculus_DK1 = 21, // Oculus DK1
+ k_eEVRHMDType_Oculus_DK2 = 22, // Oculus DK2
+ k_eEVRHMDType_Oculus_Rift = 23, // Oculus rift
+
+ k_eEVRHMDType_Oculus_Unknown = 40, // // Oculus unknown HMD
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Controller models
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN A DATABASE
+//-----------------------------------------------------------------------------
+enum EControllerType
+{
+ k_eControllerType_None = -1,
+ k_eControllerType_Unknown = 0,
+
+ // Steam Controllers
+ k_eControllerType_UnknownSteamController = 1,
+ k_eControllerType_SteamController = 2,
+
+ // Other Controllers
+ k_eControllerType_UnknownNonSteamController = 30,
+ k_eControllerType_XBox360Controller = 31,
+ k_eControllerType_XBoxOneController = 32,
+ k_eControllerType_PS3Controller = 33,
+ k_eControllerType_PS4Controller = 34,
+ k_eControllerType_WiiController = 35,
+ k_eControllerType_AppleController = 36
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this is from an Oculus HMD
+//-----------------------------------------------------------------------------
+static inline bool BIsOculusHMD( EVRHMDType eType )
+{
+ return eType == k_eEVRHMDType_Oculus_DK1 || eType == k_eEVRHMDType_Oculus_DK2 || eType == k_eEVRHMDType_Oculus_Rift || eType == k_eEVRHMDType_Oculus_Unknown;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this is from an Vive HMD
+//-----------------------------------------------------------------------------
+static inline bool BIsViveHMD( EVRHMDType eType )
+{
+ return eType == k_eEVRHMDType_HTC_Dev || eType == k_eEVRHMDType_HTC_VivePre || eType == k_eEVRHMDType_HTC_Vive || eType == k_eEVRHMDType_HTC_Unknown;
+}
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM2_USERID_STRUCTS )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ V_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, V_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ if ( pchExePath )
+ CRC32_ProcessBuffer( &crc32, pchExePath, V_strlen( pchExePath ) );
+ if ( pchAppName )
+ CRC32_ProcessBuffer( &crc32, pchAppName, V_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, V_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_138/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_138/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_138/steamhttpenums.h b/lsteamclient/steamworks_sdk_138/steamhttpenums.h
new file mode 100644
index 00000000..b2f05d94
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/steamhttpenums.h
@@ -0,0 +1,98 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+ k_EHTTPMethodPATCH,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401, // You probably want 403 or something else. 401 implies you're sending a WWW-Authenticate header and the client can sent an Authorization header in response.
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+ k_EHTTPStatusCode4xxUnknown = 418, // 418 is reserved, so we'll use it to mean unknown
+ k_EHTTPStatusCode429TooManyRequests = 429,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+ k_EHTTPStatusCode5xxUnknown = 599,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_138/steamps3params.h b/lsteamclient/steamworks_sdk_138/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_138/steamtypes.h b/lsteamclient/steamworks_sdk_138/steamtypes.h
new file mode 100644
index 00000000..2b805ce7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/steamtypes.h
@@ -0,0 +1,181 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+#ifdef API_GEN
+# define CLANG_ATTR(ATTR) __attribute__((annotate( ATTR )))
+#else
+# define CLANG_ATTR(ATTR)
+#endif
+
+#define METHOD_DESC(DESC) CLANG_ATTR( "desc:" #DESC ";" )
+#define IGNOREATTR() CLANG_ATTR( "ignore" )
+#define OUT_STRUCT() CLANG_ATTR( "out_struct: ;" )
+#define OUT_STRING() CLANG_ATTR( "out_string: ;" )
+#define OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" )
+#define OUT_ARRAY_COUNT(COUNTER, DESC) CLANG_ATTR( "out_array_count:" #COUNTER ";desc:" #DESC )
+#define ARRAY_COUNT(COUNTER) CLANG_ATTR( "array_count:" #COUNTER ";" )
+#define ARRAY_COUNT_D(COUNTER, DESC) CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC )
+#define BUFFER_COUNT(COUNTER) CLANG_ATTR( "buffer_count:" #COUNTER ";" )
+#define OUT_BUFFER_COUNT(COUNTER) CLANG_ATTR( "out_buffer_count:" #COUNTER ";" )
+#define OUT_STRING_COUNT(COUNTER) CLANG_ATTR( "out_string_count:" #COUNTER ";" )
+#define DESC(DESC) CLANG_ATTR("desc:" #DESC ";")
+#define CALL_RESULT(RESULT_TYPE) CLANG_ATTR("callresult:" #RESULT_TYPE ";")
+#define CALL_BACK(RESULT_TYPE) CLANG_ATTR("callback:" #RESULT_TYPE ";")
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef uint64 JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+const JobID_t k_JobIDNil = 0xffffffffffffffffull;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+typedef uint32 BundleId_t;
+const BundleId_t k_uBundleIdInvalid = 0;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+// ID for a depot content manifest
+typedef uint64 ManifestId_t;
+const ManifestId_t k_uManifestIdInvalid = 0;
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_138/steamuniverse.h b/lsteamclient/steamworks_sdk_138/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteamapplist.h b/lsteamclient/steamworks_sdk_138a/isteamapplist.h
new file mode 100644
index 00000000..d0d7e7e7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, OUT_STRING() char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteamapps.h b/lsteamclient/steamworks_sdk_138a/isteamapps.h
new file mode 100644
index 00000000..89c0aaf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamapps.h
@@ -0,0 +1,176 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 240; // max supported length of a legacy cd key
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request legacy cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+ // get download progress for optional DLC
+ virtual bool GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // return the buildid of this app, may change at any time based on backend updates to the game
+ virtual int GetAppBuildId() = 0;
+
+ // Request all proof of purchase keys for the calling appid and asociated DLC.
+ // A series of AppProofOfPurchaseKeyResponse_t callbacks will be sent with
+ // appropriate appid values, ending with a final callback where the m_nAppId
+ // member is k_uAppIdInvalid (zero).
+ virtual void RequestAllProofOfPurchaseKeys() = 0;
+
+ CALL_RESULT( FileDetailsResult_t )
+ virtual SteamAPICall_t GetFileDetails( const char* pszFileName ) = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION008"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RequestAppProofOfPurchaseKey/RequestAllProofOfPurchaseKeys
+// for supporting third-party CD keys, or other proof-of-purchase systems.
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 21 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ uint32 m_cchKeyLength;
+ char m_rgchKey[k_cubAppProofOfPurchaseKeyMax];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetFileDetails
+//-----------------------------------------------------------------------------
+struct FileDetailsResult_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 23 };
+ EResult m_eResult;
+ uint64 m_ulFileSize; // original file size in bytes
+ uint8 m_FileSHA[20]; // original file SHA1 hash
+ uint32 m_unFlags; //
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteamappticket.h b/lsteamclient/steamworks_sdk_138a/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteamclient.h b/lsteamclient/steamworks_sdk_138a/isteamclient.h
new file mode 100644
index 00000000..b6eb6b3d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamclient.h
@@ -0,0 +1,520 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#if defined(STEAM_API_EXPORTS) && !defined(API_GEN)
+#define STEAM_PRIVATE_API( ... ) __VA_ARGS__
+#elif defined(STEAM_API_EXPORTS) && defined(API_GEN)
+#define STEAM_PRIVATE_API( ... )
+#else
+#define STEAM_PRIVATE_API( ... ) protected: __VA_ARGS__ public:
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct ValvePackingSentinel_t
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+extern "C" typedef uint32 ( *SteamAPI_CheckCallbackRegistered_t )( int iCallbackNum );
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamMusicRemote;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+class ISteamHTMLSurface;
+class ISteamInventory;
+class ISteamVideo;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need these APIs if you have a more complex versioning scheme,
+// or if you want to implement a multiplexed gameserver where a single process
+// is handling multiple games at once with independent gameserver SteamIDs.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client.
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Deprecated. Applications should use SteamAPI_RunCallbacks() or SteamGameServer_RunCallbacks() instead.
+ STEAM_PRIVATE_API( virtual void RunFrame() = 0; )
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message.
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player Remote
+ virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // html page display
+ virtual ISteamHTMLSurface *GetISteamHTMLSurface(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // Helper functions for internal Steam usage
+ STEAM_PRIVATE_API( virtual void DEPRECATED_Set_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; )
+ STEAM_PRIVATE_API( virtual void DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; )
+ STEAM_PRIVATE_API( virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0; )
+
+ // inventory
+ virtual ISteamInventory *GetISteamInventory( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Video
+ virtual ISteamVideo *GetISteamVideo( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient017"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iClientDepotBuilderCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+enum { k_iSteamMusicRemoteCallbacks = 4100 };
+enum { k_iClientVRCallbacks = 4200 };
+enum { k_iClientGameNotificationCallbacks = 4300 };
+enum { k_iSteamGameNotificationCallbacks = 4400 };
+enum { k_iSteamHTMLSurfaceCallbacks = 4500 };
+enum { k_iClientVideoCallbacks = 4600 };
+enum { k_iClientInventoryCallbacks = 4700 };
+enum { k_iClientBluetoothManagerCallbacks = 4800 };
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+#ifdef STEAM_CALLBACK_INSPECTION_ENABLED
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname { \
+ typedef callbackname SteamCallback_t; \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+#else
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) struct callbackname { typedef callbackname SteamCallback_t; enum { k_iCallback = callbackid };
+#define CALLBACK_MEMBER( varidx, vartype, varname ) public: vartype varname ;
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) public: vartype varname [ varcount ];
+#define END_CALLBACK_INTERNAL_BEGIN( numvars )
+#define END_CALLBACK_INTERNAL_SWITCH( varidx )
+#define END_CALLBACK_INTERNAL_END() };
+#define END_DEFINE_CALLBACK_0() };
+
+#endif
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_10() \
+ END_CALLBACK_INTERNAL_BEGIN( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_11() \
+ END_CALLBACK_INTERNAL_BEGIN( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_12() \
+ END_CALLBACK_INTERNAL_BEGIN( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_13() \
+ END_CALLBACK_INTERNAL_BEGIN( 13 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_14() \
+ END_CALLBACK_INTERNAL_BEGIN( 14 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 13 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteamcontroller.h b/lsteamclient/steamworks_sdk_138a/isteamcontroller.h
new file mode 100644
index 00000000..7ee4779d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamcontroller.h
@@ -0,0 +1,251 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define STEAM_CONTROLLER_MAX_COUNT 16
+
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTIONS 16
+
+#define STEAM_CONTROLLER_MAX_DIGITAL_ACTIONS 128
+
+#define STEAM_CONTROLLER_MAX_ORIGINS 8
+
+// When sending an option to a specific controller handle, you can send to all controllers via this command
+#define STEAM_CONTROLLER_HANDLE_ALL_CONTROLLERS UINT64_MAX
+
+#define STEAM_CONTROLLER_MIN_ANALOG_ACTION_DATA -1.0f
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTION_DATA 1.0f
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+enum EControllerSource
+{
+ k_EControllerSource_None,
+ k_EControllerSource_LeftTrackpad,
+ k_EControllerSource_RightTrackpad,
+ k_EControllerSource_Joystick,
+ k_EControllerSource_ABXY,
+ k_EControllerSource_Switch,
+ k_EControllerSource_LeftTrigger,
+ k_EControllerSource_RightTrigger,
+ k_EControllerSource_Gyro,
+ k_EControllerSource_Count
+};
+
+enum EControllerSourceMode
+{
+ k_EControllerSourceMode_None,
+ k_EControllerSourceMode_Dpad,
+ k_EControllerSourceMode_Buttons,
+ k_EControllerSourceMode_FourButtons,
+ k_EControllerSourceMode_AbsoluteMouse,
+ k_EControllerSourceMode_RelativeMouse,
+ k_EControllerSourceMode_JoystickMove,
+ k_EControllerSourceMode_JoystickCamera,
+ k_EControllerSourceMode_ScrollWheel,
+ k_EControllerSourceMode_Trigger,
+ k_EControllerSourceMode_TouchMenu,
+ k_EControllerSourceMode_MouseJoystick,
+ k_EControllerSourceMode_MouseRegion,
+ k_EControllerSourceMode_RadialMenu,
+ k_EControllerSourceMode_Switches
+};
+
+enum EControllerActionOrigin
+{
+ k_EControllerActionOrigin_None,
+ k_EControllerActionOrigin_A,
+ k_EControllerActionOrigin_B,
+ k_EControllerActionOrigin_X,
+ k_EControllerActionOrigin_Y,
+ k_EControllerActionOrigin_LeftBumper,
+ k_EControllerActionOrigin_RightBumper,
+ k_EControllerActionOrigin_LeftGrip,
+ k_EControllerActionOrigin_RightGrip,
+ k_EControllerActionOrigin_Start,
+ k_EControllerActionOrigin_Back,
+ k_EControllerActionOrigin_LeftPad_Touch,
+ k_EControllerActionOrigin_LeftPad_Swipe,
+ k_EControllerActionOrigin_LeftPad_Click,
+ k_EControllerActionOrigin_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_LeftPad_DPadWest,
+ k_EControllerActionOrigin_LeftPad_DPadEast,
+ k_EControllerActionOrigin_RightPad_Touch,
+ k_EControllerActionOrigin_RightPad_Swipe,
+ k_EControllerActionOrigin_RightPad_Click,
+ k_EControllerActionOrigin_RightPad_DPadNorth,
+ k_EControllerActionOrigin_RightPad_DPadSouth,
+ k_EControllerActionOrigin_RightPad_DPadWest,
+ k_EControllerActionOrigin_RightPad_DPadEast,
+ k_EControllerActionOrigin_LeftTrigger_Pull,
+ k_EControllerActionOrigin_LeftTrigger_Click,
+ k_EControllerActionOrigin_RightTrigger_Pull,
+ k_EControllerActionOrigin_RightTrigger_Click,
+ k_EControllerActionOrigin_LeftStick_Move,
+ k_EControllerActionOrigin_LeftStick_Click,
+ k_EControllerActionOrigin_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_LeftStick_DPadWest,
+ k_EControllerActionOrigin_LeftStick_DPadEast,
+ k_EControllerActionOrigin_Gyro_Move,
+ k_EControllerActionOrigin_Gyro_Pitch,
+ k_EControllerActionOrigin_Gyro_Yaw,
+ k_EControllerActionOrigin_Gyro_Roll,
+
+ k_EControllerActionOrigin_Count
+};
+
+// ControllerHandle_t is used to refer to a specific controller.
+// This handle will consistently identify a controller, even if it is disconnected and re-connected
+typedef uint64 ControllerHandle_t;
+
+
+// These handles are used to refer to a specific in-game action or action set
+// All action handles should be queried during initialization for performance reasons
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+
+#pragma pack( push, 1 )
+
+struct ControllerAnalogActionData_t
+{
+ // Type of data coming from this action, this will match what got specified in the action set
+ EControllerSourceMode eMode;
+
+ // The current state of this action; will be delta updates for mouse actions
+ float x, y;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+struct ControllerDigitalActionData_t
+{
+ // The current state of this action; will be true if currently pressed
+ bool bState;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+struct ControllerMotionData_t
+{
+ // Sensor-fused absolute rotation; will drift in heading
+ float rotQuatX;
+ float rotQuatY;
+ float rotQuatZ;
+ float rotQuatW;
+
+ // Positional acceleration
+ float posAccelX;
+ float posAccelY;
+ float posAccelZ;
+
+ // Angular velocity
+ float rotVelX;
+ float rotVelY;
+ float rotVelZ;
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ // Init and Shutdown must be called when starting/ending use of this interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Synchronize API state with the latest Steam Controller inputs available. This
+ // is performed automatically by SteamAPI_RunCallbacks, but for the absolute lowest
+ // possible latency, you call this directly before reading controller state.
+ virtual void RunFrame() = 0;
+
+ // Enumerate currently connected controllers
+ // handlesOut should point to a STEAM_CONTROLLER_MAX_COUNT sized array of ControllerHandle_t handles
+ // Returns the number of handles written to handlesOut
+ virtual int GetConnectedControllers( ControllerHandle_t *handlesOut ) = 0;
+
+ // Invokes the Steam overlay and brings up the binding screen
+ // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
+ virtual bool ShowBindingPanel( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTION SETS
+ // Lookup the handle for an Action Set. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerActionSetHandle_t GetActionSetHandle( const char *pszActionSetName ) = 0;
+
+ // Reconfigure the controller to use the specified action set (ie 'Menu', 'Walk' or 'Drive')
+ // This is cheap, and can be safely called repeatedly. It's often easier to repeatedly call it in
+ // your state loops, instead of trying to place it in all of your state transitions.
+ virtual void ActivateActionSet( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle ) = 0;
+ virtual ControllerActionSetHandle_t GetCurrentActionSet( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTIONS
+ // Lookup the handle for a digital action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerDigitalActionHandle_t GetDigitalActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of the supplied digital game action
+ virtual ControllerDigitalActionData_t GetDigitalActionData( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle ) = 0;
+
+ // Get the origin(s) for a digital action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ // Lookup the handle for an analog action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerAnalogActionHandle_t GetAnalogActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of these supplied analog game action
+ virtual ControllerAnalogActionData_t GetAnalogActionData( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle ) = 0;
+
+ // Get the origin(s) for an analog action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ virtual void StopAnalogActionMomentum( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction ) = 0;
+
+ // Trigger a haptic pulse on a controller
+ virtual void TriggerHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ // Trigger a pulse with a duty cycle of usDurationMicroSec / usOffMicroSec, unRepeat times.
+ // nFlags is currently unused and reserved for future use.
+ virtual void TriggerRepeatedHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags ) = 0;
+
+ // Returns the associated gamepad index for the specified controller, if emulating a gamepad
+ virtual int GetGamepadIndexForController( ControllerHandle_t ulControllerHandle ) = 0;
+
+ // Returns the associated controller handle for the specified emulated gamepad
+ virtual ControllerHandle_t GetControllerForGamepadIndex( int nIndex ) = 0;
+
+ // Returns raw motion data from the specified controller
+ virtual ControllerMotionData_t GetMotionData( ControllerHandle_t controllerHandle ) = 0;
+
+ // Attempt to display origins of given action in the controller HUD, for the currently active action set
+ // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
+ virtual bool ShowDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition ) = 0;
+ virtual bool ShowAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "SteamController004"
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteamfriends.h b/lsteamclient/steamworks_sdk_138a/isteamfriends.h
new file mode 100644
index 00000000..865c9644
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamfriends.h
@@ -0,0 +1,636 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1, // this doesn't get stored; the user has just done an Ignore on an friendship invite
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5, // this is stored; the user has explicit blocked this other user from comments/chat/etc
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested_DEPRECATED = 7, // was used by the original implementation of the facebook linking feature, but now unused.
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+// friends group identifier type
+typedef int16 FriendsGroupID_t;
+
+// invalid friends group identifier constant
+const FriendsGroupID_t k_FriendsGroupID_Invalid = -1;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ k_EFriendFlagSuggested = 0x800,
+ k_EFriendFlagChatMember = 0x1000,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ CALL_RESULT( SetPersonaNameResponse_t )
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, OUT_STRUCT() FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+ // friends steam level
+ virtual int GetFriendSteamLevel( CSteamID steamIDFriend ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // friend grouping (tag) apis
+ // returns the number of friends groups
+ virtual int GetFriendsGroupCount() = 0;
+ // returns the friends group ID for the given index (invalid indices return k_FriendsGroupID_Invalid)
+ virtual FriendsGroupID_t GetFriendsGroupIDByIndex( int iFG ) = 0;
+ // returns the name for the given friends group (NULL in the case of invalid friends group IDs)
+ virtual const char *GetFriendsGroupName( FriendsGroupID_t friendsGroupID ) = 0;
+ // returns the number of members in a given friends group
+ virtual int GetFriendsGroupMembersCount( FriendsGroupID_t friendsGroupID ) = 0;
+ // gets up to nMembersCount members of the given friends group, if fewer exist than requested those positions' SteamIDs will be invalid
+ virtual void GetFriendsGroupMembersList( FriendsGroupID_t friendsGroupID, OUT_ARRAY_CALL(nMembersCount, GetFriendsGroupMembersCount, friendsGroupID ) CSteamID *pOutSteamIDMembers, int nMembersCount ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( ARRAY_COUNT(cClansToRequest) CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ CALL_RESULT( ClanOfficerListResponse_t )
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Note the following limits: k_cchMaxRichPresenceKeys, k_cchMaxRichPresenceKeyLength, k_cchMaxRichPresenceValueLength
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ CALL_RESULT( JoinClanChatRoomCompletionResult_t )
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, OUT_STRUCT() CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ CALL_RESULT( FriendsGetFollowerCount_t )
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ CALL_RESULT( FriendsIsFollowing_t )
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ CALL_RESULT( FriendsEnumerateFollowingList_t )
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends015"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_138a/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_138a/isteamgameserver.h b/lsteamclient/steamworks_sdk_138a/isteamgameserver.h
new file mode 100644
index 00000000..2004c830
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamgameserver.h
@@ -0,0 +1,387 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ CALL_RESULT( GSReputation_t )
+ virtual SteamAPICall_t GetServerReputation() = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ CALL_RESULT( AssociateWithClanResult_t )
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ CALL_RESULT( ComputeNewPlayerCompatibilityResult_t )
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_138a/isteamgameserverstats.h
new file mode 100644
index 00000000..e4c7d648
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamgameserverstats.h
@@ -0,0 +1,101 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ CALL_RESULT( GSStatsReceived_t )
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ CALL_RESULT( GSStatsStored_t )
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteamhtmlsurface.h b/lsteamclient/steamworks_sdk_138a/isteamhtmlsurface.h
new file mode 100644
index 00000000..9b08e4c3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamhtmlsurface.h
@@ -0,0 +1,453 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to display html pages in a texture
+//
+//=============================================================================
+
+#ifndef ISTEAMHTMLSURFACE_H
+#define ISTEAMHTMLSURFACE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+typedef uint32 HHTMLBrowser;
+const uint32 INVALID_HTMLBROWSER = 0;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for displaying HTML pages and interacting with them
+//-----------------------------------------------------------------------------
+class ISteamHTMLSurface
+{
+public:
+ virtual ~ISteamHTMLSurface() {}
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Create a browser object for display of a html page, when creation is complete the call handle
+ // will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser.
+ // The user agent string is a substring to be added to the general user agent string so you can
+ // identify your client on web servers.
+ // The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if
+ // you do not require this functionality.
+ //
+ // YOU MUST HAVE IMPLEMENTED HANDLERS FOR HTML_BrowserReady_t, HTML_StartRequest_t,
+ // HTML_JSAlert_t, HTML_JSConfirm_t, and HTML_FileOpenDialog_t! See the CALLBACKS
+ // section of this interface (AllowStartRequest, etc) for more details. If you do
+ // not implement these callback handlers, the browser may appear to hang instead of
+ // navigating to new pages or triggering javascript popups.
+ //
+ CALL_RESULT( HTML_BrowserReady_t )
+ virtual SteamAPICall_t CreateBrowser( const char *pchUserAgent, const char *pchUserCSS ) = 0;
+
+ // Call this when you are done with a html surface, this lets us free the resources being used by it
+ virtual void RemoveBrowser( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // Navigate to this URL, results in a HTML_StartRequest_t as the request commences
+ virtual void LoadURL( HHTMLBrowser unBrowserHandle, const char *pchURL, const char *pchPostData ) = 0;
+
+ // Tells the surface the size in pixels to display the surface
+ virtual void SetSize( HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight ) = 0;
+
+ // Stop the load of the current html page
+ virtual void StopLoad( HHTMLBrowser unBrowserHandle ) = 0;
+ // Reload (most likely from local cache) the current page
+ virtual void Reload( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate back in the page history
+ virtual void GoBack( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate forward in the page history
+ virtual void GoForward( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // add this header to any url requests from this browser
+ virtual void AddHeader( HHTMLBrowser unBrowserHandle, const char *pchKey, const char *pchValue ) = 0;
+ // run this javascript script in the currently loaded page
+ virtual void ExecuteJavascript( HHTMLBrowser unBrowserHandle, const char *pchScript ) = 0;
+
+ enum EHTMLMouseButton
+ {
+ eHTMLMouseButton_Left = 0,
+ eHTMLMouseButton_Right = 1,
+ eHTMLMouseButton_Middle = 2,
+ };
+
+ // Mouse click and mouse movement commands
+ virtual void MouseUp( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDown( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDoubleClick( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ // x and y are relative to the HTML bounds
+ virtual void MouseMove( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+ // nDelta is pixels of scroll
+ virtual void MouseWheel( HHTMLBrowser unBrowserHandle, int32 nDelta ) = 0;
+
+ enum EMouseCursor
+ {
+ dc_user = 0,
+ dc_none,
+ dc_arrow,
+ dc_ibeam,
+ dc_hourglass,
+ dc_waitarrow,
+ dc_crosshair,
+ dc_up,
+ dc_sizenw,
+ dc_sizese,
+ dc_sizene,
+ dc_sizesw,
+ dc_sizew,
+ dc_sizee,
+ dc_sizen,
+ dc_sizes,
+ dc_sizewe,
+ dc_sizens,
+ dc_sizeall,
+ dc_no,
+ dc_hand,
+ dc_blank, // don't show any custom cursor, just use your default
+ dc_middle_pan,
+ dc_north_pan,
+ dc_north_east_pan,
+ dc_east_pan,
+ dc_south_east_pan,
+ dc_south_pan,
+ dc_south_west_pan,
+ dc_west_pan,
+ dc_north_west_pan,
+ dc_alias,
+ dc_cell,
+ dc_colresize,
+ dc_copycur,
+ dc_verticaltext,
+ dc_rowresize,
+ dc_zoomin,
+ dc_zoomout,
+ dc_help,
+ dc_custom,
+
+ dc_last, // custom cursors start from this value and up
+ };
+
+ enum EHTMLKeyModifiers
+ {
+ k_eHTMLKeyModifier_None = 0,
+ k_eHTMLKeyModifier_AltDown = 1 << 0,
+ k_eHTMLKeyModifier_CtrlDown = 1 << 1,
+ k_eHTMLKeyModifier_ShiftDown = 1 << 2,
+ };
+
+ // keyboard interactions, native keycode is the virtual key code value from your OS
+ virtual void KeyDown( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ virtual void KeyUp( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ // cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press)
+ virtual void KeyChar( HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+
+ // programmatically scroll this many pixels on the page
+ virtual void SetHorizontalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+ virtual void SetVerticalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+
+ // tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things
+ virtual void SetKeyFocus( HHTMLBrowser unBrowserHandle, bool bHasKeyFocus ) = 0;
+
+ // open the current pages html code in the local editor of choice, used for debugging
+ virtual void ViewSource( HHTMLBrowser unBrowserHandle ) = 0;
+ // copy the currently selected text on the html page to the local clipboard
+ virtual void CopyToClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+ // paste from the local clipboard to the current html page
+ virtual void PasteFromClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element
+ virtual void Find( HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse ) = 0;
+ // cancel a currently running find
+ virtual void StopFind( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // return details about the link at position x,y on the current page
+ virtual void GetLinkAtPosition( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+
+ // set a webcookie for the hostname in question
+ virtual void SetCookie( const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath = "/", RTime32 nExpires = 0, bool bSecure = false, bool bHTTPOnly = false ) = 0;
+
+ // Zoom the current page by flZoom ( from 0.0 to 2.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care)
+ virtual void SetPageScaleFactor( HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY ) = 0;
+
+ // Enable/disable low-resource background mode, where javascript and repaint timers are throttled, resources are
+ // more aggressively purged from memory, and audio/video elements are paused. When background mode is enabled,
+ // all HTML5 video and audio objects will execute ".pause()" and gain the property "._steam_background_paused = 1".
+ // When background mode is disabled, any video or audio objects with that property will resume with ".play()".
+ virtual void SetBackgroundMode( HHTMLBrowser unBrowserHandle, bool bBackgroundMode ) = 0;
+
+ // CALLBACKS
+ //
+ // These set of functions are used as responses to callback requests
+ //
+
+ // You MUST call this in response to a HTML_StartRequest_t callback
+ // Set bAllowed to true to allow this navigation, false to cancel it and stay
+ // on the current page. You can use this feature to limit the valid pages
+ // allowed in your HTML surface.
+ virtual void AllowStartRequest( HHTMLBrowser unBrowserHandle, bool bAllowed ) = 0;
+
+ // You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback
+ // Set bResult to true for the OK option of a confirm, use false otherwise
+ virtual void JSDialogResponse( HHTMLBrowser unBrowserHandle, bool bResult ) = 0;
+
+ // You MUST call this in response to a HTML_FileOpenDialog_t callback
+ IGNOREATTR()
+ virtual void FileLoadDialogResponse( HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles ) = 0;
+};
+
+#define STEAMHTMLSURFACE_INTERFACE_VERSION "STEAMHTMLSURFACE_INTERFACE_VERSION_003"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser is ready for use
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_BrowserReady_t, k_iSteamHTMLSurfaceCallbacks + 1 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this browser is now fully created and ready to navigate to pages
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser has a pending paint
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_NeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 2)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint
+CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called
+CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture
+CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture
+CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update
+CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update
+CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update
+CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update
+CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered
+CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages
+END_DEFINE_CALLBACK_12()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser wanted to navigate to a new page
+// NOTE - you MUST call AllowStartRequest in response to this callback
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_StartRequest_t, k_iSteamHTMLSurfaceCallbacks + 3)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface navigating
+CALLBACK_MEMBER(1, const char *, pchURL) // the url they wish to navigate to
+CALLBACK_MEMBER(2, const char *, pchTarget) // the html link target type (i.e _blank, _self, _parent, _top )
+CALLBACK_MEMBER(3, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER(4, bool, bIsRedirect) // true if this was a http/html redirect from the last load request
+END_DEFINE_CALLBACK_5()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser has been requested to close due to user interaction (usually from a javascript window.close() call)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_CloseBrowser_t, k_iSteamHTMLSurfaceCallbacks + 4)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser is navigating to a new url
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_URLChanged_t, k_iSteamHTMLSurfaceCallbacks + 5 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface navigating
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the url they wish to navigate to
+CALLBACK_MEMBER( 2, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER( 3, bool, bIsRedirect ) // true if this was a http/html redirect from the last load request
+CALLBACK_MEMBER( 4, const char *, pchPageTitle ) // the title of the page
+CALLBACK_MEMBER( 5, bool, bNewNavigation ) // true if this was from a fresh tab and not a click on an existing page
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A page is finished loading
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FinishedRequest_t, k_iSteamHTMLSurfaceCallbacks + 6 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+CALLBACK_MEMBER( 2, const char *, pchPageTitle ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a request to load this url in a new tab
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_OpenLinkInNewTab_t, k_iSteamHTMLSurfaceCallbacks + 7 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the page has a new title now
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ChangedTitle_t, k_iSteamHTMLSurfaceCallbacks + 8 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: results from a search
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SearchResults_t, k_iSteamHTMLSurfaceCallbacks + 9 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unResults ) //
+CALLBACK_MEMBER( 2, uint32, unCurrentMatch ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: page history status changed on the ability to go backwards and forward
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_CanGoBackAndForward_t, k_iSteamHTMLSurfaceCallbacks + 10 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, bool, bCanGoBack ) //
+CALLBACK_MEMBER( 2, bool, bCanGoForward ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the horizontal scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HorizontalScroll_t, k_iSteamHTMLSurfaceCallbacks + 11 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool , bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the vertical scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_VerticalScroll_t, k_iSteamHTMLSurfaceCallbacks + 12 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool, bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetLinkAtPosition call
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_LinkAtPosition_t, k_iSteamHTMLSurfaceCallbacks + 13 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, x ) // NOTE - Not currently set
+CALLBACK_MEMBER( 2, uint32, y ) // NOTE - Not currently set
+CALLBACK_MEMBER( 3, const char *, pchURL ) //
+CALLBACK_MEMBER( 4, bool, bInput ) //
+CALLBACK_MEMBER( 5, bool, bLiveLink ) //
+END_DEFINE_CALLBACK_6()
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript alert dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSAlert_t, k_iSteamHTMLSurfaceCallbacks + 14 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript confirmation dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSConfirm_t, k_iSteamHTMLSurfaceCallbacks + 15 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: when received show a file open dialog
+// then call FileLoadDialogResponse with the file(s) the user selected.
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FileOpenDialog_t, k_iSteamHTMLSurfaceCallbacks + 16 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+CALLBACK_MEMBER( 2, const char *, pchInitialFile ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new html window has been created
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_NewWindow_t, k_iSteamHTMLSurfaceCallbacks + 21 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the current surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the page to load
+CALLBACK_MEMBER( 2, uint32, unX ) // the x pos into the page to display the popup
+CALLBACK_MEMBER( 3, uint32, unY ) // the y pos into the page to display the popup
+CALLBACK_MEMBER( 4, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 5, uint32, unTall ) // the total height of the pBGRA texture
+CALLBACK_MEMBER( 6, HHTMLBrowser, unNewWindow_BrowserHandle ) // the handle of the new window surface
+END_DEFINE_CALLBACK_7()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: change the cursor to display
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SetCursor_t, k_iSteamHTMLSurfaceCallbacks + 22 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, eMouseCursor ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: informational message from the browser
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_StatusText_t, k_iSteamHTMLSurfaceCallbacks + 23 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ShowToolTip_t, k_iSteamHTMLSurfaceCallbacks + 24 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: update the text of an existing tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_UpdateToolTip_t, k_iSteamHTMLSurfaceCallbacks + 25 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: hide the tooltip you are showing
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HideToolTip_t, k_iSteamHTMLSurfaceCallbacks + 26 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMHTMLSURFACE_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteamhttp.h b/lsteamclient/steamworks_sdk_138a/isteamhttp.h
new file mode 100644
index 00000000..d96a631f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamhttp.h
@@ -0,0 +1,210 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+typedef uint32 HTTPCookieContainerHandle;
+#define INVALID_HTTPCOOKIE_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Both http and https are supported,
+ // so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+
+ // Creates a cookie container handle which you must later free with ReleaseCookieContainer(). If bAllowResponsesToModify=true
+ // than any response to your requests using this cookie container may add new cookies which may be transmitted with
+ // future requests. If bAllowResponsesToModify=false than only cookies you explicitly set will be sent. This API is just for
+ // during process lifetime, after steam restarts no cookies are persisted and you have no way to access the cookie container across
+ // repeat executions of your process.
+ virtual HTTPCookieContainerHandle CreateCookieContainer( bool bAllowResponsesToModify ) = 0;
+
+ // Release a cookie container you are finished using, freeing it's memory
+ virtual bool ReleaseCookieContainer( HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Adds a cookie to the specified cookie container that will be used with future requests.
+ virtual bool SetCookie( HTTPCookieContainerHandle hCookieContainer, const char *pchHost, const char *pchUrl, const char *pchCookie ) = 0;
+
+ // Set the cookie container to use for a HTTP request
+ virtual bool SetHTTPRequestCookieContainer( HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Set the extra user agent info for a request, this doesn't clobber the normal user agent, it just adds the extra info on the end
+ virtual bool SetHTTPRequestUserAgentInfo( HTTPRequestHandle hRequest, const char *pchUserAgentInfo ) = 0;
+
+ // Set that https request should require verified SSL certificate via machines certificate trust store
+ virtual bool SetHTTPRequestRequiresVerifiedCertificate( HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate ) = 0;
+
+ // Set an absolute timeout on the HTTP request, this is just a total time timeout different than the network activity timeout
+ // which can bump everytime we get more data
+ virtual bool SetHTTPRequestAbsoluteTimeoutMS( HTTPRequestHandle hRequest, uint32 unMilliseconds ) = 0;
+
+ // Check if the reason the request failed was because we timed it out (rather than some harder failure)
+ virtual bool GetHTTPRequestWasTimedOut( HTTPRequestHandle hRequest, bool *pbWasTimedOut ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+
+ uint32 m_unBodySize; // Same as GetHTTPResponseBodySize()
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_138a/isteaminventory.h b/lsteamclient/steamworks_sdk_138a/isteaminventory.h
new file mode 100644
index 00000000..b18043dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteaminventory.h
@@ -0,0 +1,357 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Inventory
+//
+//=============================================================================
+
+#ifndef ISTEAMINVENTORY_H
+#define ISTEAMINVENTORY_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// Every individual instance of an item has a globally-unique ItemInstanceID.
+// This ID is unique to the combination of (player, specific item instance)
+// and will not be transferred to another player or re-used for another item.
+typedef uint64 SteamItemInstanceID_t;
+
+static const SteamItemInstanceID_t k_SteamItemInstanceIDInvalid = (SteamItemInstanceID_t)~0;
+
+// Types of items in your game are identified by a 32-bit "item definition number".
+// Valid definition numbers are between 1 and 999999999; numbers less than or equal to
+// zero are invalid, and numbers greater than or equal to one billion (1x10^9) are
+// reserved for internal Steam use.
+typedef int32 SteamItemDef_t;
+
+
+enum ESteamItemFlags
+{
+ // Item status flags - these flags are permanently attached to specific item instances
+ k_ESteamItemNoTrade = 1 << 0, // This item is account-locked and cannot be traded or given away.
+
+ // Action confirmation flags - these flags are set one time only, as part of a result set
+ k_ESteamItemRemoved = 1 << 8, // The item has been destroyed, traded away, expired, or otherwise invalidated
+ k_ESteamItemConsumed = 1 << 9, // The item quantity has been decreased by 1 via ConsumeItem API.
+
+ // All other flag bits are currently reserved for internal Steam use at this time.
+ // Do not assume anything about the state of other flags which are not defined here.
+};
+
+struct SteamItemDetails_t
+{
+ SteamItemInstanceID_t m_itemId;
+ SteamItemDef_t m_iDefinition;
+ uint16 m_unQuantity;
+ uint16 m_unFlags; // see ESteamItemFlags
+};
+
+typedef int32 SteamInventoryResult_t;
+
+static const SteamInventoryResult_t k_SteamInventoryResultInvalid = -1;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Inventory query and manipulation API
+//-----------------------------------------------------------------------------
+class ISteamInventory
+{
+public:
+
+ // INVENTORY ASYNC RESULT MANAGEMENT
+ //
+ // Asynchronous inventory queries always output a result handle which can be used with
+ // GetResultStatus, GetResultItems, etc. A SteamInventoryResultReady_t callback will
+ // be triggered when the asynchronous result becomes ready (or fails).
+ //
+
+ // Find out the status of an asynchronous inventory result handle. Possible values:
+ // k_EResultPending - still in progress
+ // k_EResultOK - done, result ready
+ // k_EResultExpired - done, result ready, maybe out of date (see DeserializeResult)
+ // k_EResultInvalidParam - ERROR: invalid API call parameters
+ // k_EResultServiceUnavailable - ERROR: service temporarily down, you may retry later
+ // k_EResultLimitExceeded - ERROR: operation would exceed per-user inventory limits
+ // k_EResultFail - ERROR: unknown / generic error
+ METHOD_DESC(Find out the status of an asynchronous inventory result handle.)
+ virtual EResult GetResultStatus( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Copies the contents of a result set into a flat array. The specific
+ // contents of the result set depend on which query which was used.
+ METHOD_DESC(Copies the contents of a result set into a flat array. The specific contents of the result set depend on which query which was used.)
+ virtual bool GetResultItems( SteamInventoryResult_t resultHandle,
+ OUT_ARRAY_COUNT( punOutItemsArraySize,Output array) SteamItemDetails_t *pOutItemsArray,
+ uint32 *punOutItemsArraySize ) = 0;
+
+ // Returns the server time at which the result was generated. Compare against
+ // the value of IClientUtils::GetServerRealTime() to determine age.
+ METHOD_DESC(Returns the server time at which the result was generated. Compare against the value of IClientUtils::GetServerRealTime() to determine age.)
+ virtual uint32 GetResultTimestamp( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Returns true if the result belongs to the target steam ID, false if the
+ // result does not. This is important when using DeserializeResult, to verify
+ // that a remote player is not pretending to have a different user's inventory.
+ METHOD_DESC(Returns true if the result belongs to the target steam ID or false if the result does not. This is important when using DeserializeResult to verify that a remote player is not pretending to have a different users inventory.)
+ virtual bool CheckResultSteamID( SteamInventoryResult_t resultHandle, CSteamID steamIDExpected ) = 0;
+
+ // Destroys a result handle and frees all associated memory.
+ METHOD_DESC(Destroys a result handle and frees all associated memory.)
+ virtual void DestroyResult( SteamInventoryResult_t resultHandle ) = 0;
+
+
+ // INVENTORY ASYNC QUERY
+ //
+
+ // Captures the entire state of the current user's Steam inventory.
+ // You must call DestroyResult on this handle when you are done with it.
+ // Returns false and sets *pResultHandle to zero if inventory is unavailable.
+ // Note: calls to this function are subject to rate limits and may return
+ // cached results if called too frequently. It is suggested that you call
+ // this function only when you are about to display the user's full inventory,
+ // or if you expect that the inventory may have changed.
+ METHOD_DESC(Captures the entire state of the current users Steam inventory.)
+ virtual bool GetAllItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+
+ // Captures the state of a subset of the current user's Steam inventory,
+ // identified by an array of item instance IDs. The results from this call
+ // can be serialized and passed to other players to "prove" that the current
+ // user owns specific items, without exposing the user's entire inventory.
+ // For example, you could call GetItemsByID with the IDs of the user's
+ // currently equipped cosmetic items and serialize this to a buffer, and
+ // then transmit this buffer to other players upon joining a game.
+ METHOD_DESC(Captures the state of a subset of the current users Steam inventory identified by an array of item instance IDs.)
+ virtual bool GetItemsByID( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT( unCountInstanceIDs ) const SteamItemInstanceID_t *pInstanceIDs, uint32 unCountInstanceIDs ) = 0;
+
+
+ // RESULT SERIALIZATION AND AUTHENTICATION
+ //
+ // Serialized result sets contain a short signature which can't be forged
+ // or replayed across different game sessions. A result set can be serialized
+ // on the local client, transmitted to other players via your game networking,
+ // and deserialized by the remote players. This is a secure way of preventing
+ // hackers from lying about posessing rare/high-value items.
+
+ // Serializes a result set with signature bytes to an output buffer. Pass
+ // NULL as an output buffer to get the required size via punOutBufferSize.
+ // The size of a serialized result depends on the number items which are being
+ // serialized. When securely transmitting items to other players, it is
+ // recommended to use "GetItemsByID" first to create a minimal result set.
+ // Results have a built-in timestamp which will be considered "expired" after
+ // an hour has elapsed. See DeserializeResult for expiration handling.
+ virtual bool SerializeResult( SteamInventoryResult_t resultHandle, OUT_BUFFER_COUNT(punOutBufferSize) void *pOutBuffer, uint32 *punOutBufferSize ) = 0;
+
+ // Deserializes a result set and verifies the signature bytes. Returns false
+ // if bRequireFullOnlineVerify is set but Steam is running in Offline mode.
+ // Otherwise returns true and then delivers error codes via GetResultStatus.
+ //
+ // The bRESERVED_MUST_BE_FALSE flag is reserved for future use and should not
+ // be set to true by your game at this time.
+ //
+ // DeserializeResult has a potential soft-failure mode where the handle status
+ // is set to k_EResultExpired. GetResultItems() still succeeds in this mode.
+ // The "expired" result could indicate that the data may be out of date - not
+ // just due to timed expiration (one hour), but also because one of the items
+ // in the result set may have been traded or consumed since the result set was
+ // generated. You could compare the timestamp from GetResultTimestamp() to
+ // ISteamUtils::GetServerRealTime() to determine how old the data is. You could
+ // simply ignore the "expired" result code and continue as normal, or you
+ // could challenge the player with expired data to send an updated result set.
+ virtual bool DeserializeResult( SteamInventoryResult_t *pOutResultHandle, BUFFER_COUNT(punOutBufferSize) const void *pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE = false ) = 0;
+
+
+ // INVENTORY ASYNC MODIFICATION
+ //
+
+ // GenerateItems() creates one or more items and then generates a SteamInventoryCallback_t
+ // notification with a matching nCallbackContext parameter. This API is insecure, and could
+ // be abused by hacked clients. It is, however, very useful as a development cheat or as
+ // a means of prototyping item-related features for your game. The use of GenerateItems can
+ // be restricted to certain item definitions or fully blocked via the Steamworks website.
+ // If punArrayQuantity is not NULL, it should be the same length as pArrayItems and should
+ // describe the quantity of each item to generate.
+ virtual bool GenerateItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, ARRAY_COUNT(unArrayLength) const uint32 *punArrayQuantity, uint32 unArrayLength ) = 0;
+
+ // GrantPromoItems() checks the list of promotional items for which the user may be eligible
+ // and grants the items (one time only). On success, the result set will include items which
+ // were granted, if any. If no items were granted because the user isn't eligible for any
+ // promotions, this is still considered a success.
+ METHOD_DESC(GrantPromoItems() checks the list of promotional items for which the user may be eligible and grants the items (one time only).)
+ virtual bool GrantPromoItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+ // AddPromoItem() / AddPromoItems() are restricted versions of GrantPromoItems(). Instead of
+ // scanning for all eligible promotional items, the check is restricted to a single item
+ // definition or set of item definitions. This can be useful if your game has custom UI for
+ // showing a specific promo item to the user.
+ virtual bool AddPromoItem( SteamInventoryResult_t *pResultHandle, SteamItemDef_t itemDef ) = 0;
+ virtual bool AddPromoItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, uint32 unArrayLength ) = 0;
+
+ // ConsumeItem() removes items from the inventory, permanently. They cannot be recovered.
+ // Not for the faint of heart - if your game implements item removal at all, a high-friction
+ // UI confirmation process is highly recommended. Similar to GenerateItems, punArrayQuantity
+ // can be NULL or else an array of the same length as pArrayItems which describe the quantity
+ // of each item to destroy. ConsumeItem can be restricted to certain item definitions or
+ // fully blocked via the Steamworks website to minimize support/abuse issues such as the
+ // clasic "my brother borrowed my laptop and deleted all of my rare items".
+ METHOD_DESC(ConsumeItem() removes items from the inventory permanently.)
+ virtual bool ConsumeItem( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity ) = 0;
+
+ // ExchangeItems() is an atomic combination of GenerateItems and DestroyItems. It can be
+ // used to implement crafting recipes or transmutations, or items which unpack themselves
+ // into other items. Like GenerateItems, this is a flexible and dangerous API which is
+ // meant for rapid prototyping. You can configure restrictions on ExchangeItems via the
+ // Steamworks website, such as limiting it to a whitelist of input/output combinations
+ // corresponding to recipes.
+ // (Note: although GenerateItems may be hard or impossible to use securely in your game,
+ // ExchangeItems is perfectly reasonable to use once the whitelists are set accordingly.)
+ virtual bool ExchangeItems( SteamInventoryResult_t *pResultHandle,
+ ARRAY_COUNT(unArrayGenerateLength) const SteamItemDef_t *pArrayGenerate, ARRAY_COUNT(unArrayGenerateLength) const uint32 *punArrayGenerateQuantity, uint32 unArrayGenerateLength,
+ ARRAY_COUNT(unArrayDestroyLength) const SteamItemInstanceID_t *pArrayDestroy, ARRAY_COUNT(unArrayDestroyLength) const uint32 *punArrayDestroyQuantity, uint32 unArrayDestroyLength ) = 0;
+
+
+ // TransferItemQuantity() is intended for use with items which are "stackable" (can have
+ // quantity greater than one). It can be used to split a stack into two, or to transfer
+ // quantity from one stack into another stack of identical items. To split one stack into
+ // two, pass k_SteamItemInstanceIDInvalid for itemIdDest and a new item will be generated.
+ virtual bool TransferItemQuantity( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest ) = 0;
+
+
+ // TIMED DROPS AND PLAYTIME CREDIT
+ //
+
+ // Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when
+ // active gameplay begins, and at least once every two minutes afterwards. The backend
+ // performs its own time calculations, so the precise timing of the heartbeat is not
+ // critical as long as you send at least one heartbeat every two minutes. Calling the
+ // function more often than that is not harmful, it will simply have no effect. Note:
+ // players may be able to spoof this message by hacking their client, so you should not
+ // attempt to use this as a mechanism to restrict playtime credits. It is simply meant
+ // to distinguish between being in any kind of gameplay situation vs the main menu or
+ // a pre-game launcher window. (If you are stingy with handing out playtime credit, it
+ // will only encourage players to run bots or use mouse/kb event simulators.)
+ //
+ // Playtime credit accumulation can be capped on a daily or weekly basis through your
+ // Steamworks configuration.
+ //
+ METHOD_DESC(Applications which use timed-drop mechanics should call SendItemDropHeartbeat() when active gameplay begins and at least once every two minutes afterwards.)
+ virtual void SendItemDropHeartbeat() = 0;
+
+ // Playtime credit must be consumed and turned into item drops by your game. Only item
+ // definitions which are marked as "playtime item generators" can be spawned. The call
+ // will return an empty result set if there is not enough playtime credit for a drop.
+ // Your game should call TriggerItemDrop at an appropriate time for the user to receive
+ // new items, such as between rounds or while the player is dead. Note that players who
+ // hack their clients could modify the value of "dropListDefinition", so do not use it
+ // to directly control rarity. It is primarily useful during testing and development,
+ // where you may wish to perform experiments with different types of drops.
+ METHOD_DESC(Playtime credit must be consumed and turned into item drops by your game.)
+ virtual bool TriggerItemDrop( SteamInventoryResult_t *pResultHandle, SteamItemDef_t dropListDefinition ) = 0;
+
+
+ // IN-GAME TRADING
+ //
+ // TradeItems() implements limited in-game trading of items, if you prefer not to use
+ // the overlay or an in-game web browser to perform Steam Trading through the website.
+ // You should implement a UI where both players can see and agree to a trade, and then
+ // each client should call TradeItems simultaneously (+/- 5 seconds) with matching
+ // (but reversed) parameters. The result is the same as if both players performed a
+ // Steam Trading transaction through the web. Each player will get an inventory result
+ // confirming the removal or quantity changes of the items given away, and the new
+ // item instance id numbers and quantities of the received items.
+ // (Note: new item instance IDs are generated whenever an item changes ownership.)
+ virtual bool TradeItems( SteamInventoryResult_t *pResultHandle, CSteamID steamIDTradePartner,
+ ARRAY_COUNT(nArrayGiveLength) const SteamItemInstanceID_t *pArrayGive, ARRAY_COUNT(nArrayGiveLength) const uint32 *pArrayGiveQuantity, uint32 nArrayGiveLength,
+ ARRAY_COUNT(nArrayGetLength) const SteamItemInstanceID_t *pArrayGet, ARRAY_COUNT(nArrayGetLength) const uint32 *pArrayGetQuantity, uint32 nArrayGetLength ) = 0;
+
+
+ // ITEM DEFINITIONS
+ //
+ // Item definitions are a mapping of "definition IDs" (integers between 1 and 1000000)
+ // to a set of string properties. Some of these properties are required to display items
+ // on the Steam community web site. Other properties can be defined by applications.
+ // Use of these functions is optional; there is no reason to call LoadItemDefinitions
+ // if your game hardcodes the numeric definition IDs (eg, purple face mask = 20, blue
+ // weapon mod = 55) and does not allow for adding new item types without a client patch.
+ //
+
+ // LoadItemDefinitions triggers the automatic load and refresh of item definitions.
+ // Every time new item definitions are available (eg, from the dynamic addition of new
+ // item types while players are still in-game), a SteamInventoryDefinitionUpdate_t
+ // callback will be fired.
+ METHOD_DESC(LoadItemDefinitions triggers the automatic load and refresh of item definitions.)
+ virtual bool LoadItemDefinitions() = 0;
+
+ // GetItemDefinitionIDs returns the set of all defined item definition IDs (which are
+ // defined via Steamworks configuration, and not necessarily contiguous integers).
+ // If pItemDefIDs is null, the call will return true and *punItemDefIDsArraySize will
+ // contain the total size necessary for a subsequent call. Otherwise, the call will
+ // return false if and only if there is not enough space in the output array.
+ virtual bool GetItemDefinitionIDs(
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+
+ // GetItemDefinitionProperty returns a string property from a given item definition.
+ // Note that some properties (for example, "name") may be localized and will depend
+ // on the current Steam language settings (see ISteamApps::GetCurrentGameLanguage).
+ // Property names are always composed of ASCII letters, numbers, and/or underscores.
+ // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available
+ // property names. If pchValueBuffer is NULL, *punValueBufferSize will contain the
+ // suggested buffer size. Otherwise it will be the number of bytes actually copied
+ // to pchValueBuffer. If the results do not fit in the given buffer, partial
+ // results may be copied.
+ virtual bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPropertyName,
+ OUT_STRING_COUNT(punValueBufferSizeOut) char *pchValueBuffer, uint32 *punValueBufferSizeOut ) = 0;
+};
+
+#define STEAMINVENTORY_INTERFACE_VERSION "STEAMINVENTORY_INTERFACE_V001"
+
+
+// SteamInventoryResultReady_t callbacks are fired whenever asynchronous
+// results transition from "Pending" to "OK" or an error state. There will
+// always be exactly one callback per handle.
+struct SteamInventoryResultReady_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 0 };
+ SteamInventoryResult_t m_handle;
+ EResult m_result;
+};
+
+
+// SteamInventoryFullUpdate_t callbacks are triggered when GetAllItems
+// successfully returns a result which is newer / fresher than the last
+// known result. (It will not trigger if the inventory hasn't changed,
+// or if results from two overlapping calls are reversed in flight and
+// the earlier result is already known to be stale/out-of-date.)
+// The normal ResultReady callback will still be triggered immediately
+// afterwards; this is an additional notification for your convenience.
+struct SteamInventoryFullUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 1 };
+ SteamInventoryResult_t m_handle;
+};
+
+
+// A SteamInventoryDefinitionUpdate_t callback is triggered whenever
+// item definitions have been updated, which could be in response to
+// LoadItemDefinitions() or any other async request which required
+// a definition update in order to process results from the server.
+struct SteamInventoryDefinitionUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_138a/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_138a/isteammatchmaking.h b/lsteamclient/steamworks_sdk_138a/isteammatchmaking.h
new file mode 100644
index 00000000..5af69129
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteammatchmaking.h
@@ -0,0 +1,751 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) = 0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ CALL_RESULT( LobbyMatchList_t )
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ CALL_RESULT( LobbyCreated_t )
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ CALL_RESULT( LobbyEnter_t )
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, OUT_STRUCT() CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, OUT_STRUCT() CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+ CALL_BACK( LobbyChatUpdate_t )
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_138a/isteammusic.h b/lsteamclient/steamworks_sdk_138a/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteammusicremote.h b/lsteamclient/steamworks_sdk_138a/isteammusicremote.h
new file mode 100644
index 00000000..5893ef4b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteammusicremote.h
@@ -0,0 +1,129 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSICREMOTE_H
+#define ISTEAMMUSICREMOTE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteammusic.h"
+
+#define k_SteamMusicNameMaxLength 255
+#define k_SteamMusicPNGMaxLength 65535
+
+
+class ISteamMusicRemote
+{
+public:
+ // Service Definition
+ virtual bool RegisterSteamMusicRemote( const char *pchName ) = 0;
+ virtual bool DeregisterSteamMusicRemote() = 0;
+ virtual bool BIsCurrentMusicRemote() = 0;
+ virtual bool BActivationSuccess( bool bValue ) = 0;
+
+ virtual bool SetDisplayName( const char *pchDisplayName ) = 0;
+ virtual bool SetPNGIcon_64x64( void *pvBuffer, uint32 cbBufferLength ) = 0;
+
+ // Abilities for the user interface
+ virtual bool EnablePlayPrevious(bool bValue) = 0;
+ virtual bool EnablePlayNext( bool bValue ) = 0;
+ virtual bool EnableShuffled( bool bValue ) = 0;
+ virtual bool EnableLooped( bool bValue ) = 0;
+ virtual bool EnableQueue( bool bValue ) = 0;
+ virtual bool EnablePlaylists( bool bValue ) = 0;
+
+ // Status
+ virtual bool UpdatePlaybackStatus( AudioPlayback_Status nStatus ) = 0;
+ virtual bool UpdateShuffled( bool bValue ) = 0;
+ virtual bool UpdateLooped( bool bValue ) = 0;
+ virtual bool UpdateVolume( float flValue ) = 0; // volume is between 0.0 and 1.0
+
+ // Current Entry
+ virtual bool CurrentEntryWillChange() = 0;
+ virtual bool CurrentEntryIsAvailable( bool bAvailable ) = 0;
+ virtual bool UpdateCurrentEntryText( const char *pchText ) = 0;
+ virtual bool UpdateCurrentEntryElapsedSeconds( int nValue ) = 0;
+ virtual bool UpdateCurrentEntryCoverArt( void *pvBuffer, uint32 cbBufferLength ) = 0;
+ virtual bool CurrentEntryDidChange() = 0;
+
+ // Queue
+ virtual bool QueueWillChange() = 0;
+ virtual bool ResetQueueEntries() = 0;
+ virtual bool SetQueueEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentQueueEntry( int nID ) = 0;
+ virtual bool QueueDidChange() = 0;
+
+ // Playlist
+ virtual bool PlaylistWillChange() = 0;
+ virtual bool ResetPlaylistEntries() = 0;
+ virtual bool SetPlaylistEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentPlaylistEntry( int nID ) = 0;
+ virtual bool PlaylistDidChange() = 0;
+};
+
+#define STEAMMUSICREMOTE_INTERFACE_VERSION "STEAMMUSICREMOTE_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillActivate_t, k_iSteamMusicRemoteCallbacks + 1)
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillDeactivate_t, k_iSteamMusicRemoteCallbacks + 2 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteToFront_t, k_iSteamMusicRemoteCallbacks + 3 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWillQuit_t, k_iSteamMusicRemoteCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlay_t, k_iSteamMusicRemoteCallbacks + 5 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPause_t, k_iSteamMusicRemoteCallbacks + 6 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayPrevious_t, k_iSteamMusicRemoteCallbacks + 7 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayNext_t, k_iSteamMusicRemoteCallbacks + 8 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsShuffled_t, k_iSteamMusicRemoteCallbacks + 9 )
+ CALLBACK_MEMBER( 0, bool, m_bShuffled )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsLooped_t, k_iSteamMusicRemoteCallbacks + 10 )
+ CALLBACK_MEMBER(0, bool, m_bLooped )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsVolume_t, k_iSteamMusicCallbacks + 11 )
+ CALLBACK_MEMBER(0, float, m_flNewVolume)
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsQueueEntry_t, k_iSteamMusicCallbacks + 12 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsPlaylistEntry_t, k_iSteamMusicCallbacks + 13 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayingRepeatStatus_t, k_iSteamMusicRemoteCallbacks + 14 )
+ CALLBACK_MEMBER(0, int, m_nPlayingRepeatStatus )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+
+#endif // #define ISTEAMMUSICREMOTE_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteamnetworking.h b/lsteamclient/steamworks_sdk_138a/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_138a/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_138a/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_138a/isteamremotestorage.h b/lsteamclient/steamworks_sdk_138a/isteamremotestorage.h
new file mode 100644
index 00000000..7ca558e2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamremotestorage.h
@@ -0,0 +1,681 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0, // normal Workshop item that can be subscribed to
+ k_EWorkshopFileTypeMicrotransaction = 1, // Workshop item that is meant to be voted on for the purpose of selling in-game
+ k_EWorkshopFileTypeCollection = 2, // a collection of Workshop or Greenlight items
+ k_EWorkshopFileTypeArt = 3, // artwork
+ k_EWorkshopFileTypeVideo = 4, // external video
+ k_EWorkshopFileTypeScreenshot = 5, // screenshot
+ k_EWorkshopFileTypeGame = 6, // Greenlight game entry
+ k_EWorkshopFileTypeSoftware = 7, // Greenlight software entry
+ k_EWorkshopFileTypeConcept = 8, // Greenlight concept
+ k_EWorkshopFileTypeWebGuide = 9, // Steam web guide
+ k_EWorkshopFileTypeIntegratedGuide = 10, // application integrated guide
+ k_EWorkshopFileTypeMerch = 11, // Workshop merchandise meant to be voted on for the purpose of being sold
+ k_EWorkshopFileTypeControllerBinding = 12, // Steam Controller bindings
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13, // internal
+ k_EWorkshopFileTypeSteamVideo = 14, // Steam video
+ k_EWorkshopFileTypeGameManagedItem = 15, // managed completely by the game, not the user, and not shown on the web
+
+ // Update k_EWorkshopFileTypeMax if you add values.
+ k_EWorkshopFileTypeMax = 16
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+ k_EWorkshopVoteLater = 3,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+
+ CALL_RESULT( RemoteStorageFileWriteAsyncComplete_t )
+ virtual SteamAPICall_t FileWriteAsync( const char *pchFile, const void *pvData, uint32 cubData ) = 0;
+
+ CALL_RESULT( RemoteStorageFileReadAsyncComplete_t )
+ virtual SteamAPICall_t FileReadAsync( const char *pchFile, uint32 nOffset, uint32 cubToRead ) = 0;
+ virtual bool FileReadAsyncComplete( SteamAPICall_t hReadCall, void *pvBuffer, uint32 cubToRead ) = 0;
+
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ CALL_RESULT( RemoteStorageFileShareResult_t )
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( uint64 *pnTotalBytes, uint64 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ CALL_RESULT( RemoteStorageDownloadUGCResult_t )
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, OUT_STRING() char **ppchName, int32 *pnFileSizeInBytes, OUT_STRUCT() CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ CALL_RESULT( RemoteStoragePublishFileProgress_t )
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ CALL_RESULT( RemoteStorageUpdatePublishedFileResult_t )
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ CALL_RESULT( RemoteStorageGetPublishedFileDetailsResult_t )
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ CALL_RESULT( RemoteStorageDeletePublishedFileResult_t )
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ CALL_RESULT( RemoteStorageEnumerateUserPublishedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ CALL_RESULT( RemoteStorageSubscribePublishedFileResult_t )
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageEnumerateUserSubscribedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ CALL_RESULT( RemoteStorageUnsubscribePublishedFileResult_t )
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ CALL_RESULT( RemoteStorageGetPublishedItemVoteDetailsResult_t )
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageUpdateUserPublishedItemVoteResult_t )
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ CALL_RESULT( RemoteStorageGetPublishedItemVoteDetailsResult_t )
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageEnumerateUserPublishedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ CALL_RESULT( RemoteStoragePublishFileProgress_t )
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ CALL_RESULT( RemoteStorageSetUserPublishedFileActionResult_t )
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ CALL_RESULT( RemoteStorageEnumeratePublishedFilesByUserActionResult_t )
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ CALL_RESULT( RemoteStorageEnumerateWorkshopFilesResult_t )
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ CALL_RESULT( RemoteStorageDownloadUGCResult_t )
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION014"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ uint64 m_ulUnused; // not used anymore
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileWriteAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileWriteAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 31 };
+ EResult m_eResult; // result
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileReadAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileReadAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 32 };
+ SteamAPICall_t m_hFileReadAsync; // call handle of the async read which was made
+ EResult m_eResult; // result
+ uint32 m_nOffset; // offset in the file this read was at
+ uint32 m_cubRead; // amount read - will the <= the amount requested
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteamscreenshots.h b/lsteamclient/steamworks_sdk_138a/isteamscreenshots.h
new file mode 100644
index 00000000..653b28a4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamscreenshots.h
@@ -0,0 +1,116 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+enum EVRScreenshotType
+{
+ k_EVRScreenshotType_None = 0,
+ k_EVRScreenshotType_Mono = 1,
+ k_EVRScreenshotType_Stereo = 2,
+ k_EVRScreenshotType_MonoCubemap = 3,
+ k_EVRScreenshotType_MonoPanorama = 4,
+ k_EVRScreenshotType_StereoPanorama = 5
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+
+ // Returns true if the app has hooked the screenshot
+ virtual bool IsScreenshotsHooked() = 0;
+
+ // Adds a VR screenshot to the user's screenshot library from disk in the supported type.
+ // pchFilename should be the normal 2D image used in the library view
+ // pchVRFilename should contain the image that matches the correct type
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddVRScreenshotToLibrary( EVRScreenshotType eType, const char *pchFilename, const char *pchVRFilename ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION003"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMSCREENSHOTS_H
+
diff --git a/lsteamclient/steamworks_sdk_138a/isteamugc.h b/lsteamclient/steamworks_sdk_138a/isteamugc.h
new file mode 100644
index 00000000..34af559f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamugc.h
@@ -0,0 +1,453 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+ k_EUGCMatchingUGCType_GameManagedItems = 12, // game managed items (not managed by users)
+ k_EUGCMatchingUGCType_All = ~0, // return everything
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+ k_EUGCQuery_RankedByTotalUniqueSubscriptions = 12,
+ k_EUGCQuery_RankedByPlaytimeTrend = 13,
+ k_EUGCQuery_RankedByTotalPlaytime = 14,
+ k_EUGCQuery_RankedByAveragePlaytimeTrend = 15,
+ k_EUGCQuery_RankedByLifetimeAveragePlaytime = 16,
+ k_EUGCQuery_RankedByPlaytimeSessionsTrend = 17,
+ k_EUGCQuery_RankedByLifetimePlaytimeSessions = 18,
+};
+
+enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0, // The item update handle was invalid, job might be finished, listen too SubmitItemUpdateResult_t
+ k_EItemUpdateStatusPreparingConfig = 1, // The item update is processing configuration data
+ k_EItemUpdateStatusPreparingContent = 2, // The item update is reading and processing content files
+ k_EItemUpdateStatusUploadingContent = 3, // The item update is uploading content changes to Steam
+ k_EItemUpdateStatusUploadingPreviewFile = 4, // The item update is uploading new preview file image
+ k_EItemUpdateStatusCommittingChanges = 5 // The item update is committing all changes
+};
+
+enum EItemState
+{
+ k_EItemStateNone = 0, // item not tracked on client
+ k_EItemStateSubscribed = 1, // current user is subscribed to this item. Not just cached.
+ k_EItemStateLegacyItem = 2, // item was created with ISteamRemoteStorage
+ k_EItemStateInstalled = 4, // item is installed and usable (but maybe out of date)
+ k_EItemStateNeedsUpdate = 8, // items needs an update. Either because it's not installed yet or creator updated content
+ k_EItemStateDownloading = 16, // item update is currently downloading
+ k_EItemStateDownloadPending = 32, // DownloadItem() was called for this item, content isn't available until DownloadItemResult_t is fired
+};
+
+enum EItemStatistic
+{
+ k_EItemStatistic_NumSubscriptions = 0,
+ k_EItemStatistic_NumFavorites = 1,
+ k_EItemStatistic_NumFollowers = 2,
+ k_EItemStatistic_NumUniqueSubscriptions = 3,
+ k_EItemStatistic_NumUniqueFavorites = 4,
+ k_EItemStatistic_NumUniqueFollowers = 5,
+ k_EItemStatistic_NumUniqueWebsiteViews = 6,
+ k_EItemStatistic_ReportScore = 7,
+ k_EItemStatistic_NumSecondsPlayed = 8,
+ k_EItemStatistic_NumPlaytimeSessions = 9,
+ k_EItemStatistic_NumComments = 10,
+};
+
+enum EItemPreviewType
+{
+ k_EItemPreviewType_Image = 0, // standard image file expected (e.g. jpg, png, gif, etc.)
+ k_EItemPreviewType_YouTubeVideo = 1, // video id is stored
+ k_EItemPreviewType_Sketchfab = 2, // model id is stored
+ k_EItemPreviewType_EnvironmentMap_HorizontalCross = 3, // standard image file expected - cube map in the layout
+ // +---+---+-------+
+ // | |Up | |
+ // +---+---+---+---+
+ // | L | F | R | B |
+ // +---+---+---+---+
+ // | |Dn | |
+ // +---+---+---+---+
+ k_EItemPreviewType_EnvironmentMap_LatLong = 4, // standard image file expected
+ k_EItemPreviewType_ReservedMax = 255, // you can specify your own types above this value
+};
+
+const uint32 kNumUGCResultsPerPage = 50;
+const uint32 k_cchDeveloperMetadataMax = 5000;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+ // collection details
+ uint32 m_unNumChildren;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for the details of the given published file ids (the RequestUGCDetails call is deprecated and replaced with this)
+ virtual UGCQueryHandle_t CreateQueryUGCDetailsRequest( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+
+ // Send the query to Steam
+ CALL_RESULT( SteamUGCQueryCompleted_t )
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+ virtual bool GetQueryUGCPreviewURL( UGCQueryHandle_t handle, uint32 index, OUT_STRING_COUNT(cchURLSize) char *pchURL, uint32 cchURLSize ) = 0;
+ virtual bool GetQueryUGCMetadata( UGCQueryHandle_t handle, uint32 index, OUT_STRING_COUNT(cchMetadatasize) char *pchMetadata, uint32 cchMetadatasize ) = 0;
+ virtual bool GetQueryUGCChildren( UGCQueryHandle_t handle, uint32 index, PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0;
+ virtual bool GetQueryUGCStatistic( UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint64 *pStatValue ) = 0;
+ virtual uint32 GetQueryUGCNumAdditionalPreviews( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCAdditionalPreview( UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, OUT_STRING_COUNT(cchURLSize) char *pchURLOrVideoID, uint32 cchURLSize, OUT_STRING_COUNT(cchURLSize) char *pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType *pPreviewType ) = 0;
+ virtual uint32 GetQueryUGCNumKeyValueTags( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCKeyValueTag( UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, OUT_STRING_COUNT(cchKeySize) char *pchKey, uint32 cchKeySize, OUT_STRING_COUNT(cchValueSize) char *pchValue, uint32 cchValueSize ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnOnlyIDs( UGCQueryHandle_t handle, bool bReturnOnlyIDs ) = 0;
+ virtual bool SetReturnKeyValueTags( UGCQueryHandle_t handle, bool bReturnKeyValueTags ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnMetadata( UGCQueryHandle_t handle, bool bReturnMetadata ) = 0;
+ virtual bool SetReturnChildren( UGCQueryHandle_t handle, bool bReturnChildren ) = 0;
+ virtual bool SetReturnAdditionalPreviews( UGCQueryHandle_t handle, bool bReturnAdditionalPreviews ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetLanguage( UGCQueryHandle_t handle, const char *pchLanguage ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+ virtual bool AddRequiredKeyValueTag( UGCQueryHandle_t handle, const char *pKey, const char *pValue ) = 0;
+
+ // DEPRECATED - Use CreateQueryUGCDetailsRequest call above instead!
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+ // Steam Workshop Creator API
+ CALL_RESULT( CreateItemResult_t )
+ virtual SteamAPICall_t CreateItem( AppId_t nConsumerAppId, EWorkshopFileType eFileType ) = 0; // create new item for this app with no content attached yet
+
+ virtual UGCUpdateHandle_t StartItemUpdate( AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID ) = 0; // start an UGC item update. Set changed properties before commiting update with CommitItemUpdate()
+
+ virtual bool SetItemTitle( UGCUpdateHandle_t handle, const char *pchTitle ) = 0; // change the title of an UGC item
+ virtual bool SetItemDescription( UGCUpdateHandle_t handle, const char *pchDescription ) = 0; // change the description of an UGC item
+ virtual bool SetItemUpdateLanguage( UGCUpdateHandle_t handle, const char *pchLanguage ) = 0; // specify the language of the title or description that will be set
+ virtual bool SetItemMetadata( UGCUpdateHandle_t handle, const char *pchMetaData ) = 0; // change the metadata of an UGC item (max = k_cchDeveloperMetadataMax)
+ virtual bool SetItemVisibility( UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item
+ virtual bool SetItemTags( UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item
+ virtual bool SetItemContent( UGCUpdateHandle_t handle, const char *pszContentFolder ) = 0; // update item content from this local folder
+ virtual bool SetItemPreview( UGCUpdateHandle_t handle, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file, which must be under 1MB in size
+ virtual bool RemoveItemKeyValueTags( UGCUpdateHandle_t handle, const char *pchKey ) = 0; // remove any existing key-value tags with the specified key
+ virtual bool AddItemKeyValueTag( UGCUpdateHandle_t handle, const char *pchKey, const char *pchValue ) = 0; // add new key-value tags for the item. Note that there can be multiple values for a tag.
+ virtual bool AddItemPreviewFile( UGCUpdateHandle_t handle, const char *pszPreviewFile, EItemPreviewType type ) = 0; // add preview file for this item. pszPreviewFile points to local file, which must be under 1MB in size
+ virtual bool AddItemPreviewVideo( UGCUpdateHandle_t handle, const char *pszVideoID ) = 0; // add preview video for this item
+ virtual bool UpdateItemPreviewFile( UGCUpdateHandle_t handle, uint32 index, const char *pszPreviewFile ) = 0; // updates an existing preview file for this item. pszPreviewFile points to local file, which must be under 1MB in size
+ virtual bool UpdateItemPreviewVideo( UGCUpdateHandle_t handle, uint32 index, const char *pszVideoID ) = 0; // updates an existing preview video for this item
+ virtual bool RemoveItemPreview( UGCUpdateHandle_t handle, uint32 index ) = 0; // remove a preview by index starting at 0 (previews are sorted)
+
+ CALL_RESULT( SubmitItemUpdateResult_t )
+ virtual SteamAPICall_t SubmitItemUpdate( UGCUpdateHandle_t handle, const char *pchChangeNote ) = 0; // commit update process started with StartItemUpdate()
+ virtual EItemUpdateStatus GetItemUpdateProgress( UGCUpdateHandle_t handle, uint64 *punBytesProcessed, uint64* punBytesTotal ) = 0;
+
+ // Steam Workshop Consumer API
+ CALL_RESULT( SetUserItemVoteResult_t )
+ virtual SteamAPICall_t SetUserItemVote( PublishedFileId_t nPublishedFileID, bool bVoteUp ) = 0;
+ CALL_RESULT( GetUserItemVoteResult_t )
+ virtual SteamAPICall_t GetUserItemVote( PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( UserFavoriteItemsListChanged_t )
+ virtual SteamAPICall_t AddItemToFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( UserFavoriteItemsListChanged_t )
+ virtual SteamAPICall_t RemoveItemFromFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( RemoteStorageSubscribePublishedFileResult_t )
+ virtual SteamAPICall_t SubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // subscribe to this item, will be installed ASAP
+ CALL_RESULT( RemoteStorageUnsubscribePublishedFileResult_t )
+ virtual SteamAPICall_t UnsubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // unsubscribe from this item, will be uninstalled after game quits
+ virtual uint32 GetNumSubscribedItems() = 0; // number of subscribed items
+ virtual uint32 GetSubscribedItems( PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; // all subscribed item PublishFileIDs
+
+ // get EItemState flags about item on this client
+ virtual uint32 GetItemState( PublishedFileId_t nPublishedFileID ) = 0;
+
+ // get info about currently installed content on disc for items that have k_EItemStateInstalled set
+ // if k_EItemStateLegacyItem is set, pchFolder contains the path to the legacy file itself (not a folder)
+ virtual bool GetItemInstallInfo( PublishedFileId_t nPublishedFileID, uint64 *punSizeOnDisk, OUT_STRING_COUNT( cchFolderSize ) char *pchFolder, uint32 cchFolderSize, uint32 *punTimeStamp ) = 0;
+
+ // get info about pending update for items that have k_EItemStateNeedsUpdate set. punBytesTotal will be valid after download started once
+ virtual bool GetItemDownloadInfo( PublishedFileId_t nPublishedFileID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // download new or update already installed item. If function returns true, wait for DownloadItemResult_t. If the item is already installed,
+ // then files on disk should not be used until callback received. If item is not subscribed to, it will be cached for some time.
+ // If bHighPriority is set, any other item download will be suspended and this item downloaded ASAP.
+ virtual bool DownloadItem( PublishedFileId_t nPublishedFileID, bool bHighPriority ) = 0;
+
+ // game servers can set a specific workshop folder before issuing any UGC commands.
+ // This is helpful if you want to support multiple game servers running out of the same install folder
+ virtual bool BInitWorkshopForGameServer( DepotId_t unWorkshopDepotID, const char *pszFolder ) = 0;
+
+ // SuspendDownloads( true ) will suspend all workshop downloads until SuspendDownloads( false ) is called or the game ends
+ virtual void SuspendDownloads( bool bSuspend ) = 0;
+
+ // usage tracking
+ CALL_RESULT( StartPlaytimeTrackingResult_t );
+ virtual SteamAPICall_t StartPlaytimeTracking( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+ CALL_RESULT( StopPlaytimeTrackingResult_t );
+ virtual SteamAPICall_t StopPlaytimeTracking( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+ CALL_RESULT( StopPlaytimeTrackingResult_t );
+ virtual SteamAPICall_t StopPlaytimeTrackingForAllItems() = 0;
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION009"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::CreateItem()
+//-----------------------------------------------------------------------------
+struct CreateItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 3 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId; // new item got this UGC PublishFileID
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::SubmitItemUpdate()
+//-----------------------------------------------------------------------------
+struct SubmitItemUpdateResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 4 };
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a Workshop item has been installed or updated
+//-----------------------------------------------------------------------------
+struct ItemInstalled_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 5 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of DownloadItem(), existing item files can be accessed again
+//-----------------------------------------------------------------------------
+struct DownloadItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 6 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: result of AddItemToFavorites() or RemoveItemFromFavorites()
+//-----------------------------------------------------------------------------
+struct UserFavoriteItemsListChanged_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 7 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bWasAddRequest;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SetUserItemVote()
+//-----------------------------------------------------------------------------
+struct SetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 8 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVoteUp;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserItemVote()
+//-----------------------------------------------------------------------------
+struct GetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 9 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVotedUp;
+ bool m_bVotedDown;
+ bool m_bVoteSkipped;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to StartPlaytimeTracking()
+//-----------------------------------------------------------------------------
+struct StartPlaytimeTrackingResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 10 };
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to StopPlaytimeTracking()
+//-----------------------------------------------------------------------------
+struct StopPlaytimeTrackingResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 11 };
+ EResult m_eResult;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_138a/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteamuser.h b/lsteamclient/steamworks_sdk_138a/isteamuser.h
new file mode 100644
index 00000000..151e0e18
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamuser.h
@@ -0,0 +1,355 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ CALL_RESULT( EncryptedAppTicketResponse_t )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+ // Requests a URL which authenticates an in-game browser for store check-out,
+ // and then redirects to the specified URL. As long as the in-game browser
+ // accepts and handles session cookies, Steam microtransaction checkout pages
+ // will automatically recognize the user instead of presenting a login page.
+ // The result of this API call will be a StoreAuthURLResponse_t callback.
+ // NOTE: The URL has a very short lifetime to prevent history-snooping attacks,
+ // so you should only call this API when you are about to launch the browser,
+ // or else immediately navigate to the result URL using a hidden browser window.
+ // NOTE 2: The resulting authorization cookie has an expiration time of one day,
+ // so it would be a good idea to request and visit a new auth URL every 12 hours.
+ CALL_RESULT( StoreAuthURLResponse_t )
+ virtual SteamAPICall_t RequestStoreAuthURL( const char *pchRedirectURL ) = 0;
+
+ // gets whether the users phone number is verified
+ virtual bool BIsPhoneVerified() = 0;
+
+ // gets whether the user has two factor enabled on their account
+ virtual bool BIsTwoFactorEnabled() = 0;
+
+ // gets whether the users phone number is identifying
+ virtual bool BIsPhoneIdentifying() = 0;
+
+ // gets whether the users phone number is awaiting (re)verification
+ virtual bool BIsPhoneRequiringVerification() = 0;
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser019"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+ bool m_bStillRetrying;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Signaled whenever licenses change
+//-----------------------------------------------------------------------------
+struct LicensesUpdated_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 25 };
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to ISteamUser::RequestStoreAuthURL
+//-----------------------------------------------------------------------------
+struct StoreAuthURLResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 65 };
+ char m_szURL[512];
+};
+
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteamuserstats.h b/lsteamclient/steamworks_sdk_138a/isteamuserstats.h
new file mode 100644
index 00000000..8bb42697
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamuserstats.h
@@ -0,0 +1,476 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ CALL_BACK( UserStatsReceived_t )
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ CALL_RESULT( UserStatsReceived_t )
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ CALL_RESULT(LeaderboardFindResult_t)
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ CALL_RESULT( LeaderboardFindResult_t )
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ CALL_RESULT( LeaderboardScoresDownloaded_t )
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ METHOD_DESC(Downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers)
+ CALL_RESULT( LeaderboardScoresDownloaded_t )
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard,
+ ARRAY_COUNT_D(cUsers, Array of users to retrieve) CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ CALL_RESULT( LeaderboardScoreUploaded_t )
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ CALL_RESULT( LeaderboardUGCSet_t )
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ CALL_RESULT( NumberOfCurrentPlayers_t )
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ CALL_RESULT( GlobalAchievementPercentagesReady_t )
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ CALL_RESULT( GlobalStatsReceived_t )
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteamutils.h b/lsteamclient/steamworks_sdk_138a/isteamutils.h
new file mode 100644
index 00000000..4c7b8ef1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamutils.h
@@ -0,0 +1,254 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time. Number of seconds since January 1, 1970, GMT (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // Deprecated. Applications should use SteamAPI_RunCallbacks() instead. Game servers do not need to call this function.
+ STEAM_PRIVATE_API( virtual void RunFrame() = 0; )
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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 an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ CALL_RESULT( CheckFileSignature_t )
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+
+ // Sets the inset of the overlay notification from the corner specified by SetOverlayNotificationPosition.
+ virtual void SetOverlayNotificationInset( int nHorizontalInset, int nVerticalInset ) = 0;
+
+ // returns true if Steam & the Steam Overlay are running in Big Picture mode
+ // Games much be launched through the Steam client to enable the Big Picture overlay. During development,
+ // a game can be added as a non-steam game to the developers library to test this feature
+ virtual bool IsSteamInBigPictureMode() = 0;
+
+ // ask SteamUI to create and render its OpenVR dashboard
+ virtual void StartVRDashboard() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils008"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+ int m_iCallback;
+ uint32 m_cubParam;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_138a/isteamvideo.h b/lsteamclient/steamworks_sdk_138a/isteamvideo.h
new file mode 100644
index 00000000..4431b4a1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/isteamvideo.h
@@ -0,0 +1,60 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Video
+//
+//=============================================================================
+
+#ifndef ISTEAMVIDEO_H
+#define ISTEAMVIDEO_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Video API
+//-----------------------------------------------------------------------------
+class ISteamVideo
+{
+public:
+
+ // Get a URL suitable for streaming the given Video app ID's video
+ virtual void GetVideoURL( AppId_t unVideoAppID ) = 0;
+
+ // returns true if user is uploading a live broadcast
+ virtual bool IsBroadcasting( int *pnNumViewers ) = 0;
+};
+
+#define STEAMVIDEO_INTERFACE_VERSION "STEAMVIDEO_INTERFACE_V001"
+
+DEFINE_CALLBACK( BroadcastUploadStart_t, k_iClientVideoCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( BroadcastUploadStop_t, k_iClientVideoCallbacks + 5 )
+ CALLBACK_MEMBER( 0, EBroadcastUploadResult, m_eResult )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( GetVideoURLResult_t, k_iClientVideoCallbacks + 11 )
+ CALLBACK_MEMBER( 0, EResult, m_eResult )
+ CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID )
+ CALLBACK_MEMBER( 2, char, m_rgchURL[256] )
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMVIDEO_H
diff --git a/lsteamclient/steamworks_sdk_138a/matchmakingtypes.h b/lsteamclient/steamworks_sdk_138a/matchmakingtypes.h
new file mode 100644
index 00000000..fcb61664
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/matchmakingtypes.h
@@ -0,0 +1,251 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ servernetadr_t() : m_usConnectionPort( 0 ), m_usQueryPort( 0 ), m_unIP( 0 ) {}
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_138a/steam_api.h b/lsteamclient/steamworks_sdk_138a/steam_api.h
new file mode 100644
index 00000000..788db9b8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/steam_api.h
@@ -0,0 +1,394 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteammusicremote.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+#include "isteamhtmlsurface.h"
+#include "isteaminventory.h"
+#include "isteamvideo.h"
+
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+
+// SteamAPI_Init must be called before using any other API functions. If it fails, an
+// error message will be output to the debugger (or stderr) with further information.
+S_API bool S_CALLTYPE SteamAPI_Init();
+
+// SteamAPI_Shutdown should be called during process shutdown if possible.
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// SteamAPI_RestartAppIfNecessary ensures that your executable was launched through Steam.
+//
+// Returns true if the current process should terminate. Steam is now re-launching your application.
+//
+// Returns false if no action needs to be taken. This means that your executable was started through
+// the Steam client, or a steam_appid.txt file is present in your game's directory (for development).
+// Your current process should continue if false is returned.
+//
+// NOTE: If you use the Steam DRM wrapper on your primary executable file, this check is unnecessary
+// since the DRM wrapper will ensure that your application was launched properly through Steam.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// Many Steam API functions allocate a small amount of thread-local memory for parameter storage.
+// SteamAPI_ReleaseCurrentThreadMemory() will free API memory associated with the calling thread.
+// This function is also called automatically by SteamAPI_RunCallbacks(), so a single-threaded
+// program never needs to explicitly call this function.
+S_API void S_CALLTYPE SteamAPI_ReleaseCurrentThreadMemory();
+
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Global accessors for Steamworks C++ APIs. See individual isteam*.h files for details.
+// You should not cache the results of these accessors or pass the result pointers across
+// modules! Different modules may be compiled against different SDK header versions, and
+// the interface pointers could therefore be different across modules. Every line of code
+// which calls into a Steamworks API should retrieve the interface from a global accessor.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#if !defined( STEAM_API_EXPORTS )
+inline ISteamClient *SteamClient();
+inline ISteamUser *SteamUser();
+inline ISteamFriends *SteamFriends();
+inline ISteamUtils *SteamUtils();
+inline ISteamMatchmaking *SteamMatchmaking();
+inline ISteamUserStats *SteamUserStats();
+inline ISteamApps *SteamApps();
+inline ISteamNetworking *SteamNetworking();
+inline ISteamMatchmakingServers *SteamMatchmakingServers();
+inline ISteamRemoteStorage *SteamRemoteStorage();
+inline ISteamScreenshots *SteamScreenshots();
+inline ISteamHTTP *SteamHTTP();
+inline ISteamUnifiedMessages *SteamUnifiedMessages();
+inline ISteamController *SteamController();
+inline ISteamUGC *SteamUGC();
+inline ISteamAppList *SteamAppList();
+inline ISteamMusic *SteamMusic();
+inline ISteamMusicRemote *SteamMusicRemote();
+inline ISteamHTMLSurface *SteamHTMLSurface();
+inline ISteamInventory *SteamInventory();
+inline ISteamVideo *SteamVideo();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+// CSteamAPIContext encapsulates the Steamworks API global accessors into
+// a single object. This is DEPRECATED and only remains for compatibility.
+class CSteamAPIContext
+{
+public:
+ // DEPRECATED - there is no benefit to using this over the global accessors
+ CSteamAPIContext() { Clear(); }
+ void Clear();
+ bool Init();
+ ISteamClient* SteamClient() const { return m_pSteamClient; }
+ ISteamUser* SteamUser() const { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() const { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() const { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() const { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() const { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() const { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() const { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() const { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() const { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() const { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() const { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() const { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() const { return m_pController; }
+ ISteamUGC* SteamUGC() const { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() const { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() const { return m_pSteamMusic; }
+ ISteamMusicRemote* SteamMusicRemote() const { return m_pSteamMusicRemote; }
+ ISteamHTMLSurface* SteamHTMLSurface() const { return m_pSteamHTMLSurface; }
+ ISteamInventory* SteamInventory() const { return m_pSteamInventory; }
+ ISteamVideo* SteamVideo() const { return m_pSteamVideo; }
+ // DEPRECATED - there is no benefit to using this over the global accessors
+private:
+ ISteamClient *m_pSteamClient;
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages *m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+ ISteamMusicRemote *m_pSteamMusicRemote;
+ ISteamHTMLSurface *m_pSteamHTMLSurface;
+ ISteamInventory *m_pSteamInventory;
+ ISteamVideo *m_pSteamVideo;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback and call-result helpers
+//
+// The following macros and classes are used to register your application for
+// callbacks and call-results, which are delivered in a predictable manner.
+//
+// STEAM_CALLBACK macros are meant for use inside of a C++ class definition.
+// They map a Steam notification callback directly to a class member function
+// which is automatically prototyped as "void func( callback_type *pParam )".
+//
+// CCallResult is used with specific Steam APIs that return "result handles".
+// The handle can be passed to a CCallResult object's Set function, along with
+// an object pointer and member-function pointer. The member function will
+// be executed once the results of the Steam API call are available.
+//
+// CCallback and CCallbackManual classes can be used instead of STEAM_CALLBACK
+// macros if you require finer control over registration and unregistration.
+//
+// Callbacks and call-results are queued automatically and are only
+// delivered/executed when your application calls SteamAPI_RunCallbacks().
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// SteamAPI_RunCallbacks is safe to call from multiple threads simultaneously,
+// but if you choose to do this, callback code could be executed on any thread.
+// One alternative is to call SteamAPI_RunCallbacks from the main thread only,
+// and call SteamAPI_ReleaseCurrentThreadMemory regularly on other threads.
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+// Declares a callback member function plus a helper member variable which
+// registers the callback on object creation and unregisters on destruction.
+// The optional fourth 'var' param exists only for backwards-compatibility
+// and can be ignored.
+#define STEAM_CALLBACK( thisclass, func, .../*callback_type, [deprecated] var*/ ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, 4, 3 ), ( /**/, thisclass, func, __VA_ARGS__ ) )
+
+// Declares a callback function and a named CCallbackManual variable which
+// has Register and Unregister functions instead of automatic registration.
+#define STEAM_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type > var; void func( callback_type *pParam )
+
+
+// Internal functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// Internal functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks and call results - internal implementation detail
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+
+private:
+ CCallbackBase( const CCallbackBase& );
+ CCallbackBase& operator=( const CCallbackBase& );
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: templated base for callbacks - internal implementation detail
+//-----------------------------------------------------------------------------
+template< int sizeof_P >
+class CCallbackImpl : protected CCallbackBase
+{
+public:
+ ~CCallbackImpl() { if ( m_nCallbackFlags & k_ECallbackFlagsRegistered ) SteamAPI_UnregisterCallback( this ); }
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+
+protected:
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool /*bIOFailure*/, SteamAPICall_t /*hSteamAPICall*/ ) { Run( pvParam ); }
+ virtual int GetCallbackSizeBytes() { return sizeof_P; }
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult();
+ ~CCallResult();
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func );
+ bool IsActive() const;
+ void Cancel();
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam );
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall );
+ virtual int GetCallbackSizeBytes() { return sizeof( P ); }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct,
+// bGameserver = listen for gameserver callbacks instead of client callbacks
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameserver = false >
+class CCallback : public CCallbackImpl< sizeof( P ) >
+{
+public:
+ typedef void (T::*func_t)(P*);
+
+ // NOTE: If you can't provide the correct parameters at construction time, you should
+ // use the CCallbackManual callback object (STEAM_CALLBACK_MANUAL macro) instead.
+ CCallback( T *pObj, func_t func );
+
+ void Register( T *pObj, func_t func );
+ void Unregister();
+
+protected:
+ virtual void Run( void *pvParam );
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: subclass of CCallback which allows default-construction in
+// an unregistered state; you must call Register manually
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer = false >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+
+ // Inherits public Register and Unregister functions from base class
+};
+
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// SteamAPI_IsSteamRunning() returns true if Steam is currently running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Pumps out all the steam messages, calling registered callbacks.
+// NOT THREADSAFE - do not call from multiple threads simultaneously.
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name.
+// DEPRECATED - implementation is Windows only, and the path returned is a UTF-8 string which must be converted to UTF-16 for use with Win32 APIs
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+
+#if defined( VERSION_SAFE_STEAM_API_INTERFACES )
+// exists only for backwards compat with code written against older SDKs
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#endif
+
+#include "steam_api_internal.h"
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_138a/steam_api_flat.h b/lsteamclient/steamworks_sdk_138a/steam_api_flat.h
new file mode 100644
index 00000000..ea6d1de3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/steam_api_flat.h
@@ -0,0 +1,802 @@
+//====== Copyright (c) 1996-2014, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Header for flatted SteamAPI. Use this for binding to other languages.
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+#ifndef STEAMAPIFLAT_H
+#define STEAMAPIFLAT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <stdint.h>
+
+
+typedef unsigned char uint8;
+typedef unsigned char uint8;
+typedef signed char int8;
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+typedef int64 lint64;
+typedef uint64 ulint64;
+typedef uint8 Salt_t[8];
+typedef uint64 GID_t;
+typedef uint64 JobID_t;
+typedef GID_t TxnID_t;
+typedef uint32 PackageId_t;
+typedef uint32 BundleId_t;
+typedef uint32 AppId_t;
+typedef uint64 AssetClassId_t;
+typedef uint32 PhysicalItemId_t;
+typedef uint32 DepotId_t;
+typedef uint32 RTime32;
+typedef uint32 CellID_t;
+typedef uint64 SteamAPICall_t;
+typedef uint32 AccountID_t;
+typedef uint32 PartnerId_t;
+typedef uint64 ManifestId_t;
+typedef uint32 HAuthTicket;
+typedef void * BREAKPAD_HANDLE;
+typedef char compile_time_assert_type[1];
+typedef int32 HSteamPipe;
+typedef int32 HSteamUser;
+typedef int16 FriendsGroupID_t;
+typedef void * HServerListRequest;
+typedef int HServerQuery;
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+typedef uint64 UGCFileWriteStreamHandle_t;
+typedef char compile_time_assert_type[1];
+typedef uint64 SteamLeaderboard_t;
+typedef uint64 SteamLeaderboardEntries_t;
+typedef uint32 SNetSocket_t;
+typedef uint32 SNetListenSocket_t;
+typedef uint32 ScreenshotHandle;
+typedef uint32 HTTPRequestHandle;
+typedef uint32 HTTPCookieContainerHandle;
+typedef uint64 ClientUnifiedMessageHandle;
+typedef uint64 ControllerHandle_t;
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+typedef uint32 HHTMLBrowser;
+typedef uint64 SteamItemInstanceID_t;
+typedef int32 SteamItemDef_t;
+typedef int32 SteamInventoryResult_t;
+// OpenVR Constants
+int const_k_iSteamUserCallbacks = 100;
+int const_k_iSteamGameServerCallbacks = 200;
+int const_k_iSteamFriendsCallbacks = 300;
+int const_k_iSteamBillingCallbacks = 400;
+int const_k_iSteamMatchmakingCallbacks = 500;
+int const_k_iSteamContentServerCallbacks = 600;
+int const_k_iSteamUtilsCallbacks = 700;
+int const_k_iClientFriendsCallbacks = 800;
+int const_k_iClientUserCallbacks = 900;
+int const_k_iSteamAppsCallbacks = 1000;
+int const_k_iSteamUserStatsCallbacks = 1100;
+int const_k_iSteamNetworkingCallbacks = 1200;
+int const_k_iClientRemoteStorageCallbacks = 1300;
+int const_k_iClientDepotBuilderCallbacks = 1400;
+int const_k_iSteamGameServerItemsCallbacks = 1500;
+int const_k_iClientUtilsCallbacks = 1600;
+int const_k_iSteamGameCoordinatorCallbacks = 1700;
+int const_k_iSteamGameServerStatsCallbacks = 1800;
+int const_k_iSteam2AsyncCallbacks = 1900;
+int const_k_iSteamGameStatsCallbacks = 2000;
+int const_k_iClientHTTPCallbacks = 2100;
+int const_k_iClientScreenshotsCallbacks = 2200;
+int const_k_iSteamScreenshotsCallbacks = 2300;
+int const_k_iClientAudioCallbacks = 2400;
+int const_k_iClientUnifiedMessagesCallbacks = 2500;
+int const_k_iSteamStreamLauncherCallbacks = 2600;
+int const_k_iClientControllerCallbacks = 2700;
+int const_k_iSteamControllerCallbacks = 2800;
+int const_k_iClientParentalSettingsCallbacks = 2900;
+int const_k_iClientDeviceAuthCallbacks = 3000;
+int const_k_iClientNetworkDeviceManagerCallbacks = 3100;
+int const_k_iClientMusicCallbacks = 3200;
+int const_k_iClientRemoteClientManagerCallbacks = 3300;
+int const_k_iClientUGCCallbacks = 3400;
+int const_k_iSteamStreamClientCallbacks = 3500;
+int const_k_IClientProductBuilderCallbacks = 3600;
+int const_k_iClientShortcutsCallbacks = 3700;
+int const_k_iClientRemoteControlManagerCallbacks = 3800;
+int const_k_iSteamAppListCallbacks = 3900;
+int const_k_iSteamMusicCallbacks = 4000;
+int const_k_iSteamMusicRemoteCallbacks = 4100;
+int const_k_iClientVRCallbacks = 4200;
+int const_k_iClientGameNotificationCallbacks = 4300;
+int const_k_iSteamGameNotificationCallbacks = 4400;
+int const_k_iSteamHTMLSurfaceCallbacks = 4500;
+int const_k_iClientVideoCallbacks = 4600;
+int const_k_iClientInventoryCallbacks = 4700;
+int const_k_iClientBluetoothManagerCallbacks = 4800;
+int const_k_cchPersonaNameMax = 128;
+int const_k_cwchPersonaNameMax = 32;
+int const_k_cchMaxRichPresenceKeys = 20;
+int const_k_cchMaxRichPresenceKeyLength = 64;
+int const_k_cchMaxRichPresenceValueLength = 256;
+int const_k_cchStatNameMax = 128;
+int const_k_cchLeaderboardNameMax = 128;
+int const_k_cLeaderboardDetailsMax = 64;
+unsigned long const_k_InvalidUnifiedMessageHandle = 0;
+unsigned long const_k_SteamItemInstanceIDInvalid = 0xffffffff;
+int const_k_SteamInventoryResultInvalid = -1;
+
+
+
+// OpenVR Enums
+// OpenVR Structs
+
+
+
+S_API HSteamPipe SteamAPI_ISteamClient_CreateSteamPipe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamClient_BReleaseSteamPipe(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_ConnectToGlobalUser(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_CreateLocalUser(intptr_t instancePtr, HSteamPipe * phSteamPipe, EAccountType eAccountType);
+S_API void SteamAPI_ISteamClient_ReleaseUser(intptr_t instancePtr, HSteamPipe hSteamPipe, HSteamUser hUser);
+S_API class ISteamUser * SteamAPI_ISteamClient_GetISteamUser(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServer * SteamAPI_ISteamClient_GetISteamGameServer(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_SetLocalIPBinding(intptr_t instancePtr, uint32 unIP, uint16 usPort);
+S_API class ISteamFriends * SteamAPI_ISteamClient_GetISteamFriends(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUtils * SteamAPI_ISteamClient_GetISteamUtils(intptr_t instancePtr, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmaking * SteamAPI_ISteamClient_GetISteamMatchmaking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmakingServers * SteamAPI_ISteamClient_GetISteamMatchmakingServers(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void * SteamAPI_ISteamClient_GetISteamGenericInterface(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUserStats * SteamAPI_ISteamClient_GetISteamUserStats(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServerStats * SteamAPI_ISteamClient_GetISteamGameServerStats(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamApps * SteamAPI_ISteamClient_GetISteamApps(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamNetworking * SteamAPI_ISteamClient_GetISteamNetworking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamRemoteStorage * SteamAPI_ISteamClient_GetISteamRemoteStorage(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamScreenshots * SteamAPI_ISteamClient_GetISteamScreenshots(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API uint32 SteamAPI_ISteamClient_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamClient_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(intptr_t instancePtr);
+S_API class ISteamHTTP * SteamAPI_ISteamClient_GetISteamHTTP(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUnifiedMessages * SteamAPI_ISteamClient_GetISteamUnifiedMessages(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamController * SteamAPI_ISteamClient_GetISteamController(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUGC * SteamAPI_ISteamClient_GetISteamUGC(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamAppList * SteamAPI_ISteamClient_GetISteamAppList(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusic * SteamAPI_ISteamClient_GetISteamMusic(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusicRemote * SteamAPI_ISteamClient_GetISteamMusicRemote(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamHTMLSurface * SteamAPI_ISteamClient_GetISteamHTMLSurface(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamInventory * SteamAPI_ISteamClient_GetISteamInventory(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamVideo * SteamAPI_ISteamClient_GetISteamVideo(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API HSteamUser SteamAPI_ISteamUser_GetHSteamUser(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BLoggedOn(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamUser_GetSteamID(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUser_InitiateGameConnection(intptr_t instancePtr, void * pAuthBlob, int cbMaxAuthBlob, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure);
+S_API void SteamAPI_ISteamUser_TerminateGameConnection(intptr_t instancePtr, uint32 unIPServer, uint16 usPortServer);
+S_API void SteamAPI_ISteamUser_TrackAppUsageEvent(intptr_t instancePtr, class CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo);
+S_API bool SteamAPI_ISteamUser_GetUserDataFolder(intptr_t instancePtr, char * pchBuffer, int cubBuffer);
+S_API void SteamAPI_ISteamUser_StartVoiceRecording(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_StopVoiceRecording(intptr_t instancePtr);
+S_API EVoiceResult SteamAPI_ISteamUser_GetAvailableVoice(intptr_t instancePtr, uint32 * pcbCompressed, uint32 * pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_GetVoice(intptr_t instancePtr, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_DecompressVoice(intptr_t instancePtr, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate);
+S_API uint32 SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(intptr_t instancePtr);
+S_API HAuthTicket SteamAPI_ISteamUser_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamUser_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamUser_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamUser_BIsBehindNAT(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_AdvertiseGame(intptr_t instancePtr, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestEncryptedAppTicket(intptr_t instancePtr, void * pDataToInclude, int cbDataToInclude);
+S_API bool SteamAPI_ISteamUser_GetEncryptedAppTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API int SteamAPI_ISteamUser_GetGameBadgeLevel(intptr_t instancePtr, int nSeries, bool bFoil);
+S_API int SteamAPI_ISteamUser_GetPlayerSteamLevel(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestStoreAuthURL(intptr_t instancePtr, const char * pchRedirectURL);
+S_API bool SteamAPI_ISteamUser_BIsPhoneVerified(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsTwoFactorEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsPhoneIdentifying(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsPhoneRequiringVerification(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetPersonaName(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_SetPersonaName(intptr_t instancePtr, const char * pchPersonaName);
+S_API EPersonaState SteamAPI_ISteamFriends_GetPersonaState(intptr_t instancePtr);
+S_API int SteamAPI_ISteamFriends_GetFriendCount(intptr_t instancePtr, int iFriendFlags);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendByIndex(intptr_t instancePtr, int iFriend, int iFriendFlags);
+S_API EFriendRelationship SteamAPI_ISteamFriends_GetFriendRelationship(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API EPersonaState SteamAPI_ISteamFriends_GetFriendPersonaState(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaName(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_GetFriendGamePlayed(intptr_t instancePtr, class CSteamID steamIDFriend, struct FriendGameInfo_t * pFriendGameInfo);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(intptr_t instancePtr, class CSteamID steamIDFriend, int iPersonaName);
+S_API int SteamAPI_ISteamFriends_GetFriendSteamLevel(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetPlayerNickname(intptr_t instancePtr, class CSteamID steamIDPlayer);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupCount(intptr_t instancePtr);
+S_API FriendsGroupID_t SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(intptr_t instancePtr, int iFG);
+S_API const char * SteamAPI_ISteamFriends_GetFriendsGroupName(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API void SteamAPI_ISteamFriends_GetFriendsGroupMembersList(intptr_t instancePtr, FriendsGroupID_t friendsGroupID, class CSteamID * pOutSteamIDMembers, int nMembersCount);
+S_API bool SteamAPI_ISteamFriends_HasFriend(intptr_t instancePtr, class CSteamID steamIDFriend, int iFriendFlags);
+S_API int SteamAPI_ISteamFriends_GetClanCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetClanByIndex(intptr_t instancePtr, int iClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanName(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanTag(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_GetClanActivityCounts(intptr_t instancePtr, class CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_DownloadClanActivityCounts(intptr_t instancePtr, class CSteamID * psteamIDClans, int cClansToRequest);
+S_API int SteamAPI_ISteamFriends_GetFriendCountFromSource(intptr_t instancePtr, class CSteamID steamIDSource);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(intptr_t instancePtr, class CSteamID steamIDSource, int iFriend);
+S_API bool SteamAPI_ISteamFriends_IsUserInSource(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDSource);
+S_API void SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(intptr_t instancePtr, class CSteamID steamIDUser, bool bSpeaking);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlay(intptr_t instancePtr, const char * pchDialog);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToUser(intptr_t instancePtr, const char * pchDialog, class CSteamID steamID);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(intptr_t instancePtr, const char * pchURL);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToStore(intptr_t instancePtr, AppId_t nAppID, EOverlayToStoreFlag eFlag);
+S_API void SteamAPI_ISteamFriends_SetPlayedWith(intptr_t instancePtr, class CSteamID steamIDUserPlayedWith);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API int SteamAPI_ISteamFriends_GetSmallFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetMediumFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetLargeFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_RequestUserInformation(intptr_t instancePtr, class CSteamID steamIDUser, bool bRequireNameOnly);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_RequestClanOfficerList(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOwner(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanOfficerCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOfficerByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iOfficer);
+S_API uint32 SteamAPI_ISteamFriends_GetUserRestrictions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamFriends_SetRichPresence(intptr_t instancePtr, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamFriends_ClearRichPresence(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchKey);
+S_API int SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(intptr_t instancePtr, class CSteamID steamIDFriend, int iKey);
+S_API void SteamAPI_ISteamFriends_RequestFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_InviteUserToGame(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchConnectString);
+S_API int SteamAPI_ISteamFriends_GetCoplayFriendCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetCoplayFriend(intptr_t instancePtr, int iCoplayFriend);
+S_API int SteamAPI_ISteamFriends_GetFriendCoplayTime(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API AppId_t SteamAPI_ISteamFriends_GetFriendCoplayGame(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_JoinClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_LeaveClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanChatMemberCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetChatMemberByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iUser);
+S_API bool SteamAPI_ISteamFriends_SendClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, const char * pchText);
+S_API int SteamAPI_ISteamFriends_GetClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, class CSteamID * psteamidChatter);
+S_API bool SteamAPI_ISteamFriends_IsClanChatAdmin(intptr_t instancePtr, class CSteamID steamIDClanChat, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_SetListenForFriendsMessages(intptr_t instancePtr, bool bInterceptEnabled);
+S_API bool SteamAPI_ISteamFriends_ReplyToFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchMsgToSend);
+S_API int SteamAPI_ISteamFriends_GetFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_GetFollowerCount(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_IsFollowing(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_EnumerateFollowingList(intptr_t instancePtr, uint32 unStartIndex);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceAppActive(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(intptr_t instancePtr);
+S_API EUniverse SteamAPI_ISteamUtils_GetConnectedUniverse(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetServerRealTime(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUtils_GetIPCountry(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetImageSize(intptr_t instancePtr, int iImage, uint32 * pnWidth, uint32 * pnHeight);
+S_API bool SteamAPI_ISteamUtils_GetImageRGBA(intptr_t instancePtr, int iImage, uint8 * pubDest, int nDestBufferSize);
+S_API bool SteamAPI_ISteamUtils_GetCSERIPPort(intptr_t instancePtr, uint32 * unIP, uint16 * usPort);
+S_API uint8 SteamAPI_ISteamUtils_GetCurrentBatteryPower(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetAppID(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationPosition(intptr_t instancePtr, ENotificationPosition eNotificationPosition);
+S_API bool SteamAPI_ISteamUtils_IsAPICallCompleted(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, bool * pbFailed);
+S_API ESteamAPICallFailure SteamAPI_ISteamUtils_GetAPICallFailureReason(intptr_t instancePtr, SteamAPICall_t hSteamAPICall);
+S_API bool SteamAPI_ISteamUtils_GetAPICallResult(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed);
+S_API uint32 SteamAPI_ISteamUtils_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamUtils_IsOverlayEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_BOverlayNeedsPresent(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUtils_CheckFileSignature(intptr_t instancePtr, const char * szFileName);
+S_API bool SteamAPI_ISteamUtils_ShowGamepadTextInput(intptr_t instancePtr, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText);
+S_API uint32 SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(intptr_t instancePtr, char * pchText, uint32 cchText);
+S_API const char * SteamAPI_ISteamUtils_GetSteamUILanguage(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_IsSteamRunningInVR(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationInset(intptr_t instancePtr, int nHorizontalInset, int nVerticalInset);
+S_API bool SteamAPI_ISteamUtils_IsSteamInBigPictureMode(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_StartVRDashboard(intptr_t instancePtr);
+S_API int SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMatchmaking_GetFavoriteGame(intptr_t instancePtr, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer);
+S_API int SteamAPI_ISteamMatchmaking_AddFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer);
+S_API bool SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_RequestLobbyList(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(intptr_t instancePtr, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToBeCloseTo);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(intptr_t instancePtr, int nSlotsAvailable);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(intptr_t instancePtr, ELobbyDistanceFilter eLobbyDistanceFilter);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(intptr_t instancePtr, int cMaxResults);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyByIndex(intptr_t instancePtr, int iLobby);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_CreateLobby(intptr_t instancePtr, ELobbyType eLobbyType, int cMaxMembers);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_JoinLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_LeaveLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_InviteUserToLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDInvitee);
+S_API int SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iMember);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyDataCount(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize);
+S_API bool SteamAPI_ISteamMatchmaking_DeleteLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDUser, const char * pchKey);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(intptr_t instancePtr, class CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(intptr_t instancePtr, class CSteamID steamIDLobby, int iChatID, class CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API bool SteamAPI_ISteamMatchmaking_RequestLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, class CSteamID steamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, class CSteamID * psteamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby, int cMaxMembers);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyType(intptr_t instancePtr, class CSteamID steamIDLobby, ELobbyType eLobbyType);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyJoinable(intptr_t instancePtr, class CSteamID steamIDLobby, bool bLobbyJoinable);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDNewOwner);
+S_API bool SteamAPI_ISteamMatchmaking_SetLinkedLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDLobbyDependent);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(intptr_t instancePtr, HServerListRequest hRequest, EMatchMakingServerResponse response);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(intptr_t instancePtr, class gameserveritem_t & server);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(intptr_t instancePtr, const char * pchName, int nScore, float flTimePlayed);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(intptr_t instancePtr, const char * pchRule, const char * pchValue);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(intptr_t instancePtr);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestLANServerList(intptr_t instancePtr, AppId_t iApp, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_ReleaseRequest(intptr_t instancePtr, HServerListRequest hServerListRequest);
+S_API class gameserveritem_t * SteamAPI_ISteamMatchmakingServers_GetServerDetails(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API bool SteamAPI_ISteamMatchmakingServers_IsRefreshing(intptr_t instancePtr, HServerListRequest hRequest);
+S_API int SteamAPI_ISteamMatchmakingServers_GetServerCount(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshServer(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PingServer(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPingResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PlayerDetails(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPlayersResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_ServerRules(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingRulesResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelServerQuery(intptr_t instancePtr, HServerQuery hServerQuery);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWrite(intptr_t instancePtr, const char * pchFile, const void * pvData, int32 cubData);
+S_API int32 SteamAPI_ISteamRemoteStorage_FileRead(intptr_t instancePtr, const char * pchFile, void * pvData, int32 cubDataToRead);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileWriteAsync(intptr_t instancePtr, const char * pchFile, const void * pvData, uint32 cubData);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileReadAsync(intptr_t instancePtr, const char * pchFile, uint32 nOffset, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileReadAsyncComplete(intptr_t instancePtr, SteamAPICall_t hReadCall, void * pvBuffer, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileForget(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileDelete(intptr_t instancePtr, const char * pchFile);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileShare(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(intptr_t instancePtr, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform);
+S_API UGCFileWriteStreamHandle_t SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileExists(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FilePersisted(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileSize(intptr_t instancePtr, const char * pchFile);
+S_API int64 SteamAPI_ISteamRemoteStorage_GetFileTimestamp(intptr_t instancePtr, const char * pchFile);
+S_API ERemoteStoragePlatform SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileCount(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(intptr_t instancePtr, int iFile, int32 * pnFileSizeInBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_GetQuota(intptr_t instancePtr, uint64 * pnTotalBytes, uint64 * puAvailableBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(intptr_t instancePtr);
+S_API void SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(intptr_t instancePtr, bool bEnabled);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownload(intptr_t instancePtr, UGCHandle_t hContent, uint32 unPriority);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(intptr_t instancePtr, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDetails(intptr_t instancePtr, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, class CSteamID * pSteamIDOwner);
+S_API int32 SteamAPI_ISteamRemoteStorage_UGCRead(intptr_t instancePtr, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(intptr_t instancePtr);
+S_API UGCHandle_t SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(intptr_t instancePtr, int32 iCachedContent);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(intptr_t instancePtr, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType);
+S_API PublishedFileUpdateHandle_t SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_DeletePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(intptr_t instancePtr, class CSteamID steamId, uint32 unStartIndex, struct SteamParamStringArray_t * pRequiredTags, struct SteamParamStringArray_t * pExcludedTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishVideo(intptr_t instancePtr, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(intptr_t instancePtr, EWorkshopFileAction eAction, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(intptr_t instancePtr, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, struct SteamParamStringArray_t * pTags, struct SteamParamStringArray_t * pUserTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(intptr_t instancePtr, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority);
+S_API bool SteamAPI_ISteamUserStats_RequestCurrentStats(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUserStats_GetStat(intptr_t instancePtr, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetStat0(intptr_t instancePtr, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_SetStat(intptr_t instancePtr, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamUserStats_SetStat0(intptr_t instancePtr, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamUserStats_UpdateAvgRateStat(intptr_t instancePtr, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamUserStats_GetAchievement(intptr_t instancePtr, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_SetAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_ClearAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(intptr_t instancePtr, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_StoreStats(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetAchievementIcon(intptr_t instancePtr, const char * pchName);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(intptr_t instancePtr, const char * pchName, const char * pchKey);
+S_API bool SteamAPI_ISteamUserStats_IndicateAchievementProgress(intptr_t instancePtr, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress);
+S_API uint32 SteamAPI_ISteamUserStats_GetNumAchievements(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementName(intptr_t instancePtr, uint32 iAchievement);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_ResetAllStats(intptr_t instancePtr, bool bAchievementsToo);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName);
+S_API const char * SteamAPI_ISteamUserStats_GetLeaderboardName(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API int SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardSortMethod SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardDisplayType SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, class CSteamID * prgUsers, int cUsers);
+S_API bool SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(intptr_t instancePtr, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, struct LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_UploadLeaderboardScore(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_AttachLeaderboardUGC(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(intptr_t instancePtr, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API int SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(intptr_t instancePtr, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(intptr_t instancePtr, const char * pchName, float * pflPercent);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalStats(intptr_t instancePtr, int nHistoryDays);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat(intptr_t instancePtr, const char * pchStatName, int64 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat0(intptr_t instancePtr, const char * pchStatName, double * pData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory(intptr_t instancePtr, const char * pchStatName, int64 * pData, uint32 cubData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory0(intptr_t instancePtr, const char * pchStatName, double * pData, uint32 cubData);
+S_API bool SteamAPI_ISteamApps_BIsSubscribed(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsLowViolence(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsCybercafe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsVACBanned(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetCurrentGameLanguage(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetAvailableGameLanguages(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedApp(intptr_t instancePtr, AppId_t appID);
+S_API bool SteamAPI_ISteamApps_BIsDlcInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint32 SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(intptr_t instancePtr);
+S_API int SteamAPI_ISteamApps_GetDLCCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BGetDLCDataByIndex(intptr_t instancePtr, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize);
+S_API void SteamAPI_ISteamApps_InstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_UninstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_GetCurrentBetaName(intptr_t instancePtr, char * pchName, int cchNameBufferSize);
+S_API bool SteamAPI_ISteamApps_MarkContentCorrupt(intptr_t instancePtr, bool bMissingFilesOnly);
+S_API uint32 SteamAPI_ISteamApps_GetInstalledDepots(intptr_t instancePtr, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots);
+S_API uint32 SteamAPI_ISteamApps_GetAppInstallDir(intptr_t instancePtr, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize);
+S_API bool SteamAPI_ISteamApps_BIsAppInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint64 SteamAPI_ISteamApps_GetAppOwner(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetLaunchQueryParam(intptr_t instancePtr, const char * pchKey);
+S_API bool SteamAPI_ISteamApps_GetDlcDownloadProgress(intptr_t instancePtr, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API int SteamAPI_ISteamApps_GetAppBuildId(intptr_t instancePtr);
+S_API void SteamAPI_ISteamApps_RequestAllProofOfPurchaseKeys(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamApps_GetFileDetails(intptr_t instancePtr, const char * pszFileName);
+S_API bool SteamAPI_ISteamNetworking_SendP2PPacket(intptr_t instancePtr, class CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_IsP2PPacketAvailable(intptr_t instancePtr, uint32 * pcubMsgSize, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_ReadP2PPacket(intptr_t instancePtr, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, class CSteamID * psteamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(intptr_t instancePtr, class CSteamID steamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_GetP2PSessionState(intptr_t instancePtr, class CSteamID steamIDRemote, struct P2PSessionState_t * pConnectionState);
+S_API bool SteamAPI_ISteamNetworking_AllowP2PPacketRelay(intptr_t instancePtr, bool bAllow);
+S_API SNetListenSocket_t SteamAPI_ISteamNetworking_CreateListenSocket(intptr_t instancePtr, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(intptr_t instancePtr, class CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateConnectionSocket(intptr_t instancePtr, uint32 nIP, uint16 nPort, int nTimeoutSec);
+S_API bool SteamAPI_ISteamNetworking_DestroySocket(intptr_t instancePtr, SNetSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_DestroyListenSocket(intptr_t instancePtr, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_SendDataOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_RetrieveDataFromSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailable(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_RetrieveData(intptr_t instancePtr, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_GetSocketInfo(intptr_t instancePtr, SNetSocket_t hSocket, class CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote);
+S_API bool SteamAPI_ISteamNetworking_GetListenSocketInfo(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort);
+S_API ESNetSocketConnectionType SteamAPI_ISteamNetworking_GetSocketConnectionType(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API int SteamAPI_ISteamNetworking_GetMaxPacketSize(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_WriteScreenshot(intptr_t instancePtr, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(intptr_t instancePtr, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight);
+S_API void SteamAPI_ISteamScreenshots_TriggerScreenshot(intptr_t instancePtr);
+S_API void SteamAPI_ISteamScreenshots_HookScreenshots(intptr_t instancePtr, bool bHook);
+S_API bool SteamAPI_ISteamScreenshots_SetLocation(intptr_t instancePtr, ScreenshotHandle hScreenshot, const char * pchLocation);
+S_API bool SteamAPI_ISteamScreenshots_TagUser(intptr_t instancePtr, ScreenshotHandle hScreenshot, class CSteamID steamID);
+S_API bool SteamAPI_ISteamScreenshots_TagPublishedFile(intptr_t instancePtr, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID);
+S_API bool SteamAPI_ISteamScreenshots_IsScreenshotsHooked(intptr_t instancePtr);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddVRScreenshotToLibrary(intptr_t instancePtr, EVRScreenshotType eType, const char * pchFilename, const char * pchVRFilename);
+S_API bool SteamAPI_ISteamMusic_BIsEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusic_BIsPlaying(intptr_t instancePtr);
+S_API AudioPlayback_Status SteamAPI_ISteamMusic_GetPlaybackStatus(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Play(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Pause(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayPrevious(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayNext(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_SetVolume(intptr_t instancePtr, float flVolume);
+S_API float SteamAPI_ISteamMusic_GetVolume(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BActivationSuccess(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_SetDisplayName(intptr_t instancePtr, const char * pchDisplayName);
+S_API bool SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayPrevious(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayNext(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableQueue(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlaylists(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(intptr_t instancePtr, AudioPlayback_Status nStatus);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateVolume(intptr_t instancePtr, float flValue);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(intptr_t instancePtr, bool bAvailable);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(intptr_t instancePtr, const char * pchText);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(intptr_t instancePtr, int nValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_QueueWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetQueueEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetQueueEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_QueueDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetPlaylistEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistDidChange(intptr_t instancePtr);
+S_API HTTPRequestHandle SteamAPI_ISteamHTTP_CreateHTTPRequest(intptr_t instancePtr, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(intptr_t instancePtr, HTTPRequestHandle hRequest, uint64 ulContextValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_DeferHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 * unBodySize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 cOffset, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_ReleaseHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(intptr_t instancePtr, HTTPRequestHandle hRequest, float * pflPercentOut);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen);
+S_API HTTPCookieContainerHandle SteamAPI_ISteamHTTP_CreateCookieContainer(intptr_t instancePtr, bool bAllowResponsesToModify);
+S_API bool SteamAPI_ISteamHTTP_ReleaseCookieContainer(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetCookie(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer, const char * pchHost, const char * pchUrl, const char * pchCookie);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(intptr_t instancePtr, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchUserAgentInfo);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(intptr_t instancePtr, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unMilliseconds);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(intptr_t instancePtr, HTTPRequestHandle hRequest, bool * pbWasTimedOut);
+S_API ClientUnifiedMessageHandle SteamAPI_ISteamUnifiedMessages_SendMethod(intptr_t instancePtr, const char * pchServiceMethod, const void * pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, uint32 * punResponseSize, EResult * peResult);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseData(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, void * pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease);
+S_API bool SteamAPI_ISteamUnifiedMessages_ReleaseMethod(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle);
+S_API bool SteamAPI_ISteamUnifiedMessages_SendNotification(intptr_t instancePtr, const char * pchServiceNotification, const void * pNotificationBuffer, uint32 unNotificationBufferSize);
+S_API bool SteamAPI_ISteamController_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamController_Shutdown(intptr_t instancePtr);
+S_API void SteamAPI_ISteamController_RunFrame(intptr_t instancePtr);
+S_API int SteamAPI_ISteamController_GetConnectedControllers(intptr_t instancePtr, ControllerHandle_t * handlesOut);
+S_API bool SteamAPI_ISteamController_ShowBindingPanel(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetActionSetHandle(intptr_t instancePtr, const char * pszActionSetName);
+S_API void SteamAPI_ISteamController_ActivateActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetCurrentActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerDigitalActionHandle_t SteamAPI_ISteamController_GetDigitalActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerDigitalActionData_t SteamAPI_ISteamController_GetDigitalActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle);
+S_API int SteamAPI_ISteamController_GetDigitalActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin * originsOut);
+S_API ControllerAnalogActionHandle_t SteamAPI_ISteamController_GetAnalogActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerAnalogActionData_t SteamAPI_ISteamController_GetAnalogActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle);
+S_API int SteamAPI_ISteamController_GetAnalogActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin * originsOut);
+S_API void SteamAPI_ISteamController_StopAnalogActionMomentum(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction);
+S_API void SteamAPI_ISteamController_TriggerHapticPulse(intptr_t instancePtr, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec);
+S_API void SteamAPI_ISteamController_TriggerRepeatedHapticPulse(intptr_t instancePtr, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags);
+S_API int SteamAPI_ISteamController_GetGamepadIndexForController(intptr_t instancePtr, ControllerHandle_t ulControllerHandle);
+S_API ControllerHandle_t SteamAPI_ISteamController_GetControllerForGamepadIndex(intptr_t instancePtr, int nIndex);
+S_API struct ControllerMotionData_t SteamAPI_ISteamController_GetMotionData(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API bool SteamAPI_ISteamController_ShowDigitalActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition);
+S_API bool SteamAPI_ISteamController_ShowAnalogActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(intptr_t instancePtr, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(intptr_t instancePtr, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SendQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCResult(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, struct SteamUGCDetails_t * pDetails);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCPreviewURL(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCChildren(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCStatistic(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint64 * pStatValue);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, char * pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType * pPreviewType);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize);
+S_API bool SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_AddRequiredTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_AddExcludedTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_SetReturnOnlyIDs(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnOnlyIDs);
+S_API bool SteamAPI_ISteamUGC_SetReturnKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnKeyValueTags);
+S_API bool SteamAPI_ISteamUGC_SetReturnLongDescription(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnLongDescription);
+S_API bool SteamAPI_ISteamUGC_SetReturnMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnMetadata);
+S_API bool SteamAPI_ISteamUGC_SetReturnChildren(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnChildren);
+S_API bool SteamAPI_ISteamUGC_SetReturnAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews);
+S_API bool SteamAPI_ISteamUGC_SetReturnTotalOnly(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnTotalOnly);
+S_API bool SteamAPI_ISteamUGC_SetLanguage(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetAllowCachedResponse(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds);
+S_API bool SteamAPI_ISteamUGC_SetCloudFileNameFilter(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pMatchCloudFileName);
+S_API bool SteamAPI_ISteamUGC_SetMatchAnyTag(intptr_t instancePtr, UGCQueryHandle_t handle, bool bMatchAnyTag);
+S_API bool SteamAPI_ISteamUGC_SetSearchText(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pSearchText);
+S_API bool SteamAPI_ISteamUGC_SetRankedByTrendDays(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unDays);
+S_API bool SteamAPI_ISteamUGC_AddRequiredKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pKey, const char * pValue);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RequestUGCDetails(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_CreateItem(intptr_t instancePtr, AppId_t nConsumerAppId, EWorkshopFileType eFileType);
+S_API UGCUpdateHandle_t SteamAPI_ISteamUGC_StartItemUpdate(intptr_t instancePtr, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_SetItemTitle(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchTitle);
+S_API bool SteamAPI_ISteamUGC_SetItemDescription(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchDescription);
+S_API bool SteamAPI_ISteamUGC_SetItemUpdateLanguage(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetItemMetadata(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchMetaData);
+S_API bool SteamAPI_ISteamUGC_SetItemVisibility(intptr_t instancePtr, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamUGC_SetItemTags(intptr_t instancePtr, UGCUpdateHandle_t updateHandle, const struct SteamParamStringArray_t * pTags);
+S_API bool SteamAPI_ISteamUGC_SetItemContent(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszContentFolder);
+S_API bool SteamAPI_ISteamUGC_SetItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile);
+S_API bool SteamAPI_ISteamUGC_RemoveItemKeyValueTags(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey);
+S_API bool SteamAPI_ISteamUGC_AddItemKeyValueTag(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamUGC_AddItemPreviewFile(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile, EItemPreviewType type);
+S_API bool SteamAPI_ISteamUGC_AddItemPreviewVideo(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszVideoID);
+S_API bool SteamAPI_ISteamUGC_UpdateItemPreviewFile(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index, const char * pszPreviewFile);
+S_API bool SteamAPI_ISteamUGC_UpdateItemPreviewVideo(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index, const char * pszVideoID);
+S_API bool SteamAPI_ISteamUGC_RemoveItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubmitItemUpdate(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchChangeNote);
+S_API EItemUpdateStatus SteamAPI_ISteamUGC_GetItemUpdateProgress(intptr_t instancePtr, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_GetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddItemToFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveItemFromFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_UnsubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API uint32 SteamAPI_ISteamUGC_GetNumSubscribedItems(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUGC_GetSubscribedItems(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API uint32 SteamAPI_ISteamUGC_GetItemState(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_GetItemInstallInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp);
+S_API bool SteamAPI_ISteamUGC_GetItemDownloadInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API bool SteamAPI_ISteamUGC_DownloadItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bHighPriority);
+S_API bool SteamAPI_ISteamUGC_BInitWorkshopForGameServer(intptr_t instancePtr, DepotId_t unWorkshopDepotID, const char * pszFolder);
+S_API void SteamAPI_ISteamUGC_SuspendDownloads(intptr_t instancePtr, bool bSuspend);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_StartPlaytimeTracking(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_StopPlaytimeTracking(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_StopPlaytimeTrackingForAllItems(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamAppList_GetNumInstalledApps(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamAppList_GetInstalledApps(intptr_t instancePtr, AppId_t * pvecAppID, uint32 unMaxAppIDs);
+S_API int SteamAPI_ISteamAppList_GetAppName(intptr_t instancePtr, AppId_t nAppID, char * pchName, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppInstallDir(intptr_t instancePtr, AppId_t nAppID, char * pchDirectory, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppBuildId(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Shutdown(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamHTMLSurface_CreateBrowser(intptr_t instancePtr, const char * pchUserAgent, const char * pchUserCSS);
+S_API void SteamAPI_ISteamHTMLSurface_RemoveBrowser(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_LoadURL(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData);
+S_API void SteamAPI_ISteamHTMLSurface_SetSize(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight);
+S_API void SteamAPI_ISteamHTMLSurface_StopLoad(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Reload(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoBack(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoForward(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_AddHeader(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamHTMLSurface_ExecuteJavascript(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchScript);
+S_API void SteamAPI_ISteamHTMLSurface_MouseUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDoubleClick(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseMove(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_MouseWheel(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int32 nDelta);
+S_API void SteamAPI_ISteamHTMLSurface_KeyDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyChar(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetVerticalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetKeyFocus(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus);
+S_API void SteamAPI_ISteamHTMLSurface_ViewSource(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_CopyToClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_PasteFromClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Find(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse);
+S_API void SteamAPI_ISteamHTMLSurface_StopFind(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_SetCookie(intptr_t instancePtr, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly);
+S_API void SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY);
+S_API void SteamAPI_ISteamHTMLSurface_SetBackgroundMode(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bBackgroundMode);
+S_API void SteamAPI_ISteamHTMLSurface_AllowStartRequest(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bAllowed);
+S_API void SteamAPI_ISteamHTMLSurface_JSDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bResult);
+S_API EResult SteamAPI_ISteamInventory_GetResultStatus(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetResultItems(intptr_t instancePtr, SteamInventoryResult_t resultHandle, struct SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize);
+S_API uint32 SteamAPI_ISteamInventory_GetResultTimestamp(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_CheckResultSteamID(intptr_t instancePtr, SteamInventoryResult_t resultHandle, class CSteamID steamIDExpected);
+S_API void SteamAPI_ISteamInventory_DestroyResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetAllItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_GetItemsByID(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs);
+S_API bool SteamAPI_ISteamInventory_SerializeResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize);
+S_API bool SteamAPI_ISteamInventory_DeserializeResult(intptr_t instancePtr, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE);
+S_API bool SteamAPI_ISteamInventory_GenerateItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_GrantPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_AddPromoItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef);
+S_API bool SteamAPI_ISteamInventory_AddPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_ConsumeItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity);
+S_API bool SteamAPI_ISteamInventory_ExchangeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength);
+S_API bool SteamAPI_ISteamInventory_TransferItemQuantity(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest);
+S_API void SteamAPI_ISteamInventory_SendItemDropHeartbeat(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_TriggerItemDrop(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition);
+S_API bool SteamAPI_ISteamInventory_TradeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, class CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength);
+S_API bool SteamAPI_ISteamInventory_LoadItemDefinitions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionIDs(intptr_t instancePtr, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionProperty(intptr_t instancePtr, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSizeOut);
+S_API void SteamAPI_ISteamVideo_GetVideoURL(intptr_t instancePtr, AppId_t unVideoAppID);
+S_API bool SteamAPI_ISteamVideo_IsBroadcasting(intptr_t instancePtr, int * pnNumViewers);
+S_API bool SteamAPI_ISteamGameServer_InitGameServer(intptr_t instancePtr, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString);
+S_API void SteamAPI_ISteamGameServer_SetProduct(intptr_t instancePtr, const char * pszProduct);
+S_API void SteamAPI_ISteamGameServer_SetGameDescription(intptr_t instancePtr, const char * pszGameDescription);
+S_API void SteamAPI_ISteamGameServer_SetModDir(intptr_t instancePtr, const char * pszModDir);
+S_API void SteamAPI_ISteamGameServer_SetDedicatedServer(intptr_t instancePtr, bool bDedicated);
+S_API void SteamAPI_ISteamGameServer_LogOn(intptr_t instancePtr, const char * pszToken);
+S_API void SteamAPI_ISteamGameServer_LogOnAnonymous(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_LogOff(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BLoggedOn(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BSecure(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamGameServer_GetSteamID(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_WasRestartRequested(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetMaxPlayerCount(intptr_t instancePtr, int cPlayersMax);
+S_API void SteamAPI_ISteamGameServer_SetBotPlayerCount(intptr_t instancePtr, int cBotplayers);
+S_API void SteamAPI_ISteamGameServer_SetServerName(intptr_t instancePtr, const char * pszServerName);
+S_API void SteamAPI_ISteamGameServer_SetMapName(intptr_t instancePtr, const char * pszMapName);
+S_API void SteamAPI_ISteamGameServer_SetPasswordProtected(intptr_t instancePtr, bool bPasswordProtected);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorPort(intptr_t instancePtr, uint16 unSpectatorPort);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorServerName(intptr_t instancePtr, const char * pszSpectatorServerName);
+S_API void SteamAPI_ISteamGameServer_ClearAllKeyValues(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetKeyValue(intptr_t instancePtr, const char * pKey, const char * pValue);
+S_API void SteamAPI_ISteamGameServer_SetGameTags(intptr_t instancePtr, const char * pchGameTags);
+S_API void SteamAPI_ISteamGameServer_SetGameData(intptr_t instancePtr, const char * pchGameData);
+S_API void SteamAPI_ISteamGameServer_SetRegion(intptr_t instancePtr, const char * pszRegion);
+S_API bool SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(intptr_t instancePtr, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, class CSteamID * pSteamIDUser);
+S_API uint64 SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SendUserDisconnect(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServer_BUpdateUserData(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore);
+S_API HAuthTicket SteamAPI_ISteamGameServer_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamGameServer_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamGameServer_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamGameServer_RequestUserGroupStatus(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDGroup);
+S_API void SteamAPI_ISteamGameServer_GetGameplayStats(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_GetServerReputation(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamGameServer_GetPublicIP(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_HandleIncomingPacket(intptr_t instancePtr, const void * pData, int cbData, uint32 srcIP, uint16 srcPort);
+S_API int SteamAPI_ISteamGameServer_GetNextOutgoingPacket(intptr_t instancePtr, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort);
+S_API void SteamAPI_ISteamGameServer_EnableHeartbeats(intptr_t instancePtr, bool bActive);
+S_API void SteamAPI_ISteamGameServer_SetHeartbeatInterval(intptr_t instancePtr, int iHeartbeatInterval);
+S_API void SteamAPI_ISteamGameServer_ForceHeartbeat(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_AssociateWithClan(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(intptr_t instancePtr, class CSteamID steamIDNewPlayer);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API bool SteamAPI_ISteamGameServerStats_ClearUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_StoreUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+#endif // STEAMAPIFLAT_H
+
+
diff --git a/lsteamclient/steamworks_sdk_138a/steam_api_internal.h b/lsteamclient/steamworks_sdk_138a/steam_api_internal.h
new file mode 100644
index 00000000..ef3a949c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/steam_api_internal.h
@@ -0,0 +1,327 @@
+//====== Copyright 1996-2015, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Internal private Steamworks API declarations and definitions
+//
+//=============================================================================
+
+#ifndef STEAM_API_INTERNAL_H
+#define STEAM_API_INTERNAL_H
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+S_API void * S_CALLTYPE SteamInternal_ContextInit( void *pContextInitData );
+S_API void * S_CALLTYPE SteamInternal_CreateInterface( const char *ver );
+
+#if !defined( STEAM_API_EXPORTS )
+
+inline void S_CALLTYPE SteamInternal_OnContextInit( void* p )
+{
+ ((CSteamAPIContext*)p)->Clear();
+ if ( SteamAPI_GetHSteamPipe() )
+ ((CSteamAPIContext*)p)->Init();
+}
+inline CSteamAPIContext& SteamInternal_ModuleContext()
+{
+ // SteamInternal_ContextInit takes a base pointer for the equivalent of
+ // struct { void (*pFn)(void* pCtx); uintp counter; CSteamAPIContext ctx; }
+ // Do not change layout of 2 + sizeof... or add non-pointer aligned data!
+ // NOTE: declaring "static CSteamAPIConext" creates a large function
+ // which queries the initialization status of the object. We know that
+ // it is pointer-aligned and fully memset with zeros, so just alias a
+ // static buffer of the appropriate size and call it a CSteamAPIContext.
+ static void* s_CallbackCounterAndContext[ 2 + sizeof(CSteamAPIContext)/sizeof(void*) ] = { (void*)&SteamInternal_OnContextInit, 0 };
+ return *(CSteamAPIContext*)SteamInternal_ContextInit( s_CallbackCounterAndContext );
+}
+
+inline ISteamClient *SteamClient() { return SteamInternal_ModuleContext().SteamClient(); }
+inline ISteamUser *SteamUser() { return SteamInternal_ModuleContext().SteamUser(); }
+inline ISteamFriends *SteamFriends() { return SteamInternal_ModuleContext().SteamFriends(); }
+inline ISteamUtils *SteamUtils() { return SteamInternal_ModuleContext().SteamUtils(); }
+inline ISteamMatchmaking *SteamMatchmaking() { return SteamInternal_ModuleContext().SteamMatchmaking(); }
+inline ISteamUserStats *SteamUserStats() { return SteamInternal_ModuleContext().SteamUserStats(); }
+inline ISteamApps *SteamApps() { return SteamInternal_ModuleContext().SteamApps(); }
+inline ISteamMatchmakingServers *SteamMatchmakingServers() { return SteamInternal_ModuleContext().SteamMatchmakingServers(); }
+inline ISteamNetworking *SteamNetworking() { return SteamInternal_ModuleContext().SteamNetworking(); }
+inline ISteamRemoteStorage *SteamRemoteStorage() { return SteamInternal_ModuleContext().SteamRemoteStorage(); }
+inline ISteamScreenshots *SteamScreenshots() { return SteamInternal_ModuleContext().SteamScreenshots(); }
+inline ISteamHTTP *SteamHTTP() { return SteamInternal_ModuleContext().SteamHTTP(); }
+inline ISteamUnifiedMessages *SteamUnifiedMessages() { return SteamInternal_ModuleContext().SteamUnifiedMessages(); }
+inline ISteamController *SteamController() { return SteamInternal_ModuleContext().SteamController(); }
+inline ISteamUGC *SteamUGC() { return SteamInternal_ModuleContext().SteamUGC(); }
+inline ISteamAppList *SteamAppList() { return SteamInternal_ModuleContext().SteamAppList(); }
+inline ISteamMusic *SteamMusic() { return SteamInternal_ModuleContext().SteamMusic(); }
+inline ISteamMusicRemote *SteamMusicRemote() { return SteamInternal_ModuleContext().SteamMusicRemote(); }
+inline ISteamHTMLSurface *SteamHTMLSurface() { return SteamInternal_ModuleContext().SteamHTMLSurface(); }
+inline ISteamInventory *SteamInventory() { return SteamInternal_ModuleContext().SteamInventory(); }
+inline ISteamVideo *SteamVideo() { return SteamInternal_ModuleContext().SteamVideo(); }
+
+#endif // !defined( STEAM_API_EXPORTS )
+
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamClient = NULL;
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamMusicRemote = NULL;
+ m_pSteamHTMLSurface = NULL;
+ m_pSteamInventory = NULL;
+}
+
+
+// This function must be declared inline in the header so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+ if ( !hSteamPipe )
+ return false;
+
+ m_pSteamClient = (ISteamClient*) SteamInternal_CreateInterface( STEAMCLIENT_INTERFACE_VERSION );
+ if ( !m_pSteamClient )
+ return false;
+
+ m_pSteamUser = m_pSteamClient->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = m_pSteamClient->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = m_pSteamClient->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = m_pSteamClient->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = m_pSteamClient->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = m_pSteamClient->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = m_pSteamClient->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = m_pSteamClient->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = m_pSteamClient->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = m_pSteamClient->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = m_pSteamClient->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = m_pSteamClient->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = m_pSteamClient->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = m_pSteamClient->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = m_pSteamClient->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = m_pSteamClient->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ return false;
+
+ m_pSteamMusicRemote = m_pSteamClient->GetISteamMusicRemote( hSteamUser, hSteamPipe, STEAMMUSICREMOTE_INTERFACE_VERSION );
+ if ( !m_pSteamMusicRemote )
+ return false;
+
+ m_pSteamHTMLSurface = m_pSteamClient->GetISteamHTMLSurface( hSteamUser, hSteamPipe, STEAMHTMLSURFACE_INTERFACE_VERSION );
+ if ( !m_pSteamHTMLSurface )
+ return false;
+
+ m_pSteamInventory = m_pSteamClient->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_pSteamVideo = m_pSteamClient->GetISteamVideo( hSteamUser, hSteamPipe, STEAMVIDEO_INTERFACE_VERSION );
+ if ( !m_pSteamVideo )
+ return false;
+
+ return true;
+}
+
+
+//-----------------------------------------------------------------------------
+// The following macros are implementation details, not intended for public use
+//-----------------------------------------------------------------------------
+#define _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param )
+#define _STEAM_CALLBACK_HELPER( _1, _2, SELECTED, ... ) _STEAM_CALLBACK_##SELECTED
+#define _STEAM_CALLBACK_SELECT( X, Y ) _STEAM_CALLBACK_HELPER X Y
+#define _STEAM_CALLBACK_3( extra_code, thisclass, func, param ) \
+ struct CCallbackInternal_ ## func : private CCallbackImpl< sizeof( param ) > { \
+ CCallbackInternal_ ## func () { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func ( const CCallbackInternal_ ## func & ) { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func & operator=( const CCallbackInternal_ ## func & ) { return *this; } \
+ private: virtual void Run( void *pvParam ) { _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param ) \
+ thisclass *pOuter = reinterpret_cast<thisclass*>( reinterpret_cast<char*>(this) - offsetof( thisclass, m_steamcallback_ ## func ) ); \
+ pOuter->func( reinterpret_cast<param*>( pvParam ) ); \
+ } \
+ } m_steamcallback_ ## func ; void func( param *pParam )
+#define _STEAM_CALLBACK_4( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param > var; void func( param *pParam )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+inline CCallResult<T, P>::CCallResult()
+{
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Set( SteamAPICall_t hAPICall, T *p, func_t func )
+{
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+}
+
+template< class T, class P >
+inline bool CCallResult<T, P>::IsActive() const
+{
+ return (m_hAPICall != k_uAPICallInvalid);
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Cancel()
+{
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+}
+
+template< class T, class P >
+inline CCallResult<T, P>::~CCallResult()
+{
+ Cancel();
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Run( void *pvParam )
+{
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)((P *)pvParam, false);
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+{
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)((P *)pvParam, bIOFailure);
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct,
+// bGameserver = listen for gameserver callbacks instead of client callbacks
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameserver >
+inline CCallback< T, P, bGameserver >::CCallback( T *pObj, func_t func )
+ : m_pObj( NULL ), m_Func( NULL )
+{
+ if ( bGameserver )
+ {
+ this->SetGameserverFlag();
+ }
+ Register( pObj, func );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Register( T *pObj, func_t func )
+{
+ if ( !pObj || !func )
+ return;
+
+ if ( this->m_nCallbackFlags & CCallbackBase::k_ECallbackFlagsRegistered )
+ Unregister();
+
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Unregister()
+{
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Run( void *pvParam )
+{
+ (m_pObj->*m_Func)((P *)pvParam);
+}
+
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+
+#endif // STEAM_API_INTERNAL_H
diff --git a/lsteamclient/steamworks_sdk_138a/steam_gameserver.h b/lsteamclient/steamworks_sdk_138a/steam_gameserver.h
new file mode 100644
index 00000000..dfc70370
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/steam_gameserver.h
@@ -0,0 +1,237 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+
+inline bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+// Most Steam API functions allocate some amount of thread-local memory for
+// parameter storage. Calling SteamGameServer_ReleaseCurrentThreadMemory()
+// will free all API-related memory associated with the calling thread.
+// This memory is released automatically by SteamGameServer_RunCallbacks(),
+// so single-threaded servers do not need to explicitly call this function.
+inline void SteamGameServer_ReleaseCurrentThreadMemory();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+// If your application contains modules which could be built against different Steamworks SDK
+// versions, then you should define VERSION_SAFE_STEAM_API_INTERFACES to enforce that you cannot
+// use the version-less global accessors. Instead, create and use CSteamGameServerAPIContext
+// objects to retrieve interface pointers which are appropriate for your Steamworks SDK headers.
+#if !defined( VERSION_SAFE_STEAM_API_INTERFACES ) && !defined( STEAM_API_EXPORTS )
+inline ISteamClient *SteamGameServerClient();
+inline ISteamGameServer *SteamGameServer();
+inline ISteamUtils *SteamGameServerUtils();
+inline ISteamNetworking *SteamGameServerNetworking();
+inline ISteamGameServerStats *SteamGameServerStats();
+inline ISteamHTTP *SteamGameServerHTTP();
+inline ISteamInventory *SteamGameServerInventory();
+inline ISteamUGC *SteamGameServerUGC();
+inline ISteamApps *SteamGameServerApps();
+#endif
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext() { Clear(); }
+ inline void Clear();
+ inline bool Init();
+
+ ISteamClient *SteamClient() const { return m_pSteamClient; }
+ ISteamGameServer *SteamGameServer() const { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() const { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() const { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() const { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() const { return m_pSteamHTTP; }
+ ISteamInventory *SteamInventory() const { return m_pSteamInventory; }
+ ISteamUGC *SteamUGC() const { return m_pSteamUGC; }
+ ISteamApps *SteamApps() const { return m_pSteamApps; }
+
+private:
+ ISteamClient *m_pSteamClient;
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamInventory *m_pSteamInventory;
+ ISteamUGC *m_pSteamUGC;
+ ISteamApps *m_pSteamApps;
+};
+
+
+// Older SDKs exported this global pointer, but it is no longer supported.
+// You should use SteamGameServerClient() or CSteamGameServerAPIContext to
+// safely access the ISteamClient APIs from your game server application.
+//S_API ISteamClient *g_pSteamClientGameServer;
+
+// SteamGameServer_InitSafe has been replaced with SteamGameServer_Init and
+// is no longer supported. Use SteamGameServer_Init instead.
+//S_API void S_CALLTYPE SteamGameServer_InitSafe();
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// These macros are similar to the STEAM_CALLBACK_* macros in steam_api.h, but only trigger for gameserver callbacks
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, /*callback_type, [deprecated] var*/... ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, GS, 3 ), ( this->SetGameserverFlag();, thisclass, func, __VA_ARGS__ ) )
+
+#define STEAM_GAMESERVER_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type, true > var; void func( callback_type *pParam )
+
+
+#define _STEAM_CALLBACK_GS( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param, true > var; void func( param *pParam )
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe S_CALLTYPE SteamGameServer_GetHSteamPipe();
+S_API HSteamUser S_CALLTYPE SteamGameServer_GetHSteamUser();
+S_API bool S_CALLTYPE SteamInternal_GameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+
+
+#if !defined( VERSION_SAFE_STEAM_API_INTERFACES ) && !defined( STEAM_API_EXPORTS )
+inline CSteamGameServerAPIContext& SteamGameServerInternal_ModuleContext()
+{
+ // NOTE: declaring "static CSteamAPIConext" creates a large function
+ // which queries the initialization status of the object. We know that
+ // it is pointer-aligned and fully memset with zeros, so just alias a
+ // static buffer of the appropriate size and call it a CSteamAPIContext.
+ static void* ctx[ sizeof(CSteamGameServerAPIContext)/sizeof(void*) ];
+ return *(CSteamGameServerAPIContext*)ctx;
+}
+#define _STEAMINTERNAL_ACCESSOR_BODY( AccessFunc ) \
+ if ( !SteamGameServer_GetHSteamPipe() ) return 0; \
+ CSteamGameServerAPIContext &ctx = SteamGameServerInternal_ModuleContext(); \
+ if ( !ctx.AccessFunc() ) ctx.Init(); \
+ return ctx.AccessFunc();
+
+inline ISteamClient *SteamGameServerClient() { _STEAMINTERNAL_ACCESSOR_BODY( SteamClient ) }
+inline ISteamGameServer *SteamGameServer() { _STEAMINTERNAL_ACCESSOR_BODY( SteamGameServer ) }
+inline ISteamUtils *SteamGameServerUtils() { _STEAMINTERNAL_ACCESSOR_BODY( SteamGameServerUtils ) }
+inline ISteamNetworking *SteamGameServerNetworking() { _STEAMINTERNAL_ACCESSOR_BODY( SteamGameServerNetworking ) }
+inline ISteamGameServerStats *SteamGameServerStats() { _STEAMINTERNAL_ACCESSOR_BODY( SteamGameServerStats ) }
+inline ISteamHTTP *SteamGameServerHTTP() { _STEAMINTERNAL_ACCESSOR_BODY( SteamHTTP ) }
+inline ISteamInventory *SteamGameServerInventory() { _STEAMINTERNAL_ACCESSOR_BODY( SteamInventory ) }
+inline ISteamUGC *SteamGameServerUGC() { _STEAMINTERNAL_ACCESSOR_BODY( SteamUGC ) }
+inline ISteamApps *SteamGameServerApps() { _STEAMINTERNAL_ACCESSOR_BODY( SteamApps ) }
+#undef _STEAMINTERNAL_ACCESSOR_BODY
+#endif // !defined( VERSION_SAFE_STEAM_API_INTERFACES ) && !defined( STEAM_API_EXPORTS )
+
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamClient = NULL;
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamInventory = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamApps = NULL;
+}
+
+// This function must be declared inline in the header so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+ if ( !hSteamPipe )
+ return false;
+
+ m_pSteamClient = (ISteamClient*) SteamInternal_CreateInterface( STEAMCLIENT_INTERFACE_VERSION );
+ if ( !m_pSteamClient )
+ return false;
+
+ m_pSteamGameServer = m_pSteamClient->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = m_pSteamClient->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = m_pSteamClient->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = m_pSteamClient->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = m_pSteamClient->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamInventory = m_pSteamClient->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_pSteamUGC = m_pSteamClient->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamApps = m_pSteamClient->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ return true;
+}
+
+
+inline bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString )
+{
+ if ( !SteamInternal_GameServer_Init( unIP, usSteamPort, usGamePort, usQueryPort, eServerMode, pchVersionString ) )
+ return false;
+
+ return true;
+}
+
+
+inline void SteamGameServer_ReleaseCurrentThreadMemory()
+{
+ SteamAPI_ReleaseCurrentThreadMemory();
+}
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_138a/steamclientpublic.h b/lsteamclient/steamworks_sdk_138a/steamclientpublic.h
new file mode 100644
index 00000000..646c75ba
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/steamclientpublic.h
@@ -0,0 +1,1255 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to login
+ k_EResultItemDeleted = 86, // The thing we're trying to access has been deleted
+ k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to throttle response to possible attacker
+ k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch
+ k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for two-factor didn't match
+ k_EResultAccountAssociatedToMultiplePartners = 90, // account has been associated with multiple partners
+ k_EResultNotModified = 91, // data not modified
+ k_EResultNoMobileDevice = 92, // the account does not have a mobile device associated with it
+ k_EResultTimeNotSynced = 93, // the time presented is out of range or tolerance
+ k_EResultSmsCodeFailed = 94, // SMS code failure (no match, none pending, etc.)
+ k_EResultAccountLimitExceeded = 95, // Too many accounts access this resource
+ k_EResultAccountActivityLimitExceeded = 96, // Too many changes to this account
+ k_EResultPhoneActivityLimitExceeded = 97, // Too many changes to this phone
+ k_EResultRefundToWallet = 98, // Cannot refund to payment method, must use wallet
+ k_EResultEmailSendFailure = 99, // Cannot send an email
+ k_EResultNotSettled = 100, // Can't perform operation till payment has settled
+ k_EResultNeedCaptcha = 101, // Needs to provide a valid captcha
+ k_EResultGSLTDenied = 102, // a game server login token owned by this token's owner has been banned
+ k_EResultGSOwnerDenied = 103, // game server owner is denied for other reason (account lock, community ban, vac ban, missing phone)
+ k_EResultInvalidItemType = 104, // the type of thing we were requested to act on is invalid
+ k_EResultIPBanned = 105, // the ip address has been banned from taking this action
+ k_EResultGSLTExpired = 106, // this token has expired from disuse; can be reset for use
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+ k_EVoiceResultReceiverOutOfDate = 8,
+ k_EVoiceResultReceiverDidNotAnswer = 9,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+enum EDenyReason
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+};
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+enum EBeginAuthSessionResult
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+};
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+enum EAuthSessionResponse
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+ k_EAuthSessionResponsePublisherIssuedBan = 9, // The user is banned for this game. The ban came via the web api and not VAC
+};
+
+// results from UserHasLicenseForApp
+enum EUserHasLicenseForAppResult
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+};
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x0000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x0001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x0002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x0004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x0008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x0010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x0020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x0040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_RetailLicense = 0x0080, // has a retail license for game, (CD-Key etc)
+ k_EAppOwnershipFlags_LicenseLocked = 0x0100, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x0200, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x0400, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x0800, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x1000, // Recurring license, user is charged periodically
+ k_EAppOwnershipFlags_LicenseCanceled = 0x2000, // Mark as canceled, but might be still active if recurring
+ k_EAppOwnershipFlags_AutoGrant = 0x4000, // Ownership is based on any kind of autogrant license
+ k_EAppOwnershipFlags_PendingGift = 0x8000, // user has pending gift to redeem
+ k_EAppOwnershipFlags_RentalNotActivated = 0x10000, // Rental hasn't been activated yet
+ k_EAppOwnershipFlags_Rental = 0x20000, // Is a rental
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media_DEPRECATED = 0x010, // legacy - was used for game trailers, which are now just videos on the web
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+ k_EAppType_Hardware = 0x200, // a hardware device (Steam Machine, Steam Controller, Steam Link, etc.)
+ k_EAppType_Franchise = 0x400, // A hub for collections of multiple apps, eg films, series, games
+ k_EAppType_Video = 0x800, // A video component of either a Film or TVSeries (may be the feature, an episode, preview, making-of, etc)
+ k_EAppType_Plugin = 0x1000, // Plug-in types for other Apps
+ k_EAppType_Music = 0x2000, // Music files
+ k_EAppType_Series = 0x4000, // Container app for video series
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+ //k_EChatEntryTypeReserved1 = 12, // No longer used
+ //k_EChatEntryTypeReserved2 = 13, // No longer used
+ k_EChatEntryTypeLinkBlocked = 14, // a link was removed by the chat filter.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Broadcast upload result details
+//-----------------------------------------------------------------------------
+enum EBroadcastUploadResult
+{
+ k_EBroadcastUploadResultNone = 0, // broadcast state unknown
+ k_EBroadcastUploadResultOK = 1, // broadcast was good, no problems
+ k_EBroadcastUploadResultInitFailed = 2, // broadcast init failed
+ k_EBroadcastUploadResultFrameFailed = 3, // broadcast frame upload failed
+ k_EBroadcastUploadResultTimeout = 4, // broadcast upload timed out
+ k_EBroadcastUploadResultBandwidthExceeded = 5, // broadcast send too much data
+ k_EBroadcastUploadResultLowFPS = 6, // broadcast FPS too low
+ k_EBroadcastUploadResultMissingKeyFrames = 7, // broadcast sending not enough key frames
+ k_EBroadcastUploadResultNoConnection = 8, // broadcast client failed to connect to relay
+ k_EBroadcastUploadResultRelayFailed = 9, // relay dropped the upload
+ k_EBroadcastUploadResultSettingsChanged = 10, // the client changed broadcast settings
+ k_EBroadcastUploadResultMissingAudio = 11, // client failed to send audio data
+ k_EBroadcastUploadResultTooFarBehind = 12, // clients was too slow uploading
+ k_EBroadcastUploadResultTranscodeBehind = 13, // server failed to keep up with transcode
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: codes for well defined launch options
+//-----------------------------------------------------------------------------
+enum ELaunchOptionType
+{
+ k_ELaunchOptionType_None = 0, // unknown what launch option does
+ k_ELaunchOptionType_Default = 1, // runs the game, app, whatever in default mode
+ k_ELaunchOptionType_SafeMode = 2, // runs the game in safe mode
+ k_ELaunchOptionType_Multiplayer = 3, // runs the game in multiplayer mode
+ k_ELaunchOptionType_Config = 4, // runs config tool for this game
+ k_ELaunchOptionType_OpenVR = 5, // runs game in VR mode using OpenVR
+ k_ELaunchOptionType_Server = 6, // runs dedicated server for this game
+ k_ELaunchOptionType_Editor = 7, // runs game editor
+ k_ELaunchOptionType_Manual = 8, // shows game manual
+ k_ELaunchOptionType_Benchmark = 9, // runs game benchmark
+ k_ELaunchOptionType_Option1 = 10, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option2 = 11, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option3 = 12, // generic run option, uses description field for game name
+ k_ELaunchOptionType_OculusVR = 13, // runs game in VR mode using the Oculus SDK
+ k_ELaunchOptionType_OpenVROverlay = 14, // runs an OpenVR dashboard overlay
+ k_ELaunchOptionType_OSVR = 15, // runs game in VR mode using the OSVR SDK
+
+
+ k_ELaunchOptionType_Dialog = 1000, // show launch options dialog
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this launch option is any of the vr launching types
+//-----------------------------------------------------------------------------
+static inline bool BIsVRLaunchOptionType( const ELaunchOptionType eType )
+{
+ return eType == k_ELaunchOptionType_OpenVR
+ || eType == k_ELaunchOptionType_OpenVROverlay
+ || eType == k_ELaunchOptionType_OculusVR
+ || eType == k_ELaunchOptionType_OSVR;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: code points for VR HMD vendors and models
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN A DATABASE
+//-----------------------------------------------------------------------------
+enum EVRHMDType
+{
+ k_eEVRHMDType_None = -1, // unknown vendor and model
+
+ k_eEVRHMDType_Unknown = 0, // unknown vendor and model
+
+ k_eEVRHMDType_HTC_Dev = 1, // original HTC dev kits
+ k_eEVRHMDType_HTC_VivePre = 2, // htc vive pre
+ k_eEVRHMDType_HTC_Vive = 3, // htc vive consumer release
+
+ k_eEVRHMDType_HTC_Unknown = 20, // unknown htc hmd
+
+ k_eEVRHMDType_Oculus_DK1 = 21, // Oculus DK1
+ k_eEVRHMDType_Oculus_DK2 = 22, // Oculus DK2
+ k_eEVRHMDType_Oculus_Rift = 23, // Oculus rift
+
+ k_eEVRHMDType_Oculus_Unknown = 40, // // Oculus unknown HMD
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Controller models
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN A DATABASE
+//-----------------------------------------------------------------------------
+enum EControllerType
+{
+ k_eControllerType_None = -1,
+ k_eControllerType_Unknown = 0,
+
+ // Steam Controllers
+ k_eControllerType_UnknownSteamController = 1,
+ k_eControllerType_SteamController = 2,
+
+ // Other Controllers
+ k_eControllerType_UnknownNonSteamController = 30,
+ k_eControllerType_XBox360Controller = 31,
+ k_eControllerType_XBoxOneController = 32,
+ k_eControllerType_PS3Controller = 33,
+ k_eControllerType_PS4Controller = 34,
+ k_eControllerType_WiiController = 35,
+ k_eControllerType_AppleController = 36
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this is from an Oculus HMD
+//-----------------------------------------------------------------------------
+static inline bool BIsOculusHMD( EVRHMDType eType )
+{
+ return eType == k_eEVRHMDType_Oculus_DK1 || eType == k_eEVRHMDType_Oculus_DK2 || eType == k_eEVRHMDType_Oculus_Rift || eType == k_eEVRHMDType_Oculus_Unknown;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this is from an Vive HMD
+//-----------------------------------------------------------------------------
+static inline bool BIsViveHMD( EVRHMDType eType )
+{
+ return eType == k_eEVRHMDType_HTC_Dev || eType == k_eEVRHMDType_HTC_VivePre || eType == k_eEVRHMDType_HTC_Vive || eType == k_eEVRHMDType_HTC_Unknown;
+}
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM2_USERID_STRUCTS )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ V_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, V_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ if ( pchExePath )
+ CRC32_ProcessBuffer( &crc32, pchExePath, V_strlen( pchExePath ) );
+ if ( pchAppName )
+ CRC32_ProcessBuffer( &crc32, pchAppName, V_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, V_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_138a/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_138a/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_138a/steamhttpenums.h b/lsteamclient/steamworks_sdk_138a/steamhttpenums.h
new file mode 100644
index 00000000..b2f05d94
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/steamhttpenums.h
@@ -0,0 +1,98 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+ k_EHTTPMethodPATCH,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401, // You probably want 403 or something else. 401 implies you're sending a WWW-Authenticate header and the client can sent an Authorization header in response.
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+ k_EHTTPStatusCode4xxUnknown = 418, // 418 is reserved, so we'll use it to mean unknown
+ k_EHTTPStatusCode429TooManyRequests = 429,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+ k_EHTTPStatusCode5xxUnknown = 599,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_138a/steamps3params.h b/lsteamclient/steamworks_sdk_138a/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_138a/steamtypes.h b/lsteamclient/steamworks_sdk_138a/steamtypes.h
new file mode 100644
index 00000000..2b805ce7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/steamtypes.h
@@ -0,0 +1,181 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+#ifdef API_GEN
+# define CLANG_ATTR(ATTR) __attribute__((annotate( ATTR )))
+#else
+# define CLANG_ATTR(ATTR)
+#endif
+
+#define METHOD_DESC(DESC) CLANG_ATTR( "desc:" #DESC ";" )
+#define IGNOREATTR() CLANG_ATTR( "ignore" )
+#define OUT_STRUCT() CLANG_ATTR( "out_struct: ;" )
+#define OUT_STRING() CLANG_ATTR( "out_string: ;" )
+#define OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" )
+#define OUT_ARRAY_COUNT(COUNTER, DESC) CLANG_ATTR( "out_array_count:" #COUNTER ";desc:" #DESC )
+#define ARRAY_COUNT(COUNTER) CLANG_ATTR( "array_count:" #COUNTER ";" )
+#define ARRAY_COUNT_D(COUNTER, DESC) CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC )
+#define BUFFER_COUNT(COUNTER) CLANG_ATTR( "buffer_count:" #COUNTER ";" )
+#define OUT_BUFFER_COUNT(COUNTER) CLANG_ATTR( "out_buffer_count:" #COUNTER ";" )
+#define OUT_STRING_COUNT(COUNTER) CLANG_ATTR( "out_string_count:" #COUNTER ";" )
+#define DESC(DESC) CLANG_ATTR("desc:" #DESC ";")
+#define CALL_RESULT(RESULT_TYPE) CLANG_ATTR("callresult:" #RESULT_TYPE ";")
+#define CALL_BACK(RESULT_TYPE) CLANG_ATTR("callback:" #RESULT_TYPE ";")
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef uint64 JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+const JobID_t k_JobIDNil = 0xffffffffffffffffull;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+typedef uint32 BundleId_t;
+const BundleId_t k_uBundleIdInvalid = 0;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+// ID for a depot content manifest
+typedef uint64 ManifestId_t;
+const ManifestId_t k_uManifestIdInvalid = 0;
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_138a/steamuniverse.h b/lsteamclient/steamworks_sdk_138a/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_138a/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_139/isteamapplist.h b/lsteamclient/steamworks_sdk_139/isteamapplist.h
new file mode 100644
index 00000000..d0d7e7e7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, OUT_STRING() char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_139/isteamapps.h b/lsteamclient/steamworks_sdk_139/isteamapps.h
new file mode 100644
index 00000000..89c0aaf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamapps.h
@@ -0,0 +1,176 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 240; // max supported length of a legacy cd key
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request legacy cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+ // get download progress for optional DLC
+ virtual bool GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // return the buildid of this app, may change at any time based on backend updates to the game
+ virtual int GetAppBuildId() = 0;
+
+ // Request all proof of purchase keys for the calling appid and asociated DLC.
+ // A series of AppProofOfPurchaseKeyResponse_t callbacks will be sent with
+ // appropriate appid values, ending with a final callback where the m_nAppId
+ // member is k_uAppIdInvalid (zero).
+ virtual void RequestAllProofOfPurchaseKeys() = 0;
+
+ CALL_RESULT( FileDetailsResult_t )
+ virtual SteamAPICall_t GetFileDetails( const char* pszFileName ) = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION008"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RequestAppProofOfPurchaseKey/RequestAllProofOfPurchaseKeys
+// for supporting third-party CD keys, or other proof-of-purchase systems.
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 21 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ uint32 m_cchKeyLength;
+ char m_rgchKey[k_cubAppProofOfPurchaseKeyMax];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetFileDetails
+//-----------------------------------------------------------------------------
+struct FileDetailsResult_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 23 };
+ EResult m_eResult;
+ uint64 m_ulFileSize; // original file size in bytes
+ uint8 m_FileSHA[20]; // original file SHA1 hash
+ uint32 m_unFlags; //
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_139/isteamappticket.h b/lsteamclient/steamworks_sdk_139/isteamappticket.h
new file mode 100644
index 00000000..570dc450
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamappticket.h
@@ -0,0 +1,32 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+#ifdef WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_139/isteamclient.h b/lsteamclient/steamworks_sdk_139/isteamclient.h
new file mode 100644
index 00000000..15bbb770
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamclient.h
@@ -0,0 +1,520 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#if ( defined(STEAM_API_EXPORTS) || defined(STEAM_API_NODLL) ) && !defined(API_GEN)
+#define STEAM_PRIVATE_API( ... ) __VA_ARGS__
+#elif defined(STEAM_API_EXPORTS) && defined(API_GEN)
+#define STEAM_PRIVATE_API( ... )
+#else
+#define STEAM_PRIVATE_API( ... ) protected: __VA_ARGS__ public:
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct ValvePackingSentinel_t
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+extern "C" typedef uint32 ( *SteamAPI_CheckCallbackRegistered_t )( int iCallbackNum );
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamMusicRemote;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+class ISteamHTMLSurface;
+class ISteamInventory;
+class ISteamVideo;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need these APIs if you have a more complex versioning scheme,
+// or if you want to implement a multiplexed gameserver where a single process
+// is handling multiple games at once with independent gameserver SteamIDs.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client.
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Deprecated. Applications should use SteamAPI_RunCallbacks() or SteamGameServer_RunCallbacks() instead.
+ STEAM_PRIVATE_API( virtual void RunFrame() = 0; )
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message.
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player Remote
+ virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // html page display
+ virtual ISteamHTMLSurface *GetISteamHTMLSurface(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // Helper functions for internal Steam usage
+ STEAM_PRIVATE_API( virtual void DEPRECATED_Set_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; )
+ STEAM_PRIVATE_API( virtual void DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; )
+ STEAM_PRIVATE_API( virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0; )
+
+ // inventory
+ virtual ISteamInventory *GetISteamInventory( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Video
+ virtual ISteamVideo *GetISteamVideo( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient017"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iClientDepotBuilderCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+enum { k_iSteamMusicRemoteCallbacks = 4100 };
+enum { k_iClientVRCallbacks = 4200 };
+enum { k_iClientGameNotificationCallbacks = 4300 };
+enum { k_iSteamGameNotificationCallbacks = 4400 };
+enum { k_iSteamHTMLSurfaceCallbacks = 4500 };
+enum { k_iClientVideoCallbacks = 4600 };
+enum { k_iClientInventoryCallbacks = 4700 };
+enum { k_iClientBluetoothManagerCallbacks = 4800 };
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+#ifdef STEAM_CALLBACK_INSPECTION_ENABLED
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname { \
+ typedef callbackname SteamCallback_t; \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+#else
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) struct callbackname { typedef callbackname SteamCallback_t; enum { k_iCallback = callbackid };
+#define CALLBACK_MEMBER( varidx, vartype, varname ) public: vartype varname ;
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) public: vartype varname [ varcount ];
+#define END_CALLBACK_INTERNAL_BEGIN( numvars )
+#define END_CALLBACK_INTERNAL_SWITCH( varidx )
+#define END_CALLBACK_INTERNAL_END() };
+#define END_DEFINE_CALLBACK_0() };
+
+#endif
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_10() \
+ END_CALLBACK_INTERNAL_BEGIN( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_11() \
+ END_CALLBACK_INTERNAL_BEGIN( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_12() \
+ END_CALLBACK_INTERNAL_BEGIN( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_13() \
+ END_CALLBACK_INTERNAL_BEGIN( 13 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_14() \
+ END_CALLBACK_INTERNAL_BEGIN( 14 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 13 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_139/isteamcontroller.h b/lsteamclient/steamworks_sdk_139/isteamcontroller.h
new file mode 100644
index 00000000..add3a86c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamcontroller.h
@@ -0,0 +1,429 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define STEAM_CONTROLLER_MAX_COUNT 16
+
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTIONS 16
+
+#define STEAM_CONTROLLER_MAX_DIGITAL_ACTIONS 128
+
+#define STEAM_CONTROLLER_MAX_ORIGINS 8
+
+// When sending an option to a specific controller handle, you can send to all controllers via this command
+#define STEAM_CONTROLLER_HANDLE_ALL_CONTROLLERS UINT64_MAX
+
+#define STEAM_CONTROLLER_MIN_ANALOG_ACTION_DATA -1.0f
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTION_DATA 1.0f
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+enum EControllerSource
+{
+ k_EControllerSource_None,
+ k_EControllerSource_LeftTrackpad,
+ k_EControllerSource_RightTrackpad,
+ k_EControllerSource_Joystick,
+ k_EControllerSource_ABXY,
+ k_EControllerSource_Switch,
+ k_EControllerSource_LeftTrigger,
+ k_EControllerSource_RightTrigger,
+ k_EControllerSource_Gyro,
+ k_EControllerSource_CenterTrackpad, // PS4
+ k_EControllerSource_RightJoystick, // Traditional Controllers
+ k_EControllerSource_DPad, // Traditional Controllers
+ k_EControllerSource_Count
+};
+
+enum EControllerSourceMode
+{
+ k_EControllerSourceMode_None,
+ k_EControllerSourceMode_Dpad,
+ k_EControllerSourceMode_Buttons,
+ k_EControllerSourceMode_FourButtons,
+ k_EControllerSourceMode_AbsoluteMouse,
+ k_EControllerSourceMode_RelativeMouse,
+ k_EControllerSourceMode_JoystickMove,
+ k_EControllerSourceMode_JoystickMouse,
+ k_EControllerSourceMode_JoystickCamera,
+ k_EControllerSourceMode_ScrollWheel,
+ k_EControllerSourceMode_Trigger,
+ k_EControllerSourceMode_TouchMenu,
+ k_EControllerSourceMode_MouseJoystick,
+ k_EControllerSourceMode_MouseRegion,
+ k_EControllerSourceMode_RadialMenu,
+ k_EControllerSourceMode_Switches
+};
+
+enum EControllerActionOrigin
+{
+ // Steam Controller
+ k_EControllerActionOrigin_None,
+ k_EControllerActionOrigin_A,
+ k_EControllerActionOrigin_B,
+ k_EControllerActionOrigin_X,
+ k_EControllerActionOrigin_Y,
+ k_EControllerActionOrigin_LeftBumper,
+ k_EControllerActionOrigin_RightBumper,
+ k_EControllerActionOrigin_LeftGrip,
+ k_EControllerActionOrigin_RightGrip,
+ k_EControllerActionOrigin_Start,
+ k_EControllerActionOrigin_Back,
+ k_EControllerActionOrigin_LeftPad_Touch,
+ k_EControllerActionOrigin_LeftPad_Swipe,
+ k_EControllerActionOrigin_LeftPad_Click,
+ k_EControllerActionOrigin_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_LeftPad_DPadWest,
+ k_EControllerActionOrigin_LeftPad_DPadEast,
+ k_EControllerActionOrigin_RightPad_Touch,
+ k_EControllerActionOrigin_RightPad_Swipe,
+ k_EControllerActionOrigin_RightPad_Click,
+ k_EControllerActionOrigin_RightPad_DPadNorth,
+ k_EControllerActionOrigin_RightPad_DPadSouth,
+ k_EControllerActionOrigin_RightPad_DPadWest,
+ k_EControllerActionOrigin_RightPad_DPadEast,
+ k_EControllerActionOrigin_LeftTrigger_Pull,
+ k_EControllerActionOrigin_LeftTrigger_Click,
+ k_EControllerActionOrigin_RightTrigger_Pull,
+ k_EControllerActionOrigin_RightTrigger_Click,
+ k_EControllerActionOrigin_LeftStick_Move,
+ k_EControllerActionOrigin_LeftStick_Click,
+ k_EControllerActionOrigin_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_LeftStick_DPadWest,
+ k_EControllerActionOrigin_LeftStick_DPadEast,
+ k_EControllerActionOrigin_Gyro_Move,
+ k_EControllerActionOrigin_Gyro_Pitch,
+ k_EControllerActionOrigin_Gyro_Yaw,
+ k_EControllerActionOrigin_Gyro_Roll,
+
+ // PS4 Dual Shock
+ k_EControllerActionOrigin_PS4_X,
+ k_EControllerActionOrigin_PS4_Circle,
+ k_EControllerActionOrigin_PS4_Triangle,
+ k_EControllerActionOrigin_PS4_Square,
+ k_EControllerActionOrigin_PS4_LeftBumper,
+ k_EControllerActionOrigin_PS4_RightBumper,
+ k_EControllerActionOrigin_PS4_Options, //Start
+ k_EControllerActionOrigin_PS4_Share, //Back
+ k_EControllerActionOrigin_PS4_LeftPad_Touch,
+ k_EControllerActionOrigin_PS4_LeftPad_Swipe,
+ k_EControllerActionOrigin_PS4_LeftPad_Click,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadWest,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadEast,
+ k_EControllerActionOrigin_PS4_RightPad_Touch,
+ k_EControllerActionOrigin_PS4_RightPad_Swipe,
+ k_EControllerActionOrigin_PS4_RightPad_Click,
+ k_EControllerActionOrigin_PS4_RightPad_DPadNorth,
+ k_EControllerActionOrigin_PS4_RightPad_DPadSouth,
+ k_EControllerActionOrigin_PS4_RightPad_DPadWest,
+ k_EControllerActionOrigin_PS4_RightPad_DPadEast,
+ k_EControllerActionOrigin_PS4_CenterPad_Touch,
+ k_EControllerActionOrigin_PS4_CenterPad_Swipe,
+ k_EControllerActionOrigin_PS4_CenterPad_Click,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadNorth,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadSouth,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadWest,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadEast,
+ k_EControllerActionOrigin_PS4_LeftTrigger_Pull,
+ k_EControllerActionOrigin_PS4_LeftTrigger_Click,
+ k_EControllerActionOrigin_PS4_RightTrigger_Pull,
+ k_EControllerActionOrigin_PS4_RightTrigger_Click,
+ k_EControllerActionOrigin_PS4_LeftStick_Move,
+ k_EControllerActionOrigin_PS4_LeftStick_Click,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadWest,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadEast,
+ k_EControllerActionOrigin_PS4_RightStick_Move,
+ k_EControllerActionOrigin_PS4_RightStick_Click,
+ k_EControllerActionOrigin_PS4_RightStick_DPadNorth,
+ k_EControllerActionOrigin_PS4_RightStick_DPadSouth,
+ k_EControllerActionOrigin_PS4_RightStick_DPadWest,
+ k_EControllerActionOrigin_PS4_RightStick_DPadEast,
+ k_EControllerActionOrigin_PS4_DPad_North,
+ k_EControllerActionOrigin_PS4_DPad_South,
+ k_EControllerActionOrigin_PS4_DPad_West,
+ k_EControllerActionOrigin_PS4_DPad_East,
+ k_EControllerActionOrigin_PS4_Gyro_Move,
+ k_EControllerActionOrigin_PS4_Gyro_Pitch,
+ k_EControllerActionOrigin_PS4_Gyro_Yaw,
+ k_EControllerActionOrigin_PS4_Gyro_Roll,
+
+ // XBox One
+ k_EControllerActionOrigin_XBoxOne_A,
+ k_EControllerActionOrigin_XBoxOne_B,
+ k_EControllerActionOrigin_XBoxOne_X,
+ k_EControllerActionOrigin_XBoxOne_Y,
+ k_EControllerActionOrigin_XBoxOne_LeftBumper,
+ k_EControllerActionOrigin_XBoxOne_RightBumper,
+ k_EControllerActionOrigin_XBoxOne_Menu, //Start
+ k_EControllerActionOrigin_XBoxOne_View, //Back
+ k_EControllerActionOrigin_XBoxOne_LeftTrigger_Pull,
+ k_EControllerActionOrigin_XBoxOne_LeftTrigger_Click,
+ k_EControllerActionOrigin_XBoxOne_RightTrigger_Pull,
+ k_EControllerActionOrigin_XBoxOne_RightTrigger_Click,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_Move,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_Click,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadWest,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadEast,
+ k_EControllerActionOrigin_XBoxOne_RightStick_Move,
+ k_EControllerActionOrigin_XBoxOne_RightStick_Click,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadNorth,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadSouth,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadWest,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadEast,
+ k_EControllerActionOrigin_XBoxOne_DPad_North,
+ k_EControllerActionOrigin_XBoxOne_DPad_South,
+ k_EControllerActionOrigin_XBoxOne_DPad_West,
+ k_EControllerActionOrigin_XBoxOne_DPad_East,
+
+ // XBox 360
+ k_EControllerActionOrigin_XBox360_A,
+ k_EControllerActionOrigin_XBox360_B,
+ k_EControllerActionOrigin_XBox360_X,
+ k_EControllerActionOrigin_XBox360_Y,
+ k_EControllerActionOrigin_XBox360_LeftBumper,
+ k_EControllerActionOrigin_XBox360_RightBumper,
+ k_EControllerActionOrigin_XBox360_Start, //Start
+ k_EControllerActionOrigin_XBox360_Back, //Back
+ k_EControllerActionOrigin_XBox360_LeftTrigger_Pull,
+ k_EControllerActionOrigin_XBox360_LeftTrigger_Click,
+ k_EControllerActionOrigin_XBox360_RightTrigger_Pull,
+ k_EControllerActionOrigin_XBox360_RightTrigger_Click,
+ k_EControllerActionOrigin_XBox360_LeftStick_Move,
+ k_EControllerActionOrigin_XBox360_LeftStick_Click,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadWest,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadEast,
+ k_EControllerActionOrigin_XBox360_RightStick_Move,
+ k_EControllerActionOrigin_XBox360_RightStick_Click,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadNorth,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadSouth,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadWest,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadEast,
+ k_EControllerActionOrigin_XBox360_DPad_North,
+ k_EControllerActionOrigin_XBox360_DPad_South,
+ k_EControllerActionOrigin_XBox360_DPad_West,
+ k_EControllerActionOrigin_XBox360_DPad_East,
+
+ // SteamController V2
+ k_EControllerActionOrigin_SteamV2_A,
+ k_EControllerActionOrigin_SteamV2_B,
+ k_EControllerActionOrigin_SteamV2_X,
+ k_EControllerActionOrigin_SteamV2_Y,
+ k_EControllerActionOrigin_SteamV2_LeftBumper,
+ k_EControllerActionOrigin_SteamV2_RightBumper,
+ k_EControllerActionOrigin_SteamV2_LeftGrip,
+ k_EControllerActionOrigin_SteamV2_RightGrip,
+ k_EControllerActionOrigin_SteamV2_Start,
+ k_EControllerActionOrigin_SteamV2_Back,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Touch,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Swipe,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Click,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadWest,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadEast,
+ k_EControllerActionOrigin_SteamV2_RightPad_Touch,
+ k_EControllerActionOrigin_SteamV2_RightPad_Swipe,
+ k_EControllerActionOrigin_SteamV2_RightPad_Click,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadNorth,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadSouth,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadWest,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadEast,
+ k_EControllerActionOrigin_SteamV2_LeftTrigger_Pull,
+ k_EControllerActionOrigin_SteamV2_LeftTrigger_Click,
+ k_EControllerActionOrigin_SteamV2_RightTrigger_Pull,
+ k_EControllerActionOrigin_SteamV2_RightTrigger_Click,
+ k_EControllerActionOrigin_SteamV2_LeftStick_Move,
+ k_EControllerActionOrigin_SteamV2_LeftStick_Click,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadWest,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadEast,
+ k_EControllerActionOrigin_SteamV2_Gyro_Move,
+ k_EControllerActionOrigin_SteamV2_Gyro_Pitch,
+ k_EControllerActionOrigin_SteamV2_Gyro_Yaw,
+ k_EControllerActionOrigin_SteamV2_Gyro_Roll,
+
+ k_EControllerActionOrigin_Count
+};
+
+enum ESteamControllerLEDFlag
+{
+ k_ESteamControllerLEDFlag_SetColor,
+ k_ESteamControllerLEDFlag_RestoreUserDefault
+};
+
+// ControllerHandle_t is used to refer to a specific controller.
+// This handle will consistently identify a controller, even if it is disconnected and re-connected
+typedef uint64 ControllerHandle_t;
+
+
+// These handles are used to refer to a specific in-game action or action set
+// All action handles should be queried during initialization for performance reasons
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+
+#pragma pack( push, 1 )
+
+struct ControllerAnalogActionData_t
+{
+ // Type of data coming from this action, this will match what got specified in the action set
+ EControllerSourceMode eMode;
+
+ // The current state of this action; will be delta updates for mouse actions
+ float x, y;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+struct ControllerDigitalActionData_t
+{
+ // The current state of this action; will be true if currently pressed
+ bool bState;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+struct ControllerMotionData_t
+{
+ // Sensor-fused absolute rotation; will drift in heading
+ float rotQuatX;
+ float rotQuatY;
+ float rotQuatZ;
+ float rotQuatW;
+
+ // Positional acceleration
+ float posAccelX;
+ float posAccelY;
+ float posAccelZ;
+
+ // Angular velocity
+ float rotVelX;
+ float rotVelY;
+ float rotVelZ;
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ // Init and Shutdown must be called when starting/ending use of this interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Synchronize API state with the latest Steam Controller inputs available. This
+ // is performed automatically by SteamAPI_RunCallbacks, but for the absolute lowest
+ // possible latency, you call this directly before reading controller state.
+ virtual void RunFrame() = 0;
+
+ // Enumerate currently connected controllers
+ // handlesOut should point to a STEAM_CONTROLLER_MAX_COUNT sized array of ControllerHandle_t handles
+ // Returns the number of handles written to handlesOut
+ virtual int GetConnectedControllers( ControllerHandle_t *handlesOut ) = 0;
+
+ // Invokes the Steam overlay and brings up the binding screen
+ // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
+ virtual bool ShowBindingPanel( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTION SETS
+ // Lookup the handle for an Action Set. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerActionSetHandle_t GetActionSetHandle( const char *pszActionSetName ) = 0;
+
+ // Reconfigure the controller to use the specified action set (ie 'Menu', 'Walk' or 'Drive')
+ // This is cheap, and can be safely called repeatedly. It's often easier to repeatedly call it in
+ // your state loops, instead of trying to place it in all of your state transitions.
+ virtual void ActivateActionSet( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle ) = 0;
+ virtual ControllerActionSetHandle_t GetCurrentActionSet( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTIONS
+ // Lookup the handle for a digital action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerDigitalActionHandle_t GetDigitalActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of the supplied digital game action
+ virtual ControllerDigitalActionData_t GetDigitalActionData( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle ) = 0;
+
+ // Get the origin(s) for a digital action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ // Lookup the handle for an analog action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerAnalogActionHandle_t GetAnalogActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of these supplied analog game action
+ virtual ControllerAnalogActionData_t GetAnalogActionData( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle ) = 0;
+
+ // Get the origin(s) for an analog action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ virtual void StopAnalogActionMomentum( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction ) = 0;
+
+ // Trigger a haptic pulse on a controller
+ virtual void TriggerHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ // Trigger a pulse with a duty cycle of usDurationMicroSec / usOffMicroSec, unRepeat times.
+ // nFlags is currently unused and reserved for future use.
+ virtual void TriggerRepeatedHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags ) = 0;
+
+ // Tigger a vibration event on supported controllers.
+ virtual void TriggerVibration( ControllerHandle_t controllerHandle, unsigned short usLeftSpeed, unsigned short usRightSpeed ) = 0;
+
+ // Set the controller LED color on supported controllers.
+ virtual void SetLEDColor( ControllerHandle_t controllerHandle, uint8 nColorR, uint8 nColorG, uint8 nColorB, unsigned int nFlags ) = 0;
+
+ // Returns the associated gamepad index for the specified controller, if emulating a gamepad
+ virtual int GetGamepadIndexForController( ControllerHandle_t ulControllerHandle ) = 0;
+
+ // Returns the associated controller handle for the specified emulated gamepad
+ virtual ControllerHandle_t GetControllerForGamepadIndex( int nIndex ) = 0;
+
+ // Returns raw motion data from the specified controller
+ virtual ControllerMotionData_t GetMotionData( ControllerHandle_t controllerHandle ) = 0;
+
+ // Attempt to display origins of given action in the controller HUD, for the currently active action set
+ // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
+ virtual bool ShowDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition ) = 0;
+ virtual bool ShowAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition ) = 0;
+
+ // Returns a localized string (from Steam's language setting) for the specified origin
+ virtual const char *GetStringForActionOrigin( EControllerActionOrigin eOrigin ) = 0;
+
+ // Get a local path to art for on-screen glyph for a particular origin
+ virtual const char *GetGlyphForActionOrigin( EControllerActionOrigin eOrigin ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "SteamController005"
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_139/isteamfriends.h b/lsteamclient/steamworks_sdk_139/isteamfriends.h
new file mode 100644
index 00000000..44f4682e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamfriends.h
@@ -0,0 +1,636 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1, // this doesn't get stored; the user has just done an Ignore on an friendship invite
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5, // this is stored; the user has explicit blocked this other user from comments/chat/etc
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested_DEPRECATED = 7, // was used by the original implementation of the facebook linking feature, but now unused.
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+// friends group identifier type
+typedef int16 FriendsGroupID_t;
+
+// invalid friends group identifier constant
+const FriendsGroupID_t k_FriendsGroupID_Invalid = -1;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ // k_EFriendFlagSuggested = 0x800, // not used
+ k_EFriendFlagChatMember = 0x1000,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ CALL_RESULT( SetPersonaNameResponse_t )
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, OUT_STRUCT() FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+ // friends steam level
+ virtual int GetFriendSteamLevel( CSteamID steamIDFriend ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // friend grouping (tag) apis
+ // returns the number of friends groups
+ virtual int GetFriendsGroupCount() = 0;
+ // returns the friends group ID for the given index (invalid indices return k_FriendsGroupID_Invalid)
+ virtual FriendsGroupID_t GetFriendsGroupIDByIndex( int iFG ) = 0;
+ // returns the name for the given friends group (NULL in the case of invalid friends group IDs)
+ virtual const char *GetFriendsGroupName( FriendsGroupID_t friendsGroupID ) = 0;
+ // returns the number of members in a given friends group
+ virtual int GetFriendsGroupMembersCount( FriendsGroupID_t friendsGroupID ) = 0;
+ // gets up to nMembersCount members of the given friends group, if fewer exist than requested those positions' SteamIDs will be invalid
+ virtual void GetFriendsGroupMembersList( FriendsGroupID_t friendsGroupID, OUT_ARRAY_CALL(nMembersCount, GetFriendsGroupMembersCount, friendsGroupID ) CSteamID *pOutSteamIDMembers, int nMembersCount ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( ARRAY_COUNT(cClansToRequest) CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ CALL_RESULT( ClanOfficerListResponse_t )
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Note the following limits: k_cchMaxRichPresenceKeys, k_cchMaxRichPresenceKeyLength, k_cchMaxRichPresenceValueLength
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ CALL_RESULT( JoinClanChatRoomCompletionResult_t )
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, OUT_STRUCT() CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ CALL_RESULT( FriendsGetFollowerCount_t )
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ CALL_RESULT( FriendsIsFollowing_t )
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ CALL_RESULT( FriendsEnumerateFollowingList_t )
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends015"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_139/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_139/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_139/isteamgameserver.h b/lsteamclient/steamworks_sdk_139/isteamgameserver.h
new file mode 100644
index 00000000..2004c830
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamgameserver.h
@@ -0,0 +1,387 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ CALL_RESULT( GSReputation_t )
+ virtual SteamAPICall_t GetServerReputation() = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ CALL_RESULT( AssociateWithClanResult_t )
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ CALL_RESULT( ComputeNewPlayerCompatibilityResult_t )
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_139/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_139/isteamgameserverstats.h
new file mode 100644
index 00000000..e4c7d648
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamgameserverstats.h
@@ -0,0 +1,101 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ CALL_RESULT( GSStatsReceived_t )
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ CALL_RESULT( GSStatsStored_t )
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_139/isteamhtmlsurface.h b/lsteamclient/steamworks_sdk_139/isteamhtmlsurface.h
new file mode 100644
index 00000000..9b08e4c3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamhtmlsurface.h
@@ -0,0 +1,453 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to display html pages in a texture
+//
+//=============================================================================
+
+#ifndef ISTEAMHTMLSURFACE_H
+#define ISTEAMHTMLSURFACE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+typedef uint32 HHTMLBrowser;
+const uint32 INVALID_HTMLBROWSER = 0;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for displaying HTML pages and interacting with them
+//-----------------------------------------------------------------------------
+class ISteamHTMLSurface
+{
+public:
+ virtual ~ISteamHTMLSurface() {}
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Create a browser object for display of a html page, when creation is complete the call handle
+ // will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser.
+ // The user agent string is a substring to be added to the general user agent string so you can
+ // identify your client on web servers.
+ // The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if
+ // you do not require this functionality.
+ //
+ // YOU MUST HAVE IMPLEMENTED HANDLERS FOR HTML_BrowserReady_t, HTML_StartRequest_t,
+ // HTML_JSAlert_t, HTML_JSConfirm_t, and HTML_FileOpenDialog_t! See the CALLBACKS
+ // section of this interface (AllowStartRequest, etc) for more details. If you do
+ // not implement these callback handlers, the browser may appear to hang instead of
+ // navigating to new pages or triggering javascript popups.
+ //
+ CALL_RESULT( HTML_BrowserReady_t )
+ virtual SteamAPICall_t CreateBrowser( const char *pchUserAgent, const char *pchUserCSS ) = 0;
+
+ // Call this when you are done with a html surface, this lets us free the resources being used by it
+ virtual void RemoveBrowser( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // Navigate to this URL, results in a HTML_StartRequest_t as the request commences
+ virtual void LoadURL( HHTMLBrowser unBrowserHandle, const char *pchURL, const char *pchPostData ) = 0;
+
+ // Tells the surface the size in pixels to display the surface
+ virtual void SetSize( HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight ) = 0;
+
+ // Stop the load of the current html page
+ virtual void StopLoad( HHTMLBrowser unBrowserHandle ) = 0;
+ // Reload (most likely from local cache) the current page
+ virtual void Reload( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate back in the page history
+ virtual void GoBack( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate forward in the page history
+ virtual void GoForward( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // add this header to any url requests from this browser
+ virtual void AddHeader( HHTMLBrowser unBrowserHandle, const char *pchKey, const char *pchValue ) = 0;
+ // run this javascript script in the currently loaded page
+ virtual void ExecuteJavascript( HHTMLBrowser unBrowserHandle, const char *pchScript ) = 0;
+
+ enum EHTMLMouseButton
+ {
+ eHTMLMouseButton_Left = 0,
+ eHTMLMouseButton_Right = 1,
+ eHTMLMouseButton_Middle = 2,
+ };
+
+ // Mouse click and mouse movement commands
+ virtual void MouseUp( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDown( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDoubleClick( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ // x and y are relative to the HTML bounds
+ virtual void MouseMove( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+ // nDelta is pixels of scroll
+ virtual void MouseWheel( HHTMLBrowser unBrowserHandle, int32 nDelta ) = 0;
+
+ enum EMouseCursor
+ {
+ dc_user = 0,
+ dc_none,
+ dc_arrow,
+ dc_ibeam,
+ dc_hourglass,
+ dc_waitarrow,
+ dc_crosshair,
+ dc_up,
+ dc_sizenw,
+ dc_sizese,
+ dc_sizene,
+ dc_sizesw,
+ dc_sizew,
+ dc_sizee,
+ dc_sizen,
+ dc_sizes,
+ dc_sizewe,
+ dc_sizens,
+ dc_sizeall,
+ dc_no,
+ dc_hand,
+ dc_blank, // don't show any custom cursor, just use your default
+ dc_middle_pan,
+ dc_north_pan,
+ dc_north_east_pan,
+ dc_east_pan,
+ dc_south_east_pan,
+ dc_south_pan,
+ dc_south_west_pan,
+ dc_west_pan,
+ dc_north_west_pan,
+ dc_alias,
+ dc_cell,
+ dc_colresize,
+ dc_copycur,
+ dc_verticaltext,
+ dc_rowresize,
+ dc_zoomin,
+ dc_zoomout,
+ dc_help,
+ dc_custom,
+
+ dc_last, // custom cursors start from this value and up
+ };
+
+ enum EHTMLKeyModifiers
+ {
+ k_eHTMLKeyModifier_None = 0,
+ k_eHTMLKeyModifier_AltDown = 1 << 0,
+ k_eHTMLKeyModifier_CtrlDown = 1 << 1,
+ k_eHTMLKeyModifier_ShiftDown = 1 << 2,
+ };
+
+ // keyboard interactions, native keycode is the virtual key code value from your OS
+ virtual void KeyDown( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ virtual void KeyUp( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ // cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press)
+ virtual void KeyChar( HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+
+ // programmatically scroll this many pixels on the page
+ virtual void SetHorizontalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+ virtual void SetVerticalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+
+ // tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things
+ virtual void SetKeyFocus( HHTMLBrowser unBrowserHandle, bool bHasKeyFocus ) = 0;
+
+ // open the current pages html code in the local editor of choice, used for debugging
+ virtual void ViewSource( HHTMLBrowser unBrowserHandle ) = 0;
+ // copy the currently selected text on the html page to the local clipboard
+ virtual void CopyToClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+ // paste from the local clipboard to the current html page
+ virtual void PasteFromClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element
+ virtual void Find( HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse ) = 0;
+ // cancel a currently running find
+ virtual void StopFind( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // return details about the link at position x,y on the current page
+ virtual void GetLinkAtPosition( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+
+ // set a webcookie for the hostname in question
+ virtual void SetCookie( const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath = "/", RTime32 nExpires = 0, bool bSecure = false, bool bHTTPOnly = false ) = 0;
+
+ // Zoom the current page by flZoom ( from 0.0 to 2.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care)
+ virtual void SetPageScaleFactor( HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY ) = 0;
+
+ // Enable/disable low-resource background mode, where javascript and repaint timers are throttled, resources are
+ // more aggressively purged from memory, and audio/video elements are paused. When background mode is enabled,
+ // all HTML5 video and audio objects will execute ".pause()" and gain the property "._steam_background_paused = 1".
+ // When background mode is disabled, any video or audio objects with that property will resume with ".play()".
+ virtual void SetBackgroundMode( HHTMLBrowser unBrowserHandle, bool bBackgroundMode ) = 0;
+
+ // CALLBACKS
+ //
+ // These set of functions are used as responses to callback requests
+ //
+
+ // You MUST call this in response to a HTML_StartRequest_t callback
+ // Set bAllowed to true to allow this navigation, false to cancel it and stay
+ // on the current page. You can use this feature to limit the valid pages
+ // allowed in your HTML surface.
+ virtual void AllowStartRequest( HHTMLBrowser unBrowserHandle, bool bAllowed ) = 0;
+
+ // You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback
+ // Set bResult to true for the OK option of a confirm, use false otherwise
+ virtual void JSDialogResponse( HHTMLBrowser unBrowserHandle, bool bResult ) = 0;
+
+ // You MUST call this in response to a HTML_FileOpenDialog_t callback
+ IGNOREATTR()
+ virtual void FileLoadDialogResponse( HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles ) = 0;
+};
+
+#define STEAMHTMLSURFACE_INTERFACE_VERSION "STEAMHTMLSURFACE_INTERFACE_VERSION_003"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser is ready for use
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_BrowserReady_t, k_iSteamHTMLSurfaceCallbacks + 1 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this browser is now fully created and ready to navigate to pages
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser has a pending paint
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_NeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 2)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint
+CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called
+CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture
+CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture
+CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update
+CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update
+CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update
+CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update
+CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered
+CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages
+END_DEFINE_CALLBACK_12()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser wanted to navigate to a new page
+// NOTE - you MUST call AllowStartRequest in response to this callback
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_StartRequest_t, k_iSteamHTMLSurfaceCallbacks + 3)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface navigating
+CALLBACK_MEMBER(1, const char *, pchURL) // the url they wish to navigate to
+CALLBACK_MEMBER(2, const char *, pchTarget) // the html link target type (i.e _blank, _self, _parent, _top )
+CALLBACK_MEMBER(3, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER(4, bool, bIsRedirect) // true if this was a http/html redirect from the last load request
+END_DEFINE_CALLBACK_5()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser has been requested to close due to user interaction (usually from a javascript window.close() call)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_CloseBrowser_t, k_iSteamHTMLSurfaceCallbacks + 4)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser is navigating to a new url
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_URLChanged_t, k_iSteamHTMLSurfaceCallbacks + 5 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface navigating
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the url they wish to navigate to
+CALLBACK_MEMBER( 2, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER( 3, bool, bIsRedirect ) // true if this was a http/html redirect from the last load request
+CALLBACK_MEMBER( 4, const char *, pchPageTitle ) // the title of the page
+CALLBACK_MEMBER( 5, bool, bNewNavigation ) // true if this was from a fresh tab and not a click on an existing page
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A page is finished loading
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FinishedRequest_t, k_iSteamHTMLSurfaceCallbacks + 6 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+CALLBACK_MEMBER( 2, const char *, pchPageTitle ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a request to load this url in a new tab
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_OpenLinkInNewTab_t, k_iSteamHTMLSurfaceCallbacks + 7 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the page has a new title now
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ChangedTitle_t, k_iSteamHTMLSurfaceCallbacks + 8 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: results from a search
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SearchResults_t, k_iSteamHTMLSurfaceCallbacks + 9 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unResults ) //
+CALLBACK_MEMBER( 2, uint32, unCurrentMatch ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: page history status changed on the ability to go backwards and forward
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_CanGoBackAndForward_t, k_iSteamHTMLSurfaceCallbacks + 10 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, bool, bCanGoBack ) //
+CALLBACK_MEMBER( 2, bool, bCanGoForward ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the horizontal scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HorizontalScroll_t, k_iSteamHTMLSurfaceCallbacks + 11 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool , bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the vertical scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_VerticalScroll_t, k_iSteamHTMLSurfaceCallbacks + 12 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool, bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetLinkAtPosition call
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_LinkAtPosition_t, k_iSteamHTMLSurfaceCallbacks + 13 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, x ) // NOTE - Not currently set
+CALLBACK_MEMBER( 2, uint32, y ) // NOTE - Not currently set
+CALLBACK_MEMBER( 3, const char *, pchURL ) //
+CALLBACK_MEMBER( 4, bool, bInput ) //
+CALLBACK_MEMBER( 5, bool, bLiveLink ) //
+END_DEFINE_CALLBACK_6()
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript alert dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSAlert_t, k_iSteamHTMLSurfaceCallbacks + 14 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript confirmation dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSConfirm_t, k_iSteamHTMLSurfaceCallbacks + 15 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: when received show a file open dialog
+// then call FileLoadDialogResponse with the file(s) the user selected.
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FileOpenDialog_t, k_iSteamHTMLSurfaceCallbacks + 16 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+CALLBACK_MEMBER( 2, const char *, pchInitialFile ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new html window has been created
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_NewWindow_t, k_iSteamHTMLSurfaceCallbacks + 21 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the current surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the page to load
+CALLBACK_MEMBER( 2, uint32, unX ) // the x pos into the page to display the popup
+CALLBACK_MEMBER( 3, uint32, unY ) // the y pos into the page to display the popup
+CALLBACK_MEMBER( 4, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 5, uint32, unTall ) // the total height of the pBGRA texture
+CALLBACK_MEMBER( 6, HHTMLBrowser, unNewWindow_BrowserHandle ) // the handle of the new window surface
+END_DEFINE_CALLBACK_7()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: change the cursor to display
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SetCursor_t, k_iSteamHTMLSurfaceCallbacks + 22 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, eMouseCursor ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: informational message from the browser
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_StatusText_t, k_iSteamHTMLSurfaceCallbacks + 23 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ShowToolTip_t, k_iSteamHTMLSurfaceCallbacks + 24 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: update the text of an existing tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_UpdateToolTip_t, k_iSteamHTMLSurfaceCallbacks + 25 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: hide the tooltip you are showing
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HideToolTip_t, k_iSteamHTMLSurfaceCallbacks + 26 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMHTMLSURFACE_H
diff --git a/lsteamclient/steamworks_sdk_139/isteamhttp.h b/lsteamclient/steamworks_sdk_139/isteamhttp.h
new file mode 100644
index 00000000..d96a631f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamhttp.h
@@ -0,0 +1,210 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+typedef uint32 HTTPCookieContainerHandle;
+#define INVALID_HTTPCOOKIE_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Both http and https are supported,
+ // so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+
+ // Creates a cookie container handle which you must later free with ReleaseCookieContainer(). If bAllowResponsesToModify=true
+ // than any response to your requests using this cookie container may add new cookies which may be transmitted with
+ // future requests. If bAllowResponsesToModify=false than only cookies you explicitly set will be sent. This API is just for
+ // during process lifetime, after steam restarts no cookies are persisted and you have no way to access the cookie container across
+ // repeat executions of your process.
+ virtual HTTPCookieContainerHandle CreateCookieContainer( bool bAllowResponsesToModify ) = 0;
+
+ // Release a cookie container you are finished using, freeing it's memory
+ virtual bool ReleaseCookieContainer( HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Adds a cookie to the specified cookie container that will be used with future requests.
+ virtual bool SetCookie( HTTPCookieContainerHandle hCookieContainer, const char *pchHost, const char *pchUrl, const char *pchCookie ) = 0;
+
+ // Set the cookie container to use for a HTTP request
+ virtual bool SetHTTPRequestCookieContainer( HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Set the extra user agent info for a request, this doesn't clobber the normal user agent, it just adds the extra info on the end
+ virtual bool SetHTTPRequestUserAgentInfo( HTTPRequestHandle hRequest, const char *pchUserAgentInfo ) = 0;
+
+ // Set that https request should require verified SSL certificate via machines certificate trust store
+ virtual bool SetHTTPRequestRequiresVerifiedCertificate( HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate ) = 0;
+
+ // Set an absolute timeout on the HTTP request, this is just a total time timeout different than the network activity timeout
+ // which can bump everytime we get more data
+ virtual bool SetHTTPRequestAbsoluteTimeoutMS( HTTPRequestHandle hRequest, uint32 unMilliseconds ) = 0;
+
+ // Check if the reason the request failed was because we timed it out (rather than some harder failure)
+ virtual bool GetHTTPRequestWasTimedOut( HTTPRequestHandle hRequest, bool *pbWasTimedOut ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+
+ uint32 m_unBodySize; // Same as GetHTTPResponseBodySize()
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_139/isteaminventory.h b/lsteamclient/steamworks_sdk_139/isteaminventory.h
new file mode 100644
index 00000000..d23a30ff
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteaminventory.h
@@ -0,0 +1,368 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Inventory
+//
+//=============================================================================
+
+#ifndef ISTEAMINVENTORY_H
+#define ISTEAMINVENTORY_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// Every individual instance of an item has a globally-unique ItemInstanceID.
+// This ID is unique to the combination of (player, specific item instance)
+// and will not be transferred to another player or re-used for another item.
+typedef uint64 SteamItemInstanceID_t;
+
+static const SteamItemInstanceID_t k_SteamItemInstanceIDInvalid = (SteamItemInstanceID_t)~0;
+
+// Types of items in your game are identified by a 32-bit "item definition number".
+// Valid definition numbers are between 1 and 999999999; numbers less than or equal to
+// zero are invalid, and numbers greater than or equal to one billion (1x10^9) are
+// reserved for internal Steam use.
+typedef int32 SteamItemDef_t;
+
+
+enum ESteamItemFlags
+{
+ // Item status flags - these flags are permanently attached to specific item instances
+ k_ESteamItemNoTrade = 1 << 0, // This item is account-locked and cannot be traded or given away.
+
+ // Action confirmation flags - these flags are set one time only, as part of a result set
+ k_ESteamItemRemoved = 1 << 8, // The item has been destroyed, traded away, expired, or otherwise invalidated
+ k_ESteamItemConsumed = 1 << 9, // The item quantity has been decreased by 1 via ConsumeItem API.
+
+ // All other flag bits are currently reserved for internal Steam use at this time.
+ // Do not assume anything about the state of other flags which are not defined here.
+};
+
+struct SteamItemDetails_t
+{
+ SteamItemInstanceID_t m_itemId;
+ SteamItemDef_t m_iDefinition;
+ uint16 m_unQuantity;
+ uint16 m_unFlags; // see ESteamItemFlags
+};
+
+typedef int32 SteamInventoryResult_t;
+
+static const SteamInventoryResult_t k_SteamInventoryResultInvalid = -1;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Inventory query and manipulation API
+//-----------------------------------------------------------------------------
+class ISteamInventory
+{
+public:
+
+ // INVENTORY ASYNC RESULT MANAGEMENT
+ //
+ // Asynchronous inventory queries always output a result handle which can be used with
+ // GetResultStatus, GetResultItems, etc. A SteamInventoryResultReady_t callback will
+ // be triggered when the asynchronous result becomes ready (or fails).
+ //
+
+ // Find out the status of an asynchronous inventory result handle. Possible values:
+ // k_EResultPending - still in progress
+ // k_EResultOK - done, result ready
+ // k_EResultExpired - done, result ready, maybe out of date (see DeserializeResult)
+ // k_EResultInvalidParam - ERROR: invalid API call parameters
+ // k_EResultServiceUnavailable - ERROR: service temporarily down, you may retry later
+ // k_EResultLimitExceeded - ERROR: operation would exceed per-user inventory limits
+ // k_EResultFail - ERROR: unknown / generic error
+ METHOD_DESC(Find out the status of an asynchronous inventory result handle.)
+ virtual EResult GetResultStatus( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Copies the contents of a result set into a flat array. The specific
+ // contents of the result set depend on which query which was used.
+ METHOD_DESC(Copies the contents of a result set into a flat array. The specific contents of the result set depend on which query which was used.)
+ virtual bool GetResultItems( SteamInventoryResult_t resultHandle,
+ OUT_ARRAY_COUNT( punOutItemsArraySize,Output array) SteamItemDetails_t *pOutItemsArray,
+ uint32 *punOutItemsArraySize ) = 0;
+
+ // Returns the server time at which the result was generated. Compare against
+ // the value of IClientUtils::GetServerRealTime() to determine age.
+ METHOD_DESC(Returns the server time at which the result was generated. Compare against the value of IClientUtils::GetServerRealTime() to determine age.)
+ virtual uint32 GetResultTimestamp( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Returns true if the result belongs to the target steam ID, false if the
+ // result does not. This is important when using DeserializeResult, to verify
+ // that a remote player is not pretending to have a different user's inventory.
+ METHOD_DESC(Returns true if the result belongs to the target steam ID or false if the result does not. This is important when using DeserializeResult to verify that a remote player is not pretending to have a different users inventory.)
+ virtual bool CheckResultSteamID( SteamInventoryResult_t resultHandle, CSteamID steamIDExpected ) = 0;
+
+ // Destroys a result handle and frees all associated memory.
+ METHOD_DESC(Destroys a result handle and frees all associated memory.)
+ virtual void DestroyResult( SteamInventoryResult_t resultHandle ) = 0;
+
+
+ // INVENTORY ASYNC QUERY
+ //
+
+ // Captures the entire state of the current user's Steam inventory.
+ // You must call DestroyResult on this handle when you are done with it.
+ // Returns false and sets *pResultHandle to zero if inventory is unavailable.
+ // Note: calls to this function are subject to rate limits and may return
+ // cached results if called too frequently. It is suggested that you call
+ // this function only when you are about to display the user's full inventory,
+ // or if you expect that the inventory may have changed.
+ METHOD_DESC(Captures the entire state of the current users Steam inventory.)
+ virtual bool GetAllItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+
+ // Captures the state of a subset of the current user's Steam inventory,
+ // identified by an array of item instance IDs. The results from this call
+ // can be serialized and passed to other players to "prove" that the current
+ // user owns specific items, without exposing the user's entire inventory.
+ // For example, you could call GetItemsByID with the IDs of the user's
+ // currently equipped cosmetic items and serialize this to a buffer, and
+ // then transmit this buffer to other players upon joining a game.
+ METHOD_DESC(Captures the state of a subset of the current users Steam inventory identified by an array of item instance IDs.)
+ virtual bool GetItemsByID( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT( unCountInstanceIDs ) const SteamItemInstanceID_t *pInstanceIDs, uint32 unCountInstanceIDs ) = 0;
+
+
+ // RESULT SERIALIZATION AND AUTHENTICATION
+ //
+ // Serialized result sets contain a short signature which can't be forged
+ // or replayed across different game sessions. A result set can be serialized
+ // on the local client, transmitted to other players via your game networking,
+ // and deserialized by the remote players. This is a secure way of preventing
+ // hackers from lying about posessing rare/high-value items.
+
+ // Serializes a result set with signature bytes to an output buffer. Pass
+ // NULL as an output buffer to get the required size via punOutBufferSize.
+ // The size of a serialized result depends on the number items which are being
+ // serialized. When securely transmitting items to other players, it is
+ // recommended to use "GetItemsByID" first to create a minimal result set.
+ // Results have a built-in timestamp which will be considered "expired" after
+ // an hour has elapsed. See DeserializeResult for expiration handling.
+ virtual bool SerializeResult( SteamInventoryResult_t resultHandle, OUT_BUFFER_COUNT(punOutBufferSize) void *pOutBuffer, uint32 *punOutBufferSize ) = 0;
+
+ // Deserializes a result set and verifies the signature bytes. Returns false
+ // if bRequireFullOnlineVerify is set but Steam is running in Offline mode.
+ // Otherwise returns true and then delivers error codes via GetResultStatus.
+ //
+ // The bRESERVED_MUST_BE_FALSE flag is reserved for future use and should not
+ // be set to true by your game at this time.
+ //
+ // DeserializeResult has a potential soft-failure mode where the handle status
+ // is set to k_EResultExpired. GetResultItems() still succeeds in this mode.
+ // The "expired" result could indicate that the data may be out of date - not
+ // just due to timed expiration (one hour), but also because one of the items
+ // in the result set may have been traded or consumed since the result set was
+ // generated. You could compare the timestamp from GetResultTimestamp() to
+ // ISteamUtils::GetServerRealTime() to determine how old the data is. You could
+ // simply ignore the "expired" result code and continue as normal, or you
+ // could challenge the player with expired data to send an updated result set.
+ virtual bool DeserializeResult( SteamInventoryResult_t *pOutResultHandle, BUFFER_COUNT(punOutBufferSize) const void *pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE = false ) = 0;
+
+
+ // INVENTORY ASYNC MODIFICATION
+ //
+
+ // GenerateItems() creates one or more items and then generates a SteamInventoryCallback_t
+ // notification with a matching nCallbackContext parameter. This API is insecure, and could
+ // be abused by hacked clients. This call is normally disabled unless you explicitly enable
+ // "Development mode" on the Inventory Service section of the Steamworks website.
+ // You should not enable this mode for a shipping game!
+ // Note that Steam accounts that belong to the publisher group for your game are granted
+ // an exception - as a developer, you may use this to generate and test items in your game.
+ // If punArrayQuantity is not NULL, it should be the same length as pArrayItems and should
+ // describe the quantity of each item to generate.
+ virtual bool GenerateItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, ARRAY_COUNT(unArrayLength) const uint32 *punArrayQuantity, uint32 unArrayLength ) = 0;
+
+ // GrantPromoItems() checks the list of promotional items for which the user may be eligible
+ // and grants the items (one time only). On success, the result set will include items which
+ // were granted, if any. If no items were granted because the user isn't eligible for any
+ // promotions, this is still considered a success.
+ METHOD_DESC(GrantPromoItems() checks the list of promotional items for which the user may be eligible and grants the items (one time only).)
+ virtual bool GrantPromoItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+ // AddPromoItem() / AddPromoItems() are restricted versions of GrantPromoItems(). Instead of
+ // scanning for all eligible promotional items, the check is restricted to a single item
+ // definition or set of item definitions. This can be useful if your game has custom UI for
+ // showing a specific promo item to the user.
+ virtual bool AddPromoItem( SteamInventoryResult_t *pResultHandle, SteamItemDef_t itemDef ) = 0;
+ virtual bool AddPromoItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, uint32 unArrayLength ) = 0;
+
+ // ConsumeItem() removes items from the inventory, permanently. They cannot be recovered.
+ // Not for the faint of heart - if your game implements item removal at all, a high-friction
+ // UI confirmation process is highly recommended. Similar to GenerateItems, punArrayQuantity
+ // can be NULL or else an array of the same length as pArrayItems which describe the quantity
+ // of each item to destroy.
+ METHOD_DESC(ConsumeItem() removes items from the inventory permanently.)
+ virtual bool ConsumeItem( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity ) = 0;
+
+ // ExchangeItems() is an atomic combination of item generation and consumption.
+ // It can be used to implement crafting recipes or transmutations, or items which unpack
+ // themselves into other items (e.g., a chest).
+ // ExchangeItems requires a whitelist - you must define recipes (lists of the components
+ // required for the exchange) on the target ItemDefinition. Exchanges that do not match
+ // a recipe, or do not provide the required amounts, will fail.
+ virtual bool ExchangeItems( SteamInventoryResult_t *pResultHandle,
+ ARRAY_COUNT(unArrayGenerateLength) const SteamItemDef_t *pArrayGenerate, ARRAY_COUNT(unArrayGenerateLength) const uint32 *punArrayGenerateQuantity, uint32 unArrayGenerateLength,
+ ARRAY_COUNT(unArrayDestroyLength) const SteamItemInstanceID_t *pArrayDestroy, ARRAY_COUNT(unArrayDestroyLength) const uint32 *punArrayDestroyQuantity, uint32 unArrayDestroyLength ) = 0;
+
+
+ // TransferItemQuantity() is intended for use with items which are "stackable" (can have
+ // quantity greater than one). It can be used to split a stack into two, or to transfer
+ // quantity from one stack into another stack of identical items. To split one stack into
+ // two, pass k_SteamItemInstanceIDInvalid for itemIdDest and a new item will be generated.
+ virtual bool TransferItemQuantity( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest ) = 0;
+
+
+ // TIMED DROPS AND PLAYTIME CREDIT
+ //
+
+ // Deprecated. Calling this method is not required for proper playtime accounting.
+ METHOD_DESC( Deprecated method. Playtime accounting is performed on the Steam servers. )
+ virtual void SendItemDropHeartbeat() = 0;
+
+ // Playtime credit must be consumed and turned into item drops by your game. Only item
+ // definitions which are marked as "playtime item generators" can be spawned. The call
+ // will return an empty result set if there is not enough playtime credit for a drop.
+ // Your game should call TriggerItemDrop at an appropriate time for the user to receive
+ // new items, such as between rounds or while the player is dead. Note that players who
+ // hack their clients could modify the value of "dropListDefinition", so do not use it
+ // to directly control rarity.
+ // See your Steamworks configuration to set playtime drop rates for individual itemdefs.
+ // The client library will suppress too-frequent calls to this method.
+ METHOD_DESC(Playtime credit must be consumed and turned into item drops by your game.)
+ virtual bool TriggerItemDrop( SteamInventoryResult_t *pResultHandle, SteamItemDef_t dropListDefinition ) = 0;
+
+
+ // IN-GAME TRADING
+ //
+ // TradeItems() implements limited in-game trading of items, if you prefer not to use
+ // the overlay or an in-game web browser to perform Steam Trading through the website.
+ // You should implement a UI where both players can see and agree to a trade, and then
+ // each client should call TradeItems simultaneously (+/- 5 seconds) with matching
+ // (but reversed) parameters. The result is the same as if both players performed a
+ // Steam Trading transaction through the web. Each player will get an inventory result
+ // confirming the removal or quantity changes of the items given away, and the new
+ // item instance id numbers and quantities of the received items.
+ // (Note: new item instance IDs are generated whenever an item changes ownership.)
+ virtual bool TradeItems( SteamInventoryResult_t *pResultHandle, CSteamID steamIDTradePartner,
+ ARRAY_COUNT(nArrayGiveLength) const SteamItemInstanceID_t *pArrayGive, ARRAY_COUNT(nArrayGiveLength) const uint32 *pArrayGiveQuantity, uint32 nArrayGiveLength,
+ ARRAY_COUNT(nArrayGetLength) const SteamItemInstanceID_t *pArrayGet, ARRAY_COUNT(nArrayGetLength) const uint32 *pArrayGetQuantity, uint32 nArrayGetLength ) = 0;
+
+
+ // ITEM DEFINITIONS
+ //
+ // Item definitions are a mapping of "definition IDs" (integers between 1 and 1000000)
+ // to a set of string properties. Some of these properties are required to display items
+ // on the Steam community web site. Other properties can be defined by applications.
+ // Use of these functions is optional; there is no reason to call LoadItemDefinitions
+ // if your game hardcodes the numeric definition IDs (eg, purple face mask = 20, blue
+ // weapon mod = 55) and does not allow for adding new item types without a client patch.
+ //
+
+ // LoadItemDefinitions triggers the automatic load and refresh of item definitions.
+ // Every time new item definitions are available (eg, from the dynamic addition of new
+ // item types while players are still in-game), a SteamInventoryDefinitionUpdate_t
+ // callback will be fired.
+ METHOD_DESC(LoadItemDefinitions triggers the automatic load and refresh of item definitions.)
+ virtual bool LoadItemDefinitions() = 0;
+
+ // GetItemDefinitionIDs returns the set of all defined item definition IDs (which are
+ // defined via Steamworks configuration, and not necessarily contiguous integers).
+ // If pItemDefIDs is null, the call will return true and *punItemDefIDsArraySize will
+ // contain the total size necessary for a subsequent call. Otherwise, the call will
+ // return false if and only if there is not enough space in the output array.
+ virtual bool GetItemDefinitionIDs(
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+
+ // GetItemDefinitionProperty returns a string property from a given item definition.
+ // Note that some properties (for example, "name") may be localized and will depend
+ // on the current Steam language settings (see ISteamApps::GetCurrentGameLanguage).
+ // Property names are always composed of ASCII letters, numbers, and/or underscores.
+ // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available
+ // property names. If pchValueBuffer is NULL, *punValueBufferSize will contain the
+ // suggested buffer size. Otherwise it will be the number of bytes actually copied
+ // to pchValueBuffer. If the results do not fit in the given buffer, partial
+ // results may be copied.
+ virtual bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPropertyName,
+ OUT_STRING_COUNT(punValueBufferSizeOut) char *pchValueBuffer, uint32 *punValueBufferSizeOut ) = 0;
+
+ // Request the list of "eligible" promo items that can be manually granted to the given
+ // user. These are promo items of type "manual" that won't be granted automatically.
+ // An example usage of this is an item that becomes available every week.
+ CALL_RESULT( SteamInventoryEligiblePromoItemDefIDs_t )
+ virtual SteamAPICall_t RequestEligiblePromoItemDefinitionsIDs( CSteamID steamID ) = 0;
+
+ // After handling a SteamInventoryEligiblePromoItemDefIDs_t call result, use this
+ // function to pull out the list of item definition ids that the user can be
+ // manually granted via the AddPromoItems() call.
+ virtual bool GetEligiblePromoItemDefinitionIDs(
+ CSteamID steamID,
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+};
+
+#define STEAMINVENTORY_INTERFACE_VERSION "STEAMINVENTORY_INTERFACE_V001"
+
+
+// SteamInventoryResultReady_t callbacks are fired whenever asynchronous
+// results transition from "Pending" to "OK" or an error state. There will
+// always be exactly one callback per handle.
+struct SteamInventoryResultReady_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 0 };
+ SteamInventoryResult_t m_handle;
+ EResult m_result;
+};
+
+
+// SteamInventoryFullUpdate_t callbacks are triggered when GetAllItems
+// successfully returns a result which is newer / fresher than the last
+// known result. (It will not trigger if the inventory hasn't changed,
+// or if results from two overlapping calls are reversed in flight and
+// the earlier result is already known to be stale/out-of-date.)
+// The normal ResultReady callback will still be triggered immediately
+// afterwards; this is an additional notification for your convenience.
+struct SteamInventoryFullUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 1 };
+ SteamInventoryResult_t m_handle;
+};
+
+
+// A SteamInventoryDefinitionUpdate_t callback is triggered whenever
+// item definitions have been updated, which could be in response to
+// LoadItemDefinitions() or any other async request which required
+// a definition update in order to process results from the server.
+struct SteamInventoryDefinitionUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 2 };
+};
+
+// Returned
+struct SteamInventoryEligiblePromoItemDefIDs_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 3 };
+ EResult m_result;
+ CSteamID m_steamID;
+ int m_numEligiblePromoItemDefs;
+ bool m_bCachedData; // indicates that the data was retrieved from the cache and not the server
+};
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_139/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_139/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_139/isteammatchmaking.h b/lsteamclient/steamworks_sdk_139/isteammatchmaking.h
new file mode 100644
index 00000000..5af69129
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteammatchmaking.h
@@ -0,0 +1,751 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) = 0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ CALL_RESULT( LobbyMatchList_t )
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ CALL_RESULT( LobbyCreated_t )
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ CALL_RESULT( LobbyEnter_t )
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, OUT_STRUCT() CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, OUT_STRUCT() CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+ CALL_BACK( LobbyChatUpdate_t )
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_139/isteammusic.h b/lsteamclient/steamworks_sdk_139/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_139/isteammusicremote.h b/lsteamclient/steamworks_sdk_139/isteammusicremote.h
new file mode 100644
index 00000000..5893ef4b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteammusicremote.h
@@ -0,0 +1,129 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSICREMOTE_H
+#define ISTEAMMUSICREMOTE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteammusic.h"
+
+#define k_SteamMusicNameMaxLength 255
+#define k_SteamMusicPNGMaxLength 65535
+
+
+class ISteamMusicRemote
+{
+public:
+ // Service Definition
+ virtual bool RegisterSteamMusicRemote( const char *pchName ) = 0;
+ virtual bool DeregisterSteamMusicRemote() = 0;
+ virtual bool BIsCurrentMusicRemote() = 0;
+ virtual bool BActivationSuccess( bool bValue ) = 0;
+
+ virtual bool SetDisplayName( const char *pchDisplayName ) = 0;
+ virtual bool SetPNGIcon_64x64( void *pvBuffer, uint32 cbBufferLength ) = 0;
+
+ // Abilities for the user interface
+ virtual bool EnablePlayPrevious(bool bValue) = 0;
+ virtual bool EnablePlayNext( bool bValue ) = 0;
+ virtual bool EnableShuffled( bool bValue ) = 0;
+ virtual bool EnableLooped( bool bValue ) = 0;
+ virtual bool EnableQueue( bool bValue ) = 0;
+ virtual bool EnablePlaylists( bool bValue ) = 0;
+
+ // Status
+ virtual bool UpdatePlaybackStatus( AudioPlayback_Status nStatus ) = 0;
+ virtual bool UpdateShuffled( bool bValue ) = 0;
+ virtual bool UpdateLooped( bool bValue ) = 0;
+ virtual bool UpdateVolume( float flValue ) = 0; // volume is between 0.0 and 1.0
+
+ // Current Entry
+ virtual bool CurrentEntryWillChange() = 0;
+ virtual bool CurrentEntryIsAvailable( bool bAvailable ) = 0;
+ virtual bool UpdateCurrentEntryText( const char *pchText ) = 0;
+ virtual bool UpdateCurrentEntryElapsedSeconds( int nValue ) = 0;
+ virtual bool UpdateCurrentEntryCoverArt( void *pvBuffer, uint32 cbBufferLength ) = 0;
+ virtual bool CurrentEntryDidChange() = 0;
+
+ // Queue
+ virtual bool QueueWillChange() = 0;
+ virtual bool ResetQueueEntries() = 0;
+ virtual bool SetQueueEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentQueueEntry( int nID ) = 0;
+ virtual bool QueueDidChange() = 0;
+
+ // Playlist
+ virtual bool PlaylistWillChange() = 0;
+ virtual bool ResetPlaylistEntries() = 0;
+ virtual bool SetPlaylistEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentPlaylistEntry( int nID ) = 0;
+ virtual bool PlaylistDidChange() = 0;
+};
+
+#define STEAMMUSICREMOTE_INTERFACE_VERSION "STEAMMUSICREMOTE_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillActivate_t, k_iSteamMusicRemoteCallbacks + 1)
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillDeactivate_t, k_iSteamMusicRemoteCallbacks + 2 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteToFront_t, k_iSteamMusicRemoteCallbacks + 3 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWillQuit_t, k_iSteamMusicRemoteCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlay_t, k_iSteamMusicRemoteCallbacks + 5 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPause_t, k_iSteamMusicRemoteCallbacks + 6 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayPrevious_t, k_iSteamMusicRemoteCallbacks + 7 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayNext_t, k_iSteamMusicRemoteCallbacks + 8 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsShuffled_t, k_iSteamMusicRemoteCallbacks + 9 )
+ CALLBACK_MEMBER( 0, bool, m_bShuffled )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsLooped_t, k_iSteamMusicRemoteCallbacks + 10 )
+ CALLBACK_MEMBER(0, bool, m_bLooped )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsVolume_t, k_iSteamMusicCallbacks + 11 )
+ CALLBACK_MEMBER(0, float, m_flNewVolume)
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsQueueEntry_t, k_iSteamMusicCallbacks + 12 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsPlaylistEntry_t, k_iSteamMusicCallbacks + 13 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayingRepeatStatus_t, k_iSteamMusicRemoteCallbacks + 14 )
+ CALLBACK_MEMBER(0, int, m_nPlayingRepeatStatus )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+
+#endif // #define ISTEAMMUSICREMOTE_H
diff --git a/lsteamclient/steamworks_sdk_139/isteamnetworking.h b/lsteamclient/steamworks_sdk_139/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_139/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_139/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_139/isteamremotestorage.h b/lsteamclient/steamworks_sdk_139/isteamremotestorage.h
new file mode 100644
index 00000000..7ca558e2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamremotestorage.h
@@ -0,0 +1,681 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0, // normal Workshop item that can be subscribed to
+ k_EWorkshopFileTypeMicrotransaction = 1, // Workshop item that is meant to be voted on for the purpose of selling in-game
+ k_EWorkshopFileTypeCollection = 2, // a collection of Workshop or Greenlight items
+ k_EWorkshopFileTypeArt = 3, // artwork
+ k_EWorkshopFileTypeVideo = 4, // external video
+ k_EWorkshopFileTypeScreenshot = 5, // screenshot
+ k_EWorkshopFileTypeGame = 6, // Greenlight game entry
+ k_EWorkshopFileTypeSoftware = 7, // Greenlight software entry
+ k_EWorkshopFileTypeConcept = 8, // Greenlight concept
+ k_EWorkshopFileTypeWebGuide = 9, // Steam web guide
+ k_EWorkshopFileTypeIntegratedGuide = 10, // application integrated guide
+ k_EWorkshopFileTypeMerch = 11, // Workshop merchandise meant to be voted on for the purpose of being sold
+ k_EWorkshopFileTypeControllerBinding = 12, // Steam Controller bindings
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13, // internal
+ k_EWorkshopFileTypeSteamVideo = 14, // Steam video
+ k_EWorkshopFileTypeGameManagedItem = 15, // managed completely by the game, not the user, and not shown on the web
+
+ // Update k_EWorkshopFileTypeMax if you add values.
+ k_EWorkshopFileTypeMax = 16
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+ k_EWorkshopVoteLater = 3,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+
+ CALL_RESULT( RemoteStorageFileWriteAsyncComplete_t )
+ virtual SteamAPICall_t FileWriteAsync( const char *pchFile, const void *pvData, uint32 cubData ) = 0;
+
+ CALL_RESULT( RemoteStorageFileReadAsyncComplete_t )
+ virtual SteamAPICall_t FileReadAsync( const char *pchFile, uint32 nOffset, uint32 cubToRead ) = 0;
+ virtual bool FileReadAsyncComplete( SteamAPICall_t hReadCall, void *pvBuffer, uint32 cubToRead ) = 0;
+
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ CALL_RESULT( RemoteStorageFileShareResult_t )
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( uint64 *pnTotalBytes, uint64 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ CALL_RESULT( RemoteStorageDownloadUGCResult_t )
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, OUT_STRING() char **ppchName, int32 *pnFileSizeInBytes, OUT_STRUCT() CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ CALL_RESULT( RemoteStoragePublishFileProgress_t )
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ CALL_RESULT( RemoteStorageUpdatePublishedFileResult_t )
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ CALL_RESULT( RemoteStorageGetPublishedFileDetailsResult_t )
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ CALL_RESULT( RemoteStorageDeletePublishedFileResult_t )
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ CALL_RESULT( RemoteStorageEnumerateUserPublishedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ CALL_RESULT( RemoteStorageSubscribePublishedFileResult_t )
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageEnumerateUserSubscribedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ CALL_RESULT( RemoteStorageUnsubscribePublishedFileResult_t )
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ CALL_RESULT( RemoteStorageGetPublishedItemVoteDetailsResult_t )
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageUpdateUserPublishedItemVoteResult_t )
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ CALL_RESULT( RemoteStorageGetPublishedItemVoteDetailsResult_t )
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageEnumerateUserPublishedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ CALL_RESULT( RemoteStoragePublishFileProgress_t )
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ CALL_RESULT( RemoteStorageSetUserPublishedFileActionResult_t )
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ CALL_RESULT( RemoteStorageEnumeratePublishedFilesByUserActionResult_t )
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ CALL_RESULT( RemoteStorageEnumerateWorkshopFilesResult_t )
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ CALL_RESULT( RemoteStorageDownloadUGCResult_t )
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION014"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ uint64 m_ulUnused; // not used anymore
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileWriteAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileWriteAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 31 };
+ EResult m_eResult; // result
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileReadAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileReadAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 32 };
+ SteamAPICall_t m_hFileReadAsync; // call handle of the async read which was made
+ EResult m_eResult; // result
+ uint32 m_nOffset; // offset in the file this read was at
+ uint32 m_cubRead; // amount read - will the <= the amount requested
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_139/isteamscreenshots.h b/lsteamclient/steamworks_sdk_139/isteamscreenshots.h
new file mode 100644
index 00000000..653b28a4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamscreenshots.h
@@ -0,0 +1,116 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+enum EVRScreenshotType
+{
+ k_EVRScreenshotType_None = 0,
+ k_EVRScreenshotType_Mono = 1,
+ k_EVRScreenshotType_Stereo = 2,
+ k_EVRScreenshotType_MonoCubemap = 3,
+ k_EVRScreenshotType_MonoPanorama = 4,
+ k_EVRScreenshotType_StereoPanorama = 5
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+
+ // Returns true if the app has hooked the screenshot
+ virtual bool IsScreenshotsHooked() = 0;
+
+ // Adds a VR screenshot to the user's screenshot library from disk in the supported type.
+ // pchFilename should be the normal 2D image used in the library view
+ // pchVRFilename should contain the image that matches the correct type
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddVRScreenshotToLibrary( EVRScreenshotType eType, const char *pchFilename, const char *pchVRFilename ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION003"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMSCREENSHOTS_H
+
diff --git a/lsteamclient/steamworks_sdk_139/isteamugc.h b/lsteamclient/steamworks_sdk_139/isteamugc.h
new file mode 100644
index 00000000..987a07ce
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamugc.h
@@ -0,0 +1,453 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+ k_EUGCMatchingUGCType_GameManagedItems = 12, // game managed items (not managed by users)
+ k_EUGCMatchingUGCType_All = ~0, // return everything
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+ k_EUGCQuery_RankedByTotalUniqueSubscriptions = 12,
+ k_EUGCQuery_RankedByPlaytimeTrend = 13,
+ k_EUGCQuery_RankedByTotalPlaytime = 14,
+ k_EUGCQuery_RankedByAveragePlaytimeTrend = 15,
+ k_EUGCQuery_RankedByLifetimeAveragePlaytime = 16,
+ k_EUGCQuery_RankedByPlaytimeSessionsTrend = 17,
+ k_EUGCQuery_RankedByLifetimePlaytimeSessions = 18,
+};
+
+enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0, // The item update handle was invalid, job might be finished, listen too SubmitItemUpdateResult_t
+ k_EItemUpdateStatusPreparingConfig = 1, // The item update is processing configuration data
+ k_EItemUpdateStatusPreparingContent = 2, // The item update is reading and processing content files
+ k_EItemUpdateStatusUploadingContent = 3, // The item update is uploading content changes to Steam
+ k_EItemUpdateStatusUploadingPreviewFile = 4, // The item update is uploading new preview file image
+ k_EItemUpdateStatusCommittingChanges = 5 // The item update is committing all changes
+};
+
+enum EItemState
+{
+ k_EItemStateNone = 0, // item not tracked on client
+ k_EItemStateSubscribed = 1, // current user is subscribed to this item. Not just cached.
+ k_EItemStateLegacyItem = 2, // item was created with ISteamRemoteStorage
+ k_EItemStateInstalled = 4, // item is installed and usable (but maybe out of date)
+ k_EItemStateNeedsUpdate = 8, // items needs an update. Either because it's not installed yet or creator updated content
+ k_EItemStateDownloading = 16, // item update is currently downloading
+ k_EItemStateDownloadPending = 32, // DownloadItem() was called for this item, content isn't available until DownloadItemResult_t is fired
+};
+
+enum EItemStatistic
+{
+ k_EItemStatistic_NumSubscriptions = 0,
+ k_EItemStatistic_NumFavorites = 1,
+ k_EItemStatistic_NumFollowers = 2,
+ k_EItemStatistic_NumUniqueSubscriptions = 3,
+ k_EItemStatistic_NumUniqueFavorites = 4,
+ k_EItemStatistic_NumUniqueFollowers = 5,
+ k_EItemStatistic_NumUniqueWebsiteViews = 6,
+ k_EItemStatistic_ReportScore = 7,
+ k_EItemStatistic_NumSecondsPlayed = 8,
+ k_EItemStatistic_NumPlaytimeSessions = 9,
+ k_EItemStatistic_NumComments = 10,
+};
+
+enum EItemPreviewType
+{
+ k_EItemPreviewType_Image = 0, // standard image file expected (e.g. jpg, png, gif, etc.)
+ k_EItemPreviewType_YouTubeVideo = 1, // video id is stored
+ k_EItemPreviewType_Sketchfab = 2, // model id is stored
+ k_EItemPreviewType_EnvironmentMap_HorizontalCross = 3, // standard image file expected - cube map in the layout
+ // +---+---+-------+
+ // | |Up | |
+ // +---+---+---+---+
+ // | L | F | R | B |
+ // +---+---+---+---+
+ // | |Dn | |
+ // +---+---+---+---+
+ k_EItemPreviewType_EnvironmentMap_LatLong = 4, // standard image file expected
+ k_EItemPreviewType_ReservedMax = 255, // you can specify your own types above this value
+};
+
+const uint32 kNumUGCResultsPerPage = 50;
+const uint32 k_cchDeveloperMetadataMax = 5000;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+ // collection details
+ uint32 m_unNumChildren;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for the details of the given published file ids (the RequestUGCDetails call is deprecated and replaced with this)
+ virtual UGCQueryHandle_t CreateQueryUGCDetailsRequest( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+
+ // Send the query to Steam
+ CALL_RESULT( SteamUGCQueryCompleted_t )
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+ virtual bool GetQueryUGCPreviewURL( UGCQueryHandle_t handle, uint32 index, OUT_STRING_COUNT(cchURLSize) char *pchURL, uint32 cchURLSize ) = 0;
+ virtual bool GetQueryUGCMetadata( UGCQueryHandle_t handle, uint32 index, OUT_STRING_COUNT(cchMetadatasize) char *pchMetadata, uint32 cchMetadatasize ) = 0;
+ virtual bool GetQueryUGCChildren( UGCQueryHandle_t handle, uint32 index, PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0;
+ virtual bool GetQueryUGCStatistic( UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint64 *pStatValue ) = 0;
+ virtual uint32 GetQueryUGCNumAdditionalPreviews( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCAdditionalPreview( UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, OUT_STRING_COUNT(cchURLSize) char *pchURLOrVideoID, uint32 cchURLSize, OUT_STRING_COUNT(cchURLSize) char *pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType *pPreviewType ) = 0;
+ virtual uint32 GetQueryUGCNumKeyValueTags( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCKeyValueTag( UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, OUT_STRING_COUNT(cchKeySize) char *pchKey, uint32 cchKeySize, OUT_STRING_COUNT(cchValueSize) char *pchValue, uint32 cchValueSize ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnOnlyIDs( UGCQueryHandle_t handle, bool bReturnOnlyIDs ) = 0;
+ virtual bool SetReturnKeyValueTags( UGCQueryHandle_t handle, bool bReturnKeyValueTags ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnMetadata( UGCQueryHandle_t handle, bool bReturnMetadata ) = 0;
+ virtual bool SetReturnChildren( UGCQueryHandle_t handle, bool bReturnChildren ) = 0;
+ virtual bool SetReturnAdditionalPreviews( UGCQueryHandle_t handle, bool bReturnAdditionalPreviews ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetLanguage( UGCQueryHandle_t handle, const char *pchLanguage ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+ virtual bool AddRequiredKeyValueTag( UGCQueryHandle_t handle, const char *pKey, const char *pValue ) = 0;
+
+ // DEPRECATED - Use CreateQueryUGCDetailsRequest call above instead!
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+ // Steam Workshop Creator API
+ CALL_RESULT( CreateItemResult_t )
+ virtual SteamAPICall_t CreateItem( AppId_t nConsumerAppId, EWorkshopFileType eFileType ) = 0; // create new item for this app with no content attached yet
+
+ virtual UGCUpdateHandle_t StartItemUpdate( AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID ) = 0; // start an UGC item update. Set changed properties before commiting update with CommitItemUpdate()
+
+ virtual bool SetItemTitle( UGCUpdateHandle_t handle, const char *pchTitle ) = 0; // change the title of an UGC item
+ virtual bool SetItemDescription( UGCUpdateHandle_t handle, const char *pchDescription ) = 0; // change the description of an UGC item
+ virtual bool SetItemUpdateLanguage( UGCUpdateHandle_t handle, const char *pchLanguage ) = 0; // specify the language of the title or description that will be set
+ virtual bool SetItemMetadata( UGCUpdateHandle_t handle, const char *pchMetaData ) = 0; // change the metadata of an UGC item (max = k_cchDeveloperMetadataMax)
+ virtual bool SetItemVisibility( UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item
+ virtual bool SetItemTags( UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item
+ virtual bool SetItemContent( UGCUpdateHandle_t handle, const char *pszContentFolder ) = 0; // update item content from this local folder
+ virtual bool SetItemPreview( UGCUpdateHandle_t handle, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file, which must be under 1MB in size
+ virtual bool RemoveItemKeyValueTags( UGCUpdateHandle_t handle, const char *pchKey ) = 0; // remove any existing key-value tags with the specified key
+ virtual bool AddItemKeyValueTag( UGCUpdateHandle_t handle, const char *pchKey, const char *pchValue ) = 0; // add new key-value tags for the item. Note that there can be multiple values for a tag.
+ virtual bool AddItemPreviewFile( UGCUpdateHandle_t handle, const char *pszPreviewFile, EItemPreviewType type ) = 0; // add preview file for this item. pszPreviewFile points to local file, which must be under 1MB in size
+ virtual bool AddItemPreviewVideo( UGCUpdateHandle_t handle, const char *pszVideoID ) = 0; // add preview video for this item
+ virtual bool UpdateItemPreviewFile( UGCUpdateHandle_t handle, uint32 index, const char *pszPreviewFile ) = 0; // updates an existing preview file for this item. pszPreviewFile points to local file, which must be under 1MB in size
+ virtual bool UpdateItemPreviewVideo( UGCUpdateHandle_t handle, uint32 index, const char *pszVideoID ) = 0; // updates an existing preview video for this item
+ virtual bool RemoveItemPreview( UGCUpdateHandle_t handle, uint32 index ) = 0; // remove a preview by index starting at 0 (previews are sorted)
+
+ CALL_RESULT( SubmitItemUpdateResult_t )
+ virtual SteamAPICall_t SubmitItemUpdate( UGCUpdateHandle_t handle, const char *pchChangeNote ) = 0; // commit update process started with StartItemUpdate()
+ virtual EItemUpdateStatus GetItemUpdateProgress( UGCUpdateHandle_t handle, uint64 *punBytesProcessed, uint64* punBytesTotal ) = 0;
+
+ // Steam Workshop Consumer API
+ CALL_RESULT( SetUserItemVoteResult_t )
+ virtual SteamAPICall_t SetUserItemVote( PublishedFileId_t nPublishedFileID, bool bVoteUp ) = 0;
+ CALL_RESULT( GetUserItemVoteResult_t )
+ virtual SteamAPICall_t GetUserItemVote( PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( UserFavoriteItemsListChanged_t )
+ virtual SteamAPICall_t AddItemToFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( UserFavoriteItemsListChanged_t )
+ virtual SteamAPICall_t RemoveItemFromFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( RemoteStorageSubscribePublishedFileResult_t )
+ virtual SteamAPICall_t SubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // subscribe to this item, will be installed ASAP
+ CALL_RESULT( RemoteStorageUnsubscribePublishedFileResult_t )
+ virtual SteamAPICall_t UnsubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // unsubscribe from this item, will be uninstalled after game quits
+ virtual uint32 GetNumSubscribedItems() = 0; // number of subscribed items
+ virtual uint32 GetSubscribedItems( PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; // all subscribed item PublishFileIDs
+
+ // get EItemState flags about item on this client
+ virtual uint32 GetItemState( PublishedFileId_t nPublishedFileID ) = 0;
+
+ // get info about currently installed content on disc for items that have k_EItemStateInstalled set
+ // if k_EItemStateLegacyItem is set, pchFolder contains the path to the legacy file itself (not a folder)
+ virtual bool GetItemInstallInfo( PublishedFileId_t nPublishedFileID, uint64 *punSizeOnDisk, OUT_STRING_COUNT( cchFolderSize ) char *pchFolder, uint32 cchFolderSize, uint32 *punTimeStamp ) = 0;
+
+ // get info about pending update for items that have k_EItemStateNeedsUpdate set. punBytesTotal will be valid after download started once
+ virtual bool GetItemDownloadInfo( PublishedFileId_t nPublishedFileID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // download new or update already installed item. If function returns true, wait for DownloadItemResult_t. If the item is already installed,
+ // then files on disk should not be used until callback received. If item is not subscribed to, it will be cached for some time.
+ // If bHighPriority is set, any other item download will be suspended and this item downloaded ASAP.
+ virtual bool DownloadItem( PublishedFileId_t nPublishedFileID, bool bHighPriority ) = 0;
+
+ // game servers can set a specific workshop folder before issuing any UGC commands.
+ // This is helpful if you want to support multiple game servers running out of the same install folder
+ virtual bool BInitWorkshopForGameServer( DepotId_t unWorkshopDepotID, const char *pszFolder ) = 0;
+
+ // SuspendDownloads( true ) will suspend all workshop downloads until SuspendDownloads( false ) is called or the game ends
+ virtual void SuspendDownloads( bool bSuspend ) = 0;
+
+ // usage tracking
+ CALL_RESULT( StartPlaytimeTrackingResult_t )
+ virtual SteamAPICall_t StartPlaytimeTracking( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+ CALL_RESULT( StopPlaytimeTrackingResult_t )
+ virtual SteamAPICall_t StopPlaytimeTracking( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+ CALL_RESULT( StopPlaytimeTrackingResult_t )
+ virtual SteamAPICall_t StopPlaytimeTrackingForAllItems() = 0;
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION009"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::CreateItem()
+//-----------------------------------------------------------------------------
+struct CreateItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 3 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId; // new item got this UGC PublishFileID
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::SubmitItemUpdate()
+//-----------------------------------------------------------------------------
+struct SubmitItemUpdateResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 4 };
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a Workshop item has been installed or updated
+//-----------------------------------------------------------------------------
+struct ItemInstalled_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 5 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of DownloadItem(), existing item files can be accessed again
+//-----------------------------------------------------------------------------
+struct DownloadItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 6 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: result of AddItemToFavorites() or RemoveItemFromFavorites()
+//-----------------------------------------------------------------------------
+struct UserFavoriteItemsListChanged_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 7 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bWasAddRequest;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SetUserItemVote()
+//-----------------------------------------------------------------------------
+struct SetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 8 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVoteUp;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserItemVote()
+//-----------------------------------------------------------------------------
+struct GetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 9 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVotedUp;
+ bool m_bVotedDown;
+ bool m_bVoteSkipped;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to StartPlaytimeTracking()
+//-----------------------------------------------------------------------------
+struct StartPlaytimeTrackingResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 10 };
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to StopPlaytimeTracking()
+//-----------------------------------------------------------------------------
+struct StopPlaytimeTrackingResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 11 };
+ EResult m_eResult;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_139/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_139/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_139/isteamuser.h b/lsteamclient/steamworks_sdk_139/isteamuser.h
new file mode 100644
index 00000000..151e0e18
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamuser.h
@@ -0,0 +1,355 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the amount of captured audio data that is available in bytes.
+ // This provides both the compressed and uncompressed data. Please note that the uncompressed
+ // data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected.
+ // nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case)
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to
+ // DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format.
+ // Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible
+ // levels of speech are detected, and may have passed through denoising filters, etc.
+ // This function should be called as often as possible once recording has started; once per frame at least.
+ // nBytesWritten is set to the number of bytes written to pDestBuffer.
+ // nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer.
+ // You must grab both compressed and uncompressed here at the same time, if you want both.
+ // Matching data that is not read during this call will be thrown away.
+ // GetAvailableVoice() can be used to determine how much data is actually available.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed, void *pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 *nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate ) = 0;
+
+ // Decompresses a chunk of compressed data produced by GetVoice().
+ // nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall.
+ // In that case, nBytesWritten is set to the size of the buffer required to decompress the given
+ // data. The suggested buffer size for the destination buffer is 22 kilobytes.
+ // The output format of the data is 16-bit signed at the requested samples per second.
+ // If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ CALL_RESULT( EncryptedAppTicketResponse_t )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+ // Requests a URL which authenticates an in-game browser for store check-out,
+ // and then redirects to the specified URL. As long as the in-game browser
+ // accepts and handles session cookies, Steam microtransaction checkout pages
+ // will automatically recognize the user instead of presenting a login page.
+ // The result of this API call will be a StoreAuthURLResponse_t callback.
+ // NOTE: The URL has a very short lifetime to prevent history-snooping attacks,
+ // so you should only call this API when you are about to launch the browser,
+ // or else immediately navigate to the result URL using a hidden browser window.
+ // NOTE 2: The resulting authorization cookie has an expiration time of one day,
+ // so it would be a good idea to request and visit a new auth URL every 12 hours.
+ CALL_RESULT( StoreAuthURLResponse_t )
+ virtual SteamAPICall_t RequestStoreAuthURL( const char *pchRedirectURL ) = 0;
+
+ // gets whether the users phone number is verified
+ virtual bool BIsPhoneVerified() = 0;
+
+ // gets whether the user has two factor enabled on their account
+ virtual bool BIsTwoFactorEnabled() = 0;
+
+ // gets whether the users phone number is identifying
+ virtual bool BIsPhoneIdentifying() = 0;
+
+ // gets whether the users phone number is awaiting (re)verification
+ virtual bool BIsPhoneRequiringVerification() = 0;
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser019"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+ bool m_bStillRetrying;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Signaled whenever licenses change
+//-----------------------------------------------------------------------------
+struct LicensesUpdated_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 25 };
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to ISteamUser::RequestStoreAuthURL
+//-----------------------------------------------------------------------------
+struct StoreAuthURLResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 65 };
+ char m_szURL[512];
+};
+
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_139/isteamuserstats.h b/lsteamclient/steamworks_sdk_139/isteamuserstats.h
new file mode 100644
index 00000000..8bb42697
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamuserstats.h
@@ -0,0 +1,476 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ CALL_BACK( UserStatsReceived_t )
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ CALL_RESULT( UserStatsReceived_t )
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ CALL_RESULT(LeaderboardFindResult_t)
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ CALL_RESULT( LeaderboardFindResult_t )
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ CALL_RESULT( LeaderboardScoresDownloaded_t )
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ METHOD_DESC(Downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers)
+ CALL_RESULT( LeaderboardScoresDownloaded_t )
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard,
+ ARRAY_COUNT_D(cUsers, Array of users to retrieve) CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ CALL_RESULT( LeaderboardScoreUploaded_t )
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ CALL_RESULT( LeaderboardUGCSet_t )
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ CALL_RESULT( NumberOfCurrentPlayers_t )
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ CALL_RESULT( GlobalAchievementPercentagesReady_t )
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ CALL_RESULT( GlobalStatsReceived_t )
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_139/isteamutils.h b/lsteamclient/steamworks_sdk_139/isteamutils.h
new file mode 100644
index 00000000..4c7b8ef1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamutils.h
@@ -0,0 +1,254 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time. Number of seconds since January 1, 1970, GMT (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // Deprecated. Applications should use SteamAPI_RunCallbacks() instead. Game servers do not need to call this function.
+ STEAM_PRIVATE_API( virtual void RunFrame() = 0; )
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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 an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ CALL_RESULT( CheckFileSignature_t )
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+
+ // Sets the inset of the overlay notification from the corner specified by SetOverlayNotificationPosition.
+ virtual void SetOverlayNotificationInset( int nHorizontalInset, int nVerticalInset ) = 0;
+
+ // returns true if Steam & the Steam Overlay are running in Big Picture mode
+ // Games much be launched through the Steam client to enable the Big Picture overlay. During development,
+ // a game can be added as a non-steam game to the developers library to test this feature
+ virtual bool IsSteamInBigPictureMode() = 0;
+
+ // ask SteamUI to create and render its OpenVR dashboard
+ virtual void StartVRDashboard() = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils008"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+ int m_iCallback;
+ uint32 m_cubParam;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_139/isteamvideo.h b/lsteamclient/steamworks_sdk_139/isteamvideo.h
new file mode 100644
index 00000000..4431b4a1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/isteamvideo.h
@@ -0,0 +1,60 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Video
+//
+//=============================================================================
+
+#ifndef ISTEAMVIDEO_H
+#define ISTEAMVIDEO_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Video API
+//-----------------------------------------------------------------------------
+class ISteamVideo
+{
+public:
+
+ // Get a URL suitable for streaming the given Video app ID's video
+ virtual void GetVideoURL( AppId_t unVideoAppID ) = 0;
+
+ // returns true if user is uploading a live broadcast
+ virtual bool IsBroadcasting( int *pnNumViewers ) = 0;
+};
+
+#define STEAMVIDEO_INTERFACE_VERSION "STEAMVIDEO_INTERFACE_V001"
+
+DEFINE_CALLBACK( BroadcastUploadStart_t, k_iClientVideoCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( BroadcastUploadStop_t, k_iClientVideoCallbacks + 5 )
+ CALLBACK_MEMBER( 0, EBroadcastUploadResult, m_eResult )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( GetVideoURLResult_t, k_iClientVideoCallbacks + 11 )
+ CALLBACK_MEMBER( 0, EResult, m_eResult )
+ CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID )
+ CALLBACK_MEMBER( 2, char, m_rgchURL[256] )
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMVIDEO_H
diff --git a/lsteamclient/steamworks_sdk_139/matchmakingtypes.h b/lsteamclient/steamworks_sdk_139/matchmakingtypes.h
new file mode 100644
index 00000000..fcb61664
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/matchmakingtypes.h
@@ -0,0 +1,251 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ servernetadr_t() : m_usConnectionPort( 0 ), m_usQueryPort( 0 ), m_unIP( 0 ) {}
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_139/steam_api.h b/lsteamclient/steamworks_sdk_139/steam_api.h
new file mode 100644
index 00000000..788db9b8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/steam_api.h
@@ -0,0 +1,394 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteammusicremote.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+#include "isteamhtmlsurface.h"
+#include "isteaminventory.h"
+#include "isteamvideo.h"
+
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+
+// SteamAPI_Init must be called before using any other API functions. If it fails, an
+// error message will be output to the debugger (or stderr) with further information.
+S_API bool S_CALLTYPE SteamAPI_Init();
+
+// SteamAPI_Shutdown should be called during process shutdown if possible.
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// SteamAPI_RestartAppIfNecessary ensures that your executable was launched through Steam.
+//
+// Returns true if the current process should terminate. Steam is now re-launching your application.
+//
+// Returns false if no action needs to be taken. This means that your executable was started through
+// the Steam client, or a steam_appid.txt file is present in your game's directory (for development).
+// Your current process should continue if false is returned.
+//
+// NOTE: If you use the Steam DRM wrapper on your primary executable file, this check is unnecessary
+// since the DRM wrapper will ensure that your application was launched properly through Steam.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// Many Steam API functions allocate a small amount of thread-local memory for parameter storage.
+// SteamAPI_ReleaseCurrentThreadMemory() will free API memory associated with the calling thread.
+// This function is also called automatically by SteamAPI_RunCallbacks(), so a single-threaded
+// program never needs to explicitly call this function.
+S_API void S_CALLTYPE SteamAPI_ReleaseCurrentThreadMemory();
+
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Global accessors for Steamworks C++ APIs. See individual isteam*.h files for details.
+// You should not cache the results of these accessors or pass the result pointers across
+// modules! Different modules may be compiled against different SDK header versions, and
+// the interface pointers could therefore be different across modules. Every line of code
+// which calls into a Steamworks API should retrieve the interface from a global accessor.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#if !defined( STEAM_API_EXPORTS )
+inline ISteamClient *SteamClient();
+inline ISteamUser *SteamUser();
+inline ISteamFriends *SteamFriends();
+inline ISteamUtils *SteamUtils();
+inline ISteamMatchmaking *SteamMatchmaking();
+inline ISteamUserStats *SteamUserStats();
+inline ISteamApps *SteamApps();
+inline ISteamNetworking *SteamNetworking();
+inline ISteamMatchmakingServers *SteamMatchmakingServers();
+inline ISteamRemoteStorage *SteamRemoteStorage();
+inline ISteamScreenshots *SteamScreenshots();
+inline ISteamHTTP *SteamHTTP();
+inline ISteamUnifiedMessages *SteamUnifiedMessages();
+inline ISteamController *SteamController();
+inline ISteamUGC *SteamUGC();
+inline ISteamAppList *SteamAppList();
+inline ISteamMusic *SteamMusic();
+inline ISteamMusicRemote *SteamMusicRemote();
+inline ISteamHTMLSurface *SteamHTMLSurface();
+inline ISteamInventory *SteamInventory();
+inline ISteamVideo *SteamVideo();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+// CSteamAPIContext encapsulates the Steamworks API global accessors into
+// a single object. This is DEPRECATED and only remains for compatibility.
+class CSteamAPIContext
+{
+public:
+ // DEPRECATED - there is no benefit to using this over the global accessors
+ CSteamAPIContext() { Clear(); }
+ void Clear();
+ bool Init();
+ ISteamClient* SteamClient() const { return m_pSteamClient; }
+ ISteamUser* SteamUser() const { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() const { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() const { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() const { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() const { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() const { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() const { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() const { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() const { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() const { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() const { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() const { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() const { return m_pController; }
+ ISteamUGC* SteamUGC() const { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() const { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() const { return m_pSteamMusic; }
+ ISteamMusicRemote* SteamMusicRemote() const { return m_pSteamMusicRemote; }
+ ISteamHTMLSurface* SteamHTMLSurface() const { return m_pSteamHTMLSurface; }
+ ISteamInventory* SteamInventory() const { return m_pSteamInventory; }
+ ISteamVideo* SteamVideo() const { return m_pSteamVideo; }
+ // DEPRECATED - there is no benefit to using this over the global accessors
+private:
+ ISteamClient *m_pSteamClient;
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages *m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+ ISteamMusicRemote *m_pSteamMusicRemote;
+ ISteamHTMLSurface *m_pSteamHTMLSurface;
+ ISteamInventory *m_pSteamInventory;
+ ISteamVideo *m_pSteamVideo;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback and call-result helpers
+//
+// The following macros and classes are used to register your application for
+// callbacks and call-results, which are delivered in a predictable manner.
+//
+// STEAM_CALLBACK macros are meant for use inside of a C++ class definition.
+// They map a Steam notification callback directly to a class member function
+// which is automatically prototyped as "void func( callback_type *pParam )".
+//
+// CCallResult is used with specific Steam APIs that return "result handles".
+// The handle can be passed to a CCallResult object's Set function, along with
+// an object pointer and member-function pointer. The member function will
+// be executed once the results of the Steam API call are available.
+//
+// CCallback and CCallbackManual classes can be used instead of STEAM_CALLBACK
+// macros if you require finer control over registration and unregistration.
+//
+// Callbacks and call-results are queued automatically and are only
+// delivered/executed when your application calls SteamAPI_RunCallbacks().
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// SteamAPI_RunCallbacks is safe to call from multiple threads simultaneously,
+// but if you choose to do this, callback code could be executed on any thread.
+// One alternative is to call SteamAPI_RunCallbacks from the main thread only,
+// and call SteamAPI_ReleaseCurrentThreadMemory regularly on other threads.
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+// Declares a callback member function plus a helper member variable which
+// registers the callback on object creation and unregisters on destruction.
+// The optional fourth 'var' param exists only for backwards-compatibility
+// and can be ignored.
+#define STEAM_CALLBACK( thisclass, func, .../*callback_type, [deprecated] var*/ ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, 4, 3 ), ( /**/, thisclass, func, __VA_ARGS__ ) )
+
+// Declares a callback function and a named CCallbackManual variable which
+// has Register and Unregister functions instead of automatic registration.
+#define STEAM_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type > var; void func( callback_type *pParam )
+
+
+// Internal functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// Internal functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks and call results - internal implementation detail
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+
+private:
+ CCallbackBase( const CCallbackBase& );
+ CCallbackBase& operator=( const CCallbackBase& );
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: templated base for callbacks - internal implementation detail
+//-----------------------------------------------------------------------------
+template< int sizeof_P >
+class CCallbackImpl : protected CCallbackBase
+{
+public:
+ ~CCallbackImpl() { if ( m_nCallbackFlags & k_ECallbackFlagsRegistered ) SteamAPI_UnregisterCallback( this ); }
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+
+protected:
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool /*bIOFailure*/, SteamAPICall_t /*hSteamAPICall*/ ) { Run( pvParam ); }
+ virtual int GetCallbackSizeBytes() { return sizeof_P; }
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult();
+ ~CCallResult();
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func );
+ bool IsActive() const;
+ void Cancel();
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam );
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall );
+ virtual int GetCallbackSizeBytes() { return sizeof( P ); }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct,
+// bGameserver = listen for gameserver callbacks instead of client callbacks
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameserver = false >
+class CCallback : public CCallbackImpl< sizeof( P ) >
+{
+public:
+ typedef void (T::*func_t)(P*);
+
+ // NOTE: If you can't provide the correct parameters at construction time, you should
+ // use the CCallbackManual callback object (STEAM_CALLBACK_MANUAL macro) instead.
+ CCallback( T *pObj, func_t func );
+
+ void Register( T *pObj, func_t func );
+ void Unregister();
+
+protected:
+ virtual void Run( void *pvParam );
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: subclass of CCallback which allows default-construction in
+// an unregistered state; you must call Register manually
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer = false >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+
+ // Inherits public Register and Unregister functions from base class
+};
+
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// SteamAPI_IsSteamRunning() returns true if Steam is currently running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Pumps out all the steam messages, calling registered callbacks.
+// NOT THREADSAFE - do not call from multiple threads simultaneously.
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name.
+// DEPRECATED - implementation is Windows only, and the path returned is a UTF-8 string which must be converted to UTF-16 for use with Win32 APIs
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+
+#if defined( VERSION_SAFE_STEAM_API_INTERFACES )
+// exists only for backwards compat with code written against older SDKs
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#endif
+
+#include "steam_api_internal.h"
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_139/steam_api.json b/lsteamclient/steamworks_sdk_139/steam_api.json
new file mode 100644
index 00000000..948a6362
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/steam_api.json
@@ -0,0 +1,7728 @@
+{"typedefs":[{"typedef": "uint8","type": "unsigned char"}
+,{"typedef": "uint8","type": "unsigned char"}
+,{"typedef": "int8","type": "signed char"}
+,{"typedef": "int16","type": "short"}
+,{"typedef": "uint16","type": "unsigned short"}
+,{"typedef": "int32","type": "int"}
+,{"typedef": "uint32","type": "unsigned int"}
+,{"typedef": "int64","type": "long long"}
+,{"typedef": "uint64","type": "unsigned long long"}
+,{"typedef": "lint64","type": "int64"}
+,{"typedef": "ulint64","type": "uint64"}
+,{"typedef": "intp","type": "long long"}
+,{"typedef": "uintp","type": "unsigned long long"}
+,{"typedef": "Salt_t","type": "uint8 [8]"}
+,{"typedef": "GID_t","type": "uint64"}
+,{"typedef": "JobID_t","type": "uint64"}
+,{"typedef": "TxnID_t","type": "GID_t"}
+,{"typedef": "PackageId_t","type": "uint32"}
+,{"typedef": "BundleId_t","type": "uint32"}
+,{"typedef": "AppId_t","type": "uint32"}
+,{"typedef": "AssetClassId_t","type": "uint64"}
+,{"typedef": "PhysicalItemId_t","type": "uint32"}
+,{"typedef": "DepotId_t","type": "uint32"}
+,{"typedef": "RTime32","type": "uint32"}
+,{"typedef": "CellID_t","type": "uint32"}
+,{"typedef": "SteamAPICall_t","type": "uint64"}
+,{"typedef": "AccountID_t","type": "uint32"}
+,{"typedef": "PartnerId_t","type": "uint32"}
+,{"typedef": "ManifestId_t","type": "uint64"}
+,{"typedef": "HAuthTicket","type": "uint32"}
+,{"typedef": "PFNLegacyKeyRegistration","type": "void (*)(const char *, const char *)"}
+,{"typedef": "PFNLegacyKeyInstalled","type": "_Bool (*)(void)"}
+,{"typedef": "PFNPreMinidumpCallback","type": "void (*)(void *)"}
+,{"typedef": "BREAKPAD_HANDLE","type": "void *"}
+,{"typedef": "ValvePackingSentinel_t","type": "struct ValvePackingSentinel_t"}
+,{"typedef": "compile_time_assert_type","type": "char [1]"}
+,{"typedef": "HSteamPipe","type": "int32"}
+,{"typedef": "HSteamUser","type": "int32"}
+,{"typedef": "SteamAPIWarningMessageHook_t","type": "void (*)(int, const char *) __attribute__((cdecl))"}
+,{"typedef": "SteamAPI_CheckCallbackRegistered_t","type": "uint32 (*)(int)"}
+,{"typedef": "FriendsGroupID_t","type": "int16"}
+,{"typedef": "SteamAPIWarningMessageHook_t","type": "void (*)(int, const char *) __attribute__((cdecl))"}
+,{"typedef": "HServerListRequest","type": "void *"}
+,{"typedef": "HServerQuery","type": "int"}
+,{"typedef": "UGCHandle_t","type": "uint64"}
+,{"typedef": "PublishedFileUpdateHandle_t","type": "uint64"}
+,{"typedef": "PublishedFileId_t","type": "uint64"}
+,{"typedef": "UGCFileWriteStreamHandle_t","type": "uint64"}
+,{"typedef": "compile_time_assert_type","type": "char [1]"}
+,{"typedef": "SteamLeaderboard_t","type": "uint64"}
+,{"typedef": "SteamLeaderboardEntries_t","type": "uint64"}
+,{"typedef": "SNetSocket_t","type": "uint32"}
+,{"typedef": "SNetListenSocket_t","type": "uint32"}
+,{"typedef": "ScreenshotHandle","type": "uint32"}
+,{"typedef": "PlaybackStatusHasChanged_t::SteamCallback_t","type": "struct PlaybackStatusHasChanged_t"}
+,{"typedef": "VolumeHasChanged_t::SteamCallback_t","type": "struct VolumeHasChanged_t"}
+,{"typedef": "MusicPlayerRemoteWillActivate_t::SteamCallback_t","type": "struct MusicPlayerRemoteWillActivate_t"}
+,{"typedef": "MusicPlayerRemoteWillDeactivate_t::SteamCallback_t","type": "struct MusicPlayerRemoteWillDeactivate_t"}
+,{"typedef": "MusicPlayerRemoteToFront_t::SteamCallback_t","type": "struct MusicPlayerRemoteToFront_t"}
+,{"typedef": "MusicPlayerWillQuit_t::SteamCallback_t","type": "struct MusicPlayerWillQuit_t"}
+,{"typedef": "MusicPlayerWantsPlay_t::SteamCallback_t","type": "struct MusicPlayerWantsPlay_t"}
+,{"typedef": "MusicPlayerWantsPause_t::SteamCallback_t","type": "struct MusicPlayerWantsPause_t"}
+,{"typedef": "MusicPlayerWantsPlayPrevious_t::SteamCallback_t","type": "struct MusicPlayerWantsPlayPrevious_t"}
+,{"typedef": "MusicPlayerWantsPlayNext_t::SteamCallback_t","type": "struct MusicPlayerWantsPlayNext_t"}
+,{"typedef": "MusicPlayerWantsShuffled_t::SteamCallback_t","type": "struct MusicPlayerWantsShuffled_t"}
+,{"typedef": "MusicPlayerWantsLooped_t::SteamCallback_t","type": "struct MusicPlayerWantsLooped_t"}
+,{"typedef": "MusicPlayerWantsVolume_t::SteamCallback_t","type": "struct MusicPlayerWantsVolume_t"}
+,{"typedef": "MusicPlayerSelectsQueueEntry_t::SteamCallback_t","type": "struct MusicPlayerSelectsQueueEntry_t"}
+,{"typedef": "MusicPlayerSelectsPlaylistEntry_t::SteamCallback_t","type": "struct MusicPlayerSelectsPlaylistEntry_t"}
+,{"typedef": "MusicPlayerWantsPlayingRepeatStatus_t::SteamCallback_t","type": "struct MusicPlayerWantsPlayingRepeatStatus_t"}
+,{"typedef": "HTTPRequestHandle","type": "uint32"}
+,{"typedef": "HTTPCookieContainerHandle","type": "uint32"}
+,{"typedef": "ClientUnifiedMessageHandle","type": "uint64"}
+,{"typedef": "ControllerHandle_t","type": "uint64"}
+,{"typedef": "ControllerActionSetHandle_t","type": "uint64"}
+,{"typedef": "ControllerDigitalActionHandle_t","type": "uint64"}
+,{"typedef": "ControllerAnalogActionHandle_t","type": "uint64"}
+,{"typedef": "UGCQueryHandle_t","type": "uint64"}
+,{"typedef": "UGCUpdateHandle_t","type": "uint64"}
+,{"typedef": "SteamAppInstalled_t::SteamCallback_t","type": "struct SteamAppInstalled_t"}
+,{"typedef": "SteamAppUninstalled_t::SteamCallback_t","type": "struct SteamAppUninstalled_t"}
+,{"typedef": "HHTMLBrowser","type": "uint32"}
+,{"typedef": "HTML_BrowserReady_t::SteamCallback_t","type": "struct HTML_BrowserReady_t"}
+,{"typedef": "HTML_NeedsPaint_t::SteamCallback_t","type": "struct HTML_NeedsPaint_t"}
+,{"typedef": "HTML_StartRequest_t::SteamCallback_t","type": "struct HTML_StartRequest_t"}
+,{"typedef": "HTML_CloseBrowser_t::SteamCallback_t","type": "struct HTML_CloseBrowser_t"}
+,{"typedef": "HTML_URLChanged_t::SteamCallback_t","type": "struct HTML_URLChanged_t"}
+,{"typedef": "HTML_FinishedRequest_t::SteamCallback_t","type": "struct HTML_FinishedRequest_t"}
+,{"typedef": "HTML_OpenLinkInNewTab_t::SteamCallback_t","type": "struct HTML_OpenLinkInNewTab_t"}
+,{"typedef": "HTML_ChangedTitle_t::SteamCallback_t","type": "struct HTML_ChangedTitle_t"}
+,{"typedef": "HTML_SearchResults_t::SteamCallback_t","type": "struct HTML_SearchResults_t"}
+,{"typedef": "HTML_CanGoBackAndForward_t::SteamCallback_t","type": "struct HTML_CanGoBackAndForward_t"}
+,{"typedef": "HTML_HorizontalScroll_t::SteamCallback_t","type": "struct HTML_HorizontalScroll_t"}
+,{"typedef": "HTML_VerticalScroll_t::SteamCallback_t","type": "struct HTML_VerticalScroll_t"}
+,{"typedef": "HTML_LinkAtPosition_t::SteamCallback_t","type": "struct HTML_LinkAtPosition_t"}
+,{"typedef": "HTML_JSAlert_t::SteamCallback_t","type": "struct HTML_JSAlert_t"}
+,{"typedef": "HTML_JSConfirm_t::SteamCallback_t","type": "struct HTML_JSConfirm_t"}
+,{"typedef": "HTML_FileOpenDialog_t::SteamCallback_t","type": "struct HTML_FileOpenDialog_t"}
+,{"typedef": "HTML_NewWindow_t::SteamCallback_t","type": "struct HTML_NewWindow_t"}
+,{"typedef": "HTML_SetCursor_t::SteamCallback_t","type": "struct HTML_SetCursor_t"}
+,{"typedef": "HTML_StatusText_t::SteamCallback_t","type": "struct HTML_StatusText_t"}
+,{"typedef": "HTML_ShowToolTip_t::SteamCallback_t","type": "struct HTML_ShowToolTip_t"}
+,{"typedef": "HTML_UpdateToolTip_t::SteamCallback_t","type": "struct HTML_UpdateToolTip_t"}
+,{"typedef": "HTML_HideToolTip_t::SteamCallback_t","type": "struct HTML_HideToolTip_t"}
+,{"typedef": "SteamItemInstanceID_t","type": "uint64"}
+,{"typedef": "SteamItemDef_t","type": "int32"}
+,{"typedef": "SteamInventoryResult_t","type": "int32"}
+,{"typedef": "BroadcastUploadStart_t::SteamCallback_t","type": "struct BroadcastUploadStart_t"}
+,{"typedef": "BroadcastUploadStop_t::SteamCallback_t","type": "struct BroadcastUploadStop_t"}
+,{"typedef": "GetVideoURLResult_t::SteamCallback_t","type": "struct GetVideoURLResult_t"}
+,{"typedef": "CCallResult::func_t","type": "void (T::*)(P *, _Bool)"}
+,{"typedef": "CCallback::func_t","type": "void (T::*)(P *)"}
+],
+"enums":[
+ {"enumname": "EUniverse","values": [
+ {"name": "k_EUniverseInvalid","value": "0"}
+ ,{"name": "k_EUniversePublic","value": "1"}
+ ,{"name": "k_EUniverseBeta","value": "2"}
+ ,{"name": "k_EUniverseInternal","value": "3"}
+ ,{"name": "k_EUniverseDev","value": "4"}
+ ,{"name": "k_EUniverseMax","value": "5"}
+]}
+, {"enumname": "EResult","values": [
+ {"name": "k_EResultOK","value": "1"}
+ ,{"name": "k_EResultFail","value": "2"}
+ ,{"name": "k_EResultNoConnection","value": "3"}
+ ,{"name": "k_EResultInvalidPassword","value": "5"}
+ ,{"name": "k_EResultLoggedInElsewhere","value": "6"}
+ ,{"name": "k_EResultInvalidProtocolVer","value": "7"}
+ ,{"name": "k_EResultInvalidParam","value": "8"}
+ ,{"name": "k_EResultFileNotFound","value": "9"}
+ ,{"name": "k_EResultBusy","value": "10"}
+ ,{"name": "k_EResultInvalidState","value": "11"}
+ ,{"name": "k_EResultInvalidName","value": "12"}
+ ,{"name": "k_EResultInvalidEmail","value": "13"}
+ ,{"name": "k_EResultDuplicateName","value": "14"}
+ ,{"name": "k_EResultAccessDenied","value": "15"}
+ ,{"name": "k_EResultTimeout","value": "16"}
+ ,{"name": "k_EResultBanned","value": "17"}
+ ,{"name": "k_EResultAccountNotFound","value": "18"}
+ ,{"name": "k_EResultInvalidSteamID","value": "19"}
+ ,{"name": "k_EResultServiceUnavailable","value": "20"}
+ ,{"name": "k_EResultNotLoggedOn","value": "21"}
+ ,{"name": "k_EResultPending","value": "22"}
+ ,{"name": "k_EResultEncryptionFailure","value": "23"}
+ ,{"name": "k_EResultInsufficientPrivilege","value": "24"}
+ ,{"name": "k_EResultLimitExceeded","value": "25"}
+ ,{"name": "k_EResultRevoked","value": "26"}
+ ,{"name": "k_EResultExpired","value": "27"}
+ ,{"name": "k_EResultAlreadyRedeemed","value": "28"}
+ ,{"name": "k_EResultDuplicateRequest","value": "29"}
+ ,{"name": "k_EResultAlreadyOwned","value": "30"}
+ ,{"name": "k_EResultIPNotFound","value": "31"}
+ ,{"name": "k_EResultPersistFailed","value": "32"}
+ ,{"name": "k_EResultLockingFailed","value": "33"}
+ ,{"name": "k_EResultLogonSessionReplaced","value": "34"}
+ ,{"name": "k_EResultConnectFailed","value": "35"}
+ ,{"name": "k_EResultHandshakeFailed","value": "36"}
+ ,{"name": "k_EResultIOFailure","value": "37"}
+ ,{"name": "k_EResultRemoteDisconnect","value": "38"}
+ ,{"name": "k_EResultShoppingCartNotFound","value": "39"}
+ ,{"name": "k_EResultBlocked","value": "40"}
+ ,{"name": "k_EResultIgnored","value": "41"}
+ ,{"name": "k_EResultNoMatch","value": "42"}
+ ,{"name": "k_EResultAccountDisabled","value": "43"}
+ ,{"name": "k_EResultServiceReadOnly","value": "44"}
+ ,{"name": "k_EResultAccountNotFeatured","value": "45"}
+ ,{"name": "k_EResultAdministratorOK","value": "46"}
+ ,{"name": "k_EResultContentVersion","value": "47"}
+ ,{"name": "k_EResultTryAnotherCM","value": "48"}
+ ,{"name": "k_EResultPasswordRequiredToKickSession","value": "49"}
+ ,{"name": "k_EResultAlreadyLoggedInElsewhere","value": "50"}
+ ,{"name": "k_EResultSuspended","value": "51"}
+ ,{"name": "k_EResultCancelled","value": "52"}
+ ,{"name": "k_EResultDataCorruption","value": "53"}
+ ,{"name": "k_EResultDiskFull","value": "54"}
+ ,{"name": "k_EResultRemoteCallFailed","value": "55"}
+ ,{"name": "k_EResultPasswordUnset","value": "56"}
+ ,{"name": "k_EResultExternalAccountUnlinked","value": "57"}
+ ,{"name": "k_EResultPSNTicketInvalid","value": "58"}
+ ,{"name": "k_EResultExternalAccountAlreadyLinked","value": "59"}
+ ,{"name": "k_EResultRemoteFileConflict","value": "60"}
+ ,{"name": "k_EResultIllegalPassword","value": "61"}
+ ,{"name": "k_EResultSameAsPreviousValue","value": "62"}
+ ,{"name": "k_EResultAccountLogonDenied","value": "63"}
+ ,{"name": "k_EResultCannotUseOldPassword","value": "64"}
+ ,{"name": "k_EResultInvalidLoginAuthCode","value": "65"}
+ ,{"name": "k_EResultAccountLogonDeniedNoMail","value": "66"}
+ ,{"name": "k_EResultHardwareNotCapableOfIPT","value": "67"}
+ ,{"name": "k_EResultIPTInitError","value": "68"}
+ ,{"name": "k_EResultParentalControlRestricted","value": "69"}
+ ,{"name": "k_EResultFacebookQueryError","value": "70"}
+ ,{"name": "k_EResultExpiredLoginAuthCode","value": "71"}
+ ,{"name": "k_EResultIPLoginRestrictionFailed","value": "72"}
+ ,{"name": "k_EResultAccountLockedDown","value": "73"}
+ ,{"name": "k_EResultAccountLogonDeniedVerifiedEmailRequired","value": "74"}
+ ,{"name": "k_EResultNoMatchingURL","value": "75"}
+ ,{"name": "k_EResultBadResponse","value": "76"}
+ ,{"name": "k_EResultRequirePasswordReEntry","value": "77"}
+ ,{"name": "k_EResultValueOutOfRange","value": "78"}
+ ,{"name": "k_EResultUnexpectedError","value": "79"}
+ ,{"name": "k_EResultDisabled","value": "80"}
+ ,{"name": "k_EResultInvalidCEGSubmission","value": "81"}
+ ,{"name": "k_EResultRestrictedDevice","value": "82"}
+ ,{"name": "k_EResultRegionLocked","value": "83"}
+ ,{"name": "k_EResultRateLimitExceeded","value": "84"}
+ ,{"name": "k_EResultAccountLoginDeniedNeedTwoFactor","value": "85"}
+ ,{"name": "k_EResultItemDeleted","value": "86"}
+ ,{"name": "k_EResultAccountLoginDeniedThrottle","value": "87"}
+ ,{"name": "k_EResultTwoFactorCodeMismatch","value": "88"}
+ ,{"name": "k_EResultTwoFactorActivationCodeMismatch","value": "89"}
+ ,{"name": "k_EResultAccountAssociatedToMultiplePartners","value": "90"}
+ ,{"name": "k_EResultNotModified","value": "91"}
+ ,{"name": "k_EResultNoMobileDevice","value": "92"}
+ ,{"name": "k_EResultTimeNotSynced","value": "93"}
+ ,{"name": "k_EResultSmsCodeFailed","value": "94"}
+ ,{"name": "k_EResultAccountLimitExceeded","value": "95"}
+ ,{"name": "k_EResultAccountActivityLimitExceeded","value": "96"}
+ ,{"name": "k_EResultPhoneActivityLimitExceeded","value": "97"}
+ ,{"name": "k_EResultRefundToWallet","value": "98"}
+ ,{"name": "k_EResultEmailSendFailure","value": "99"}
+ ,{"name": "k_EResultNotSettled","value": "100"}
+ ,{"name": "k_EResultNeedCaptcha","value": "101"}
+ ,{"name": "k_EResultGSLTDenied","value": "102"}
+ ,{"name": "k_EResultGSOwnerDenied","value": "103"}
+ ,{"name": "k_EResultInvalidItemType","value": "104"}
+ ,{"name": "k_EResultIPBanned","value": "105"}
+ ,{"name": "k_EResultGSLTExpired","value": "106"}
+]}
+, {"enumname": "EVoiceResult","values": [
+ {"name": "k_EVoiceResultOK","value": "0"}
+ ,{"name": "k_EVoiceResultNotInitialized","value": "1"}
+ ,{"name": "k_EVoiceResultNotRecording","value": "2"}
+ ,{"name": "k_EVoiceResultNoData","value": "3"}
+ ,{"name": "k_EVoiceResultBufferTooSmall","value": "4"}
+ ,{"name": "k_EVoiceResultDataCorrupted","value": "5"}
+ ,{"name": "k_EVoiceResultRestricted","value": "6"}
+ ,{"name": "k_EVoiceResultUnsupportedCodec","value": "7"}
+ ,{"name": "k_EVoiceResultReceiverOutOfDate","value": "8"}
+ ,{"name": "k_EVoiceResultReceiverDidNotAnswer","value": "9"}
+]}
+, {"enumname": "EDenyReason","values": [
+ {"name": "k_EDenyInvalid","value": "0"}
+ ,{"name": "k_EDenyInvalidVersion","value": "1"}
+ ,{"name": "k_EDenyGeneric","value": "2"}
+ ,{"name": "k_EDenyNotLoggedOn","value": "3"}
+ ,{"name": "k_EDenyNoLicense","value": "4"}
+ ,{"name": "k_EDenyCheater","value": "5"}
+ ,{"name": "k_EDenyLoggedInElseWhere","value": "6"}
+ ,{"name": "k_EDenyUnknownText","value": "7"}
+ ,{"name": "k_EDenyIncompatibleAnticheat","value": "8"}
+ ,{"name": "k_EDenyMemoryCorruption","value": "9"}
+ ,{"name": "k_EDenyIncompatibleSoftware","value": "10"}
+ ,{"name": "k_EDenySteamConnectionLost","value": "11"}
+ ,{"name": "k_EDenySteamConnectionError","value": "12"}
+ ,{"name": "k_EDenySteamResponseTimedOut","value": "13"}
+ ,{"name": "k_EDenySteamValidationStalled","value": "14"}
+ ,{"name": "k_EDenySteamOwnerLeftGuestUser","value": "15"}
+]}
+, {"enumname": "EBeginAuthSessionResult","values": [
+ {"name": "k_EBeginAuthSessionResultOK","value": "0"}
+ ,{"name": "k_EBeginAuthSessionResultInvalidTicket","value": "1"}
+ ,{"name": "k_EBeginAuthSessionResultDuplicateRequest","value": "2"}
+ ,{"name": "k_EBeginAuthSessionResultInvalidVersion","value": "3"}
+ ,{"name": "k_EBeginAuthSessionResultGameMismatch","value": "4"}
+ ,{"name": "k_EBeginAuthSessionResultExpiredTicket","value": "5"}
+]}
+, {"enumname": "EAuthSessionResponse","values": [
+ {"name": "k_EAuthSessionResponseOK","value": "0"}
+ ,{"name": "k_EAuthSessionResponseUserNotConnectedToSteam","value": "1"}
+ ,{"name": "k_EAuthSessionResponseNoLicenseOrExpired","value": "2"}
+ ,{"name": "k_EAuthSessionResponseVACBanned","value": "3"}
+ ,{"name": "k_EAuthSessionResponseLoggedInElseWhere","value": "4"}
+ ,{"name": "k_EAuthSessionResponseVACCheckTimedOut","value": "5"}
+ ,{"name": "k_EAuthSessionResponseAuthTicketCanceled","value": "6"}
+ ,{"name": "k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed","value": "7"}
+ ,{"name": "k_EAuthSessionResponseAuthTicketInvalid","value": "8"}
+ ,{"name": "k_EAuthSessionResponsePublisherIssuedBan","value": "9"}
+]}
+, {"enumname": "EUserHasLicenseForAppResult","values": [
+ {"name": "k_EUserHasLicenseResultHasLicense","value": "0"}
+ ,{"name": "k_EUserHasLicenseResultDoesNotHaveLicense","value": "1"}
+ ,{"name": "k_EUserHasLicenseResultNoAuth","value": "2"}
+]}
+, {"enumname": "EAccountType","values": [
+ {"name": "k_EAccountTypeInvalid","value": "0"}
+ ,{"name": "k_EAccountTypeIndividual","value": "1"}
+ ,{"name": "k_EAccountTypeMultiseat","value": "2"}
+ ,{"name": "k_EAccountTypeGameServer","value": "3"}
+ ,{"name": "k_EAccountTypeAnonGameServer","value": "4"}
+ ,{"name": "k_EAccountTypePending","value": "5"}
+ ,{"name": "k_EAccountTypeContentServer","value": "6"}
+ ,{"name": "k_EAccountTypeClan","value": "7"}
+ ,{"name": "k_EAccountTypeChat","value": "8"}
+ ,{"name": "k_EAccountTypeConsoleUser","value": "9"}
+ ,{"name": "k_EAccountTypeAnonUser","value": "10"}
+ ,{"name": "k_EAccountTypeMax","value": "11"}
+]}
+, {"enumname": "EAppReleaseState","values": [
+ {"name": "k_EAppReleaseState_Unknown","value": "0"}
+ ,{"name": "k_EAppReleaseState_Unavailable","value": "1"}
+ ,{"name": "k_EAppReleaseState_Prerelease","value": "2"}
+ ,{"name": "k_EAppReleaseState_PreloadOnly","value": "3"}
+ ,{"name": "k_EAppReleaseState_Released","value": "4"}
+]}
+, {"enumname": "EAppOwnershipFlags","values": [
+ {"name": "k_EAppOwnershipFlags_None","value": "0"}
+ ,{"name": "k_EAppOwnershipFlags_OwnsLicense","value": "1"}
+ ,{"name": "k_EAppOwnershipFlags_FreeLicense","value": "2"}
+ ,{"name": "k_EAppOwnershipFlags_RegionRestricted","value": "4"}
+ ,{"name": "k_EAppOwnershipFlags_LowViolence","value": "8"}
+ ,{"name": "k_EAppOwnershipFlags_InvalidPlatform","value": "16"}
+ ,{"name": "k_EAppOwnershipFlags_SharedLicense","value": "32"}
+ ,{"name": "k_EAppOwnershipFlags_FreeWeekend","value": "64"}
+ ,{"name": "k_EAppOwnershipFlags_RetailLicense","value": "128"}
+ ,{"name": "k_EAppOwnershipFlags_LicenseLocked","value": "256"}
+ ,{"name": "k_EAppOwnershipFlags_LicensePending","value": "512"}
+ ,{"name": "k_EAppOwnershipFlags_LicenseExpired","value": "1024"}
+ ,{"name": "k_EAppOwnershipFlags_LicensePermanent","value": "2048"}
+ ,{"name": "k_EAppOwnershipFlags_LicenseRecurring","value": "4096"}
+ ,{"name": "k_EAppOwnershipFlags_LicenseCanceled","value": "8192"}
+ ,{"name": "k_EAppOwnershipFlags_AutoGrant","value": "16384"}
+ ,{"name": "k_EAppOwnershipFlags_PendingGift","value": "32768"}
+ ,{"name": "k_EAppOwnershipFlags_RentalNotActivated","value": "65536"}
+ ,{"name": "k_EAppOwnershipFlags_Rental","value": "131072"}
+]}
+, {"enumname": "EAppType","values": [
+ {"name": "k_EAppType_Invalid","value": "0"}
+ ,{"name": "k_EAppType_Game","value": "1"}
+ ,{"name": "k_EAppType_Application","value": "2"}
+ ,{"name": "k_EAppType_Tool","value": "4"}
+ ,{"name": "k_EAppType_Demo","value": "8"}
+ ,{"name": "k_EAppType_Media_DEPRECATED","value": "16"}
+ ,{"name": "k_EAppType_DLC","value": "32"}
+ ,{"name": "k_EAppType_Guide","value": "64"}
+ ,{"name": "k_EAppType_Driver","value": "128"}
+ ,{"name": "k_EAppType_Config","value": "256"}
+ ,{"name": "k_EAppType_Hardware","value": "512"}
+ ,{"name": "k_EAppType_Franchise","value": "1024"}
+ ,{"name": "k_EAppType_Video","value": "2048"}
+ ,{"name": "k_EAppType_Plugin","value": "4096"}
+ ,{"name": "k_EAppType_Music","value": "8192"}
+ ,{"name": "k_EAppType_Series","value": "16384"}
+ ,{"name": "k_EAppType_Shortcut","value": "1073741824"}
+ ,{"name": "k_EAppType_DepotOnly","value": "-2147483648"}
+]}
+, {"enumname": "ESteamUserStatType","values": [
+ {"name": "k_ESteamUserStatTypeINVALID","value": "0"}
+ ,{"name": "k_ESteamUserStatTypeINT","value": "1"}
+ ,{"name": "k_ESteamUserStatTypeFLOAT","value": "2"}
+ ,{"name": "k_ESteamUserStatTypeAVGRATE","value": "3"}
+ ,{"name": "k_ESteamUserStatTypeACHIEVEMENTS","value": "4"}
+ ,{"name": "k_ESteamUserStatTypeGROUPACHIEVEMENTS","value": "5"}
+ ,{"name": "k_ESteamUserStatTypeMAX","value": "6"}
+]}
+, {"enumname": "EChatEntryType","values": [
+ {"name": "k_EChatEntryTypeInvalid","value": "0"}
+ ,{"name": "k_EChatEntryTypeChatMsg","value": "1"}
+ ,{"name": "k_EChatEntryTypeTyping","value": "2"}
+ ,{"name": "k_EChatEntryTypeInviteGame","value": "3"}
+ ,{"name": "k_EChatEntryTypeEmote","value": "4"}
+ ,{"name": "k_EChatEntryTypeLeftConversation","value": "6"}
+ ,{"name": "k_EChatEntryTypeEntered","value": "7"}
+ ,{"name": "k_EChatEntryTypeWasKicked","value": "8"}
+ ,{"name": "k_EChatEntryTypeWasBanned","value": "9"}
+ ,{"name": "k_EChatEntryTypeDisconnected","value": "10"}
+ ,{"name": "k_EChatEntryTypeHistoricalChat","value": "11"}
+ ,{"name": "k_EChatEntryTypeLinkBlocked","value": "14"}
+]}
+, {"enumname": "EChatRoomEnterResponse","values": [
+ {"name": "k_EChatRoomEnterResponseSuccess","value": "1"}
+ ,{"name": "k_EChatRoomEnterResponseDoesntExist","value": "2"}
+ ,{"name": "k_EChatRoomEnterResponseNotAllowed","value": "3"}
+ ,{"name": "k_EChatRoomEnterResponseFull","value": "4"}
+ ,{"name": "k_EChatRoomEnterResponseError","value": "5"}
+ ,{"name": "k_EChatRoomEnterResponseBanned","value": "6"}
+ ,{"name": "k_EChatRoomEnterResponseLimited","value": "7"}
+ ,{"name": "k_EChatRoomEnterResponseClanDisabled","value": "8"}
+ ,{"name": "k_EChatRoomEnterResponseCommunityBan","value": "9"}
+ ,{"name": "k_EChatRoomEnterResponseMemberBlockedYou","value": "10"}
+ ,{"name": "k_EChatRoomEnterResponseYouBlockedMember","value": "11"}
+]}
+, {"enumname": "EChatSteamIDInstanceFlags","values": [
+ {"name": "k_EChatAccountInstanceMask","value": "4095"}
+ ,{"name": "k_EChatInstanceFlagClan","value": "524288"}
+ ,{"name": "k_EChatInstanceFlagLobby","value": "262144"}
+ ,{"name": "k_EChatInstanceFlagMMSLobby","value": "131072"}
+]}
+, {"enumname": "EMarketingMessageFlags","values": [
+ {"name": "k_EMarketingMessageFlagsNone","value": "0"}
+ ,{"name": "k_EMarketingMessageFlagsHighPriority","value": "1"}
+ ,{"name": "k_EMarketingMessageFlagsPlatformWindows","value": "2"}
+ ,{"name": "k_EMarketingMessageFlagsPlatformMac","value": "4"}
+ ,{"name": "k_EMarketingMessageFlagsPlatformLinux","value": "8"}
+ ,{"name": "k_EMarketingMessageFlagsPlatformRestrictions","value": "14"}
+]}
+, {"enumname": "ENotificationPosition","values": [
+ {"name": "k_EPositionTopLeft","value": "0"}
+ ,{"name": "k_EPositionTopRight","value": "1"}
+ ,{"name": "k_EPositionBottomLeft","value": "2"}
+ ,{"name": "k_EPositionBottomRight","value": "3"}
+]}
+, {"enumname": "EBroadcastUploadResult","values": [
+ {"name": "k_EBroadcastUploadResultNone","value": "0"}
+ ,{"name": "k_EBroadcastUploadResultOK","value": "1"}
+ ,{"name": "k_EBroadcastUploadResultInitFailed","value": "2"}
+ ,{"name": "k_EBroadcastUploadResultFrameFailed","value": "3"}
+ ,{"name": "k_EBroadcastUploadResultTimeout","value": "4"}
+ ,{"name": "k_EBroadcastUploadResultBandwidthExceeded","value": "5"}
+ ,{"name": "k_EBroadcastUploadResultLowFPS","value": "6"}
+ ,{"name": "k_EBroadcastUploadResultMissingKeyFrames","value": "7"}
+ ,{"name": "k_EBroadcastUploadResultNoConnection","value": "8"}
+ ,{"name": "k_EBroadcastUploadResultRelayFailed","value": "9"}
+ ,{"name": "k_EBroadcastUploadResultSettingsChanged","value": "10"}
+ ,{"name": "k_EBroadcastUploadResultMissingAudio","value": "11"}
+ ,{"name": "k_EBroadcastUploadResultTooFarBehind","value": "12"}
+ ,{"name": "k_EBroadcastUploadResultTranscodeBehind","value": "13"}
+]}
+, {"enumname": "ELaunchOptionType","values": [
+ {"name": "k_ELaunchOptionType_None","value": "0"}
+ ,{"name": "k_ELaunchOptionType_Default","value": "1"}
+ ,{"name": "k_ELaunchOptionType_SafeMode","value": "2"}
+ ,{"name": "k_ELaunchOptionType_Multiplayer","value": "3"}
+ ,{"name": "k_ELaunchOptionType_Config","value": "4"}
+ ,{"name": "k_ELaunchOptionType_OpenVR","value": "5"}
+ ,{"name": "k_ELaunchOptionType_Server","value": "6"}
+ ,{"name": "k_ELaunchOptionType_Editor","value": "7"}
+ ,{"name": "k_ELaunchOptionType_Manual","value": "8"}
+ ,{"name": "k_ELaunchOptionType_Benchmark","value": "9"}
+ ,{"name": "k_ELaunchOptionType_Option1","value": "10"}
+ ,{"name": "k_ELaunchOptionType_Option2","value": "11"}
+ ,{"name": "k_ELaunchOptionType_Option3","value": "12"}
+ ,{"name": "k_ELaunchOptionType_OculusVR","value": "13"}
+ ,{"name": "k_ELaunchOptionType_OpenVROverlay","value": "14"}
+ ,{"name": "k_ELaunchOptionType_OSVR","value": "15"}
+ ,{"name": "k_ELaunchOptionType_Dialog","value": "1000"}
+]}
+, {"enumname": "EVRHMDType","values": [
+ {"name": "k_eEVRHMDType_None","value": "-1"}
+ ,{"name": "k_eEVRHMDType_Unknown","value": "0"}
+ ,{"name": "k_eEVRHMDType_HTC_Dev","value": "1"}
+ ,{"name": "k_eEVRHMDType_HTC_VivePre","value": "2"}
+ ,{"name": "k_eEVRHMDType_HTC_Vive","value": "3"}
+ ,{"name": "k_eEVRHMDType_HTC_Unknown","value": "20"}
+ ,{"name": "k_eEVRHMDType_Oculus_DK1","value": "21"}
+ ,{"name": "k_eEVRHMDType_Oculus_DK2","value": "22"}
+ ,{"name": "k_eEVRHMDType_Oculus_Rift","value": "23"}
+ ,{"name": "k_eEVRHMDType_Oculus_Unknown","value": "40"}
+]}
+, {"enumname": "CGameID::EGameIDType","values": [
+ {"name": "k_EGameIDTypeApp","value": "0"}
+ ,{"name": "k_EGameIDTypeGameMod","value": "1"}
+ ,{"name": "k_EGameIDTypeShortcut","value": "2"}
+ ,{"name": "k_EGameIDTypeP2P","value": "3"}
+]}
+, {"enumname": "IPCFailure_t::EFailureType","values": [
+ {"name": "k_EFailureFlushedCallbackQueue","value": "0"}
+ ,{"name": "k_EFailurePipeFail","value": "1"}
+]}
+, {"enumname": "EFriendRelationship","values": [
+ {"name": "k_EFriendRelationshipNone","value": "0"}
+ ,{"name": "k_EFriendRelationshipBlocked","value": "1"}
+ ,{"name": "k_EFriendRelationshipRequestRecipient","value": "2"}
+ ,{"name": "k_EFriendRelationshipFriend","value": "3"}
+ ,{"name": "k_EFriendRelationshipRequestInitiator","value": "4"}
+ ,{"name": "k_EFriendRelationshipIgnored","value": "5"}
+ ,{"name": "k_EFriendRelationshipIgnoredFriend","value": "6"}
+ ,{"name": "k_EFriendRelationshipSuggested_DEPRECATED","value": "7"}
+ ,{"name": "k_EFriendRelationshipMax","value": "8"}
+]}
+, {"enumname": "EPersonaState","values": [
+ {"name": "k_EPersonaStateOffline","value": "0"}
+ ,{"name": "k_EPersonaStateOnline","value": "1"}
+ ,{"name": "k_EPersonaStateBusy","value": "2"}
+ ,{"name": "k_EPersonaStateAway","value": "3"}
+ ,{"name": "k_EPersonaStateSnooze","value": "4"}
+ ,{"name": "k_EPersonaStateLookingToTrade","value": "5"}
+ ,{"name": "k_EPersonaStateLookingToPlay","value": "6"}
+ ,{"name": "k_EPersonaStateMax","value": "7"}
+]}
+, {"enumname": "EFriendFlags","values": [
+ {"name": "k_EFriendFlagNone","value": "0"}
+ ,{"name": "k_EFriendFlagBlocked","value": "1"}
+ ,{"name": "k_EFriendFlagFriendshipRequested","value": "2"}
+ ,{"name": "k_EFriendFlagImmediate","value": "4"}
+ ,{"name": "k_EFriendFlagClanMember","value": "8"}
+ ,{"name": "k_EFriendFlagOnGameServer","value": "16"}
+ ,{"name": "k_EFriendFlagRequestingFriendship","value": "128"}
+ ,{"name": "k_EFriendFlagRequestingInfo","value": "256"}
+ ,{"name": "k_EFriendFlagIgnored","value": "512"}
+ ,{"name": "k_EFriendFlagIgnoredFriend","value": "1024"}
+ ,{"name": "k_EFriendFlagChatMember","value": "4096"}
+ ,{"name": "k_EFriendFlagAll","value": "65535"}
+]}
+, {"enumname": "EUserRestriction","values": [
+ {"name": "k_nUserRestrictionNone","value": "0"}
+ ,{"name": "k_nUserRestrictionUnknown","value": "1"}
+ ,{"name": "k_nUserRestrictionAnyChat","value": "2"}
+ ,{"name": "k_nUserRestrictionVoiceChat","value": "4"}
+ ,{"name": "k_nUserRestrictionGroupChat","value": "8"}
+ ,{"name": "k_nUserRestrictionRating","value": "16"}
+ ,{"name": "k_nUserRestrictionGameInvites","value": "32"}
+ ,{"name": "k_nUserRestrictionTrading","value": "64"}
+]}
+, {"enumname": "EOverlayToStoreFlag","values": [
+ {"name": "k_EOverlayToStoreFlag_None","value": "0"}
+ ,{"name": "k_EOverlayToStoreFlag_AddToCart","value": "1"}
+ ,{"name": "k_EOverlayToStoreFlag_AddToCartAndShow","value": "2"}
+]}
+, {"enumname": "EPersonaChange","values": [
+ {"name": "k_EPersonaChangeName","value": "1"}
+ ,{"name": "k_EPersonaChangeStatus","value": "2"}
+ ,{"name": "k_EPersonaChangeComeOnline","value": "4"}
+ ,{"name": "k_EPersonaChangeGoneOffline","value": "8"}
+ ,{"name": "k_EPersonaChangeGamePlayed","value": "16"}
+ ,{"name": "k_EPersonaChangeGameServer","value": "32"}
+ ,{"name": "k_EPersonaChangeAvatar","value": "64"}
+ ,{"name": "k_EPersonaChangeJoinedSource","value": "128"}
+ ,{"name": "k_EPersonaChangeLeftSource","value": "256"}
+ ,{"name": "k_EPersonaChangeRelationshipChanged","value": "512"}
+ ,{"name": "k_EPersonaChangeNameFirstSet","value": "1024"}
+ ,{"name": "k_EPersonaChangeFacebookInfo","value": "2048"}
+ ,{"name": "k_EPersonaChangeNickname","value": "4096"}
+ ,{"name": "k_EPersonaChangeSteamLevel","value": "8192"}
+]}
+, {"enumname": "ESteamAPICallFailure","values": [
+ {"name": "k_ESteamAPICallFailureNone","value": "-1"}
+ ,{"name": "k_ESteamAPICallFailureSteamGone","value": "0"}
+ ,{"name": "k_ESteamAPICallFailureNetworkFailure","value": "1"}
+ ,{"name": "k_ESteamAPICallFailureInvalidHandle","value": "2"}
+ ,{"name": "k_ESteamAPICallFailureMismatchedCallback","value": "3"}
+]}
+, {"enumname": "EGamepadTextInputMode","values": [
+ {"name": "k_EGamepadTextInputModeNormal","value": "0"}
+ ,{"name": "k_EGamepadTextInputModePassword","value": "1"}
+]}
+, {"enumname": "EGamepadTextInputLineMode","values": [
+ {"name": "k_EGamepadTextInputLineModeSingleLine","value": "0"}
+ ,{"name": "k_EGamepadTextInputLineModeMultipleLines","value": "1"}
+]}
+, {"enumname": "ECheckFileSignature","values": [
+ {"name": "k_ECheckFileSignatureInvalidSignature","value": "0"}
+ ,{"name": "k_ECheckFileSignatureValidSignature","value": "1"}
+ ,{"name": "k_ECheckFileSignatureFileNotFound","value": "2"}
+ ,{"name": "k_ECheckFileSignatureNoSignaturesFoundForThisApp","value": "3"}
+ ,{"name": "k_ECheckFileSignatureNoSignaturesFoundForThisFile","value": "4"}
+]}
+, {"enumname": "EMatchMakingServerResponse","values": [
+ {"name": "eServerResponded","value": "0"}
+ ,{"name": "eServerFailedToRespond","value": "1"}
+ ,{"name": "eNoServersListedOnMasterServer","value": "2"}
+]}
+, {"enumname": "ELobbyType","values": [
+ {"name": "k_ELobbyTypePrivate","value": "0"}
+ ,{"name": "k_ELobbyTypeFriendsOnly","value": "1"}
+ ,{"name": "k_ELobbyTypePublic","value": "2"}
+ ,{"name": "k_ELobbyTypeInvisible","value": "3"}
+]}
+, {"enumname": "ELobbyComparison","values": [
+ {"name": "k_ELobbyComparisonEqualToOrLessThan","value": "-2"}
+ ,{"name": "k_ELobbyComparisonLessThan","value": "-1"}
+ ,{"name": "k_ELobbyComparisonEqual","value": "0"}
+ ,{"name": "k_ELobbyComparisonGreaterThan","value": "1"}
+ ,{"name": "k_ELobbyComparisonEqualToOrGreaterThan","value": "2"}
+ ,{"name": "k_ELobbyComparisonNotEqual","value": "3"}
+]}
+, {"enumname": "ELobbyDistanceFilter","values": [
+ {"name": "k_ELobbyDistanceFilterClose","value": "0"}
+ ,{"name": "k_ELobbyDistanceFilterDefault","value": "1"}
+ ,{"name": "k_ELobbyDistanceFilterFar","value": "2"}
+ ,{"name": "k_ELobbyDistanceFilterWorldwide","value": "3"}
+]}
+, {"enumname": "EChatMemberStateChange","values": [
+ {"name": "k_EChatMemberStateChangeEntered","value": "1"}
+ ,{"name": "k_EChatMemberStateChangeLeft","value": "2"}
+ ,{"name": "k_EChatMemberStateChangeDisconnected","value": "4"}
+ ,{"name": "k_EChatMemberStateChangeKicked","value": "8"}
+ ,{"name": "k_EChatMemberStateChangeBanned","value": "16"}
+]}
+, {"enumname": "ERemoteStoragePlatform","values": [
+ {"name": "k_ERemoteStoragePlatformNone","value": "0"}
+ ,{"name": "k_ERemoteStoragePlatformWindows","value": "1"}
+ ,{"name": "k_ERemoteStoragePlatformOSX","value": "2"}
+ ,{"name": "k_ERemoteStoragePlatformPS3","value": "4"}
+ ,{"name": "k_ERemoteStoragePlatformLinux","value": "8"}
+ ,{"name": "k_ERemoteStoragePlatformReserved2","value": "16"}
+ ,{"name": "k_ERemoteStoragePlatformAll","value": "-1"}
+]}
+, {"enumname": "ERemoteStoragePublishedFileVisibility","values": [
+ {"name": "k_ERemoteStoragePublishedFileVisibilityPublic","value": "0"}
+ ,{"name": "k_ERemoteStoragePublishedFileVisibilityFriendsOnly","value": "1"}
+ ,{"name": "k_ERemoteStoragePublishedFileVisibilityPrivate","value": "2"}
+]}
+, {"enumname": "EWorkshopFileType","values": [
+ {"name": "k_EWorkshopFileTypeFirst","value": "0"}
+ ,{"name": "k_EWorkshopFileTypeCommunity","value": "0"}
+ ,{"name": "k_EWorkshopFileTypeMicrotransaction","value": "1"}
+ ,{"name": "k_EWorkshopFileTypeCollection","value": "2"}
+ ,{"name": "k_EWorkshopFileTypeArt","value": "3"}
+ ,{"name": "k_EWorkshopFileTypeVideo","value": "4"}
+ ,{"name": "k_EWorkshopFileTypeScreenshot","value": "5"}
+ ,{"name": "k_EWorkshopFileTypeGame","value": "6"}
+ ,{"name": "k_EWorkshopFileTypeSoftware","value": "7"}
+ ,{"name": "k_EWorkshopFileTypeConcept","value": "8"}
+ ,{"name": "k_EWorkshopFileTypeWebGuide","value": "9"}
+ ,{"name": "k_EWorkshopFileTypeIntegratedGuide","value": "10"}
+ ,{"name": "k_EWorkshopFileTypeMerch","value": "11"}
+ ,{"name": "k_EWorkshopFileTypeControllerBinding","value": "12"}
+ ,{"name": "k_EWorkshopFileTypeSteamworksAccessInvite","value": "13"}
+ ,{"name": "k_EWorkshopFileTypeSteamVideo","value": "14"}
+ ,{"name": "k_EWorkshopFileTypeGameManagedItem","value": "15"}
+ ,{"name": "k_EWorkshopFileTypeMax","value": "16"}
+]}
+, {"enumname": "EWorkshopVote","values": [
+ {"name": "k_EWorkshopVoteUnvoted","value": "0"}
+ ,{"name": "k_EWorkshopVoteFor","value": "1"}
+ ,{"name": "k_EWorkshopVoteAgainst","value": "2"}
+ ,{"name": "k_EWorkshopVoteLater","value": "3"}
+]}
+, {"enumname": "EWorkshopFileAction","values": [
+ {"name": "k_EWorkshopFileActionPlayed","value": "0"}
+ ,{"name": "k_EWorkshopFileActionCompleted","value": "1"}
+]}
+, {"enumname": "EWorkshopEnumerationType","values": [
+ {"name": "k_EWorkshopEnumerationTypeRankedByVote","value": "0"}
+ ,{"name": "k_EWorkshopEnumerationTypeRecent","value": "1"}
+ ,{"name": "k_EWorkshopEnumerationTypeTrending","value": "2"}
+ ,{"name": "k_EWorkshopEnumerationTypeFavoritesOfFriends","value": "3"}
+ ,{"name": "k_EWorkshopEnumerationTypeVotedByFriends","value": "4"}
+ ,{"name": "k_EWorkshopEnumerationTypeContentByFriends","value": "5"}
+ ,{"name": "k_EWorkshopEnumerationTypeRecentFromFollowedUsers","value": "6"}
+]}
+, {"enumname": "EWorkshopVideoProvider","values": [
+ {"name": "k_EWorkshopVideoProviderNone","value": "0"}
+ ,{"name": "k_EWorkshopVideoProviderYoutube","value": "1"}
+]}
+, {"enumname": "EUGCReadAction","values": [
+ {"name": "k_EUGCRead_ContinueReadingUntilFinished","value": "0"}
+ ,{"name": "k_EUGCRead_ContinueReading","value": "1"}
+ ,{"name": "k_EUGCRead_Close","value": "2"}
+]}
+, {"enumname": "ELeaderboardDataRequest","values": [
+ {"name": "k_ELeaderboardDataRequestGlobal","value": "0"}
+ ,{"name": "k_ELeaderboardDataRequestGlobalAroundUser","value": "1"}
+ ,{"name": "k_ELeaderboardDataRequestFriends","value": "2"}
+ ,{"name": "k_ELeaderboardDataRequestUsers","value": "3"}
+]}
+, {"enumname": "ELeaderboardSortMethod","values": [
+ {"name": "k_ELeaderboardSortMethodNone","value": "0"}
+ ,{"name": "k_ELeaderboardSortMethodAscending","value": "1"}
+ ,{"name": "k_ELeaderboardSortMethodDescending","value": "2"}
+]}
+, {"enumname": "ELeaderboardDisplayType","values": [
+ {"name": "k_ELeaderboardDisplayTypeNone","value": "0"}
+ ,{"name": "k_ELeaderboardDisplayTypeNumeric","value": "1"}
+ ,{"name": "k_ELeaderboardDisplayTypeTimeSeconds","value": "2"}
+ ,{"name": "k_ELeaderboardDisplayTypeTimeMilliSeconds","value": "3"}
+]}
+, {"enumname": "ELeaderboardUploadScoreMethod","values": [
+ {"name": "k_ELeaderboardUploadScoreMethodNone","value": "0"}
+ ,{"name": "k_ELeaderboardUploadScoreMethodKeepBest","value": "1"}
+ ,{"name": "k_ELeaderboardUploadScoreMethodForceUpdate","value": "2"}
+]}
+, {"enumname": "ERegisterActivationCodeResult","values": [
+ {"name": "k_ERegisterActivationCodeResultOK","value": "0"}
+ ,{"name": "k_ERegisterActivationCodeResultFail","value": "1"}
+ ,{"name": "k_ERegisterActivationCodeResultAlreadyRegistered","value": "2"}
+ ,{"name": "k_ERegisterActivationCodeResultTimeout","value": "3"}
+ ,{"name": "k_ERegisterActivationCodeAlreadyOwned","value": "4"}
+]}
+, {"enumname": "EP2PSessionError","values": [
+ {"name": "k_EP2PSessionErrorNone","value": "0"}
+ ,{"name": "k_EP2PSessionErrorNotRunningApp","value": "1"}
+ ,{"name": "k_EP2PSessionErrorNoRightsToApp","value": "2"}
+ ,{"name": "k_EP2PSessionErrorDestinationNotLoggedIn","value": "3"}
+ ,{"name": "k_EP2PSessionErrorTimeout","value": "4"}
+ ,{"name": "k_EP2PSessionErrorMax","value": "5"}
+]}
+, {"enumname": "EP2PSend","values": [
+ {"name": "k_EP2PSendUnreliable","value": "0"}
+ ,{"name": "k_EP2PSendUnreliableNoDelay","value": "1"}
+ ,{"name": "k_EP2PSendReliable","value": "2"}
+ ,{"name": "k_EP2PSendReliableWithBuffering","value": "3"}
+]}
+, {"enumname": "ESNetSocketState","values": [
+ {"name": "k_ESNetSocketStateInvalid","value": "0"}
+ ,{"name": "k_ESNetSocketStateConnected","value": "1"}
+ ,{"name": "k_ESNetSocketStateInitiated","value": "10"}
+ ,{"name": "k_ESNetSocketStateLocalCandidatesFound","value": "11"}
+ ,{"name": "k_ESNetSocketStateReceivedRemoteCandidates","value": "12"}
+ ,{"name": "k_ESNetSocketStateChallengeHandshake","value": "15"}
+ ,{"name": "k_ESNetSocketStateDisconnecting","value": "21"}
+ ,{"name": "k_ESNetSocketStateLocalDisconnect","value": "22"}
+ ,{"name": "k_ESNetSocketStateTimeoutDuringConnect","value": "23"}
+ ,{"name": "k_ESNetSocketStateRemoteEndDisconnected","value": "24"}
+ ,{"name": "k_ESNetSocketStateConnectionBroken","value": "25"}
+]}
+, {"enumname": "ESNetSocketConnectionType","values": [
+ {"name": "k_ESNetSocketConnectionTypeNotConnected","value": "0"}
+ ,{"name": "k_ESNetSocketConnectionTypeUDP","value": "1"}
+ ,{"name": "k_ESNetSocketConnectionTypeUDPRelay","value": "2"}
+]}
+, {"enumname": "EVRScreenshotType","values": [
+ {"name": "k_EVRScreenshotType_None","value": "0"}
+ ,{"name": "k_EVRScreenshotType_Mono","value": "1"}
+ ,{"name": "k_EVRScreenshotType_Stereo","value": "2"}
+ ,{"name": "k_EVRScreenshotType_MonoCubemap","value": "3"}
+ ,{"name": "k_EVRScreenshotType_MonoPanorama","value": "4"}
+ ,{"name": "k_EVRScreenshotType_StereoPanorama","value": "5"}
+]}
+, {"enumname": "AudioPlayback_Status","values": [
+ {"name": "AudioPlayback_Undefined","value": "0"}
+ ,{"name": "AudioPlayback_Playing","value": "1"}
+ ,{"name": "AudioPlayback_Paused","value": "2"}
+ ,{"name": "AudioPlayback_Idle","value": "3"}
+]}
+, {"enumname": "EHTTPMethod","values": [
+ {"name": "k_EHTTPMethodInvalid","value": "0"}
+ ,{"name": "k_EHTTPMethodGET","value": "1"}
+ ,{"name": "k_EHTTPMethodHEAD","value": "2"}
+ ,{"name": "k_EHTTPMethodPOST","value": "3"}
+ ,{"name": "k_EHTTPMethodPUT","value": "4"}
+ ,{"name": "k_EHTTPMethodDELETE","value": "5"}
+ ,{"name": "k_EHTTPMethodOPTIONS","value": "6"}
+ ,{"name": "k_EHTTPMethodPATCH","value": "7"}
+]}
+, {"enumname": "EHTTPStatusCode","values": [
+ {"name": "k_EHTTPStatusCodeInvalid","value": "0"}
+ ,{"name": "k_EHTTPStatusCode100Continue","value": "100"}
+ ,{"name": "k_EHTTPStatusCode101SwitchingProtocols","value": "101"}
+ ,{"name": "k_EHTTPStatusCode200OK","value": "200"}
+ ,{"name": "k_EHTTPStatusCode201Created","value": "201"}
+ ,{"name": "k_EHTTPStatusCode202Accepted","value": "202"}
+ ,{"name": "k_EHTTPStatusCode203NonAuthoritative","value": "203"}
+ ,{"name": "k_EHTTPStatusCode204NoContent","value": "204"}
+ ,{"name": "k_EHTTPStatusCode205ResetContent","value": "205"}
+ ,{"name": "k_EHTTPStatusCode206PartialContent","value": "206"}
+ ,{"name": "k_EHTTPStatusCode300MultipleChoices","value": "300"}
+ ,{"name": "k_EHTTPStatusCode301MovedPermanently","value": "301"}
+ ,{"name": "k_EHTTPStatusCode302Found","value": "302"}
+ ,{"name": "k_EHTTPStatusCode303SeeOther","value": "303"}
+ ,{"name": "k_EHTTPStatusCode304NotModified","value": "304"}
+ ,{"name": "k_EHTTPStatusCode305UseProxy","value": "305"}
+ ,{"name": "k_EHTTPStatusCode307TemporaryRedirect","value": "307"}
+ ,{"name": "k_EHTTPStatusCode400BadRequest","value": "400"}
+ ,{"name": "k_EHTTPStatusCode401Unauthorized","value": "401"}
+ ,{"name": "k_EHTTPStatusCode402PaymentRequired","value": "402"}
+ ,{"name": "k_EHTTPStatusCode403Forbidden","value": "403"}
+ ,{"name": "k_EHTTPStatusCode404NotFound","value": "404"}
+ ,{"name": "k_EHTTPStatusCode405MethodNotAllowed","value": "405"}
+ ,{"name": "k_EHTTPStatusCode406NotAcceptable","value": "406"}
+ ,{"name": "k_EHTTPStatusCode407ProxyAuthRequired","value": "407"}
+ ,{"name": "k_EHTTPStatusCode408RequestTimeout","value": "408"}
+ ,{"name": "k_EHTTPStatusCode409Conflict","value": "409"}
+ ,{"name": "k_EHTTPStatusCode410Gone","value": "410"}
+ ,{"name": "k_EHTTPStatusCode411LengthRequired","value": "411"}
+ ,{"name": "k_EHTTPStatusCode412PreconditionFailed","value": "412"}
+ ,{"name": "k_EHTTPStatusCode413RequestEntityTooLarge","value": "413"}
+ ,{"name": "k_EHTTPStatusCode414RequestURITooLong","value": "414"}
+ ,{"name": "k_EHTTPStatusCode415UnsupportedMediaType","value": "415"}
+ ,{"name": "k_EHTTPStatusCode416RequestedRangeNotSatisfiable","value": "416"}
+ ,{"name": "k_EHTTPStatusCode417ExpectationFailed","value": "417"}
+ ,{"name": "k_EHTTPStatusCode4xxUnknown","value": "418"}
+ ,{"name": "k_EHTTPStatusCode429TooManyRequests","value": "429"}
+ ,{"name": "k_EHTTPStatusCode500InternalServerError","value": "500"}
+ ,{"name": "k_EHTTPStatusCode501NotImplemented","value": "501"}
+ ,{"name": "k_EHTTPStatusCode502BadGateway","value": "502"}
+ ,{"name": "k_EHTTPStatusCode503ServiceUnavailable","value": "503"}
+ ,{"name": "k_EHTTPStatusCode504GatewayTimeout","value": "504"}
+ ,{"name": "k_EHTTPStatusCode505HTTPVersionNotSupported","value": "505"}
+ ,{"name": "k_EHTTPStatusCode5xxUnknown","value": "599"}
+]}
+, {"enumname": "ESteamControllerPad","values": [
+ {"name": "k_ESteamControllerPad_Left","value": "0"}
+ ,{"name": "k_ESteamControllerPad_Right","value": "1"}
+]}
+, {"enumname": "EControllerSource","values": [
+ {"name": "k_EControllerSource_None","value": "0"}
+ ,{"name": "k_EControllerSource_LeftTrackpad","value": "1"}
+ ,{"name": "k_EControllerSource_RightTrackpad","value": "2"}
+ ,{"name": "k_EControllerSource_Joystick","value": "3"}
+ ,{"name": "k_EControllerSource_ABXY","value": "4"}
+ ,{"name": "k_EControllerSource_Switch","value": "5"}
+ ,{"name": "k_EControllerSource_LeftTrigger","value": "6"}
+ ,{"name": "k_EControllerSource_RightTrigger","value": "7"}
+ ,{"name": "k_EControllerSource_Gyro","value": "8"}
+ ,{"name": "k_EControllerSource_CenterTrackpad","value": "9"}
+ ,{"name": "k_EControllerSource_RightJoystick","value": "10"}
+ ,{"name": "k_EControllerSource_DPad","value": "11"}
+ ,{"name": "k_EControllerSource_Count","value": "12"}
+]}
+, {"enumname": "EControllerSourceMode","values": [
+ {"name": "k_EControllerSourceMode_None","value": "0"}
+ ,{"name": "k_EControllerSourceMode_Dpad","value": "1"}
+ ,{"name": "k_EControllerSourceMode_Buttons","value": "2"}
+ ,{"name": "k_EControllerSourceMode_FourButtons","value": "3"}
+ ,{"name": "k_EControllerSourceMode_AbsoluteMouse","value": "4"}
+ ,{"name": "k_EControllerSourceMode_RelativeMouse","value": "5"}
+ ,{"name": "k_EControllerSourceMode_JoystickMove","value": "6"}
+ ,{"name": "k_EControllerSourceMode_JoystickMouse","value": "7"}
+ ,{"name": "k_EControllerSourceMode_JoystickCamera","value": "8"}
+ ,{"name": "k_EControllerSourceMode_ScrollWheel","value": "9"}
+ ,{"name": "k_EControllerSourceMode_Trigger","value": "10"}
+ ,{"name": "k_EControllerSourceMode_TouchMenu","value": "11"}
+ ,{"name": "k_EControllerSourceMode_MouseJoystick","value": "12"}
+ ,{"name": "k_EControllerSourceMode_MouseRegion","value": "13"}
+ ,{"name": "k_EControllerSourceMode_RadialMenu","value": "14"}
+ ,{"name": "k_EControllerSourceMode_Switches","value": "15"}
+]}
+, {"enumname": "EControllerActionOrigin","values": [
+ {"name": "k_EControllerActionOrigin_None","value": "0"}
+ ,{"name": "k_EControllerActionOrigin_A","value": "1"}
+ ,{"name": "k_EControllerActionOrigin_B","value": "2"}
+ ,{"name": "k_EControllerActionOrigin_X","value": "3"}
+ ,{"name": "k_EControllerActionOrigin_Y","value": "4"}
+ ,{"name": "k_EControllerActionOrigin_LeftBumper","value": "5"}
+ ,{"name": "k_EControllerActionOrigin_RightBumper","value": "6"}
+ ,{"name": "k_EControllerActionOrigin_LeftGrip","value": "7"}
+ ,{"name": "k_EControllerActionOrigin_RightGrip","value": "8"}
+ ,{"name": "k_EControllerActionOrigin_Start","value": "9"}
+ ,{"name": "k_EControllerActionOrigin_Back","value": "10"}
+ ,{"name": "k_EControllerActionOrigin_LeftPad_Touch","value": "11"}
+ ,{"name": "k_EControllerActionOrigin_LeftPad_Swipe","value": "12"}
+ ,{"name": "k_EControllerActionOrigin_LeftPad_Click","value": "13"}
+ ,{"name": "k_EControllerActionOrigin_LeftPad_DPadNorth","value": "14"}
+ ,{"name": "k_EControllerActionOrigin_LeftPad_DPadSouth","value": "15"}
+ ,{"name": "k_EControllerActionOrigin_LeftPad_DPadWest","value": "16"}
+ ,{"name": "k_EControllerActionOrigin_LeftPad_DPadEast","value": "17"}
+ ,{"name": "k_EControllerActionOrigin_RightPad_Touch","value": "18"}
+ ,{"name": "k_EControllerActionOrigin_RightPad_Swipe","value": "19"}
+ ,{"name": "k_EControllerActionOrigin_RightPad_Click","value": "20"}
+ ,{"name": "k_EControllerActionOrigin_RightPad_DPadNorth","value": "21"}
+ ,{"name": "k_EControllerActionOrigin_RightPad_DPadSouth","value": "22"}
+ ,{"name": "k_EControllerActionOrigin_RightPad_DPadWest","value": "23"}
+ ,{"name": "k_EControllerActionOrigin_RightPad_DPadEast","value": "24"}
+ ,{"name": "k_EControllerActionOrigin_LeftTrigger_Pull","value": "25"}
+ ,{"name": "k_EControllerActionOrigin_LeftTrigger_Click","value": "26"}
+ ,{"name": "k_EControllerActionOrigin_RightTrigger_Pull","value": "27"}
+ ,{"name": "k_EControllerActionOrigin_RightTrigger_Click","value": "28"}
+ ,{"name": "k_EControllerActionOrigin_LeftStick_Move","value": "29"}
+ ,{"name": "k_EControllerActionOrigin_LeftStick_Click","value": "30"}
+ ,{"name": "k_EControllerActionOrigin_LeftStick_DPadNorth","value": "31"}
+ ,{"name": "k_EControllerActionOrigin_LeftStick_DPadSouth","value": "32"}
+ ,{"name": "k_EControllerActionOrigin_LeftStick_DPadWest","value": "33"}
+ ,{"name": "k_EControllerActionOrigin_LeftStick_DPadEast","value": "34"}
+ ,{"name": "k_EControllerActionOrigin_Gyro_Move","value": "35"}
+ ,{"name": "k_EControllerActionOrigin_Gyro_Pitch","value": "36"}
+ ,{"name": "k_EControllerActionOrigin_Gyro_Yaw","value": "37"}
+ ,{"name": "k_EControllerActionOrigin_Gyro_Roll","value": "38"}
+ ,{"name": "k_EControllerActionOrigin_PS4_X","value": "39"}
+ ,{"name": "k_EControllerActionOrigin_PS4_Circle","value": "40"}
+ ,{"name": "k_EControllerActionOrigin_PS4_Triangle","value": "41"}
+ ,{"name": "k_EControllerActionOrigin_PS4_Square","value": "42"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftBumper","value": "43"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightBumper","value": "44"}
+ ,{"name": "k_EControllerActionOrigin_PS4_Options","value": "45"}
+ ,{"name": "k_EControllerActionOrigin_PS4_Share","value": "46"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftPad_Touch","value": "47"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftPad_Swipe","value": "48"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftPad_Click","value": "49"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftPad_DPadNorth","value": "50"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftPad_DPadSouth","value": "51"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftPad_DPadWest","value": "52"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftPad_DPadEast","value": "53"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightPad_Touch","value": "54"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightPad_Swipe","value": "55"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightPad_Click","value": "56"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightPad_DPadNorth","value": "57"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightPad_DPadSouth","value": "58"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightPad_DPadWest","value": "59"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightPad_DPadEast","value": "60"}
+ ,{"name": "k_EControllerActionOrigin_PS4_CenterPad_Touch","value": "61"}
+ ,{"name": "k_EControllerActionOrigin_PS4_CenterPad_Swipe","value": "62"}
+ ,{"name": "k_EControllerActionOrigin_PS4_CenterPad_Click","value": "63"}
+ ,{"name": "k_EControllerActionOrigin_PS4_CenterPad_DPadNorth","value": "64"}
+ ,{"name": "k_EControllerActionOrigin_PS4_CenterPad_DPadSouth","value": "65"}
+ ,{"name": "k_EControllerActionOrigin_PS4_CenterPad_DPadWest","value": "66"}
+ ,{"name": "k_EControllerActionOrigin_PS4_CenterPad_DPadEast","value": "67"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftTrigger_Pull","value": "68"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftTrigger_Click","value": "69"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightTrigger_Pull","value": "70"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightTrigger_Click","value": "71"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftStick_Move","value": "72"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftStick_Click","value": "73"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftStick_DPadNorth","value": "74"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftStick_DPadSouth","value": "75"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftStick_DPadWest","value": "76"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftStick_DPadEast","value": "77"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightStick_Move","value": "78"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightStick_Click","value": "79"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightStick_DPadNorth","value": "80"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightStick_DPadSouth","value": "81"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightStick_DPadWest","value": "82"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightStick_DPadEast","value": "83"}
+ ,{"name": "k_EControllerActionOrigin_PS4_DPad_North","value": "84"}
+ ,{"name": "k_EControllerActionOrigin_PS4_DPad_South","value": "85"}
+ ,{"name": "k_EControllerActionOrigin_PS4_DPad_West","value": "86"}
+ ,{"name": "k_EControllerActionOrigin_PS4_DPad_East","value": "87"}
+ ,{"name": "k_EControllerActionOrigin_PS4_Gyro_Move","value": "88"}
+ ,{"name": "k_EControllerActionOrigin_PS4_Gyro_Pitch","value": "89"}
+ ,{"name": "k_EControllerActionOrigin_PS4_Gyro_Yaw","value": "90"}
+ ,{"name": "k_EControllerActionOrigin_PS4_Gyro_Roll","value": "91"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_A","value": "92"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_B","value": "93"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_X","value": "94"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_Y","value": "95"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_LeftBumper","value": "96"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_RightBumper","value": "97"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_Menu","value": "98"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_View","value": "99"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_LeftTrigger_Pull","value": "100"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_LeftTrigger_Click","value": "101"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_RightTrigger_Pull","value": "102"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_RightTrigger_Click","value": "103"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_LeftStick_Move","value": "104"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_LeftStick_Click","value": "105"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_LeftStick_DPadNorth","value": "106"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_LeftStick_DPadSouth","value": "107"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_LeftStick_DPadWest","value": "108"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_LeftStick_DPadEast","value": "109"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_RightStick_Move","value": "110"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_RightStick_Click","value": "111"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_RightStick_DPadNorth","value": "112"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_RightStick_DPadSouth","value": "113"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_RightStick_DPadWest","value": "114"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_RightStick_DPadEast","value": "115"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_DPad_North","value": "116"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_DPad_South","value": "117"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_DPad_West","value": "118"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_DPad_East","value": "119"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_A","value": "120"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_B","value": "121"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_X","value": "122"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_Y","value": "123"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_LeftBumper","value": "124"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_RightBumper","value": "125"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_Start","value": "126"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_Back","value": "127"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_LeftTrigger_Pull","value": "128"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_LeftTrigger_Click","value": "129"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_RightTrigger_Pull","value": "130"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_RightTrigger_Click","value": "131"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_LeftStick_Move","value": "132"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_LeftStick_Click","value": "133"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_LeftStick_DPadNorth","value": "134"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_LeftStick_DPadSouth","value": "135"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_LeftStick_DPadWest","value": "136"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_LeftStick_DPadEast","value": "137"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_RightStick_Move","value": "138"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_RightStick_Click","value": "139"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_RightStick_DPadNorth","value": "140"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_RightStick_DPadSouth","value": "141"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_RightStick_DPadWest","value": "142"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_RightStick_DPadEast","value": "143"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_DPad_North","value": "144"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_DPad_South","value": "145"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_DPad_West","value": "146"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_DPad_East","value": "147"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_A","value": "148"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_B","value": "149"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_X","value": "150"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_Y","value": "151"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftBumper","value": "152"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightBumper","value": "153"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftGrip","value": "154"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightGrip","value": "155"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_Start","value": "156"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_Back","value": "157"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftPad_Touch","value": "158"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftPad_Swipe","value": "159"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftPad_Click","value": "160"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftPad_DPadNorth","value": "161"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftPad_DPadSouth","value": "162"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftPad_DPadWest","value": "163"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftPad_DPadEast","value": "164"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightPad_Touch","value": "165"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightPad_Swipe","value": "166"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightPad_Click","value": "167"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightPad_DPadNorth","value": "168"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightPad_DPadSouth","value": "169"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightPad_DPadWest","value": "170"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightPad_DPadEast","value": "171"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftTrigger_Pull","value": "172"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftTrigger_Click","value": "173"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightTrigger_Pull","value": "174"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightTrigger_Click","value": "175"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftStick_Move","value": "176"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftStick_Click","value": "177"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftStick_DPadNorth","value": "178"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftStick_DPadSouth","value": "179"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftStick_DPadWest","value": "180"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftStick_DPadEast","value": "181"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_Gyro_Move","value": "182"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_Gyro_Pitch","value": "183"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_Gyro_Yaw","value": "184"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_Gyro_Roll","value": "185"}
+ ,{"name": "k_EControllerActionOrigin_Count","value": "186"}
+]}
+, {"enumname": "ESteamControllerLEDFlag","values": [
+ {"name": "k_ESteamControllerLEDFlag_SetColor","value": "0"}
+ ,{"name": "k_ESteamControllerLEDFlag_RestoreUserDefault","value": "1"}
+]}
+, {"enumname": "EUGCMatchingUGCType","values": [
+ {"name": "k_EUGCMatchingUGCType_Items","value": "0"}
+ ,{"name": "k_EUGCMatchingUGCType_Items_Mtx","value": "1"}
+ ,{"name": "k_EUGCMatchingUGCType_Items_ReadyToUse","value": "2"}
+ ,{"name": "k_EUGCMatchingUGCType_Collections","value": "3"}
+ ,{"name": "k_EUGCMatchingUGCType_Artwork","value": "4"}
+ ,{"name": "k_EUGCMatchingUGCType_Videos","value": "5"}
+ ,{"name": "k_EUGCMatchingUGCType_Screenshots","value": "6"}
+ ,{"name": "k_EUGCMatchingUGCType_AllGuides","value": "7"}
+ ,{"name": "k_EUGCMatchingUGCType_WebGuides","value": "8"}
+ ,{"name": "k_EUGCMatchingUGCType_IntegratedGuides","value": "9"}
+ ,{"name": "k_EUGCMatchingUGCType_UsableInGame","value": "10"}
+ ,{"name": "k_EUGCMatchingUGCType_ControllerBindings","value": "11"}
+ ,{"name": "k_EUGCMatchingUGCType_GameManagedItems","value": "12"}
+ ,{"name": "k_EUGCMatchingUGCType_All","value": "-1"}
+]}
+, {"enumname": "EUserUGCList","values": [
+ {"name": "k_EUserUGCList_Published","value": "0"}
+ ,{"name": "k_EUserUGCList_VotedOn","value": "1"}
+ ,{"name": "k_EUserUGCList_VotedUp","value": "2"}
+ ,{"name": "k_EUserUGCList_VotedDown","value": "3"}
+ ,{"name": "k_EUserUGCList_WillVoteLater","value": "4"}
+ ,{"name": "k_EUserUGCList_Favorited","value": "5"}
+ ,{"name": "k_EUserUGCList_Subscribed","value": "6"}
+ ,{"name": "k_EUserUGCList_UsedOrPlayed","value": "7"}
+ ,{"name": "k_EUserUGCList_Followed","value": "8"}
+]}
+, {"enumname": "EUserUGCListSortOrder","values": [
+ {"name": "k_EUserUGCListSortOrder_CreationOrderDesc","value": "0"}
+ ,{"name": "k_EUserUGCListSortOrder_CreationOrderAsc","value": "1"}
+ ,{"name": "k_EUserUGCListSortOrder_TitleAsc","value": "2"}
+ ,{"name": "k_EUserUGCListSortOrder_LastUpdatedDesc","value": "3"}
+ ,{"name": "k_EUserUGCListSortOrder_SubscriptionDateDesc","value": "4"}
+ ,{"name": "k_EUserUGCListSortOrder_VoteScoreDesc","value": "5"}
+ ,{"name": "k_EUserUGCListSortOrder_ForModeration","value": "6"}
+]}
+, {"enumname": "EUGCQuery","values": [
+ {"name": "k_EUGCQuery_RankedByVote","value": "0"}
+ ,{"name": "k_EUGCQuery_RankedByPublicationDate","value": "1"}
+ ,{"name": "k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate","value": "2"}
+ ,{"name": "k_EUGCQuery_RankedByTrend","value": "3"}
+ ,{"name": "k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate","value": "4"}
+ ,{"name": "k_EUGCQuery_CreatedByFriendsRankedByPublicationDate","value": "5"}
+ ,{"name": "k_EUGCQuery_RankedByNumTimesReported","value": "6"}
+ ,{"name": "k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate","value": "7"}
+ ,{"name": "k_EUGCQuery_NotYetRated","value": "8"}
+ ,{"name": "k_EUGCQuery_RankedByTotalVotesAsc","value": "9"}
+ ,{"name": "k_EUGCQuery_RankedByVotesUp","value": "10"}
+ ,{"name": "k_EUGCQuery_RankedByTextSearch","value": "11"}
+ ,{"name": "k_EUGCQuery_RankedByTotalUniqueSubscriptions","value": "12"}
+ ,{"name": "k_EUGCQuery_RankedByPlaytimeTrend","value": "13"}
+ ,{"name": "k_EUGCQuery_RankedByTotalPlaytime","value": "14"}
+ ,{"name": "k_EUGCQuery_RankedByAveragePlaytimeTrend","value": "15"}
+ ,{"name": "k_EUGCQuery_RankedByLifetimeAveragePlaytime","value": "16"}
+ ,{"name": "k_EUGCQuery_RankedByPlaytimeSessionsTrend","value": "17"}
+ ,{"name": "k_EUGCQuery_RankedByLifetimePlaytimeSessions","value": "18"}
+]}
+, {"enumname": "EItemUpdateStatus","values": [
+ {"name": "k_EItemUpdateStatusInvalid","value": "0"}
+ ,{"name": "k_EItemUpdateStatusPreparingConfig","value": "1"}
+ ,{"name": "k_EItemUpdateStatusPreparingContent","value": "2"}
+ ,{"name": "k_EItemUpdateStatusUploadingContent","value": "3"}
+ ,{"name": "k_EItemUpdateStatusUploadingPreviewFile","value": "4"}
+ ,{"name": "k_EItemUpdateStatusCommittingChanges","value": "5"}
+]}
+, {"enumname": "EItemState","values": [
+ {"name": "k_EItemStateNone","value": "0"}
+ ,{"name": "k_EItemStateSubscribed","value": "1"}
+ ,{"name": "k_EItemStateLegacyItem","value": "2"}
+ ,{"name": "k_EItemStateInstalled","value": "4"}
+ ,{"name": "k_EItemStateNeedsUpdate","value": "8"}
+ ,{"name": "k_EItemStateDownloading","value": "16"}
+ ,{"name": "k_EItemStateDownloadPending","value": "32"}
+]}
+, {"enumname": "EItemStatistic","values": [
+ {"name": "k_EItemStatistic_NumSubscriptions","value": "0"}
+ ,{"name": "k_EItemStatistic_NumFavorites","value": "1"}
+ ,{"name": "k_EItemStatistic_NumFollowers","value": "2"}
+ ,{"name": "k_EItemStatistic_NumUniqueSubscriptions","value": "3"}
+ ,{"name": "k_EItemStatistic_NumUniqueFavorites","value": "4"}
+ ,{"name": "k_EItemStatistic_NumUniqueFollowers","value": "5"}
+ ,{"name": "k_EItemStatistic_NumUniqueWebsiteViews","value": "6"}
+ ,{"name": "k_EItemStatistic_ReportScore","value": "7"}
+ ,{"name": "k_EItemStatistic_NumSecondsPlayed","value": "8"}
+ ,{"name": "k_EItemStatistic_NumPlaytimeSessions","value": "9"}
+ ,{"name": "k_EItemStatistic_NumComments","value": "10"}
+]}
+, {"enumname": "EItemPreviewType","values": [
+ {"name": "k_EItemPreviewType_Image","value": "0"}
+ ,{"name": "k_EItemPreviewType_YouTubeVideo","value": "1"}
+ ,{"name": "k_EItemPreviewType_Sketchfab","value": "2"}
+ ,{"name": "k_EItemPreviewType_EnvironmentMap_HorizontalCross","value": "3"}
+ ,{"name": "k_EItemPreviewType_EnvironmentMap_LatLong","value": "4"}
+ ,{"name": "k_EItemPreviewType_ReservedMax","value": "255"}
+]}
+, {"enumname": "ISteamHTMLSurface::EHTMLMouseButton","values": [
+ {"name": "eHTMLMouseButton_Left","value": "0"}
+ ,{"name": "eHTMLMouseButton_Right","value": "1"}
+ ,{"name": "eHTMLMouseButton_Middle","value": "2"}
+]}
+, {"enumname": "ISteamHTMLSurface::EMouseCursor","values": [
+ {"name": "dc_user","value": "0"}
+ ,{"name": "dc_none","value": "1"}
+ ,{"name": "dc_arrow","value": "2"}
+ ,{"name": "dc_ibeam","value": "3"}
+ ,{"name": "dc_hourglass","value": "4"}
+ ,{"name": "dc_waitarrow","value": "5"}
+ ,{"name": "dc_crosshair","value": "6"}
+ ,{"name": "dc_up","value": "7"}
+ ,{"name": "dc_sizenw","value": "8"}
+ ,{"name": "dc_sizese","value": "9"}
+ ,{"name": "dc_sizene","value": "10"}
+ ,{"name": "dc_sizesw","value": "11"}
+ ,{"name": "dc_sizew","value": "12"}
+ ,{"name": "dc_sizee","value": "13"}
+ ,{"name": "dc_sizen","value": "14"}
+ ,{"name": "dc_sizes","value": "15"}
+ ,{"name": "dc_sizewe","value": "16"}
+ ,{"name": "dc_sizens","value": "17"}
+ ,{"name": "dc_sizeall","value": "18"}
+ ,{"name": "dc_no","value": "19"}
+ ,{"name": "dc_hand","value": "20"}
+ ,{"name": "dc_blank","value": "21"}
+ ,{"name": "dc_middle_pan","value": "22"}
+ ,{"name": "dc_north_pan","value": "23"}
+ ,{"name": "dc_north_east_pan","value": "24"}
+ ,{"name": "dc_east_pan","value": "25"}
+ ,{"name": "dc_south_east_pan","value": "26"}
+ ,{"name": "dc_south_pan","value": "27"}
+ ,{"name": "dc_south_west_pan","value": "28"}
+ ,{"name": "dc_west_pan","value": "29"}
+ ,{"name": "dc_north_west_pan","value": "30"}
+ ,{"name": "dc_alias","value": "31"}
+ ,{"name": "dc_cell","value": "32"}
+ ,{"name": "dc_colresize","value": "33"}
+ ,{"name": "dc_copycur","value": "34"}
+ ,{"name": "dc_verticaltext","value": "35"}
+ ,{"name": "dc_rowresize","value": "36"}
+ ,{"name": "dc_zoomin","value": "37"}
+ ,{"name": "dc_zoomout","value": "38"}
+ ,{"name": "dc_help","value": "39"}
+ ,{"name": "dc_custom","value": "40"}
+ ,{"name": "dc_last","value": "41"}
+]}
+, {"enumname": "ISteamHTMLSurface::EHTMLKeyModifiers","values": [
+ {"name": "k_eHTMLKeyModifier_None","value": "0"}
+ ,{"name": "k_eHTMLKeyModifier_AltDown","value": "1"}
+ ,{"name": "k_eHTMLKeyModifier_CtrlDown","value": "2"}
+ ,{"name": "k_eHTMLKeyModifier_ShiftDown","value": "4"}
+]}
+, {"enumname": "ESteamItemFlags","values": [
+ {"name": "k_ESteamItemNoTrade","value": "1"}
+ ,{"name": "k_ESteamItemRemoved","value": "256"}
+ ,{"name": "k_ESteamItemConsumed","value": "512"}
+]}
+],
+"consts":[{
+ "constname": "k_iSteamUserCallbacks","consttype": "int", "constval": "100"}
+,{
+ "constname": "k_iSteamGameServerCallbacks","consttype": "int", "constval": "200"}
+,{
+ "constname": "k_iSteamFriendsCallbacks","consttype": "int", "constval": "300"}
+,{
+ "constname": "k_iSteamBillingCallbacks","consttype": "int", "constval": "400"}
+,{
+ "constname": "k_iSteamMatchmakingCallbacks","consttype": "int", "constval": "500"}
+,{
+ "constname": "k_iSteamContentServerCallbacks","consttype": "int", "constval": "600"}
+,{
+ "constname": "k_iSteamUtilsCallbacks","consttype": "int", "constval": "700"}
+,{
+ "constname": "k_iClientFriendsCallbacks","consttype": "int", "constval": "800"}
+,{
+ "constname": "k_iClientUserCallbacks","consttype": "int", "constval": "900"}
+,{
+ "constname": "k_iSteamAppsCallbacks","consttype": "int", "constval": "1000"}
+,{
+ "constname": "k_iSteamUserStatsCallbacks","consttype": "int", "constval": "1100"}
+,{
+ "constname": "k_iSteamNetworkingCallbacks","consttype": "int", "constval": "1200"}
+,{
+ "constname": "k_iClientRemoteStorageCallbacks","consttype": "int", "constval": "1300"}
+,{
+ "constname": "k_iClientDepotBuilderCallbacks","consttype": "int", "constval": "1400"}
+,{
+ "constname": "k_iSteamGameServerItemsCallbacks","consttype": "int", "constval": "1500"}
+,{
+ "constname": "k_iClientUtilsCallbacks","consttype": "int", "constval": "1600"}
+,{
+ "constname": "k_iSteamGameCoordinatorCallbacks","consttype": "int", "constval": "1700"}
+,{
+ "constname": "k_iSteamGameServerStatsCallbacks","consttype": "int", "constval": "1800"}
+,{
+ "constname": "k_iSteam2AsyncCallbacks","consttype": "int", "constval": "1900"}
+,{
+ "constname": "k_iSteamGameStatsCallbacks","consttype": "int", "constval": "2000"}
+,{
+ "constname": "k_iClientHTTPCallbacks","consttype": "int", "constval": "2100"}
+,{
+ "constname": "k_iClientScreenshotsCallbacks","consttype": "int", "constval": "2200"}
+,{
+ "constname": "k_iSteamScreenshotsCallbacks","consttype": "int", "constval": "2300"}
+,{
+ "constname": "k_iClientAudioCallbacks","consttype": "int", "constval": "2400"}
+,{
+ "constname": "k_iClientUnifiedMessagesCallbacks","consttype": "int", "constval": "2500"}
+,{
+ "constname": "k_iSteamStreamLauncherCallbacks","consttype": "int", "constval": "2600"}
+,{
+ "constname": "k_iClientControllerCallbacks","consttype": "int", "constval": "2700"}
+,{
+ "constname": "k_iSteamControllerCallbacks","consttype": "int", "constval": "2800"}
+,{
+ "constname": "k_iClientParentalSettingsCallbacks","consttype": "int", "constval": "2900"}
+,{
+ "constname": "k_iClientDeviceAuthCallbacks","consttype": "int", "constval": "3000"}
+,{
+ "constname": "k_iClientNetworkDeviceManagerCallbacks","consttype": "int", "constval": "3100"}
+,{
+ "constname": "k_iClientMusicCallbacks","consttype": "int", "constval": "3200"}
+,{
+ "constname": "k_iClientRemoteClientManagerCallbacks","consttype": "int", "constval": "3300"}
+,{
+ "constname": "k_iClientUGCCallbacks","consttype": "int", "constval": "3400"}
+,{
+ "constname": "k_iSteamStreamClientCallbacks","consttype": "int", "constval": "3500"}
+,{
+ "constname": "k_IClientProductBuilderCallbacks","consttype": "int", "constval": "3600"}
+,{
+ "constname": "k_iClientShortcutsCallbacks","consttype": "int", "constval": "3700"}
+,{
+ "constname": "k_iClientRemoteControlManagerCallbacks","consttype": "int", "constval": "3800"}
+,{
+ "constname": "k_iSteamAppListCallbacks","consttype": "int", "constval": "3900"}
+,{
+ "constname": "k_iSteamMusicCallbacks","consttype": "int", "constval": "4000"}
+,{
+ "constname": "k_iSteamMusicRemoteCallbacks","consttype": "int", "constval": "4100"}
+,{
+ "constname": "k_iClientVRCallbacks","consttype": "int", "constval": "4200"}
+,{
+ "constname": "k_iClientGameNotificationCallbacks","consttype": "int", "constval": "4300"}
+,{
+ "constname": "k_iSteamGameNotificationCallbacks","consttype": "int", "constval": "4400"}
+,{
+ "constname": "k_iSteamHTMLSurfaceCallbacks","consttype": "int", "constval": "4500"}
+,{
+ "constname": "k_iClientVideoCallbacks","consttype": "int", "constval": "4600"}
+,{
+ "constname": "k_iClientInventoryCallbacks","consttype": "int", "constval": "4700"}
+,{
+ "constname": "k_iClientBluetoothManagerCallbacks","consttype": "int", "constval": "4800"}
+,{
+ "constname": "k_cchPersonaNameMax","consttype": "int", "constval": "128"}
+,{
+ "constname": "k_cwchPersonaNameMax","consttype": "int", "constval": "32"}
+,{
+ "constname": "k_cchMaxRichPresenceKeys","consttype": "int", "constval": "20"}
+,{
+ "constname": "k_cchMaxRichPresenceKeyLength","consttype": "int", "constval": "64"}
+,{
+ "constname": "k_cchMaxRichPresenceValueLength","consttype": "int", "constval": "256"}
+,{
+ "constname": "k_cchStatNameMax","consttype": "int", "constval": "128"}
+,{
+ "constname": "k_cchLeaderboardNameMax","consttype": "int", "constval": "128"}
+,{
+ "constname": "k_cLeaderboardDetailsMax","consttype": "int", "constval": "64"}
+,{
+ "constname": "k_InvalidUnifiedMessageHandle","consttype": "const ClientUnifiedMessageHandle", "constval": "0"}
+,{
+ "constname": "k_SteamItemInstanceIDInvalid","consttype": "const SteamItemInstanceID_t", "constval": "18446744073709551615"}
+,{
+ "constname": "k_SteamInventoryResultInvalid","consttype": "const SteamInventoryResult_t", "constval": "-1"}
+],
+"structs":[{"struct": "CSteamID","fields": [
+{ "fieldname": "m_steamid", "fieldtype": "union SteamID_t"}]}
+,{"struct": "CSteamID::SteamID_t","fields": [
+{ "fieldname": "m_comp", "fieldtype": "struct SteamIDComponent_t"},
+{ "fieldname": "m_unAll64Bits", "fieldtype": "uint64"}]}
+,{"struct": "CSteamID::SteamID_t::SteamIDComponent_t","fields": [
+{ "fieldname": "m_unAccountID", "fieldtype": "uint32"},
+{ "fieldname": "m_unAccountInstance", "fieldtype": "unsigned int"},
+{ "fieldname": "m_EAccountType", "fieldtype": "unsigned int"},
+{ "fieldname": "m_EUniverse", "fieldtype": "enum EUniverse"}]}
+,{"struct": "CGameID::GameID_t","fields": [
+{ "fieldname": "m_nAppID", "fieldtype": "unsigned int"},
+{ "fieldname": "m_nType", "fieldtype": "unsigned int"},
+{ "fieldname": "m_nModID", "fieldtype": "unsigned int"}]}
+,{"struct": "CGameID::(anonymous)","fields": [
+{ "fieldname": "m_ulGameID", "fieldtype": "uint64"},
+{ "fieldname": "m_gameID", "fieldtype": "struct CGameID::GameID_t"}]}
+,{"struct": "ValvePackingSentinel_t","fields": [
+{ "fieldname": "m_u32", "fieldtype": "uint32"},
+{ "fieldname": "m_u64", "fieldtype": "uint64"},
+{ "fieldname": "m_u16", "fieldtype": "uint16"},
+{ "fieldname": "m_d", "fieldtype": "double"}]}
+,{"struct": "CallbackMsg_t","fields": [
+{ "fieldname": "m_hSteamUser", "fieldtype": "HSteamUser"},
+{ "fieldname": "m_iCallback", "fieldtype": "int"},
+{ "fieldname": "m_pubParam", "fieldtype": "uint8 *"},
+{ "fieldname": "m_cubParam", "fieldtype": "int"}]}
+,{"struct": "SteamServerConnectFailure_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_bStillRetrying", "fieldtype": "_Bool"}]}
+,{"struct": "SteamServersDisconnected_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "ClientGameServerDeny_t","fields": [
+{ "fieldname": "m_uAppID", "fieldtype": "uint32"},
+{ "fieldname": "m_unGameServerIP", "fieldtype": "uint32"},
+{ "fieldname": "m_usGameServerPort", "fieldtype": "uint16"},
+{ "fieldname": "m_bSecure", "fieldtype": "uint16"},
+{ "fieldname": "m_uReason", "fieldtype": "uint32"}]}
+,{"struct": "ValidateAuthTicketResponse_t","fields": [
+{ "fieldname": "m_SteamID", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_eAuthSessionResponse", "fieldtype": "enum EAuthSessionResponse"},
+{ "fieldname": "m_OwnerSteamID", "fieldtype": "class CSteamID"}]}
+,{"struct": "MicroTxnAuthorizationResponse_t","fields": [
+{ "fieldname": "m_unAppID", "fieldtype": "uint32"},
+{ "fieldname": "m_ulOrderID", "fieldtype": "uint64"},
+{ "fieldname": "m_bAuthorized", "fieldtype": "uint8"}]}
+,{"struct": "EncryptedAppTicketResponse_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "GetAuthSessionTicketResponse_t","fields": [
+{ "fieldname": "m_hAuthTicket", "fieldtype": "HAuthTicket"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "GameWebCallback_t","fields": [
+{ "fieldname": "m_szURL", "fieldtype": "char [256]"}]}
+,{"struct": "StoreAuthURLResponse_t","fields": [
+{ "fieldname": "m_szURL", "fieldtype": "char [512]"}]}
+,{"struct": "FriendGameInfo_t","fields": [
+{ "fieldname": "m_gameID", "fieldtype": "class CGameID"},
+{ "fieldname": "m_unGameIP", "fieldtype": "uint32"},
+{ "fieldname": "m_usGamePort", "fieldtype": "uint16"},
+{ "fieldname": "m_usQueryPort", "fieldtype": "uint16"},
+{ "fieldname": "m_steamIDLobby", "fieldtype": "class CSteamID"}]}
+,{"struct": "FriendSessionStateInfo_t","fields": [
+{ "fieldname": "m_uiOnlineSessionInstances", "fieldtype": "uint32"},
+{ "fieldname": "m_uiPublishedToFriendsSessionInstance", "fieldtype": "uint8"}]}
+,{"struct": "PersonaStateChange_t","fields": [
+{ "fieldname": "m_ulSteamID", "fieldtype": "uint64"},
+{ "fieldname": "m_nChangeFlags", "fieldtype": "int"}]}
+,{"struct": "GameOverlayActivated_t","fields": [
+{ "fieldname": "m_bActive", "fieldtype": "uint8"}]}
+,{"struct": "GameServerChangeRequested_t","fields": [
+{ "fieldname": "m_rgchServer", "fieldtype": "char [64]"},
+{ "fieldname": "m_rgchPassword", "fieldtype": "char [64]"}]}
+,{"struct": "GameLobbyJoinRequested_t","fields": [
+{ "fieldname": "m_steamIDLobby", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_steamIDFriend", "fieldtype": "class CSteamID"}]}
+,{"struct": "AvatarImageLoaded_t","fields": [
+{ "fieldname": "m_steamID", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_iImage", "fieldtype": "int"},
+{ "fieldname": "m_iWide", "fieldtype": "int"},
+{ "fieldname": "m_iTall", "fieldtype": "int"}]}
+,{"struct": "ClanOfficerListResponse_t","fields": [
+{ "fieldname": "m_steamIDClan", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_cOfficers", "fieldtype": "int"},
+{ "fieldname": "m_bSuccess", "fieldtype": "uint8"}]}
+,{"struct": "FriendRichPresenceUpdate_t","fields": [
+{ "fieldname": "m_steamIDFriend", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"}]}
+,{"struct": "GameRichPresenceJoinRequested_t","fields": [
+{ "fieldname": "m_steamIDFriend", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_rgchConnect", "fieldtype": "char [256]"}]}
+,{"struct": "GameConnectedClanChatMsg_t","fields": [
+{ "fieldname": "m_steamIDClanChat", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_iMessageID", "fieldtype": "int"}]}
+,{"struct": "GameConnectedChatJoin_t","fields": [
+{ "fieldname": "m_steamIDClanChat", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"}]}
+,{"struct": "GameConnectedChatLeave_t","fields": [
+{ "fieldname": "m_steamIDClanChat", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_bKicked", "fieldtype": "_Bool"},
+{ "fieldname": "m_bDropped", "fieldtype": "_Bool"}]}
+,{"struct": "DownloadClanActivityCountsResult_t","fields": [
+{ "fieldname": "m_bSuccess", "fieldtype": "_Bool"}]}
+,{"struct": "JoinClanChatRoomCompletionResult_t","fields": [
+{ "fieldname": "m_steamIDClanChat", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_eChatRoomEnterResponse", "fieldtype": "enum EChatRoomEnterResponse"}]}
+,{"struct": "GameConnectedFriendChatMsg_t","fields": [
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_iMessageID", "fieldtype": "int"}]}
+,{"struct": "FriendsGetFollowerCount_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_steamID", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_nCount", "fieldtype": "int"}]}
+,{"struct": "FriendsIsFollowing_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_steamID", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_bIsFollowing", "fieldtype": "_Bool"}]}
+,{"struct": "FriendsEnumerateFollowingList_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_rgSteamID", "fieldtype": "class CSteamID [50]"},
+{ "fieldname": "m_nResultsReturned", "fieldtype": "int32"},
+{ "fieldname": "m_nTotalResultCount", "fieldtype": "int32"}]}
+,{"struct": "SetPersonaNameResponse_t","fields": [
+{ "fieldname": "m_bSuccess", "fieldtype": "_Bool"},
+{ "fieldname": "m_bLocalSuccess", "fieldtype": "_Bool"},
+{ "fieldname": "m_result", "fieldtype": "enum EResult"}]}
+,{"struct": "LowBatteryPower_t","fields": [
+{ "fieldname": "m_nMinutesBatteryLeft", "fieldtype": "uint8"}]}
+,{"struct": "SteamAPICallCompleted_t","fields": [
+{ "fieldname": "m_hAsyncCall", "fieldtype": "SteamAPICall_t"},
+{ "fieldname": "m_iCallback", "fieldtype": "int"},
+{ "fieldname": "m_cubParam", "fieldtype": "uint32"}]}
+,{"struct": "CheckFileSignature_t","fields": [
+{ "fieldname": "m_eCheckFileSignature", "fieldtype": "enum ECheckFileSignature"}]}
+,{"struct": "GamepadTextInputDismissed_t","fields": [
+{ "fieldname": "m_bSubmitted", "fieldtype": "_Bool"},
+{ "fieldname": "m_unSubmittedText", "fieldtype": "uint32"}]}
+,{"struct": "MatchMakingKeyValuePair_t","fields": [
+{ "fieldname": "m_szKey", "fieldtype": "char [256]"},
+{ "fieldname": "m_szValue", "fieldtype": "char [256]"}]}
+,{"struct": "servernetadr_t","fields": [
+{ "fieldname": "m_usConnectionPort", "fieldtype": "uint16"},
+{ "fieldname": "m_usQueryPort", "fieldtype": "uint16"},
+{ "fieldname": "m_unIP", "fieldtype": "uint32"}]}
+,{"struct": "gameserveritem_t","fields": [
+{ "fieldname": "m_NetAdr", "fieldtype": "class servernetadr_t"},
+{ "fieldname": "m_nPing", "fieldtype": "int"},
+{ "fieldname": "m_bHadSuccessfulResponse", "fieldtype": "_Bool"},
+{ "fieldname": "m_bDoNotRefresh", "fieldtype": "_Bool"},
+{ "fieldname": "m_szGameDir", "fieldtype": "char [32]"},
+{ "fieldname": "m_szMap", "fieldtype": "char [32]"},
+{ "fieldname": "m_szGameDescription", "fieldtype": "char [64]"},
+{ "fieldname": "m_nAppID", "fieldtype": "uint32"},
+{ "fieldname": "m_nPlayers", "fieldtype": "int"},
+{ "fieldname": "m_nMaxPlayers", "fieldtype": "int"},
+{ "fieldname": "m_nBotPlayers", "fieldtype": "int"},
+{ "fieldname": "m_bPassword", "fieldtype": "_Bool"},
+{ "fieldname": "m_bSecure", "fieldtype": "_Bool"},
+{ "fieldname": "m_ulTimeLastPlayed", "fieldtype": "uint32"},
+{ "fieldname": "m_nServerVersion", "fieldtype": "int"},
+{ "fieldname": "m_szServerName", "fieldtype": "char [64]"},
+{ "fieldname": "m_szGameTags", "fieldtype": "char [128]"},
+{ "fieldname": "m_steamID", "fieldtype": "class CSteamID"}]}
+,{"struct": "FavoritesListChanged_t","fields": [
+{ "fieldname": "m_nIP", "fieldtype": "uint32"},
+{ "fieldname": "m_nQueryPort", "fieldtype": "uint32"},
+{ "fieldname": "m_nConnPort", "fieldtype": "uint32"},
+{ "fieldname": "m_nAppID", "fieldtype": "uint32"},
+{ "fieldname": "m_nFlags", "fieldtype": "uint32"},
+{ "fieldname": "m_bAdd", "fieldtype": "_Bool"},
+{ "fieldname": "m_unAccountId", "fieldtype": "AccountID_t"}]}
+,{"struct": "LobbyInvite_t","fields": [
+{ "fieldname": "m_ulSteamIDUser", "fieldtype": "uint64"},
+{ "fieldname": "m_ulSteamIDLobby", "fieldtype": "uint64"},
+{ "fieldname": "m_ulGameID", "fieldtype": "uint64"}]}
+,{"struct": "LobbyEnter_t","fields": [
+{ "fieldname": "m_ulSteamIDLobby", "fieldtype": "uint64"},
+{ "fieldname": "m_rgfChatPermissions", "fieldtype": "uint32"},
+{ "fieldname": "m_bLocked", "fieldtype": "_Bool"},
+{ "fieldname": "m_EChatRoomEnterResponse", "fieldtype": "uint32"}]}
+,{"struct": "LobbyDataUpdate_t","fields": [
+{ "fieldname": "m_ulSteamIDLobby", "fieldtype": "uint64"},
+{ "fieldname": "m_ulSteamIDMember", "fieldtype": "uint64"},
+{ "fieldname": "m_bSuccess", "fieldtype": "uint8"}]}
+,{"struct": "LobbyChatUpdate_t","fields": [
+{ "fieldname": "m_ulSteamIDLobby", "fieldtype": "uint64"},
+{ "fieldname": "m_ulSteamIDUserChanged", "fieldtype": "uint64"},
+{ "fieldname": "m_ulSteamIDMakingChange", "fieldtype": "uint64"},
+{ "fieldname": "m_rgfChatMemberStateChange", "fieldtype": "uint32"}]}
+,{"struct": "LobbyChatMsg_t","fields": [
+{ "fieldname": "m_ulSteamIDLobby", "fieldtype": "uint64"},
+{ "fieldname": "m_ulSteamIDUser", "fieldtype": "uint64"},
+{ "fieldname": "m_eChatEntryType", "fieldtype": "uint8"},
+{ "fieldname": "m_iChatID", "fieldtype": "uint32"}]}
+,{"struct": "LobbyGameCreated_t","fields": [
+{ "fieldname": "m_ulSteamIDLobby", "fieldtype": "uint64"},
+{ "fieldname": "m_ulSteamIDGameServer", "fieldtype": "uint64"},
+{ "fieldname": "m_unIP", "fieldtype": "uint32"},
+{ "fieldname": "m_usPort", "fieldtype": "uint16"}]}
+,{"struct": "LobbyMatchList_t","fields": [
+{ "fieldname": "m_nLobbiesMatching", "fieldtype": "uint32"}]}
+,{"struct": "LobbyKicked_t","fields": [
+{ "fieldname": "m_ulSteamIDLobby", "fieldtype": "uint64"},
+{ "fieldname": "m_ulSteamIDAdmin", "fieldtype": "uint64"},
+{ "fieldname": "m_bKickedDueToDisconnect", "fieldtype": "uint8"}]}
+,{"struct": "LobbyCreated_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_ulSteamIDLobby", "fieldtype": "uint64"}]}
+,{"struct": "PSNGameBootInviteResult_t","fields": [
+{ "fieldname": "m_bGameBootInviteExists", "fieldtype": "_Bool"},
+{ "fieldname": "m_steamIDLobby", "fieldtype": "class CSteamID"}]}
+,{"struct": "FavoritesListAccountsUpdated_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "SteamParamStringArray_t","fields": [
+{ "fieldname": "m_ppStrings", "fieldtype": "const char **"},
+{ "fieldname": "m_nNumStrings", "fieldtype": "int32"}]}
+,{"struct": "RemoteStorageAppSyncedClient_t","fields": [
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_unNumDownloads", "fieldtype": "int"}]}
+,{"struct": "RemoteStorageAppSyncedServer_t","fields": [
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_unNumUploads", "fieldtype": "int"}]}
+,{"struct": "RemoteStorageAppSyncProgress_t","fields": [
+{ "fieldname": "m_rgchCurrentFile", "fieldtype": "char [260]"},
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_uBytesTransferredThisChunk", "fieldtype": "uint32"},
+{ "fieldname": "m_dAppPercentComplete", "fieldtype": "double"},
+{ "fieldname": "m_bUploading", "fieldtype": "_Bool"}]}
+,{"struct": "RemoteStorageAppSyncStatusCheck_t","fields": [
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "RemoteStorageFileShareResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_hFile", "fieldtype": "UGCHandle_t"},
+{ "fieldname": "m_rgchFilename", "fieldtype": "char [260]"}]}
+,{"struct": "RemoteStoragePublishFileResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_bUserNeedsToAcceptWorkshopLegalAgreement", "fieldtype": "_Bool"}]}
+,{"struct": "RemoteStorageDeletePublishedFileResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"}]}
+,{"struct": "RemoteStorageEnumerateUserPublishedFilesResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nResultsReturned", "fieldtype": "int32"},
+{ "fieldname": "m_nTotalResultCount", "fieldtype": "int32"},
+{ "fieldname": "m_rgPublishedFileId", "fieldtype": "PublishedFileId_t [50]"}]}
+,{"struct": "RemoteStorageSubscribePublishedFileResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"}]}
+,{"struct": "RemoteStorageEnumerateUserSubscribedFilesResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nResultsReturned", "fieldtype": "int32"},
+{ "fieldname": "m_nTotalResultCount", "fieldtype": "int32"},
+{ "fieldname": "m_rgPublishedFileId", "fieldtype": "PublishedFileId_t [50]"},
+{ "fieldname": "m_rgRTimeSubscribed", "fieldtype": "uint32 [50]"}]}
+,{"struct": "RemoteStorageUnsubscribePublishedFileResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"}]}
+,{"struct": "RemoteStorageUpdatePublishedFileResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_bUserNeedsToAcceptWorkshopLegalAgreement", "fieldtype": "_Bool"}]}
+,{"struct": "RemoteStorageDownloadUGCResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_hFile", "fieldtype": "UGCHandle_t"},
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_nSizeInBytes", "fieldtype": "int32"},
+{ "fieldname": "m_pchFileName", "fieldtype": "char [260]"},
+{ "fieldname": "m_ulSteamIDOwner", "fieldtype": "uint64"}]}
+,{"struct": "RemoteStorageGetPublishedFileDetailsResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_nCreatorAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_nConsumerAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_rgchTitle", "fieldtype": "char [129]"},
+{ "fieldname": "m_rgchDescription", "fieldtype": "char [8000]"},
+{ "fieldname": "m_hFile", "fieldtype": "UGCHandle_t"},
+{ "fieldname": "m_hPreviewFile", "fieldtype": "UGCHandle_t"},
+{ "fieldname": "m_ulSteamIDOwner", "fieldtype": "uint64"},
+{ "fieldname": "m_rtimeCreated", "fieldtype": "uint32"},
+{ "fieldname": "m_rtimeUpdated", "fieldtype": "uint32"},
+{ "fieldname": "m_eVisibility", "fieldtype": "enum ERemoteStoragePublishedFileVisibility"},
+{ "fieldname": "m_bBanned", "fieldtype": "_Bool"},
+{ "fieldname": "m_rgchTags", "fieldtype": "char [1025]"},
+{ "fieldname": "m_bTagsTruncated", "fieldtype": "_Bool"},
+{ "fieldname": "m_pchFileName", "fieldtype": "char [260]"},
+{ "fieldname": "m_nFileSize", "fieldtype": "int32"},
+{ "fieldname": "m_nPreviewFileSize", "fieldtype": "int32"},
+{ "fieldname": "m_rgchURL", "fieldtype": "char [256]"},
+{ "fieldname": "m_eFileType", "fieldtype": "enum EWorkshopFileType"},
+{ "fieldname": "m_bAcceptedForUse", "fieldtype": "_Bool"}]}
+,{"struct": "RemoteStorageEnumerateWorkshopFilesResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nResultsReturned", "fieldtype": "int32"},
+{ "fieldname": "m_nTotalResultCount", "fieldtype": "int32"},
+{ "fieldname": "m_rgPublishedFileId", "fieldtype": "PublishedFileId_t [50]"},
+{ "fieldname": "m_rgScore", "fieldtype": "float [50]"},
+{ "fieldname": "m_nAppId", "fieldtype": "AppId_t"},
+{ "fieldname": "m_unStartIndex", "fieldtype": "uint32"}]}
+,{"struct": "RemoteStorageGetPublishedItemVoteDetailsResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_unPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_nVotesFor", "fieldtype": "int32"},
+{ "fieldname": "m_nVotesAgainst", "fieldtype": "int32"},
+{ "fieldname": "m_nReports", "fieldtype": "int32"},
+{ "fieldname": "m_fScore", "fieldtype": "float"}]}
+,{"struct": "RemoteStoragePublishedFileSubscribed_t","fields": [
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"}]}
+,{"struct": "RemoteStoragePublishedFileUnsubscribed_t","fields": [
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"}]}
+,{"struct": "RemoteStoragePublishedFileDeleted_t","fields": [
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"}]}
+,{"struct": "RemoteStorageUpdateUserPublishedItemVoteResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"}]}
+,{"struct": "RemoteStorageUserVoteDetails_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_eVote", "fieldtype": "enum EWorkshopVote"}]}
+,{"struct": "RemoteStorageEnumerateUserSharedWorkshopFilesResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nResultsReturned", "fieldtype": "int32"},
+{ "fieldname": "m_nTotalResultCount", "fieldtype": "int32"},
+{ "fieldname": "m_rgPublishedFileId", "fieldtype": "PublishedFileId_t [50]"}]}
+,{"struct": "RemoteStorageSetUserPublishedFileActionResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_eAction", "fieldtype": "enum EWorkshopFileAction"}]}
+,{"struct": "RemoteStorageEnumeratePublishedFilesByUserActionResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_eAction", "fieldtype": "enum EWorkshopFileAction"},
+{ "fieldname": "m_nResultsReturned", "fieldtype": "int32"},
+{ "fieldname": "m_nTotalResultCount", "fieldtype": "int32"},
+{ "fieldname": "m_rgPublishedFileId", "fieldtype": "PublishedFileId_t [50]"},
+{ "fieldname": "m_rgRTimeUpdated", "fieldtype": "uint32 [50]"}]}
+,{"struct": "RemoteStoragePublishFileProgress_t","fields": [
+{ "fieldname": "m_dPercentFile", "fieldtype": "double"},
+{ "fieldname": "m_bPreview", "fieldtype": "_Bool"}]}
+,{"struct": "RemoteStoragePublishedFileUpdated_t","fields": [
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_ulUnused", "fieldtype": "uint64"}]}
+,{"struct": "RemoteStorageFileWriteAsyncComplete_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "RemoteStorageFileReadAsyncComplete_t","fields": [
+{ "fieldname": "m_hFileReadAsync", "fieldtype": "SteamAPICall_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nOffset", "fieldtype": "uint32"},
+{ "fieldname": "m_cubRead", "fieldtype": "uint32"}]}
+,{"struct": "LeaderboardEntry_t","fields": [
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_nGlobalRank", "fieldtype": "int32"},
+{ "fieldname": "m_nScore", "fieldtype": "int32"},
+{ "fieldname": "m_cDetails", "fieldtype": "int32"},
+{ "fieldname": "m_hUGC", "fieldtype": "UGCHandle_t"}]}
+,{"struct": "UserStatsReceived_t","fields": [
+{ "fieldname": "m_nGameID", "fieldtype": "uint64"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"}]}
+,{"struct": "UserStatsStored_t","fields": [
+{ "fieldname": "m_nGameID", "fieldtype": "uint64"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "UserAchievementStored_t","fields": [
+{ "fieldname": "m_nGameID", "fieldtype": "uint64"},
+{ "fieldname": "m_bGroupAchievement", "fieldtype": "_Bool"},
+{ "fieldname": "m_rgchAchievementName", "fieldtype": "char [128]"},
+{ "fieldname": "m_nCurProgress", "fieldtype": "uint32"},
+{ "fieldname": "m_nMaxProgress", "fieldtype": "uint32"}]}
+,{"struct": "LeaderboardFindResult_t","fields": [
+{ "fieldname": "m_hSteamLeaderboard", "fieldtype": "SteamLeaderboard_t"},
+{ "fieldname": "m_bLeaderboardFound", "fieldtype": "uint8"}]}
+,{"struct": "LeaderboardScoresDownloaded_t","fields": [
+{ "fieldname": "m_hSteamLeaderboard", "fieldtype": "SteamLeaderboard_t"},
+{ "fieldname": "m_hSteamLeaderboardEntries", "fieldtype": "SteamLeaderboardEntries_t"},
+{ "fieldname": "m_cEntryCount", "fieldtype": "int"}]}
+,{"struct": "LeaderboardScoreUploaded_t","fields": [
+{ "fieldname": "m_bSuccess", "fieldtype": "uint8"},
+{ "fieldname": "m_hSteamLeaderboard", "fieldtype": "SteamLeaderboard_t"},
+{ "fieldname": "m_nScore", "fieldtype": "int32"},
+{ "fieldname": "m_bScoreChanged", "fieldtype": "uint8"},
+{ "fieldname": "m_nGlobalRankNew", "fieldtype": "int"},
+{ "fieldname": "m_nGlobalRankPrevious", "fieldtype": "int"}]}
+,{"struct": "NumberOfCurrentPlayers_t","fields": [
+{ "fieldname": "m_bSuccess", "fieldtype": "uint8"},
+{ "fieldname": "m_cPlayers", "fieldtype": "int32"}]}
+,{"struct": "UserStatsUnloaded_t","fields": [
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"}]}
+,{"struct": "UserAchievementIconFetched_t","fields": [
+{ "fieldname": "m_nGameID", "fieldtype": "class CGameID"},
+{ "fieldname": "m_rgchAchievementName", "fieldtype": "char [128]"},
+{ "fieldname": "m_bAchieved", "fieldtype": "_Bool"},
+{ "fieldname": "m_nIconHandle", "fieldtype": "int"}]}
+,{"struct": "GlobalAchievementPercentagesReady_t","fields": [
+{ "fieldname": "m_nGameID", "fieldtype": "uint64"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "LeaderboardUGCSet_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_hSteamLeaderboard", "fieldtype": "SteamLeaderboard_t"}]}
+,{"struct": "PS3TrophiesInstalled_t","fields": [
+{ "fieldname": "m_nGameID", "fieldtype": "uint64"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_ulRequiredDiskSpace", "fieldtype": "uint64"}]}
+,{"struct": "GlobalStatsReceived_t","fields": [
+{ "fieldname": "m_nGameID", "fieldtype": "uint64"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "DlcInstalled_t","fields": [
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"}]}
+,{"struct": "RegisterActivationCodeResponse_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum ERegisterActivationCodeResult"},
+{ "fieldname": "m_unPackageRegistered", "fieldtype": "uint32"}]}
+,{"struct": "AppProofOfPurchaseKeyResponse_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nAppID", "fieldtype": "uint32"},
+{ "fieldname": "m_cchKeyLength", "fieldtype": "uint32"},
+{ "fieldname": "m_rgchKey", "fieldtype": "char [240]"}]}
+,{"struct": "FileDetailsResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_ulFileSize", "fieldtype": "uint64"},
+{ "fieldname": "m_FileSHA", "fieldtype": "uint8 [20]"},
+{ "fieldname": "m_unFlags", "fieldtype": "uint32"}]}
+,{"struct": "P2PSessionState_t","fields": [
+{ "fieldname": "m_bConnectionActive", "fieldtype": "uint8"},
+{ "fieldname": "m_bConnecting", "fieldtype": "uint8"},
+{ "fieldname": "m_eP2PSessionError", "fieldtype": "uint8"},
+{ "fieldname": "m_bUsingRelay", "fieldtype": "uint8"},
+{ "fieldname": "m_nBytesQueuedForSend", "fieldtype": "int32"},
+{ "fieldname": "m_nPacketsQueuedForSend", "fieldtype": "int32"},
+{ "fieldname": "m_nRemoteIP", "fieldtype": "uint32"},
+{ "fieldname": "m_nRemotePort", "fieldtype": "uint16"}]}
+,{"struct": "P2PSessionRequest_t","fields": [
+{ "fieldname": "m_steamIDRemote", "fieldtype": "class CSteamID"}]}
+,{"struct": "P2PSessionConnectFail_t","fields": [
+{ "fieldname": "m_steamIDRemote", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_eP2PSessionError", "fieldtype": "uint8"}]}
+,{"struct": "SocketStatusCallback_t","fields": [
+{ "fieldname": "m_hSocket", "fieldtype": "SNetSocket_t"},
+{ "fieldname": "m_hListenSocket", "fieldtype": "SNetListenSocket_t"},
+{ "fieldname": "m_steamIDRemote", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_eSNetSocketState", "fieldtype": "int"}]}
+,{"struct": "ScreenshotReady_t","fields": [
+{ "fieldname": "m_hLocal", "fieldtype": "ScreenshotHandle"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "VolumeHasChanged_t","fields": [
+{ "fieldname": "m_flNewVolume", "fieldtype": "float"}]}
+,{"struct": "MusicPlayerWantsShuffled_t","fields": [
+{ "fieldname": "m_bShuffled", "fieldtype": "_Bool"}]}
+,{"struct": "MusicPlayerWantsLooped_t","fields": [
+{ "fieldname": "m_bLooped", "fieldtype": "_Bool"}]}
+,{"struct": "MusicPlayerWantsVolume_t","fields": [
+{ "fieldname": "m_flNewVolume", "fieldtype": "float"}]}
+,{"struct": "MusicPlayerSelectsQueueEntry_t","fields": [
+{ "fieldname": "nID", "fieldtype": "int"}]}
+,{"struct": "MusicPlayerSelectsPlaylistEntry_t","fields": [
+{ "fieldname": "nID", "fieldtype": "int"}]}
+,{"struct": "MusicPlayerWantsPlayingRepeatStatus_t","fields": [
+{ "fieldname": "m_nPlayingRepeatStatus", "fieldtype": "int"}]}
+,{"struct": "HTTPRequestCompleted_t","fields": [
+{ "fieldname": "m_hRequest", "fieldtype": "HTTPRequestHandle"},
+{ "fieldname": "m_ulContextValue", "fieldtype": "uint64"},
+{ "fieldname": "m_bRequestSuccessful", "fieldtype": "_Bool"},
+{ "fieldname": "m_eStatusCode", "fieldtype": "enum EHTTPStatusCode"},
+{ "fieldname": "m_unBodySize", "fieldtype": "uint32"}]}
+,{"struct": "HTTPRequestHeadersReceived_t","fields": [
+{ "fieldname": "m_hRequest", "fieldtype": "HTTPRequestHandle"},
+{ "fieldname": "m_ulContextValue", "fieldtype": "uint64"}]}
+,{"struct": "HTTPRequestDataReceived_t","fields": [
+{ "fieldname": "m_hRequest", "fieldtype": "HTTPRequestHandle"},
+{ "fieldname": "m_ulContextValue", "fieldtype": "uint64"},
+{ "fieldname": "m_cOffset", "fieldtype": "uint32"},
+{ "fieldname": "m_cBytesReceived", "fieldtype": "uint32"}]}
+,{"struct": "SteamUnifiedMessagesSendMethodResult_t","fields": [
+{ "fieldname": "m_hHandle", "fieldtype": "ClientUnifiedMessageHandle"},
+{ "fieldname": "m_unContext", "fieldtype": "uint64"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_unResponseSize", "fieldtype": "uint32"}]}
+,{"struct": "ControllerAnalogActionData_t","fields": [
+{ "fieldname": "eMode", "fieldtype": "enum EControllerSourceMode"},
+{ "fieldname": "x", "fieldtype": "float"},
+{ "fieldname": "y", "fieldtype": "float"},
+{ "fieldname": "bActive", "fieldtype": "_Bool"}]}
+,{"struct": "ControllerDigitalActionData_t","fields": [
+{ "fieldname": "bState", "fieldtype": "_Bool"},
+{ "fieldname": "bActive", "fieldtype": "_Bool"}]}
+,{"struct": "ControllerMotionData_t","fields": [
+{ "fieldname": "rotQuatX", "fieldtype": "float"},
+{ "fieldname": "rotQuatY", "fieldtype": "float"},
+{ "fieldname": "rotQuatZ", "fieldtype": "float"},
+{ "fieldname": "rotQuatW", "fieldtype": "float"},
+{ "fieldname": "posAccelX", "fieldtype": "float"},
+{ "fieldname": "posAccelY", "fieldtype": "float"},
+{ "fieldname": "posAccelZ", "fieldtype": "float"},
+{ "fieldname": "rotVelX", "fieldtype": "float"},
+{ "fieldname": "rotVelY", "fieldtype": "float"},
+{ "fieldname": "rotVelZ", "fieldtype": "float"}]}
+,{"struct": "SteamUGCDetails_t","fields": [
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_eFileType", "fieldtype": "enum EWorkshopFileType"},
+{ "fieldname": "m_nCreatorAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_nConsumerAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_rgchTitle", "fieldtype": "char [129]"},
+{ "fieldname": "m_rgchDescription", "fieldtype": "char [8000]"},
+{ "fieldname": "m_ulSteamIDOwner", "fieldtype": "uint64"},
+{ "fieldname": "m_rtimeCreated", "fieldtype": "uint32"},
+{ "fieldname": "m_rtimeUpdated", "fieldtype": "uint32"},
+{ "fieldname": "m_rtimeAddedToUserList", "fieldtype": "uint32"},
+{ "fieldname": "m_eVisibility", "fieldtype": "enum ERemoteStoragePublishedFileVisibility"},
+{ "fieldname": "m_bBanned", "fieldtype": "_Bool"},
+{ "fieldname": "m_bAcceptedForUse", "fieldtype": "_Bool"},
+{ "fieldname": "m_bTagsTruncated", "fieldtype": "_Bool"},
+{ "fieldname": "m_rgchTags", "fieldtype": "char [1025]"},
+{ "fieldname": "m_hFile", "fieldtype": "UGCHandle_t"},
+{ "fieldname": "m_hPreviewFile", "fieldtype": "UGCHandle_t"},
+{ "fieldname": "m_pchFileName", "fieldtype": "char [260]"},
+{ "fieldname": "m_nFileSize", "fieldtype": "int32"},
+{ "fieldname": "m_nPreviewFileSize", "fieldtype": "int32"},
+{ "fieldname": "m_rgchURL", "fieldtype": "char [256]"},
+{ "fieldname": "m_unVotesUp", "fieldtype": "uint32"},
+{ "fieldname": "m_unVotesDown", "fieldtype": "uint32"},
+{ "fieldname": "m_flScore", "fieldtype": "float"},
+{ "fieldname": "m_unNumChildren", "fieldtype": "uint32"}]}
+,{"struct": "SteamUGCQueryCompleted_t","fields": [
+{ "fieldname": "m_handle", "fieldtype": "UGCQueryHandle_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_unNumResultsReturned", "fieldtype": "uint32"},
+{ "fieldname": "m_unTotalMatchingResults", "fieldtype": "uint32"},
+{ "fieldname": "m_bCachedData", "fieldtype": "_Bool"}]}
+,{"struct": "SteamUGCRequestUGCDetailsResult_t","fields": [
+{ "fieldname": "m_details", "fieldtype": "struct SteamUGCDetails_t"},
+{ "fieldname": "m_bCachedData", "fieldtype": "_Bool"}]}
+,{"struct": "CreateItemResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_bUserNeedsToAcceptWorkshopLegalAgreement", "fieldtype": "_Bool"}]}
+,{"struct": "SubmitItemUpdateResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_bUserNeedsToAcceptWorkshopLegalAgreement", "fieldtype": "_Bool"}]}
+,{"struct": "DownloadItemResult_t","fields": [
+{ "fieldname": "m_unAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "UserFavoriteItemsListChanged_t","fields": [
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_bWasAddRequest", "fieldtype": "_Bool"}]}
+,{"struct": "SetUserItemVoteResult_t","fields": [
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_bVoteUp", "fieldtype": "_Bool"}]}
+,{"struct": "GetUserItemVoteResult_t","fields": [
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_bVotedUp", "fieldtype": "_Bool"},
+{ "fieldname": "m_bVotedDown", "fieldtype": "_Bool"},
+{ "fieldname": "m_bVoteSkipped", "fieldtype": "_Bool"}]}
+,{"struct": "StartPlaytimeTrackingResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "StopPlaytimeTrackingResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "SteamAppInstalled_t","fields": [
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"}]}
+,{"struct": "SteamAppUninstalled_t","fields": [
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"}]}
+,{"struct": "HTML_BrowserReady_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"}]}
+,{"struct": "HTML_NeedsPaint_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pBGRA", "fieldtype": "const char *"},
+{ "fieldname": "unWide", "fieldtype": "uint32"},
+{ "fieldname": "unTall", "fieldtype": "uint32"},
+{ "fieldname": "unUpdateX", "fieldtype": "uint32"},
+{ "fieldname": "unUpdateY", "fieldtype": "uint32"},
+{ "fieldname": "unUpdateWide", "fieldtype": "uint32"},
+{ "fieldname": "unUpdateTall", "fieldtype": "uint32"},
+{ "fieldname": "unScrollX", "fieldtype": "uint32"},
+{ "fieldname": "unScrollY", "fieldtype": "uint32"},
+{ "fieldname": "flPageScale", "fieldtype": "float"},
+{ "fieldname": "unPageSerial", "fieldtype": "uint32"}]}
+,{"struct": "HTML_StartRequest_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchURL", "fieldtype": "const char *"},
+{ "fieldname": "pchTarget", "fieldtype": "const char *"},
+{ "fieldname": "pchPostData", "fieldtype": "const char *"},
+{ "fieldname": "bIsRedirect", "fieldtype": "_Bool"}]}
+,{"struct": "HTML_CloseBrowser_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"}]}
+,{"struct": "HTML_URLChanged_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchURL", "fieldtype": "const char *"},
+{ "fieldname": "pchPostData", "fieldtype": "const char *"},
+{ "fieldname": "bIsRedirect", "fieldtype": "_Bool"},
+{ "fieldname": "pchPageTitle", "fieldtype": "const char *"},
+{ "fieldname": "bNewNavigation", "fieldtype": "_Bool"}]}
+,{"struct": "HTML_FinishedRequest_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchURL", "fieldtype": "const char *"},
+{ "fieldname": "pchPageTitle", "fieldtype": "const char *"}]}
+,{"struct": "HTML_OpenLinkInNewTab_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchURL", "fieldtype": "const char *"}]}
+,{"struct": "HTML_ChangedTitle_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchTitle", "fieldtype": "const char *"}]}
+,{"struct": "HTML_SearchResults_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "unResults", "fieldtype": "uint32"},
+{ "fieldname": "unCurrentMatch", "fieldtype": "uint32"}]}
+,{"struct": "HTML_CanGoBackAndForward_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "bCanGoBack", "fieldtype": "_Bool"},
+{ "fieldname": "bCanGoForward", "fieldtype": "_Bool"}]}
+,{"struct": "HTML_HorizontalScroll_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "unScrollMax", "fieldtype": "uint32"},
+{ "fieldname": "unScrollCurrent", "fieldtype": "uint32"},
+{ "fieldname": "flPageScale", "fieldtype": "float"},
+{ "fieldname": "bVisible", "fieldtype": "_Bool"},
+{ "fieldname": "unPageSize", "fieldtype": "uint32"}]}
+,{"struct": "HTML_VerticalScroll_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "unScrollMax", "fieldtype": "uint32"},
+{ "fieldname": "unScrollCurrent", "fieldtype": "uint32"},
+{ "fieldname": "flPageScale", "fieldtype": "float"},
+{ "fieldname": "bVisible", "fieldtype": "_Bool"},
+{ "fieldname": "unPageSize", "fieldtype": "uint32"}]}
+,{"struct": "HTML_LinkAtPosition_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "x", "fieldtype": "uint32"},
+{ "fieldname": "y", "fieldtype": "uint32"},
+{ "fieldname": "pchURL", "fieldtype": "const char *"},
+{ "fieldname": "bInput", "fieldtype": "_Bool"},
+{ "fieldname": "bLiveLink", "fieldtype": "_Bool"}]}
+,{"struct": "HTML_JSAlert_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchMessage", "fieldtype": "const char *"}]}
+,{"struct": "HTML_JSConfirm_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchMessage", "fieldtype": "const char *"}]}
+,{"struct": "HTML_FileOpenDialog_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchTitle", "fieldtype": "const char *"},
+{ "fieldname": "pchInitialFile", "fieldtype": "const char *"}]}
+,{"struct": "HTML_NewWindow_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchURL", "fieldtype": "const char *"},
+{ "fieldname": "unX", "fieldtype": "uint32"},
+{ "fieldname": "unY", "fieldtype": "uint32"},
+{ "fieldname": "unWide", "fieldtype": "uint32"},
+{ "fieldname": "unTall", "fieldtype": "uint32"},
+{ "fieldname": "unNewWindow_BrowserHandle", "fieldtype": "HHTMLBrowser"}]}
+,{"struct": "HTML_SetCursor_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "eMouseCursor", "fieldtype": "uint32"}]}
+,{"struct": "HTML_StatusText_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchMsg", "fieldtype": "const char *"}]}
+,{"struct": "HTML_ShowToolTip_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchMsg", "fieldtype": "const char *"}]}
+,{"struct": "HTML_UpdateToolTip_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchMsg", "fieldtype": "const char *"}]}
+,{"struct": "HTML_HideToolTip_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"}]}
+,{"struct": "SteamItemDetails_t","fields": [
+{ "fieldname": "m_itemId", "fieldtype": "SteamItemInstanceID_t"},
+{ "fieldname": "m_iDefinition", "fieldtype": "SteamItemDef_t"},
+{ "fieldname": "m_unQuantity", "fieldtype": "uint16"},
+{ "fieldname": "m_unFlags", "fieldtype": "uint16"}]}
+,{"struct": "SteamInventoryResultReady_t","fields": [
+{ "fieldname": "m_handle", "fieldtype": "SteamInventoryResult_t"},
+{ "fieldname": "m_result", "fieldtype": "enum EResult"}]}
+,{"struct": "SteamInventoryFullUpdate_t","fields": [
+{ "fieldname": "m_handle", "fieldtype": "SteamInventoryResult_t"}]}
+,{"struct": "SteamInventoryEligiblePromoItemDefIDs_t","fields": [
+{ "fieldname": "m_result", "fieldtype": "enum EResult"},
+{ "fieldname": "m_steamID", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_numEligiblePromoItemDefs", "fieldtype": "int"},
+{ "fieldname": "m_bCachedData", "fieldtype": "_Bool"}]}
+,{"struct": "BroadcastUploadStop_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EBroadcastUploadResult"}]}
+,{"struct": "GetVideoURLResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_unVideoAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_rgchURL", "fieldtype": "char [256]"}]}
+,{"struct": "CSteamAPIContext","fields": [
+{ "fieldname": "m_pSteamClient", "fieldtype": "class ISteamClient *"},
+{ "fieldname": "m_pSteamUser", "fieldtype": "class ISteamUser *"},
+{ "fieldname": "m_pSteamFriends", "fieldtype": "class ISteamFriends *"},
+{ "fieldname": "m_pSteamUtils", "fieldtype": "class ISteamUtils *"},
+{ "fieldname": "m_pSteamMatchmaking", "fieldtype": "class ISteamMatchmaking *"},
+{ "fieldname": "m_pSteamUserStats", "fieldtype": "class ISteamUserStats *"},
+{ "fieldname": "m_pSteamApps", "fieldtype": "class ISteamApps *"},
+{ "fieldname": "m_pSteamMatchmakingServers", "fieldtype": "class ISteamMatchmakingServers *"},
+{ "fieldname": "m_pSteamNetworking", "fieldtype": "class ISteamNetworking *"},
+{ "fieldname": "m_pSteamRemoteStorage", "fieldtype": "class ISteamRemoteStorage *"},
+{ "fieldname": "m_pSteamScreenshots", "fieldtype": "class ISteamScreenshots *"},
+{ "fieldname": "m_pSteamHTTP", "fieldtype": "class ISteamHTTP *"},
+{ "fieldname": "m_pSteamUnifiedMessages", "fieldtype": "class ISteamUnifiedMessages *"},
+{ "fieldname": "m_pController", "fieldtype": "class ISteamController *"},
+{ "fieldname": "m_pSteamUGC", "fieldtype": "class ISteamUGC *"},
+{ "fieldname": "m_pSteamAppList", "fieldtype": "class ISteamAppList *"},
+{ "fieldname": "m_pSteamMusic", "fieldtype": "class ISteamMusic *"},
+{ "fieldname": "m_pSteamMusicRemote", "fieldtype": "class ISteamMusicRemote *"},
+{ "fieldname": "m_pSteamHTMLSurface", "fieldtype": "class ISteamHTMLSurface *"},
+{ "fieldname": "m_pSteamInventory", "fieldtype": "class ISteamInventory *"},
+{ "fieldname": "m_pSteamVideo", "fieldtype": "class ISteamVideo *"}]}
+,{"struct": "CCallbackBase","fields": [
+{ "fieldname": "m_nCallbackFlags", "fieldtype": "uint8"},
+{ "fieldname": "m_iCallback", "fieldtype": "int"}]}
+,{"struct": "CCallResult","fields": [
+{ "fieldname": "m_hAPICall", "fieldtype": "SteamAPICall_t"},
+{ "fieldname": "m_pObj", "fieldtype": "T *"},
+{ "fieldname": "m_Func", "fieldtype": "func_t"}]}
+,{"struct": "CCallback","fields": [
+{ "fieldname": "m_pObj", "fieldtype": "T *"},
+{ "fieldname": "m_Func", "fieldtype": "func_t"}]}
+,{"struct": "GSClientApprove_t","fields": [
+{ "fieldname": "m_SteamID", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_OwnerSteamID", "fieldtype": "class CSteamID"}]}
+,{"struct": "GSClientDeny_t","fields": [
+{ "fieldname": "m_SteamID", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_eDenyReason", "fieldtype": "enum EDenyReason"},
+{ "fieldname": "m_rgchOptionalText", "fieldtype": "char [128]"}]}
+,{"struct": "GSClientKick_t","fields": [
+{ "fieldname": "m_SteamID", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_eDenyReason", "fieldtype": "enum EDenyReason"}]}
+,{"struct": "GSClientAchievementStatus_t","fields": [
+{ "fieldname": "m_SteamID", "fieldtype": "uint64"},
+{ "fieldname": "m_pchAchievement", "fieldtype": "char [128]"},
+{ "fieldname": "m_bUnlocked", "fieldtype": "_Bool"}]}
+,{"struct": "GSPolicyResponse_t","fields": [
+{ "fieldname": "m_bSecure", "fieldtype": "uint8"}]}
+,{"struct": "GSGameplayStats_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nRank", "fieldtype": "int32"},
+{ "fieldname": "m_unTotalConnects", "fieldtype": "uint32"},
+{ "fieldname": "m_unTotalMinutesPlayed", "fieldtype": "uint32"}]}
+,{"struct": "GSClientGroupStatus_t","fields": [
+{ "fieldname": "m_SteamIDUser", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_SteamIDGroup", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_bMember", "fieldtype": "_Bool"},
+{ "fieldname": "m_bOfficer", "fieldtype": "_Bool"}]}
+,{"struct": "GSReputation_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_unReputationScore", "fieldtype": "uint32"},
+{ "fieldname": "m_bBanned", "fieldtype": "_Bool"},
+{ "fieldname": "m_unBannedIP", "fieldtype": "uint32"},
+{ "fieldname": "m_usBannedPort", "fieldtype": "uint16"},
+{ "fieldname": "m_ulBannedGameID", "fieldtype": "uint64"},
+{ "fieldname": "m_unBanExpires", "fieldtype": "uint32"}]}
+,{"struct": "AssociateWithClanResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "ComputeNewPlayerCompatibilityResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_cPlayersThatDontLikeCandidate", "fieldtype": "int"},
+{ "fieldname": "m_cPlayersThatCandidateDoesntLike", "fieldtype": "int"},
+{ "fieldname": "m_cClanPlayersThatDontLikeCandidate", "fieldtype": "int"},
+{ "fieldname": "m_SteamIDCandidate", "fieldtype": "class CSteamID"}]}
+,{"struct": "GSStatsReceived_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"}]}
+,{"struct": "GSStatsStored_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"}]}
+,{"struct": "GSStatsUnloaded_t","fields": [
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"}]}
+],
+"methods":[{
+ "classname": "ISteamClient",
+ "methodname": "CreateSteamPipe",
+ "returntype": "HSteamPipe"
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "BReleaseSteamPipe",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "ConnectToGlobalUser",
+ "returntype": "HSteamUser",
+ "params": [
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "CreateLocalUser",
+ "returntype": "HSteamUser",
+ "params": [
+{ "paramname": "phSteamPipe" ,"paramtype": "HSteamPipe *"},
+{ "paramname": "eAccountType" ,"paramtype": "EAccountType"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "ReleaseUser",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "hUser" ,"paramtype": "HSteamUser"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamUser",
+ "returntype": "class ISteamUser *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamGameServer",
+ "returntype": "class ISteamGameServer *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "SetLocalIPBinding",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unIP" ,"paramtype": "uint32"},
+{ "paramname": "usPort" ,"paramtype": "uint16"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamFriends",
+ "returntype": "class ISteamFriends *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamUtils",
+ "returntype": "class ISteamUtils *",
+ "params": [
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamMatchmaking",
+ "returntype": "class ISteamMatchmaking *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamMatchmakingServers",
+ "returntype": "class ISteamMatchmakingServers *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamGenericInterface",
+ "returntype": "void *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamUserStats",
+ "returntype": "class ISteamUserStats *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamGameServerStats",
+ "returntype": "class ISteamGameServerStats *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamApps",
+ "returntype": "class ISteamApps *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamNetworking",
+ "returntype": "class ISteamNetworking *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamRemoteStorage",
+ "returntype": "class ISteamRemoteStorage *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamScreenshots",
+ "returntype": "class ISteamScreenshots *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetIPCCallCount",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "SetWarningMessageHook",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pFunction" ,"paramtype": "SteamAPIWarningMessageHook_t"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "BShutdownIfAllPipesClosed",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamHTTP",
+ "returntype": "class ISteamHTTP *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamUnifiedMessages",
+ "returntype": "class ISteamUnifiedMessages *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamController",
+ "returntype": "class ISteamController *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamUGC",
+ "returntype": "class ISteamUGC *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamAppList",
+ "returntype": "class ISteamAppList *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamMusic",
+ "returntype": "class ISteamMusic *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamMusicRemote",
+ "returntype": "class ISteamMusicRemote *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamHTMLSurface",
+ "returntype": "class ISteamHTMLSurface *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamInventory",
+ "returntype": "class ISteamInventory *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamVideo",
+ "returntype": "class ISteamVideo *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetHSteamUser",
+ "returntype": "HSteamUser"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "BLoggedOn",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetSteamID",
+ "returntype": "class CSteamID"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "InitiateGameConnection",
+ "returntype": "int",
+ "params": [
+{ "paramname": "pAuthBlob" ,"paramtype": "void *"},
+{ "paramname": "cbMaxAuthBlob" ,"paramtype": "int"},
+{ "paramname": "steamIDGameServer" ,"paramtype": "class CSteamID"},
+{ "paramname": "unIPServer" ,"paramtype": "uint32"},
+{ "paramname": "usPortServer" ,"paramtype": "uint16"},
+{ "paramname": "bSecure" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "TerminateGameConnection",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unIPServer" ,"paramtype": "uint32"},
+{ "paramname": "usPortServer" ,"paramtype": "uint16"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "TrackAppUsageEvent",
+ "returntype": "void",
+ "params": [
+{ "paramname": "gameID" ,"paramtype": "class CGameID"},
+{ "paramname": "eAppUsageEvent" ,"paramtype": "int"},
+{ "paramname": "pchExtraInfo" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetUserDataFolder",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchBuffer" ,"paramtype": "char *"},
+{ "paramname": "cubBuffer" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "StartVoiceRecording",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "StopVoiceRecording",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetAvailableVoice",
+ "returntype": "EVoiceResult",
+ "params": [
+{ "paramname": "pcbCompressed" ,"paramtype": "uint32 *"},
+{ "paramname": "pcbUncompressed" ,"paramtype": "uint32 *"},
+{ "paramname": "nUncompressedVoiceDesiredSampleRate" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetVoice",
+ "returntype": "EVoiceResult",
+ "params": [
+{ "paramname": "bWantCompressed" ,"paramtype": "bool"},
+{ "paramname": "pDestBuffer" ,"paramtype": "void *"},
+{ "paramname": "cbDestBufferSize" ,"paramtype": "uint32"},
+{ "paramname": "nBytesWritten" ,"paramtype": "uint32 *"},
+{ "paramname": "bWantUncompressed" ,"paramtype": "bool"},
+{ "paramname": "pUncompressedDestBuffer" ,"paramtype": "void *"},
+{ "paramname": "cbUncompressedDestBufferSize" ,"paramtype": "uint32"},
+{ "paramname": "nUncompressBytesWritten" ,"paramtype": "uint32 *"},
+{ "paramname": "nUncompressedVoiceDesiredSampleRate" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "DecompressVoice",
+ "returntype": "EVoiceResult",
+ "params": [
+{ "paramname": "pCompressed" ,"paramtype": "const void *"},
+{ "paramname": "cbCompressed" ,"paramtype": "uint32"},
+{ "paramname": "pDestBuffer" ,"paramtype": "void *"},
+{ "paramname": "cbDestBufferSize" ,"paramtype": "uint32"},
+{ "paramname": "nBytesWritten" ,"paramtype": "uint32 *"},
+{ "paramname": "nDesiredSampleRate" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetVoiceOptimalSampleRate",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetAuthSessionTicket",
+ "returntype": "HAuthTicket",
+ "params": [
+{ "paramname": "pTicket" ,"paramtype": "void *"},
+{ "paramname": "cbMaxTicket" ,"paramtype": "int"},
+{ "paramname": "pcbTicket" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "BeginAuthSession",
+ "returntype": "EBeginAuthSessionResult",
+ "params": [
+{ "paramname": "pAuthTicket" ,"paramtype": "const void *"},
+{ "paramname": "cbAuthTicket" ,"paramtype": "int"},
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "EndAuthSession",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "CancelAuthTicket",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hAuthTicket" ,"paramtype": "HAuthTicket"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "UserHasLicenseForApp",
+ "returntype": "EUserHasLicenseForAppResult",
+ "params": [
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"},
+{ "paramname": "appID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "BIsBehindNAT",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "AdvertiseGame",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDGameServer" ,"paramtype": "class CSteamID"},
+{ "paramname": "unIPServer" ,"paramtype": "uint32"},
+{ "paramname": "usPortServer" ,"paramtype": "uint16"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "RequestEncryptedAppTicket", "callresult": "EncryptedAppTicketResponse_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pDataToInclude" ,"paramtype": "void *"},
+{ "paramname": "cbDataToInclude" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetEncryptedAppTicket",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pTicket" ,"paramtype": "void *"},
+{ "paramname": "cbMaxTicket" ,"paramtype": "int"},
+{ "paramname": "pcbTicket" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetGameBadgeLevel",
+ "returntype": "int",
+ "params": [
+{ "paramname": "nSeries" ,"paramtype": "int"},
+{ "paramname": "bFoil" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetPlayerSteamLevel",
+ "returntype": "int"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "RequestStoreAuthURL", "callresult": "StoreAuthURLResponse_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pchRedirectURL" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "BIsPhoneVerified",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "BIsTwoFactorEnabled",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "BIsPhoneIdentifying",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "BIsPhoneRequiringVerification",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetPersonaName",
+ "returntype": "const char *"
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "SetPersonaName", "callresult": "SetPersonaNameResponse_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pchPersonaName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetPersonaState",
+ "returntype": "EPersonaState"
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendCount",
+ "returntype": "int",
+ "params": [
+{ "paramname": "iFriendFlags" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendByIndex",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "iFriend" ,"paramtype": "int"},
+{ "paramname": "iFriendFlags" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendRelationship",
+ "returntype": "EFriendRelationship",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendPersonaState",
+ "returntype": "EPersonaState",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendPersonaName",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendGamePlayed",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"},
+{ "paramname": "pFriendGameInfo" ,"out_struct": " " ,"paramtype": "struct FriendGameInfo_t *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendPersonaNameHistory",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"},
+{ "paramname": "iPersonaName" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendSteamLevel",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetPlayerNickname",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "steamIDPlayer" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendsGroupCount",
+ "returntype": "int"
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendsGroupIDByIndex",
+ "returntype": "FriendsGroupID_t",
+ "params": [
+{ "paramname": "iFG" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendsGroupName",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "friendsGroupID" ,"paramtype": "FriendsGroupID_t"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendsGroupMembersCount",
+ "returntype": "int",
+ "params": [
+{ "paramname": "friendsGroupID" ,"paramtype": "FriendsGroupID_t"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendsGroupMembersList",
+ "returntype": "void",
+ "params": [
+{ "paramname": "friendsGroupID" ,"paramtype": "FriendsGroupID_t"},
+{ "paramname": "pOutSteamIDMembers" ,"out_array_call": "nMembersCount,GetFriendsGroupMembersCount,friendsGroupID" ,"paramtype": "class CSteamID *"},
+{ "paramname": "nMembersCount" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "HasFriend",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"},
+{ "paramname": "iFriendFlags" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanCount",
+ "returntype": "int"
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanByIndex",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "iClan" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanName",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanTag",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanActivityCounts",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"},
+{ "paramname": "pnOnline" ,"paramtype": "int *"},
+{ "paramname": "pnInGame" ,"paramtype": "int *"},
+{ "paramname": "pnChatting" ,"paramtype": "int *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "DownloadClanActivityCounts",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "psteamIDClans" ,"array_count": "cClansToRequest" ,"paramtype": "class CSteamID *"},
+{ "paramname": "cClansToRequest" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendCountFromSource",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDSource" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendFromSourceByIndex",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "steamIDSource" ,"paramtype": "class CSteamID"},
+{ "paramname": "iFriend" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "IsUserInSource",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "steamIDSource" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "SetInGameVoiceSpeaking",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "bSpeaking" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "ActivateGameOverlay",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchDialog" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "ActivateGameOverlayToUser",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchDialog" ,"paramtype": "const char *"},
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "ActivateGameOverlayToWebPage",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchURL" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "ActivateGameOverlayToStore",
+ "returntype": "void",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "eFlag" ,"paramtype": "EOverlayToStoreFlag"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "SetPlayedWith",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDUserPlayedWith" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "ActivateGameOverlayInviteDialog",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetSmallFriendAvatar",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetMediumFriendAvatar",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetLargeFriendAvatar",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "RequestUserInformation",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "bRequireNameOnly" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "RequestClanOfficerList", "callresult": "ClanOfficerListResponse_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanOwner",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanOfficerCount",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanOfficerByIndex",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"},
+{ "paramname": "iOfficer" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetUserRestrictions",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "SetRichPresence",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchKey" ,"paramtype": "const char *"},
+{ "paramname": "pchValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "ClearRichPresence",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendRichPresence",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendRichPresenceKeyCount",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendRichPresenceKeyByIndex",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"},
+{ "paramname": "iKey" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "RequestFriendRichPresence",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "InviteUserToGame",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchConnectString" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetCoplayFriendCount",
+ "returntype": "int"
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetCoplayFriend",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "iCoplayFriend" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendCoplayTime",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendCoplayGame",
+ "returntype": "AppId_t",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "JoinClanChatRoom", "callresult": "JoinClanChatRoomCompletionResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "LeaveClanChatRoom",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanChatMemberCount",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetChatMemberByIndex",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"},
+{ "paramname": "iUser" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "SendClanChatMessage",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDClanChat" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchText" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanChatMessage",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDClanChat" ,"paramtype": "class CSteamID"},
+{ "paramname": "iMessage" ,"paramtype": "int"},
+{ "paramname": "prgchText" ,"paramtype": "void *"},
+{ "paramname": "cchTextMax" ,"paramtype": "int"},
+{ "paramname": "peChatEntryType" ,"paramtype": "EChatEntryType *"},
+{ "paramname": "psteamidChatter" ,"out_struct": " " ,"paramtype": "class CSteamID *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "IsClanChatAdmin",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDClanChat" ,"paramtype": "class CSteamID"},
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "IsClanChatWindowOpenInSteam",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDClanChat" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "OpenClanChatWindowInSteam",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDClanChat" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "CloseClanChatWindowInSteam",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDClanChat" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "SetListenForFriendsMessages",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bInterceptEnabled" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "ReplyToFriendMessage",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchMsgToSend" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendMessage",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"},
+{ "paramname": "iMessageID" ,"paramtype": "int"},
+{ "paramname": "pvData" ,"paramtype": "void *"},
+{ "paramname": "cubData" ,"paramtype": "int"},
+{ "paramname": "peChatEntryType" ,"paramtype": "EChatEntryType *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFollowerCount", "callresult": "FriendsGetFollowerCount_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "IsFollowing", "callresult": "FriendsIsFollowing_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "EnumerateFollowingList", "callresult": "FriendsEnumerateFollowingList_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unStartIndex" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetSecondsSinceAppActive",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetSecondsSinceComputerActive",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetConnectedUniverse",
+ "returntype": "EUniverse"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetServerRealTime",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetIPCountry",
+ "returntype": "const char *"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetImageSize",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "iImage" ,"paramtype": "int"},
+{ "paramname": "pnWidth" ,"paramtype": "uint32 *"},
+{ "paramname": "pnHeight" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetImageRGBA",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "iImage" ,"paramtype": "int"},
+{ "paramname": "pubDest" ,"paramtype": "uint8 *"},
+{ "paramname": "nDestBufferSize" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetCSERIPPort",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "unIP" ,"paramtype": "uint32 *"},
+{ "paramname": "usPort" ,"paramtype": "uint16 *"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetCurrentBatteryPower",
+ "returntype": "uint8"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetAppID",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "SetOverlayNotificationPosition",
+ "returntype": "void",
+ "params": [
+{ "paramname": "eNotificationPosition" ,"paramtype": "ENotificationPosition"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "IsAPICallCompleted",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSteamAPICall" ,"paramtype": "SteamAPICall_t"},
+{ "paramname": "pbFailed" ,"paramtype": "bool *"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetAPICallFailureReason",
+ "returntype": "ESteamAPICallFailure",
+ "params": [
+{ "paramname": "hSteamAPICall" ,"paramtype": "SteamAPICall_t"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetAPICallResult",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSteamAPICall" ,"paramtype": "SteamAPICall_t"},
+{ "paramname": "pCallback" ,"paramtype": "void *"},
+{ "paramname": "cubCallback" ,"paramtype": "int"},
+{ "paramname": "iCallbackExpected" ,"paramtype": "int"},
+{ "paramname": "pbFailed" ,"paramtype": "bool *"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetIPCCallCount",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "SetWarningMessageHook",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pFunction" ,"paramtype": "SteamAPIWarningMessageHook_t"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "IsOverlayEnabled",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "BOverlayNeedsPresent",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "CheckFileSignature", "callresult": "CheckFileSignature_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "szFileName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "ShowGamepadTextInput",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "eInputMode" ,"paramtype": "EGamepadTextInputMode"},
+{ "paramname": "eLineInputMode" ,"paramtype": "EGamepadTextInputLineMode"},
+{ "paramname": "pchDescription" ,"paramtype": "const char *"},
+{ "paramname": "unCharMax" ,"paramtype": "uint32"},
+{ "paramname": "pchExistingText" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetEnteredGamepadTextLength",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetEnteredGamepadTextInput",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchText" ,"paramtype": "char *"},
+{ "paramname": "cchText" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetSteamUILanguage",
+ "returntype": "const char *"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "IsSteamRunningInVR",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "SetOverlayNotificationInset",
+ "returntype": "void",
+ "params": [
+{ "paramname": "nHorizontalInset" ,"paramtype": "int"},
+{ "paramname": "nVerticalInset" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "IsSteamInBigPictureMode",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "StartVRDashboard",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetFavoriteGameCount",
+ "returntype": "int"
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetFavoriteGame",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "iGame" ,"paramtype": "int"},
+{ "paramname": "pnAppID" ,"paramtype": "AppId_t *"},
+{ "paramname": "pnIP" ,"paramtype": "uint32 *"},
+{ "paramname": "pnConnPort" ,"paramtype": "uint16 *"},
+{ "paramname": "pnQueryPort" ,"paramtype": "uint16 *"},
+{ "paramname": "punFlags" ,"paramtype": "uint32 *"},
+{ "paramname": "pRTime32LastPlayedOnServer" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "AddFavoriteGame",
+ "returntype": "int",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "nIP" ,"paramtype": "uint32"},
+{ "paramname": "nConnPort" ,"paramtype": "uint16"},
+{ "paramname": "nQueryPort" ,"paramtype": "uint16"},
+{ "paramname": "unFlags" ,"paramtype": "uint32"},
+{ "paramname": "rTime32LastPlayedOnServer" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "RemoveFavoriteGame",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "nIP" ,"paramtype": "uint32"},
+{ "paramname": "nConnPort" ,"paramtype": "uint16"},
+{ "paramname": "nQueryPort" ,"paramtype": "uint16"},
+{ "paramname": "unFlags" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "RequestLobbyList", "callresult": "LobbyMatchList_t",
+ "returntype": "SteamAPICall_t"
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "AddRequestLobbyListStringFilter",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchKeyToMatch" ,"paramtype": "const char *"},
+{ "paramname": "pchValueToMatch" ,"paramtype": "const char *"},
+{ "paramname": "eComparisonType" ,"paramtype": "ELobbyComparison"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "AddRequestLobbyListNumericalFilter",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchKeyToMatch" ,"paramtype": "const char *"},
+{ "paramname": "nValueToMatch" ,"paramtype": "int"},
+{ "paramname": "eComparisonType" ,"paramtype": "ELobbyComparison"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "AddRequestLobbyListNearValueFilter",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchKeyToMatch" ,"paramtype": "const char *"},
+{ "paramname": "nValueToBeCloseTo" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "AddRequestLobbyListFilterSlotsAvailable",
+ "returntype": "void",
+ "params": [
+{ "paramname": "nSlotsAvailable" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "AddRequestLobbyListDistanceFilter",
+ "returntype": "void",
+ "params": [
+{ "paramname": "eLobbyDistanceFilter" ,"paramtype": "ELobbyDistanceFilter"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "AddRequestLobbyListResultCountFilter",
+ "returntype": "void",
+ "params": [
+{ "paramname": "cMaxResults" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "AddRequestLobbyListCompatibleMembersFilter",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyByIndex",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "iLobby" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "CreateLobby", "callresult": "LobbyCreated_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "eLobbyType" ,"paramtype": "ELobbyType"},
+{ "paramname": "cMaxMembers" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "JoinLobby", "callresult": "LobbyEnter_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "LeaveLobby",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "InviteUserToLobby",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "steamIDInvitee" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetNumLobbyMembers",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyMemberByIndex",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "iMember" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyData",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "SetLobbyData",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"},
+{ "paramname": "pchValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyDataCount",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyDataByIndex",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "iLobbyData" ,"paramtype": "int"},
+{ "paramname": "pchKey" ,"paramtype": "char *"},
+{ "paramname": "cchKeyBufferSize" ,"paramtype": "int"},
+{ "paramname": "pchValue" ,"paramtype": "char *"},
+{ "paramname": "cchValueBufferSize" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "DeleteLobbyData",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyMemberData",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "SetLobbyMemberData",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"},
+{ "paramname": "pchValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "SendLobbyChatMsg",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "pvMsgBody" ,"paramtype": "const void *"},
+{ "paramname": "cubMsgBody" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyChatEntry",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "iChatID" ,"paramtype": "int"},
+{ "paramname": "pSteamIDUser" ,"out_struct": " " ,"paramtype": "class CSteamID *"},
+{ "paramname": "pvData" ,"paramtype": "void *"},
+{ "paramname": "cubData" ,"paramtype": "int"},
+{ "paramname": "peChatEntryType" ,"paramtype": "EChatEntryType *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "RequestLobbyData",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "SetLobbyGameServer",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "unGameServerIP" ,"paramtype": "uint32"},
+{ "paramname": "unGameServerPort" ,"paramtype": "uint16"},
+{ "paramname": "steamIDGameServer" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyGameServer",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "punGameServerIP" ,"paramtype": "uint32 *"},
+{ "paramname": "punGameServerPort" ,"paramtype": "uint16 *"},
+{ "paramname": "psteamIDGameServer" ,"out_struct": " " ,"paramtype": "class CSteamID *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "SetLobbyMemberLimit",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "cMaxMembers" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyMemberLimit",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "SetLobbyType",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "eLobbyType" ,"paramtype": "ELobbyType"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "SetLobbyJoinable",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "bLobbyJoinable" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyOwner",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "SetLobbyOwner",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "steamIDNewOwner" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "SetLinkedLobby",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "steamIDLobbyDependent" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServerListResponse",
+ "methodname": "ServerResponded",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HServerListRequest"},
+{ "paramname": "iServer" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServerListResponse",
+ "methodname": "ServerFailedToRespond",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HServerListRequest"},
+{ "paramname": "iServer" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServerListResponse",
+ "methodname": "RefreshComplete",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HServerListRequest"},
+{ "paramname": "response" ,"paramtype": "EMatchMakingServerResponse"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingPingResponse",
+ "methodname": "ServerResponded",
+ "returntype": "void",
+ "params": [
+{ "paramname": "server" ,"paramtype": "class gameserveritem_t &"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingPingResponse",
+ "methodname": "ServerFailedToRespond",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMatchmakingPlayersResponse",
+ "methodname": "AddPlayerToList",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "nScore" ,"paramtype": "int"},
+{ "paramname": "flTimePlayed" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingPlayersResponse",
+ "methodname": "PlayersFailedToRespond",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMatchmakingPlayersResponse",
+ "methodname": "PlayersRefreshComplete",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMatchmakingRulesResponse",
+ "methodname": "RulesResponded",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchRule" ,"paramtype": "const char *"},
+{ "paramname": "pchValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingRulesResponse",
+ "methodname": "RulesFailedToRespond",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMatchmakingRulesResponse",
+ "methodname": "RulesRefreshComplete",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "RequestInternetServerList",
+ "returntype": "HServerListRequest",
+ "params": [
+{ "paramname": "iApp" ,"paramtype": "AppId_t"},
+{ "paramname": "ppchFilters" ,"array_count": "nFilters" ,"paramtype": "struct MatchMakingKeyValuePair_t **"},
+{ "paramname": "nFilters" ,"paramtype": "uint32"},
+{ "paramname": "pRequestServersResponse" ,"paramtype": "class ISteamMatchmakingServerListResponse *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "RequestLANServerList",
+ "returntype": "HServerListRequest",
+ "params": [
+{ "paramname": "iApp" ,"paramtype": "AppId_t"},
+{ "paramname": "pRequestServersResponse" ,"paramtype": "class ISteamMatchmakingServerListResponse *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "RequestFriendsServerList",
+ "returntype": "HServerListRequest",
+ "params": [
+{ "paramname": "iApp" ,"paramtype": "AppId_t"},
+{ "paramname": "ppchFilters" ,"array_count": "nFilters" ,"paramtype": "struct MatchMakingKeyValuePair_t **"},
+{ "paramname": "nFilters" ,"paramtype": "uint32"},
+{ "paramname": "pRequestServersResponse" ,"paramtype": "class ISteamMatchmakingServerListResponse *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "RequestFavoritesServerList",
+ "returntype": "HServerListRequest",
+ "params": [
+{ "paramname": "iApp" ,"paramtype": "AppId_t"},
+{ "paramname": "ppchFilters" ,"array_count": "nFilters" ,"paramtype": "struct MatchMakingKeyValuePair_t **"},
+{ "paramname": "nFilters" ,"paramtype": "uint32"},
+{ "paramname": "pRequestServersResponse" ,"paramtype": "class ISteamMatchmakingServerListResponse *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "RequestHistoryServerList",
+ "returntype": "HServerListRequest",
+ "params": [
+{ "paramname": "iApp" ,"paramtype": "AppId_t"},
+{ "paramname": "ppchFilters" ,"array_count": "nFilters" ,"paramtype": "struct MatchMakingKeyValuePair_t **"},
+{ "paramname": "nFilters" ,"paramtype": "uint32"},
+{ "paramname": "pRequestServersResponse" ,"paramtype": "class ISteamMatchmakingServerListResponse *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "RequestSpectatorServerList",
+ "returntype": "HServerListRequest",
+ "params": [
+{ "paramname": "iApp" ,"paramtype": "AppId_t"},
+{ "paramname": "ppchFilters" ,"array_count": "nFilters" ,"paramtype": "struct MatchMakingKeyValuePair_t **"},
+{ "paramname": "nFilters" ,"paramtype": "uint32"},
+{ "paramname": "pRequestServersResponse" ,"paramtype": "class ISteamMatchmakingServerListResponse *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "ReleaseRequest",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hServerListRequest" ,"paramtype": "HServerListRequest"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "GetServerDetails",
+ "returntype": "class gameserveritem_t *",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HServerListRequest"},
+{ "paramname": "iServer" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "CancelQuery",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HServerListRequest"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "RefreshQuery",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HServerListRequest"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "IsRefreshing",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HServerListRequest"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "GetServerCount",
+ "returntype": "int",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HServerListRequest"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "RefreshServer",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HServerListRequest"},
+{ "paramname": "iServer" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "PingServer",
+ "returntype": "HServerQuery",
+ "params": [
+{ "paramname": "unIP" ,"paramtype": "uint32"},
+{ "paramname": "usPort" ,"paramtype": "uint16"},
+{ "paramname": "pRequestServersResponse" ,"paramtype": "class ISteamMatchmakingPingResponse *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "PlayerDetails",
+ "returntype": "HServerQuery",
+ "params": [
+{ "paramname": "unIP" ,"paramtype": "uint32"},
+{ "paramname": "usPort" ,"paramtype": "uint16"},
+{ "paramname": "pRequestServersResponse" ,"paramtype": "class ISteamMatchmakingPlayersResponse *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "ServerRules",
+ "returntype": "HServerQuery",
+ "params": [
+{ "paramname": "unIP" ,"paramtype": "uint32"},
+{ "paramname": "usPort" ,"paramtype": "uint16"},
+{ "paramname": "pRequestServersResponse" ,"paramtype": "class ISteamMatchmakingRulesResponse *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "CancelServerQuery",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hServerQuery" ,"paramtype": "HServerQuery"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileWrite",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"},
+{ "paramname": "pvData" ,"paramtype": "const void *"},
+{ "paramname": "cubData" ,"paramtype": "int32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileRead",
+ "returntype": "int32",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"},
+{ "paramname": "pvData" ,"paramtype": "void *"},
+{ "paramname": "cubDataToRead" ,"paramtype": "int32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileWriteAsync", "callresult": "RemoteStorageFileWriteAsyncComplete_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"},
+{ "paramname": "pvData" ,"paramtype": "const void *"},
+{ "paramname": "cubData" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileReadAsync", "callresult": "RemoteStorageFileReadAsyncComplete_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"},
+{ "paramname": "nOffset" ,"paramtype": "uint32"},
+{ "paramname": "cubToRead" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileReadAsyncComplete",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hReadCall" ,"paramtype": "SteamAPICall_t"},
+{ "paramname": "pvBuffer" ,"paramtype": "void *"},
+{ "paramname": "cubToRead" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileForget",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileDelete",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileShare", "callresult": "RemoteStorageFileShareResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "SetSyncPlatforms",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"},
+{ "paramname": "eRemoteStoragePlatform" ,"paramtype": "ERemoteStoragePlatform"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileWriteStreamOpen",
+ "returntype": "UGCFileWriteStreamHandle_t",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileWriteStreamWriteChunk",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "writeHandle" ,"paramtype": "UGCFileWriteStreamHandle_t"},
+{ "paramname": "pvData" ,"paramtype": "const void *"},
+{ "paramname": "cubData" ,"paramtype": "int32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileWriteStreamClose",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "writeHandle" ,"paramtype": "UGCFileWriteStreamHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileWriteStreamCancel",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "writeHandle" ,"paramtype": "UGCFileWriteStreamHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileExists",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FilePersisted",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetFileSize",
+ "returntype": "int32",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetFileTimestamp",
+ "returntype": "int64",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetSyncPlatforms",
+ "returntype": "ERemoteStoragePlatform",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetFileCount",
+ "returntype": "int32"
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetFileNameAndSize",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "iFile" ,"paramtype": "int"},
+{ "paramname": "pnFileSizeInBytes" ,"paramtype": "int32 *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetQuota",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pnTotalBytes" ,"paramtype": "uint64 *"},
+{ "paramname": "puAvailableBytes" ,"paramtype": "uint64 *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "IsCloudEnabledForAccount",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "IsCloudEnabledForApp",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "SetCloudEnabledForApp",
+ "returntype": "void",
+ "params": [
+{ "paramname": "bEnabled" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UGCDownload", "callresult": "RemoteStorageDownloadUGCResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "hContent" ,"paramtype": "UGCHandle_t"},
+{ "paramname": "unPriority" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetUGCDownloadProgress",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hContent" ,"paramtype": "UGCHandle_t"},
+{ "paramname": "pnBytesDownloaded" ,"paramtype": "int32 *"},
+{ "paramname": "pnBytesExpected" ,"paramtype": "int32 *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetUGCDetails",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hContent" ,"paramtype": "UGCHandle_t"},
+{ "paramname": "pnAppID" ,"paramtype": "AppId_t *"},
+{ "paramname": "ppchName" ,"out_string": " " ,"paramtype": "char **"},
+{ "paramname": "pnFileSizeInBytes" ,"paramtype": "int32 *"},
+{ "paramname": "pSteamIDOwner" ,"out_struct": " " ,"paramtype": "class CSteamID *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UGCRead",
+ "returntype": "int32",
+ "params": [
+{ "paramname": "hContent" ,"paramtype": "UGCHandle_t"},
+{ "paramname": "pvData" ,"paramtype": "void *"},
+{ "paramname": "cubDataToRead" ,"paramtype": "int32"},
+{ "paramname": "cOffset" ,"paramtype": "uint32"},
+{ "paramname": "eAction" ,"paramtype": "EUGCReadAction"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetCachedUGCCount",
+ "returntype": "int32"
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetCachedUGCHandle",
+ "returntype": "UGCHandle_t",
+ "params": [
+{ "paramname": "iCachedContent" ,"paramtype": "int32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "PublishWorkshopFile", "callresult": "RemoteStoragePublishFileProgress_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"},
+{ "paramname": "pchPreviewFile" ,"paramtype": "const char *"},
+{ "paramname": "nConsumerAppId" ,"paramtype": "AppId_t"},
+{ "paramname": "pchTitle" ,"paramtype": "const char *"},
+{ "paramname": "pchDescription" ,"paramtype": "const char *"},
+{ "paramname": "eVisibility" ,"paramtype": "ERemoteStoragePublishedFileVisibility"},
+{ "paramname": "pTags" ,"paramtype": "struct SteamParamStringArray_t *"},
+{ "paramname": "eWorkshopFileType" ,"paramtype": "EWorkshopFileType"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "CreatePublishedFileUpdateRequest",
+ "returntype": "PublishedFileUpdateHandle_t",
+ "params": [
+{ "paramname": "unPublishedFileId" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UpdatePublishedFileFile",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "updateHandle" ,"paramtype": "PublishedFileUpdateHandle_t"},
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UpdatePublishedFilePreviewFile",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "updateHandle" ,"paramtype": "PublishedFileUpdateHandle_t"},
+{ "paramname": "pchPreviewFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UpdatePublishedFileTitle",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "updateHandle" ,"paramtype": "PublishedFileUpdateHandle_t"},
+{ "paramname": "pchTitle" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UpdatePublishedFileDescription",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "updateHandle" ,"paramtype": "PublishedFileUpdateHandle_t"},
+{ "paramname": "pchDescription" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UpdatePublishedFileVisibility",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "updateHandle" ,"paramtype": "PublishedFileUpdateHandle_t"},
+{ "paramname": "eVisibility" ,"paramtype": "ERemoteStoragePublishedFileVisibility"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UpdatePublishedFileTags",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "updateHandle" ,"paramtype": "PublishedFileUpdateHandle_t"},
+{ "paramname": "pTags" ,"paramtype": "struct SteamParamStringArray_t *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "CommitPublishedFileUpdate", "callresult": "RemoteStorageUpdatePublishedFileResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "updateHandle" ,"paramtype": "PublishedFileUpdateHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetPublishedFileDetails", "callresult": "RemoteStorageGetPublishedFileDetailsResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unPublishedFileId" ,"paramtype": "PublishedFileId_t"},
+{ "paramname": "unMaxSecondsOld" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "DeletePublishedFile", "callresult": "RemoteStorageDeletePublishedFileResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unPublishedFileId" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "EnumerateUserPublishedFiles", "callresult": "RemoteStorageEnumerateUserPublishedFilesResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unStartIndex" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "SubscribePublishedFile", "callresult": "RemoteStorageSubscribePublishedFileResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unPublishedFileId" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "EnumerateUserSubscribedFiles", "callresult": "RemoteStorageEnumerateUserSubscribedFilesResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unStartIndex" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UnsubscribePublishedFile", "callresult": "RemoteStorageUnsubscribePublishedFileResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unPublishedFileId" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UpdatePublishedFileSetChangeDescription",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "updateHandle" ,"paramtype": "PublishedFileUpdateHandle_t"},
+{ "paramname": "pchChangeDescription" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetPublishedItemVoteDetails", "callresult": "RemoteStorageGetPublishedItemVoteDetailsResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unPublishedFileId" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UpdateUserPublishedItemVote", "callresult": "RemoteStorageUpdateUserPublishedItemVoteResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unPublishedFileId" ,"paramtype": "PublishedFileId_t"},
+{ "paramname": "bVoteUp" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetUserPublishedItemVoteDetails", "callresult": "RemoteStorageGetPublishedItemVoteDetailsResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unPublishedFileId" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "EnumerateUserSharedWorkshopFiles", "callresult": "RemoteStorageEnumerateUserPublishedFilesResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamId" ,"paramtype": "class CSteamID"},
+{ "paramname": "unStartIndex" ,"paramtype": "uint32"},
+{ "paramname": "pRequiredTags" ,"paramtype": "struct SteamParamStringArray_t *"},
+{ "paramname": "pExcludedTags" ,"paramtype": "struct SteamParamStringArray_t *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "PublishVideo", "callresult": "RemoteStoragePublishFileProgress_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "eVideoProvider" ,"paramtype": "EWorkshopVideoProvider"},
+{ "paramname": "pchVideoAccount" ,"paramtype": "const char *"},
+{ "paramname": "pchVideoIdentifier" ,"paramtype": "const char *"},
+{ "paramname": "pchPreviewFile" ,"paramtype": "const char *"},
+{ "paramname": "nConsumerAppId" ,"paramtype": "AppId_t"},
+{ "paramname": "pchTitle" ,"paramtype": "const char *"},
+{ "paramname": "pchDescription" ,"paramtype": "const char *"},
+{ "paramname": "eVisibility" ,"paramtype": "ERemoteStoragePublishedFileVisibility"},
+{ "paramname": "pTags" ,"paramtype": "struct SteamParamStringArray_t *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "SetUserPublishedFileAction", "callresult": "RemoteStorageSetUserPublishedFileActionResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unPublishedFileId" ,"paramtype": "PublishedFileId_t"},
+{ "paramname": "eAction" ,"paramtype": "EWorkshopFileAction"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "EnumeratePublishedFilesByUserAction", "callresult": "RemoteStorageEnumeratePublishedFilesByUserActionResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "eAction" ,"paramtype": "EWorkshopFileAction"},
+{ "paramname": "unStartIndex" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "EnumeratePublishedWorkshopFiles", "callresult": "RemoteStorageEnumerateWorkshopFilesResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "eEnumerationType" ,"paramtype": "EWorkshopEnumerationType"},
+{ "paramname": "unStartIndex" ,"paramtype": "uint32"},
+{ "paramname": "unCount" ,"paramtype": "uint32"},
+{ "paramname": "unDays" ,"paramtype": "uint32"},
+{ "paramname": "pTags" ,"paramtype": "struct SteamParamStringArray_t *"},
+{ "paramname": "pUserTags" ,"paramtype": "struct SteamParamStringArray_t *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UGCDownloadToLocation", "callresult": "RemoteStorageDownloadUGCResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "hContent" ,"paramtype": "UGCHandle_t"},
+{ "paramname": "pchLocation" ,"paramtype": "const char *"},
+{ "paramname": "unPriority" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "RequestCurrentStats", "callback": "UserStatsReceived_t",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"paramtype": "int32 *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"paramtype": "float *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "SetStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "nData" ,"paramtype": "int32"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "SetStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "fData" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "UpdateAvgRateStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "flCountThisSession" ,"paramtype": "float"},
+{ "paramname": "dSessionLength" ,"paramtype": "double"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetAchievement",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pbAchieved" ,"paramtype": "bool *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "SetAchievement",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "ClearAchievement",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetAchievementAndUnlockTime",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pbAchieved" ,"paramtype": "bool *"},
+{ "paramname": "punUnlockTime" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "StoreStats",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetAchievementIcon",
+ "returntype": "int",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetAchievementDisplayAttribute",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "IndicateAchievementProgress",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "nCurProgress" ,"paramtype": "uint32"},
+{ "paramname": "nMaxProgress" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetNumAchievements",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetAchievementName",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "iAchievement" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "RequestUserStats", "callresult": "UserStatsReceived_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetUserStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"paramtype": "int32 *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetUserStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"paramtype": "float *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetUserAchievement",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pbAchieved" ,"paramtype": "bool *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetUserAchievementAndUnlockTime",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pbAchieved" ,"paramtype": "bool *"},
+{ "paramname": "punUnlockTime" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "ResetAllStats",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bAchievementsToo" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "FindOrCreateLeaderboard", "callresult": "LeaderboardFindResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pchLeaderboardName" ,"paramtype": "const char *"},
+{ "paramname": "eLeaderboardSortMethod" ,"paramtype": "ELeaderboardSortMethod"},
+{ "paramname": "eLeaderboardDisplayType" ,"paramtype": "ELeaderboardDisplayType"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "FindLeaderboard", "callresult": "LeaderboardFindResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pchLeaderboardName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetLeaderboardName",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "hSteamLeaderboard" ,"paramtype": "SteamLeaderboard_t"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetLeaderboardEntryCount",
+ "returntype": "int",
+ "params": [
+{ "paramname": "hSteamLeaderboard" ,"paramtype": "SteamLeaderboard_t"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetLeaderboardSortMethod",
+ "returntype": "ELeaderboardSortMethod",
+ "params": [
+{ "paramname": "hSteamLeaderboard" ,"paramtype": "SteamLeaderboard_t"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetLeaderboardDisplayType",
+ "returntype": "ELeaderboardDisplayType",
+ "params": [
+{ "paramname": "hSteamLeaderboard" ,"paramtype": "SteamLeaderboard_t"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "DownloadLeaderboardEntries", "callresult": "LeaderboardScoresDownloaded_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "hSteamLeaderboard" ,"paramtype": "SteamLeaderboard_t"},
+{ "paramname": "eLeaderboardDataRequest" ,"paramtype": "ELeaderboardDataRequest"},
+{ "paramname": "nRangeStart" ,"paramtype": "int"},
+{ "paramname": "nRangeEnd" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "DownloadLeaderboardEntriesForUsers", "callresult": "LeaderboardScoresDownloaded_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "hSteamLeaderboard" ,"paramtype": "SteamLeaderboard_t"},
+{ "paramname": "prgUsers" ,"array_count": "cUsers" ,"desc": "Array of users to retrieve" ,"paramtype": "class CSteamID *"},
+{ "paramname": "cUsers" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetDownloadedLeaderboardEntry",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSteamLeaderboardEntries" ,"paramtype": "SteamLeaderboardEntries_t"},
+{ "paramname": "index" ,"paramtype": "int"},
+{ "paramname": "pLeaderboardEntry" ,"paramtype": "struct LeaderboardEntry_t *"},
+{ "paramname": "pDetails" ,"paramtype": "int32 *"},
+{ "paramname": "cDetailsMax" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "UploadLeaderboardScore", "callresult": "LeaderboardScoreUploaded_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "hSteamLeaderboard" ,"paramtype": "SteamLeaderboard_t"},
+{ "paramname": "eLeaderboardUploadScoreMethod" ,"paramtype": "ELeaderboardUploadScoreMethod"},
+{ "paramname": "nScore" ,"paramtype": "int32"},
+{ "paramname": "pScoreDetails" ,"paramtype": "const int32 *"},
+{ "paramname": "cScoreDetailsCount" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "AttachLeaderboardUGC", "callresult": "LeaderboardUGCSet_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "hSteamLeaderboard" ,"paramtype": "SteamLeaderboard_t"},
+{ "paramname": "hUGC" ,"paramtype": "UGCHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetNumberOfCurrentPlayers", "callresult": "NumberOfCurrentPlayers_t",
+ "returntype": "SteamAPICall_t"
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "RequestGlobalAchievementPercentages", "callresult": "GlobalAchievementPercentagesReady_t",
+ "returntype": "SteamAPICall_t"
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetMostAchievedAchievementInfo",
+ "returntype": "int",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "char *"},
+{ "paramname": "unNameBufLen" ,"paramtype": "uint32"},
+{ "paramname": "pflPercent" ,"paramtype": "float *"},
+{ "paramname": "pbAchieved" ,"paramtype": "bool *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetNextMostAchievedAchievementInfo",
+ "returntype": "int",
+ "params": [
+{ "paramname": "iIteratorPrevious" ,"paramtype": "int"},
+{ "paramname": "pchName" ,"paramtype": "char *"},
+{ "paramname": "unNameBufLen" ,"paramtype": "uint32"},
+{ "paramname": "pflPercent" ,"paramtype": "float *"},
+{ "paramname": "pbAchieved" ,"paramtype": "bool *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetAchievementAchievedPercent",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pflPercent" ,"paramtype": "float *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "RequestGlobalStats", "callresult": "GlobalStatsReceived_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nHistoryDays" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetGlobalStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchStatName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"paramtype": "int64 *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetGlobalStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchStatName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"paramtype": "double *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetGlobalStatHistory",
+ "returntype": "int32",
+ "params": [
+{ "paramname": "pchStatName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"array_count": "cubData" ,"paramtype": "int64 *"},
+{ "paramname": "cubData" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetGlobalStatHistory",
+ "returntype": "int32",
+ "params": [
+{ "paramname": "pchStatName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"array_count": "cubData" ,"paramtype": "double *"},
+{ "paramname": "cubData" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "BIsSubscribed",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "BIsLowViolence",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "BIsCybercafe",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "BIsVACBanned",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetCurrentGameLanguage",
+ "returntype": "const char *"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetAvailableGameLanguages",
+ "returntype": "const char *"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "BIsSubscribedApp",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "appID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "BIsDlcInstalled",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "appID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetEarliestPurchaseUnixTime",
+ "returntype": "uint32",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "BIsSubscribedFromFreeWeekend",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetDLCCount",
+ "returntype": "int"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "BGetDLCDataByIndex",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "iDLC" ,"paramtype": "int"},
+{ "paramname": "pAppID" ,"paramtype": "AppId_t *"},
+{ "paramname": "pbAvailable" ,"paramtype": "bool *"},
+{ "paramname": "pchName" ,"paramtype": "char *"},
+{ "paramname": "cchNameBufferSize" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "InstallDLC",
+ "returntype": "void",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "UninstallDLC",
+ "returntype": "void",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "RequestAppProofOfPurchaseKey",
+ "returntype": "void",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetCurrentBetaName",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "char *"},
+{ "paramname": "cchNameBufferSize" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "MarkContentCorrupt",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bMissingFilesOnly" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetInstalledDepots",
+ "returntype": "uint32",
+ "params": [
+{ "paramname": "appID" ,"paramtype": "AppId_t"},
+{ "paramname": "pvecDepots" ,"paramtype": "DepotId_t *"},
+{ "paramname": "cMaxDepots" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetAppInstallDir",
+ "returntype": "uint32",
+ "params": [
+{ "paramname": "appID" ,"paramtype": "AppId_t"},
+{ "paramname": "pchFolder" ,"paramtype": "char *"},
+{ "paramname": "cchFolderBufferSize" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "BIsAppInstalled",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "appID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetAppOwner",
+ "returntype": "class CSteamID"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetLaunchQueryParam",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "pchKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetDlcDownloadProgress",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "punBytesDownloaded" ,"paramtype": "uint64 *"},
+{ "paramname": "punBytesTotal" ,"paramtype": "uint64 *"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetAppBuildId",
+ "returntype": "int"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "RequestAllProofOfPurchaseKeys",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetFileDetails", "callresult": "FileDetailsResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pszFileName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "SendP2PPacket",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDRemote" ,"paramtype": "class CSteamID"},
+{ "paramname": "pubData" ,"paramtype": "const void *"},
+{ "paramname": "cubData" ,"paramtype": "uint32"},
+{ "paramname": "eP2PSendType" ,"paramtype": "EP2PSend"},
+{ "paramname": "nChannel" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "IsP2PPacketAvailable",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pcubMsgSize" ,"paramtype": "uint32 *"},
+{ "paramname": "nChannel" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "ReadP2PPacket",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pubDest" ,"paramtype": "void *"},
+{ "paramname": "cubDest" ,"paramtype": "uint32"},
+{ "paramname": "pcubMsgSize" ,"paramtype": "uint32 *"},
+{ "paramname": "psteamIDRemote" ,"paramtype": "class CSteamID *"},
+{ "paramname": "nChannel" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "AcceptP2PSessionWithUser",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDRemote" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "CloseP2PSessionWithUser",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDRemote" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "CloseP2PChannelWithUser",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDRemote" ,"paramtype": "class CSteamID"},
+{ "paramname": "nChannel" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "GetP2PSessionState",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDRemote" ,"paramtype": "class CSteamID"},
+{ "paramname": "pConnectionState" ,"paramtype": "struct P2PSessionState_t *"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "AllowP2PPacketRelay",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bAllow" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "CreateListenSocket",
+ "returntype": "SNetListenSocket_t",
+ "params": [
+{ "paramname": "nVirtualP2PPort" ,"paramtype": "int"},
+{ "paramname": "nIP" ,"paramtype": "uint32"},
+{ "paramname": "nPort" ,"paramtype": "uint16"},
+{ "paramname": "bAllowUseOfPacketRelay" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "CreateP2PConnectionSocket",
+ "returntype": "SNetSocket_t",
+ "params": [
+{ "paramname": "steamIDTarget" ,"paramtype": "class CSteamID"},
+{ "paramname": "nVirtualPort" ,"paramtype": "int"},
+{ "paramname": "nTimeoutSec" ,"paramtype": "int"},
+{ "paramname": "bAllowUseOfPacketRelay" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "CreateConnectionSocket",
+ "returntype": "SNetSocket_t",
+ "params": [
+{ "paramname": "nIP" ,"paramtype": "uint32"},
+{ "paramname": "nPort" ,"paramtype": "uint16"},
+{ "paramname": "nTimeoutSec" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "DestroySocket",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSocket" ,"paramtype": "SNetSocket_t"},
+{ "paramname": "bNotifyRemoteEnd" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "DestroyListenSocket",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSocket" ,"paramtype": "SNetListenSocket_t"},
+{ "paramname": "bNotifyRemoteEnd" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "SendDataOnSocket",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSocket" ,"paramtype": "SNetSocket_t"},
+{ "paramname": "pubData" ,"paramtype": "void *"},
+{ "paramname": "cubData" ,"paramtype": "uint32"},
+{ "paramname": "bReliable" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "IsDataAvailableOnSocket",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSocket" ,"paramtype": "SNetSocket_t"},
+{ "paramname": "pcubMsgSize" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "RetrieveDataFromSocket",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSocket" ,"paramtype": "SNetSocket_t"},
+{ "paramname": "pubDest" ,"paramtype": "void *"},
+{ "paramname": "cubDest" ,"paramtype": "uint32"},
+{ "paramname": "pcubMsgSize" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "IsDataAvailable",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hListenSocket" ,"paramtype": "SNetListenSocket_t"},
+{ "paramname": "pcubMsgSize" ,"paramtype": "uint32 *"},
+{ "paramname": "phSocket" ,"paramtype": "SNetSocket_t *"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "RetrieveData",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hListenSocket" ,"paramtype": "SNetListenSocket_t"},
+{ "paramname": "pubDest" ,"paramtype": "void *"},
+{ "paramname": "cubDest" ,"paramtype": "uint32"},
+{ "paramname": "pcubMsgSize" ,"paramtype": "uint32 *"},
+{ "paramname": "phSocket" ,"paramtype": "SNetSocket_t *"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "GetSocketInfo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSocket" ,"paramtype": "SNetSocket_t"},
+{ "paramname": "pSteamIDRemote" ,"paramtype": "class CSteamID *"},
+{ "paramname": "peSocketStatus" ,"paramtype": "int *"},
+{ "paramname": "punIPRemote" ,"paramtype": "uint32 *"},
+{ "paramname": "punPortRemote" ,"paramtype": "uint16 *"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "GetListenSocketInfo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hListenSocket" ,"paramtype": "SNetListenSocket_t"},
+{ "paramname": "pnIP" ,"paramtype": "uint32 *"},
+{ "paramname": "pnPort" ,"paramtype": "uint16 *"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "GetSocketConnectionType",
+ "returntype": "ESNetSocketConnectionType",
+ "params": [
+{ "paramname": "hSocket" ,"paramtype": "SNetSocket_t"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "GetMaxPacketSize",
+ "returntype": "int",
+ "params": [
+{ "paramname": "hSocket" ,"paramtype": "SNetSocket_t"}
+ ]
+}
+,{
+ "classname": "ISteamScreenshots",
+ "methodname": "WriteScreenshot",
+ "returntype": "ScreenshotHandle",
+ "params": [
+{ "paramname": "pubRGB" ,"paramtype": "void *"},
+{ "paramname": "cubRGB" ,"paramtype": "uint32"},
+{ "paramname": "nWidth" ,"paramtype": "int"},
+{ "paramname": "nHeight" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamScreenshots",
+ "methodname": "AddScreenshotToLibrary",
+ "returntype": "ScreenshotHandle",
+ "params": [
+{ "paramname": "pchFilename" ,"paramtype": "const char *"},
+{ "paramname": "pchThumbnailFilename" ,"paramtype": "const char *"},
+{ "paramname": "nWidth" ,"paramtype": "int"},
+{ "paramname": "nHeight" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamScreenshots",
+ "methodname": "TriggerScreenshot",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamScreenshots",
+ "methodname": "HookScreenshots",
+ "returntype": "void",
+ "params": [
+{ "paramname": "bHook" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamScreenshots",
+ "methodname": "SetLocation",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hScreenshot" ,"paramtype": "ScreenshotHandle"},
+{ "paramname": "pchLocation" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamScreenshots",
+ "methodname": "TagUser",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hScreenshot" ,"paramtype": "ScreenshotHandle"},
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamScreenshots",
+ "methodname": "TagPublishedFile",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hScreenshot" ,"paramtype": "ScreenshotHandle"},
+{ "paramname": "unPublishedFileID" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamScreenshots",
+ "methodname": "IsScreenshotsHooked",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamScreenshots",
+ "methodname": "AddVRScreenshotToLibrary",
+ "returntype": "ScreenshotHandle",
+ "params": [
+{ "paramname": "eType" ,"paramtype": "EVRScreenshotType"},
+{ "paramname": "pchFilename" ,"paramtype": "const char *"},
+{ "paramname": "pchVRFilename" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMusic",
+ "methodname": "BIsEnabled",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusic",
+ "methodname": "BIsPlaying",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusic",
+ "methodname": "GetPlaybackStatus",
+ "returntype": "AudioPlayback_Status"
+}
+,{
+ "classname": "ISteamMusic",
+ "methodname": "Play",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMusic",
+ "methodname": "Pause",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMusic",
+ "methodname": "PlayPrevious",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMusic",
+ "methodname": "PlayNext",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMusic",
+ "methodname": "SetVolume",
+ "returntype": "void",
+ "params": [
+{ "paramname": "flVolume" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "ISteamMusic",
+ "methodname": "GetVolume",
+ "returntype": "float"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "RegisterSteamMusicRemote",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "DeregisterSteamMusicRemote",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "BIsCurrentMusicRemote",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "BActivationSuccess",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bValue" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "SetDisplayName",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchDisplayName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "SetPNGIcon_64x64",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pvBuffer" ,"paramtype": "void *"},
+{ "paramname": "cbBufferLength" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "EnablePlayPrevious",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bValue" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "EnablePlayNext",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bValue" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "EnableShuffled",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bValue" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "EnableLooped",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bValue" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "EnableQueue",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bValue" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "EnablePlaylists",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bValue" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "UpdatePlaybackStatus",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nStatus" ,"paramtype": "AudioPlayback_Status"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "UpdateShuffled",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bValue" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "UpdateLooped",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bValue" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "UpdateVolume",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "flValue" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "CurrentEntryWillChange",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "CurrentEntryIsAvailable",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bAvailable" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "UpdateCurrentEntryText",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchText" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "UpdateCurrentEntryElapsedSeconds",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nValue" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "UpdateCurrentEntryCoverArt",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pvBuffer" ,"paramtype": "void *"},
+{ "paramname": "cbBufferLength" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "CurrentEntryDidChange",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "QueueWillChange",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "ResetQueueEntries",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "SetQueueEntry",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nID" ,"paramtype": "int"},
+{ "paramname": "nPosition" ,"paramtype": "int"},
+{ "paramname": "pchEntryText" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "SetCurrentQueueEntry",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nID" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "QueueDidChange",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "PlaylistWillChange",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "ResetPlaylistEntries",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "SetPlaylistEntry",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nID" ,"paramtype": "int"},
+{ "paramname": "nPosition" ,"paramtype": "int"},
+{ "paramname": "pchEntryText" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "SetCurrentPlaylistEntry",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nID" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "PlaylistDidChange",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "CreateHTTPRequest",
+ "returntype": "HTTPRequestHandle",
+ "params": [
+{ "paramname": "eHTTPRequestMethod" ,"paramtype": "EHTTPMethod"},
+{ "paramname": "pchAbsoluteURL" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetHTTPRequestContextValue",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "ulContextValue" ,"paramtype": "uint64"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetHTTPRequestNetworkActivityTimeout",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "unTimeoutSeconds" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetHTTPRequestHeaderValue",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pchHeaderName" ,"paramtype": "const char *"},
+{ "paramname": "pchHeaderValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetHTTPRequestGetOrPostParameter",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pchParamName" ,"paramtype": "const char *"},
+{ "paramname": "pchParamValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SendHTTPRequest",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pCallHandle" ,"paramtype": "SteamAPICall_t *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SendHTTPRequestAndStreamResponse",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pCallHandle" ,"paramtype": "SteamAPICall_t *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "DeferHTTPRequest",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "PrioritizeHTTPRequest",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "GetHTTPResponseHeaderSize",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pchHeaderName" ,"paramtype": "const char *"},
+{ "paramname": "unResponseHeaderSize" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "GetHTTPResponseHeaderValue",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pchHeaderName" ,"paramtype": "const char *"},
+{ "paramname": "pHeaderValueBuffer" ,"paramtype": "uint8 *"},
+{ "paramname": "unBufferSize" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "GetHTTPResponseBodySize",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "unBodySize" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "GetHTTPResponseBodyData",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pBodyDataBuffer" ,"paramtype": "uint8 *"},
+{ "paramname": "unBufferSize" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "GetHTTPStreamingResponseBodyData",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "cOffset" ,"paramtype": "uint32"},
+{ "paramname": "pBodyDataBuffer" ,"paramtype": "uint8 *"},
+{ "paramname": "unBufferSize" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "ReleaseHTTPRequest",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "GetHTTPDownloadProgressPct",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pflPercentOut" ,"paramtype": "float *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetHTTPRequestRawPostBody",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pchContentType" ,"paramtype": "const char *"},
+{ "paramname": "pubBody" ,"paramtype": "uint8 *"},
+{ "paramname": "unBodyLen" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "CreateCookieContainer",
+ "returntype": "HTTPCookieContainerHandle",
+ "params": [
+{ "paramname": "bAllowResponsesToModify" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "ReleaseCookieContainer",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hCookieContainer" ,"paramtype": "HTTPCookieContainerHandle"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetCookie",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hCookieContainer" ,"paramtype": "HTTPCookieContainerHandle"},
+{ "paramname": "pchHost" ,"paramtype": "const char *"},
+{ "paramname": "pchUrl" ,"paramtype": "const char *"},
+{ "paramname": "pchCookie" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetHTTPRequestCookieContainer",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "hCookieContainer" ,"paramtype": "HTTPCookieContainerHandle"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetHTTPRequestUserAgentInfo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pchUserAgentInfo" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetHTTPRequestRequiresVerifiedCertificate",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "bRequireVerifiedCertificate" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetHTTPRequestAbsoluteTimeoutMS",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "unMilliseconds" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "GetHTTPRequestWasTimedOut",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pbWasTimedOut" ,"paramtype": "bool *"}
+ ]
+}
+,{
+ "classname": "ISteamUnifiedMessages",
+ "methodname": "SendMethod",
+ "returntype": "ClientUnifiedMessageHandle",
+ "params": [
+{ "paramname": "pchServiceMethod" ,"paramtype": "const char *"},
+{ "paramname": "pRequestBuffer" ,"paramtype": "const void *"},
+{ "paramname": "unRequestBufferSize" ,"paramtype": "uint32"},
+{ "paramname": "unContext" ,"paramtype": "uint64"}
+ ]
+}
+,{
+ "classname": "ISteamUnifiedMessages",
+ "methodname": "GetMethodResponseInfo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hHandle" ,"paramtype": "ClientUnifiedMessageHandle"},
+{ "paramname": "punResponseSize" ,"paramtype": "uint32 *"},
+{ "paramname": "peResult" ,"paramtype": "EResult *"}
+ ]
+}
+,{
+ "classname": "ISteamUnifiedMessages",
+ "methodname": "GetMethodResponseData",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hHandle" ,"paramtype": "ClientUnifiedMessageHandle"},
+{ "paramname": "pResponseBuffer" ,"paramtype": "void *"},
+{ "paramname": "unResponseBufferSize" ,"paramtype": "uint32"},
+{ "paramname": "bAutoRelease" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUnifiedMessages",
+ "methodname": "ReleaseMethod",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hHandle" ,"paramtype": "ClientUnifiedMessageHandle"}
+ ]
+}
+,{
+ "classname": "ISteamUnifiedMessages",
+ "methodname": "SendNotification",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchServiceNotification" ,"paramtype": "const char *"},
+{ "paramname": "pNotificationBuffer" ,"paramtype": "const void *"},
+{ "paramname": "unNotificationBufferSize" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "Init",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "Shutdown",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "RunFrame",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetConnectedControllers",
+ "returntype": "int",
+ "params": [
+{ "paramname": "handlesOut" ,"paramtype": "ControllerHandle_t *"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "ShowBindingPanel",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetActionSetHandle",
+ "returntype": "ControllerActionSetHandle_t",
+ "params": [
+{ "paramname": "pszActionSetName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "ActivateActionSet",
+ "returntype": "void",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "actionSetHandle" ,"paramtype": "ControllerActionSetHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetCurrentActionSet",
+ "returntype": "ControllerActionSetHandle_t",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetDigitalActionHandle",
+ "returntype": "ControllerDigitalActionHandle_t",
+ "params": [
+{ "paramname": "pszActionName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetDigitalActionData",
+ "returntype": "struct ControllerDigitalActionData_t",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "digitalActionHandle" ,"paramtype": "ControllerDigitalActionHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetDigitalActionOrigins",
+ "returntype": "int",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "actionSetHandle" ,"paramtype": "ControllerActionSetHandle_t"},
+{ "paramname": "digitalActionHandle" ,"paramtype": "ControllerDigitalActionHandle_t"},
+{ "paramname": "originsOut" ,"paramtype": "EControllerActionOrigin *"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetAnalogActionHandle",
+ "returntype": "ControllerAnalogActionHandle_t",
+ "params": [
+{ "paramname": "pszActionName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetAnalogActionData",
+ "returntype": "struct ControllerAnalogActionData_t",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "analogActionHandle" ,"paramtype": "ControllerAnalogActionHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetAnalogActionOrigins",
+ "returntype": "int",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "actionSetHandle" ,"paramtype": "ControllerActionSetHandle_t"},
+{ "paramname": "analogActionHandle" ,"paramtype": "ControllerAnalogActionHandle_t"},
+{ "paramname": "originsOut" ,"paramtype": "EControllerActionOrigin *"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "StopAnalogActionMomentum",
+ "returntype": "void",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "eAction" ,"paramtype": "ControllerAnalogActionHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "TriggerHapticPulse",
+ "returntype": "void",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "eTargetPad" ,"paramtype": "ESteamControllerPad"},
+{ "paramname": "usDurationMicroSec" ,"paramtype": "unsigned short"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "TriggerRepeatedHapticPulse",
+ "returntype": "void",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "eTargetPad" ,"paramtype": "ESteamControllerPad"},
+{ "paramname": "usDurationMicroSec" ,"paramtype": "unsigned short"},
+{ "paramname": "usOffMicroSec" ,"paramtype": "unsigned short"},
+{ "paramname": "unRepeat" ,"paramtype": "unsigned short"},
+{ "paramname": "nFlags" ,"paramtype": "unsigned int"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "TriggerVibration",
+ "returntype": "void",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "usLeftSpeed" ,"paramtype": "unsigned short"},
+{ "paramname": "usRightSpeed" ,"paramtype": "unsigned short"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "SetLEDColor",
+ "returntype": "void",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "nColorR" ,"paramtype": "uint8"},
+{ "paramname": "nColorG" ,"paramtype": "uint8"},
+{ "paramname": "nColorB" ,"paramtype": "uint8"},
+{ "paramname": "nFlags" ,"paramtype": "unsigned int"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetGamepadIndexForController",
+ "returntype": "int",
+ "params": [
+{ "paramname": "ulControllerHandle" ,"paramtype": "ControllerHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetControllerForGamepadIndex",
+ "returntype": "ControllerHandle_t",
+ "params": [
+{ "paramname": "nIndex" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetMotionData",
+ "returntype": "struct ControllerMotionData_t",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "ShowDigitalActionOrigins",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "digitalActionHandle" ,"paramtype": "ControllerDigitalActionHandle_t"},
+{ "paramname": "flScale" ,"paramtype": "float"},
+{ "paramname": "flXPosition" ,"paramtype": "float"},
+{ "paramname": "flYPosition" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "ShowAnalogActionOrigins",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "analogActionHandle" ,"paramtype": "ControllerAnalogActionHandle_t"},
+{ "paramname": "flScale" ,"paramtype": "float"},
+{ "paramname": "flXPosition" ,"paramtype": "float"},
+{ "paramname": "flYPosition" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetStringForActionOrigin",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "eOrigin" ,"paramtype": "EControllerActionOrigin"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetGlyphForActionOrigin",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "eOrigin" ,"paramtype": "EControllerActionOrigin"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "CreateQueryUserUGCRequest",
+ "returntype": "UGCQueryHandle_t",
+ "params": [
+{ "paramname": "unAccountID" ,"paramtype": "AccountID_t"},
+{ "paramname": "eListType" ,"paramtype": "EUserUGCList"},
+{ "paramname": "eMatchingUGCType" ,"paramtype": "EUGCMatchingUGCType"},
+{ "paramname": "eSortOrder" ,"paramtype": "EUserUGCListSortOrder"},
+{ "paramname": "nCreatorAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "nConsumerAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "unPage" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "CreateQueryAllUGCRequest",
+ "returntype": "UGCQueryHandle_t",
+ "params": [
+{ "paramname": "eQueryType" ,"paramtype": "EUGCQuery"},
+{ "paramname": "eMatchingeMatchingUGCTypeFileType" ,"paramtype": "EUGCMatchingUGCType"},
+{ "paramname": "nCreatorAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "nConsumerAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "unPage" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "CreateQueryUGCDetailsRequest",
+ "returntype": "UGCQueryHandle_t",
+ "params": [
+{ "paramname": "pvecPublishedFileID" ,"paramtype": "PublishedFileId_t *"},
+{ "paramname": "unNumPublishedFileIDs" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SendQueryUGCRequest", "callresult": "SteamUGCQueryCompleted_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetQueryUGCResult",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"},
+{ "paramname": "pDetails" ,"paramtype": "struct SteamUGCDetails_t *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetQueryUGCPreviewURL",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"},
+{ "paramname": "pchURL" ,"out_string_count": "cchURLSize" ,"paramtype": "char *"},
+{ "paramname": "cchURLSize" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetQueryUGCMetadata",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"},
+{ "paramname": "pchMetadata" ,"out_string_count": "cchMetadatasize" ,"paramtype": "char *"},
+{ "paramname": "cchMetadatasize" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetQueryUGCChildren",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"},
+{ "paramname": "pvecPublishedFileID" ,"paramtype": "PublishedFileId_t *"},
+{ "paramname": "cMaxEntries" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetQueryUGCStatistic",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"},
+{ "paramname": "eStatType" ,"paramtype": "EItemStatistic"},
+{ "paramname": "pStatValue" ,"paramtype": "uint64 *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetQueryUGCNumAdditionalPreviews",
+ "returntype": "uint32",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetQueryUGCAdditionalPreview",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"},
+{ "paramname": "previewIndex" ,"paramtype": "uint32"},
+{ "paramname": "pchURLOrVideoID" ,"out_string_count": "cchURLSize" ,"paramtype": "char *"},
+{ "paramname": "cchURLSize" ,"paramtype": "uint32"},
+{ "paramname": "pchOriginalFileName" ,"out_string_count": "cchURLSize" ,"paramtype": "char *"},
+{ "paramname": "cchOriginalFileNameSize" ,"paramtype": "uint32"},
+{ "paramname": "pPreviewType" ,"paramtype": "EItemPreviewType *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetQueryUGCNumKeyValueTags",
+ "returntype": "uint32",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetQueryUGCKeyValueTag",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"},
+{ "paramname": "keyValueTagIndex" ,"paramtype": "uint32"},
+{ "paramname": "pchKey" ,"out_string_count": "cchKeySize" ,"paramtype": "char *"},
+{ "paramname": "cchKeySize" ,"paramtype": "uint32"},
+{ "paramname": "pchValue" ,"out_string_count": "cchValueSize" ,"paramtype": "char *"},
+{ "paramname": "cchValueSize" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "ReleaseQueryUGCRequest",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "AddRequiredTag",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "pTagName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "AddExcludedTag",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "pTagName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetReturnOnlyIDs",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "bReturnOnlyIDs" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetReturnKeyValueTags",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "bReturnKeyValueTags" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetReturnLongDescription",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "bReturnLongDescription" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetReturnMetadata",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "bReturnMetadata" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetReturnChildren",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "bReturnChildren" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetReturnAdditionalPreviews",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "bReturnAdditionalPreviews" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetReturnTotalOnly",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "bReturnTotalOnly" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetLanguage",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "pchLanguage" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetAllowCachedResponse",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "unMaxAgeSeconds" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetCloudFileNameFilter",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "pMatchCloudFileName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetMatchAnyTag",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "bMatchAnyTag" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetSearchText",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "pSearchText" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetRankedByTrendDays",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "unDays" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "AddRequiredKeyValueTag",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "pKey" ,"paramtype": "const char *"},
+{ "paramname": "pValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "RequestUGCDetails",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"},
+{ "paramname": "unMaxAgeSeconds" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "CreateItem", "callresult": "CreateItemResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nConsumerAppId" ,"paramtype": "AppId_t"},
+{ "paramname": "eFileType" ,"paramtype": "EWorkshopFileType"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "StartItemUpdate",
+ "returntype": "UGCUpdateHandle_t",
+ "params": [
+{ "paramname": "nConsumerAppId" ,"paramtype": "AppId_t"},
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetItemTitle",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pchTitle" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetItemDescription",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pchDescription" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetItemUpdateLanguage",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pchLanguage" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetItemMetadata",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pchMetaData" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetItemVisibility",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "eVisibility" ,"paramtype": "ERemoteStoragePublishedFileVisibility"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetItemTags",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "updateHandle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pTags" ,"paramtype": "const struct SteamParamStringArray_t *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetItemContent",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pszContentFolder" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetItemPreview",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pszPreviewFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "RemoveItemKeyValueTags",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "AddItemKeyValueTag",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"},
+{ "paramname": "pchValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "AddItemPreviewFile",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pszPreviewFile" ,"paramtype": "const char *"},
+{ "paramname": "type" ,"paramtype": "EItemPreviewType"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "AddItemPreviewVideo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pszVideoID" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "UpdateItemPreviewFile",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"},
+{ "paramname": "pszPreviewFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "UpdateItemPreviewVideo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"},
+{ "paramname": "pszVideoID" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "RemoveItemPreview",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SubmitItemUpdate", "callresult": "SubmitItemUpdateResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pchChangeNote" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetItemUpdateProgress",
+ "returntype": "EItemUpdateStatus",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "punBytesProcessed" ,"paramtype": "uint64 *"},
+{ "paramname": "punBytesTotal" ,"paramtype": "uint64 *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetUserItemVote", "callresult": "SetUserItemVoteResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"},
+{ "paramname": "bVoteUp" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetUserItemVote", "callresult": "GetUserItemVoteResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "AddItemToFavorites", "callresult": "UserFavoriteItemsListChanged_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nAppId" ,"paramtype": "AppId_t"},
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "RemoveItemFromFavorites", "callresult": "UserFavoriteItemsListChanged_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nAppId" ,"paramtype": "AppId_t"},
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SubscribeItem", "callresult": "RemoteStorageSubscribePublishedFileResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "UnsubscribeItem", "callresult": "RemoteStorageUnsubscribePublishedFileResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetNumSubscribedItems",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetSubscribedItems",
+ "returntype": "uint32",
+ "params": [
+{ "paramname": "pvecPublishedFileID" ,"paramtype": "PublishedFileId_t *"},
+{ "paramname": "cMaxEntries" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetItemState",
+ "returntype": "uint32",
+ "params": [
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetItemInstallInfo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"},
+{ "paramname": "punSizeOnDisk" ,"paramtype": "uint64 *"},
+{ "paramname": "pchFolder" ,"out_string_count": "cchFolderSize" ,"paramtype": "char *"},
+{ "paramname": "cchFolderSize" ,"paramtype": "uint32"},
+{ "paramname": "punTimeStamp" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetItemDownloadInfo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"},
+{ "paramname": "punBytesDownloaded" ,"paramtype": "uint64 *"},
+{ "paramname": "punBytesTotal" ,"paramtype": "uint64 *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "DownloadItem",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"},
+{ "paramname": "bHighPriority" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "BInitWorkshopForGameServer",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "unWorkshopDepotID" ,"paramtype": "DepotId_t"},
+{ "paramname": "pszFolder" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SuspendDownloads",
+ "returntype": "void",
+ "params": [
+{ "paramname": "bSuspend" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "StartPlaytimeTracking", "callresult": "StartPlaytimeTrackingResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pvecPublishedFileID" ,"paramtype": "PublishedFileId_t *"},
+{ "paramname": "unNumPublishedFileIDs" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "StopPlaytimeTracking", "callresult": "StopPlaytimeTrackingResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pvecPublishedFileID" ,"paramtype": "PublishedFileId_t *"},
+{ "paramname": "unNumPublishedFileIDs" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "StopPlaytimeTrackingForAllItems", "callresult": "StopPlaytimeTrackingResult_t",
+ "returntype": "SteamAPICall_t"
+}
+,{
+ "classname": "ISteamAppList",
+ "methodname": "GetNumInstalledApps",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamAppList",
+ "methodname": "GetInstalledApps",
+ "returntype": "uint32",
+ "params": [
+{ "paramname": "pvecAppID" ,"paramtype": "AppId_t *"},
+{ "paramname": "unMaxAppIDs" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamAppList",
+ "methodname": "GetAppName",
+ "returntype": "int",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "pchName" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "cchNameMax" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamAppList",
+ "methodname": "GetAppInstallDir",
+ "returntype": "int",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "pchDirectory" ,"paramtype": "char *"},
+{ "paramname": "cchNameMax" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamAppList",
+ "methodname": "GetAppBuildId",
+ "returntype": "int",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "DestructISteamHTMLSurface",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "Init",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "Shutdown",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "CreateBrowser", "callresult": "HTML_BrowserReady_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pchUserAgent" ,"paramtype": "const char *"},
+{ "paramname": "pchUserCSS" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "RemoveBrowser",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "LoadURL",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "pchURL" ,"paramtype": "const char *"},
+{ "paramname": "pchPostData" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "SetSize",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "unWidth" ,"paramtype": "uint32"},
+{ "paramname": "unHeight" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "StopLoad",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "Reload",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "GoBack",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "GoForward",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "AddHeader",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"},
+{ "paramname": "pchValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "ExecuteJavascript",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "pchScript" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "MouseUp",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "eMouseButton" ,"paramtype": "ISteamHTMLSurface::EHTMLMouseButton"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "MouseDown",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "eMouseButton" ,"paramtype": "ISteamHTMLSurface::EHTMLMouseButton"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "MouseDoubleClick",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "eMouseButton" ,"paramtype": "ISteamHTMLSurface::EHTMLMouseButton"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "MouseMove",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "x" ,"paramtype": "int"},
+{ "paramname": "y" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "MouseWheel",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "nDelta" ,"paramtype": "int32"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "KeyDown",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "nNativeKeyCode" ,"paramtype": "uint32"},
+{ "paramname": "eHTMLKeyModifiers" ,"paramtype": "ISteamHTMLSurface::EHTMLKeyModifiers"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "KeyUp",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "nNativeKeyCode" ,"paramtype": "uint32"},
+{ "paramname": "eHTMLKeyModifiers" ,"paramtype": "ISteamHTMLSurface::EHTMLKeyModifiers"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "KeyChar",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "cUnicodeChar" ,"paramtype": "uint32"},
+{ "paramname": "eHTMLKeyModifiers" ,"paramtype": "ISteamHTMLSurface::EHTMLKeyModifiers"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "SetHorizontalScroll",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "nAbsolutePixelScroll" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "SetVerticalScroll",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "nAbsolutePixelScroll" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "SetKeyFocus",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "bHasKeyFocus" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "ViewSource",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "CopyToClipboard",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "PasteFromClipboard",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "Find",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "pchSearchStr" ,"paramtype": "const char *"},
+{ "paramname": "bCurrentlyInFind" ,"paramtype": "bool"},
+{ "paramname": "bReverse" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "StopFind",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "GetLinkAtPosition",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "x" ,"paramtype": "int"},
+{ "paramname": "y" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "SetCookie",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchHostname" ,"paramtype": "const char *"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"},
+{ "paramname": "pchValue" ,"paramtype": "const char *"},
+{ "paramname": "pchPath" ,"paramtype": "const char *"},
+{ "paramname": "nExpires" ,"paramtype": "RTime32"},
+{ "paramname": "bSecure" ,"paramtype": "bool"},
+{ "paramname": "bHTTPOnly" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "SetPageScaleFactor",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "flZoom" ,"paramtype": "float"},
+{ "paramname": "nPointX" ,"paramtype": "int"},
+{ "paramname": "nPointY" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "SetBackgroundMode",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "bBackgroundMode" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "AllowStartRequest",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "bAllowed" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "JSDialogResponse",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "bResult" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GetResultStatus", "desc": "Find out the status of an asynchronous inventory result handle.",
+ "returntype": "EResult",
+ "params": [
+{ "paramname": "resultHandle" ,"paramtype": "SteamInventoryResult_t"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GetResultItems", "desc": "Copies the contents of a result set into a flat array. The specific contents of the result set depend on which query which was used.",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "resultHandle" ,"paramtype": "SteamInventoryResult_t"},
+{ "paramname": "pOutItemsArray" ,"out_array_count": "punOutItemsArraySize" ,"desc": "Output array" ,"paramtype": "struct SteamItemDetails_t *"},
+{ "paramname": "punOutItemsArraySize" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GetResultTimestamp", "desc": "Returns the server time at which the result was generated. Compare against the value of IClientUtils::GetServerRealTime() to determine age.",
+ "returntype": "uint32",
+ "params": [
+{ "paramname": "resultHandle" ,"paramtype": "SteamInventoryResult_t"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "CheckResultSteamID", "desc": "Returns true if the result belongs to the target steam ID or false if the result does not. This is important when using DeserializeResult to verify that a remote player is not pretending to have a different users inventory.",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "resultHandle" ,"paramtype": "SteamInventoryResult_t"},
+{ "paramname": "steamIDExpected" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "DestroyResult", "desc": "Destroys a result handle and frees all associated memory.",
+ "returntype": "void",
+ "params": [
+{ "paramname": "resultHandle" ,"paramtype": "SteamInventoryResult_t"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GetAllItems", "desc": "Captures the entire state of the current users Steam inventory.",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GetItemsByID", "desc": "Captures the state of a subset of the current users Steam inventory identified by an array of item instance IDs.",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "pInstanceIDs" ,"array_count": "unCountInstanceIDs" ,"paramtype": "const SteamItemInstanceID_t *"},
+{ "paramname": "unCountInstanceIDs" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "SerializeResult",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "resultHandle" ,"paramtype": "SteamInventoryResult_t"},
+{ "paramname": "pOutBuffer" ,"out_buffer_count": "punOutBufferSize" ,"paramtype": "void *"},
+{ "paramname": "punOutBufferSize" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "DeserializeResult",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pOutResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "pBuffer" ,"buffer_count": "punOutBufferSize" ,"paramtype": "const void *"},
+{ "paramname": "unBufferSize" ,"paramtype": "uint32"},
+{ "paramname": "bRESERVED_MUST_BE_FALSE" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GenerateItems",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "pArrayItemDefs" ,"array_count": "unArrayLength" ,"paramtype": "const SteamItemDef_t *"},
+{ "paramname": "punArrayQuantity" ,"array_count": "unArrayLength" ,"paramtype": "const uint32 *"},
+{ "paramname": "unArrayLength" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GrantPromoItems", "desc": "GrantPromoItems() checks the list of promotional items for which the user may be eligible and grants the items (one time only).",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "AddPromoItem",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "itemDef" ,"paramtype": "SteamItemDef_t"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "AddPromoItems",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "pArrayItemDefs" ,"array_count": "unArrayLength" ,"paramtype": "const SteamItemDef_t *"},
+{ "paramname": "unArrayLength" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "ConsumeItem", "desc": "ConsumeItem() removes items from the inventory permanently.",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "itemConsume" ,"paramtype": "SteamItemInstanceID_t"},
+{ "paramname": "unQuantity" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "ExchangeItems",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "pArrayGenerate" ,"array_count": "unArrayGenerateLength" ,"paramtype": "const SteamItemDef_t *"},
+{ "paramname": "punArrayGenerateQuantity" ,"array_count": "unArrayGenerateLength" ,"paramtype": "const uint32 *"},
+{ "paramname": "unArrayGenerateLength" ,"paramtype": "uint32"},
+{ "paramname": "pArrayDestroy" ,"array_count": "unArrayDestroyLength" ,"paramtype": "const SteamItemInstanceID_t *"},
+{ "paramname": "punArrayDestroyQuantity" ,"array_count": "unArrayDestroyLength" ,"paramtype": "const uint32 *"},
+{ "paramname": "unArrayDestroyLength" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "TransferItemQuantity",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "itemIdSource" ,"paramtype": "SteamItemInstanceID_t"},
+{ "paramname": "unQuantity" ,"paramtype": "uint32"},
+{ "paramname": "itemIdDest" ,"paramtype": "SteamItemInstanceID_t"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "SendItemDropHeartbeat", "desc": "Deprecated method. Playtime accounting is performed on the Steam servers.",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "TriggerItemDrop", "desc": "Playtime credit must be consumed and turned into item drops by your game.",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "dropListDefinition" ,"paramtype": "SteamItemDef_t"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "TradeItems",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "steamIDTradePartner" ,"paramtype": "class CSteamID"},
+{ "paramname": "pArrayGive" ,"array_count": "nArrayGiveLength" ,"paramtype": "const SteamItemInstanceID_t *"},
+{ "paramname": "pArrayGiveQuantity" ,"array_count": "nArrayGiveLength" ,"paramtype": "const uint32 *"},
+{ "paramname": "nArrayGiveLength" ,"paramtype": "uint32"},
+{ "paramname": "pArrayGet" ,"array_count": "nArrayGetLength" ,"paramtype": "const SteamItemInstanceID_t *"},
+{ "paramname": "pArrayGetQuantity" ,"array_count": "nArrayGetLength" ,"paramtype": "const uint32 *"},
+{ "paramname": "nArrayGetLength" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "LoadItemDefinitions", "desc": "LoadItemDefinitions triggers the automatic load and refresh of item definitions.",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GetItemDefinitionIDs",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pItemDefIDs" ,"out_array_count": "punItemDefIDsArraySize" ,"desc": "List of item definition IDs" ,"paramtype": "SteamItemDef_t *"},
+{ "paramname": "punItemDefIDsArraySize" ,"desc": "Size of array is passed in and actual size used is returned in this param" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GetItemDefinitionProperty",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "iDefinition" ,"paramtype": "SteamItemDef_t"},
+{ "paramname": "pchPropertyName" ,"paramtype": "const char *"},
+{ "paramname": "pchValueBuffer" ,"out_string_count": "punValueBufferSizeOut" ,"paramtype": "char *"},
+{ "paramname": "punValueBufferSizeOut" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "RequestEligiblePromoItemDefinitionsIDs", "callresult": "SteamInventoryEligiblePromoItemDefIDs_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GetEligiblePromoItemDefinitionIDs",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"},
+{ "paramname": "pItemDefIDs" ,"out_array_count": "punItemDefIDsArraySize" ,"desc": "List of item definition IDs" ,"paramtype": "SteamItemDef_t *"},
+{ "paramname": "punItemDefIDsArraySize" ,"desc": "Size of array is passed in and actual size used is returned in this param" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamVideo",
+ "methodname": "GetVideoURL",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unVideoAppID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamVideo",
+ "methodname": "IsBroadcasting",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pnNumViewers" ,"paramtype": "int *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "InitGameServer",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "unIP" ,"paramtype": "uint32"},
+{ "paramname": "usGamePort" ,"paramtype": "uint16"},
+{ "paramname": "usQueryPort" ,"paramtype": "uint16"},
+{ "paramname": "unFlags" ,"paramtype": "uint32"},
+{ "paramname": "nGameAppId" ,"paramtype": "AppId_t"},
+{ "paramname": "pchVersionString" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetProduct",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pszProduct" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetGameDescription",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pszGameDescription" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetModDir",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pszModDir" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetDedicatedServer",
+ "returntype": "void",
+ "params": [
+{ "paramname": "bDedicated" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "LogOn",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pszToken" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "LogOnAnonymous",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "LogOff",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "BLoggedOn",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "BSecure",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "GetSteamID",
+ "returntype": "class CSteamID"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "WasRestartRequested",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetMaxPlayerCount",
+ "returntype": "void",
+ "params": [
+{ "paramname": "cPlayersMax" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetBotPlayerCount",
+ "returntype": "void",
+ "params": [
+{ "paramname": "cBotplayers" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetServerName",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pszServerName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetMapName",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pszMapName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetPasswordProtected",
+ "returntype": "void",
+ "params": [
+{ "paramname": "bPasswordProtected" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetSpectatorPort",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unSpectatorPort" ,"paramtype": "uint16"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetSpectatorServerName",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pszSpectatorServerName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "ClearAllKeyValues",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetKeyValue",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pKey" ,"paramtype": "const char *"},
+{ "paramname": "pValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetGameTags",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchGameTags" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetGameData",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchGameData" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetRegion",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pszRegion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SendUserConnectAndAuthenticate",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "unIPClient" ,"paramtype": "uint32"},
+{ "paramname": "pvAuthBlob" ,"paramtype": "const void *"},
+{ "paramname": "cubAuthBlobSize" ,"paramtype": "uint32"},
+{ "paramname": "pSteamIDUser" ,"paramtype": "class CSteamID *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "CreateUnauthenticatedUserConnection",
+ "returntype": "class CSteamID"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SendUserDisconnect",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "BUpdateUserData",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchPlayerName" ,"paramtype": "const char *"},
+{ "paramname": "uScore" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "GetAuthSessionTicket",
+ "returntype": "HAuthTicket",
+ "params": [
+{ "paramname": "pTicket" ,"paramtype": "void *"},
+{ "paramname": "cbMaxTicket" ,"paramtype": "int"},
+{ "paramname": "pcbTicket" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "BeginAuthSession",
+ "returntype": "EBeginAuthSessionResult",
+ "params": [
+{ "paramname": "pAuthTicket" ,"paramtype": "const void *"},
+{ "paramname": "cbAuthTicket" ,"paramtype": "int"},
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "EndAuthSession",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "CancelAuthTicket",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hAuthTicket" ,"paramtype": "HAuthTicket"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "UserHasLicenseForApp",
+ "returntype": "EUserHasLicenseForAppResult",
+ "params": [
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"},
+{ "paramname": "appID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "RequestUserGroupStatus",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "steamIDGroup" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "GetGameplayStats",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "GetServerReputation", "callresult": "GSReputation_t",
+ "returntype": "SteamAPICall_t"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "GetPublicIP",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "HandleIncomingPacket",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pData" ,"paramtype": "const void *"},
+{ "paramname": "cbData" ,"paramtype": "int"},
+{ "paramname": "srcIP" ,"paramtype": "uint32"},
+{ "paramname": "srcPort" ,"paramtype": "uint16"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "GetNextOutgoingPacket",
+ "returntype": "int",
+ "params": [
+{ "paramname": "pOut" ,"paramtype": "void *"},
+{ "paramname": "cbMaxOut" ,"paramtype": "int"},
+{ "paramname": "pNetAdr" ,"paramtype": "uint32 *"},
+{ "paramname": "pPort" ,"paramtype": "uint16 *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "EnableHeartbeats",
+ "returntype": "void",
+ "params": [
+{ "paramname": "bActive" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetHeartbeatInterval",
+ "returntype": "void",
+ "params": [
+{ "paramname": "iHeartbeatInterval" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "ForceHeartbeat",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "AssociateWithClan", "callresult": "AssociateWithClanResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "ComputeNewPlayerCompatibility", "callresult": "ComputeNewPlayerCompatibilityResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamIDNewPlayer" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "RequestUserStats", "callresult": "GSStatsReceived_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "GetUserStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"paramtype": "int32 *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "GetUserStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"paramtype": "float *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "GetUserAchievement",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pbAchieved" ,"paramtype": "bool *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "SetUserStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "nData" ,"paramtype": "int32"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "SetUserStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "fData" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "UpdateUserAvgRateStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "flCountThisSession" ,"paramtype": "float"},
+{ "paramname": "dSessionLength" ,"paramtype": "double"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "SetUserAchievement",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "ClearUserAchievement",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "StoreUserStats", "callresult": "GSStatsStored_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"}
+ ]
+}
+]
+} \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_139/steam_api_flat.h b/lsteamclient/steamworks_sdk_139/steam_api_flat.h
new file mode 100644
index 00000000..ea76dc80
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/steam_api_flat.h
@@ -0,0 +1,808 @@
+//====== Copyright (c) 1996-2014, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Header for flatted SteamAPI. Use this for binding to other languages.
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+#ifndef STEAMAPIFLAT_H
+#define STEAMAPIFLAT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <stdint.h>
+
+
+typedef unsigned char uint8;
+typedef unsigned char uint8;
+typedef signed char int8;
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+typedef int64 lint64;
+typedef uint64 ulint64;
+typedef uint8 Salt_t[8];
+typedef uint64 GID_t;
+typedef uint64 JobID_t;
+typedef GID_t TxnID_t;
+typedef uint32 PackageId_t;
+typedef uint32 BundleId_t;
+typedef uint32 AppId_t;
+typedef uint64 AssetClassId_t;
+typedef uint32 PhysicalItemId_t;
+typedef uint32 DepotId_t;
+typedef uint32 RTime32;
+typedef uint32 CellID_t;
+typedef uint64 SteamAPICall_t;
+typedef uint32 AccountID_t;
+typedef uint32 PartnerId_t;
+typedef uint64 ManifestId_t;
+typedef uint32 HAuthTicket;
+typedef void * BREAKPAD_HANDLE;
+typedef char compile_time_assert_type[1];
+typedef int32 HSteamPipe;
+typedef int32 HSteamUser;
+typedef int16 FriendsGroupID_t;
+typedef void * HServerListRequest;
+typedef int HServerQuery;
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+typedef uint64 UGCFileWriteStreamHandle_t;
+typedef char compile_time_assert_type[1];
+typedef uint64 SteamLeaderboard_t;
+typedef uint64 SteamLeaderboardEntries_t;
+typedef uint32 SNetSocket_t;
+typedef uint32 SNetListenSocket_t;
+typedef uint32 ScreenshotHandle;
+typedef uint32 HTTPRequestHandle;
+typedef uint32 HTTPCookieContainerHandle;
+typedef uint64 ClientUnifiedMessageHandle;
+typedef uint64 ControllerHandle_t;
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+typedef uint32 HHTMLBrowser;
+typedef uint64 SteamItemInstanceID_t;
+typedef int32 SteamItemDef_t;
+typedef int32 SteamInventoryResult_t;
+// OpenVR Constants
+int const_k_iSteamUserCallbacks = 100;
+int const_k_iSteamGameServerCallbacks = 200;
+int const_k_iSteamFriendsCallbacks = 300;
+int const_k_iSteamBillingCallbacks = 400;
+int const_k_iSteamMatchmakingCallbacks = 500;
+int const_k_iSteamContentServerCallbacks = 600;
+int const_k_iSteamUtilsCallbacks = 700;
+int const_k_iClientFriendsCallbacks = 800;
+int const_k_iClientUserCallbacks = 900;
+int const_k_iSteamAppsCallbacks = 1000;
+int const_k_iSteamUserStatsCallbacks = 1100;
+int const_k_iSteamNetworkingCallbacks = 1200;
+int const_k_iClientRemoteStorageCallbacks = 1300;
+int const_k_iClientDepotBuilderCallbacks = 1400;
+int const_k_iSteamGameServerItemsCallbacks = 1500;
+int const_k_iClientUtilsCallbacks = 1600;
+int const_k_iSteamGameCoordinatorCallbacks = 1700;
+int const_k_iSteamGameServerStatsCallbacks = 1800;
+int const_k_iSteam2AsyncCallbacks = 1900;
+int const_k_iSteamGameStatsCallbacks = 2000;
+int const_k_iClientHTTPCallbacks = 2100;
+int const_k_iClientScreenshotsCallbacks = 2200;
+int const_k_iSteamScreenshotsCallbacks = 2300;
+int const_k_iClientAudioCallbacks = 2400;
+int const_k_iClientUnifiedMessagesCallbacks = 2500;
+int const_k_iSteamStreamLauncherCallbacks = 2600;
+int const_k_iClientControllerCallbacks = 2700;
+int const_k_iSteamControllerCallbacks = 2800;
+int const_k_iClientParentalSettingsCallbacks = 2900;
+int const_k_iClientDeviceAuthCallbacks = 3000;
+int const_k_iClientNetworkDeviceManagerCallbacks = 3100;
+int const_k_iClientMusicCallbacks = 3200;
+int const_k_iClientRemoteClientManagerCallbacks = 3300;
+int const_k_iClientUGCCallbacks = 3400;
+int const_k_iSteamStreamClientCallbacks = 3500;
+int const_k_IClientProductBuilderCallbacks = 3600;
+int const_k_iClientShortcutsCallbacks = 3700;
+int const_k_iClientRemoteControlManagerCallbacks = 3800;
+int const_k_iSteamAppListCallbacks = 3900;
+int const_k_iSteamMusicCallbacks = 4000;
+int const_k_iSteamMusicRemoteCallbacks = 4100;
+int const_k_iClientVRCallbacks = 4200;
+int const_k_iClientGameNotificationCallbacks = 4300;
+int const_k_iSteamGameNotificationCallbacks = 4400;
+int const_k_iSteamHTMLSurfaceCallbacks = 4500;
+int const_k_iClientVideoCallbacks = 4600;
+int const_k_iClientInventoryCallbacks = 4700;
+int const_k_iClientBluetoothManagerCallbacks = 4800;
+int const_k_cchPersonaNameMax = 128;
+int const_k_cwchPersonaNameMax = 32;
+int const_k_cchMaxRichPresenceKeys = 20;
+int const_k_cchMaxRichPresenceKeyLength = 64;
+int const_k_cchMaxRichPresenceValueLength = 256;
+int const_k_cchStatNameMax = 128;
+int const_k_cchLeaderboardNameMax = 128;
+int const_k_cLeaderboardDetailsMax = 64;
+unsigned long const_k_InvalidUnifiedMessageHandle = 0;
+unsigned long const_k_SteamItemInstanceIDInvalid = 0xffffffff;
+int const_k_SteamInventoryResultInvalid = -1;
+
+
+
+// OpenVR Enums
+// OpenVR Structs
+
+
+
+S_API HSteamPipe SteamAPI_ISteamClient_CreateSteamPipe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamClient_BReleaseSteamPipe(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_ConnectToGlobalUser(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_CreateLocalUser(intptr_t instancePtr, HSteamPipe * phSteamPipe, EAccountType eAccountType);
+S_API void SteamAPI_ISteamClient_ReleaseUser(intptr_t instancePtr, HSteamPipe hSteamPipe, HSteamUser hUser);
+S_API class ISteamUser * SteamAPI_ISteamClient_GetISteamUser(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServer * SteamAPI_ISteamClient_GetISteamGameServer(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_SetLocalIPBinding(intptr_t instancePtr, uint32 unIP, uint16 usPort);
+S_API class ISteamFriends * SteamAPI_ISteamClient_GetISteamFriends(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUtils * SteamAPI_ISteamClient_GetISteamUtils(intptr_t instancePtr, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmaking * SteamAPI_ISteamClient_GetISteamMatchmaking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmakingServers * SteamAPI_ISteamClient_GetISteamMatchmakingServers(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void * SteamAPI_ISteamClient_GetISteamGenericInterface(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUserStats * SteamAPI_ISteamClient_GetISteamUserStats(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServerStats * SteamAPI_ISteamClient_GetISteamGameServerStats(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamApps * SteamAPI_ISteamClient_GetISteamApps(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamNetworking * SteamAPI_ISteamClient_GetISteamNetworking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamRemoteStorage * SteamAPI_ISteamClient_GetISteamRemoteStorage(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamScreenshots * SteamAPI_ISteamClient_GetISteamScreenshots(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API uint32 SteamAPI_ISteamClient_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamClient_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(intptr_t instancePtr);
+S_API class ISteamHTTP * SteamAPI_ISteamClient_GetISteamHTTP(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUnifiedMessages * SteamAPI_ISteamClient_GetISteamUnifiedMessages(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamController * SteamAPI_ISteamClient_GetISteamController(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUGC * SteamAPI_ISteamClient_GetISteamUGC(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamAppList * SteamAPI_ISteamClient_GetISteamAppList(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusic * SteamAPI_ISteamClient_GetISteamMusic(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusicRemote * SteamAPI_ISteamClient_GetISteamMusicRemote(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamHTMLSurface * SteamAPI_ISteamClient_GetISteamHTMLSurface(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamInventory * SteamAPI_ISteamClient_GetISteamInventory(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamVideo * SteamAPI_ISteamClient_GetISteamVideo(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API HSteamUser SteamAPI_ISteamUser_GetHSteamUser(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BLoggedOn(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamUser_GetSteamID(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUser_InitiateGameConnection(intptr_t instancePtr, void * pAuthBlob, int cbMaxAuthBlob, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure);
+S_API void SteamAPI_ISteamUser_TerminateGameConnection(intptr_t instancePtr, uint32 unIPServer, uint16 usPortServer);
+S_API void SteamAPI_ISteamUser_TrackAppUsageEvent(intptr_t instancePtr, class CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo);
+S_API bool SteamAPI_ISteamUser_GetUserDataFolder(intptr_t instancePtr, char * pchBuffer, int cubBuffer);
+S_API void SteamAPI_ISteamUser_StartVoiceRecording(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_StopVoiceRecording(intptr_t instancePtr);
+S_API EVoiceResult SteamAPI_ISteamUser_GetAvailableVoice(intptr_t instancePtr, uint32 * pcbCompressed, uint32 * pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_GetVoice(intptr_t instancePtr, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate);
+S_API EVoiceResult SteamAPI_ISteamUser_DecompressVoice(intptr_t instancePtr, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate);
+S_API uint32 SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(intptr_t instancePtr);
+S_API HAuthTicket SteamAPI_ISteamUser_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamUser_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamUser_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamUser_BIsBehindNAT(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_AdvertiseGame(intptr_t instancePtr, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestEncryptedAppTicket(intptr_t instancePtr, void * pDataToInclude, int cbDataToInclude);
+S_API bool SteamAPI_ISteamUser_GetEncryptedAppTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API int SteamAPI_ISteamUser_GetGameBadgeLevel(intptr_t instancePtr, int nSeries, bool bFoil);
+S_API int SteamAPI_ISteamUser_GetPlayerSteamLevel(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestStoreAuthURL(intptr_t instancePtr, const char * pchRedirectURL);
+S_API bool SteamAPI_ISteamUser_BIsPhoneVerified(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsTwoFactorEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsPhoneIdentifying(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsPhoneRequiringVerification(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetPersonaName(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_SetPersonaName(intptr_t instancePtr, const char * pchPersonaName);
+S_API EPersonaState SteamAPI_ISteamFriends_GetPersonaState(intptr_t instancePtr);
+S_API int SteamAPI_ISteamFriends_GetFriendCount(intptr_t instancePtr, int iFriendFlags);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendByIndex(intptr_t instancePtr, int iFriend, int iFriendFlags);
+S_API EFriendRelationship SteamAPI_ISteamFriends_GetFriendRelationship(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API EPersonaState SteamAPI_ISteamFriends_GetFriendPersonaState(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaName(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_GetFriendGamePlayed(intptr_t instancePtr, class CSteamID steamIDFriend, struct FriendGameInfo_t * pFriendGameInfo);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(intptr_t instancePtr, class CSteamID steamIDFriend, int iPersonaName);
+S_API int SteamAPI_ISteamFriends_GetFriendSteamLevel(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetPlayerNickname(intptr_t instancePtr, class CSteamID steamIDPlayer);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupCount(intptr_t instancePtr);
+S_API FriendsGroupID_t SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(intptr_t instancePtr, int iFG);
+S_API const char * SteamAPI_ISteamFriends_GetFriendsGroupName(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API void SteamAPI_ISteamFriends_GetFriendsGroupMembersList(intptr_t instancePtr, FriendsGroupID_t friendsGroupID, class CSteamID * pOutSteamIDMembers, int nMembersCount);
+S_API bool SteamAPI_ISteamFriends_HasFriend(intptr_t instancePtr, class CSteamID steamIDFriend, int iFriendFlags);
+S_API int SteamAPI_ISteamFriends_GetClanCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetClanByIndex(intptr_t instancePtr, int iClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanName(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanTag(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_GetClanActivityCounts(intptr_t instancePtr, class CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_DownloadClanActivityCounts(intptr_t instancePtr, class CSteamID * psteamIDClans, int cClansToRequest);
+S_API int SteamAPI_ISteamFriends_GetFriendCountFromSource(intptr_t instancePtr, class CSteamID steamIDSource);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(intptr_t instancePtr, class CSteamID steamIDSource, int iFriend);
+S_API bool SteamAPI_ISteamFriends_IsUserInSource(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDSource);
+S_API void SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(intptr_t instancePtr, class CSteamID steamIDUser, bool bSpeaking);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlay(intptr_t instancePtr, const char * pchDialog);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToUser(intptr_t instancePtr, const char * pchDialog, class CSteamID steamID);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(intptr_t instancePtr, const char * pchURL);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToStore(intptr_t instancePtr, AppId_t nAppID, EOverlayToStoreFlag eFlag);
+S_API void SteamAPI_ISteamFriends_SetPlayedWith(intptr_t instancePtr, class CSteamID steamIDUserPlayedWith);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API int SteamAPI_ISteamFriends_GetSmallFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetMediumFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetLargeFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_RequestUserInformation(intptr_t instancePtr, class CSteamID steamIDUser, bool bRequireNameOnly);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_RequestClanOfficerList(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOwner(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanOfficerCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOfficerByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iOfficer);
+S_API uint32 SteamAPI_ISteamFriends_GetUserRestrictions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamFriends_SetRichPresence(intptr_t instancePtr, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamFriends_ClearRichPresence(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchKey);
+S_API int SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(intptr_t instancePtr, class CSteamID steamIDFriend, int iKey);
+S_API void SteamAPI_ISteamFriends_RequestFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_InviteUserToGame(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchConnectString);
+S_API int SteamAPI_ISteamFriends_GetCoplayFriendCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetCoplayFriend(intptr_t instancePtr, int iCoplayFriend);
+S_API int SteamAPI_ISteamFriends_GetFriendCoplayTime(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API AppId_t SteamAPI_ISteamFriends_GetFriendCoplayGame(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_JoinClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_LeaveClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanChatMemberCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetChatMemberByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iUser);
+S_API bool SteamAPI_ISteamFriends_SendClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, const char * pchText);
+S_API int SteamAPI_ISteamFriends_GetClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, class CSteamID * psteamidChatter);
+S_API bool SteamAPI_ISteamFriends_IsClanChatAdmin(intptr_t instancePtr, class CSteamID steamIDClanChat, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_SetListenForFriendsMessages(intptr_t instancePtr, bool bInterceptEnabled);
+S_API bool SteamAPI_ISteamFriends_ReplyToFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchMsgToSend);
+S_API int SteamAPI_ISteamFriends_GetFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_GetFollowerCount(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_IsFollowing(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_EnumerateFollowingList(intptr_t instancePtr, uint32 unStartIndex);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceAppActive(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(intptr_t instancePtr);
+S_API EUniverse SteamAPI_ISteamUtils_GetConnectedUniverse(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetServerRealTime(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUtils_GetIPCountry(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetImageSize(intptr_t instancePtr, int iImage, uint32 * pnWidth, uint32 * pnHeight);
+S_API bool SteamAPI_ISteamUtils_GetImageRGBA(intptr_t instancePtr, int iImage, uint8 * pubDest, int nDestBufferSize);
+S_API bool SteamAPI_ISteamUtils_GetCSERIPPort(intptr_t instancePtr, uint32 * unIP, uint16 * usPort);
+S_API uint8 SteamAPI_ISteamUtils_GetCurrentBatteryPower(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetAppID(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationPosition(intptr_t instancePtr, ENotificationPosition eNotificationPosition);
+S_API bool SteamAPI_ISteamUtils_IsAPICallCompleted(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, bool * pbFailed);
+S_API ESteamAPICallFailure SteamAPI_ISteamUtils_GetAPICallFailureReason(intptr_t instancePtr, SteamAPICall_t hSteamAPICall);
+S_API bool SteamAPI_ISteamUtils_GetAPICallResult(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed);
+S_API uint32 SteamAPI_ISteamUtils_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamUtils_IsOverlayEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_BOverlayNeedsPresent(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUtils_CheckFileSignature(intptr_t instancePtr, const char * szFileName);
+S_API bool SteamAPI_ISteamUtils_ShowGamepadTextInput(intptr_t instancePtr, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText);
+S_API uint32 SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(intptr_t instancePtr, char * pchText, uint32 cchText);
+S_API const char * SteamAPI_ISteamUtils_GetSteamUILanguage(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_IsSteamRunningInVR(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationInset(intptr_t instancePtr, int nHorizontalInset, int nVerticalInset);
+S_API bool SteamAPI_ISteamUtils_IsSteamInBigPictureMode(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_StartVRDashboard(intptr_t instancePtr);
+S_API int SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMatchmaking_GetFavoriteGame(intptr_t instancePtr, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer);
+S_API int SteamAPI_ISteamMatchmaking_AddFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer);
+S_API bool SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_RequestLobbyList(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(intptr_t instancePtr, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToBeCloseTo);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(intptr_t instancePtr, int nSlotsAvailable);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(intptr_t instancePtr, ELobbyDistanceFilter eLobbyDistanceFilter);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(intptr_t instancePtr, int cMaxResults);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyByIndex(intptr_t instancePtr, int iLobby);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_CreateLobby(intptr_t instancePtr, ELobbyType eLobbyType, int cMaxMembers);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_JoinLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_LeaveLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_InviteUserToLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDInvitee);
+S_API int SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iMember);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyDataCount(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize);
+S_API bool SteamAPI_ISteamMatchmaking_DeleteLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDUser, const char * pchKey);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(intptr_t instancePtr, class CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(intptr_t instancePtr, class CSteamID steamIDLobby, int iChatID, class CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API bool SteamAPI_ISteamMatchmaking_RequestLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, class CSteamID steamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, class CSteamID * psteamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby, int cMaxMembers);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyType(intptr_t instancePtr, class CSteamID steamIDLobby, ELobbyType eLobbyType);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyJoinable(intptr_t instancePtr, class CSteamID steamIDLobby, bool bLobbyJoinable);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDNewOwner);
+S_API bool SteamAPI_ISteamMatchmaking_SetLinkedLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDLobbyDependent);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(intptr_t instancePtr, HServerListRequest hRequest, EMatchMakingServerResponse response);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(intptr_t instancePtr, class gameserveritem_t & server);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(intptr_t instancePtr, const char * pchName, int nScore, float flTimePlayed);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(intptr_t instancePtr, const char * pchRule, const char * pchValue);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(intptr_t instancePtr);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestLANServerList(intptr_t instancePtr, AppId_t iApp, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_ReleaseRequest(intptr_t instancePtr, HServerListRequest hServerListRequest);
+S_API class gameserveritem_t * SteamAPI_ISteamMatchmakingServers_GetServerDetails(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API bool SteamAPI_ISteamMatchmakingServers_IsRefreshing(intptr_t instancePtr, HServerListRequest hRequest);
+S_API int SteamAPI_ISteamMatchmakingServers_GetServerCount(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshServer(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PingServer(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPingResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PlayerDetails(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPlayersResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_ServerRules(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingRulesResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelServerQuery(intptr_t instancePtr, HServerQuery hServerQuery);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWrite(intptr_t instancePtr, const char * pchFile, const void * pvData, int32 cubData);
+S_API int32 SteamAPI_ISteamRemoteStorage_FileRead(intptr_t instancePtr, const char * pchFile, void * pvData, int32 cubDataToRead);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileWriteAsync(intptr_t instancePtr, const char * pchFile, const void * pvData, uint32 cubData);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileReadAsync(intptr_t instancePtr, const char * pchFile, uint32 nOffset, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileReadAsyncComplete(intptr_t instancePtr, SteamAPICall_t hReadCall, void * pvBuffer, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileForget(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileDelete(intptr_t instancePtr, const char * pchFile);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileShare(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(intptr_t instancePtr, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform);
+S_API UGCFileWriteStreamHandle_t SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileExists(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FilePersisted(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileSize(intptr_t instancePtr, const char * pchFile);
+S_API int64 SteamAPI_ISteamRemoteStorage_GetFileTimestamp(intptr_t instancePtr, const char * pchFile);
+S_API ERemoteStoragePlatform SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileCount(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(intptr_t instancePtr, int iFile, int32 * pnFileSizeInBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_GetQuota(intptr_t instancePtr, uint64 * pnTotalBytes, uint64 * puAvailableBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(intptr_t instancePtr);
+S_API void SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(intptr_t instancePtr, bool bEnabled);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownload(intptr_t instancePtr, UGCHandle_t hContent, uint32 unPriority);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(intptr_t instancePtr, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDetails(intptr_t instancePtr, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, class CSteamID * pSteamIDOwner);
+S_API int32 SteamAPI_ISteamRemoteStorage_UGCRead(intptr_t instancePtr, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(intptr_t instancePtr);
+S_API UGCHandle_t SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(intptr_t instancePtr, int32 iCachedContent);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(intptr_t instancePtr, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType);
+S_API PublishedFileUpdateHandle_t SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_DeletePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(intptr_t instancePtr, class CSteamID steamId, uint32 unStartIndex, struct SteamParamStringArray_t * pRequiredTags, struct SteamParamStringArray_t * pExcludedTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishVideo(intptr_t instancePtr, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(intptr_t instancePtr, EWorkshopFileAction eAction, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(intptr_t instancePtr, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, struct SteamParamStringArray_t * pTags, struct SteamParamStringArray_t * pUserTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(intptr_t instancePtr, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority);
+S_API bool SteamAPI_ISteamUserStats_RequestCurrentStats(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUserStats_GetStat(intptr_t instancePtr, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetStat0(intptr_t instancePtr, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_SetStat(intptr_t instancePtr, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamUserStats_SetStat0(intptr_t instancePtr, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamUserStats_UpdateAvgRateStat(intptr_t instancePtr, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamUserStats_GetAchievement(intptr_t instancePtr, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_SetAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_ClearAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(intptr_t instancePtr, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_StoreStats(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetAchievementIcon(intptr_t instancePtr, const char * pchName);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(intptr_t instancePtr, const char * pchName, const char * pchKey);
+S_API bool SteamAPI_ISteamUserStats_IndicateAchievementProgress(intptr_t instancePtr, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress);
+S_API uint32 SteamAPI_ISteamUserStats_GetNumAchievements(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementName(intptr_t instancePtr, uint32 iAchievement);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_ResetAllStats(intptr_t instancePtr, bool bAchievementsToo);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName);
+S_API const char * SteamAPI_ISteamUserStats_GetLeaderboardName(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API int SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardSortMethod SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardDisplayType SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, class CSteamID * prgUsers, int cUsers);
+S_API bool SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(intptr_t instancePtr, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, struct LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_UploadLeaderboardScore(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_AttachLeaderboardUGC(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(intptr_t instancePtr, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API int SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(intptr_t instancePtr, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(intptr_t instancePtr, const char * pchName, float * pflPercent);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalStats(intptr_t instancePtr, int nHistoryDays);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat(intptr_t instancePtr, const char * pchStatName, int64 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat0(intptr_t instancePtr, const char * pchStatName, double * pData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory(intptr_t instancePtr, const char * pchStatName, int64 * pData, uint32 cubData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory0(intptr_t instancePtr, const char * pchStatName, double * pData, uint32 cubData);
+S_API bool SteamAPI_ISteamApps_BIsSubscribed(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsLowViolence(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsCybercafe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsVACBanned(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetCurrentGameLanguage(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetAvailableGameLanguages(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedApp(intptr_t instancePtr, AppId_t appID);
+S_API bool SteamAPI_ISteamApps_BIsDlcInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint32 SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(intptr_t instancePtr);
+S_API int SteamAPI_ISteamApps_GetDLCCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BGetDLCDataByIndex(intptr_t instancePtr, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize);
+S_API void SteamAPI_ISteamApps_InstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_UninstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_GetCurrentBetaName(intptr_t instancePtr, char * pchName, int cchNameBufferSize);
+S_API bool SteamAPI_ISteamApps_MarkContentCorrupt(intptr_t instancePtr, bool bMissingFilesOnly);
+S_API uint32 SteamAPI_ISteamApps_GetInstalledDepots(intptr_t instancePtr, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots);
+S_API uint32 SteamAPI_ISteamApps_GetAppInstallDir(intptr_t instancePtr, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize);
+S_API bool SteamAPI_ISteamApps_BIsAppInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint64 SteamAPI_ISteamApps_GetAppOwner(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetLaunchQueryParam(intptr_t instancePtr, const char * pchKey);
+S_API bool SteamAPI_ISteamApps_GetDlcDownloadProgress(intptr_t instancePtr, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API int SteamAPI_ISteamApps_GetAppBuildId(intptr_t instancePtr);
+S_API void SteamAPI_ISteamApps_RequestAllProofOfPurchaseKeys(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamApps_GetFileDetails(intptr_t instancePtr, const char * pszFileName);
+S_API bool SteamAPI_ISteamNetworking_SendP2PPacket(intptr_t instancePtr, class CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_IsP2PPacketAvailable(intptr_t instancePtr, uint32 * pcubMsgSize, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_ReadP2PPacket(intptr_t instancePtr, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, class CSteamID * psteamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(intptr_t instancePtr, class CSteamID steamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_GetP2PSessionState(intptr_t instancePtr, class CSteamID steamIDRemote, struct P2PSessionState_t * pConnectionState);
+S_API bool SteamAPI_ISteamNetworking_AllowP2PPacketRelay(intptr_t instancePtr, bool bAllow);
+S_API SNetListenSocket_t SteamAPI_ISteamNetworking_CreateListenSocket(intptr_t instancePtr, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(intptr_t instancePtr, class CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateConnectionSocket(intptr_t instancePtr, uint32 nIP, uint16 nPort, int nTimeoutSec);
+S_API bool SteamAPI_ISteamNetworking_DestroySocket(intptr_t instancePtr, SNetSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_DestroyListenSocket(intptr_t instancePtr, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_SendDataOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_RetrieveDataFromSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailable(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_RetrieveData(intptr_t instancePtr, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_GetSocketInfo(intptr_t instancePtr, SNetSocket_t hSocket, class CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote);
+S_API bool SteamAPI_ISteamNetworking_GetListenSocketInfo(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort);
+S_API ESNetSocketConnectionType SteamAPI_ISteamNetworking_GetSocketConnectionType(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API int SteamAPI_ISteamNetworking_GetMaxPacketSize(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_WriteScreenshot(intptr_t instancePtr, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(intptr_t instancePtr, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight);
+S_API void SteamAPI_ISteamScreenshots_TriggerScreenshot(intptr_t instancePtr);
+S_API void SteamAPI_ISteamScreenshots_HookScreenshots(intptr_t instancePtr, bool bHook);
+S_API bool SteamAPI_ISteamScreenshots_SetLocation(intptr_t instancePtr, ScreenshotHandle hScreenshot, const char * pchLocation);
+S_API bool SteamAPI_ISteamScreenshots_TagUser(intptr_t instancePtr, ScreenshotHandle hScreenshot, class CSteamID steamID);
+S_API bool SteamAPI_ISteamScreenshots_TagPublishedFile(intptr_t instancePtr, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID);
+S_API bool SteamAPI_ISteamScreenshots_IsScreenshotsHooked(intptr_t instancePtr);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddVRScreenshotToLibrary(intptr_t instancePtr, EVRScreenshotType eType, const char * pchFilename, const char * pchVRFilename);
+S_API bool SteamAPI_ISteamMusic_BIsEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusic_BIsPlaying(intptr_t instancePtr);
+S_API AudioPlayback_Status SteamAPI_ISteamMusic_GetPlaybackStatus(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Play(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Pause(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayPrevious(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayNext(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_SetVolume(intptr_t instancePtr, float flVolume);
+S_API float SteamAPI_ISteamMusic_GetVolume(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BActivationSuccess(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_SetDisplayName(intptr_t instancePtr, const char * pchDisplayName);
+S_API bool SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayPrevious(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayNext(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableQueue(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlaylists(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(intptr_t instancePtr, AudioPlayback_Status nStatus);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateVolume(intptr_t instancePtr, float flValue);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(intptr_t instancePtr, bool bAvailable);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(intptr_t instancePtr, const char * pchText);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(intptr_t instancePtr, int nValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_QueueWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetQueueEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetQueueEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_QueueDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetPlaylistEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistDidChange(intptr_t instancePtr);
+S_API HTTPRequestHandle SteamAPI_ISteamHTTP_CreateHTTPRequest(intptr_t instancePtr, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(intptr_t instancePtr, HTTPRequestHandle hRequest, uint64 ulContextValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_DeferHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 * unBodySize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 cOffset, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_ReleaseHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(intptr_t instancePtr, HTTPRequestHandle hRequest, float * pflPercentOut);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen);
+S_API HTTPCookieContainerHandle SteamAPI_ISteamHTTP_CreateCookieContainer(intptr_t instancePtr, bool bAllowResponsesToModify);
+S_API bool SteamAPI_ISteamHTTP_ReleaseCookieContainer(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetCookie(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer, const char * pchHost, const char * pchUrl, const char * pchCookie);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(intptr_t instancePtr, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchUserAgentInfo);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(intptr_t instancePtr, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unMilliseconds);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(intptr_t instancePtr, HTTPRequestHandle hRequest, bool * pbWasTimedOut);
+S_API ClientUnifiedMessageHandle SteamAPI_ISteamUnifiedMessages_SendMethod(intptr_t instancePtr, const char * pchServiceMethod, const void * pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, uint32 * punResponseSize, EResult * peResult);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseData(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, void * pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease);
+S_API bool SteamAPI_ISteamUnifiedMessages_ReleaseMethod(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle);
+S_API bool SteamAPI_ISteamUnifiedMessages_SendNotification(intptr_t instancePtr, const char * pchServiceNotification, const void * pNotificationBuffer, uint32 unNotificationBufferSize);
+S_API bool SteamAPI_ISteamController_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamController_Shutdown(intptr_t instancePtr);
+S_API void SteamAPI_ISteamController_RunFrame(intptr_t instancePtr);
+S_API int SteamAPI_ISteamController_GetConnectedControllers(intptr_t instancePtr, ControllerHandle_t * handlesOut);
+S_API bool SteamAPI_ISteamController_ShowBindingPanel(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetActionSetHandle(intptr_t instancePtr, const char * pszActionSetName);
+S_API void SteamAPI_ISteamController_ActivateActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetCurrentActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerDigitalActionHandle_t SteamAPI_ISteamController_GetDigitalActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerDigitalActionData_t SteamAPI_ISteamController_GetDigitalActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle);
+S_API int SteamAPI_ISteamController_GetDigitalActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin * originsOut);
+S_API ControllerAnalogActionHandle_t SteamAPI_ISteamController_GetAnalogActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerAnalogActionData_t SteamAPI_ISteamController_GetAnalogActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle);
+S_API int SteamAPI_ISteamController_GetAnalogActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin * originsOut);
+S_API void SteamAPI_ISteamController_StopAnalogActionMomentum(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction);
+S_API void SteamAPI_ISteamController_TriggerHapticPulse(intptr_t instancePtr, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec);
+S_API void SteamAPI_ISteamController_TriggerRepeatedHapticPulse(intptr_t instancePtr, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags);
+S_API void SteamAPI_ISteamController_TriggerVibration(intptr_t instancePtr, ControllerHandle_t controllerHandle, unsigned short usLeftSpeed, unsigned short usRightSpeed);
+S_API void SteamAPI_ISteamController_SetLEDColor(intptr_t instancePtr, ControllerHandle_t controllerHandle, uint8 nColorR, uint8 nColorG, uint8 nColorB, unsigned int nFlags);
+S_API int SteamAPI_ISteamController_GetGamepadIndexForController(intptr_t instancePtr, ControllerHandle_t ulControllerHandle);
+S_API ControllerHandle_t SteamAPI_ISteamController_GetControllerForGamepadIndex(intptr_t instancePtr, int nIndex);
+S_API struct ControllerMotionData_t SteamAPI_ISteamController_GetMotionData(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API bool SteamAPI_ISteamController_ShowDigitalActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition);
+S_API bool SteamAPI_ISteamController_ShowAnalogActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition);
+S_API const char * SteamAPI_ISteamController_GetStringForActionOrigin(intptr_t instancePtr, EControllerActionOrigin eOrigin);
+S_API const char * SteamAPI_ISteamController_GetGlyphForActionOrigin(intptr_t instancePtr, EControllerActionOrigin eOrigin);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(intptr_t instancePtr, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(intptr_t instancePtr, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SendQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCResult(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, struct SteamUGCDetails_t * pDetails);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCPreviewURL(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCChildren(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCStatistic(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint64 * pStatValue);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, char * pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType * pPreviewType);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize);
+S_API bool SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_AddRequiredTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_AddExcludedTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_SetReturnOnlyIDs(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnOnlyIDs);
+S_API bool SteamAPI_ISteamUGC_SetReturnKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnKeyValueTags);
+S_API bool SteamAPI_ISteamUGC_SetReturnLongDescription(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnLongDescription);
+S_API bool SteamAPI_ISteamUGC_SetReturnMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnMetadata);
+S_API bool SteamAPI_ISteamUGC_SetReturnChildren(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnChildren);
+S_API bool SteamAPI_ISteamUGC_SetReturnAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews);
+S_API bool SteamAPI_ISteamUGC_SetReturnTotalOnly(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnTotalOnly);
+S_API bool SteamAPI_ISteamUGC_SetLanguage(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetAllowCachedResponse(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds);
+S_API bool SteamAPI_ISteamUGC_SetCloudFileNameFilter(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pMatchCloudFileName);
+S_API bool SteamAPI_ISteamUGC_SetMatchAnyTag(intptr_t instancePtr, UGCQueryHandle_t handle, bool bMatchAnyTag);
+S_API bool SteamAPI_ISteamUGC_SetSearchText(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pSearchText);
+S_API bool SteamAPI_ISteamUGC_SetRankedByTrendDays(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unDays);
+S_API bool SteamAPI_ISteamUGC_AddRequiredKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pKey, const char * pValue);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RequestUGCDetails(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_CreateItem(intptr_t instancePtr, AppId_t nConsumerAppId, EWorkshopFileType eFileType);
+S_API UGCUpdateHandle_t SteamAPI_ISteamUGC_StartItemUpdate(intptr_t instancePtr, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_SetItemTitle(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchTitle);
+S_API bool SteamAPI_ISteamUGC_SetItemDescription(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchDescription);
+S_API bool SteamAPI_ISteamUGC_SetItemUpdateLanguage(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetItemMetadata(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchMetaData);
+S_API bool SteamAPI_ISteamUGC_SetItemVisibility(intptr_t instancePtr, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamUGC_SetItemTags(intptr_t instancePtr, UGCUpdateHandle_t updateHandle, const struct SteamParamStringArray_t * pTags);
+S_API bool SteamAPI_ISteamUGC_SetItemContent(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszContentFolder);
+S_API bool SteamAPI_ISteamUGC_SetItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile);
+S_API bool SteamAPI_ISteamUGC_RemoveItemKeyValueTags(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey);
+S_API bool SteamAPI_ISteamUGC_AddItemKeyValueTag(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamUGC_AddItemPreviewFile(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile, EItemPreviewType type);
+S_API bool SteamAPI_ISteamUGC_AddItemPreviewVideo(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszVideoID);
+S_API bool SteamAPI_ISteamUGC_UpdateItemPreviewFile(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index, const char * pszPreviewFile);
+S_API bool SteamAPI_ISteamUGC_UpdateItemPreviewVideo(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index, const char * pszVideoID);
+S_API bool SteamAPI_ISteamUGC_RemoveItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubmitItemUpdate(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchChangeNote);
+S_API EItemUpdateStatus SteamAPI_ISteamUGC_GetItemUpdateProgress(intptr_t instancePtr, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_GetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddItemToFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveItemFromFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_UnsubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API uint32 SteamAPI_ISteamUGC_GetNumSubscribedItems(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUGC_GetSubscribedItems(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API uint32 SteamAPI_ISteamUGC_GetItemState(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_GetItemInstallInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp);
+S_API bool SteamAPI_ISteamUGC_GetItemDownloadInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API bool SteamAPI_ISteamUGC_DownloadItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bHighPriority);
+S_API bool SteamAPI_ISteamUGC_BInitWorkshopForGameServer(intptr_t instancePtr, DepotId_t unWorkshopDepotID, const char * pszFolder);
+S_API void SteamAPI_ISteamUGC_SuspendDownloads(intptr_t instancePtr, bool bSuspend);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_StartPlaytimeTracking(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_StopPlaytimeTracking(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_StopPlaytimeTrackingForAllItems(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamAppList_GetNumInstalledApps(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamAppList_GetInstalledApps(intptr_t instancePtr, AppId_t * pvecAppID, uint32 unMaxAppIDs);
+S_API int SteamAPI_ISteamAppList_GetAppName(intptr_t instancePtr, AppId_t nAppID, char * pchName, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppInstallDir(intptr_t instancePtr, AppId_t nAppID, char * pchDirectory, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppBuildId(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Shutdown(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamHTMLSurface_CreateBrowser(intptr_t instancePtr, const char * pchUserAgent, const char * pchUserCSS);
+S_API void SteamAPI_ISteamHTMLSurface_RemoveBrowser(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_LoadURL(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData);
+S_API void SteamAPI_ISteamHTMLSurface_SetSize(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight);
+S_API void SteamAPI_ISteamHTMLSurface_StopLoad(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Reload(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoBack(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoForward(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_AddHeader(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamHTMLSurface_ExecuteJavascript(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchScript);
+S_API void SteamAPI_ISteamHTMLSurface_MouseUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDoubleClick(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseMove(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_MouseWheel(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int32 nDelta);
+S_API void SteamAPI_ISteamHTMLSurface_KeyDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyChar(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetVerticalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetKeyFocus(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus);
+S_API void SteamAPI_ISteamHTMLSurface_ViewSource(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_CopyToClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_PasteFromClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Find(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse);
+S_API void SteamAPI_ISteamHTMLSurface_StopFind(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_SetCookie(intptr_t instancePtr, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly);
+S_API void SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY);
+S_API void SteamAPI_ISteamHTMLSurface_SetBackgroundMode(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bBackgroundMode);
+S_API void SteamAPI_ISteamHTMLSurface_AllowStartRequest(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bAllowed);
+S_API void SteamAPI_ISteamHTMLSurface_JSDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bResult);
+S_API EResult SteamAPI_ISteamInventory_GetResultStatus(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetResultItems(intptr_t instancePtr, SteamInventoryResult_t resultHandle, struct SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize);
+S_API uint32 SteamAPI_ISteamInventory_GetResultTimestamp(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_CheckResultSteamID(intptr_t instancePtr, SteamInventoryResult_t resultHandle, class CSteamID steamIDExpected);
+S_API void SteamAPI_ISteamInventory_DestroyResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetAllItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_GetItemsByID(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs);
+S_API bool SteamAPI_ISteamInventory_SerializeResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize);
+S_API bool SteamAPI_ISteamInventory_DeserializeResult(intptr_t instancePtr, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE);
+S_API bool SteamAPI_ISteamInventory_GenerateItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_GrantPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_AddPromoItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef);
+S_API bool SteamAPI_ISteamInventory_AddPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_ConsumeItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity);
+S_API bool SteamAPI_ISteamInventory_ExchangeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength);
+S_API bool SteamAPI_ISteamInventory_TransferItemQuantity(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest);
+S_API void SteamAPI_ISteamInventory_SendItemDropHeartbeat(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_TriggerItemDrop(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition);
+S_API bool SteamAPI_ISteamInventory_TradeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, class CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength);
+S_API bool SteamAPI_ISteamInventory_LoadItemDefinitions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionIDs(intptr_t instancePtr, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionProperty(intptr_t instancePtr, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSizeOut);
+S_API SteamAPICall_t SteamAPI_ISteamInventory_RequestEligiblePromoItemDefinitionsIDs(intptr_t instancePtr, class CSteamID steamID);
+S_API bool SteamAPI_ISteamInventory_GetEligiblePromoItemDefinitionIDs(intptr_t instancePtr, class CSteamID steamID, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API void SteamAPI_ISteamVideo_GetVideoURL(intptr_t instancePtr, AppId_t unVideoAppID);
+S_API bool SteamAPI_ISteamVideo_IsBroadcasting(intptr_t instancePtr, int * pnNumViewers);
+S_API bool SteamAPI_ISteamGameServer_InitGameServer(intptr_t instancePtr, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString);
+S_API void SteamAPI_ISteamGameServer_SetProduct(intptr_t instancePtr, const char * pszProduct);
+S_API void SteamAPI_ISteamGameServer_SetGameDescription(intptr_t instancePtr, const char * pszGameDescription);
+S_API void SteamAPI_ISteamGameServer_SetModDir(intptr_t instancePtr, const char * pszModDir);
+S_API void SteamAPI_ISteamGameServer_SetDedicatedServer(intptr_t instancePtr, bool bDedicated);
+S_API void SteamAPI_ISteamGameServer_LogOn(intptr_t instancePtr, const char * pszToken);
+S_API void SteamAPI_ISteamGameServer_LogOnAnonymous(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_LogOff(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BLoggedOn(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BSecure(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamGameServer_GetSteamID(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_WasRestartRequested(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetMaxPlayerCount(intptr_t instancePtr, int cPlayersMax);
+S_API void SteamAPI_ISteamGameServer_SetBotPlayerCount(intptr_t instancePtr, int cBotplayers);
+S_API void SteamAPI_ISteamGameServer_SetServerName(intptr_t instancePtr, const char * pszServerName);
+S_API void SteamAPI_ISteamGameServer_SetMapName(intptr_t instancePtr, const char * pszMapName);
+S_API void SteamAPI_ISteamGameServer_SetPasswordProtected(intptr_t instancePtr, bool bPasswordProtected);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorPort(intptr_t instancePtr, uint16 unSpectatorPort);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorServerName(intptr_t instancePtr, const char * pszSpectatorServerName);
+S_API void SteamAPI_ISteamGameServer_ClearAllKeyValues(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetKeyValue(intptr_t instancePtr, const char * pKey, const char * pValue);
+S_API void SteamAPI_ISteamGameServer_SetGameTags(intptr_t instancePtr, const char * pchGameTags);
+S_API void SteamAPI_ISteamGameServer_SetGameData(intptr_t instancePtr, const char * pchGameData);
+S_API void SteamAPI_ISteamGameServer_SetRegion(intptr_t instancePtr, const char * pszRegion);
+S_API bool SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(intptr_t instancePtr, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, class CSteamID * pSteamIDUser);
+S_API uint64 SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SendUserDisconnect(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServer_BUpdateUserData(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore);
+S_API HAuthTicket SteamAPI_ISteamGameServer_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamGameServer_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamGameServer_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamGameServer_RequestUserGroupStatus(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDGroup);
+S_API void SteamAPI_ISteamGameServer_GetGameplayStats(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_GetServerReputation(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamGameServer_GetPublicIP(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_HandleIncomingPacket(intptr_t instancePtr, const void * pData, int cbData, uint32 srcIP, uint16 srcPort);
+S_API int SteamAPI_ISteamGameServer_GetNextOutgoingPacket(intptr_t instancePtr, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort);
+S_API void SteamAPI_ISteamGameServer_EnableHeartbeats(intptr_t instancePtr, bool bActive);
+S_API void SteamAPI_ISteamGameServer_SetHeartbeatInterval(intptr_t instancePtr, int iHeartbeatInterval);
+S_API void SteamAPI_ISteamGameServer_ForceHeartbeat(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_AssociateWithClan(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(intptr_t instancePtr, class CSteamID steamIDNewPlayer);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API bool SteamAPI_ISteamGameServerStats_ClearUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_StoreUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+#endif // STEAMAPIFLAT_H
+
+
diff --git a/lsteamclient/steamworks_sdk_139/steam_api_internal.h b/lsteamclient/steamworks_sdk_139/steam_api_internal.h
new file mode 100644
index 00000000..ef3a949c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/steam_api_internal.h
@@ -0,0 +1,327 @@
+//====== Copyright 1996-2015, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Internal private Steamworks API declarations and definitions
+//
+//=============================================================================
+
+#ifndef STEAM_API_INTERNAL_H
+#define STEAM_API_INTERNAL_H
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+S_API void * S_CALLTYPE SteamInternal_ContextInit( void *pContextInitData );
+S_API void * S_CALLTYPE SteamInternal_CreateInterface( const char *ver );
+
+#if !defined( STEAM_API_EXPORTS )
+
+inline void S_CALLTYPE SteamInternal_OnContextInit( void* p )
+{
+ ((CSteamAPIContext*)p)->Clear();
+ if ( SteamAPI_GetHSteamPipe() )
+ ((CSteamAPIContext*)p)->Init();
+}
+inline CSteamAPIContext& SteamInternal_ModuleContext()
+{
+ // SteamInternal_ContextInit takes a base pointer for the equivalent of
+ // struct { void (*pFn)(void* pCtx); uintp counter; CSteamAPIContext ctx; }
+ // Do not change layout of 2 + sizeof... or add non-pointer aligned data!
+ // NOTE: declaring "static CSteamAPIConext" creates a large function
+ // which queries the initialization status of the object. We know that
+ // it is pointer-aligned and fully memset with zeros, so just alias a
+ // static buffer of the appropriate size and call it a CSteamAPIContext.
+ static void* s_CallbackCounterAndContext[ 2 + sizeof(CSteamAPIContext)/sizeof(void*) ] = { (void*)&SteamInternal_OnContextInit, 0 };
+ return *(CSteamAPIContext*)SteamInternal_ContextInit( s_CallbackCounterAndContext );
+}
+
+inline ISteamClient *SteamClient() { return SteamInternal_ModuleContext().SteamClient(); }
+inline ISteamUser *SteamUser() { return SteamInternal_ModuleContext().SteamUser(); }
+inline ISteamFriends *SteamFriends() { return SteamInternal_ModuleContext().SteamFriends(); }
+inline ISteamUtils *SteamUtils() { return SteamInternal_ModuleContext().SteamUtils(); }
+inline ISteamMatchmaking *SteamMatchmaking() { return SteamInternal_ModuleContext().SteamMatchmaking(); }
+inline ISteamUserStats *SteamUserStats() { return SteamInternal_ModuleContext().SteamUserStats(); }
+inline ISteamApps *SteamApps() { return SteamInternal_ModuleContext().SteamApps(); }
+inline ISteamMatchmakingServers *SteamMatchmakingServers() { return SteamInternal_ModuleContext().SteamMatchmakingServers(); }
+inline ISteamNetworking *SteamNetworking() { return SteamInternal_ModuleContext().SteamNetworking(); }
+inline ISteamRemoteStorage *SteamRemoteStorage() { return SteamInternal_ModuleContext().SteamRemoteStorage(); }
+inline ISteamScreenshots *SteamScreenshots() { return SteamInternal_ModuleContext().SteamScreenshots(); }
+inline ISteamHTTP *SteamHTTP() { return SteamInternal_ModuleContext().SteamHTTP(); }
+inline ISteamUnifiedMessages *SteamUnifiedMessages() { return SteamInternal_ModuleContext().SteamUnifiedMessages(); }
+inline ISteamController *SteamController() { return SteamInternal_ModuleContext().SteamController(); }
+inline ISteamUGC *SteamUGC() { return SteamInternal_ModuleContext().SteamUGC(); }
+inline ISteamAppList *SteamAppList() { return SteamInternal_ModuleContext().SteamAppList(); }
+inline ISteamMusic *SteamMusic() { return SteamInternal_ModuleContext().SteamMusic(); }
+inline ISteamMusicRemote *SteamMusicRemote() { return SteamInternal_ModuleContext().SteamMusicRemote(); }
+inline ISteamHTMLSurface *SteamHTMLSurface() { return SteamInternal_ModuleContext().SteamHTMLSurface(); }
+inline ISteamInventory *SteamInventory() { return SteamInternal_ModuleContext().SteamInventory(); }
+inline ISteamVideo *SteamVideo() { return SteamInternal_ModuleContext().SteamVideo(); }
+
+#endif // !defined( STEAM_API_EXPORTS )
+
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamClient = NULL;
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamMusicRemote = NULL;
+ m_pSteamHTMLSurface = NULL;
+ m_pSteamInventory = NULL;
+}
+
+
+// This function must be declared inline in the header so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+ if ( !hSteamPipe )
+ return false;
+
+ m_pSteamClient = (ISteamClient*) SteamInternal_CreateInterface( STEAMCLIENT_INTERFACE_VERSION );
+ if ( !m_pSteamClient )
+ return false;
+
+ m_pSteamUser = m_pSteamClient->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = m_pSteamClient->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = m_pSteamClient->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = m_pSteamClient->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = m_pSteamClient->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = m_pSteamClient->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = m_pSteamClient->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = m_pSteamClient->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = m_pSteamClient->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = m_pSteamClient->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = m_pSteamClient->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = m_pSteamClient->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = m_pSteamClient->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = m_pSteamClient->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = m_pSteamClient->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = m_pSteamClient->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ return false;
+
+ m_pSteamMusicRemote = m_pSteamClient->GetISteamMusicRemote( hSteamUser, hSteamPipe, STEAMMUSICREMOTE_INTERFACE_VERSION );
+ if ( !m_pSteamMusicRemote )
+ return false;
+
+ m_pSteamHTMLSurface = m_pSteamClient->GetISteamHTMLSurface( hSteamUser, hSteamPipe, STEAMHTMLSURFACE_INTERFACE_VERSION );
+ if ( !m_pSteamHTMLSurface )
+ return false;
+
+ m_pSteamInventory = m_pSteamClient->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_pSteamVideo = m_pSteamClient->GetISteamVideo( hSteamUser, hSteamPipe, STEAMVIDEO_INTERFACE_VERSION );
+ if ( !m_pSteamVideo )
+ return false;
+
+ return true;
+}
+
+
+//-----------------------------------------------------------------------------
+// The following macros are implementation details, not intended for public use
+//-----------------------------------------------------------------------------
+#define _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param )
+#define _STEAM_CALLBACK_HELPER( _1, _2, SELECTED, ... ) _STEAM_CALLBACK_##SELECTED
+#define _STEAM_CALLBACK_SELECT( X, Y ) _STEAM_CALLBACK_HELPER X Y
+#define _STEAM_CALLBACK_3( extra_code, thisclass, func, param ) \
+ struct CCallbackInternal_ ## func : private CCallbackImpl< sizeof( param ) > { \
+ CCallbackInternal_ ## func () { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func ( const CCallbackInternal_ ## func & ) { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func & operator=( const CCallbackInternal_ ## func & ) { return *this; } \
+ private: virtual void Run( void *pvParam ) { _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param ) \
+ thisclass *pOuter = reinterpret_cast<thisclass*>( reinterpret_cast<char*>(this) - offsetof( thisclass, m_steamcallback_ ## func ) ); \
+ pOuter->func( reinterpret_cast<param*>( pvParam ) ); \
+ } \
+ } m_steamcallback_ ## func ; void func( param *pParam )
+#define _STEAM_CALLBACK_4( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param > var; void func( param *pParam )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+inline CCallResult<T, P>::CCallResult()
+{
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Set( SteamAPICall_t hAPICall, T *p, func_t func )
+{
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+}
+
+template< class T, class P >
+inline bool CCallResult<T, P>::IsActive() const
+{
+ return (m_hAPICall != k_uAPICallInvalid);
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Cancel()
+{
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+}
+
+template< class T, class P >
+inline CCallResult<T, P>::~CCallResult()
+{
+ Cancel();
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Run( void *pvParam )
+{
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)((P *)pvParam, false);
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+{
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)((P *)pvParam, bIOFailure);
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct,
+// bGameserver = listen for gameserver callbacks instead of client callbacks
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameserver >
+inline CCallback< T, P, bGameserver >::CCallback( T *pObj, func_t func )
+ : m_pObj( NULL ), m_Func( NULL )
+{
+ if ( bGameserver )
+ {
+ this->SetGameserverFlag();
+ }
+ Register( pObj, func );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Register( T *pObj, func_t func )
+{
+ if ( !pObj || !func )
+ return;
+
+ if ( this->m_nCallbackFlags & CCallbackBase::k_ECallbackFlagsRegistered )
+ Unregister();
+
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Unregister()
+{
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Run( void *pvParam )
+{
+ (m_pObj->*m_Func)((P *)pvParam);
+}
+
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+
+#endif // STEAM_API_INTERNAL_H
diff --git a/lsteamclient/steamworks_sdk_139/steam_api_interop.cs b/lsteamclient/steamworks_sdk_139/steam_api_interop.cs
new file mode 100644
index 00000000..4e1241ff
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/steam_api_interop.cs
@@ -0,0 +1,10694 @@
+//====== Copyright 1996-2016, Valve Corporation, All rights reserved. =======
+//
+// Purpose: This file contains C#/managed code bindings for the SteamAPI interfaces
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+using System;
+using System.Runtime.InteropServices;
+using Valve.Steamworks;
+using Valve.Interop;
+
+namespace Valve.Interop
+{
+
+public class NativeEntrypoints
+{
+
+
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_CreateSteamPipe")]
+internal static extern uint SteamAPI_ISteamClient_CreateSteamPipe(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_BReleaseSteamPipe")]
+internal static extern bool SteamAPI_ISteamClient_BReleaseSteamPipe(IntPtr instancePtr, uint hSteamPipe);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_ConnectToGlobalUser")]
+internal static extern uint SteamAPI_ISteamClient_ConnectToGlobalUser(IntPtr instancePtr, uint hSteamPipe);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_CreateLocalUser")]
+internal static extern uint SteamAPI_ISteamClient_CreateLocalUser(IntPtr instancePtr, ref uint phSteamPipe, uint eAccountType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_ReleaseUser")]
+internal static extern void SteamAPI_ISteamClient_ReleaseUser(IntPtr instancePtr, uint hSteamPipe, uint hUser);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamUser")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUser(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamGameServer")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamGameServer(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_SetLocalIPBinding")]
+internal static extern void SteamAPI_ISteamClient_SetLocalIPBinding(IntPtr instancePtr, uint unIP, char usPort);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamFriends")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamFriends(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamUtils")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUtils(IntPtr instancePtr, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamMatchmaking")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamMatchmaking(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamMatchmakingServers")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamMatchmakingServers(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamGenericInterface")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamGenericInterface(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamUserStats")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUserStats(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamGameServerStats")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamGameServerStats(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamApps")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamApps(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamNetworking")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamNetworking(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamRemoteStorage")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamRemoteStorage(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamScreenshots")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamScreenshots(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetIPCCallCount")]
+internal static extern uint SteamAPI_ISteamClient_GetIPCCallCount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_SetWarningMessageHook")]
+internal static extern void SteamAPI_ISteamClient_SetWarningMessageHook(IntPtr instancePtr, IntPtr pFunction);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_BShutdownIfAllPipesClosed")]
+internal static extern bool SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamHTTP")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamHTTP(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamUnifiedMessages")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUnifiedMessages(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamController")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamController(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamUGC")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUGC(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamAppList")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamAppList(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamMusic")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamMusic(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamMusicRemote")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamMusicRemote(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamHTMLSurface")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamHTMLSurface(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamInventory")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamInventory(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamVideo")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamVideo(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetHSteamUser")]
+internal static extern uint SteamAPI_ISteamUser_GetHSteamUser(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_BLoggedOn")]
+internal static extern bool SteamAPI_ISteamUser_BLoggedOn(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetSteamID")]
+internal static extern ulong SteamAPI_ISteamUser_GetSteamID(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_InitiateGameConnection")]
+internal static extern int SteamAPI_ISteamUser_InitiateGameConnection(IntPtr instancePtr, IntPtr pAuthBlob, int cbMaxAuthBlob, ulong steamIDGameServer, uint unIPServer, char usPortServer, bool bSecure);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_TerminateGameConnection")]
+internal static extern void SteamAPI_ISteamUser_TerminateGameConnection(IntPtr instancePtr, uint unIPServer, char usPortServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_TrackAppUsageEvent")]
+internal static extern void SteamAPI_ISteamUser_TrackAppUsageEvent(IntPtr instancePtr, ulong gameID, int eAppUsageEvent, string pchExtraInfo);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetUserDataFolder")]
+internal static extern bool SteamAPI_ISteamUser_GetUserDataFolder(IntPtr instancePtr, string pchBuffer, int cubBuffer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_StartVoiceRecording")]
+internal static extern void SteamAPI_ISteamUser_StartVoiceRecording(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_StopVoiceRecording")]
+internal static extern void SteamAPI_ISteamUser_StopVoiceRecording(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetAvailableVoice")]
+internal static extern uint SteamAPI_ISteamUser_GetAvailableVoice(IntPtr instancePtr, ref uint pcbCompressed, ref uint pcbUncompressed, uint nUncompressedVoiceDesiredSampleRate);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetVoice")]
+internal static extern uint SteamAPI_ISteamUser_GetVoice(IntPtr instancePtr, bool bWantCompressed, IntPtr pDestBuffer, uint cbDestBufferSize, ref uint nBytesWritten, bool bWantUncompressed, IntPtr pUncompressedDestBuffer, uint cbUncompressedDestBufferSize, ref uint nUncompressBytesWritten, uint nUncompressedVoiceDesiredSampleRate);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_DecompressVoice")]
+internal static extern uint SteamAPI_ISteamUser_DecompressVoice(IntPtr instancePtr, IntPtr pCompressed, uint cbCompressed, IntPtr pDestBuffer, uint cbDestBufferSize, ref uint nBytesWritten, uint nDesiredSampleRate);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetVoiceOptimalSampleRate")]
+internal static extern uint SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetAuthSessionTicket")]
+internal static extern uint SteamAPI_ISteamUser_GetAuthSessionTicket(IntPtr instancePtr, IntPtr pTicket, int cbMaxTicket, ref uint pcbTicket);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_BeginAuthSession")]
+internal static extern uint SteamAPI_ISteamUser_BeginAuthSession(IntPtr instancePtr, IntPtr pAuthTicket, int cbAuthTicket, ulong steamID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_EndAuthSession")]
+internal static extern void SteamAPI_ISteamUser_EndAuthSession(IntPtr instancePtr, ulong steamID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_CancelAuthTicket")]
+internal static extern void SteamAPI_ISteamUser_CancelAuthTicket(IntPtr instancePtr, uint hAuthTicket);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_UserHasLicenseForApp")]
+internal static extern uint SteamAPI_ISteamUser_UserHasLicenseForApp(IntPtr instancePtr, ulong steamID, uint appID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_BIsBehindNAT")]
+internal static extern bool SteamAPI_ISteamUser_BIsBehindNAT(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_AdvertiseGame")]
+internal static extern void SteamAPI_ISteamUser_AdvertiseGame(IntPtr instancePtr, ulong steamIDGameServer, uint unIPServer, char usPortServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_RequestEncryptedAppTicket")]
+internal static extern ulong SteamAPI_ISteamUser_RequestEncryptedAppTicket(IntPtr instancePtr, IntPtr pDataToInclude, int cbDataToInclude);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetEncryptedAppTicket")]
+internal static extern bool SteamAPI_ISteamUser_GetEncryptedAppTicket(IntPtr instancePtr, IntPtr pTicket, int cbMaxTicket, ref uint pcbTicket);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetGameBadgeLevel")]
+internal static extern int SteamAPI_ISteamUser_GetGameBadgeLevel(IntPtr instancePtr, int nSeries, bool bFoil);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetPlayerSteamLevel")]
+internal static extern int SteamAPI_ISteamUser_GetPlayerSteamLevel(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_RequestStoreAuthURL")]
+internal static extern ulong SteamAPI_ISteamUser_RequestStoreAuthURL(IntPtr instancePtr, string pchRedirectURL);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_BIsPhoneVerified")]
+internal static extern bool SteamAPI_ISteamUser_BIsPhoneVerified(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_BIsTwoFactorEnabled")]
+internal static extern bool SteamAPI_ISteamUser_BIsTwoFactorEnabled(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_BIsPhoneIdentifying")]
+internal static extern bool SteamAPI_ISteamUser_BIsPhoneIdentifying(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_BIsPhoneRequiringVerification")]
+internal static extern bool SteamAPI_ISteamUser_BIsPhoneRequiringVerification(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetPersonaName")]
+internal static extern IntPtr SteamAPI_ISteamFriends_GetPersonaName(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_SetPersonaName")]
+internal static extern ulong SteamAPI_ISteamFriends_SetPersonaName(IntPtr instancePtr, string pchPersonaName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetPersonaState")]
+internal static extern uint SteamAPI_ISteamFriends_GetPersonaState(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendCount")]
+internal static extern int SteamAPI_ISteamFriends_GetFriendCount(IntPtr instancePtr, int iFriendFlags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendByIndex")]
+internal static extern ulong SteamAPI_ISteamFriends_GetFriendByIndex(IntPtr instancePtr, int iFriend, int iFriendFlags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendRelationship")]
+internal static extern uint SteamAPI_ISteamFriends_GetFriendRelationship(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendPersonaState")]
+internal static extern uint SteamAPI_ISteamFriends_GetFriendPersonaState(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendPersonaName")]
+internal static extern IntPtr SteamAPI_ISteamFriends_GetFriendPersonaName(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendGamePlayed")]
+internal static extern bool SteamAPI_ISteamFriends_GetFriendGamePlayed(IntPtr instancePtr, ulong steamIDFriend, ref FriendGameInfo_t pFriendGameInfo);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendPersonaNameHistory")]
+internal static extern IntPtr SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(IntPtr instancePtr, ulong steamIDFriend, int iPersonaName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendSteamLevel")]
+internal static extern int SteamAPI_ISteamFriends_GetFriendSteamLevel(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetPlayerNickname")]
+internal static extern IntPtr SteamAPI_ISteamFriends_GetPlayerNickname(IntPtr instancePtr, ulong steamIDPlayer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendsGroupCount")]
+internal static extern int SteamAPI_ISteamFriends_GetFriendsGroupCount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex")]
+internal static extern char SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(IntPtr instancePtr, int iFG);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendsGroupName")]
+internal static extern IntPtr SteamAPI_ISteamFriends_GetFriendsGroupName(IntPtr instancePtr, char friendsGroupID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendsGroupMembersCount")]
+internal static extern int SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(IntPtr instancePtr, char friendsGroupID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendsGroupMembersList")]
+internal static extern void SteamAPI_ISteamFriends_GetFriendsGroupMembersList(IntPtr instancePtr, char friendsGroupID, [In, Out] CSteamID[] pOutSteamIDMembers, int nMembersCount);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_HasFriend")]
+internal static extern bool SteamAPI_ISteamFriends_HasFriend(IntPtr instancePtr, ulong steamIDFriend, int iFriendFlags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanCount")]
+internal static extern int SteamAPI_ISteamFriends_GetClanCount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanByIndex")]
+internal static extern ulong SteamAPI_ISteamFriends_GetClanByIndex(IntPtr instancePtr, int iClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanName")]
+internal static extern IntPtr SteamAPI_ISteamFriends_GetClanName(IntPtr instancePtr, ulong steamIDClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanTag")]
+internal static extern IntPtr SteamAPI_ISteamFriends_GetClanTag(IntPtr instancePtr, ulong steamIDClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanActivityCounts")]
+internal static extern bool SteamAPI_ISteamFriends_GetClanActivityCounts(IntPtr instancePtr, ulong steamIDClan, ref int pnOnline, ref int pnInGame, ref int pnChatting);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_DownloadClanActivityCounts")]
+internal static extern ulong SteamAPI_ISteamFriends_DownloadClanActivityCounts(IntPtr instancePtr, [In, Out] CSteamID[] psteamIDClans, int cClansToRequest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendCountFromSource")]
+internal static extern int SteamAPI_ISteamFriends_GetFriendCountFromSource(IntPtr instancePtr, ulong steamIDSource);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendFromSourceByIndex")]
+internal static extern ulong SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(IntPtr instancePtr, ulong steamIDSource, int iFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_IsUserInSource")]
+internal static extern bool SteamAPI_ISteamFriends_IsUserInSource(IntPtr instancePtr, ulong steamIDUser, ulong steamIDSource);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_SetInGameVoiceSpeaking")]
+internal static extern void SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(IntPtr instancePtr, ulong steamIDUser, bool bSpeaking);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_ActivateGameOverlay")]
+internal static extern void SteamAPI_ISteamFriends_ActivateGameOverlay(IntPtr instancePtr, string pchDialog);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_ActivateGameOverlayToUser")]
+internal static extern void SteamAPI_ISteamFriends_ActivateGameOverlayToUser(IntPtr instancePtr, string pchDialog, ulong steamID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage")]
+internal static extern void SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(IntPtr instancePtr, string pchURL);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_ActivateGameOverlayToStore")]
+internal static extern void SteamAPI_ISteamFriends_ActivateGameOverlayToStore(IntPtr instancePtr, uint nAppID, char eFlag);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_SetPlayedWith")]
+internal static extern void SteamAPI_ISteamFriends_SetPlayedWith(IntPtr instancePtr, ulong steamIDUserPlayedWith);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog")]
+internal static extern void SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(IntPtr instancePtr, ulong steamIDLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetSmallFriendAvatar")]
+internal static extern int SteamAPI_ISteamFriends_GetSmallFriendAvatar(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetMediumFriendAvatar")]
+internal static extern int SteamAPI_ISteamFriends_GetMediumFriendAvatar(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetLargeFriendAvatar")]
+internal static extern int SteamAPI_ISteamFriends_GetLargeFriendAvatar(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_RequestUserInformation")]
+internal static extern bool SteamAPI_ISteamFriends_RequestUserInformation(IntPtr instancePtr, ulong steamIDUser, bool bRequireNameOnly);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_RequestClanOfficerList")]
+internal static extern ulong SteamAPI_ISteamFriends_RequestClanOfficerList(IntPtr instancePtr, ulong steamIDClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanOwner")]
+internal static extern ulong SteamAPI_ISteamFriends_GetClanOwner(IntPtr instancePtr, ulong steamIDClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanOfficerCount")]
+internal static extern int SteamAPI_ISteamFriends_GetClanOfficerCount(IntPtr instancePtr, ulong steamIDClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanOfficerByIndex")]
+internal static extern ulong SteamAPI_ISteamFriends_GetClanOfficerByIndex(IntPtr instancePtr, ulong steamIDClan, int iOfficer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetUserRestrictions")]
+internal static extern uint SteamAPI_ISteamFriends_GetUserRestrictions(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_SetRichPresence")]
+internal static extern bool SteamAPI_ISteamFriends_SetRichPresence(IntPtr instancePtr, string pchKey, string pchValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_ClearRichPresence")]
+internal static extern void SteamAPI_ISteamFriends_ClearRichPresence(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendRichPresence")]
+internal static extern IntPtr SteamAPI_ISteamFriends_GetFriendRichPresence(IntPtr instancePtr, ulong steamIDFriend, string pchKey);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount")]
+internal static extern int SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex")]
+internal static extern IntPtr SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(IntPtr instancePtr, ulong steamIDFriend, int iKey);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_RequestFriendRichPresence")]
+internal static extern void SteamAPI_ISteamFriends_RequestFriendRichPresence(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_InviteUserToGame")]
+internal static extern bool SteamAPI_ISteamFriends_InviteUserToGame(IntPtr instancePtr, ulong steamIDFriend, string pchConnectString);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetCoplayFriendCount")]
+internal static extern int SteamAPI_ISteamFriends_GetCoplayFriendCount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetCoplayFriend")]
+internal static extern ulong SteamAPI_ISteamFriends_GetCoplayFriend(IntPtr instancePtr, int iCoplayFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendCoplayTime")]
+internal static extern int SteamAPI_ISteamFriends_GetFriendCoplayTime(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendCoplayGame")]
+internal static extern uint SteamAPI_ISteamFriends_GetFriendCoplayGame(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_JoinClanChatRoom")]
+internal static extern ulong SteamAPI_ISteamFriends_JoinClanChatRoom(IntPtr instancePtr, ulong steamIDClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_LeaveClanChatRoom")]
+internal static extern bool SteamAPI_ISteamFriends_LeaveClanChatRoom(IntPtr instancePtr, ulong steamIDClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanChatMemberCount")]
+internal static extern int SteamAPI_ISteamFriends_GetClanChatMemberCount(IntPtr instancePtr, ulong steamIDClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetChatMemberByIndex")]
+internal static extern ulong SteamAPI_ISteamFriends_GetChatMemberByIndex(IntPtr instancePtr, ulong steamIDClan, int iUser);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_SendClanChatMessage")]
+internal static extern bool SteamAPI_ISteamFriends_SendClanChatMessage(IntPtr instancePtr, ulong steamIDClanChat, string pchText);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanChatMessage")]
+internal static extern int SteamAPI_ISteamFriends_GetClanChatMessage(IntPtr instancePtr, ulong steamIDClanChat, int iMessage, IntPtr prgchText, int cchTextMax, ref uint peChatEntryType, ref CSteamID psteamidChatter);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_IsClanChatAdmin")]
+internal static extern bool SteamAPI_ISteamFriends_IsClanChatAdmin(IntPtr instancePtr, ulong steamIDClanChat, ulong steamIDUser);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam")]
+internal static extern bool SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(IntPtr instancePtr, ulong steamIDClanChat);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_OpenClanChatWindowInSteam")]
+internal static extern bool SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(IntPtr instancePtr, ulong steamIDClanChat);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_CloseClanChatWindowInSteam")]
+internal static extern bool SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(IntPtr instancePtr, ulong steamIDClanChat);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_SetListenForFriendsMessages")]
+internal static extern bool SteamAPI_ISteamFriends_SetListenForFriendsMessages(IntPtr instancePtr, bool bInterceptEnabled);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_ReplyToFriendMessage")]
+internal static extern bool SteamAPI_ISteamFriends_ReplyToFriendMessage(IntPtr instancePtr, ulong steamIDFriend, string pchMsgToSend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendMessage")]
+internal static extern int SteamAPI_ISteamFriends_GetFriendMessage(IntPtr instancePtr, ulong steamIDFriend, int iMessageID, IntPtr pvData, int cubData, ref uint peChatEntryType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFollowerCount")]
+internal static extern ulong SteamAPI_ISteamFriends_GetFollowerCount(IntPtr instancePtr, ulong steamID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_IsFollowing")]
+internal static extern ulong SteamAPI_ISteamFriends_IsFollowing(IntPtr instancePtr, ulong steamID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_EnumerateFollowingList")]
+internal static extern ulong SteamAPI_ISteamFriends_EnumerateFollowingList(IntPtr instancePtr, uint unStartIndex);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetSecondsSinceAppActive")]
+internal static extern uint SteamAPI_ISteamUtils_GetSecondsSinceAppActive(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetSecondsSinceComputerActive")]
+internal static extern uint SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetConnectedUniverse")]
+internal static extern int SteamAPI_ISteamUtils_GetConnectedUniverse(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetServerRealTime")]
+internal static extern uint SteamAPI_ISteamUtils_GetServerRealTime(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetIPCountry")]
+internal static extern IntPtr SteamAPI_ISteamUtils_GetIPCountry(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetImageSize")]
+internal static extern bool SteamAPI_ISteamUtils_GetImageSize(IntPtr instancePtr, int iImage, ref uint pnWidth, ref uint pnHeight);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetImageRGBA")]
+internal static extern bool SteamAPI_ISteamUtils_GetImageRGBA(IntPtr instancePtr, int iImage, IntPtr pubDest, int nDestBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetCSERIPPort")]
+internal static extern bool SteamAPI_ISteamUtils_GetCSERIPPort(IntPtr instancePtr, ref uint unIP, ref char usPort);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetCurrentBatteryPower")]
+internal static extern byte SteamAPI_ISteamUtils_GetCurrentBatteryPower(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetAppID")]
+internal static extern uint SteamAPI_ISteamUtils_GetAppID(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_SetOverlayNotificationPosition")]
+internal static extern void SteamAPI_ISteamUtils_SetOverlayNotificationPosition(IntPtr instancePtr, uint eNotificationPosition);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_IsAPICallCompleted")]
+internal static extern bool SteamAPI_ISteamUtils_IsAPICallCompleted(IntPtr instancePtr, ulong hSteamAPICall, ref bool pbFailed);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetAPICallFailureReason")]
+internal static extern int SteamAPI_ISteamUtils_GetAPICallFailureReason(IntPtr instancePtr, ulong hSteamAPICall);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetAPICallResult")]
+internal static extern bool SteamAPI_ISteamUtils_GetAPICallResult(IntPtr instancePtr, ulong hSteamAPICall, IntPtr pCallback, int cubCallback, int iCallbackExpected, ref bool pbFailed);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetIPCCallCount")]
+internal static extern uint SteamAPI_ISteamUtils_GetIPCCallCount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_SetWarningMessageHook")]
+internal static extern void SteamAPI_ISteamUtils_SetWarningMessageHook(IntPtr instancePtr, IntPtr pFunction);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_IsOverlayEnabled")]
+internal static extern bool SteamAPI_ISteamUtils_IsOverlayEnabled(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_BOverlayNeedsPresent")]
+internal static extern bool SteamAPI_ISteamUtils_BOverlayNeedsPresent(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_CheckFileSignature")]
+internal static extern ulong SteamAPI_ISteamUtils_CheckFileSignature(IntPtr instancePtr, string szFileName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_ShowGamepadTextInput")]
+internal static extern bool SteamAPI_ISteamUtils_ShowGamepadTextInput(IntPtr instancePtr, int eInputMode, int eLineInputMode, string pchDescription, uint unCharMax, string pchExistingText);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetEnteredGamepadTextLength")]
+internal static extern uint SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetEnteredGamepadTextInput")]
+internal static extern bool SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(IntPtr instancePtr, string pchText, uint cchText);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetSteamUILanguage")]
+internal static extern IntPtr SteamAPI_ISteamUtils_GetSteamUILanguage(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_IsSteamRunningInVR")]
+internal static extern bool SteamAPI_ISteamUtils_IsSteamRunningInVR(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_SetOverlayNotificationInset")]
+internal static extern void SteamAPI_ISteamUtils_SetOverlayNotificationInset(IntPtr instancePtr, int nHorizontalInset, int nVerticalInset);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_IsSteamInBigPictureMode")]
+internal static extern bool SteamAPI_ISteamUtils_IsSteamInBigPictureMode(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_StartVRDashboard")]
+internal static extern void SteamAPI_ISteamUtils_StartVRDashboard(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetFavoriteGameCount")]
+internal static extern int SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetFavoriteGame")]
+internal static extern bool SteamAPI_ISteamMatchmaking_GetFavoriteGame(IntPtr instancePtr, int iGame, ref uint pnAppID, ref uint pnIP, ref char pnConnPort, ref char pnQueryPort, ref uint punFlags, ref uint pRTime32LastPlayedOnServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_AddFavoriteGame")]
+internal static extern int SteamAPI_ISteamMatchmaking_AddFavoriteGame(IntPtr instancePtr, uint nAppID, uint nIP, char nConnPort, char nQueryPort, uint unFlags, uint rTime32LastPlayedOnServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_RemoveFavoriteGame")]
+internal static extern bool SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(IntPtr instancePtr, uint nAppID, uint nIP, char nConnPort, char nQueryPort, uint unFlags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_RequestLobbyList")]
+internal static extern ulong SteamAPI_ISteamMatchmaking_RequestLobbyList(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter")]
+internal static extern void SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(IntPtr instancePtr, string pchKeyToMatch, string pchValueToMatch, uint eComparisonType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter")]
+internal static extern void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(IntPtr instancePtr, string pchKeyToMatch, int nValueToMatch, uint eComparisonType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter")]
+internal static extern void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(IntPtr instancePtr, string pchKeyToMatch, int nValueToBeCloseTo);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable")]
+internal static extern void SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(IntPtr instancePtr, int nSlotsAvailable);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter")]
+internal static extern void SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(IntPtr instancePtr, uint eLobbyDistanceFilter);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter")]
+internal static extern void SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(IntPtr instancePtr, int cMaxResults);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter")]
+internal static extern void SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(IntPtr instancePtr, ulong steamIDLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyByIndex")]
+internal static extern ulong SteamAPI_ISteamMatchmaking_GetLobbyByIndex(IntPtr instancePtr, int iLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_CreateLobby")]
+internal static extern ulong SteamAPI_ISteamMatchmaking_CreateLobby(IntPtr instancePtr, uint eLobbyType, int cMaxMembers);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_JoinLobby")]
+internal static extern ulong SteamAPI_ISteamMatchmaking_JoinLobby(IntPtr instancePtr, ulong steamIDLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_LeaveLobby")]
+internal static extern void SteamAPI_ISteamMatchmaking_LeaveLobby(IntPtr instancePtr, ulong steamIDLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_InviteUserToLobby")]
+internal static extern bool SteamAPI_ISteamMatchmaking_InviteUserToLobby(IntPtr instancePtr, ulong steamIDLobby, ulong steamIDInvitee);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetNumLobbyMembers")]
+internal static extern int SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(IntPtr instancePtr, ulong steamIDLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex")]
+internal static extern ulong SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(IntPtr instancePtr, ulong steamIDLobby, int iMember);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyData")]
+internal static extern IntPtr SteamAPI_ISteamMatchmaking_GetLobbyData(IntPtr instancePtr, ulong steamIDLobby, string pchKey);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_SetLobbyData")]
+internal static extern bool SteamAPI_ISteamMatchmaking_SetLobbyData(IntPtr instancePtr, ulong steamIDLobby, string pchKey, string pchValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyDataCount")]
+internal static extern int SteamAPI_ISteamMatchmaking_GetLobbyDataCount(IntPtr instancePtr, ulong steamIDLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex")]
+internal static extern bool SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(IntPtr instancePtr, ulong steamIDLobby, int iLobbyData, string pchKey, int cchKeyBufferSize, string pchValue, int cchValueBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_DeleteLobbyData")]
+internal static extern bool SteamAPI_ISteamMatchmaking_DeleteLobbyData(IntPtr instancePtr, ulong steamIDLobby, string pchKey);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyMemberData")]
+internal static extern IntPtr SteamAPI_ISteamMatchmaking_GetLobbyMemberData(IntPtr instancePtr, ulong steamIDLobby, ulong steamIDUser, string pchKey);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_SetLobbyMemberData")]
+internal static extern void SteamAPI_ISteamMatchmaking_SetLobbyMemberData(IntPtr instancePtr, ulong steamIDLobby, string pchKey, string pchValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_SendLobbyChatMsg")]
+internal static extern bool SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(IntPtr instancePtr, ulong steamIDLobby, IntPtr pvMsgBody, int cubMsgBody);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyChatEntry")]
+internal static extern int SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(IntPtr instancePtr, ulong steamIDLobby, int iChatID, ref CSteamID pSteamIDUser, IntPtr pvData, int cubData, ref uint peChatEntryType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_RequestLobbyData")]
+internal static extern bool SteamAPI_ISteamMatchmaking_RequestLobbyData(IntPtr instancePtr, ulong steamIDLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_SetLobbyGameServer")]
+internal static extern void SteamAPI_ISteamMatchmaking_SetLobbyGameServer(IntPtr instancePtr, ulong steamIDLobby, uint unGameServerIP, char unGameServerPort, ulong steamIDGameServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyGameServer")]
+internal static extern bool SteamAPI_ISteamMatchmaking_GetLobbyGameServer(IntPtr instancePtr, ulong steamIDLobby, ref uint punGameServerIP, ref char punGameServerPort, ref CSteamID psteamIDGameServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit")]
+internal static extern bool SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(IntPtr instancePtr, ulong steamIDLobby, int cMaxMembers);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit")]
+internal static extern int SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(IntPtr instancePtr, ulong steamIDLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_SetLobbyType")]
+internal static extern bool SteamAPI_ISteamMatchmaking_SetLobbyType(IntPtr instancePtr, ulong steamIDLobby, uint eLobbyType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_SetLobbyJoinable")]
+internal static extern bool SteamAPI_ISteamMatchmaking_SetLobbyJoinable(IntPtr instancePtr, ulong steamIDLobby, bool bLobbyJoinable);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyOwner")]
+internal static extern ulong SteamAPI_ISteamMatchmaking_GetLobbyOwner(IntPtr instancePtr, ulong steamIDLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_SetLobbyOwner")]
+internal static extern bool SteamAPI_ISteamMatchmaking_SetLobbyOwner(IntPtr instancePtr, ulong steamIDLobby, ulong steamIDNewOwner);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_SetLinkedLobby")]
+internal static extern bool SteamAPI_ISteamMatchmaking_SetLinkedLobby(IntPtr instancePtr, ulong steamIDLobby, ulong steamIDLobbyDependent);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded")]
+internal static extern void SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(IntPtr instancePtr, uint hRequest, int iServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond")]
+internal static extern void SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(IntPtr instancePtr, uint hRequest, int iServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete")]
+internal static extern void SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(IntPtr instancePtr, uint hRequest, uint response);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingPingResponse_ServerResponded")]
+internal static extern void SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(IntPtr instancePtr, IntPtr server);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond")]
+internal static extern void SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList")]
+internal static extern void SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(IntPtr instancePtr, string pchName, int nScore, float flTimePlayed);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond")]
+internal static extern void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete")]
+internal static extern void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded")]
+internal static extern void SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(IntPtr instancePtr, string pchRule, string pchValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond")]
+internal static extern void SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete")]
+internal static extern void SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_RequestInternetServerList")]
+internal static extern uint SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(IntPtr instancePtr, uint iApp, [In, Out] IntPtr[] ppchFilters, uint nFilters, IntPtr pRequestServersResponse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_RequestLANServerList")]
+internal static extern uint SteamAPI_ISteamMatchmakingServers_RequestLANServerList(IntPtr instancePtr, uint iApp, IntPtr pRequestServersResponse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList")]
+internal static extern uint SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(IntPtr instancePtr, uint iApp, [In, Out] IntPtr[] ppchFilters, uint nFilters, IntPtr pRequestServersResponse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList")]
+internal static extern uint SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(IntPtr instancePtr, uint iApp, [In, Out] IntPtr[] ppchFilters, uint nFilters, IntPtr pRequestServersResponse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList")]
+internal static extern uint SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(IntPtr instancePtr, uint iApp, [In, Out] IntPtr[] ppchFilters, uint nFilters, IntPtr pRequestServersResponse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList")]
+internal static extern uint SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(IntPtr instancePtr, uint iApp, [In, Out] IntPtr[] ppchFilters, uint nFilters, IntPtr pRequestServersResponse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_ReleaseRequest")]
+internal static extern void SteamAPI_ISteamMatchmakingServers_ReleaseRequest(IntPtr instancePtr, uint hServerListRequest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_GetServerDetails")]
+internal static extern IntPtr SteamAPI_ISteamMatchmakingServers_GetServerDetails(IntPtr instancePtr, uint hRequest, int iServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_CancelQuery")]
+internal static extern void SteamAPI_ISteamMatchmakingServers_CancelQuery(IntPtr instancePtr, uint hRequest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_RefreshQuery")]
+internal static extern void SteamAPI_ISteamMatchmakingServers_RefreshQuery(IntPtr instancePtr, uint hRequest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_IsRefreshing")]
+internal static extern bool SteamAPI_ISteamMatchmakingServers_IsRefreshing(IntPtr instancePtr, uint hRequest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_GetServerCount")]
+internal static extern int SteamAPI_ISteamMatchmakingServers_GetServerCount(IntPtr instancePtr, uint hRequest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_RefreshServer")]
+internal static extern void SteamAPI_ISteamMatchmakingServers_RefreshServer(IntPtr instancePtr, uint hRequest, int iServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_PingServer")]
+internal static extern uint SteamAPI_ISteamMatchmakingServers_PingServer(IntPtr instancePtr, uint unIP, char usPort, IntPtr pRequestServersResponse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_PlayerDetails")]
+internal static extern uint SteamAPI_ISteamMatchmakingServers_PlayerDetails(IntPtr instancePtr, uint unIP, char usPort, IntPtr pRequestServersResponse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_ServerRules")]
+internal static extern uint SteamAPI_ISteamMatchmakingServers_ServerRules(IntPtr instancePtr, uint unIP, char usPort, IntPtr pRequestServersResponse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_CancelServerQuery")]
+internal static extern void SteamAPI_ISteamMatchmakingServers_CancelServerQuery(IntPtr instancePtr, uint hServerQuery);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileWrite")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_FileWrite(IntPtr instancePtr, string pchFile, IntPtr pvData, int cubData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileRead")]
+internal static extern int SteamAPI_ISteamRemoteStorage_FileRead(IntPtr instancePtr, string pchFile, IntPtr pvData, int cubDataToRead);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileWriteAsync")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_FileWriteAsync(IntPtr instancePtr, string pchFile, IntPtr pvData, uint cubData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileReadAsync")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_FileReadAsync(IntPtr instancePtr, string pchFile, uint nOffset, uint cubToRead);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileReadAsyncComplete")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_FileReadAsyncComplete(IntPtr instancePtr, ulong hReadCall, IntPtr pvBuffer, uint cubToRead);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileForget")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_FileForget(IntPtr instancePtr, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileDelete")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_FileDelete(IntPtr instancePtr, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileShare")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_FileShare(IntPtr instancePtr, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_SetSyncPlatforms")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(IntPtr instancePtr, string pchFile, uint eRemoteStoragePlatform);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(IntPtr instancePtr, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(IntPtr instancePtr, ulong writeHandle, IntPtr pvData, int cubData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileWriteStreamClose")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(IntPtr instancePtr, ulong writeHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(IntPtr instancePtr, ulong writeHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileExists")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_FileExists(IntPtr instancePtr, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FilePersisted")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_FilePersisted(IntPtr instancePtr, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetFileSize")]
+internal static extern int SteamAPI_ISteamRemoteStorage_GetFileSize(IntPtr instancePtr, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetFileTimestamp")]
+internal static extern long SteamAPI_ISteamRemoteStorage_GetFileTimestamp(IntPtr instancePtr, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetSyncPlatforms")]
+internal static extern uint SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(IntPtr instancePtr, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetFileCount")]
+internal static extern int SteamAPI_ISteamRemoteStorage_GetFileCount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetFileNameAndSize")]
+internal static extern IntPtr SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(IntPtr instancePtr, int iFile, ref int pnFileSizeInBytes);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetQuota")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_GetQuota(IntPtr instancePtr, ref ulong pnTotalBytes, ref ulong puAvailableBytes);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp")]
+internal static extern void SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(IntPtr instancePtr, bool bEnabled);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UGCDownload")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_UGCDownload(IntPtr instancePtr, ulong hContent, uint unPriority);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(IntPtr instancePtr, ulong hContent, ref int pnBytesDownloaded, ref int pnBytesExpected);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetUGCDetails")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_GetUGCDetails(IntPtr instancePtr, ulong hContent, ref uint pnAppID, System.Text.StringBuilder ppchName, ref int pnFileSizeInBytes, ref CSteamID pSteamIDOwner);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UGCRead")]
+internal static extern int SteamAPI_ISteamRemoteStorage_UGCRead(IntPtr instancePtr, ulong hContent, IntPtr pvData, int cubDataToRead, uint cOffset, uint eAction);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetCachedUGCCount")]
+internal static extern int SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(IntPtr instancePtr, int iCachedContent);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_PublishWorkshopFile")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(IntPtr instancePtr, string pchFile, string pchPreviewFile, uint nConsumerAppId, string pchTitle, string pchDescription, uint eVisibility, ref SteamParamStringArray_t pTags, uint eWorkshopFileType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(IntPtr instancePtr, ulong unPublishedFileId);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(IntPtr instancePtr, ulong updateHandle, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(IntPtr instancePtr, ulong updateHandle, string pchPreviewFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(IntPtr instancePtr, ulong updateHandle, string pchTitle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(IntPtr instancePtr, ulong updateHandle, string pchDescription);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(IntPtr instancePtr, ulong updateHandle, uint eVisibility);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(IntPtr instancePtr, ulong updateHandle, ref SteamParamStringArray_t pTags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(IntPtr instancePtr, ulong updateHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(IntPtr instancePtr, ulong unPublishedFileId, uint unMaxSecondsOld);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_DeletePublishedFile")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_DeletePublishedFile(IntPtr instancePtr, ulong unPublishedFileId);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(IntPtr instancePtr, uint unStartIndex);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_SubscribePublishedFile")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(IntPtr instancePtr, ulong unPublishedFileId);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(IntPtr instancePtr, uint unStartIndex);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(IntPtr instancePtr, ulong unPublishedFileId);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(IntPtr instancePtr, ulong updateHandle, string pchChangeDescription);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(IntPtr instancePtr, ulong unPublishedFileId);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(IntPtr instancePtr, ulong unPublishedFileId, bool bVoteUp);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(IntPtr instancePtr, ulong unPublishedFileId);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(IntPtr instancePtr, ulong steamId, uint unStartIndex, ref SteamParamStringArray_t pRequiredTags, ref SteamParamStringArray_t pExcludedTags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_PublishVideo")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_PublishVideo(IntPtr instancePtr, uint eVideoProvider, string pchVideoAccount, string pchVideoIdentifier, string pchPreviewFile, uint nConsumerAppId, string pchTitle, string pchDescription, uint eVisibility, ref SteamParamStringArray_t pTags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(IntPtr instancePtr, ulong unPublishedFileId, uint eAction);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(IntPtr instancePtr, uint eAction, uint unStartIndex);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(IntPtr instancePtr, uint eEnumerationType, uint unStartIndex, uint unCount, uint unDays, ref SteamParamStringArray_t pTags, ref SteamParamStringArray_t pUserTags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(IntPtr instancePtr, ulong hContent, string pchLocation, uint unPriority);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_RequestCurrentStats")]
+internal static extern bool SteamAPI_ISteamUserStats_RequestCurrentStats(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetStat")]
+internal static extern bool SteamAPI_ISteamUserStats_GetStat(IntPtr instancePtr, string pchName, ref int pData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetStat0")]
+internal static extern bool SteamAPI_ISteamUserStats_GetStat0(IntPtr instancePtr, string pchName, ref float pData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_SetStat")]
+internal static extern bool SteamAPI_ISteamUserStats_SetStat(IntPtr instancePtr, string pchName, int nData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_SetStat0")]
+internal static extern bool SteamAPI_ISteamUserStats_SetStat0(IntPtr instancePtr, string pchName, float fData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_UpdateAvgRateStat")]
+internal static extern bool SteamAPI_ISteamUserStats_UpdateAvgRateStat(IntPtr instancePtr, string pchName, float flCountThisSession, double dSessionLength);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetAchievement")]
+internal static extern bool SteamAPI_ISteamUserStats_GetAchievement(IntPtr instancePtr, string pchName, ref bool pbAchieved);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_SetAchievement")]
+internal static extern bool SteamAPI_ISteamUserStats_SetAchievement(IntPtr instancePtr, string pchName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_ClearAchievement")]
+internal static extern bool SteamAPI_ISteamUserStats_ClearAchievement(IntPtr instancePtr, string pchName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime")]
+internal static extern bool SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(IntPtr instancePtr, string pchName, ref bool pbAchieved, ref uint punUnlockTime);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_StoreStats")]
+internal static extern bool SteamAPI_ISteamUserStats_StoreStats(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetAchievementIcon")]
+internal static extern int SteamAPI_ISteamUserStats_GetAchievementIcon(IntPtr instancePtr, string pchName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute")]
+internal static extern IntPtr SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(IntPtr instancePtr, string pchName, string pchKey);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_IndicateAchievementProgress")]
+internal static extern bool SteamAPI_ISteamUserStats_IndicateAchievementProgress(IntPtr instancePtr, string pchName, uint nCurProgress, uint nMaxProgress);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetNumAchievements")]
+internal static extern uint SteamAPI_ISteamUserStats_GetNumAchievements(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetAchievementName")]
+internal static extern IntPtr SteamAPI_ISteamUserStats_GetAchievementName(IntPtr instancePtr, uint iAchievement);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_RequestUserStats")]
+internal static extern ulong SteamAPI_ISteamUserStats_RequestUserStats(IntPtr instancePtr, ulong steamIDUser);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetUserStat")]
+internal static extern bool SteamAPI_ISteamUserStats_GetUserStat(IntPtr instancePtr, ulong steamIDUser, string pchName, ref int pData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetUserStat0")]
+internal static extern bool SteamAPI_ISteamUserStats_GetUserStat0(IntPtr instancePtr, ulong steamIDUser, string pchName, ref float pData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetUserAchievement")]
+internal static extern bool SteamAPI_ISteamUserStats_GetUserAchievement(IntPtr instancePtr, ulong steamIDUser, string pchName, ref bool pbAchieved);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime")]
+internal static extern bool SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(IntPtr instancePtr, ulong steamIDUser, string pchName, ref bool pbAchieved, ref uint punUnlockTime);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_ResetAllStats")]
+internal static extern bool SteamAPI_ISteamUserStats_ResetAllStats(IntPtr instancePtr, bool bAchievementsToo);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_FindOrCreateLeaderboard")]
+internal static extern ulong SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(IntPtr instancePtr, string pchLeaderboardName, uint eLeaderboardSortMethod, uint eLeaderboardDisplayType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_FindLeaderboard")]
+internal static extern ulong SteamAPI_ISteamUserStats_FindLeaderboard(IntPtr instancePtr, string pchLeaderboardName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetLeaderboardName")]
+internal static extern IntPtr SteamAPI_ISteamUserStats_GetLeaderboardName(IntPtr instancePtr, ulong hSteamLeaderboard);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetLeaderboardEntryCount")]
+internal static extern int SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(IntPtr instancePtr, ulong hSteamLeaderboard);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetLeaderboardSortMethod")]
+internal static extern uint SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(IntPtr instancePtr, ulong hSteamLeaderboard);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetLeaderboardDisplayType")]
+internal static extern uint SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(IntPtr instancePtr, ulong hSteamLeaderboard);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_DownloadLeaderboardEntries")]
+internal static extern ulong SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(IntPtr instancePtr, ulong hSteamLeaderboard, uint eLeaderboardDataRequest, int nRangeStart, int nRangeEnd);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers")]
+internal static extern ulong SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(IntPtr instancePtr, ulong hSteamLeaderboard, [In, Out] CSteamID[] prgUsers, int cUsers);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry")]
+internal static extern bool SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(IntPtr instancePtr, ulong hSteamLeaderboardEntries, int index, ref LeaderboardEntry_t pLeaderboardEntry, ref int pDetails, int cDetailsMax);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_UploadLeaderboardScore")]
+internal static extern ulong SteamAPI_ISteamUserStats_UploadLeaderboardScore(IntPtr instancePtr, ulong hSteamLeaderboard, uint eLeaderboardUploadScoreMethod, int nScore, ref int pScoreDetails, int cScoreDetailsCount);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_AttachLeaderboardUGC")]
+internal static extern ulong SteamAPI_ISteamUserStats_AttachLeaderboardUGC(IntPtr instancePtr, ulong hSteamLeaderboard, ulong hUGC);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers")]
+internal static extern ulong SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages")]
+internal static extern ulong SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo")]
+internal static extern int SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(IntPtr instancePtr, string pchName, uint unNameBufLen, ref float pflPercent, ref bool pbAchieved);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo")]
+internal static extern int SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(IntPtr instancePtr, int iIteratorPrevious, string pchName, uint unNameBufLen, ref float pflPercent, ref bool pbAchieved);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetAchievementAchievedPercent")]
+internal static extern bool SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(IntPtr instancePtr, string pchName, ref float pflPercent);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_RequestGlobalStats")]
+internal static extern ulong SteamAPI_ISteamUserStats_RequestGlobalStats(IntPtr instancePtr, int nHistoryDays);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetGlobalStat")]
+internal static extern bool SteamAPI_ISteamUserStats_GetGlobalStat(IntPtr instancePtr, string pchStatName, ref long pData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetGlobalStat0")]
+internal static extern bool SteamAPI_ISteamUserStats_GetGlobalStat0(IntPtr instancePtr, string pchStatName, ref double pData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetGlobalStatHistory")]
+internal static extern int SteamAPI_ISteamUserStats_GetGlobalStatHistory(IntPtr instancePtr, string pchStatName, [In, Out] long[] pData, uint cubData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetGlobalStatHistory0")]
+internal static extern int SteamAPI_ISteamUserStats_GetGlobalStatHistory0(IntPtr instancePtr, string pchStatName, [In, Out] double[] pData, uint cubData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_BIsSubscribed")]
+internal static extern bool SteamAPI_ISteamApps_BIsSubscribed(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_BIsLowViolence")]
+internal static extern bool SteamAPI_ISteamApps_BIsLowViolence(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_BIsCybercafe")]
+internal static extern bool SteamAPI_ISteamApps_BIsCybercafe(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_BIsVACBanned")]
+internal static extern bool SteamAPI_ISteamApps_BIsVACBanned(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetCurrentGameLanguage")]
+internal static extern IntPtr SteamAPI_ISteamApps_GetCurrentGameLanguage(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetAvailableGameLanguages")]
+internal static extern IntPtr SteamAPI_ISteamApps_GetAvailableGameLanguages(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_BIsSubscribedApp")]
+internal static extern bool SteamAPI_ISteamApps_BIsSubscribedApp(IntPtr instancePtr, uint appID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_BIsDlcInstalled")]
+internal static extern bool SteamAPI_ISteamApps_BIsDlcInstalled(IntPtr instancePtr, uint appID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime")]
+internal static extern uint SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(IntPtr instancePtr, uint nAppID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend")]
+internal static extern bool SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetDLCCount")]
+internal static extern int SteamAPI_ISteamApps_GetDLCCount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_BGetDLCDataByIndex")]
+internal static extern bool SteamAPI_ISteamApps_BGetDLCDataByIndex(IntPtr instancePtr, int iDLC, ref uint pAppID, ref bool pbAvailable, string pchName, int cchNameBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_InstallDLC")]
+internal static extern void SteamAPI_ISteamApps_InstallDLC(IntPtr instancePtr, uint nAppID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_UninstallDLC")]
+internal static extern void SteamAPI_ISteamApps_UninstallDLC(IntPtr instancePtr, uint nAppID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey")]
+internal static extern void SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(IntPtr instancePtr, uint nAppID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetCurrentBetaName")]
+internal static extern bool SteamAPI_ISteamApps_GetCurrentBetaName(IntPtr instancePtr, string pchName, int cchNameBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_MarkContentCorrupt")]
+internal static extern bool SteamAPI_ISteamApps_MarkContentCorrupt(IntPtr instancePtr, bool bMissingFilesOnly);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetInstalledDepots")]
+internal static extern uint SteamAPI_ISteamApps_GetInstalledDepots(IntPtr instancePtr, uint appID, ref uint pvecDepots, uint cMaxDepots);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetAppInstallDir")]
+internal static extern uint SteamAPI_ISteamApps_GetAppInstallDir(IntPtr instancePtr, uint appID, string pchFolder, uint cchFolderBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_BIsAppInstalled")]
+internal static extern bool SteamAPI_ISteamApps_BIsAppInstalled(IntPtr instancePtr, uint appID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetAppOwner")]
+internal static extern ulong SteamAPI_ISteamApps_GetAppOwner(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetLaunchQueryParam")]
+internal static extern IntPtr SteamAPI_ISteamApps_GetLaunchQueryParam(IntPtr instancePtr, string pchKey);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetDlcDownloadProgress")]
+internal static extern bool SteamAPI_ISteamApps_GetDlcDownloadProgress(IntPtr instancePtr, uint nAppID, ref ulong punBytesDownloaded, ref ulong punBytesTotal);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetAppBuildId")]
+internal static extern int SteamAPI_ISteamApps_GetAppBuildId(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_RequestAllProofOfPurchaseKeys")]
+internal static extern void SteamAPI_ISteamApps_RequestAllProofOfPurchaseKeys(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetFileDetails")]
+internal static extern ulong SteamAPI_ISteamApps_GetFileDetails(IntPtr instancePtr, string pszFileName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_SendP2PPacket")]
+internal static extern bool SteamAPI_ISteamNetworking_SendP2PPacket(IntPtr instancePtr, ulong steamIDRemote, IntPtr pubData, uint cubData, uint eP2PSendType, int nChannel);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_IsP2PPacketAvailable")]
+internal static extern bool SteamAPI_ISteamNetworking_IsP2PPacketAvailable(IntPtr instancePtr, ref uint pcubMsgSize, int nChannel);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_ReadP2PPacket")]
+internal static extern bool SteamAPI_ISteamNetworking_ReadP2PPacket(IntPtr instancePtr, IntPtr pubDest, uint cubDest, ref uint pcubMsgSize, ref CSteamID psteamIDRemote, int nChannel);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser")]
+internal static extern bool SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(IntPtr instancePtr, ulong steamIDRemote);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_CloseP2PSessionWithUser")]
+internal static extern bool SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(IntPtr instancePtr, ulong steamIDRemote);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_CloseP2PChannelWithUser")]
+internal static extern bool SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(IntPtr instancePtr, ulong steamIDRemote, int nChannel);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_GetP2PSessionState")]
+internal static extern bool SteamAPI_ISteamNetworking_GetP2PSessionState(IntPtr instancePtr, ulong steamIDRemote, ref P2PSessionState_t pConnectionState);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_AllowP2PPacketRelay")]
+internal static extern bool SteamAPI_ISteamNetworking_AllowP2PPacketRelay(IntPtr instancePtr, bool bAllow);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_CreateListenSocket")]
+internal static extern uint SteamAPI_ISteamNetworking_CreateListenSocket(IntPtr instancePtr, int nVirtualP2PPort, uint nIP, char nPort, bool bAllowUseOfPacketRelay);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_CreateP2PConnectionSocket")]
+internal static extern uint SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(IntPtr instancePtr, ulong steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_CreateConnectionSocket")]
+internal static extern uint SteamAPI_ISteamNetworking_CreateConnectionSocket(IntPtr instancePtr, uint nIP, char nPort, int nTimeoutSec);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_DestroySocket")]
+internal static extern bool SteamAPI_ISteamNetworking_DestroySocket(IntPtr instancePtr, uint hSocket, bool bNotifyRemoteEnd);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_DestroyListenSocket")]
+internal static extern bool SteamAPI_ISteamNetworking_DestroyListenSocket(IntPtr instancePtr, uint hSocket, bool bNotifyRemoteEnd);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_SendDataOnSocket")]
+internal static extern bool SteamAPI_ISteamNetworking_SendDataOnSocket(IntPtr instancePtr, uint hSocket, IntPtr pubData, uint cubData, bool bReliable);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_IsDataAvailableOnSocket")]
+internal static extern bool SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(IntPtr instancePtr, uint hSocket, ref uint pcubMsgSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_RetrieveDataFromSocket")]
+internal static extern bool SteamAPI_ISteamNetworking_RetrieveDataFromSocket(IntPtr instancePtr, uint hSocket, IntPtr pubDest, uint cubDest, ref uint pcubMsgSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_IsDataAvailable")]
+internal static extern bool SteamAPI_ISteamNetworking_IsDataAvailable(IntPtr instancePtr, uint hListenSocket, ref uint pcubMsgSize, ref uint phSocket);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_RetrieveData")]
+internal static extern bool SteamAPI_ISteamNetworking_RetrieveData(IntPtr instancePtr, uint hListenSocket, IntPtr pubDest, uint cubDest, ref uint pcubMsgSize, ref uint phSocket);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_GetSocketInfo")]
+internal static extern bool SteamAPI_ISteamNetworking_GetSocketInfo(IntPtr instancePtr, uint hSocket, ref CSteamID pSteamIDRemote, ref int peSocketStatus, ref uint punIPRemote, ref char punPortRemote);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_GetListenSocketInfo")]
+internal static extern bool SteamAPI_ISteamNetworking_GetListenSocketInfo(IntPtr instancePtr, uint hListenSocket, ref uint pnIP, ref char pnPort);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_GetSocketConnectionType")]
+internal static extern uint SteamAPI_ISteamNetworking_GetSocketConnectionType(IntPtr instancePtr, uint hSocket);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_GetMaxPacketSize")]
+internal static extern int SteamAPI_ISteamNetworking_GetMaxPacketSize(IntPtr instancePtr, uint hSocket);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamScreenshots_WriteScreenshot")]
+internal static extern uint SteamAPI_ISteamScreenshots_WriteScreenshot(IntPtr instancePtr, IntPtr pubRGB, uint cubRGB, int nWidth, int nHeight);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamScreenshots_AddScreenshotToLibrary")]
+internal static extern uint SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(IntPtr instancePtr, string pchFilename, string pchThumbnailFilename, int nWidth, int nHeight);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamScreenshots_TriggerScreenshot")]
+internal static extern void SteamAPI_ISteamScreenshots_TriggerScreenshot(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamScreenshots_HookScreenshots")]
+internal static extern void SteamAPI_ISteamScreenshots_HookScreenshots(IntPtr instancePtr, bool bHook);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamScreenshots_SetLocation")]
+internal static extern bool SteamAPI_ISteamScreenshots_SetLocation(IntPtr instancePtr, uint hScreenshot, string pchLocation);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamScreenshots_TagUser")]
+internal static extern bool SteamAPI_ISteamScreenshots_TagUser(IntPtr instancePtr, uint hScreenshot, ulong steamID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamScreenshots_TagPublishedFile")]
+internal static extern bool SteamAPI_ISteamScreenshots_TagPublishedFile(IntPtr instancePtr, uint hScreenshot, ulong unPublishedFileID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamScreenshots_IsScreenshotsHooked")]
+internal static extern bool SteamAPI_ISteamScreenshots_IsScreenshotsHooked(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamScreenshots_AddVRScreenshotToLibrary")]
+internal static extern uint SteamAPI_ISteamScreenshots_AddVRScreenshotToLibrary(IntPtr instancePtr, uint eType, string pchFilename, string pchVRFilename);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusic_BIsEnabled")]
+internal static extern bool SteamAPI_ISteamMusic_BIsEnabled(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusic_BIsPlaying")]
+internal static extern bool SteamAPI_ISteamMusic_BIsPlaying(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusic_GetPlaybackStatus")]
+internal static extern int SteamAPI_ISteamMusic_GetPlaybackStatus(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusic_Play")]
+internal static extern void SteamAPI_ISteamMusic_Play(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusic_Pause")]
+internal static extern void SteamAPI_ISteamMusic_Pause(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusic_PlayPrevious")]
+internal static extern void SteamAPI_ISteamMusic_PlayPrevious(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusic_PlayNext")]
+internal static extern void SteamAPI_ISteamMusic_PlayNext(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusic_SetVolume")]
+internal static extern void SteamAPI_ISteamMusic_SetVolume(IntPtr instancePtr, float flVolume);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusic_GetVolume")]
+internal static extern float SteamAPI_ISteamMusic_GetVolume(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote")]
+internal static extern bool SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(IntPtr instancePtr, string pchName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote")]
+internal static extern bool SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote")]
+internal static extern bool SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_BActivationSuccess")]
+internal static extern bool SteamAPI_ISteamMusicRemote_BActivationSuccess(IntPtr instancePtr, bool bValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_SetDisplayName")]
+internal static extern bool SteamAPI_ISteamMusicRemote_SetDisplayName(IntPtr instancePtr, string pchDisplayName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64")]
+internal static extern bool SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(IntPtr instancePtr, IntPtr pvBuffer, uint cbBufferLength);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_EnablePlayPrevious")]
+internal static extern bool SteamAPI_ISteamMusicRemote_EnablePlayPrevious(IntPtr instancePtr, bool bValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_EnablePlayNext")]
+internal static extern bool SteamAPI_ISteamMusicRemote_EnablePlayNext(IntPtr instancePtr, bool bValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_EnableShuffled")]
+internal static extern bool SteamAPI_ISteamMusicRemote_EnableShuffled(IntPtr instancePtr, bool bValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_EnableLooped")]
+internal static extern bool SteamAPI_ISteamMusicRemote_EnableLooped(IntPtr instancePtr, bool bValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_EnableQueue")]
+internal static extern bool SteamAPI_ISteamMusicRemote_EnableQueue(IntPtr instancePtr, bool bValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_EnablePlaylists")]
+internal static extern bool SteamAPI_ISteamMusicRemote_EnablePlaylists(IntPtr instancePtr, bool bValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus")]
+internal static extern bool SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(IntPtr instancePtr, int nStatus);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_UpdateShuffled")]
+internal static extern bool SteamAPI_ISteamMusicRemote_UpdateShuffled(IntPtr instancePtr, bool bValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_UpdateLooped")]
+internal static extern bool SteamAPI_ISteamMusicRemote_UpdateLooped(IntPtr instancePtr, bool bValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_UpdateVolume")]
+internal static extern bool SteamAPI_ISteamMusicRemote_UpdateVolume(IntPtr instancePtr, float flValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_CurrentEntryWillChange")]
+internal static extern bool SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable")]
+internal static extern bool SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(IntPtr instancePtr, bool bAvailable);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText")]
+internal static extern bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(IntPtr instancePtr, string pchText);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds")]
+internal static extern bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(IntPtr instancePtr, int nValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt")]
+internal static extern bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(IntPtr instancePtr, IntPtr pvBuffer, uint cbBufferLength);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_CurrentEntryDidChange")]
+internal static extern bool SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_QueueWillChange")]
+internal static extern bool SteamAPI_ISteamMusicRemote_QueueWillChange(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_ResetQueueEntries")]
+internal static extern bool SteamAPI_ISteamMusicRemote_ResetQueueEntries(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_SetQueueEntry")]
+internal static extern bool SteamAPI_ISteamMusicRemote_SetQueueEntry(IntPtr instancePtr, int nID, int nPosition, string pchEntryText);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry")]
+internal static extern bool SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(IntPtr instancePtr, int nID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_QueueDidChange")]
+internal static extern bool SteamAPI_ISteamMusicRemote_QueueDidChange(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_PlaylistWillChange")]
+internal static extern bool SteamAPI_ISteamMusicRemote_PlaylistWillChange(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_ResetPlaylistEntries")]
+internal static extern bool SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_SetPlaylistEntry")]
+internal static extern bool SteamAPI_ISteamMusicRemote_SetPlaylistEntry(IntPtr instancePtr, int nID, int nPosition, string pchEntryText);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry")]
+internal static extern bool SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(IntPtr instancePtr, int nID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_PlaylistDidChange")]
+internal static extern bool SteamAPI_ISteamMusicRemote_PlaylistDidChange(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_CreateHTTPRequest")]
+internal static extern uint SteamAPI_ISteamHTTP_CreateHTTPRequest(IntPtr instancePtr, uint eHTTPRequestMethod, string pchAbsoluteURL);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetHTTPRequestContextValue")]
+internal static extern bool SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(IntPtr instancePtr, uint hRequest, ulong ulContextValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout")]
+internal static extern bool SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(IntPtr instancePtr, uint hRequest, uint unTimeoutSeconds);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue")]
+internal static extern bool SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(IntPtr instancePtr, uint hRequest, string pchHeaderName, string pchHeaderValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter")]
+internal static extern bool SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(IntPtr instancePtr, uint hRequest, string pchParamName, string pchParamValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SendHTTPRequest")]
+internal static extern bool SteamAPI_ISteamHTTP_SendHTTPRequest(IntPtr instancePtr, uint hRequest, ref ulong pCallHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse")]
+internal static extern bool SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(IntPtr instancePtr, uint hRequest, ref ulong pCallHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_DeferHTTPRequest")]
+internal static extern bool SteamAPI_ISteamHTTP_DeferHTTPRequest(IntPtr instancePtr, uint hRequest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_PrioritizeHTTPRequest")]
+internal static extern bool SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(IntPtr instancePtr, uint hRequest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize")]
+internal static extern bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(IntPtr instancePtr, uint hRequest, string pchHeaderName, ref uint unResponseHeaderSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue")]
+internal static extern bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(IntPtr instancePtr, uint hRequest, string pchHeaderName, IntPtr pHeaderValueBuffer, uint unBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_GetHTTPResponseBodySize")]
+internal static extern bool SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(IntPtr instancePtr, uint hRequest, ref uint unBodySize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_GetHTTPResponseBodyData")]
+internal static extern bool SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(IntPtr instancePtr, uint hRequest, IntPtr pBodyDataBuffer, uint unBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData")]
+internal static extern bool SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(IntPtr instancePtr, uint hRequest, uint cOffset, IntPtr pBodyDataBuffer, uint unBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_ReleaseHTTPRequest")]
+internal static extern bool SteamAPI_ISteamHTTP_ReleaseHTTPRequest(IntPtr instancePtr, uint hRequest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct")]
+internal static extern bool SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(IntPtr instancePtr, uint hRequest, ref float pflPercentOut);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody")]
+internal static extern bool SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(IntPtr instancePtr, uint hRequest, string pchContentType, IntPtr pubBody, uint unBodyLen);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_CreateCookieContainer")]
+internal static extern uint SteamAPI_ISteamHTTP_CreateCookieContainer(IntPtr instancePtr, bool bAllowResponsesToModify);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_ReleaseCookieContainer")]
+internal static extern bool SteamAPI_ISteamHTTP_ReleaseCookieContainer(IntPtr instancePtr, uint hCookieContainer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetCookie")]
+internal static extern bool SteamAPI_ISteamHTTP_SetCookie(IntPtr instancePtr, uint hCookieContainer, string pchHost, string pchUrl, string pchCookie);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer")]
+internal static extern bool SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(IntPtr instancePtr, uint hRequest, uint hCookieContainer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo")]
+internal static extern bool SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(IntPtr instancePtr, uint hRequest, string pchUserAgentInfo);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate")]
+internal static extern bool SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(IntPtr instancePtr, uint hRequest, bool bRequireVerifiedCertificate);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS")]
+internal static extern bool SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(IntPtr instancePtr, uint hRequest, uint unMilliseconds);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut")]
+internal static extern bool SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(IntPtr instancePtr, uint hRequest, ref bool pbWasTimedOut);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUnifiedMessages_SendMethod")]
+internal static extern ulong SteamAPI_ISteamUnifiedMessages_SendMethod(IntPtr instancePtr, string pchServiceMethod, IntPtr pRequestBuffer, uint unRequestBufferSize, ulong unContext);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo")]
+internal static extern bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo(IntPtr instancePtr, ulong hHandle, ref uint punResponseSize, ref uint peResult);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUnifiedMessages_GetMethodResponseData")]
+internal static extern bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseData(IntPtr instancePtr, ulong hHandle, IntPtr pResponseBuffer, uint unResponseBufferSize, bool bAutoRelease);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUnifiedMessages_ReleaseMethod")]
+internal static extern bool SteamAPI_ISteamUnifiedMessages_ReleaseMethod(IntPtr instancePtr, ulong hHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUnifiedMessages_SendNotification")]
+internal static extern bool SteamAPI_ISteamUnifiedMessages_SendNotification(IntPtr instancePtr, string pchServiceNotification, IntPtr pNotificationBuffer, uint unNotificationBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_Init")]
+internal static extern bool SteamAPI_ISteamController_Init(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_Shutdown")]
+internal static extern bool SteamAPI_ISteamController_Shutdown(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_RunFrame")]
+internal static extern void SteamAPI_ISteamController_RunFrame(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetConnectedControllers")]
+internal static extern int SteamAPI_ISteamController_GetConnectedControllers(IntPtr instancePtr, ref ulong handlesOut);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_ShowBindingPanel")]
+internal static extern bool SteamAPI_ISteamController_ShowBindingPanel(IntPtr instancePtr, ulong controllerHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetActionSetHandle")]
+internal static extern ulong SteamAPI_ISteamController_GetActionSetHandle(IntPtr instancePtr, string pszActionSetName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_ActivateActionSet")]
+internal static extern void SteamAPI_ISteamController_ActivateActionSet(IntPtr instancePtr, ulong controllerHandle, ulong actionSetHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetCurrentActionSet")]
+internal static extern ulong SteamAPI_ISteamController_GetCurrentActionSet(IntPtr instancePtr, ulong controllerHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetDigitalActionHandle")]
+internal static extern ulong SteamAPI_ISteamController_GetDigitalActionHandle(IntPtr instancePtr, string pszActionName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetDigitalActionData")]
+internal static extern ControllerDigitalActionData_t SteamAPI_ISteamController_GetDigitalActionData(IntPtr instancePtr, ulong controllerHandle, ulong digitalActionHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetDigitalActionOrigins")]
+internal static extern int SteamAPI_ISteamController_GetDigitalActionOrigins(IntPtr instancePtr, ulong controllerHandle, ulong actionSetHandle, ulong digitalActionHandle, ref uint originsOut);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetAnalogActionHandle")]
+internal static extern ulong SteamAPI_ISteamController_GetAnalogActionHandle(IntPtr instancePtr, string pszActionName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetAnalogActionData")]
+internal static extern ControllerAnalogActionData_t SteamAPI_ISteamController_GetAnalogActionData(IntPtr instancePtr, ulong controllerHandle, ulong analogActionHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetAnalogActionOrigins")]
+internal static extern int SteamAPI_ISteamController_GetAnalogActionOrigins(IntPtr instancePtr, ulong controllerHandle, ulong actionSetHandle, ulong analogActionHandle, ref uint originsOut);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_StopAnalogActionMomentum")]
+internal static extern void SteamAPI_ISteamController_StopAnalogActionMomentum(IntPtr instancePtr, ulong controllerHandle, ulong eAction);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_TriggerHapticPulse")]
+internal static extern void SteamAPI_ISteamController_TriggerHapticPulse(IntPtr instancePtr, ulong controllerHandle, uint eTargetPad, char usDurationMicroSec);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_TriggerRepeatedHapticPulse")]
+internal static extern void SteamAPI_ISteamController_TriggerRepeatedHapticPulse(IntPtr instancePtr, ulong controllerHandle, uint eTargetPad, char usDurationMicroSec, char usOffMicroSec, char unRepeat, uint nFlags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_TriggerVibration")]
+internal static extern void SteamAPI_ISteamController_TriggerVibration(IntPtr instancePtr, ulong controllerHandle, char usLeftSpeed, char usRightSpeed);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_SetLEDColor")]
+internal static extern void SteamAPI_ISteamController_SetLEDColor(IntPtr instancePtr, ulong controllerHandle, byte nColorR, byte nColorG, byte nColorB, uint nFlags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetGamepadIndexForController")]
+internal static extern int SteamAPI_ISteamController_GetGamepadIndexForController(IntPtr instancePtr, ulong ulControllerHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetControllerForGamepadIndex")]
+internal static extern ulong SteamAPI_ISteamController_GetControllerForGamepadIndex(IntPtr instancePtr, int nIndex);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetMotionData")]
+internal static extern ControllerMotionData_t SteamAPI_ISteamController_GetMotionData(IntPtr instancePtr, ulong controllerHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_ShowDigitalActionOrigins")]
+internal static extern bool SteamAPI_ISteamController_ShowDigitalActionOrigins(IntPtr instancePtr, ulong controllerHandle, ulong digitalActionHandle, float flScale, float flXPosition, float flYPosition);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_ShowAnalogActionOrigins")]
+internal static extern bool SteamAPI_ISteamController_ShowAnalogActionOrigins(IntPtr instancePtr, ulong controllerHandle, ulong analogActionHandle, float flScale, float flXPosition, float flYPosition);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetStringForActionOrigin")]
+internal static extern IntPtr SteamAPI_ISteamController_GetStringForActionOrigin(IntPtr instancePtr, uint eOrigin);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetGlyphForActionOrigin")]
+internal static extern IntPtr SteamAPI_ISteamController_GetGlyphForActionOrigin(IntPtr instancePtr, uint eOrigin);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_CreateQueryUserUGCRequest")]
+internal static extern ulong SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(IntPtr instancePtr, uint unAccountID, uint eListType, uint eMatchingUGCType, uint eSortOrder, uint nCreatorAppID, uint nConsumerAppID, uint unPage);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_CreateQueryAllUGCRequest")]
+internal static extern ulong SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(IntPtr instancePtr, uint eQueryType, uint eMatchingeMatchingUGCTypeFileType, uint nCreatorAppID, uint nConsumerAppID, uint unPage);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest")]
+internal static extern ulong SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest(IntPtr instancePtr, ref ulong pvecPublishedFileID, uint unNumPublishedFileIDs);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SendQueryUGCRequest")]
+internal static extern ulong SteamAPI_ISteamUGC_SendQueryUGCRequest(IntPtr instancePtr, ulong handle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCResult")]
+internal static extern bool SteamAPI_ISteamUGC_GetQueryUGCResult(IntPtr instancePtr, ulong handle, uint index, ref SteamUGCDetails_t pDetails);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCPreviewURL")]
+internal static extern bool SteamAPI_ISteamUGC_GetQueryUGCPreviewURL(IntPtr instancePtr, ulong handle, uint index, System.Text.StringBuilder pchURL, uint cchURLSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCMetadata")]
+internal static extern bool SteamAPI_ISteamUGC_GetQueryUGCMetadata(IntPtr instancePtr, ulong handle, uint index, System.Text.StringBuilder pchMetadata, uint cchMetadatasize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCChildren")]
+internal static extern bool SteamAPI_ISteamUGC_GetQueryUGCChildren(IntPtr instancePtr, ulong handle, uint index, ref ulong pvecPublishedFileID, uint cMaxEntries);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCStatistic")]
+internal static extern bool SteamAPI_ISteamUGC_GetQueryUGCStatistic(IntPtr instancePtr, ulong handle, uint index, uint eStatType, ref ulong pStatValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews")]
+internal static extern uint SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews(IntPtr instancePtr, ulong handle, uint index);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview")]
+internal static extern bool SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview(IntPtr instancePtr, ulong handle, uint index, uint previewIndex, System.Text.StringBuilder pchURLOrVideoID, uint cchURLSize, System.Text.StringBuilder pchOriginalFileName, uint cchOriginalFileNameSize, ref uint pPreviewType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCNumKeyValueTags")]
+internal static extern uint SteamAPI_ISteamUGC_GetQueryUGCNumKeyValueTags(IntPtr instancePtr, ulong handle, uint index);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCKeyValueTag")]
+internal static extern bool SteamAPI_ISteamUGC_GetQueryUGCKeyValueTag(IntPtr instancePtr, ulong handle, uint index, uint keyValueTagIndex, System.Text.StringBuilder pchKey, uint cchKeySize, System.Text.StringBuilder pchValue, uint cchValueSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_ReleaseQueryUGCRequest")]
+internal static extern bool SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(IntPtr instancePtr, ulong handle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_AddRequiredTag")]
+internal static extern bool SteamAPI_ISteamUGC_AddRequiredTag(IntPtr instancePtr, ulong handle, string pTagName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_AddExcludedTag")]
+internal static extern bool SteamAPI_ISteamUGC_AddExcludedTag(IntPtr instancePtr, ulong handle, string pTagName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetReturnOnlyIDs")]
+internal static extern bool SteamAPI_ISteamUGC_SetReturnOnlyIDs(IntPtr instancePtr, ulong handle, bool bReturnOnlyIDs);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetReturnKeyValueTags")]
+internal static extern bool SteamAPI_ISteamUGC_SetReturnKeyValueTags(IntPtr instancePtr, ulong handle, bool bReturnKeyValueTags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetReturnLongDescription")]
+internal static extern bool SteamAPI_ISteamUGC_SetReturnLongDescription(IntPtr instancePtr, ulong handle, bool bReturnLongDescription);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetReturnMetadata")]
+internal static extern bool SteamAPI_ISteamUGC_SetReturnMetadata(IntPtr instancePtr, ulong handle, bool bReturnMetadata);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetReturnChildren")]
+internal static extern bool SteamAPI_ISteamUGC_SetReturnChildren(IntPtr instancePtr, ulong handle, bool bReturnChildren);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetReturnAdditionalPreviews")]
+internal static extern bool SteamAPI_ISteamUGC_SetReturnAdditionalPreviews(IntPtr instancePtr, ulong handle, bool bReturnAdditionalPreviews);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetReturnTotalOnly")]
+internal static extern bool SteamAPI_ISteamUGC_SetReturnTotalOnly(IntPtr instancePtr, ulong handle, bool bReturnTotalOnly);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetLanguage")]
+internal static extern bool SteamAPI_ISteamUGC_SetLanguage(IntPtr instancePtr, ulong handle, string pchLanguage);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetAllowCachedResponse")]
+internal static extern bool SteamAPI_ISteamUGC_SetAllowCachedResponse(IntPtr instancePtr, ulong handle, uint unMaxAgeSeconds);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetCloudFileNameFilter")]
+internal static extern bool SteamAPI_ISteamUGC_SetCloudFileNameFilter(IntPtr instancePtr, ulong handle, string pMatchCloudFileName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetMatchAnyTag")]
+internal static extern bool SteamAPI_ISteamUGC_SetMatchAnyTag(IntPtr instancePtr, ulong handle, bool bMatchAnyTag);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetSearchText")]
+internal static extern bool SteamAPI_ISteamUGC_SetSearchText(IntPtr instancePtr, ulong handle, string pSearchText);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetRankedByTrendDays")]
+internal static extern bool SteamAPI_ISteamUGC_SetRankedByTrendDays(IntPtr instancePtr, ulong handle, uint unDays);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_AddRequiredKeyValueTag")]
+internal static extern bool SteamAPI_ISteamUGC_AddRequiredKeyValueTag(IntPtr instancePtr, ulong handle, string pKey, string pValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_RequestUGCDetails")]
+internal static extern ulong SteamAPI_ISteamUGC_RequestUGCDetails(IntPtr instancePtr, ulong nPublishedFileID, uint unMaxAgeSeconds);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_CreateItem")]
+internal static extern ulong SteamAPI_ISteamUGC_CreateItem(IntPtr instancePtr, uint nConsumerAppId, uint eFileType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_StartItemUpdate")]
+internal static extern ulong SteamAPI_ISteamUGC_StartItemUpdate(IntPtr instancePtr, uint nConsumerAppId, ulong nPublishedFileID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetItemTitle")]
+internal static extern bool SteamAPI_ISteamUGC_SetItemTitle(IntPtr instancePtr, ulong handle, string pchTitle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetItemDescription")]
+internal static extern bool SteamAPI_ISteamUGC_SetItemDescription(IntPtr instancePtr, ulong handle, string pchDescription);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetItemUpdateLanguage")]
+internal static extern bool SteamAPI_ISteamUGC_SetItemUpdateLanguage(IntPtr instancePtr, ulong handle, string pchLanguage);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetItemMetadata")]
+internal static extern bool SteamAPI_ISteamUGC_SetItemMetadata(IntPtr instancePtr, ulong handle, string pchMetaData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetItemVisibility")]
+internal static extern bool SteamAPI_ISteamUGC_SetItemVisibility(IntPtr instancePtr, ulong handle, uint eVisibility);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetItemTags")]
+internal static extern bool SteamAPI_ISteamUGC_SetItemTags(IntPtr instancePtr, ulong updateHandle, ref SteamParamStringArray_t pTags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetItemContent")]
+internal static extern bool SteamAPI_ISteamUGC_SetItemContent(IntPtr instancePtr, ulong handle, string pszContentFolder);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetItemPreview")]
+internal static extern bool SteamAPI_ISteamUGC_SetItemPreview(IntPtr instancePtr, ulong handle, string pszPreviewFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_RemoveItemKeyValueTags")]
+internal static extern bool SteamAPI_ISteamUGC_RemoveItemKeyValueTags(IntPtr instancePtr, ulong handle, string pchKey);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_AddItemKeyValueTag")]
+internal static extern bool SteamAPI_ISteamUGC_AddItemKeyValueTag(IntPtr instancePtr, ulong handle, string pchKey, string pchValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_AddItemPreviewFile")]
+internal static extern bool SteamAPI_ISteamUGC_AddItemPreviewFile(IntPtr instancePtr, ulong handle, string pszPreviewFile, uint type);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_AddItemPreviewVideo")]
+internal static extern bool SteamAPI_ISteamUGC_AddItemPreviewVideo(IntPtr instancePtr, ulong handle, string pszVideoID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_UpdateItemPreviewFile")]
+internal static extern bool SteamAPI_ISteamUGC_UpdateItemPreviewFile(IntPtr instancePtr, ulong handle, uint index, string pszPreviewFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_UpdateItemPreviewVideo")]
+internal static extern bool SteamAPI_ISteamUGC_UpdateItemPreviewVideo(IntPtr instancePtr, ulong handle, uint index, string pszVideoID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_RemoveItemPreview")]
+internal static extern bool SteamAPI_ISteamUGC_RemoveItemPreview(IntPtr instancePtr, ulong handle, uint index);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SubmitItemUpdate")]
+internal static extern ulong SteamAPI_ISteamUGC_SubmitItemUpdate(IntPtr instancePtr, ulong handle, string pchChangeNote);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetItemUpdateProgress")]
+internal static extern uint SteamAPI_ISteamUGC_GetItemUpdateProgress(IntPtr instancePtr, ulong handle, ref ulong punBytesProcessed, ref ulong punBytesTotal);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetUserItemVote")]
+internal static extern ulong SteamAPI_ISteamUGC_SetUserItemVote(IntPtr instancePtr, ulong nPublishedFileID, bool bVoteUp);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetUserItemVote")]
+internal static extern ulong SteamAPI_ISteamUGC_GetUserItemVote(IntPtr instancePtr, ulong nPublishedFileID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_AddItemToFavorites")]
+internal static extern ulong SteamAPI_ISteamUGC_AddItemToFavorites(IntPtr instancePtr, uint nAppId, ulong nPublishedFileID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_RemoveItemFromFavorites")]
+internal static extern ulong SteamAPI_ISteamUGC_RemoveItemFromFavorites(IntPtr instancePtr, uint nAppId, ulong nPublishedFileID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SubscribeItem")]
+internal static extern ulong SteamAPI_ISteamUGC_SubscribeItem(IntPtr instancePtr, ulong nPublishedFileID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_UnsubscribeItem")]
+internal static extern ulong SteamAPI_ISteamUGC_UnsubscribeItem(IntPtr instancePtr, ulong nPublishedFileID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetNumSubscribedItems")]
+internal static extern uint SteamAPI_ISteamUGC_GetNumSubscribedItems(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetSubscribedItems")]
+internal static extern uint SteamAPI_ISteamUGC_GetSubscribedItems(IntPtr instancePtr, ref ulong pvecPublishedFileID, uint cMaxEntries);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetItemState")]
+internal static extern uint SteamAPI_ISteamUGC_GetItemState(IntPtr instancePtr, ulong nPublishedFileID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetItemInstallInfo")]
+internal static extern bool SteamAPI_ISteamUGC_GetItemInstallInfo(IntPtr instancePtr, ulong nPublishedFileID, ref ulong punSizeOnDisk, System.Text.StringBuilder pchFolder, uint cchFolderSize, ref uint punTimeStamp);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetItemDownloadInfo")]
+internal static extern bool SteamAPI_ISteamUGC_GetItemDownloadInfo(IntPtr instancePtr, ulong nPublishedFileID, ref ulong punBytesDownloaded, ref ulong punBytesTotal);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_DownloadItem")]
+internal static extern bool SteamAPI_ISteamUGC_DownloadItem(IntPtr instancePtr, ulong nPublishedFileID, bool bHighPriority);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_BInitWorkshopForGameServer")]
+internal static extern bool SteamAPI_ISteamUGC_BInitWorkshopForGameServer(IntPtr instancePtr, uint unWorkshopDepotID, string pszFolder);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SuspendDownloads")]
+internal static extern void SteamAPI_ISteamUGC_SuspendDownloads(IntPtr instancePtr, bool bSuspend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_StartPlaytimeTracking")]
+internal static extern ulong SteamAPI_ISteamUGC_StartPlaytimeTracking(IntPtr instancePtr, ref ulong pvecPublishedFileID, uint unNumPublishedFileIDs);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_StopPlaytimeTracking")]
+internal static extern ulong SteamAPI_ISteamUGC_StopPlaytimeTracking(IntPtr instancePtr, ref ulong pvecPublishedFileID, uint unNumPublishedFileIDs);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_StopPlaytimeTrackingForAllItems")]
+internal static extern ulong SteamAPI_ISteamUGC_StopPlaytimeTrackingForAllItems(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamAppList_GetNumInstalledApps")]
+internal static extern uint SteamAPI_ISteamAppList_GetNumInstalledApps(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamAppList_GetInstalledApps")]
+internal static extern uint SteamAPI_ISteamAppList_GetInstalledApps(IntPtr instancePtr, ref uint pvecAppID, uint unMaxAppIDs);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamAppList_GetAppName")]
+internal static extern int SteamAPI_ISteamAppList_GetAppName(IntPtr instancePtr, uint nAppID, System.Text.StringBuilder pchName, int cchNameMax);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamAppList_GetAppInstallDir")]
+internal static extern int SteamAPI_ISteamAppList_GetAppInstallDir(IntPtr instancePtr, uint nAppID, string pchDirectory, int cchNameMax);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamAppList_GetAppBuildId")]
+internal static extern int SteamAPI_ISteamAppList_GetAppBuildId(IntPtr instancePtr, uint nAppID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface")]
+internal static extern void SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_Init")]
+internal static extern bool SteamAPI_ISteamHTMLSurface_Init(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_Shutdown")]
+internal static extern bool SteamAPI_ISteamHTMLSurface_Shutdown(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_CreateBrowser")]
+internal static extern ulong SteamAPI_ISteamHTMLSurface_CreateBrowser(IntPtr instancePtr, string pchUserAgent, string pchUserCSS);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_RemoveBrowser")]
+internal static extern void SteamAPI_ISteamHTMLSurface_RemoveBrowser(IntPtr instancePtr, uint unBrowserHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_LoadURL")]
+internal static extern void SteamAPI_ISteamHTMLSurface_LoadURL(IntPtr instancePtr, uint unBrowserHandle, string pchURL, string pchPostData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_SetSize")]
+internal static extern void SteamAPI_ISteamHTMLSurface_SetSize(IntPtr instancePtr, uint unBrowserHandle, uint unWidth, uint unHeight);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_StopLoad")]
+internal static extern void SteamAPI_ISteamHTMLSurface_StopLoad(IntPtr instancePtr, uint unBrowserHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_Reload")]
+internal static extern void SteamAPI_ISteamHTMLSurface_Reload(IntPtr instancePtr, uint unBrowserHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_GoBack")]
+internal static extern void SteamAPI_ISteamHTMLSurface_GoBack(IntPtr instancePtr, uint unBrowserHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_GoForward")]
+internal static extern void SteamAPI_ISteamHTMLSurface_GoForward(IntPtr instancePtr, uint unBrowserHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_AddHeader")]
+internal static extern void SteamAPI_ISteamHTMLSurface_AddHeader(IntPtr instancePtr, uint unBrowserHandle, string pchKey, string pchValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_ExecuteJavascript")]
+internal static extern void SteamAPI_ISteamHTMLSurface_ExecuteJavascript(IntPtr instancePtr, uint unBrowserHandle, string pchScript);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_MouseUp")]
+internal static extern void SteamAPI_ISteamHTMLSurface_MouseUp(IntPtr instancePtr, uint unBrowserHandle, uint eMouseButton);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_MouseDown")]
+internal static extern void SteamAPI_ISteamHTMLSurface_MouseDown(IntPtr instancePtr, uint unBrowserHandle, uint eMouseButton);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_MouseDoubleClick")]
+internal static extern void SteamAPI_ISteamHTMLSurface_MouseDoubleClick(IntPtr instancePtr, uint unBrowserHandle, uint eMouseButton);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_MouseMove")]
+internal static extern void SteamAPI_ISteamHTMLSurface_MouseMove(IntPtr instancePtr, uint unBrowserHandle, int x, int y);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_MouseWheel")]
+internal static extern void SteamAPI_ISteamHTMLSurface_MouseWheel(IntPtr instancePtr, uint unBrowserHandle, int nDelta);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_KeyDown")]
+internal static extern void SteamAPI_ISteamHTMLSurface_KeyDown(IntPtr instancePtr, uint unBrowserHandle, uint nNativeKeyCode, uint eHTMLKeyModifiers);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_KeyUp")]
+internal static extern void SteamAPI_ISteamHTMLSurface_KeyUp(IntPtr instancePtr, uint unBrowserHandle, uint nNativeKeyCode, uint eHTMLKeyModifiers);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_KeyChar")]
+internal static extern void SteamAPI_ISteamHTMLSurface_KeyChar(IntPtr instancePtr, uint unBrowserHandle, uint cUnicodeChar, uint eHTMLKeyModifiers);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_SetHorizontalScroll")]
+internal static extern void SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(IntPtr instancePtr, uint unBrowserHandle, uint nAbsolutePixelScroll);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_SetVerticalScroll")]
+internal static extern void SteamAPI_ISteamHTMLSurface_SetVerticalScroll(IntPtr instancePtr, uint unBrowserHandle, uint nAbsolutePixelScroll);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_SetKeyFocus")]
+internal static extern void SteamAPI_ISteamHTMLSurface_SetKeyFocus(IntPtr instancePtr, uint unBrowserHandle, bool bHasKeyFocus);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_ViewSource")]
+internal static extern void SteamAPI_ISteamHTMLSurface_ViewSource(IntPtr instancePtr, uint unBrowserHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_CopyToClipboard")]
+internal static extern void SteamAPI_ISteamHTMLSurface_CopyToClipboard(IntPtr instancePtr, uint unBrowserHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_PasteFromClipboard")]
+internal static extern void SteamAPI_ISteamHTMLSurface_PasteFromClipboard(IntPtr instancePtr, uint unBrowserHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_Find")]
+internal static extern void SteamAPI_ISteamHTMLSurface_Find(IntPtr instancePtr, uint unBrowserHandle, string pchSearchStr, bool bCurrentlyInFind, bool bReverse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_StopFind")]
+internal static extern void SteamAPI_ISteamHTMLSurface_StopFind(IntPtr instancePtr, uint unBrowserHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_GetLinkAtPosition")]
+internal static extern void SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(IntPtr instancePtr, uint unBrowserHandle, int x, int y);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_SetCookie")]
+internal static extern void SteamAPI_ISteamHTMLSurface_SetCookie(IntPtr instancePtr, string pchHostname, string pchKey, string pchValue, string pchPath, ulong nExpires, bool bSecure, bool bHTTPOnly);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_SetPageScaleFactor")]
+internal static extern void SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(IntPtr instancePtr, uint unBrowserHandle, float flZoom, int nPointX, int nPointY);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_SetBackgroundMode")]
+internal static extern void SteamAPI_ISteamHTMLSurface_SetBackgroundMode(IntPtr instancePtr, uint unBrowserHandle, bool bBackgroundMode);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_AllowStartRequest")]
+internal static extern void SteamAPI_ISteamHTMLSurface_AllowStartRequest(IntPtr instancePtr, uint unBrowserHandle, bool bAllowed);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_JSDialogResponse")]
+internal static extern void SteamAPI_ISteamHTMLSurface_JSDialogResponse(IntPtr instancePtr, uint unBrowserHandle, bool bResult);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GetResultStatus")]
+internal static extern uint SteamAPI_ISteamInventory_GetResultStatus(IntPtr instancePtr, int resultHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GetResultItems")]
+internal static extern bool SteamAPI_ISteamInventory_GetResultItems(IntPtr instancePtr, int resultHandle, [In, Out] SteamItemDetails_t[] pOutItemsArray, ref uint punOutItemsArraySize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GetResultTimestamp")]
+internal static extern uint SteamAPI_ISteamInventory_GetResultTimestamp(IntPtr instancePtr, int resultHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_CheckResultSteamID")]
+internal static extern bool SteamAPI_ISteamInventory_CheckResultSteamID(IntPtr instancePtr, int resultHandle, ulong steamIDExpected);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_DestroyResult")]
+internal static extern void SteamAPI_ISteamInventory_DestroyResult(IntPtr instancePtr, int resultHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GetAllItems")]
+internal static extern bool SteamAPI_ISteamInventory_GetAllItems(IntPtr instancePtr, ref int pResultHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GetItemsByID")]
+internal static extern bool SteamAPI_ISteamInventory_GetItemsByID(IntPtr instancePtr, ref int pResultHandle, [In, Out] ulong[] pInstanceIDs, uint unCountInstanceIDs);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_SerializeResult")]
+internal static extern bool SteamAPI_ISteamInventory_SerializeResult(IntPtr instancePtr, int resultHandle, IntPtr pOutBuffer, ref uint punOutBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_DeserializeResult")]
+internal static extern bool SteamAPI_ISteamInventory_DeserializeResult(IntPtr instancePtr, ref int pOutResultHandle, IntPtr pBuffer, uint unBufferSize, bool bRESERVED_MUST_BE_FALSE);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GenerateItems")]
+internal static extern bool SteamAPI_ISteamInventory_GenerateItems(IntPtr instancePtr, ref int pResultHandle, [In, Out] int[] pArrayItemDefs, [In, Out] uint[] punArrayQuantity, uint unArrayLength);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GrantPromoItems")]
+internal static extern bool SteamAPI_ISteamInventory_GrantPromoItems(IntPtr instancePtr, ref int pResultHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_AddPromoItem")]
+internal static extern bool SteamAPI_ISteamInventory_AddPromoItem(IntPtr instancePtr, ref int pResultHandle, int itemDef);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_AddPromoItems")]
+internal static extern bool SteamAPI_ISteamInventory_AddPromoItems(IntPtr instancePtr, ref int pResultHandle, [In, Out] int[] pArrayItemDefs, uint unArrayLength);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_ConsumeItem")]
+internal static extern bool SteamAPI_ISteamInventory_ConsumeItem(IntPtr instancePtr, ref int pResultHandle, ulong itemConsume, uint unQuantity);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_ExchangeItems")]
+internal static extern bool SteamAPI_ISteamInventory_ExchangeItems(IntPtr instancePtr, ref int pResultHandle, [In, Out] int[] pArrayGenerate, [In, Out] uint[] punArrayGenerateQuantity, uint unArrayGenerateLength, [In, Out] ulong[] pArrayDestroy, [In, Out] uint[] punArrayDestroyQuantity, uint unArrayDestroyLength);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_TransferItemQuantity")]
+internal static extern bool SteamAPI_ISteamInventory_TransferItemQuantity(IntPtr instancePtr, ref int pResultHandle, ulong itemIdSource, uint unQuantity, ulong itemIdDest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_SendItemDropHeartbeat")]
+internal static extern void SteamAPI_ISteamInventory_SendItemDropHeartbeat(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_TriggerItemDrop")]
+internal static extern bool SteamAPI_ISteamInventory_TriggerItemDrop(IntPtr instancePtr, ref int pResultHandle, int dropListDefinition);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_TradeItems")]
+internal static extern bool SteamAPI_ISteamInventory_TradeItems(IntPtr instancePtr, ref int pResultHandle, ulong steamIDTradePartner, [In, Out] ulong[] pArrayGive, [In, Out] uint[] pArrayGiveQuantity, uint nArrayGiveLength, [In, Out] ulong[] pArrayGet, [In, Out] uint[] pArrayGetQuantity, uint nArrayGetLength);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_LoadItemDefinitions")]
+internal static extern bool SteamAPI_ISteamInventory_LoadItemDefinitions(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GetItemDefinitionIDs")]
+internal static extern bool SteamAPI_ISteamInventory_GetItemDefinitionIDs(IntPtr instancePtr, [In, Out] int[] pItemDefIDs, ref uint punItemDefIDsArraySize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GetItemDefinitionProperty")]
+internal static extern bool SteamAPI_ISteamInventory_GetItemDefinitionProperty(IntPtr instancePtr, int iDefinition, string pchPropertyName, System.Text.StringBuilder pchValueBuffer, ref uint punValueBufferSizeOut);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_RequestEligiblePromoItemDefinitionsIDs")]
+internal static extern ulong SteamAPI_ISteamInventory_RequestEligiblePromoItemDefinitionsIDs(IntPtr instancePtr, ulong steamID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GetEligiblePromoItemDefinitionIDs")]
+internal static extern bool SteamAPI_ISteamInventory_GetEligiblePromoItemDefinitionIDs(IntPtr instancePtr, ulong steamID, [In, Out] int[] pItemDefIDs, ref uint punItemDefIDsArraySize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamVideo_GetVideoURL")]
+internal static extern void SteamAPI_ISteamVideo_GetVideoURL(IntPtr instancePtr, uint unVideoAppID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamVideo_IsBroadcasting")]
+internal static extern bool SteamAPI_ISteamVideo_IsBroadcasting(IntPtr instancePtr, ref int pnNumViewers);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_InitGameServer")]
+internal static extern bool SteamAPI_ISteamGameServer_InitGameServer(IntPtr instancePtr, uint unIP, char usGamePort, char usQueryPort, uint unFlags, uint nGameAppId, string pchVersionString);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetProduct")]
+internal static extern void SteamAPI_ISteamGameServer_SetProduct(IntPtr instancePtr, string pszProduct);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetGameDescription")]
+internal static extern void SteamAPI_ISteamGameServer_SetGameDescription(IntPtr instancePtr, string pszGameDescription);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetModDir")]
+internal static extern void SteamAPI_ISteamGameServer_SetModDir(IntPtr instancePtr, string pszModDir);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetDedicatedServer")]
+internal static extern void SteamAPI_ISteamGameServer_SetDedicatedServer(IntPtr instancePtr, bool bDedicated);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_LogOn")]
+internal static extern void SteamAPI_ISteamGameServer_LogOn(IntPtr instancePtr, string pszToken);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_LogOnAnonymous")]
+internal static extern void SteamAPI_ISteamGameServer_LogOnAnonymous(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_LogOff")]
+internal static extern void SteamAPI_ISteamGameServer_LogOff(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_BLoggedOn")]
+internal static extern bool SteamAPI_ISteamGameServer_BLoggedOn(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_BSecure")]
+internal static extern bool SteamAPI_ISteamGameServer_BSecure(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_GetSteamID")]
+internal static extern ulong SteamAPI_ISteamGameServer_GetSteamID(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_WasRestartRequested")]
+internal static extern bool SteamAPI_ISteamGameServer_WasRestartRequested(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetMaxPlayerCount")]
+internal static extern void SteamAPI_ISteamGameServer_SetMaxPlayerCount(IntPtr instancePtr, int cPlayersMax);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetBotPlayerCount")]
+internal static extern void SteamAPI_ISteamGameServer_SetBotPlayerCount(IntPtr instancePtr, int cBotplayers);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetServerName")]
+internal static extern void SteamAPI_ISteamGameServer_SetServerName(IntPtr instancePtr, string pszServerName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetMapName")]
+internal static extern void SteamAPI_ISteamGameServer_SetMapName(IntPtr instancePtr, string pszMapName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetPasswordProtected")]
+internal static extern void SteamAPI_ISteamGameServer_SetPasswordProtected(IntPtr instancePtr, bool bPasswordProtected);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetSpectatorPort")]
+internal static extern void SteamAPI_ISteamGameServer_SetSpectatorPort(IntPtr instancePtr, char unSpectatorPort);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetSpectatorServerName")]
+internal static extern void SteamAPI_ISteamGameServer_SetSpectatorServerName(IntPtr instancePtr, string pszSpectatorServerName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_ClearAllKeyValues")]
+internal static extern void SteamAPI_ISteamGameServer_ClearAllKeyValues(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetKeyValue")]
+internal static extern void SteamAPI_ISteamGameServer_SetKeyValue(IntPtr instancePtr, string pKey, string pValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetGameTags")]
+internal static extern void SteamAPI_ISteamGameServer_SetGameTags(IntPtr instancePtr, string pchGameTags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetGameData")]
+internal static extern void SteamAPI_ISteamGameServer_SetGameData(IntPtr instancePtr, string pchGameData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetRegion")]
+internal static extern void SteamAPI_ISteamGameServer_SetRegion(IntPtr instancePtr, string pszRegion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate")]
+internal static extern bool SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(IntPtr instancePtr, uint unIPClient, IntPtr pvAuthBlob, uint cubAuthBlobSize, ref CSteamID pSteamIDUser);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection")]
+internal static extern ulong SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SendUserDisconnect")]
+internal static extern void SteamAPI_ISteamGameServer_SendUserDisconnect(IntPtr instancePtr, ulong steamIDUser);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_BUpdateUserData")]
+internal static extern bool SteamAPI_ISteamGameServer_BUpdateUserData(IntPtr instancePtr, ulong steamIDUser, string pchPlayerName, uint uScore);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_GetAuthSessionTicket")]
+internal static extern uint SteamAPI_ISteamGameServer_GetAuthSessionTicket(IntPtr instancePtr, IntPtr pTicket, int cbMaxTicket, ref uint pcbTicket);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_BeginAuthSession")]
+internal static extern uint SteamAPI_ISteamGameServer_BeginAuthSession(IntPtr instancePtr, IntPtr pAuthTicket, int cbAuthTicket, ulong steamID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_EndAuthSession")]
+internal static extern void SteamAPI_ISteamGameServer_EndAuthSession(IntPtr instancePtr, ulong steamID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_CancelAuthTicket")]
+internal static extern void SteamAPI_ISteamGameServer_CancelAuthTicket(IntPtr instancePtr, uint hAuthTicket);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_UserHasLicenseForApp")]
+internal static extern uint SteamAPI_ISteamGameServer_UserHasLicenseForApp(IntPtr instancePtr, ulong steamID, uint appID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_RequestUserGroupStatus")]
+internal static extern bool SteamAPI_ISteamGameServer_RequestUserGroupStatus(IntPtr instancePtr, ulong steamIDUser, ulong steamIDGroup);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_GetGameplayStats")]
+internal static extern void SteamAPI_ISteamGameServer_GetGameplayStats(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_GetServerReputation")]
+internal static extern ulong SteamAPI_ISteamGameServer_GetServerReputation(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_GetPublicIP")]
+internal static extern uint SteamAPI_ISteamGameServer_GetPublicIP(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_HandleIncomingPacket")]
+internal static extern bool SteamAPI_ISteamGameServer_HandleIncomingPacket(IntPtr instancePtr, IntPtr pData, int cbData, uint srcIP, char srcPort);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_GetNextOutgoingPacket")]
+internal static extern int SteamAPI_ISteamGameServer_GetNextOutgoingPacket(IntPtr instancePtr, IntPtr pOut, int cbMaxOut, ref uint pNetAdr, ref char pPort);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_EnableHeartbeats")]
+internal static extern void SteamAPI_ISteamGameServer_EnableHeartbeats(IntPtr instancePtr, bool bActive);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetHeartbeatInterval")]
+internal static extern void SteamAPI_ISteamGameServer_SetHeartbeatInterval(IntPtr instancePtr, int iHeartbeatInterval);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_ForceHeartbeat")]
+internal static extern void SteamAPI_ISteamGameServer_ForceHeartbeat(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_AssociateWithClan")]
+internal static extern ulong SteamAPI_ISteamGameServer_AssociateWithClan(IntPtr instancePtr, ulong steamIDClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility")]
+internal static extern ulong SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(IntPtr instancePtr, ulong steamIDNewPlayer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_RequestUserStats")]
+internal static extern ulong SteamAPI_ISteamGameServerStats_RequestUserStats(IntPtr instancePtr, ulong steamIDUser);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_GetUserStat")]
+internal static extern bool SteamAPI_ISteamGameServerStats_GetUserStat(IntPtr instancePtr, ulong steamIDUser, string pchName, ref int pData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_GetUserStat0")]
+internal static extern bool SteamAPI_ISteamGameServerStats_GetUserStat0(IntPtr instancePtr, ulong steamIDUser, string pchName, ref float pData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_GetUserAchievement")]
+internal static extern bool SteamAPI_ISteamGameServerStats_GetUserAchievement(IntPtr instancePtr, ulong steamIDUser, string pchName, ref bool pbAchieved);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_SetUserStat")]
+internal static extern bool SteamAPI_ISteamGameServerStats_SetUserStat(IntPtr instancePtr, ulong steamIDUser, string pchName, int nData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_SetUserStat0")]
+internal static extern bool SteamAPI_ISteamGameServerStats_SetUserStat0(IntPtr instancePtr, ulong steamIDUser, string pchName, float fData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat")]
+internal static extern bool SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(IntPtr instancePtr, ulong steamIDUser, string pchName, float flCountThisSession, double dSessionLength);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_SetUserAchievement")]
+internal static extern bool SteamAPI_ISteamGameServerStats_SetUserAchievement(IntPtr instancePtr, ulong steamIDUser, string pchName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_ClearUserAchievement")]
+internal static extern bool SteamAPI_ISteamGameServerStats_ClearUserAchievement(IntPtr instancePtr, ulong steamIDUser, string pchName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_StoreUserStats")]
+internal static extern ulong SteamAPI_ISteamGameServerStats_StoreUserStats(IntPtr instancePtr, ulong steamIDUser);
+public delegate void SteamAPI_UserStatsReceived_t_Callback(UserStatsReceived_t pUserStatsReceived_t);
+[DllImportAttribute("Steam_api", EntryPoint = "CUserStatsReceived_t_SetCallback")]
+public static extern ulong CUserStatsReceived_t_SetCallback(SteamAPI_UserStatsReceived_t_Callback func);
+[DllImportAttribute("Steam_api", EntryPoint = "CUserStatsReceived_t_RemoveCallback")]
+public static extern ulong CUserStatsReceived_t_RemoveCallback(ulong handle);
+public delegate void SteamAPI_RemoteStorageFileReadAsyncComplete_t_CallResult(RemoteStorageFileReadAsyncComplete_t pRemoteStorageFileReadAsyncComplete_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageFileReadAsyncComplete_t_SetCallResult")]
+public static extern ulong CRemoteStorageFileReadAsyncComplete_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageFileReadAsyncComplete_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageFileReadAsyncComplete_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageFileReadAsyncComplete_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageGetPublishedItemVoteDetailsResult_t_CallResult(RemoteStorageGetPublishedItemVoteDetailsResult_t pRemoteStorageGetPublishedItemVoteDetailsResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageGetPublishedItemVoteDetailsResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageGetPublishedItemVoteDetailsResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageGetPublishedItemVoteDetailsResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageGetPublishedItemVoteDetailsResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageGetPublishedItemVoteDetailsResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_FileDetailsResult_t_CallResult(FileDetailsResult_t pFileDetailsResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CFileDetailsResult_t_SetCallResult")]
+public static extern ulong CFileDetailsResult_t_SetCallResult(ulong hAPICall, SteamAPI_FileDetailsResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CFileDetailsResult_t_RemoveCallResult")]
+public static extern ulong CFileDetailsResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_GSStatsStored_t_CallResult(GSStatsStored_t pGSStatsStored_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CGSStatsStored_t_SetCallResult")]
+public static extern ulong CGSStatsStored_t_SetCallResult(ulong hAPICall, SteamAPI_GSStatsStored_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CGSStatsStored_t_RemoveCallResult")]
+public static extern ulong CGSStatsStored_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_StartPlaytimeTrackingResult_t_CallResult(StartPlaytimeTrackingResult_t pStartPlaytimeTrackingResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CStartPlaytimeTrackingResult_t_SetCallResult")]
+public static extern ulong CStartPlaytimeTrackingResult_t_SetCallResult(ulong hAPICall, SteamAPI_StartPlaytimeTrackingResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CStartPlaytimeTrackingResult_t_RemoveCallResult")]
+public static extern ulong CStartPlaytimeTrackingResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_FriendsGetFollowerCount_t_CallResult(FriendsGetFollowerCount_t pFriendsGetFollowerCount_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CFriendsGetFollowerCount_t_SetCallResult")]
+public static extern ulong CFriendsGetFollowerCount_t_SetCallResult(ulong hAPICall, SteamAPI_FriendsGetFollowerCount_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CFriendsGetFollowerCount_t_RemoveCallResult")]
+public static extern ulong CFriendsGetFollowerCount_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_FriendsIsFollowing_t_CallResult(FriendsIsFollowing_t pFriendsIsFollowing_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CFriendsIsFollowing_t_SetCallResult")]
+public static extern ulong CFriendsIsFollowing_t_SetCallResult(ulong hAPICall, SteamAPI_FriendsIsFollowing_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CFriendsIsFollowing_t_RemoveCallResult")]
+public static extern ulong CFriendsIsFollowing_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_LobbyMatchList_t_CallResult(LobbyMatchList_t pLobbyMatchList_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CLobbyMatchList_t_SetCallResult")]
+public static extern ulong CLobbyMatchList_t_SetCallResult(ulong hAPICall, SteamAPI_LobbyMatchList_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CLobbyMatchList_t_RemoveCallResult")]
+public static extern ulong CLobbyMatchList_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageUpdatePublishedFileResult_t_CallResult(RemoteStorageUpdatePublishedFileResult_t pRemoteStorageUpdatePublishedFileResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageUpdatePublishedFileResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageUpdatePublishedFileResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageUpdatePublishedFileResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageUpdatePublishedFileResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageUpdatePublishedFileResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_StoreAuthURLResponse_t_CallResult(StoreAuthURLResponse_t pStoreAuthURLResponse_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CStoreAuthURLResponse_t_SetCallResult")]
+public static extern ulong CStoreAuthURLResponse_t_SetCallResult(ulong hAPICall, SteamAPI_StoreAuthURLResponse_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CStoreAuthURLResponse_t_RemoveCallResult")]
+public static extern ulong CStoreAuthURLResponse_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_LobbyCreated_t_CallResult(LobbyCreated_t pLobbyCreated_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CLobbyCreated_t_SetCallResult")]
+public static extern ulong CLobbyCreated_t_SetCallResult(ulong hAPICall, SteamAPI_LobbyCreated_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CLobbyCreated_t_RemoveCallResult")]
+public static extern ulong CLobbyCreated_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageFileWriteAsyncComplete_t_CallResult(RemoteStorageFileWriteAsyncComplete_t pRemoteStorageFileWriteAsyncComplete_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageFileWriteAsyncComplete_t_SetCallResult")]
+public static extern ulong CRemoteStorageFileWriteAsyncComplete_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageFileWriteAsyncComplete_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageFileWriteAsyncComplete_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageFileWriteAsyncComplete_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageDeletePublishedFileResult_t_CallResult(RemoteStorageDeletePublishedFileResult_t pRemoteStorageDeletePublishedFileResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageDeletePublishedFileResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageDeletePublishedFileResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageDeletePublishedFileResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageDeletePublishedFileResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageDeletePublishedFileResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageGetPublishedFileDetailsResult_t_CallResult(RemoteStorageGetPublishedFileDetailsResult_t pRemoteStorageGetPublishedFileDetailsResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageGetPublishedFileDetailsResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageGetPublishedFileDetailsResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageGetPublishedFileDetailsResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageGetPublishedFileDetailsResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageGetPublishedFileDetailsResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageDownloadUGCResult_t_CallResult(RemoteStorageDownloadUGCResult_t pRemoteStorageDownloadUGCResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageDownloadUGCResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageDownloadUGCResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageDownloadUGCResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageDownloadUGCResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageDownloadUGCResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_SteamUGCQueryCompleted_t_CallResult(SteamUGCQueryCompleted_t pSteamUGCQueryCompleted_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CSteamUGCQueryCompleted_t_SetCallResult")]
+public static extern ulong CSteamUGCQueryCompleted_t_SetCallResult(ulong hAPICall, SteamAPI_SteamUGCQueryCompleted_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CSteamUGCQueryCompleted_t_RemoveCallResult")]
+public static extern ulong CSteamUGCQueryCompleted_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageFileShareResult_t_CallResult(RemoteStorageFileShareResult_t pRemoteStorageFileShareResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageFileShareResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageFileShareResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageFileShareResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageFileShareResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageFileShareResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_LobbyEnter_t_CallResult(LobbyEnter_t pLobbyEnter_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CLobbyEnter_t_SetCallResult")]
+public static extern ulong CLobbyEnter_t_SetCallResult(ulong hAPICall, SteamAPI_LobbyEnter_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CLobbyEnter_t_RemoveCallResult")]
+public static extern ulong CLobbyEnter_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_SubmitItemUpdateResult_t_CallResult(SubmitItemUpdateResult_t pSubmitItemUpdateResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CSubmitItemUpdateResult_t_SetCallResult")]
+public static extern ulong CSubmitItemUpdateResult_t_SetCallResult(ulong hAPICall, SteamAPI_SubmitItemUpdateResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CSubmitItemUpdateResult_t_RemoveCallResult")]
+public static extern ulong CSubmitItemUpdateResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_NumberOfCurrentPlayers_t_CallResult(NumberOfCurrentPlayers_t pNumberOfCurrentPlayers_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CNumberOfCurrentPlayers_t_SetCallResult")]
+public static extern ulong CNumberOfCurrentPlayers_t_SetCallResult(ulong hAPICall, SteamAPI_NumberOfCurrentPlayers_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CNumberOfCurrentPlayers_t_RemoveCallResult")]
+public static extern ulong CNumberOfCurrentPlayers_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_GSStatsReceived_t_CallResult(GSStatsReceived_t pGSStatsReceived_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CGSStatsReceived_t_SetCallResult")]
+public static extern ulong CGSStatsReceived_t_SetCallResult(ulong hAPICall, SteamAPI_GSStatsReceived_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CGSStatsReceived_t_RemoveCallResult")]
+public static extern ulong CGSStatsReceived_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_HTML_BrowserReady_t_CallResult(HTML_BrowserReady_t pHTML_BrowserReady_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CHTML_BrowserReady_t_SetCallResult")]
+public static extern ulong CHTML_BrowserReady_t_SetCallResult(ulong hAPICall, SteamAPI_HTML_BrowserReady_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CHTML_BrowserReady_t_RemoveCallResult")]
+public static extern ulong CHTML_BrowserReady_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_LeaderboardScoresDownloaded_t_CallResult(LeaderboardScoresDownloaded_t pLeaderboardScoresDownloaded_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CLeaderboardScoresDownloaded_t_SetCallResult")]
+public static extern ulong CLeaderboardScoresDownloaded_t_SetCallResult(ulong hAPICall, SteamAPI_LeaderboardScoresDownloaded_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CLeaderboardScoresDownloaded_t_RemoveCallResult")]
+public static extern ulong CLeaderboardScoresDownloaded_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageUpdateUserPublishedItemVoteResult_t_CallResult(RemoteStorageUpdateUserPublishedItemVoteResult_t pRemoteStorageUpdateUserPublishedItemVoteResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageUpdateUserPublishedItemVoteResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageUpdateUserPublishedItemVoteResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageUpdateUserPublishedItemVoteResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageUpdateUserPublishedItemVoteResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageUpdateUserPublishedItemVoteResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageEnumerateUserSubscribedFilesResult_t_CallResult(RemoteStorageEnumerateUserSubscribedFilesResult_t pRemoteStorageEnumerateUserSubscribedFilesResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageEnumerateUserSubscribedFilesResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageEnumerateUserSubscribedFilesResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageEnumerateUserSubscribedFilesResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageEnumerateUserSubscribedFilesResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageEnumerateUserSubscribedFilesResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_CreateItemResult_t_CallResult(CreateItemResult_t pCreateItemResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CCreateItemResult_t_SetCallResult")]
+public static extern ulong CCreateItemResult_t_SetCallResult(ulong hAPICall, SteamAPI_CreateItemResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CCreateItemResult_t_RemoveCallResult")]
+public static extern ulong CCreateItemResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_SetUserItemVoteResult_t_CallResult(SetUserItemVoteResult_t pSetUserItemVoteResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CSetUserItemVoteResult_t_SetCallResult")]
+public static extern ulong CSetUserItemVoteResult_t_SetCallResult(ulong hAPICall, SteamAPI_SetUserItemVoteResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CSetUserItemVoteResult_t_RemoveCallResult")]
+public static extern ulong CSetUserItemVoteResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_ComputeNewPlayerCompatibilityResult_t_CallResult(ComputeNewPlayerCompatibilityResult_t pComputeNewPlayerCompatibilityResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CComputeNewPlayerCompatibilityResult_t_SetCallResult")]
+public static extern ulong CComputeNewPlayerCompatibilityResult_t_SetCallResult(ulong hAPICall, SteamAPI_ComputeNewPlayerCompatibilityResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CComputeNewPlayerCompatibilityResult_t_RemoveCallResult")]
+public static extern ulong CComputeNewPlayerCompatibilityResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_LeaderboardScoreUploaded_t_CallResult(LeaderboardScoreUploaded_t pLeaderboardScoreUploaded_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CLeaderboardScoreUploaded_t_SetCallResult")]
+public static extern ulong CLeaderboardScoreUploaded_t_SetCallResult(ulong hAPICall, SteamAPI_LeaderboardScoreUploaded_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CLeaderboardScoreUploaded_t_RemoveCallResult")]
+public static extern ulong CLeaderboardScoreUploaded_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_GlobalAchievementPercentagesReady_t_CallResult(GlobalAchievementPercentagesReady_t pGlobalAchievementPercentagesReady_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CGlobalAchievementPercentagesReady_t_SetCallResult")]
+public static extern ulong CGlobalAchievementPercentagesReady_t_SetCallResult(ulong hAPICall, SteamAPI_GlobalAchievementPercentagesReady_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CGlobalAchievementPercentagesReady_t_RemoveCallResult")]
+public static extern ulong CGlobalAchievementPercentagesReady_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_GlobalStatsReceived_t_CallResult(GlobalStatsReceived_t pGlobalStatsReceived_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CGlobalStatsReceived_t_SetCallResult")]
+public static extern ulong CGlobalStatsReceived_t_SetCallResult(ulong hAPICall, SteamAPI_GlobalStatsReceived_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CGlobalStatsReceived_t_RemoveCallResult")]
+public static extern ulong CGlobalStatsReceived_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageEnumeratePublishedFilesByUserActionResult_t_CallResult(RemoteStorageEnumeratePublishedFilesByUserActionResult_t pRemoteStorageEnumeratePublishedFilesByUserActionResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageEnumeratePublishedFilesByUserActionResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_ClanOfficerListResponse_t_CallResult(ClanOfficerListResponse_t pClanOfficerListResponse_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CClanOfficerListResponse_t_SetCallResult")]
+public static extern ulong CClanOfficerListResponse_t_SetCallResult(ulong hAPICall, SteamAPI_ClanOfficerListResponse_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CClanOfficerListResponse_t_RemoveCallResult")]
+public static extern ulong CClanOfficerListResponse_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStoragePublishFileProgress_t_CallResult(RemoteStoragePublishFileProgress_t pRemoteStoragePublishFileProgress_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStoragePublishFileProgress_t_SetCallResult")]
+public static extern ulong CRemoteStoragePublishFileProgress_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStoragePublishFileProgress_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStoragePublishFileProgress_t_RemoveCallResult")]
+public static extern ulong CRemoteStoragePublishFileProgress_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageEnumerateWorkshopFilesResult_t_CallResult(RemoteStorageEnumerateWorkshopFilesResult_t pRemoteStorageEnumerateWorkshopFilesResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageEnumerateWorkshopFilesResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageEnumerateWorkshopFilesResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageEnumerateWorkshopFilesResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageEnumerateWorkshopFilesResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageEnumerateWorkshopFilesResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_GSReputation_t_CallResult(GSReputation_t pGSReputation_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CGSReputation_t_SetCallResult")]
+public static extern ulong CGSReputation_t_SetCallResult(ulong hAPICall, SteamAPI_GSReputation_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CGSReputation_t_RemoveCallResult")]
+public static extern ulong CGSReputation_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_UserFavoriteItemsListChanged_t_CallResult(UserFavoriteItemsListChanged_t pUserFavoriteItemsListChanged_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CUserFavoriteItemsListChanged_t_SetCallResult")]
+public static extern ulong CUserFavoriteItemsListChanged_t_SetCallResult(ulong hAPICall, SteamAPI_UserFavoriteItemsListChanged_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CUserFavoriteItemsListChanged_t_RemoveCallResult")]
+public static extern ulong CUserFavoriteItemsListChanged_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_EncryptedAppTicketResponse_t_CallResult(EncryptedAppTicketResponse_t pEncryptedAppTicketResponse_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CEncryptedAppTicketResponse_t_SetCallResult")]
+public static extern ulong CEncryptedAppTicketResponse_t_SetCallResult(ulong hAPICall, SteamAPI_EncryptedAppTicketResponse_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CEncryptedAppTicketResponse_t_RemoveCallResult")]
+public static extern ulong CEncryptedAppTicketResponse_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageSetUserPublishedFileActionResult_t_CallResult(RemoteStorageSetUserPublishedFileActionResult_t pRemoteStorageSetUserPublishedFileActionResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageSetUserPublishedFileActionResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageSetUserPublishedFileActionResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageSetUserPublishedFileActionResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageSetUserPublishedFileActionResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageSetUserPublishedFileActionResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_StopPlaytimeTrackingResult_t_CallResult(StopPlaytimeTrackingResult_t pStopPlaytimeTrackingResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CStopPlaytimeTrackingResult_t_SetCallResult")]
+public static extern ulong CStopPlaytimeTrackingResult_t_SetCallResult(ulong hAPICall, SteamAPI_StopPlaytimeTrackingResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CStopPlaytimeTrackingResult_t_RemoveCallResult")]
+public static extern ulong CStopPlaytimeTrackingResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageEnumerateUserPublishedFilesResult_t_CallResult(RemoteStorageEnumerateUserPublishedFilesResult_t pRemoteStorageEnumerateUserPublishedFilesResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageEnumerateUserPublishedFilesResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageEnumerateUserPublishedFilesResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageEnumerateUserPublishedFilesResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageEnumerateUserPublishedFilesResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageEnumerateUserPublishedFilesResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_FriendsEnumerateFollowingList_t_CallResult(FriendsEnumerateFollowingList_t pFriendsEnumerateFollowingList_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CFriendsEnumerateFollowingList_t_SetCallResult")]
+public static extern ulong CFriendsEnumerateFollowingList_t_SetCallResult(ulong hAPICall, SteamAPI_FriendsEnumerateFollowingList_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CFriendsEnumerateFollowingList_t_RemoveCallResult")]
+public static extern ulong CFriendsEnumerateFollowingList_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageSubscribePublishedFileResult_t_CallResult(RemoteStorageSubscribePublishedFileResult_t pRemoteStorageSubscribePublishedFileResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageSubscribePublishedFileResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageSubscribePublishedFileResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageSubscribePublishedFileResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageSubscribePublishedFileResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageSubscribePublishedFileResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_GetUserItemVoteResult_t_CallResult(GetUserItemVoteResult_t pGetUserItemVoteResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CGetUserItemVoteResult_t_SetCallResult")]
+public static extern ulong CGetUserItemVoteResult_t_SetCallResult(ulong hAPICall, SteamAPI_GetUserItemVoteResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CGetUserItemVoteResult_t_RemoveCallResult")]
+public static extern ulong CGetUserItemVoteResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_AssociateWithClanResult_t_CallResult(AssociateWithClanResult_t pAssociateWithClanResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CAssociateWithClanResult_t_SetCallResult")]
+public static extern ulong CAssociateWithClanResult_t_SetCallResult(ulong hAPICall, SteamAPI_AssociateWithClanResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CAssociateWithClanResult_t_RemoveCallResult")]
+public static extern ulong CAssociateWithClanResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_LeaderboardUGCSet_t_CallResult(LeaderboardUGCSet_t pLeaderboardUGCSet_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CLeaderboardUGCSet_t_SetCallResult")]
+public static extern ulong CLeaderboardUGCSet_t_SetCallResult(ulong hAPICall, SteamAPI_LeaderboardUGCSet_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CLeaderboardUGCSet_t_RemoveCallResult")]
+public static extern ulong CLeaderboardUGCSet_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_CheckFileSignature_t_CallResult(CheckFileSignature_t pCheckFileSignature_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CCheckFileSignature_t_SetCallResult")]
+public static extern ulong CCheckFileSignature_t_SetCallResult(ulong hAPICall, SteamAPI_CheckFileSignature_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CCheckFileSignature_t_RemoveCallResult")]
+public static extern ulong CCheckFileSignature_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageUnsubscribePublishedFileResult_t_CallResult(RemoteStorageUnsubscribePublishedFileResult_t pRemoteStorageUnsubscribePublishedFileResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageUnsubscribePublishedFileResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageUnsubscribePublishedFileResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageUnsubscribePublishedFileResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageUnsubscribePublishedFileResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageUnsubscribePublishedFileResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_SetPersonaNameResponse_t_CallResult(SetPersonaNameResponse_t pSetPersonaNameResponse_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CSetPersonaNameResponse_t_SetCallResult")]
+public static extern ulong CSetPersonaNameResponse_t_SetCallResult(ulong hAPICall, SteamAPI_SetPersonaNameResponse_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CSetPersonaNameResponse_t_RemoveCallResult")]
+public static extern ulong CSetPersonaNameResponse_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_UserStatsReceived_t_CallResult(UserStatsReceived_t pUserStatsReceived_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CUserStatsReceived_t_SetCallResult")]
+public static extern ulong CUserStatsReceived_t_SetCallResult(ulong hAPICall, SteamAPI_UserStatsReceived_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CUserStatsReceived_t_RemoveCallResult")]
+public static extern ulong CUserStatsReceived_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_SteamInventoryEligiblePromoItemDefIDs_t_CallResult(SteamInventoryEligiblePromoItemDefIDs_t pSteamInventoryEligiblePromoItemDefIDs_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CSteamInventoryEligiblePromoItemDefIDs_t_SetCallResult")]
+public static extern ulong CSteamInventoryEligiblePromoItemDefIDs_t_SetCallResult(ulong hAPICall, SteamAPI_SteamInventoryEligiblePromoItemDefIDs_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CSteamInventoryEligiblePromoItemDefIDs_t_RemoveCallResult")]
+public static extern ulong CSteamInventoryEligiblePromoItemDefIDs_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_JoinClanChatRoomCompletionResult_t_CallResult(JoinClanChatRoomCompletionResult_t pJoinClanChatRoomCompletionResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CJoinClanChatRoomCompletionResult_t_SetCallResult")]
+public static extern ulong CJoinClanChatRoomCompletionResult_t_SetCallResult(ulong hAPICall, SteamAPI_JoinClanChatRoomCompletionResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CJoinClanChatRoomCompletionResult_t_RemoveCallResult")]
+public static extern ulong CJoinClanChatRoomCompletionResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_LeaderboardFindResult_t_CallResult(LeaderboardFindResult_t pLeaderboardFindResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CLeaderboardFindResult_t_SetCallResult")]
+public static extern ulong CLeaderboardFindResult_t_SetCallResult(ulong hAPICall, SteamAPI_LeaderboardFindResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CLeaderboardFindResult_t_RemoveCallResult")]
+public static extern ulong CLeaderboardFindResult_t_RemoveCallResult(ulong handle);
+
+}
+
+}
+
+namespace Valve.Steamworks
+{
+
+ public abstract class ISteamClient
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract uint CreateSteamPipe();
+ public abstract bool BReleaseSteamPipe(uint hSteamPipe);
+ public abstract uint ConnectToGlobalUser(uint hSteamPipe);
+ public abstract uint CreateLocalUser(ref uint phSteamPipe,uint eAccountType);
+ public abstract void ReleaseUser(uint hSteamPipe,uint hUser);
+ public abstract ISteamUser GetISteamUser(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamGameServer GetISteamGameServer(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract void SetLocalIPBinding(uint unIP,char usPort);
+ public abstract ISteamFriends GetISteamFriends(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamUtils GetISteamUtils(uint hSteamPipe,string pchVersion);
+ public abstract ISteamMatchmaking GetISteamMatchmaking(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamMatchmakingServers GetISteamMatchmakingServers(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract IntPtr GetISteamGenericInterface(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamUserStats GetISteamUserStats(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamGameServerStats GetISteamGameServerStats(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamApps GetISteamApps(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamNetworking GetISteamNetworking(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamRemoteStorage GetISteamRemoteStorage(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamScreenshots GetISteamScreenshots(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ public abstract uint GetIPCCallCount();
+ public abstract void SetWarningMessageHook(IntPtr pFunction);
+ public abstract bool BShutdownIfAllPipesClosed();
+ public abstract ISteamHTTP GetISteamHTTP(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamUnifiedMessages GetISteamUnifiedMessages(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamController GetISteamController(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamUGC GetISteamUGC(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamAppList GetISteamAppList(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamMusic GetISteamMusic(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamMusicRemote GetISteamMusicRemote(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamHTMLSurface GetISteamHTMLSurface(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamInventory GetISteamInventory(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamVideo GetISteamVideo(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ }
+
+
+ public abstract class ISteamUser
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract uint GetHSteamUser();
+ public abstract bool BLoggedOn();
+ public abstract ulong GetSteamID();
+ public abstract int InitiateGameConnection(IntPtr pAuthBlob,int cbMaxAuthBlob,ulong steamIDGameServer,uint unIPServer,char usPortServer,bool bSecure);
+ public abstract void TerminateGameConnection(uint unIPServer,char usPortServer);
+ public abstract void TrackAppUsageEvent(ulong gameID,int eAppUsageEvent,string pchExtraInfo);
+ public abstract bool GetUserDataFolder(string pchBuffer,int cubBuffer);
+ public abstract void StartVoiceRecording();
+ public abstract void StopVoiceRecording();
+ public abstract uint GetAvailableVoice(ref uint pcbCompressed,ref uint pcbUncompressed,uint nUncompressedVoiceDesiredSampleRate);
+ public abstract uint GetVoice(bool bWantCompressed,IntPtr pDestBuffer,uint cbDestBufferSize,ref uint nBytesWritten,bool bWantUncompressed,IntPtr pUncompressedDestBuffer,uint cbUncompressedDestBufferSize,ref uint nUncompressBytesWritten,uint nUncompressedVoiceDesiredSampleRate);
+ public abstract uint DecompressVoice(IntPtr pCompressed,uint cbCompressed,IntPtr pDestBuffer,uint cbDestBufferSize,ref uint nBytesWritten,uint nDesiredSampleRate);
+ public abstract uint GetVoiceOptimalSampleRate();
+ public abstract uint GetAuthSessionTicket(IntPtr pTicket,int cbMaxTicket,ref uint pcbTicket);
+ public abstract uint BeginAuthSession(IntPtr pAuthTicket,int cbAuthTicket,ulong steamID);
+ public abstract void EndAuthSession(ulong steamID);
+ public abstract void CancelAuthTicket(uint hAuthTicket);
+ public abstract uint UserHasLicenseForApp(ulong steamID,uint appID);
+ public abstract bool BIsBehindNAT();
+ public abstract void AdvertiseGame(ulong steamIDGameServer,uint unIPServer,char usPortServer);
+ public abstract ulong RequestEncryptedAppTicket(IntPtr pDataToInclude,int cbDataToInclude);
+ public abstract bool GetEncryptedAppTicket(IntPtr pTicket,int cbMaxTicket,ref uint pcbTicket);
+ public abstract int GetGameBadgeLevel(int nSeries,bool bFoil);
+ public abstract int GetPlayerSteamLevel();
+ public abstract ulong RequestStoreAuthURL(string pchRedirectURL);
+ public abstract bool BIsPhoneVerified();
+ public abstract bool BIsTwoFactorEnabled();
+ public abstract bool BIsPhoneIdentifying();
+ public abstract bool BIsPhoneRequiringVerification();
+ }
+
+
+ public abstract class ISteamFriends
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract string GetPersonaName();
+ public abstract ulong SetPersonaName(string pchPersonaName);
+ public abstract uint GetPersonaState();
+ public abstract int GetFriendCount(int iFriendFlags);
+ public abstract ulong GetFriendByIndex(int iFriend,int iFriendFlags);
+ public abstract uint GetFriendRelationship(ulong steamIDFriend);
+ public abstract uint GetFriendPersonaState(ulong steamIDFriend);
+ public abstract string GetFriendPersonaName(ulong steamIDFriend);
+ public abstract bool GetFriendGamePlayed(ulong steamIDFriend,out FriendGameInfo_t pFriendGameInfo);
+ public abstract string GetFriendPersonaNameHistory(ulong steamIDFriend,int iPersonaName);
+ public abstract int GetFriendSteamLevel(ulong steamIDFriend);
+ public abstract string GetPlayerNickname(ulong steamIDPlayer);
+ public abstract int GetFriendsGroupCount();
+ public abstract char GetFriendsGroupIDByIndex(int iFG);
+ public abstract string GetFriendsGroupName(char friendsGroupID);
+ public abstract int GetFriendsGroupMembersCount(char friendsGroupID);
+ public abstract void GetFriendsGroupMembersList(char friendsGroupID,out CSteamID [] pOutSteamIDMembers);
+ public abstract bool HasFriend(ulong steamIDFriend,int iFriendFlags);
+ public abstract int GetClanCount();
+ public abstract ulong GetClanByIndex(int iClan);
+ public abstract string GetClanName(ulong steamIDClan);
+ public abstract string GetClanTag(ulong steamIDClan);
+ public abstract bool GetClanActivityCounts(ulong steamIDClan,ref int pnOnline,ref int pnInGame,ref int pnChatting);
+ public abstract ulong DownloadClanActivityCounts(CSteamID [] psteamIDClans);
+ public abstract int GetFriendCountFromSource(ulong steamIDSource);
+ public abstract ulong GetFriendFromSourceByIndex(ulong steamIDSource,int iFriend);
+ public abstract bool IsUserInSource(ulong steamIDUser,ulong steamIDSource);
+ public abstract void SetInGameVoiceSpeaking(ulong steamIDUser,bool bSpeaking);
+ public abstract void ActivateGameOverlay(string pchDialog);
+ public abstract void ActivateGameOverlayToUser(string pchDialog,ulong steamID);
+ public abstract void ActivateGameOverlayToWebPage(string pchURL);
+ public abstract void ActivateGameOverlayToStore(uint nAppID,char eFlag);
+ public abstract void SetPlayedWith(ulong steamIDUserPlayedWith);
+ public abstract void ActivateGameOverlayInviteDialog(ulong steamIDLobby);
+ public abstract int GetSmallFriendAvatar(ulong steamIDFriend);
+ public abstract int GetMediumFriendAvatar(ulong steamIDFriend);
+ public abstract int GetLargeFriendAvatar(ulong steamIDFriend);
+ public abstract bool RequestUserInformation(ulong steamIDUser,bool bRequireNameOnly);
+ public abstract ulong RequestClanOfficerList(ulong steamIDClan);
+ public abstract ulong GetClanOwner(ulong steamIDClan);
+ public abstract int GetClanOfficerCount(ulong steamIDClan);
+ public abstract ulong GetClanOfficerByIndex(ulong steamIDClan,int iOfficer);
+ public abstract uint GetUserRestrictions();
+ public abstract bool SetRichPresence(string pchKey,string pchValue);
+ public abstract void ClearRichPresence();
+ public abstract string GetFriendRichPresence(ulong steamIDFriend,string pchKey);
+ public abstract int GetFriendRichPresenceKeyCount(ulong steamIDFriend);
+ public abstract string GetFriendRichPresenceKeyByIndex(ulong steamIDFriend,int iKey);
+ public abstract void RequestFriendRichPresence(ulong steamIDFriend);
+ public abstract bool InviteUserToGame(ulong steamIDFriend,string pchConnectString);
+ public abstract int GetCoplayFriendCount();
+ public abstract ulong GetCoplayFriend(int iCoplayFriend);
+ public abstract int GetFriendCoplayTime(ulong steamIDFriend);
+ public abstract uint GetFriendCoplayGame(ulong steamIDFriend);
+ public abstract ulong JoinClanChatRoom(ulong steamIDClan);
+ public abstract bool LeaveClanChatRoom(ulong steamIDClan);
+ public abstract int GetClanChatMemberCount(ulong steamIDClan);
+ public abstract ulong GetChatMemberByIndex(ulong steamIDClan,int iUser);
+ public abstract bool SendClanChatMessage(ulong steamIDClanChat,string pchText);
+ public abstract int GetClanChatMessage(ulong steamIDClanChat,int iMessage,IntPtr prgchText,int cchTextMax,ref uint peChatEntryType,out CSteamID psteamidChatter);
+ public abstract bool IsClanChatAdmin(ulong steamIDClanChat,ulong steamIDUser);
+ public abstract bool IsClanChatWindowOpenInSteam(ulong steamIDClanChat);
+ public abstract bool OpenClanChatWindowInSteam(ulong steamIDClanChat);
+ public abstract bool CloseClanChatWindowInSteam(ulong steamIDClanChat);
+ public abstract bool SetListenForFriendsMessages(bool bInterceptEnabled);
+ public abstract bool ReplyToFriendMessage(ulong steamIDFriend,string pchMsgToSend);
+ public abstract int GetFriendMessage(ulong steamIDFriend,int iMessageID,IntPtr pvData,int cubData,ref uint peChatEntryType);
+ public abstract ulong GetFollowerCount(ulong steamID);
+ public abstract ulong IsFollowing(ulong steamID);
+ public abstract ulong EnumerateFollowingList(uint unStartIndex);
+ }
+
+
+ public abstract class ISteamUtils
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract uint GetSecondsSinceAppActive();
+ public abstract uint GetSecondsSinceComputerActive();
+ public abstract int GetConnectedUniverse();
+ public abstract uint GetServerRealTime();
+ public abstract string GetIPCountry();
+ public abstract bool GetImageSize(int iImage,ref uint pnWidth,ref uint pnHeight);
+ public abstract bool GetImageRGBA(int iImage,IntPtr pubDest,int nDestBufferSize);
+ public abstract bool GetCSERIPPort(ref uint unIP,ref char usPort);
+ public abstract byte GetCurrentBatteryPower();
+ public abstract uint GetAppID();
+ public abstract void SetOverlayNotificationPosition(uint eNotificationPosition);
+ public abstract bool IsAPICallCompleted(ulong hSteamAPICall,ref bool pbFailed);
+ public abstract int GetAPICallFailureReason(ulong hSteamAPICall);
+ public abstract bool GetAPICallResult(ulong hSteamAPICall,IntPtr pCallback,int cubCallback,int iCallbackExpected,ref bool pbFailed);
+ public abstract uint GetIPCCallCount();
+ public abstract void SetWarningMessageHook(IntPtr pFunction);
+ public abstract bool IsOverlayEnabled();
+ public abstract bool BOverlayNeedsPresent();
+ public abstract ulong CheckFileSignature(string szFileName);
+ public abstract bool ShowGamepadTextInput(int eInputMode,int eLineInputMode,string pchDescription,uint unCharMax,string pchExistingText);
+ public abstract uint GetEnteredGamepadTextLength();
+ public abstract bool GetEnteredGamepadTextInput(string pchText,uint cchText);
+ public abstract string GetSteamUILanguage();
+ public abstract bool IsSteamRunningInVR();
+ public abstract void SetOverlayNotificationInset(int nHorizontalInset,int nVerticalInset);
+ public abstract bool IsSteamInBigPictureMode();
+ public abstract void StartVRDashboard();
+ }
+
+
+ public abstract class ISteamMatchmaking
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract int GetFavoriteGameCount();
+ public abstract bool GetFavoriteGame(int iGame,ref uint pnAppID,ref uint pnIP,ref char pnConnPort,ref char pnQueryPort,ref uint punFlags,ref uint pRTime32LastPlayedOnServer);
+ public abstract int AddFavoriteGame(uint nAppID,uint nIP,char nConnPort,char nQueryPort,uint unFlags,uint rTime32LastPlayedOnServer);
+ public abstract bool RemoveFavoriteGame(uint nAppID,uint nIP,char nConnPort,char nQueryPort,uint unFlags);
+ public abstract ulong RequestLobbyList();
+ public abstract void AddRequestLobbyListStringFilter(string pchKeyToMatch,string pchValueToMatch,uint eComparisonType);
+ public abstract void AddRequestLobbyListNumericalFilter(string pchKeyToMatch,int nValueToMatch,uint eComparisonType);
+ public abstract void AddRequestLobbyListNearValueFilter(string pchKeyToMatch,int nValueToBeCloseTo);
+ public abstract void AddRequestLobbyListFilterSlotsAvailable(int nSlotsAvailable);
+ public abstract void AddRequestLobbyListDistanceFilter(uint eLobbyDistanceFilter);
+ public abstract void AddRequestLobbyListResultCountFilter(int cMaxResults);
+ public abstract void AddRequestLobbyListCompatibleMembersFilter(ulong steamIDLobby);
+ public abstract ulong GetLobbyByIndex(int iLobby);
+ public abstract ulong CreateLobby(uint eLobbyType,int cMaxMembers);
+ public abstract ulong JoinLobby(ulong steamIDLobby);
+ public abstract void LeaveLobby(ulong steamIDLobby);
+ public abstract bool InviteUserToLobby(ulong steamIDLobby,ulong steamIDInvitee);
+ public abstract int GetNumLobbyMembers(ulong steamIDLobby);
+ public abstract ulong GetLobbyMemberByIndex(ulong steamIDLobby,int iMember);
+ public abstract string GetLobbyData(ulong steamIDLobby,string pchKey);
+ public abstract bool SetLobbyData(ulong steamIDLobby,string pchKey,string pchValue);
+ public abstract int GetLobbyDataCount(ulong steamIDLobby);
+ public abstract bool GetLobbyDataByIndex(ulong steamIDLobby,int iLobbyData,string pchKey,int cchKeyBufferSize,string pchValue,int cchValueBufferSize);
+ public abstract bool DeleteLobbyData(ulong steamIDLobby,string pchKey);
+ public abstract string GetLobbyMemberData(ulong steamIDLobby,ulong steamIDUser,string pchKey);
+ public abstract void SetLobbyMemberData(ulong steamIDLobby,string pchKey,string pchValue);
+ public abstract bool SendLobbyChatMsg(ulong steamIDLobby,IntPtr pvMsgBody,int cubMsgBody);
+ public abstract int GetLobbyChatEntry(ulong steamIDLobby,int iChatID,out CSteamID pSteamIDUser,IntPtr pvData,int cubData,ref uint peChatEntryType);
+ public abstract bool RequestLobbyData(ulong steamIDLobby);
+ public abstract void SetLobbyGameServer(ulong steamIDLobby,uint unGameServerIP,char unGameServerPort,ulong steamIDGameServer);
+ public abstract bool GetLobbyGameServer(ulong steamIDLobby,ref uint punGameServerIP,ref char punGameServerPort,out CSteamID psteamIDGameServer);
+ public abstract bool SetLobbyMemberLimit(ulong steamIDLobby,int cMaxMembers);
+ public abstract int GetLobbyMemberLimit(ulong steamIDLobby);
+ public abstract bool SetLobbyType(ulong steamIDLobby,uint eLobbyType);
+ public abstract bool SetLobbyJoinable(ulong steamIDLobby,bool bLobbyJoinable);
+ public abstract ulong GetLobbyOwner(ulong steamIDLobby);
+ public abstract bool SetLobbyOwner(ulong steamIDLobby,ulong steamIDNewOwner);
+ public abstract bool SetLinkedLobby(ulong steamIDLobby,ulong steamIDLobbyDependent);
+ }
+
+
+ public abstract class ISteamMatchmakingServerListResponse
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract void ServerResponded(uint hRequest,int iServer);
+ public abstract void ServerFailedToRespond(uint hRequest,int iServer);
+ public abstract void RefreshComplete(uint hRequest,uint response);
+ }
+
+
+ public abstract class ISteamMatchmakingPingResponse
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract void ServerResponded(IntPtr server);
+ public abstract void ServerFailedToRespond();
+ }
+
+
+ public abstract class ISteamMatchmakingPlayersResponse
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract void AddPlayerToList(string pchName,int nScore,float flTimePlayed);
+ public abstract void PlayersFailedToRespond();
+ public abstract void PlayersRefreshComplete();
+ }
+
+
+ public abstract class ISteamMatchmakingRulesResponse
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract void RulesResponded(string pchRule,string pchValue);
+ public abstract void RulesFailedToRespond();
+ public abstract void RulesRefreshComplete();
+ }
+
+
+ public abstract class ISteamMatchmakingServers
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract uint RequestInternetServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse);
+ public abstract uint RequestLANServerList(uint iApp,ISteamMatchmakingServerListResponse pRequestServersResponse);
+ public abstract uint RequestFriendsServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse);
+ public abstract uint RequestFavoritesServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse);
+ public abstract uint RequestHistoryServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse);
+ public abstract uint RequestSpectatorServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse);
+ public abstract void ReleaseRequest(uint hServerListRequest);
+ public abstract gameserveritem_t GetServerDetails(uint hRequest,int iServer);
+ public abstract void CancelQuery(uint hRequest);
+ public abstract void RefreshQuery(uint hRequest);
+ public abstract bool IsRefreshing(uint hRequest);
+ public abstract int GetServerCount(uint hRequest);
+ public abstract void RefreshServer(uint hRequest,int iServer);
+ public abstract uint PingServer(uint unIP,char usPort,ISteamMatchmakingPingResponse pRequestServersResponse);
+ public abstract uint PlayerDetails(uint unIP,char usPort,ISteamMatchmakingPlayersResponse pRequestServersResponse);
+ public abstract uint ServerRules(uint unIP,char usPort,ISteamMatchmakingRulesResponse pRequestServersResponse);
+ public abstract void CancelServerQuery(uint hServerQuery);
+ }
+
+
+ public abstract class ISteamRemoteStorage
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract bool FileWrite(string pchFile,IntPtr pvData,int cubData);
+ public abstract int FileRead(string pchFile,IntPtr pvData,int cubDataToRead);
+ public abstract ulong FileWriteAsync(string pchFile,IntPtr pvData,uint cubData);
+ public abstract ulong FileReadAsync(string pchFile,uint nOffset,uint cubToRead);
+ public abstract bool FileReadAsyncComplete(ulong hReadCall,IntPtr pvBuffer,uint cubToRead);
+ public abstract bool FileForget(string pchFile);
+ public abstract bool FileDelete(string pchFile);
+ public abstract ulong FileShare(string pchFile);
+ public abstract bool SetSyncPlatforms(string pchFile,uint eRemoteStoragePlatform);
+ public abstract ulong FileWriteStreamOpen(string pchFile);
+ public abstract bool FileWriteStreamWriteChunk(ulong writeHandle,IntPtr pvData,int cubData);
+ public abstract bool FileWriteStreamClose(ulong writeHandle);
+ public abstract bool FileWriteStreamCancel(ulong writeHandle);
+ public abstract bool FileExists(string pchFile);
+ public abstract bool FilePersisted(string pchFile);
+ public abstract int GetFileSize(string pchFile);
+ public abstract long GetFileTimestamp(string pchFile);
+ public abstract uint GetSyncPlatforms(string pchFile);
+ public abstract int GetFileCount();
+ public abstract string GetFileNameAndSize(int iFile,ref int pnFileSizeInBytes);
+ public abstract bool GetQuota(ref ulong pnTotalBytes,ref ulong puAvailableBytes);
+ public abstract bool IsCloudEnabledForAccount();
+ public abstract bool IsCloudEnabledForApp();
+ public abstract void SetCloudEnabledForApp(bool bEnabled);
+ public abstract ulong UGCDownload(ulong hContent,uint unPriority);
+ public abstract bool GetUGCDownloadProgress(ulong hContent,ref int pnBytesDownloaded,ref int pnBytesExpected);
+ public abstract bool GetUGCDetails(ulong hContent,ref uint pnAppID,System.Text.StringBuilder ppchName,ref int pnFileSizeInBytes,out CSteamID pSteamIDOwner);
+ public abstract int UGCRead(ulong hContent,IntPtr pvData,int cubDataToRead,uint cOffset,uint eAction);
+ public abstract int GetCachedUGCCount();
+ public abstract ulong GetCachedUGCHandle(int iCachedContent);
+ public abstract ulong PublishWorkshopFile(string pchFile,string pchPreviewFile,uint nConsumerAppId,string pchTitle,string pchDescription,uint eVisibility,ref SteamParamStringArray_t pTags,uint eWorkshopFileType);
+ public abstract ulong CreatePublishedFileUpdateRequest(ulong unPublishedFileId);
+ public abstract bool UpdatePublishedFileFile(ulong updateHandle,string pchFile);
+ public abstract bool UpdatePublishedFilePreviewFile(ulong updateHandle,string pchPreviewFile);
+ public abstract bool UpdatePublishedFileTitle(ulong updateHandle,string pchTitle);
+ public abstract bool UpdatePublishedFileDescription(ulong updateHandle,string pchDescription);
+ public abstract bool UpdatePublishedFileVisibility(ulong updateHandle,uint eVisibility);
+ public abstract bool UpdatePublishedFileTags(ulong updateHandle,ref SteamParamStringArray_t pTags);
+ public abstract ulong CommitPublishedFileUpdate(ulong updateHandle);
+ public abstract ulong GetPublishedFileDetails(ulong unPublishedFileId,uint unMaxSecondsOld);
+ public abstract ulong DeletePublishedFile(ulong unPublishedFileId);
+ public abstract ulong EnumerateUserPublishedFiles(uint unStartIndex);
+ public abstract ulong SubscribePublishedFile(ulong unPublishedFileId);
+ public abstract ulong EnumerateUserSubscribedFiles(uint unStartIndex);
+ public abstract ulong UnsubscribePublishedFile(ulong unPublishedFileId);
+ public abstract bool UpdatePublishedFileSetChangeDescription(ulong updateHandle,string pchChangeDescription);
+ public abstract ulong GetPublishedItemVoteDetails(ulong unPublishedFileId);
+ public abstract ulong UpdateUserPublishedItemVote(ulong unPublishedFileId,bool bVoteUp);
+ public abstract ulong GetUserPublishedItemVoteDetails(ulong unPublishedFileId);
+ public abstract ulong EnumerateUserSharedWorkshopFiles(ulong steamId,uint unStartIndex,ref SteamParamStringArray_t pRequiredTags,ref SteamParamStringArray_t pExcludedTags);
+ public abstract ulong PublishVideo(uint eVideoProvider,string pchVideoAccount,string pchVideoIdentifier,string pchPreviewFile,uint nConsumerAppId,string pchTitle,string pchDescription,uint eVisibility,ref SteamParamStringArray_t pTags);
+ public abstract ulong SetUserPublishedFileAction(ulong unPublishedFileId,uint eAction);
+ public abstract ulong EnumeratePublishedFilesByUserAction(uint eAction,uint unStartIndex);
+ public abstract ulong EnumeratePublishedWorkshopFiles(uint eEnumerationType,uint unStartIndex,uint unCount,uint unDays,ref SteamParamStringArray_t pTags,ref SteamParamStringArray_t pUserTags);
+ public abstract ulong UGCDownloadToLocation(ulong hContent,string pchLocation,uint unPriority);
+ }
+
+
+ public abstract class ISteamUserStats
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract bool RequestCurrentStats();
+ public abstract bool GetStat(string pchName,ref int pData);
+ public abstract bool GetStat0(string pchName,ref float pData);
+ public abstract bool SetStat(string pchName,int nData);
+ public abstract bool SetStat0(string pchName,float fData);
+ public abstract bool UpdateAvgRateStat(string pchName,float flCountThisSession,double dSessionLength);
+ public abstract bool GetAchievement(string pchName,ref bool pbAchieved);
+ public abstract bool SetAchievement(string pchName);
+ public abstract bool ClearAchievement(string pchName);
+ public abstract bool GetAchievementAndUnlockTime(string pchName,ref bool pbAchieved,ref uint punUnlockTime);
+ public abstract bool StoreStats();
+ public abstract int GetAchievementIcon(string pchName);
+ public abstract string GetAchievementDisplayAttribute(string pchName,string pchKey);
+ public abstract bool IndicateAchievementProgress(string pchName,uint nCurProgress,uint nMaxProgress);
+ public abstract uint GetNumAchievements();
+ public abstract string GetAchievementName(uint iAchievement);
+ public abstract ulong RequestUserStats(ulong steamIDUser);
+ public abstract bool GetUserStat(ulong steamIDUser,string pchName,ref int pData);
+ public abstract bool GetUserStat0(ulong steamIDUser,string pchName,ref float pData);
+ public abstract bool GetUserAchievement(ulong steamIDUser,string pchName,ref bool pbAchieved);
+ public abstract bool GetUserAchievementAndUnlockTime(ulong steamIDUser,string pchName,ref bool pbAchieved,ref uint punUnlockTime);
+ public abstract bool ResetAllStats(bool bAchievementsToo);
+ public abstract ulong FindOrCreateLeaderboard(string pchLeaderboardName,uint eLeaderboardSortMethod,uint eLeaderboardDisplayType);
+ public abstract ulong FindLeaderboard(string pchLeaderboardName);
+ public abstract string GetLeaderboardName(ulong hSteamLeaderboard);
+ public abstract int GetLeaderboardEntryCount(ulong hSteamLeaderboard);
+ public abstract uint GetLeaderboardSortMethod(ulong hSteamLeaderboard);
+ public abstract uint GetLeaderboardDisplayType(ulong hSteamLeaderboard);
+ public abstract ulong DownloadLeaderboardEntries(ulong hSteamLeaderboard,uint eLeaderboardDataRequest,int nRangeStart,int nRangeEnd);
+ public abstract ulong DownloadLeaderboardEntriesForUsers(ulong hSteamLeaderboard,CSteamID [] prgUsers);
+ public abstract bool GetDownloadedLeaderboardEntry(ulong hSteamLeaderboardEntries,int index,ref LeaderboardEntry_t pLeaderboardEntry,ref int pDetails,int cDetailsMax);
+ public abstract ulong UploadLeaderboardScore(ulong hSteamLeaderboard,uint eLeaderboardUploadScoreMethod,int nScore,ref int pScoreDetails,int cScoreDetailsCount);
+ public abstract ulong AttachLeaderboardUGC(ulong hSteamLeaderboard,ulong hUGC);
+ public abstract ulong GetNumberOfCurrentPlayers();
+ public abstract ulong RequestGlobalAchievementPercentages();
+ public abstract int GetMostAchievedAchievementInfo(string pchName,uint unNameBufLen,ref float pflPercent,ref bool pbAchieved);
+ public abstract int GetNextMostAchievedAchievementInfo(int iIteratorPrevious,string pchName,uint unNameBufLen,ref float pflPercent,ref bool pbAchieved);
+ public abstract bool GetAchievementAchievedPercent(string pchName,ref float pflPercent);
+ public abstract ulong RequestGlobalStats(int nHistoryDays);
+ public abstract bool GetGlobalStat(string pchStatName,ref long pData);
+ public abstract bool GetGlobalStat0(string pchStatName,ref double pData);
+ public abstract int GetGlobalStatHistory(string pchStatName,long [] pData);
+ public abstract int GetGlobalStatHistory0(string pchStatName,double [] pData);
+ }
+
+
+ public abstract class ISteamApps
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract bool BIsSubscribed();
+ public abstract bool BIsLowViolence();
+ public abstract bool BIsCybercafe();
+ public abstract bool BIsVACBanned();
+ public abstract string GetCurrentGameLanguage();
+ public abstract string GetAvailableGameLanguages();
+ public abstract bool BIsSubscribedApp(uint appID);
+ public abstract bool BIsDlcInstalled(uint appID);
+ public abstract uint GetEarliestPurchaseUnixTime(uint nAppID);
+ public abstract bool BIsSubscribedFromFreeWeekend();
+ public abstract int GetDLCCount();
+ public abstract bool BGetDLCDataByIndex(int iDLC,ref uint pAppID,ref bool pbAvailable,string pchName,int cchNameBufferSize);
+ public abstract void InstallDLC(uint nAppID);
+ public abstract void UninstallDLC(uint nAppID);
+ public abstract void RequestAppProofOfPurchaseKey(uint nAppID);
+ public abstract bool GetCurrentBetaName(string pchName,int cchNameBufferSize);
+ public abstract bool MarkContentCorrupt(bool bMissingFilesOnly);
+ public abstract uint GetInstalledDepots(uint appID,ref uint pvecDepots,uint cMaxDepots);
+ public abstract uint GetAppInstallDir(uint appID,string pchFolder,uint cchFolderBufferSize);
+ public abstract bool BIsAppInstalled(uint appID);
+ public abstract ulong GetAppOwner();
+ public abstract string GetLaunchQueryParam(string pchKey);
+ public abstract bool GetDlcDownloadProgress(uint nAppID,ref ulong punBytesDownloaded,ref ulong punBytesTotal);
+ public abstract int GetAppBuildId();
+ public abstract void RequestAllProofOfPurchaseKeys();
+ public abstract ulong GetFileDetails(string pszFileName);
+ }
+
+
+ public abstract class ISteamNetworking
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract bool SendP2PPacket(ulong steamIDRemote,IntPtr pubData,uint cubData,uint eP2PSendType,int nChannel);
+ public abstract bool IsP2PPacketAvailable(ref uint pcubMsgSize,int nChannel);
+ public abstract bool ReadP2PPacket(IntPtr pubDest,uint cubDest,ref uint pcubMsgSize,ref CSteamID psteamIDRemote,int nChannel);
+ public abstract bool AcceptP2PSessionWithUser(ulong steamIDRemote);
+ public abstract bool CloseP2PSessionWithUser(ulong steamIDRemote);
+ public abstract bool CloseP2PChannelWithUser(ulong steamIDRemote,int nChannel);
+ public abstract bool GetP2PSessionState(ulong steamIDRemote,ref P2PSessionState_t pConnectionState);
+ public abstract bool AllowP2PPacketRelay(bool bAllow);
+ public abstract uint CreateListenSocket(int nVirtualP2PPort,uint nIP,char nPort,bool bAllowUseOfPacketRelay);
+ public abstract uint CreateP2PConnectionSocket(ulong steamIDTarget,int nVirtualPort,int nTimeoutSec,bool bAllowUseOfPacketRelay);
+ public abstract uint CreateConnectionSocket(uint nIP,char nPort,int nTimeoutSec);
+ public abstract bool DestroySocket(uint hSocket,bool bNotifyRemoteEnd);
+ public abstract bool DestroyListenSocket(uint hSocket,bool bNotifyRemoteEnd);
+ public abstract bool SendDataOnSocket(uint hSocket,IntPtr pubData,uint cubData,bool bReliable);
+ public abstract bool IsDataAvailableOnSocket(uint hSocket,ref uint pcubMsgSize);
+ public abstract bool RetrieveDataFromSocket(uint hSocket,IntPtr pubDest,uint cubDest,ref uint pcubMsgSize);
+ public abstract bool IsDataAvailable(uint hListenSocket,ref uint pcubMsgSize,ref uint phSocket);
+ public abstract bool RetrieveData(uint hListenSocket,IntPtr pubDest,uint cubDest,ref uint pcubMsgSize,ref uint phSocket);
+ public abstract bool GetSocketInfo(uint hSocket,ref CSteamID pSteamIDRemote,ref int peSocketStatus,ref uint punIPRemote,ref char punPortRemote);
+ public abstract bool GetListenSocketInfo(uint hListenSocket,ref uint pnIP,ref char pnPort);
+ public abstract uint GetSocketConnectionType(uint hSocket);
+ public abstract int GetMaxPacketSize(uint hSocket);
+ }
+
+
+ public abstract class ISteamScreenshots
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract uint WriteScreenshot(IntPtr pubRGB,uint cubRGB,int nWidth,int nHeight);
+ public abstract uint AddScreenshotToLibrary(string pchFilename,string pchThumbnailFilename,int nWidth,int nHeight);
+ public abstract void TriggerScreenshot();
+ public abstract void HookScreenshots(bool bHook);
+ public abstract bool SetLocation(uint hScreenshot,string pchLocation);
+ public abstract bool TagUser(uint hScreenshot,ulong steamID);
+ public abstract bool TagPublishedFile(uint hScreenshot,ulong unPublishedFileID);
+ public abstract bool IsScreenshotsHooked();
+ public abstract uint AddVRScreenshotToLibrary(uint eType,string pchFilename,string pchVRFilename);
+ }
+
+
+ public abstract class ISteamMusic
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract bool BIsEnabled();
+ public abstract bool BIsPlaying();
+ public abstract int GetPlaybackStatus();
+ public abstract void Play();
+ public abstract void Pause();
+ public abstract void PlayPrevious();
+ public abstract void PlayNext();
+ public abstract void SetVolume(float flVolume);
+ public abstract float GetVolume();
+ }
+
+
+ public abstract class ISteamMusicRemote
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract bool RegisterSteamMusicRemote(string pchName);
+ public abstract bool DeregisterSteamMusicRemote();
+ public abstract bool BIsCurrentMusicRemote();
+ public abstract bool BActivationSuccess(bool bValue);
+ public abstract bool SetDisplayName(string pchDisplayName);
+ public abstract bool SetPNGIcon_64x64(IntPtr pvBuffer,uint cbBufferLength);
+ public abstract bool EnablePlayPrevious(bool bValue);
+ public abstract bool EnablePlayNext(bool bValue);
+ public abstract bool EnableShuffled(bool bValue);
+ public abstract bool EnableLooped(bool bValue);
+ public abstract bool EnableQueue(bool bValue);
+ public abstract bool EnablePlaylists(bool bValue);
+ public abstract bool UpdatePlaybackStatus(int nStatus);
+ public abstract bool UpdateShuffled(bool bValue);
+ public abstract bool UpdateLooped(bool bValue);
+ public abstract bool UpdateVolume(float flValue);
+ public abstract bool CurrentEntryWillChange();
+ public abstract bool CurrentEntryIsAvailable(bool bAvailable);
+ public abstract bool UpdateCurrentEntryText(string pchText);
+ public abstract bool UpdateCurrentEntryElapsedSeconds(int nValue);
+ public abstract bool UpdateCurrentEntryCoverArt(IntPtr pvBuffer,uint cbBufferLength);
+ public abstract bool CurrentEntryDidChange();
+ public abstract bool QueueWillChange();
+ public abstract bool ResetQueueEntries();
+ public abstract bool SetQueueEntry(int nID,int nPosition,string pchEntryText);
+ public abstract bool SetCurrentQueueEntry(int nID);
+ public abstract bool QueueDidChange();
+ public abstract bool PlaylistWillChange();
+ public abstract bool ResetPlaylistEntries();
+ public abstract bool SetPlaylistEntry(int nID,int nPosition,string pchEntryText);
+ public abstract bool SetCurrentPlaylistEntry(int nID);
+ public abstract bool PlaylistDidChange();
+ }
+
+
+ public abstract class ISteamHTTP
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract uint CreateHTTPRequest(uint eHTTPRequestMethod,string pchAbsoluteURL);
+ public abstract bool SetHTTPRequestContextValue(uint hRequest,ulong ulContextValue);
+ public abstract bool SetHTTPRequestNetworkActivityTimeout(uint hRequest,uint unTimeoutSeconds);
+ public abstract bool SetHTTPRequestHeaderValue(uint hRequest,string pchHeaderName,string pchHeaderValue);
+ public abstract bool SetHTTPRequestGetOrPostParameter(uint hRequest,string pchParamName,string pchParamValue);
+ public abstract bool SendHTTPRequest(uint hRequest,ref ulong pCallHandle);
+ public abstract bool SendHTTPRequestAndStreamResponse(uint hRequest,ref ulong pCallHandle);
+ public abstract bool DeferHTTPRequest(uint hRequest);
+ public abstract bool PrioritizeHTTPRequest(uint hRequest);
+ public abstract bool GetHTTPResponseHeaderSize(uint hRequest,string pchHeaderName,ref uint unResponseHeaderSize);
+ public abstract bool GetHTTPResponseHeaderValue(uint hRequest,string pchHeaderName,IntPtr pHeaderValueBuffer,uint unBufferSize);
+ public abstract bool GetHTTPResponseBodySize(uint hRequest,ref uint unBodySize);
+ public abstract bool GetHTTPResponseBodyData(uint hRequest,IntPtr pBodyDataBuffer,uint unBufferSize);
+ public abstract bool GetHTTPStreamingResponseBodyData(uint hRequest,uint cOffset,IntPtr pBodyDataBuffer,uint unBufferSize);
+ public abstract bool ReleaseHTTPRequest(uint hRequest);
+ public abstract bool GetHTTPDownloadProgressPct(uint hRequest,ref float pflPercentOut);
+ public abstract bool SetHTTPRequestRawPostBody(uint hRequest,string pchContentType,IntPtr pubBody,uint unBodyLen);
+ public abstract uint CreateCookieContainer(bool bAllowResponsesToModify);
+ public abstract bool ReleaseCookieContainer(uint hCookieContainer);
+ public abstract bool SetCookie(uint hCookieContainer,string pchHost,string pchUrl,string pchCookie);
+ public abstract bool SetHTTPRequestCookieContainer(uint hRequest,uint hCookieContainer);
+ public abstract bool SetHTTPRequestUserAgentInfo(uint hRequest,string pchUserAgentInfo);
+ public abstract bool SetHTTPRequestRequiresVerifiedCertificate(uint hRequest,bool bRequireVerifiedCertificate);
+ public abstract bool SetHTTPRequestAbsoluteTimeoutMS(uint hRequest,uint unMilliseconds);
+ public abstract bool GetHTTPRequestWasTimedOut(uint hRequest,ref bool pbWasTimedOut);
+ }
+
+
+ public abstract class ISteamUnifiedMessages
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract ulong SendMethod(string pchServiceMethod,IntPtr pRequestBuffer,uint unRequestBufferSize,ulong unContext);
+ public abstract bool GetMethodResponseInfo(ulong hHandle,ref uint punResponseSize,ref uint peResult);
+ public abstract bool GetMethodResponseData(ulong hHandle,IntPtr pResponseBuffer,uint unResponseBufferSize,bool bAutoRelease);
+ public abstract bool ReleaseMethod(ulong hHandle);
+ public abstract bool SendNotification(string pchServiceNotification,IntPtr pNotificationBuffer,uint unNotificationBufferSize);
+ }
+
+
+ public abstract class ISteamController
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract bool Init();
+ public abstract bool Shutdown();
+ public abstract void RunFrame();
+ public abstract int GetConnectedControllers(ref ulong handlesOut);
+ public abstract bool ShowBindingPanel(ulong controllerHandle);
+ public abstract ulong GetActionSetHandle(string pszActionSetName);
+ public abstract void ActivateActionSet(ulong controllerHandle,ulong actionSetHandle);
+ public abstract ulong GetCurrentActionSet(ulong controllerHandle);
+ public abstract ulong GetDigitalActionHandle(string pszActionName);
+ public abstract ControllerDigitalActionData_t GetDigitalActionData(ulong controllerHandle,ulong digitalActionHandle);
+ public abstract int GetDigitalActionOrigins(ulong controllerHandle,ulong actionSetHandle,ulong digitalActionHandle,ref uint originsOut);
+ public abstract ulong GetAnalogActionHandle(string pszActionName);
+ public abstract ControllerAnalogActionData_t GetAnalogActionData(ulong controllerHandle,ulong analogActionHandle);
+ public abstract int GetAnalogActionOrigins(ulong controllerHandle,ulong actionSetHandle,ulong analogActionHandle,ref uint originsOut);
+ public abstract void StopAnalogActionMomentum(ulong controllerHandle,ulong eAction);
+ public abstract void TriggerHapticPulse(ulong controllerHandle,uint eTargetPad,char usDurationMicroSec);
+ public abstract void TriggerRepeatedHapticPulse(ulong controllerHandle,uint eTargetPad,char usDurationMicroSec,char usOffMicroSec,char unRepeat,uint nFlags);
+ public abstract void TriggerVibration(ulong controllerHandle,char usLeftSpeed,char usRightSpeed);
+ public abstract void SetLEDColor(ulong controllerHandle,byte nColorR,byte nColorG,byte nColorB,uint nFlags);
+ public abstract int GetGamepadIndexForController(ulong ulControllerHandle);
+ public abstract ulong GetControllerForGamepadIndex(int nIndex);
+ public abstract ControllerMotionData_t GetMotionData(ulong controllerHandle);
+ public abstract bool ShowDigitalActionOrigins(ulong controllerHandle,ulong digitalActionHandle,float flScale,float flXPosition,float flYPosition);
+ public abstract bool ShowAnalogActionOrigins(ulong controllerHandle,ulong analogActionHandle,float flScale,float flXPosition,float flYPosition);
+ public abstract string GetStringForActionOrigin(uint eOrigin);
+ public abstract string GetGlyphForActionOrigin(uint eOrigin);
+ }
+
+
+ public abstract class ISteamUGC
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract ulong CreateQueryUserUGCRequest(uint unAccountID,uint eListType,uint eMatchingUGCType,uint eSortOrder,uint nCreatorAppID,uint nConsumerAppID,uint unPage);
+ public abstract ulong CreateQueryAllUGCRequest(uint eQueryType,uint eMatchingeMatchingUGCTypeFileType,uint nCreatorAppID,uint nConsumerAppID,uint unPage);
+ public abstract ulong CreateQueryUGCDetailsRequest(ref ulong pvecPublishedFileID,uint unNumPublishedFileIDs);
+ public abstract ulong SendQueryUGCRequest(ulong handle);
+ public abstract bool GetQueryUGCResult(ulong handle,uint index,ref SteamUGCDetails_t pDetails);
+ public abstract bool GetQueryUGCPreviewURL(ulong handle,uint index,out string pchURL);
+ public abstract bool GetQueryUGCMetadata(ulong handle,uint index,out string pchMetadata);
+ public abstract bool GetQueryUGCChildren(ulong handle,uint index,ref ulong pvecPublishedFileID,uint cMaxEntries);
+ public abstract bool GetQueryUGCStatistic(ulong handle,uint index,uint eStatType,ref ulong pStatValue);
+ public abstract uint GetQueryUGCNumAdditionalPreviews(ulong handle,uint index);
+ public abstract bool GetQueryUGCAdditionalPreview(ulong handle,uint index,uint previewIndex,out string pchURLOrVideoID,out string pchOriginalFileName,uint cchOriginalFileNameSize,ref uint pPreviewType);
+ public abstract uint GetQueryUGCNumKeyValueTags(ulong handle,uint index);
+ public abstract bool GetQueryUGCKeyValueTag(ulong handle,uint index,uint keyValueTagIndex,out string pchKey,out string pchValue);
+ public abstract bool ReleaseQueryUGCRequest(ulong handle);
+ public abstract bool AddRequiredTag(ulong handle,string pTagName);
+ public abstract bool AddExcludedTag(ulong handle,string pTagName);
+ public abstract bool SetReturnOnlyIDs(ulong handle,bool bReturnOnlyIDs);
+ public abstract bool SetReturnKeyValueTags(ulong handle,bool bReturnKeyValueTags);
+ public abstract bool SetReturnLongDescription(ulong handle,bool bReturnLongDescription);
+ public abstract bool SetReturnMetadata(ulong handle,bool bReturnMetadata);
+ public abstract bool SetReturnChildren(ulong handle,bool bReturnChildren);
+ public abstract bool SetReturnAdditionalPreviews(ulong handle,bool bReturnAdditionalPreviews);
+ public abstract bool SetReturnTotalOnly(ulong handle,bool bReturnTotalOnly);
+ public abstract bool SetLanguage(ulong handle,string pchLanguage);
+ public abstract bool SetAllowCachedResponse(ulong handle,uint unMaxAgeSeconds);
+ public abstract bool SetCloudFileNameFilter(ulong handle,string pMatchCloudFileName);
+ public abstract bool SetMatchAnyTag(ulong handle,bool bMatchAnyTag);
+ public abstract bool SetSearchText(ulong handle,string pSearchText);
+ public abstract bool SetRankedByTrendDays(ulong handle,uint unDays);
+ public abstract bool AddRequiredKeyValueTag(ulong handle,string pKey,string pValue);
+ public abstract ulong RequestUGCDetails(ulong nPublishedFileID,uint unMaxAgeSeconds);
+ public abstract ulong CreateItem(uint nConsumerAppId,uint eFileType);
+ public abstract ulong StartItemUpdate(uint nConsumerAppId,ulong nPublishedFileID);
+ public abstract bool SetItemTitle(ulong handle,string pchTitle);
+ public abstract bool SetItemDescription(ulong handle,string pchDescription);
+ public abstract bool SetItemUpdateLanguage(ulong handle,string pchLanguage);
+ public abstract bool SetItemMetadata(ulong handle,string pchMetaData);
+ public abstract bool SetItemVisibility(ulong handle,uint eVisibility);
+ public abstract bool SetItemTags(ulong updateHandle,ref SteamParamStringArray_t pTags);
+ public abstract bool SetItemContent(ulong handle,string pszContentFolder);
+ public abstract bool SetItemPreview(ulong handle,string pszPreviewFile);
+ public abstract bool RemoveItemKeyValueTags(ulong handle,string pchKey);
+ public abstract bool AddItemKeyValueTag(ulong handle,string pchKey,string pchValue);
+ public abstract bool AddItemPreviewFile(ulong handle,string pszPreviewFile,uint type);
+ public abstract bool AddItemPreviewVideo(ulong handle,string pszVideoID);
+ public abstract bool UpdateItemPreviewFile(ulong handle,uint index,string pszPreviewFile);
+ public abstract bool UpdateItemPreviewVideo(ulong handle,uint index,string pszVideoID);
+ public abstract bool RemoveItemPreview(ulong handle,uint index);
+ public abstract ulong SubmitItemUpdate(ulong handle,string pchChangeNote);
+ public abstract uint GetItemUpdateProgress(ulong handle,ref ulong punBytesProcessed,ref ulong punBytesTotal);
+ public abstract ulong SetUserItemVote(ulong nPublishedFileID,bool bVoteUp);
+ public abstract ulong GetUserItemVote(ulong nPublishedFileID);
+ public abstract ulong AddItemToFavorites(uint nAppId,ulong nPublishedFileID);
+ public abstract ulong RemoveItemFromFavorites(uint nAppId,ulong nPublishedFileID);
+ public abstract ulong SubscribeItem(ulong nPublishedFileID);
+ public abstract ulong UnsubscribeItem(ulong nPublishedFileID);
+ public abstract uint GetNumSubscribedItems();
+ public abstract uint GetSubscribedItems(ref ulong pvecPublishedFileID,uint cMaxEntries);
+ public abstract uint GetItemState(ulong nPublishedFileID);
+ public abstract bool GetItemInstallInfo(ulong nPublishedFileID,ref ulong punSizeOnDisk,out string pchFolder,ref uint punTimeStamp);
+ public abstract bool GetItemDownloadInfo(ulong nPublishedFileID,ref ulong punBytesDownloaded,ref ulong punBytesTotal);
+ public abstract bool DownloadItem(ulong nPublishedFileID,bool bHighPriority);
+ public abstract bool BInitWorkshopForGameServer(uint unWorkshopDepotID,string pszFolder);
+ public abstract void SuspendDownloads(bool bSuspend);
+ public abstract ulong StartPlaytimeTracking(ref ulong pvecPublishedFileID,uint unNumPublishedFileIDs);
+ public abstract ulong StopPlaytimeTracking(ref ulong pvecPublishedFileID,uint unNumPublishedFileIDs);
+ public abstract ulong StopPlaytimeTrackingForAllItems();
+ }
+
+
+ public abstract class ISteamAppList
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract uint GetNumInstalledApps();
+ public abstract uint GetInstalledApps(ref uint pvecAppID,uint unMaxAppIDs);
+ public abstract int GetAppName(uint nAppID,System.Text.StringBuilder pchName,int cchNameMax);
+ public abstract int GetAppInstallDir(uint nAppID,string pchDirectory,int cchNameMax);
+ public abstract int GetAppBuildId(uint nAppID);
+ }
+
+
+ public abstract class ISteamHTMLSurface
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract void DestructISteamHTMLSurface();
+ public abstract bool Init();
+ public abstract bool Shutdown();
+ public abstract ulong CreateBrowser(string pchUserAgent,string pchUserCSS);
+ public abstract void RemoveBrowser(uint unBrowserHandle);
+ public abstract void LoadURL(uint unBrowserHandle,string pchURL,string pchPostData);
+ public abstract void SetSize(uint unBrowserHandle,uint unWidth,uint unHeight);
+ public abstract void StopLoad(uint unBrowserHandle);
+ public abstract void Reload(uint unBrowserHandle);
+ public abstract void GoBack(uint unBrowserHandle);
+ public abstract void GoForward(uint unBrowserHandle);
+ public abstract void AddHeader(uint unBrowserHandle,string pchKey,string pchValue);
+ public abstract void ExecuteJavascript(uint unBrowserHandle,string pchScript);
+ public abstract void MouseUp(uint unBrowserHandle,uint eMouseButton);
+ public abstract void MouseDown(uint unBrowserHandle,uint eMouseButton);
+ public abstract void MouseDoubleClick(uint unBrowserHandle,uint eMouseButton);
+ public abstract void MouseMove(uint unBrowserHandle,int x,int y);
+ public abstract void MouseWheel(uint unBrowserHandle,int nDelta);
+ public abstract void KeyDown(uint unBrowserHandle,uint nNativeKeyCode,uint eHTMLKeyModifiers);
+ public abstract void KeyUp(uint unBrowserHandle,uint nNativeKeyCode,uint eHTMLKeyModifiers);
+ public abstract void KeyChar(uint unBrowserHandle,uint cUnicodeChar,uint eHTMLKeyModifiers);
+ public abstract void SetHorizontalScroll(uint unBrowserHandle,uint nAbsolutePixelScroll);
+ public abstract void SetVerticalScroll(uint unBrowserHandle,uint nAbsolutePixelScroll);
+ public abstract void SetKeyFocus(uint unBrowserHandle,bool bHasKeyFocus);
+ public abstract void ViewSource(uint unBrowserHandle);
+ public abstract void CopyToClipboard(uint unBrowserHandle);
+ public abstract void PasteFromClipboard(uint unBrowserHandle);
+ public abstract void Find(uint unBrowserHandle,string pchSearchStr,bool bCurrentlyInFind,bool bReverse);
+ public abstract void StopFind(uint unBrowserHandle);
+ public abstract void GetLinkAtPosition(uint unBrowserHandle,int x,int y);
+ public abstract void SetCookie(string pchHostname,string pchKey,string pchValue,string pchPath,ulong nExpires,bool bSecure,bool bHTTPOnly);
+ public abstract void SetPageScaleFactor(uint unBrowserHandle,float flZoom,int nPointX,int nPointY);
+ public abstract void SetBackgroundMode(uint unBrowserHandle,bool bBackgroundMode);
+ public abstract void AllowStartRequest(uint unBrowserHandle,bool bAllowed);
+ public abstract void JSDialogResponse(uint unBrowserHandle,bool bResult);
+ }
+
+
+ public abstract class ISteamInventory
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract uint GetResultStatus(int resultHandle);
+ public abstract bool GetResultItems(int resultHandle,out SteamItemDetails_t [] pOutItemsArray);
+ public abstract uint GetResultTimestamp(int resultHandle);
+ public abstract bool CheckResultSteamID(int resultHandle,ulong steamIDExpected);
+ public abstract void DestroyResult(int resultHandle);
+ public abstract bool GetAllItems(ref int pResultHandle);
+ public abstract bool GetItemsByID(ref int pResultHandle,ulong [] pInstanceIDs);
+ public abstract bool SerializeResult(int resultHandle,IntPtr pOutBuffer,ref uint punOutBufferSize);
+ public abstract bool DeserializeResult(ref int pOutResultHandle,IntPtr pBuffer,uint unBufferSize,bool bRESERVED_MUST_BE_FALSE);
+ public abstract bool GenerateItems(ref int pResultHandle,int [] pArrayItemDefs,uint [] punArrayQuantity);
+ public abstract bool GrantPromoItems(ref int pResultHandle);
+ public abstract bool AddPromoItem(ref int pResultHandle,int itemDef);
+ public abstract bool AddPromoItems(ref int pResultHandle,int [] pArrayItemDefs);
+ public abstract bool ConsumeItem(ref int pResultHandle,ulong itemConsume,uint unQuantity);
+ public abstract bool ExchangeItems(ref int pResultHandle,int [] pArrayGenerate,uint [] punArrayGenerateQuantity,ulong [] pArrayDestroy,uint [] punArrayDestroyQuantity);
+ public abstract bool TransferItemQuantity(ref int pResultHandle,ulong itemIdSource,uint unQuantity,ulong itemIdDest);
+ public abstract void SendItemDropHeartbeat();
+ public abstract bool TriggerItemDrop(ref int pResultHandle,int dropListDefinition);
+ public abstract bool TradeItems(ref int pResultHandle,ulong steamIDTradePartner,ulong [] pArrayGive,uint [] pArrayGiveQuantity,ulong [] pArrayGet,uint [] pArrayGetQuantity);
+ public abstract bool LoadItemDefinitions();
+ public abstract bool GetItemDefinitionIDs(out int [] pItemDefIDs);
+ public abstract bool GetItemDefinitionProperty(int iDefinition,string pchPropertyName,out string pchValueBuffer);
+ public abstract ulong RequestEligiblePromoItemDefinitionsIDs(ulong steamID);
+ public abstract bool GetEligiblePromoItemDefinitionIDs(ulong steamID,out int [] pItemDefIDs);
+ }
+
+
+ public abstract class ISteamVideo
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract void GetVideoURL(uint unVideoAppID);
+ public abstract bool IsBroadcasting(ref int pnNumViewers);
+ }
+
+
+ public abstract class ISteamGameServer
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract bool InitGameServer(uint unIP,char usGamePort,char usQueryPort,uint unFlags,uint nGameAppId,string pchVersionString);
+ public abstract void SetProduct(string pszProduct);
+ public abstract void SetGameDescription(string pszGameDescription);
+ public abstract void SetModDir(string pszModDir);
+ public abstract void SetDedicatedServer(bool bDedicated);
+ public abstract void LogOn(string pszToken);
+ public abstract void LogOnAnonymous();
+ public abstract void LogOff();
+ public abstract bool BLoggedOn();
+ public abstract bool BSecure();
+ public abstract ulong GetSteamID();
+ public abstract bool WasRestartRequested();
+ public abstract void SetMaxPlayerCount(int cPlayersMax);
+ public abstract void SetBotPlayerCount(int cBotplayers);
+ public abstract void SetServerName(string pszServerName);
+ public abstract void SetMapName(string pszMapName);
+ public abstract void SetPasswordProtected(bool bPasswordProtected);
+ public abstract void SetSpectatorPort(char unSpectatorPort);
+ public abstract void SetSpectatorServerName(string pszSpectatorServerName);
+ public abstract void ClearAllKeyValues();
+ public abstract void SetKeyValue(string pKey,string pValue);
+ public abstract void SetGameTags(string pchGameTags);
+ public abstract void SetGameData(string pchGameData);
+ public abstract void SetRegion(string pszRegion);
+ public abstract bool SendUserConnectAndAuthenticate(uint unIPClient,IntPtr pvAuthBlob,uint cubAuthBlobSize,ref CSteamID pSteamIDUser);
+ public abstract ulong CreateUnauthenticatedUserConnection();
+ public abstract void SendUserDisconnect(ulong steamIDUser);
+ public abstract bool BUpdateUserData(ulong steamIDUser,string pchPlayerName,uint uScore);
+ public abstract uint GetAuthSessionTicket(IntPtr pTicket,int cbMaxTicket,ref uint pcbTicket);
+ public abstract uint BeginAuthSession(IntPtr pAuthTicket,int cbAuthTicket,ulong steamID);
+ public abstract void EndAuthSession(ulong steamID);
+ public abstract void CancelAuthTicket(uint hAuthTicket);
+ public abstract uint UserHasLicenseForApp(ulong steamID,uint appID);
+ public abstract bool RequestUserGroupStatus(ulong steamIDUser,ulong steamIDGroup);
+ public abstract void GetGameplayStats();
+ public abstract ulong GetServerReputation();
+ public abstract uint GetPublicIP();
+ public abstract bool HandleIncomingPacket(IntPtr pData,int cbData,uint srcIP,char srcPort);
+ public abstract int GetNextOutgoingPacket(IntPtr pOut,int cbMaxOut,ref uint pNetAdr,ref char pPort);
+ public abstract void EnableHeartbeats(bool bActive);
+ public abstract void SetHeartbeatInterval(int iHeartbeatInterval);
+ public abstract void ForceHeartbeat();
+ public abstract ulong AssociateWithClan(ulong steamIDClan);
+ public abstract ulong ComputeNewPlayerCompatibility(ulong steamIDNewPlayer);
+ }
+
+
+ public abstract class ISteamGameServerStats
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract ulong RequestUserStats(ulong steamIDUser);
+ public abstract bool GetUserStat(ulong steamIDUser,string pchName,ref int pData);
+ public abstract bool GetUserStat0(ulong steamIDUser,string pchName,ref float pData);
+ public abstract bool GetUserAchievement(ulong steamIDUser,string pchName,ref bool pbAchieved);
+ public abstract bool SetUserStat(ulong steamIDUser,string pchName,int nData);
+ public abstract bool SetUserStat0(ulong steamIDUser,string pchName,float fData);
+ public abstract bool UpdateUserAvgRateStat(ulong steamIDUser,string pchName,float flCountThisSession,double dSessionLength);
+ public abstract bool SetUserAchievement(ulong steamIDUser,string pchName);
+ public abstract bool ClearUserAchievement(ulong steamIDUser,string pchName);
+ public abstract ulong StoreUserStats(ulong steamIDUser);
+ }
+
+
+public class CSteamClient : ISteamClient
+{
+public CSteamClient(IntPtr SteamClient)
+{
+ m_pSteamClient = SteamClient;
+}
+IntPtr m_pSteamClient;
+
+public override IntPtr GetIntPtr() { return m_pSteamClient; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamClient == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override uint CreateSteamPipe()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamClient_CreateSteamPipe(m_pSteamClient);
+ return result;
+}
+public override bool BReleaseSteamPipe(uint hSteamPipe)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamClient_BReleaseSteamPipe(m_pSteamClient,hSteamPipe);
+ return result;
+}
+public override uint ConnectToGlobalUser(uint hSteamPipe)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamClient_ConnectToGlobalUser(m_pSteamClient,hSteamPipe);
+ return result;
+}
+public override uint CreateLocalUser(ref uint phSteamPipe,uint eAccountType)
+{
+ CheckIfUsable();
+ phSteamPipe = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamClient_CreateLocalUser(m_pSteamClient,ref phSteamPipe,eAccountType);
+ return result;
+}
+public override void ReleaseUser(uint hSteamPipe,uint hUser)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamClient_ReleaseUser(m_pSteamClient,hSteamPipe,hUser);
+}
+public override ISteamUser GetISteamUser(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamUser(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamUser) Marshal.PtrToStructure(result, typeof(ISteamUser));
+}
+public override ISteamGameServer GetISteamGameServer(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamGameServer(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamGameServer) Marshal.PtrToStructure(result, typeof(ISteamGameServer));
+}
+public override void SetLocalIPBinding(uint unIP,char usPort)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamClient_SetLocalIPBinding(m_pSteamClient,unIP,usPort);
+}
+public override ISteamFriends GetISteamFriends(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamFriends(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamFriends) Marshal.PtrToStructure(result, typeof(ISteamFriends));
+}
+public override ISteamUtils GetISteamUtils(uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamUtils(m_pSteamClient,hSteamPipe,pchVersion);
+ return (ISteamUtils) Marshal.PtrToStructure(result, typeof(ISteamUtils));
+}
+public override ISteamMatchmaking GetISteamMatchmaking(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamMatchmaking(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamMatchmaking) Marshal.PtrToStructure(result, typeof(ISteamMatchmaking));
+}
+public override ISteamMatchmakingServers GetISteamMatchmakingServers(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamMatchmakingServers(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamMatchmakingServers) Marshal.PtrToStructure(result, typeof(ISteamMatchmakingServers));
+}
+public override IntPtr GetISteamGenericInterface(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamGenericInterface(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (IntPtr) Marshal.PtrToStructure(result, typeof(IntPtr));
+}
+public override ISteamUserStats GetISteamUserStats(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamUserStats(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamUserStats) Marshal.PtrToStructure(result, typeof(ISteamUserStats));
+}
+public override ISteamGameServerStats GetISteamGameServerStats(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamGameServerStats(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamGameServerStats) Marshal.PtrToStructure(result, typeof(ISteamGameServerStats));
+}
+public override ISteamApps GetISteamApps(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamApps(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamApps) Marshal.PtrToStructure(result, typeof(ISteamApps));
+}
+public override ISteamNetworking GetISteamNetworking(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamNetworking(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamNetworking) Marshal.PtrToStructure(result, typeof(ISteamNetworking));
+}
+public override ISteamRemoteStorage GetISteamRemoteStorage(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamRemoteStorage(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamRemoteStorage) Marshal.PtrToStructure(result, typeof(ISteamRemoteStorage));
+}
+public override ISteamScreenshots GetISteamScreenshots(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamScreenshots(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamScreenshots) Marshal.PtrToStructure(result, typeof(ISteamScreenshots));
+}
+public override uint GetIPCCallCount()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamClient_GetIPCCallCount(m_pSteamClient);
+ return result;
+}
+public override void SetWarningMessageHook(IntPtr pFunction)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamClient_SetWarningMessageHook(m_pSteamClient,pFunction);
+}
+public override bool BShutdownIfAllPipesClosed()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(m_pSteamClient);
+ return result;
+}
+public override ISteamHTTP GetISteamHTTP(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamHTTP(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamHTTP) Marshal.PtrToStructure(result, typeof(ISteamHTTP));
+}
+public override ISteamUnifiedMessages GetISteamUnifiedMessages(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamUnifiedMessages(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamUnifiedMessages) Marshal.PtrToStructure(result, typeof(ISteamUnifiedMessages));
+}
+public override ISteamController GetISteamController(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamController(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamController) Marshal.PtrToStructure(result, typeof(ISteamController));
+}
+public override ISteamUGC GetISteamUGC(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamUGC(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamUGC) Marshal.PtrToStructure(result, typeof(ISteamUGC));
+}
+public override ISteamAppList GetISteamAppList(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamAppList(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamAppList) Marshal.PtrToStructure(result, typeof(ISteamAppList));
+}
+public override ISteamMusic GetISteamMusic(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamMusic(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamMusic) Marshal.PtrToStructure(result, typeof(ISteamMusic));
+}
+public override ISteamMusicRemote GetISteamMusicRemote(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamMusicRemote(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamMusicRemote) Marshal.PtrToStructure(result, typeof(ISteamMusicRemote));
+}
+public override ISteamHTMLSurface GetISteamHTMLSurface(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamHTMLSurface(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamHTMLSurface) Marshal.PtrToStructure(result, typeof(ISteamHTMLSurface));
+}
+public override ISteamInventory GetISteamInventory(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamInventory(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamInventory) Marshal.PtrToStructure(result, typeof(ISteamInventory));
+}
+public override ISteamVideo GetISteamVideo(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamVideo(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamVideo) Marshal.PtrToStructure(result, typeof(ISteamVideo));
+}
+}
+
+
+public class CSteamUser : ISteamUser
+{
+public CSteamUser(IntPtr SteamUser)
+{
+ m_pSteamUser = SteamUser;
+}
+IntPtr m_pSteamUser;
+
+public override IntPtr GetIntPtr() { return m_pSteamUser; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamUser == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override uint GetHSteamUser()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUser_GetHSteamUser(m_pSteamUser);
+ return result;
+}
+public override bool BLoggedOn()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUser_BLoggedOn(m_pSteamUser);
+ return result;
+}
+public override ulong GetSteamID()
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUser_GetSteamID(m_pSteamUser);
+ return result;
+}
+public override int InitiateGameConnection(IntPtr pAuthBlob,int cbMaxAuthBlob,ulong steamIDGameServer,uint unIPServer,char usPortServer,bool bSecure)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamUser_InitiateGameConnection(m_pSteamUser,pAuthBlob,cbMaxAuthBlob,steamIDGameServer,unIPServer,usPortServer,bSecure);
+ return result;
+}
+public override void TerminateGameConnection(uint unIPServer,char usPortServer)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUser_TerminateGameConnection(m_pSteamUser,unIPServer,usPortServer);
+}
+public override void TrackAppUsageEvent(ulong gameID,int eAppUsageEvent,string pchExtraInfo)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUser_TrackAppUsageEvent(m_pSteamUser,gameID,eAppUsageEvent,pchExtraInfo);
+}
+public override bool GetUserDataFolder(string pchBuffer,int cubBuffer)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUser_GetUserDataFolder(m_pSteamUser,pchBuffer,cubBuffer);
+ return result;
+}
+public override void StartVoiceRecording()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUser_StartVoiceRecording(m_pSteamUser);
+}
+public override void StopVoiceRecording()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUser_StopVoiceRecording(m_pSteamUser);
+}
+public override uint GetAvailableVoice(ref uint pcbCompressed,ref uint pcbUncompressed,uint nUncompressedVoiceDesiredSampleRate)
+{
+ CheckIfUsable();
+ pcbCompressed = 0;
+ pcbUncompressed = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamUser_GetAvailableVoice(m_pSteamUser,ref pcbCompressed,ref pcbUncompressed,nUncompressedVoiceDesiredSampleRate);
+ return result;
+}
+public override uint GetVoice(bool bWantCompressed,IntPtr pDestBuffer,uint cbDestBufferSize,ref uint nBytesWritten,bool bWantUncompressed,IntPtr pUncompressedDestBuffer,uint cbUncompressedDestBufferSize,ref uint nUncompressBytesWritten,uint nUncompressedVoiceDesiredSampleRate)
+{
+ CheckIfUsable();
+ nBytesWritten = 0;
+ nUncompressBytesWritten = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamUser_GetVoice(m_pSteamUser,bWantCompressed,pDestBuffer,cbDestBufferSize,ref nBytesWritten,bWantUncompressed,pUncompressedDestBuffer,cbUncompressedDestBufferSize,ref nUncompressBytesWritten,nUncompressedVoiceDesiredSampleRate);
+ return result;
+}
+public override uint DecompressVoice(IntPtr pCompressed,uint cbCompressed,IntPtr pDestBuffer,uint cbDestBufferSize,ref uint nBytesWritten,uint nDesiredSampleRate)
+{
+ CheckIfUsable();
+ nBytesWritten = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamUser_DecompressVoice(m_pSteamUser,pCompressed,cbCompressed,pDestBuffer,cbDestBufferSize,ref nBytesWritten,nDesiredSampleRate);
+ return result;
+}
+public override uint GetVoiceOptimalSampleRate()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(m_pSteamUser);
+ return result;
+}
+public override uint GetAuthSessionTicket(IntPtr pTicket,int cbMaxTicket,ref uint pcbTicket)
+{
+ CheckIfUsable();
+ pcbTicket = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamUser_GetAuthSessionTicket(m_pSteamUser,pTicket,cbMaxTicket,ref pcbTicket);
+ return result;
+}
+public override uint BeginAuthSession(IntPtr pAuthTicket,int cbAuthTicket,ulong steamID)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUser_BeginAuthSession(m_pSteamUser,pAuthTicket,cbAuthTicket,steamID);
+ return result;
+}
+public override void EndAuthSession(ulong steamID)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUser_EndAuthSession(m_pSteamUser,steamID);
+}
+public override void CancelAuthTicket(uint hAuthTicket)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUser_CancelAuthTicket(m_pSteamUser,hAuthTicket);
+}
+public override uint UserHasLicenseForApp(ulong steamID,uint appID)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUser_UserHasLicenseForApp(m_pSteamUser,steamID,appID);
+ return result;
+}
+public override bool BIsBehindNAT()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUser_BIsBehindNAT(m_pSteamUser);
+ return result;
+}
+public override void AdvertiseGame(ulong steamIDGameServer,uint unIPServer,char usPortServer)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUser_AdvertiseGame(m_pSteamUser,steamIDGameServer,unIPServer,usPortServer);
+}
+public override ulong RequestEncryptedAppTicket(IntPtr pDataToInclude,int cbDataToInclude)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUser_RequestEncryptedAppTicket(m_pSteamUser,pDataToInclude,cbDataToInclude);
+ return result;
+}
+public override bool GetEncryptedAppTicket(IntPtr pTicket,int cbMaxTicket,ref uint pcbTicket)
+{
+ CheckIfUsable();
+ pcbTicket = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUser_GetEncryptedAppTicket(m_pSteamUser,pTicket,cbMaxTicket,ref pcbTicket);
+ return result;
+}
+public override int GetGameBadgeLevel(int nSeries,bool bFoil)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamUser_GetGameBadgeLevel(m_pSteamUser,nSeries,bFoil);
+ return result;
+}
+public override int GetPlayerSteamLevel()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamUser_GetPlayerSteamLevel(m_pSteamUser);
+ return result;
+}
+public override ulong RequestStoreAuthURL(string pchRedirectURL)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUser_RequestStoreAuthURL(m_pSteamUser,pchRedirectURL);
+ return result;
+}
+public override bool BIsPhoneVerified()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUser_BIsPhoneVerified(m_pSteamUser);
+ return result;
+}
+public override bool BIsTwoFactorEnabled()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUser_BIsTwoFactorEnabled(m_pSteamUser);
+ return result;
+}
+public override bool BIsPhoneIdentifying()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUser_BIsPhoneIdentifying(m_pSteamUser);
+ return result;
+}
+public override bool BIsPhoneRequiringVerification()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUser_BIsPhoneRequiringVerification(m_pSteamUser);
+ return result;
+}
+}
+
+
+public class CSteamFriends : ISteamFriends
+{
+public CSteamFriends(IntPtr SteamFriends)
+{
+ m_pSteamFriends = SteamFriends;
+}
+IntPtr m_pSteamFriends;
+
+public override IntPtr GetIntPtr() { return m_pSteamFriends; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamFriends == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override string GetPersonaName()
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamFriends_GetPersonaName(m_pSteamFriends);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override ulong SetPersonaName(string pchPersonaName)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_SetPersonaName(m_pSteamFriends,pchPersonaName);
+ return result;
+}
+public override uint GetPersonaState()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamFriends_GetPersonaState(m_pSteamFriends);
+ return result;
+}
+public override int GetFriendCount(int iFriendFlags)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendCount(m_pSteamFriends,iFriendFlags);
+ return result;
+}
+public override ulong GetFriendByIndex(int iFriend,int iFriendFlags)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendByIndex(m_pSteamFriends,iFriend,iFriendFlags);
+ return result;
+}
+public override uint GetFriendRelationship(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendRelationship(m_pSteamFriends,steamIDFriend);
+ return result;
+}
+public override uint GetFriendPersonaState(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendPersonaState(m_pSteamFriends,steamIDFriend);
+ return result;
+}
+public override string GetFriendPersonaName(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendPersonaName(m_pSteamFriends,steamIDFriend);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override bool GetFriendGamePlayed(ulong steamIDFriend,out FriendGameInfo_t pFriendGameInfo)
+{
+ CheckIfUsable();
+ pFriendGameInfo = new FriendGameInfo_t();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendGamePlayed(m_pSteamFriends,steamIDFriend,ref pFriendGameInfo);
+ return result;
+}
+public override string GetFriendPersonaNameHistory(ulong steamIDFriend,int iPersonaName)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(m_pSteamFriends,steamIDFriend,iPersonaName);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override int GetFriendSteamLevel(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendSteamLevel(m_pSteamFriends,steamIDFriend);
+ return result;
+}
+public override string GetPlayerNickname(ulong steamIDPlayer)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamFriends_GetPlayerNickname(m_pSteamFriends,steamIDPlayer);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override int GetFriendsGroupCount()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendsGroupCount(m_pSteamFriends);
+ return result;
+}
+public override char GetFriendsGroupIDByIndex(int iFG)
+{
+ CheckIfUsable();
+ char result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(m_pSteamFriends,iFG);
+ return result;
+}
+public override string GetFriendsGroupName(char friendsGroupID)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendsGroupName(m_pSteamFriends,friendsGroupID);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override int GetFriendsGroupMembersCount(char friendsGroupID)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(m_pSteamFriends,friendsGroupID);
+ return result;
+}
+public override void GetFriendsGroupMembersList(char friendsGroupID,out CSteamID [] pOutSteamIDMembers)
+{
+ CheckIfUsable();
+ int nMembersCount = GetFriendsGroupMembersCount (friendsGroupID);
+ pOutSteamIDMembers = new CSteamID[nMembersCount];
+ NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendsGroupMembersList(m_pSteamFriends,friendsGroupID,pOutSteamIDMembers,nMembersCount);
+}
+public override bool HasFriend(ulong steamIDFriend,int iFriendFlags)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_HasFriend(m_pSteamFriends,steamIDFriend,iFriendFlags);
+ return result;
+}
+public override int GetClanCount()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanCount(m_pSteamFriends);
+ return result;
+}
+public override ulong GetClanByIndex(int iClan)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanByIndex(m_pSteamFriends,iClan);
+ return result;
+}
+public override string GetClanName(ulong steamIDClan)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanName(m_pSteamFriends,steamIDClan);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override string GetClanTag(ulong steamIDClan)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanTag(m_pSteamFriends,steamIDClan);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override bool GetClanActivityCounts(ulong steamIDClan,ref int pnOnline,ref int pnInGame,ref int pnChatting)
+{
+ CheckIfUsable();
+ pnOnline = 0;
+ pnInGame = 0;
+ pnChatting = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanActivityCounts(m_pSteamFriends,steamIDClan,ref pnOnline,ref pnInGame,ref pnChatting);
+ return result;
+}
+public override ulong DownloadClanActivityCounts(CSteamID [] psteamIDClans)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_DownloadClanActivityCounts(m_pSteamFriends,psteamIDClans,(int) psteamIDClans.Length);
+ return result;
+}
+public override int GetFriendCountFromSource(ulong steamIDSource)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendCountFromSource(m_pSteamFriends,steamIDSource);
+ return result;
+}
+public override ulong GetFriendFromSourceByIndex(ulong steamIDSource,int iFriend)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(m_pSteamFriends,steamIDSource,iFriend);
+ return result;
+}
+public override bool IsUserInSource(ulong steamIDUser,ulong steamIDSource)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_IsUserInSource(m_pSteamFriends,steamIDUser,steamIDSource);
+ return result;
+}
+public override void SetInGameVoiceSpeaking(ulong steamIDUser,bool bSpeaking)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(m_pSteamFriends,steamIDUser,bSpeaking);
+}
+public override void ActivateGameOverlay(string pchDialog)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamFriends_ActivateGameOverlay(m_pSteamFriends,pchDialog);
+}
+public override void ActivateGameOverlayToUser(string pchDialog,ulong steamID)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamFriends_ActivateGameOverlayToUser(m_pSteamFriends,pchDialog,steamID);
+}
+public override void ActivateGameOverlayToWebPage(string pchURL)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(m_pSteamFriends,pchURL);
+}
+public override void ActivateGameOverlayToStore(uint nAppID,char eFlag)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamFriends_ActivateGameOverlayToStore(m_pSteamFriends,nAppID,eFlag);
+}
+public override void SetPlayedWith(ulong steamIDUserPlayedWith)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamFriends_SetPlayedWith(m_pSteamFriends,steamIDUserPlayedWith);
+}
+public override void ActivateGameOverlayInviteDialog(ulong steamIDLobby)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(m_pSteamFriends,steamIDLobby);
+}
+public override int GetSmallFriendAvatar(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetSmallFriendAvatar(m_pSteamFriends,steamIDFriend);
+ return result;
+}
+public override int GetMediumFriendAvatar(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetMediumFriendAvatar(m_pSteamFriends,steamIDFriend);
+ return result;
+}
+public override int GetLargeFriendAvatar(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetLargeFriendAvatar(m_pSteamFriends,steamIDFriend);
+ return result;
+}
+public override bool RequestUserInformation(ulong steamIDUser,bool bRequireNameOnly)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_RequestUserInformation(m_pSteamFriends,steamIDUser,bRequireNameOnly);
+ return result;
+}
+public override ulong RequestClanOfficerList(ulong steamIDClan)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_RequestClanOfficerList(m_pSteamFriends,steamIDClan);
+ return result;
+}
+public override ulong GetClanOwner(ulong steamIDClan)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanOwner(m_pSteamFriends,steamIDClan);
+ return result;
+}
+public override int GetClanOfficerCount(ulong steamIDClan)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanOfficerCount(m_pSteamFriends,steamIDClan);
+ return result;
+}
+public override ulong GetClanOfficerByIndex(ulong steamIDClan,int iOfficer)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanOfficerByIndex(m_pSteamFriends,steamIDClan,iOfficer);
+ return result;
+}
+public override uint GetUserRestrictions()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamFriends_GetUserRestrictions(m_pSteamFriends);
+ return result;
+}
+public override bool SetRichPresence(string pchKey,string pchValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_SetRichPresence(m_pSteamFriends,pchKey,pchValue);
+ return result;
+}
+public override void ClearRichPresence()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamFriends_ClearRichPresence(m_pSteamFriends);
+}
+public override string GetFriendRichPresence(ulong steamIDFriend,string pchKey)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendRichPresence(m_pSteamFriends,steamIDFriend,pchKey);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override int GetFriendRichPresenceKeyCount(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(m_pSteamFriends,steamIDFriend);
+ return result;
+}
+public override string GetFriendRichPresenceKeyByIndex(ulong steamIDFriend,int iKey)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(m_pSteamFriends,steamIDFriend,iKey);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override void RequestFriendRichPresence(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamFriends_RequestFriendRichPresence(m_pSteamFriends,steamIDFriend);
+}
+public override bool InviteUserToGame(ulong steamIDFriend,string pchConnectString)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_InviteUserToGame(m_pSteamFriends,steamIDFriend,pchConnectString);
+ return result;
+}
+public override int GetCoplayFriendCount()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetCoplayFriendCount(m_pSteamFriends);
+ return result;
+}
+public override ulong GetCoplayFriend(int iCoplayFriend)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_GetCoplayFriend(m_pSteamFriends,iCoplayFriend);
+ return result;
+}
+public override int GetFriendCoplayTime(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendCoplayTime(m_pSteamFriends,steamIDFriend);
+ return result;
+}
+public override uint GetFriendCoplayGame(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendCoplayGame(m_pSteamFriends,steamIDFriend);
+ return result;
+}
+public override ulong JoinClanChatRoom(ulong steamIDClan)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_JoinClanChatRoom(m_pSteamFriends,steamIDClan);
+ return result;
+}
+public override bool LeaveClanChatRoom(ulong steamIDClan)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_LeaveClanChatRoom(m_pSteamFriends,steamIDClan);
+ return result;
+}
+public override int GetClanChatMemberCount(ulong steamIDClan)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanChatMemberCount(m_pSteamFriends,steamIDClan);
+ return result;
+}
+public override ulong GetChatMemberByIndex(ulong steamIDClan,int iUser)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_GetChatMemberByIndex(m_pSteamFriends,steamIDClan,iUser);
+ return result;
+}
+public override bool SendClanChatMessage(ulong steamIDClanChat,string pchText)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_SendClanChatMessage(m_pSteamFriends,steamIDClanChat,pchText);
+ return result;
+}
+public override int GetClanChatMessage(ulong steamIDClanChat,int iMessage,IntPtr prgchText,int cchTextMax,ref uint peChatEntryType,out CSteamID psteamidChatter)
+{
+ CheckIfUsable();
+ peChatEntryType = 0;
+ psteamidChatter = new CSteamID();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanChatMessage(m_pSteamFriends,steamIDClanChat,iMessage,prgchText,cchTextMax,ref peChatEntryType,ref psteamidChatter);
+ return result;
+}
+public override bool IsClanChatAdmin(ulong steamIDClanChat,ulong steamIDUser)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_IsClanChatAdmin(m_pSteamFriends,steamIDClanChat,steamIDUser);
+ return result;
+}
+public override bool IsClanChatWindowOpenInSteam(ulong steamIDClanChat)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(m_pSteamFriends,steamIDClanChat);
+ return result;
+}
+public override bool OpenClanChatWindowInSteam(ulong steamIDClanChat)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(m_pSteamFriends,steamIDClanChat);
+ return result;
+}
+public override bool CloseClanChatWindowInSteam(ulong steamIDClanChat)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(m_pSteamFriends,steamIDClanChat);
+ return result;
+}
+public override bool SetListenForFriendsMessages(bool bInterceptEnabled)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_SetListenForFriendsMessages(m_pSteamFriends,bInterceptEnabled);
+ return result;
+}
+public override bool ReplyToFriendMessage(ulong steamIDFriend,string pchMsgToSend)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_ReplyToFriendMessage(m_pSteamFriends,steamIDFriend,pchMsgToSend);
+ return result;
+}
+public override int GetFriendMessage(ulong steamIDFriend,int iMessageID,IntPtr pvData,int cubData,ref uint peChatEntryType)
+{
+ CheckIfUsable();
+ peChatEntryType = 0;
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendMessage(m_pSteamFriends,steamIDFriend,iMessageID,pvData,cubData,ref peChatEntryType);
+ return result;
+}
+public override ulong GetFollowerCount(ulong steamID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFollowerCount(m_pSteamFriends,steamID);
+ return result;
+}
+public override ulong IsFollowing(ulong steamID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_IsFollowing(m_pSteamFriends,steamID);
+ return result;
+}
+public override ulong EnumerateFollowingList(uint unStartIndex)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_EnumerateFollowingList(m_pSteamFriends,unStartIndex);
+ return result;
+}
+}
+
+
+public class CSteamUtils : ISteamUtils
+{
+public CSteamUtils(IntPtr SteamUtils)
+{
+ m_pSteamUtils = SteamUtils;
+}
+IntPtr m_pSteamUtils;
+
+public override IntPtr GetIntPtr() { return m_pSteamUtils; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamUtils == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override uint GetSecondsSinceAppActive()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUtils_GetSecondsSinceAppActive(m_pSteamUtils);
+ return result;
+}
+public override uint GetSecondsSinceComputerActive()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(m_pSteamUtils);
+ return result;
+}
+public override int GetConnectedUniverse()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamUtils_GetConnectedUniverse(m_pSteamUtils);
+ return result;
+}
+public override uint GetServerRealTime()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUtils_GetServerRealTime(m_pSteamUtils);
+ return result;
+}
+public override string GetIPCountry()
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamUtils_GetIPCountry(m_pSteamUtils);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override bool GetImageSize(int iImage,ref uint pnWidth,ref uint pnHeight)
+{
+ CheckIfUsable();
+ pnWidth = 0;
+ pnHeight = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_GetImageSize(m_pSteamUtils,iImage,ref pnWidth,ref pnHeight);
+ return result;
+}
+public override bool GetImageRGBA(int iImage,IntPtr pubDest,int nDestBufferSize)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_GetImageRGBA(m_pSteamUtils,iImage,pubDest,nDestBufferSize);
+ return result;
+}
+public override bool GetCSERIPPort(ref uint unIP,ref char usPort)
+{
+ CheckIfUsable();
+ unIP = 0;
+ usPort = (char) 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_GetCSERIPPort(m_pSteamUtils,ref unIP,ref usPort);
+ return result;
+}
+public override byte GetCurrentBatteryPower()
+{
+ CheckIfUsable();
+ byte result = NativeEntrypoints.SteamAPI_ISteamUtils_GetCurrentBatteryPower(m_pSteamUtils);
+ return result;
+}
+public override uint GetAppID()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUtils_GetAppID(m_pSteamUtils);
+ return result;
+}
+public override void SetOverlayNotificationPosition(uint eNotificationPosition)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUtils_SetOverlayNotificationPosition(m_pSteamUtils,eNotificationPosition);
+}
+public override bool IsAPICallCompleted(ulong hSteamAPICall,ref bool pbFailed)
+{
+ CheckIfUsable();
+ pbFailed = false;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_IsAPICallCompleted(m_pSteamUtils,hSteamAPICall,ref pbFailed);
+ return result;
+}
+public override int GetAPICallFailureReason(ulong hSteamAPICall)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamUtils_GetAPICallFailureReason(m_pSteamUtils,hSteamAPICall);
+ return result;
+}
+public override bool GetAPICallResult(ulong hSteamAPICall,IntPtr pCallback,int cubCallback,int iCallbackExpected,ref bool pbFailed)
+{
+ CheckIfUsable();
+ pbFailed = false;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_GetAPICallResult(m_pSteamUtils,hSteamAPICall,pCallback,cubCallback,iCallbackExpected,ref pbFailed);
+ return result;
+}
+public override uint GetIPCCallCount()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUtils_GetIPCCallCount(m_pSteamUtils);
+ return result;
+}
+public override void SetWarningMessageHook(IntPtr pFunction)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUtils_SetWarningMessageHook(m_pSteamUtils,pFunction);
+}
+public override bool IsOverlayEnabled()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_IsOverlayEnabled(m_pSteamUtils);
+ return result;
+}
+public override bool BOverlayNeedsPresent()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_BOverlayNeedsPresent(m_pSteamUtils);
+ return result;
+}
+public override ulong CheckFileSignature(string szFileName)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUtils_CheckFileSignature(m_pSteamUtils,szFileName);
+ return result;
+}
+public override bool ShowGamepadTextInput(int eInputMode,int eLineInputMode,string pchDescription,uint unCharMax,string pchExistingText)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_ShowGamepadTextInput(m_pSteamUtils,eInputMode,eLineInputMode,pchDescription,unCharMax,pchExistingText);
+ return result;
+}
+public override uint GetEnteredGamepadTextLength()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(m_pSteamUtils);
+ return result;
+}
+public override bool GetEnteredGamepadTextInput(string pchText,uint cchText)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(m_pSteamUtils,pchText,cchText);
+ return result;
+}
+public override string GetSteamUILanguage()
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamUtils_GetSteamUILanguage(m_pSteamUtils);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override bool IsSteamRunningInVR()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_IsSteamRunningInVR(m_pSteamUtils);
+ return result;
+}
+public override void SetOverlayNotificationInset(int nHorizontalInset,int nVerticalInset)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUtils_SetOverlayNotificationInset(m_pSteamUtils,nHorizontalInset,nVerticalInset);
+}
+public override bool IsSteamInBigPictureMode()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_IsSteamInBigPictureMode(m_pSteamUtils);
+ return result;
+}
+public override void StartVRDashboard()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUtils_StartVRDashboard(m_pSteamUtils);
+}
+}
+
+
+public class CSteamMatchmaking : ISteamMatchmaking
+{
+public CSteamMatchmaking(IntPtr SteamMatchmaking)
+{
+ m_pSteamMatchmaking = SteamMatchmaking;
+}
+IntPtr m_pSteamMatchmaking;
+
+public override IntPtr GetIntPtr() { return m_pSteamMatchmaking; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamMatchmaking == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override int GetFavoriteGameCount()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(m_pSteamMatchmaking);
+ return result;
+}
+public override bool GetFavoriteGame(int iGame,ref uint pnAppID,ref uint pnIP,ref char pnConnPort,ref char pnQueryPort,ref uint punFlags,ref uint pRTime32LastPlayedOnServer)
+{
+ CheckIfUsable();
+ pnAppID = 0;
+ pnIP = 0;
+ pnConnPort = (char) 0;
+ pnQueryPort = (char) 0;
+ punFlags = 0;
+ pRTime32LastPlayedOnServer = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetFavoriteGame(m_pSteamMatchmaking,iGame,ref pnAppID,ref pnIP,ref pnConnPort,ref pnQueryPort,ref punFlags,ref pRTime32LastPlayedOnServer);
+ return result;
+}
+public override int AddFavoriteGame(uint nAppID,uint nIP,char nConnPort,char nQueryPort,uint unFlags,uint rTime32LastPlayedOnServer)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_AddFavoriteGame(m_pSteamMatchmaking,nAppID,nIP,nConnPort,nQueryPort,unFlags,rTime32LastPlayedOnServer);
+ return result;
+}
+public override bool RemoveFavoriteGame(uint nAppID,uint nIP,char nConnPort,char nQueryPort,uint unFlags)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(m_pSteamMatchmaking,nAppID,nIP,nConnPort,nQueryPort,unFlags);
+ return result;
+}
+public override ulong RequestLobbyList()
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_RequestLobbyList(m_pSteamMatchmaking);
+ return result;
+}
+public override void AddRequestLobbyListStringFilter(string pchKeyToMatch,string pchValueToMatch,uint eComparisonType)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(m_pSteamMatchmaking,pchKeyToMatch,pchValueToMatch,eComparisonType);
+}
+public override void AddRequestLobbyListNumericalFilter(string pchKeyToMatch,int nValueToMatch,uint eComparisonType)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(m_pSteamMatchmaking,pchKeyToMatch,nValueToMatch,eComparisonType);
+}
+public override void AddRequestLobbyListNearValueFilter(string pchKeyToMatch,int nValueToBeCloseTo)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(m_pSteamMatchmaking,pchKeyToMatch,nValueToBeCloseTo);
+}
+public override void AddRequestLobbyListFilterSlotsAvailable(int nSlotsAvailable)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(m_pSteamMatchmaking,nSlotsAvailable);
+}
+public override void AddRequestLobbyListDistanceFilter(uint eLobbyDistanceFilter)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(m_pSteamMatchmaking,eLobbyDistanceFilter);
+}
+public override void AddRequestLobbyListResultCountFilter(int cMaxResults)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(m_pSteamMatchmaking,cMaxResults);
+}
+public override void AddRequestLobbyListCompatibleMembersFilter(ulong steamIDLobby)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(m_pSteamMatchmaking,steamIDLobby);
+}
+public override ulong GetLobbyByIndex(int iLobby)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyByIndex(m_pSteamMatchmaking,iLobby);
+ return result;
+}
+public override ulong CreateLobby(uint eLobbyType,int cMaxMembers)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_CreateLobby(m_pSteamMatchmaking,eLobbyType,cMaxMembers);
+ return result;
+}
+public override ulong JoinLobby(ulong steamIDLobby)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_JoinLobby(m_pSteamMatchmaking,steamIDLobby);
+ return result;
+}
+public override void LeaveLobby(ulong steamIDLobby)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_LeaveLobby(m_pSteamMatchmaking,steamIDLobby);
+}
+public override bool InviteUserToLobby(ulong steamIDLobby,ulong steamIDInvitee)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_InviteUserToLobby(m_pSteamMatchmaking,steamIDLobby,steamIDInvitee);
+ return result;
+}
+public override int GetNumLobbyMembers(ulong steamIDLobby)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(m_pSteamMatchmaking,steamIDLobby);
+ return result;
+}
+public override ulong GetLobbyMemberByIndex(ulong steamIDLobby,int iMember)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(m_pSteamMatchmaking,steamIDLobby,iMember);
+ return result;
+}
+public override string GetLobbyData(ulong steamIDLobby,string pchKey)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyData(m_pSteamMatchmaking,steamIDLobby,pchKey);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override bool SetLobbyData(ulong steamIDLobby,string pchKey,string pchValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_SetLobbyData(m_pSteamMatchmaking,steamIDLobby,pchKey,pchValue);
+ return result;
+}
+public override int GetLobbyDataCount(ulong steamIDLobby)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyDataCount(m_pSteamMatchmaking,steamIDLobby);
+ return result;
+}
+public override bool GetLobbyDataByIndex(ulong steamIDLobby,int iLobbyData,string pchKey,int cchKeyBufferSize,string pchValue,int cchValueBufferSize)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(m_pSteamMatchmaking,steamIDLobby,iLobbyData,pchKey,cchKeyBufferSize,pchValue,cchValueBufferSize);
+ return result;
+}
+public override bool DeleteLobbyData(ulong steamIDLobby,string pchKey)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_DeleteLobbyData(m_pSteamMatchmaking,steamIDLobby,pchKey);
+ return result;
+}
+public override string GetLobbyMemberData(ulong steamIDLobby,ulong steamIDUser,string pchKey)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyMemberData(m_pSteamMatchmaking,steamIDLobby,steamIDUser,pchKey);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override void SetLobbyMemberData(ulong steamIDLobby,string pchKey,string pchValue)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_SetLobbyMemberData(m_pSteamMatchmaking,steamIDLobby,pchKey,pchValue);
+}
+public override bool SendLobbyChatMsg(ulong steamIDLobby,IntPtr pvMsgBody,int cubMsgBody)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(m_pSteamMatchmaking,steamIDLobby,pvMsgBody,cubMsgBody);
+ return result;
+}
+public override int GetLobbyChatEntry(ulong steamIDLobby,int iChatID,out CSteamID pSteamIDUser,IntPtr pvData,int cubData,ref uint peChatEntryType)
+{
+ CheckIfUsable();
+ pSteamIDUser = new CSteamID();
+ peChatEntryType = 0;
+ int result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(m_pSteamMatchmaking,steamIDLobby,iChatID,ref pSteamIDUser,pvData,cubData,ref peChatEntryType);
+ return result;
+}
+public override bool RequestLobbyData(ulong steamIDLobby)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_RequestLobbyData(m_pSteamMatchmaking,steamIDLobby);
+ return result;
+}
+public override void SetLobbyGameServer(ulong steamIDLobby,uint unGameServerIP,char unGameServerPort,ulong steamIDGameServer)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_SetLobbyGameServer(m_pSteamMatchmaking,steamIDLobby,unGameServerIP,unGameServerPort,steamIDGameServer);
+}
+public override bool GetLobbyGameServer(ulong steamIDLobby,ref uint punGameServerIP,ref char punGameServerPort,out CSteamID psteamIDGameServer)
+{
+ CheckIfUsable();
+ punGameServerIP = 0;
+ punGameServerPort = (char) 0;
+ psteamIDGameServer = new CSteamID();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyGameServer(m_pSteamMatchmaking,steamIDLobby,ref punGameServerIP,ref punGameServerPort,ref psteamIDGameServer);
+ return result;
+}
+public override bool SetLobbyMemberLimit(ulong steamIDLobby,int cMaxMembers)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(m_pSteamMatchmaking,steamIDLobby,cMaxMembers);
+ return result;
+}
+public override int GetLobbyMemberLimit(ulong steamIDLobby)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(m_pSteamMatchmaking,steamIDLobby);
+ return result;
+}
+public override bool SetLobbyType(ulong steamIDLobby,uint eLobbyType)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_SetLobbyType(m_pSteamMatchmaking,steamIDLobby,eLobbyType);
+ return result;
+}
+public override bool SetLobbyJoinable(ulong steamIDLobby,bool bLobbyJoinable)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_SetLobbyJoinable(m_pSteamMatchmaking,steamIDLobby,bLobbyJoinable);
+ return result;
+}
+public override ulong GetLobbyOwner(ulong steamIDLobby)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyOwner(m_pSteamMatchmaking,steamIDLobby);
+ return result;
+}
+public override bool SetLobbyOwner(ulong steamIDLobby,ulong steamIDNewOwner)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_SetLobbyOwner(m_pSteamMatchmaking,steamIDLobby,steamIDNewOwner);
+ return result;
+}
+public override bool SetLinkedLobby(ulong steamIDLobby,ulong steamIDLobbyDependent)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_SetLinkedLobby(m_pSteamMatchmaking,steamIDLobby,steamIDLobbyDependent);
+ return result;
+}
+}
+
+
+public class CSteamMatchmakingServerListResponse : ISteamMatchmakingServerListResponse
+{
+public CSteamMatchmakingServerListResponse(IntPtr SteamMatchmakingServerListResponse)
+{
+ m_pSteamMatchmakingServerListResponse = SteamMatchmakingServerListResponse;
+}
+IntPtr m_pSteamMatchmakingServerListResponse;
+
+public override IntPtr GetIntPtr() { return m_pSteamMatchmakingServerListResponse; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamMatchmakingServerListResponse == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override void ServerResponded(uint hRequest,int iServer)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(m_pSteamMatchmakingServerListResponse,hRequest,iServer);
+}
+public override void ServerFailedToRespond(uint hRequest,int iServer)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(m_pSteamMatchmakingServerListResponse,hRequest,iServer);
+}
+public override void RefreshComplete(uint hRequest,uint response)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(m_pSteamMatchmakingServerListResponse,hRequest,response);
+}
+}
+
+
+public class CSteamMatchmakingPingResponse : ISteamMatchmakingPingResponse
+{
+public CSteamMatchmakingPingResponse(IntPtr SteamMatchmakingPingResponse)
+{
+ m_pSteamMatchmakingPingResponse = SteamMatchmakingPingResponse;
+}
+IntPtr m_pSteamMatchmakingPingResponse;
+
+public override IntPtr GetIntPtr() { return m_pSteamMatchmakingPingResponse; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamMatchmakingPingResponse == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override void ServerResponded(IntPtr server)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(m_pSteamMatchmakingPingResponse,server);
+}
+public override void ServerFailedToRespond()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(m_pSteamMatchmakingPingResponse);
+}
+}
+
+
+public class CSteamMatchmakingPlayersResponse : ISteamMatchmakingPlayersResponse
+{
+public CSteamMatchmakingPlayersResponse(IntPtr SteamMatchmakingPlayersResponse)
+{
+ m_pSteamMatchmakingPlayersResponse = SteamMatchmakingPlayersResponse;
+}
+IntPtr m_pSteamMatchmakingPlayersResponse;
+
+public override IntPtr GetIntPtr() { return m_pSteamMatchmakingPlayersResponse; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamMatchmakingPlayersResponse == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override void AddPlayerToList(string pchName,int nScore,float flTimePlayed)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(m_pSteamMatchmakingPlayersResponse,pchName,nScore,flTimePlayed);
+}
+public override void PlayersFailedToRespond()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(m_pSteamMatchmakingPlayersResponse);
+}
+public override void PlayersRefreshComplete()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(m_pSteamMatchmakingPlayersResponse);
+}
+}
+
+
+public class CSteamMatchmakingRulesResponse : ISteamMatchmakingRulesResponse
+{
+public CSteamMatchmakingRulesResponse(IntPtr SteamMatchmakingRulesResponse)
+{
+ m_pSteamMatchmakingRulesResponse = SteamMatchmakingRulesResponse;
+}
+IntPtr m_pSteamMatchmakingRulesResponse;
+
+public override IntPtr GetIntPtr() { return m_pSteamMatchmakingRulesResponse; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamMatchmakingRulesResponse == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override void RulesResponded(string pchRule,string pchValue)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(m_pSteamMatchmakingRulesResponse,pchRule,pchValue);
+}
+public override void RulesFailedToRespond()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(m_pSteamMatchmakingRulesResponse);
+}
+public override void RulesRefreshComplete()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(m_pSteamMatchmakingRulesResponse);
+}
+}
+
+
+public class CSteamMatchmakingServers : ISteamMatchmakingServers
+{
+public CSteamMatchmakingServers(IntPtr SteamMatchmakingServers)
+{
+ m_pSteamMatchmakingServers = SteamMatchmakingServers;
+}
+IntPtr m_pSteamMatchmakingServers;
+
+public override IntPtr GetIntPtr() { return m_pSteamMatchmakingServers; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamMatchmakingServers == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override uint RequestInternetServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(m_pSteamMatchmakingServers,iApp,ppchFilters,(uint) ppchFilters.Length,pRequestServersResponse.GetIntPtr());
+ return result;
+}
+public override uint RequestLANServerList(uint iApp,ISteamMatchmakingServerListResponse pRequestServersResponse)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_RequestLANServerList(m_pSteamMatchmakingServers,iApp,pRequestServersResponse.GetIntPtr());
+ return result;
+}
+public override uint RequestFriendsServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(m_pSteamMatchmakingServers,iApp,ppchFilters,(uint) ppchFilters.Length,pRequestServersResponse.GetIntPtr());
+ return result;
+}
+public override uint RequestFavoritesServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(m_pSteamMatchmakingServers,iApp,ppchFilters,(uint) ppchFilters.Length,pRequestServersResponse.GetIntPtr());
+ return result;
+}
+public override uint RequestHistoryServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(m_pSteamMatchmakingServers,iApp,ppchFilters,(uint) ppchFilters.Length,pRequestServersResponse.GetIntPtr());
+ return result;
+}
+public override uint RequestSpectatorServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(m_pSteamMatchmakingServers,iApp,ppchFilters,(uint) ppchFilters.Length,pRequestServersResponse.GetIntPtr());
+ return result;
+}
+public override void ReleaseRequest(uint hServerListRequest)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_ReleaseRequest(m_pSteamMatchmakingServers,hServerListRequest);
+}
+public override gameserveritem_t GetServerDetails(uint hRequest,int iServer)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_GetServerDetails(m_pSteamMatchmakingServers,hRequest,iServer);
+ return (gameserveritem_t) Marshal.PtrToStructure(result, typeof(gameserveritem_t));
+}
+public override void CancelQuery(uint hRequest)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_CancelQuery(m_pSteamMatchmakingServers,hRequest);
+}
+public override void RefreshQuery(uint hRequest)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_RefreshQuery(m_pSteamMatchmakingServers,hRequest);
+}
+public override bool IsRefreshing(uint hRequest)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_IsRefreshing(m_pSteamMatchmakingServers,hRequest);
+ return result;
+}
+public override int GetServerCount(uint hRequest)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_GetServerCount(m_pSteamMatchmakingServers,hRequest);
+ return result;
+}
+public override void RefreshServer(uint hRequest,int iServer)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_RefreshServer(m_pSteamMatchmakingServers,hRequest,iServer);
+}
+public override uint PingServer(uint unIP,char usPort,ISteamMatchmakingPingResponse pRequestServersResponse)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_PingServer(m_pSteamMatchmakingServers,unIP,usPort,pRequestServersResponse.GetIntPtr());
+ return result;
+}
+public override uint PlayerDetails(uint unIP,char usPort,ISteamMatchmakingPlayersResponse pRequestServersResponse)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_PlayerDetails(m_pSteamMatchmakingServers,unIP,usPort,pRequestServersResponse.GetIntPtr());
+ return result;
+}
+public override uint ServerRules(uint unIP,char usPort,ISteamMatchmakingRulesResponse pRequestServersResponse)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_ServerRules(m_pSteamMatchmakingServers,unIP,usPort,pRequestServersResponse.GetIntPtr());
+ return result;
+}
+public override void CancelServerQuery(uint hServerQuery)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_CancelServerQuery(m_pSteamMatchmakingServers,hServerQuery);
+}
+}
+
+
+public class CSteamRemoteStorage : ISteamRemoteStorage
+{
+public CSteamRemoteStorage(IntPtr SteamRemoteStorage)
+{
+ m_pSteamRemoteStorage = SteamRemoteStorage;
+}
+IntPtr m_pSteamRemoteStorage;
+
+public override IntPtr GetIntPtr() { return m_pSteamRemoteStorage; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamRemoteStorage == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override bool FileWrite(string pchFile,IntPtr pvData,int cubData)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileWrite(m_pSteamRemoteStorage,pchFile,pvData,cubData);
+ return result;
+}
+public override int FileRead(string pchFile,IntPtr pvData,int cubDataToRead)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileRead(m_pSteamRemoteStorage,pchFile,pvData,cubDataToRead);
+ return result;
+}
+public override ulong FileWriteAsync(string pchFile,IntPtr pvData,uint cubData)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileWriteAsync(m_pSteamRemoteStorage,pchFile,pvData,cubData);
+ return result;
+}
+public override ulong FileReadAsync(string pchFile,uint nOffset,uint cubToRead)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileReadAsync(m_pSteamRemoteStorage,pchFile,nOffset,cubToRead);
+ return result;
+}
+public override bool FileReadAsyncComplete(ulong hReadCall,IntPtr pvBuffer,uint cubToRead)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileReadAsyncComplete(m_pSteamRemoteStorage,hReadCall,pvBuffer,cubToRead);
+ return result;
+}
+public override bool FileForget(string pchFile)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileForget(m_pSteamRemoteStorage,pchFile);
+ return result;
+}
+public override bool FileDelete(string pchFile)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileDelete(m_pSteamRemoteStorage,pchFile);
+ return result;
+}
+public override ulong FileShare(string pchFile)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileShare(m_pSteamRemoteStorage,pchFile);
+ return result;
+}
+public override bool SetSyncPlatforms(string pchFile,uint eRemoteStoragePlatform)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(m_pSteamRemoteStorage,pchFile,eRemoteStoragePlatform);
+ return result;
+}
+public override ulong FileWriteStreamOpen(string pchFile)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(m_pSteamRemoteStorage,pchFile);
+ return result;
+}
+public override bool FileWriteStreamWriteChunk(ulong writeHandle,IntPtr pvData,int cubData)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(m_pSteamRemoteStorage,writeHandle,pvData,cubData);
+ return result;
+}
+public override bool FileWriteStreamClose(ulong writeHandle)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(m_pSteamRemoteStorage,writeHandle);
+ return result;
+}
+public override bool FileWriteStreamCancel(ulong writeHandle)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(m_pSteamRemoteStorage,writeHandle);
+ return result;
+}
+public override bool FileExists(string pchFile)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileExists(m_pSteamRemoteStorage,pchFile);
+ return result;
+}
+public override bool FilePersisted(string pchFile)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FilePersisted(m_pSteamRemoteStorage,pchFile);
+ return result;
+}
+public override int GetFileSize(string pchFile)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetFileSize(m_pSteamRemoteStorage,pchFile);
+ return result;
+}
+public override long GetFileTimestamp(string pchFile)
+{
+ CheckIfUsable();
+ long result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetFileTimestamp(m_pSteamRemoteStorage,pchFile);
+ return result;
+}
+public override uint GetSyncPlatforms(string pchFile)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(m_pSteamRemoteStorage,pchFile);
+ return result;
+}
+public override int GetFileCount()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetFileCount(m_pSteamRemoteStorage);
+ return result;
+}
+public override string GetFileNameAndSize(int iFile,ref int pnFileSizeInBytes)
+{
+ CheckIfUsable();
+ pnFileSizeInBytes = 0;
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(m_pSteamRemoteStorage,iFile,ref pnFileSizeInBytes);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override bool GetQuota(ref ulong pnTotalBytes,ref ulong puAvailableBytes)
+{
+ CheckIfUsable();
+ pnTotalBytes = 0;
+ puAvailableBytes = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetQuota(m_pSteamRemoteStorage,ref pnTotalBytes,ref puAvailableBytes);
+ return result;
+}
+public override bool IsCloudEnabledForAccount()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(m_pSteamRemoteStorage);
+ return result;
+}
+public override bool IsCloudEnabledForApp()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(m_pSteamRemoteStorage);
+ return result;
+}
+public override void SetCloudEnabledForApp(bool bEnabled)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(m_pSteamRemoteStorage,bEnabled);
+}
+public override ulong UGCDownload(ulong hContent,uint unPriority)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UGCDownload(m_pSteamRemoteStorage,hContent,unPriority);
+ return result;
+}
+public override bool GetUGCDownloadProgress(ulong hContent,ref int pnBytesDownloaded,ref int pnBytesExpected)
+{
+ CheckIfUsable();
+ pnBytesDownloaded = 0;
+ pnBytesExpected = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(m_pSteamRemoteStorage,hContent,ref pnBytesDownloaded,ref pnBytesExpected);
+ return result;
+}
+public override bool GetUGCDetails(ulong hContent,ref uint pnAppID,System.Text.StringBuilder ppchName,ref int pnFileSizeInBytes,out CSteamID pSteamIDOwner)
+{
+ CheckIfUsable();
+ pnAppID = 0;
+ pnFileSizeInBytes = 0;
+ pSteamIDOwner = new CSteamID();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetUGCDetails(m_pSteamRemoteStorage,hContent,ref pnAppID,ppchName,ref pnFileSizeInBytes,ref pSteamIDOwner);
+ return result;
+}
+public override int UGCRead(ulong hContent,IntPtr pvData,int cubDataToRead,uint cOffset,uint eAction)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UGCRead(m_pSteamRemoteStorage,hContent,pvData,cubDataToRead,cOffset,eAction);
+ return result;
+}
+public override int GetCachedUGCCount()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(m_pSteamRemoteStorage);
+ return result;
+}
+public override ulong GetCachedUGCHandle(int iCachedContent)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(m_pSteamRemoteStorage,iCachedContent);
+ return result;
+}
+public override ulong PublishWorkshopFile(string pchFile,string pchPreviewFile,uint nConsumerAppId,string pchTitle,string pchDescription,uint eVisibility,ref SteamParamStringArray_t pTags,uint eWorkshopFileType)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(m_pSteamRemoteStorage,pchFile,pchPreviewFile,nConsumerAppId,pchTitle,pchDescription,eVisibility,ref pTags,eWorkshopFileType);
+ return result;
+}
+public override ulong CreatePublishedFileUpdateRequest(ulong unPublishedFileId)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(m_pSteamRemoteStorage,unPublishedFileId);
+ return result;
+}
+public override bool UpdatePublishedFileFile(ulong updateHandle,string pchFile)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(m_pSteamRemoteStorage,updateHandle,pchFile);
+ return result;
+}
+public override bool UpdatePublishedFilePreviewFile(ulong updateHandle,string pchPreviewFile)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(m_pSteamRemoteStorage,updateHandle,pchPreviewFile);
+ return result;
+}
+public override bool UpdatePublishedFileTitle(ulong updateHandle,string pchTitle)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(m_pSteamRemoteStorage,updateHandle,pchTitle);
+ return result;
+}
+public override bool UpdatePublishedFileDescription(ulong updateHandle,string pchDescription)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(m_pSteamRemoteStorage,updateHandle,pchDescription);
+ return result;
+}
+public override bool UpdatePublishedFileVisibility(ulong updateHandle,uint eVisibility)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(m_pSteamRemoteStorage,updateHandle,eVisibility);
+ return result;
+}
+public override bool UpdatePublishedFileTags(ulong updateHandle,ref SteamParamStringArray_t pTags)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(m_pSteamRemoteStorage,updateHandle,ref pTags);
+ return result;
+}
+public override ulong CommitPublishedFileUpdate(ulong updateHandle)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(m_pSteamRemoteStorage,updateHandle);
+ return result;
+}
+public override ulong GetPublishedFileDetails(ulong unPublishedFileId,uint unMaxSecondsOld)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(m_pSteamRemoteStorage,unPublishedFileId,unMaxSecondsOld);
+ return result;
+}
+public override ulong DeletePublishedFile(ulong unPublishedFileId)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_DeletePublishedFile(m_pSteamRemoteStorage,unPublishedFileId);
+ return result;
+}
+public override ulong EnumerateUserPublishedFiles(uint unStartIndex)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(m_pSteamRemoteStorage,unStartIndex);
+ return result;
+}
+public override ulong SubscribePublishedFile(ulong unPublishedFileId)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(m_pSteamRemoteStorage,unPublishedFileId);
+ return result;
+}
+public override ulong EnumerateUserSubscribedFiles(uint unStartIndex)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(m_pSteamRemoteStorage,unStartIndex);
+ return result;
+}
+public override ulong UnsubscribePublishedFile(ulong unPublishedFileId)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(m_pSteamRemoteStorage,unPublishedFileId);
+ return result;
+}
+public override bool UpdatePublishedFileSetChangeDescription(ulong updateHandle,string pchChangeDescription)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(m_pSteamRemoteStorage,updateHandle,pchChangeDescription);
+ return result;
+}
+public override ulong GetPublishedItemVoteDetails(ulong unPublishedFileId)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(m_pSteamRemoteStorage,unPublishedFileId);
+ return result;
+}
+public override ulong UpdateUserPublishedItemVote(ulong unPublishedFileId,bool bVoteUp)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(m_pSteamRemoteStorage,unPublishedFileId,bVoteUp);
+ return result;
+}
+public override ulong GetUserPublishedItemVoteDetails(ulong unPublishedFileId)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(m_pSteamRemoteStorage,unPublishedFileId);
+ return result;
+}
+public override ulong EnumerateUserSharedWorkshopFiles(ulong steamId,uint unStartIndex,ref SteamParamStringArray_t pRequiredTags,ref SteamParamStringArray_t pExcludedTags)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(m_pSteamRemoteStorage,steamId,unStartIndex,ref pRequiredTags,ref pExcludedTags);
+ return result;
+}
+public override ulong PublishVideo(uint eVideoProvider,string pchVideoAccount,string pchVideoIdentifier,string pchPreviewFile,uint nConsumerAppId,string pchTitle,string pchDescription,uint eVisibility,ref SteamParamStringArray_t pTags)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_PublishVideo(m_pSteamRemoteStorage,eVideoProvider,pchVideoAccount,pchVideoIdentifier,pchPreviewFile,nConsumerAppId,pchTitle,pchDescription,eVisibility,ref pTags);
+ return result;
+}
+public override ulong SetUserPublishedFileAction(ulong unPublishedFileId,uint eAction)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(m_pSteamRemoteStorage,unPublishedFileId,eAction);
+ return result;
+}
+public override ulong EnumeratePublishedFilesByUserAction(uint eAction,uint unStartIndex)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(m_pSteamRemoteStorage,eAction,unStartIndex);
+ return result;
+}
+public override ulong EnumeratePublishedWorkshopFiles(uint eEnumerationType,uint unStartIndex,uint unCount,uint unDays,ref SteamParamStringArray_t pTags,ref SteamParamStringArray_t pUserTags)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(m_pSteamRemoteStorage,eEnumerationType,unStartIndex,unCount,unDays,ref pTags,ref pUserTags);
+ return result;
+}
+public override ulong UGCDownloadToLocation(ulong hContent,string pchLocation,uint unPriority)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(m_pSteamRemoteStorage,hContent,pchLocation,unPriority);
+ return result;
+}
+}
+
+
+public class CSteamUserStats : ISteamUserStats
+{
+public CSteamUserStats(IntPtr SteamUserStats)
+{
+ m_pSteamUserStats = SteamUserStats;
+}
+IntPtr m_pSteamUserStats;
+
+public override IntPtr GetIntPtr() { return m_pSteamUserStats; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamUserStats == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override bool RequestCurrentStats()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_RequestCurrentStats(m_pSteamUserStats);
+ return result;
+}
+public override bool GetStat(string pchName,ref int pData)
+{
+ CheckIfUsable();
+ pData = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetStat(m_pSteamUserStats,pchName,ref pData);
+ return result;
+}
+public override bool GetStat0(string pchName,ref float pData)
+{
+ CheckIfUsable();
+ pData = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetStat0(m_pSteamUserStats,pchName,ref pData);
+ return result;
+}
+public override bool SetStat(string pchName,int nData)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_SetStat(m_pSteamUserStats,pchName,nData);
+ return result;
+}
+public override bool SetStat0(string pchName,float fData)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_SetStat0(m_pSteamUserStats,pchName,fData);
+ return result;
+}
+public override bool UpdateAvgRateStat(string pchName,float flCountThisSession,double dSessionLength)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_UpdateAvgRateStat(m_pSteamUserStats,pchName,flCountThisSession,dSessionLength);
+ return result;
+}
+public override bool GetAchievement(string pchName,ref bool pbAchieved)
+{
+ CheckIfUsable();
+ pbAchieved = false;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetAchievement(m_pSteamUserStats,pchName,ref pbAchieved);
+ return result;
+}
+public override bool SetAchievement(string pchName)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_SetAchievement(m_pSteamUserStats,pchName);
+ return result;
+}
+public override bool ClearAchievement(string pchName)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_ClearAchievement(m_pSteamUserStats,pchName);
+ return result;
+}
+public override bool GetAchievementAndUnlockTime(string pchName,ref bool pbAchieved,ref uint punUnlockTime)
+{
+ CheckIfUsable();
+ pbAchieved = false;
+ punUnlockTime = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(m_pSteamUserStats,pchName,ref pbAchieved,ref punUnlockTime);
+ return result;
+}
+public override bool StoreStats()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_StoreStats(m_pSteamUserStats);
+ return result;
+}
+public override int GetAchievementIcon(string pchName)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetAchievementIcon(m_pSteamUserStats,pchName);
+ return result;
+}
+public override string GetAchievementDisplayAttribute(string pchName,string pchKey)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(m_pSteamUserStats,pchName,pchKey);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override bool IndicateAchievementProgress(string pchName,uint nCurProgress,uint nMaxProgress)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_IndicateAchievementProgress(m_pSteamUserStats,pchName,nCurProgress,nMaxProgress);
+ return result;
+}
+public override uint GetNumAchievements()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetNumAchievements(m_pSteamUserStats);
+ return result;
+}
+public override string GetAchievementName(uint iAchievement)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetAchievementName(m_pSteamUserStats,iAchievement);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override ulong RequestUserStats(ulong steamIDUser)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_RequestUserStats(m_pSteamUserStats,steamIDUser);
+ return result;
+}
+public override bool GetUserStat(ulong steamIDUser,string pchName,ref int pData)
+{
+ CheckIfUsable();
+ pData = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetUserStat(m_pSteamUserStats,steamIDUser,pchName,ref pData);
+ return result;
+}
+public override bool GetUserStat0(ulong steamIDUser,string pchName,ref float pData)
+{
+ CheckIfUsable();
+ pData = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetUserStat0(m_pSteamUserStats,steamIDUser,pchName,ref pData);
+ return result;
+}
+public override bool GetUserAchievement(ulong steamIDUser,string pchName,ref bool pbAchieved)
+{
+ CheckIfUsable();
+ pbAchieved = false;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetUserAchievement(m_pSteamUserStats,steamIDUser,pchName,ref pbAchieved);
+ return result;
+}
+public override bool GetUserAchievementAndUnlockTime(ulong steamIDUser,string pchName,ref bool pbAchieved,ref uint punUnlockTime)
+{
+ CheckIfUsable();
+ pbAchieved = false;
+ punUnlockTime = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(m_pSteamUserStats,steamIDUser,pchName,ref pbAchieved,ref punUnlockTime);
+ return result;
+}
+public override bool ResetAllStats(bool bAchievementsToo)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_ResetAllStats(m_pSteamUserStats,bAchievementsToo);
+ return result;
+}
+public override ulong FindOrCreateLeaderboard(string pchLeaderboardName,uint eLeaderboardSortMethod,uint eLeaderboardDisplayType)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(m_pSteamUserStats,pchLeaderboardName,eLeaderboardSortMethod,eLeaderboardDisplayType);
+ return result;
+}
+public override ulong FindLeaderboard(string pchLeaderboardName)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_FindLeaderboard(m_pSteamUserStats,pchLeaderboardName);
+ return result;
+}
+public override string GetLeaderboardName(ulong hSteamLeaderboard)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetLeaderboardName(m_pSteamUserStats,hSteamLeaderboard);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override int GetLeaderboardEntryCount(ulong hSteamLeaderboard)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(m_pSteamUserStats,hSteamLeaderboard);
+ return result;
+}
+public override uint GetLeaderboardSortMethod(ulong hSteamLeaderboard)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(m_pSteamUserStats,hSteamLeaderboard);
+ return result;
+}
+public override uint GetLeaderboardDisplayType(ulong hSteamLeaderboard)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(m_pSteamUserStats,hSteamLeaderboard);
+ return result;
+}
+public override ulong DownloadLeaderboardEntries(ulong hSteamLeaderboard,uint eLeaderboardDataRequest,int nRangeStart,int nRangeEnd)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(m_pSteamUserStats,hSteamLeaderboard,eLeaderboardDataRequest,nRangeStart,nRangeEnd);
+ return result;
+}
+public override ulong DownloadLeaderboardEntriesForUsers(ulong hSteamLeaderboard,CSteamID [] prgUsers)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(m_pSteamUserStats,hSteamLeaderboard,prgUsers,(int) prgUsers.Length);
+ return result;
+}
+public override bool GetDownloadedLeaderboardEntry(ulong hSteamLeaderboardEntries,int index,ref LeaderboardEntry_t pLeaderboardEntry,ref int pDetails,int cDetailsMax)
+{
+ CheckIfUsable();
+ pDetails = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(m_pSteamUserStats,hSteamLeaderboardEntries,index,ref pLeaderboardEntry,ref pDetails,cDetailsMax);
+ return result;
+}
+public override ulong UploadLeaderboardScore(ulong hSteamLeaderboard,uint eLeaderboardUploadScoreMethod,int nScore,ref int pScoreDetails,int cScoreDetailsCount)
+{
+ CheckIfUsable();
+ pScoreDetails = 0;
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_UploadLeaderboardScore(m_pSteamUserStats,hSteamLeaderboard,eLeaderboardUploadScoreMethod,nScore,ref pScoreDetails,cScoreDetailsCount);
+ return result;
+}
+public override ulong AttachLeaderboardUGC(ulong hSteamLeaderboard,ulong hUGC)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_AttachLeaderboardUGC(m_pSteamUserStats,hSteamLeaderboard,hUGC);
+ return result;
+}
+public override ulong GetNumberOfCurrentPlayers()
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(m_pSteamUserStats);
+ return result;
+}
+public override ulong RequestGlobalAchievementPercentages()
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(m_pSteamUserStats);
+ return result;
+}
+public override int GetMostAchievedAchievementInfo(string pchName,uint unNameBufLen,ref float pflPercent,ref bool pbAchieved)
+{
+ CheckIfUsable();
+ pflPercent = 0;
+ pbAchieved = false;
+ int result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(m_pSteamUserStats,pchName,unNameBufLen,ref pflPercent,ref pbAchieved);
+ return result;
+}
+public override int GetNextMostAchievedAchievementInfo(int iIteratorPrevious,string pchName,uint unNameBufLen,ref float pflPercent,ref bool pbAchieved)
+{
+ CheckIfUsable();
+ pflPercent = 0;
+ pbAchieved = false;
+ int result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(m_pSteamUserStats,iIteratorPrevious,pchName,unNameBufLen,ref pflPercent,ref pbAchieved);
+ return result;
+}
+public override bool GetAchievementAchievedPercent(string pchName,ref float pflPercent)
+{
+ CheckIfUsable();
+ pflPercent = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(m_pSteamUserStats,pchName,ref pflPercent);
+ return result;
+}
+public override ulong RequestGlobalStats(int nHistoryDays)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_RequestGlobalStats(m_pSteamUserStats,nHistoryDays);
+ return result;
+}
+public override bool GetGlobalStat(string pchStatName,ref long pData)
+{
+ CheckIfUsable();
+ pData = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetGlobalStat(m_pSteamUserStats,pchStatName,ref pData);
+ return result;
+}
+public override bool GetGlobalStat0(string pchStatName,ref double pData)
+{
+ CheckIfUsable();
+ pData = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetGlobalStat0(m_pSteamUserStats,pchStatName,ref pData);
+ return result;
+}
+public override int GetGlobalStatHistory(string pchStatName,long [] pData)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetGlobalStatHistory(m_pSteamUserStats,pchStatName,pData,(uint) pData.Length);
+ return result;
+}
+public override int GetGlobalStatHistory0(string pchStatName,double [] pData)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetGlobalStatHistory0(m_pSteamUserStats,pchStatName,pData,(uint) pData.Length);
+ return result;
+}
+}
+
+
+public class CSteamApps : ISteamApps
+{
+public CSteamApps(IntPtr SteamApps)
+{
+ m_pSteamApps = SteamApps;
+}
+IntPtr m_pSteamApps;
+
+public override IntPtr GetIntPtr() { return m_pSteamApps; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamApps == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override bool BIsSubscribed()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_BIsSubscribed(m_pSteamApps);
+ return result;
+}
+public override bool BIsLowViolence()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_BIsLowViolence(m_pSteamApps);
+ return result;
+}
+public override bool BIsCybercafe()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_BIsCybercafe(m_pSteamApps);
+ return result;
+}
+public override bool BIsVACBanned()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_BIsVACBanned(m_pSteamApps);
+ return result;
+}
+public override string GetCurrentGameLanguage()
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamApps_GetCurrentGameLanguage(m_pSteamApps);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override string GetAvailableGameLanguages()
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamApps_GetAvailableGameLanguages(m_pSteamApps);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override bool BIsSubscribedApp(uint appID)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_BIsSubscribedApp(m_pSteamApps,appID);
+ return result;
+}
+public override bool BIsDlcInstalled(uint appID)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_BIsDlcInstalled(m_pSteamApps,appID);
+ return result;
+}
+public override uint GetEarliestPurchaseUnixTime(uint nAppID)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(m_pSteamApps,nAppID);
+ return result;
+}
+public override bool BIsSubscribedFromFreeWeekend()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(m_pSteamApps);
+ return result;
+}
+public override int GetDLCCount()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamApps_GetDLCCount(m_pSteamApps);
+ return result;
+}
+public override bool BGetDLCDataByIndex(int iDLC,ref uint pAppID,ref bool pbAvailable,string pchName,int cchNameBufferSize)
+{
+ CheckIfUsable();
+ pAppID = 0;
+ pbAvailable = false;
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_BGetDLCDataByIndex(m_pSteamApps,iDLC,ref pAppID,ref pbAvailable,pchName,cchNameBufferSize);
+ return result;
+}
+public override void InstallDLC(uint nAppID)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamApps_InstallDLC(m_pSteamApps,nAppID);
+}
+public override void UninstallDLC(uint nAppID)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamApps_UninstallDLC(m_pSteamApps,nAppID);
+}
+public override void RequestAppProofOfPurchaseKey(uint nAppID)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(m_pSteamApps,nAppID);
+}
+public override bool GetCurrentBetaName(string pchName,int cchNameBufferSize)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_GetCurrentBetaName(m_pSteamApps,pchName,cchNameBufferSize);
+ return result;
+}
+public override bool MarkContentCorrupt(bool bMissingFilesOnly)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_MarkContentCorrupt(m_pSteamApps,bMissingFilesOnly);
+ return result;
+}
+public override uint GetInstalledDepots(uint appID,ref uint pvecDepots,uint cMaxDepots)
+{
+ CheckIfUsable();
+ pvecDepots = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamApps_GetInstalledDepots(m_pSteamApps,appID,ref pvecDepots,cMaxDepots);
+ return result;
+}
+public override uint GetAppInstallDir(uint appID,string pchFolder,uint cchFolderBufferSize)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamApps_GetAppInstallDir(m_pSteamApps,appID,pchFolder,cchFolderBufferSize);
+ return result;
+}
+public override bool BIsAppInstalled(uint appID)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_BIsAppInstalled(m_pSteamApps,appID);
+ return result;
+}
+public override ulong GetAppOwner()
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamApps_GetAppOwner(m_pSteamApps);
+ return result;
+}
+public override string GetLaunchQueryParam(string pchKey)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamApps_GetLaunchQueryParam(m_pSteamApps,pchKey);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override bool GetDlcDownloadProgress(uint nAppID,ref ulong punBytesDownloaded,ref ulong punBytesTotal)
+{
+ CheckIfUsable();
+ punBytesDownloaded = 0;
+ punBytesTotal = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_GetDlcDownloadProgress(m_pSteamApps,nAppID,ref punBytesDownloaded,ref punBytesTotal);
+ return result;
+}
+public override int GetAppBuildId()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamApps_GetAppBuildId(m_pSteamApps);
+ return result;
+}
+public override void RequestAllProofOfPurchaseKeys()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamApps_RequestAllProofOfPurchaseKeys(m_pSteamApps);
+}
+public override ulong GetFileDetails(string pszFileName)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamApps_GetFileDetails(m_pSteamApps,pszFileName);
+ return result;
+}
+}
+
+
+public class CSteamNetworking : ISteamNetworking
+{
+public CSteamNetworking(IntPtr SteamNetworking)
+{
+ m_pSteamNetworking = SteamNetworking;
+}
+IntPtr m_pSteamNetworking;
+
+public override IntPtr GetIntPtr() { return m_pSteamNetworking; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamNetworking == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override bool SendP2PPacket(ulong steamIDRemote,IntPtr pubData,uint cubData,uint eP2PSendType,int nChannel)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_SendP2PPacket(m_pSteamNetworking,steamIDRemote,pubData,cubData,eP2PSendType,nChannel);
+ return result;
+}
+public override bool IsP2PPacketAvailable(ref uint pcubMsgSize,int nChannel)
+{
+ CheckIfUsable();
+ pcubMsgSize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_IsP2PPacketAvailable(m_pSteamNetworking,ref pcubMsgSize,nChannel);
+ return result;
+}
+public override bool ReadP2PPacket(IntPtr pubDest,uint cubDest,ref uint pcubMsgSize,ref CSteamID psteamIDRemote,int nChannel)
+{
+ CheckIfUsable();
+ pcubMsgSize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_ReadP2PPacket(m_pSteamNetworking,pubDest,cubDest,ref pcubMsgSize,ref psteamIDRemote,nChannel);
+ return result;
+}
+public override bool AcceptP2PSessionWithUser(ulong steamIDRemote)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(m_pSteamNetworking,steamIDRemote);
+ return result;
+}
+public override bool CloseP2PSessionWithUser(ulong steamIDRemote)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(m_pSteamNetworking,steamIDRemote);
+ return result;
+}
+public override bool CloseP2PChannelWithUser(ulong steamIDRemote,int nChannel)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(m_pSteamNetworking,steamIDRemote,nChannel);
+ return result;
+}
+public override bool GetP2PSessionState(ulong steamIDRemote,ref P2PSessionState_t pConnectionState)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_GetP2PSessionState(m_pSteamNetworking,steamIDRemote,ref pConnectionState);
+ return result;
+}
+public override bool AllowP2PPacketRelay(bool bAllow)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_AllowP2PPacketRelay(m_pSteamNetworking,bAllow);
+ return result;
+}
+public override uint CreateListenSocket(int nVirtualP2PPort,uint nIP,char nPort,bool bAllowUseOfPacketRelay)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamNetworking_CreateListenSocket(m_pSteamNetworking,nVirtualP2PPort,nIP,nPort,bAllowUseOfPacketRelay);
+ return result;
+}
+public override uint CreateP2PConnectionSocket(ulong steamIDTarget,int nVirtualPort,int nTimeoutSec,bool bAllowUseOfPacketRelay)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(m_pSteamNetworking,steamIDTarget,nVirtualPort,nTimeoutSec,bAllowUseOfPacketRelay);
+ return result;
+}
+public override uint CreateConnectionSocket(uint nIP,char nPort,int nTimeoutSec)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamNetworking_CreateConnectionSocket(m_pSteamNetworking,nIP,nPort,nTimeoutSec);
+ return result;
+}
+public override bool DestroySocket(uint hSocket,bool bNotifyRemoteEnd)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_DestroySocket(m_pSteamNetworking,hSocket,bNotifyRemoteEnd);
+ return result;
+}
+public override bool DestroyListenSocket(uint hSocket,bool bNotifyRemoteEnd)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_DestroyListenSocket(m_pSteamNetworking,hSocket,bNotifyRemoteEnd);
+ return result;
+}
+public override bool SendDataOnSocket(uint hSocket,IntPtr pubData,uint cubData,bool bReliable)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_SendDataOnSocket(m_pSteamNetworking,hSocket,pubData,cubData,bReliable);
+ return result;
+}
+public override bool IsDataAvailableOnSocket(uint hSocket,ref uint pcubMsgSize)
+{
+ CheckIfUsable();
+ pcubMsgSize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(m_pSteamNetworking,hSocket,ref pcubMsgSize);
+ return result;
+}
+public override bool RetrieveDataFromSocket(uint hSocket,IntPtr pubDest,uint cubDest,ref uint pcubMsgSize)
+{
+ CheckIfUsable();
+ pcubMsgSize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_RetrieveDataFromSocket(m_pSteamNetworking,hSocket,pubDest,cubDest,ref pcubMsgSize);
+ return result;
+}
+public override bool IsDataAvailable(uint hListenSocket,ref uint pcubMsgSize,ref uint phSocket)
+{
+ CheckIfUsable();
+ pcubMsgSize = 0;
+ phSocket = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_IsDataAvailable(m_pSteamNetworking,hListenSocket,ref pcubMsgSize,ref phSocket);
+ return result;
+}
+public override bool RetrieveData(uint hListenSocket,IntPtr pubDest,uint cubDest,ref uint pcubMsgSize,ref uint phSocket)
+{
+ CheckIfUsable();
+ pcubMsgSize = 0;
+ phSocket = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_RetrieveData(m_pSteamNetworking,hListenSocket,pubDest,cubDest,ref pcubMsgSize,ref phSocket);
+ return result;
+}
+public override bool GetSocketInfo(uint hSocket,ref CSteamID pSteamIDRemote,ref int peSocketStatus,ref uint punIPRemote,ref char punPortRemote)
+{
+ CheckIfUsable();
+ peSocketStatus = 0;
+ punIPRemote = 0;
+ punPortRemote = (char) 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_GetSocketInfo(m_pSteamNetworking,hSocket,ref pSteamIDRemote,ref peSocketStatus,ref punIPRemote,ref punPortRemote);
+ return result;
+}
+public override bool GetListenSocketInfo(uint hListenSocket,ref uint pnIP,ref char pnPort)
+{
+ CheckIfUsable();
+ pnIP = 0;
+ pnPort = (char) 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_GetListenSocketInfo(m_pSteamNetworking,hListenSocket,ref pnIP,ref pnPort);
+ return result;
+}
+public override uint GetSocketConnectionType(uint hSocket)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamNetworking_GetSocketConnectionType(m_pSteamNetworking,hSocket);
+ return result;
+}
+public override int GetMaxPacketSize(uint hSocket)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamNetworking_GetMaxPacketSize(m_pSteamNetworking,hSocket);
+ return result;
+}
+}
+
+
+public class CSteamScreenshots : ISteamScreenshots
+{
+public CSteamScreenshots(IntPtr SteamScreenshots)
+{
+ m_pSteamScreenshots = SteamScreenshots;
+}
+IntPtr m_pSteamScreenshots;
+
+public override IntPtr GetIntPtr() { return m_pSteamScreenshots; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamScreenshots == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override uint WriteScreenshot(IntPtr pubRGB,uint cubRGB,int nWidth,int nHeight)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamScreenshots_WriteScreenshot(m_pSteamScreenshots,pubRGB,cubRGB,nWidth,nHeight);
+ return result;
+}
+public override uint AddScreenshotToLibrary(string pchFilename,string pchThumbnailFilename,int nWidth,int nHeight)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(m_pSteamScreenshots,pchFilename,pchThumbnailFilename,nWidth,nHeight);
+ return result;
+}
+public override void TriggerScreenshot()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamScreenshots_TriggerScreenshot(m_pSteamScreenshots);
+}
+public override void HookScreenshots(bool bHook)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamScreenshots_HookScreenshots(m_pSteamScreenshots,bHook);
+}
+public override bool SetLocation(uint hScreenshot,string pchLocation)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamScreenshots_SetLocation(m_pSteamScreenshots,hScreenshot,pchLocation);
+ return result;
+}
+public override bool TagUser(uint hScreenshot,ulong steamID)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamScreenshots_TagUser(m_pSteamScreenshots,hScreenshot,steamID);
+ return result;
+}
+public override bool TagPublishedFile(uint hScreenshot,ulong unPublishedFileID)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamScreenshots_TagPublishedFile(m_pSteamScreenshots,hScreenshot,unPublishedFileID);
+ return result;
+}
+public override bool IsScreenshotsHooked()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamScreenshots_IsScreenshotsHooked(m_pSteamScreenshots);
+ return result;
+}
+public override uint AddVRScreenshotToLibrary(uint eType,string pchFilename,string pchVRFilename)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamScreenshots_AddVRScreenshotToLibrary(m_pSteamScreenshots,eType,pchFilename,pchVRFilename);
+ return result;
+}
+}
+
+
+public class CSteamMusic : ISteamMusic
+{
+public CSteamMusic(IntPtr SteamMusic)
+{
+ m_pSteamMusic = SteamMusic;
+}
+IntPtr m_pSteamMusic;
+
+public override IntPtr GetIntPtr() { return m_pSteamMusic; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamMusic == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override bool BIsEnabled()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusic_BIsEnabled(m_pSteamMusic);
+ return result;
+}
+public override bool BIsPlaying()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusic_BIsPlaying(m_pSteamMusic);
+ return result;
+}
+public override int GetPlaybackStatus()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamMusic_GetPlaybackStatus(m_pSteamMusic);
+ return result;
+}
+public override void Play()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMusic_Play(m_pSteamMusic);
+}
+public override void Pause()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMusic_Pause(m_pSteamMusic);
+}
+public override void PlayPrevious()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMusic_PlayPrevious(m_pSteamMusic);
+}
+public override void PlayNext()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMusic_PlayNext(m_pSteamMusic);
+}
+public override void SetVolume(float flVolume)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMusic_SetVolume(m_pSteamMusic,flVolume);
+}
+public override float GetVolume()
+{
+ CheckIfUsable();
+ float result = NativeEntrypoints.SteamAPI_ISteamMusic_GetVolume(m_pSteamMusic);
+ return result;
+}
+}
+
+
+public class CSteamMusicRemote : ISteamMusicRemote
+{
+public CSteamMusicRemote(IntPtr SteamMusicRemote)
+{
+ m_pSteamMusicRemote = SteamMusicRemote;
+}
+IntPtr m_pSteamMusicRemote;
+
+public override IntPtr GetIntPtr() { return m_pSteamMusicRemote; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamMusicRemote == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override bool RegisterSteamMusicRemote(string pchName)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(m_pSteamMusicRemote,pchName);
+ return result;
+}
+public override bool DeregisterSteamMusicRemote()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(m_pSteamMusicRemote);
+ return result;
+}
+public override bool BIsCurrentMusicRemote()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(m_pSteamMusicRemote);
+ return result;
+}
+public override bool BActivationSuccess(bool bValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_BActivationSuccess(m_pSteamMusicRemote,bValue);
+ return result;
+}
+public override bool SetDisplayName(string pchDisplayName)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_SetDisplayName(m_pSteamMusicRemote,pchDisplayName);
+ return result;
+}
+public override bool SetPNGIcon_64x64(IntPtr pvBuffer,uint cbBufferLength)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(m_pSteamMusicRemote,pvBuffer,cbBufferLength);
+ return result;
+}
+public override bool EnablePlayPrevious(bool bValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_EnablePlayPrevious(m_pSteamMusicRemote,bValue);
+ return result;
+}
+public override bool EnablePlayNext(bool bValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_EnablePlayNext(m_pSteamMusicRemote,bValue);
+ return result;
+}
+public override bool EnableShuffled(bool bValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_EnableShuffled(m_pSteamMusicRemote,bValue);
+ return result;
+}
+public override bool EnableLooped(bool bValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_EnableLooped(m_pSteamMusicRemote,bValue);
+ return result;
+}
+public override bool EnableQueue(bool bValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_EnableQueue(m_pSteamMusicRemote,bValue);
+ return result;
+}
+public override bool EnablePlaylists(bool bValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_EnablePlaylists(m_pSteamMusicRemote,bValue);
+ return result;
+}
+public override bool UpdatePlaybackStatus(int nStatus)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(m_pSteamMusicRemote,nStatus);
+ return result;
+}
+public override bool UpdateShuffled(bool bValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_UpdateShuffled(m_pSteamMusicRemote,bValue);
+ return result;
+}
+public override bool UpdateLooped(bool bValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_UpdateLooped(m_pSteamMusicRemote,bValue);
+ return result;
+}
+public override bool UpdateVolume(float flValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_UpdateVolume(m_pSteamMusicRemote,flValue);
+ return result;
+}
+public override bool CurrentEntryWillChange()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(m_pSteamMusicRemote);
+ return result;
+}
+public override bool CurrentEntryIsAvailable(bool bAvailable)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(m_pSteamMusicRemote,bAvailable);
+ return result;
+}
+public override bool UpdateCurrentEntryText(string pchText)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(m_pSteamMusicRemote,pchText);
+ return result;
+}
+public override bool UpdateCurrentEntryElapsedSeconds(int nValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(m_pSteamMusicRemote,nValue);
+ return result;
+}
+public override bool UpdateCurrentEntryCoverArt(IntPtr pvBuffer,uint cbBufferLength)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(m_pSteamMusicRemote,pvBuffer,cbBufferLength);
+ return result;
+}
+public override bool CurrentEntryDidChange()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(m_pSteamMusicRemote);
+ return result;
+}
+public override bool QueueWillChange()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_QueueWillChange(m_pSteamMusicRemote);
+ return result;
+}
+public override bool ResetQueueEntries()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_ResetQueueEntries(m_pSteamMusicRemote);
+ return result;
+}
+public override bool SetQueueEntry(int nID,int nPosition,string pchEntryText)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_SetQueueEntry(m_pSteamMusicRemote,nID,nPosition,pchEntryText);
+ return result;
+}
+public override bool SetCurrentQueueEntry(int nID)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(m_pSteamMusicRemote,nID);
+ return result;
+}
+public override bool QueueDidChange()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_QueueDidChange(m_pSteamMusicRemote);
+ return result;
+}
+public override bool PlaylistWillChange()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_PlaylistWillChange(m_pSteamMusicRemote);
+ return result;
+}
+public override bool ResetPlaylistEntries()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(m_pSteamMusicRemote);
+ return result;
+}
+public override bool SetPlaylistEntry(int nID,int nPosition,string pchEntryText)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_SetPlaylistEntry(m_pSteamMusicRemote,nID,nPosition,pchEntryText);
+ return result;
+}
+public override bool SetCurrentPlaylistEntry(int nID)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(m_pSteamMusicRemote,nID);
+ return result;
+}
+public override bool PlaylistDidChange()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_PlaylistDidChange(m_pSteamMusicRemote);
+ return result;
+}
+}
+
+
+public class CSteamHTTP : ISteamHTTP
+{
+public CSteamHTTP(IntPtr SteamHTTP)
+{
+ m_pSteamHTTP = SteamHTTP;
+}
+IntPtr m_pSteamHTTP;
+
+public override IntPtr GetIntPtr() { return m_pSteamHTTP; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamHTTP == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override uint CreateHTTPRequest(uint eHTTPRequestMethod,string pchAbsoluteURL)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamHTTP_CreateHTTPRequest(m_pSteamHTTP,eHTTPRequestMethod,pchAbsoluteURL);
+ return result;
+}
+public override bool SetHTTPRequestContextValue(uint hRequest,ulong ulContextValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(m_pSteamHTTP,hRequest,ulContextValue);
+ return result;
+}
+public override bool SetHTTPRequestNetworkActivityTimeout(uint hRequest,uint unTimeoutSeconds)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(m_pSteamHTTP,hRequest,unTimeoutSeconds);
+ return result;
+}
+public override bool SetHTTPRequestHeaderValue(uint hRequest,string pchHeaderName,string pchHeaderValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(m_pSteamHTTP,hRequest,pchHeaderName,pchHeaderValue);
+ return result;
+}
+public override bool SetHTTPRequestGetOrPostParameter(uint hRequest,string pchParamName,string pchParamValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(m_pSteamHTTP,hRequest,pchParamName,pchParamValue);
+ return result;
+}
+public override bool SendHTTPRequest(uint hRequest,ref ulong pCallHandle)
+{
+ CheckIfUsable();
+ pCallHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SendHTTPRequest(m_pSteamHTTP,hRequest,ref pCallHandle);
+ return result;
+}
+public override bool SendHTTPRequestAndStreamResponse(uint hRequest,ref ulong pCallHandle)
+{
+ CheckIfUsable();
+ pCallHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(m_pSteamHTTP,hRequest,ref pCallHandle);
+ return result;
+}
+public override bool DeferHTTPRequest(uint hRequest)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_DeferHTTPRequest(m_pSteamHTTP,hRequest);
+ return result;
+}
+public override bool PrioritizeHTTPRequest(uint hRequest)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(m_pSteamHTTP,hRequest);
+ return result;
+}
+public override bool GetHTTPResponseHeaderSize(uint hRequest,string pchHeaderName,ref uint unResponseHeaderSize)
+{
+ CheckIfUsable();
+ unResponseHeaderSize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(m_pSteamHTTP,hRequest,pchHeaderName,ref unResponseHeaderSize);
+ return result;
+}
+public override bool GetHTTPResponseHeaderValue(uint hRequest,string pchHeaderName,IntPtr pHeaderValueBuffer,uint unBufferSize)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(m_pSteamHTTP,hRequest,pchHeaderName,pHeaderValueBuffer,unBufferSize);
+ return result;
+}
+public override bool GetHTTPResponseBodySize(uint hRequest,ref uint unBodySize)
+{
+ CheckIfUsable();
+ unBodySize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(m_pSteamHTTP,hRequest,ref unBodySize);
+ return result;
+}
+public override bool GetHTTPResponseBodyData(uint hRequest,IntPtr pBodyDataBuffer,uint unBufferSize)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(m_pSteamHTTP,hRequest,pBodyDataBuffer,unBufferSize);
+ return result;
+}
+public override bool GetHTTPStreamingResponseBodyData(uint hRequest,uint cOffset,IntPtr pBodyDataBuffer,uint unBufferSize)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(m_pSteamHTTP,hRequest,cOffset,pBodyDataBuffer,unBufferSize);
+ return result;
+}
+public override bool ReleaseHTTPRequest(uint hRequest)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_ReleaseHTTPRequest(m_pSteamHTTP,hRequest);
+ return result;
+}
+public override bool GetHTTPDownloadProgressPct(uint hRequest,ref float pflPercentOut)
+{
+ CheckIfUsable();
+ pflPercentOut = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(m_pSteamHTTP,hRequest,ref pflPercentOut);
+ return result;
+}
+public override bool SetHTTPRequestRawPostBody(uint hRequest,string pchContentType,IntPtr pubBody,uint unBodyLen)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(m_pSteamHTTP,hRequest,pchContentType,pubBody,unBodyLen);
+ return result;
+}
+public override uint CreateCookieContainer(bool bAllowResponsesToModify)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamHTTP_CreateCookieContainer(m_pSteamHTTP,bAllowResponsesToModify);
+ return result;
+}
+public override bool ReleaseCookieContainer(uint hCookieContainer)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_ReleaseCookieContainer(m_pSteamHTTP,hCookieContainer);
+ return result;
+}
+public override bool SetCookie(uint hCookieContainer,string pchHost,string pchUrl,string pchCookie)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetCookie(m_pSteamHTTP,hCookieContainer,pchHost,pchUrl,pchCookie);
+ return result;
+}
+public override bool SetHTTPRequestCookieContainer(uint hRequest,uint hCookieContainer)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(m_pSteamHTTP,hRequest,hCookieContainer);
+ return result;
+}
+public override bool SetHTTPRequestUserAgentInfo(uint hRequest,string pchUserAgentInfo)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(m_pSteamHTTP,hRequest,pchUserAgentInfo);
+ return result;
+}
+public override bool SetHTTPRequestRequiresVerifiedCertificate(uint hRequest,bool bRequireVerifiedCertificate)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(m_pSteamHTTP,hRequest,bRequireVerifiedCertificate);
+ return result;
+}
+public override bool SetHTTPRequestAbsoluteTimeoutMS(uint hRequest,uint unMilliseconds)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(m_pSteamHTTP,hRequest,unMilliseconds);
+ return result;
+}
+public override bool GetHTTPRequestWasTimedOut(uint hRequest,ref bool pbWasTimedOut)
+{
+ CheckIfUsable();
+ pbWasTimedOut = false;
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(m_pSteamHTTP,hRequest,ref pbWasTimedOut);
+ return result;
+}
+}
+
+
+public class CSteamUnifiedMessages : ISteamUnifiedMessages
+{
+public CSteamUnifiedMessages(IntPtr SteamUnifiedMessages)
+{
+ m_pSteamUnifiedMessages = SteamUnifiedMessages;
+}
+IntPtr m_pSteamUnifiedMessages;
+
+public override IntPtr GetIntPtr() { return m_pSteamUnifiedMessages; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamUnifiedMessages == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override ulong SendMethod(string pchServiceMethod,IntPtr pRequestBuffer,uint unRequestBufferSize,ulong unContext)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUnifiedMessages_SendMethod(m_pSteamUnifiedMessages,pchServiceMethod,pRequestBuffer,unRequestBufferSize,unContext);
+ return result;
+}
+public override bool GetMethodResponseInfo(ulong hHandle,ref uint punResponseSize,ref uint peResult)
+{
+ CheckIfUsable();
+ punResponseSize = 0;
+ peResult = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo(m_pSteamUnifiedMessages,hHandle,ref punResponseSize,ref peResult);
+ return result;
+}
+public override bool GetMethodResponseData(ulong hHandle,IntPtr pResponseBuffer,uint unResponseBufferSize,bool bAutoRelease)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUnifiedMessages_GetMethodResponseData(m_pSteamUnifiedMessages,hHandle,pResponseBuffer,unResponseBufferSize,bAutoRelease);
+ return result;
+}
+public override bool ReleaseMethod(ulong hHandle)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUnifiedMessages_ReleaseMethod(m_pSteamUnifiedMessages,hHandle);
+ return result;
+}
+public override bool SendNotification(string pchServiceNotification,IntPtr pNotificationBuffer,uint unNotificationBufferSize)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUnifiedMessages_SendNotification(m_pSteamUnifiedMessages,pchServiceNotification,pNotificationBuffer,unNotificationBufferSize);
+ return result;
+}
+}
+
+
+public class CSteamController : ISteamController
+{
+public CSteamController(IntPtr SteamController)
+{
+ m_pSteamController = SteamController;
+}
+IntPtr m_pSteamController;
+
+public override IntPtr GetIntPtr() { return m_pSteamController; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamController == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override bool Init()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamController_Init(m_pSteamController);
+ return result;
+}
+public override bool Shutdown()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamController_Shutdown(m_pSteamController);
+ return result;
+}
+public override void RunFrame()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamController_RunFrame(m_pSteamController);
+}
+public override int GetConnectedControllers(ref ulong handlesOut)
+{
+ CheckIfUsable();
+ handlesOut = 0;
+ int result = NativeEntrypoints.SteamAPI_ISteamController_GetConnectedControllers(m_pSteamController,ref handlesOut);
+ return result;
+}
+public override bool ShowBindingPanel(ulong controllerHandle)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamController_ShowBindingPanel(m_pSteamController,controllerHandle);
+ return result;
+}
+public override ulong GetActionSetHandle(string pszActionSetName)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamController_GetActionSetHandle(m_pSteamController,pszActionSetName);
+ return result;
+}
+public override void ActivateActionSet(ulong controllerHandle,ulong actionSetHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamController_ActivateActionSet(m_pSteamController,controllerHandle,actionSetHandle);
+}
+public override ulong GetCurrentActionSet(ulong controllerHandle)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamController_GetCurrentActionSet(m_pSteamController,controllerHandle);
+ return result;
+}
+public override ulong GetDigitalActionHandle(string pszActionName)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamController_GetDigitalActionHandle(m_pSteamController,pszActionName);
+ return result;
+}
+public override ControllerDigitalActionData_t GetDigitalActionData(ulong controllerHandle,ulong digitalActionHandle)
+{
+ CheckIfUsable();
+ ControllerDigitalActionData_t result = NativeEntrypoints.SteamAPI_ISteamController_GetDigitalActionData(m_pSteamController,controllerHandle,digitalActionHandle);
+ return result;
+}
+public override int GetDigitalActionOrigins(ulong controllerHandle,ulong actionSetHandle,ulong digitalActionHandle,ref uint originsOut)
+{
+ CheckIfUsable();
+ originsOut = 0;
+ int result = NativeEntrypoints.SteamAPI_ISteamController_GetDigitalActionOrigins(m_pSteamController,controllerHandle,actionSetHandle,digitalActionHandle,ref originsOut);
+ return result;
+}
+public override ulong GetAnalogActionHandle(string pszActionName)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamController_GetAnalogActionHandle(m_pSteamController,pszActionName);
+ return result;
+}
+public override ControllerAnalogActionData_t GetAnalogActionData(ulong controllerHandle,ulong analogActionHandle)
+{
+ CheckIfUsable();
+ ControllerAnalogActionData_t result = NativeEntrypoints.SteamAPI_ISteamController_GetAnalogActionData(m_pSteamController,controllerHandle,analogActionHandle);
+ return result;
+}
+public override int GetAnalogActionOrigins(ulong controllerHandle,ulong actionSetHandle,ulong analogActionHandle,ref uint originsOut)
+{
+ CheckIfUsable();
+ originsOut = 0;
+ int result = NativeEntrypoints.SteamAPI_ISteamController_GetAnalogActionOrigins(m_pSteamController,controllerHandle,actionSetHandle,analogActionHandle,ref originsOut);
+ return result;
+}
+public override void StopAnalogActionMomentum(ulong controllerHandle,ulong eAction)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamController_StopAnalogActionMomentum(m_pSteamController,controllerHandle,eAction);
+}
+public override void TriggerHapticPulse(ulong controllerHandle,uint eTargetPad,char usDurationMicroSec)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamController_TriggerHapticPulse(m_pSteamController,controllerHandle,eTargetPad,usDurationMicroSec);
+}
+public override void TriggerRepeatedHapticPulse(ulong controllerHandle,uint eTargetPad,char usDurationMicroSec,char usOffMicroSec,char unRepeat,uint nFlags)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamController_TriggerRepeatedHapticPulse(m_pSteamController,controllerHandle,eTargetPad,usDurationMicroSec,usOffMicroSec,unRepeat,nFlags);
+}
+public override void TriggerVibration(ulong controllerHandle,char usLeftSpeed,char usRightSpeed)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamController_TriggerVibration(m_pSteamController,controllerHandle,usLeftSpeed,usRightSpeed);
+}
+public override void SetLEDColor(ulong controllerHandle,byte nColorR,byte nColorG,byte nColorB,uint nFlags)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamController_SetLEDColor(m_pSteamController,controllerHandle,nColorR,nColorG,nColorB,nFlags);
+}
+public override int GetGamepadIndexForController(ulong ulControllerHandle)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamController_GetGamepadIndexForController(m_pSteamController,ulControllerHandle);
+ return result;
+}
+public override ulong GetControllerForGamepadIndex(int nIndex)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamController_GetControllerForGamepadIndex(m_pSteamController,nIndex);
+ return result;
+}
+public override ControllerMotionData_t GetMotionData(ulong controllerHandle)
+{
+ CheckIfUsable();
+ ControllerMotionData_t result = NativeEntrypoints.SteamAPI_ISteamController_GetMotionData(m_pSteamController,controllerHandle);
+ return result;
+}
+public override bool ShowDigitalActionOrigins(ulong controllerHandle,ulong digitalActionHandle,float flScale,float flXPosition,float flYPosition)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamController_ShowDigitalActionOrigins(m_pSteamController,controllerHandle,digitalActionHandle,flScale,flXPosition,flYPosition);
+ return result;
+}
+public override bool ShowAnalogActionOrigins(ulong controllerHandle,ulong analogActionHandle,float flScale,float flXPosition,float flYPosition)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamController_ShowAnalogActionOrigins(m_pSteamController,controllerHandle,analogActionHandle,flScale,flXPosition,flYPosition);
+ return result;
+}
+public override string GetStringForActionOrigin(uint eOrigin)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamController_GetStringForActionOrigin(m_pSteamController,eOrigin);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override string GetGlyphForActionOrigin(uint eOrigin)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamController_GetGlyphForActionOrigin(m_pSteamController,eOrigin);
+ return Marshal.PtrToStringAnsi(result);
+}
+}
+
+
+public class CSteamUGC : ISteamUGC
+{
+public CSteamUGC(IntPtr SteamUGC)
+{
+ m_pSteamUGC = SteamUGC;
+}
+IntPtr m_pSteamUGC;
+
+public override IntPtr GetIntPtr() { return m_pSteamUGC; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamUGC == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override ulong CreateQueryUserUGCRequest(uint unAccountID,uint eListType,uint eMatchingUGCType,uint eSortOrder,uint nCreatorAppID,uint nConsumerAppID,uint unPage)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(m_pSteamUGC,unAccountID,eListType,eMatchingUGCType,eSortOrder,nCreatorAppID,nConsumerAppID,unPage);
+ return result;
+}
+public override ulong CreateQueryAllUGCRequest(uint eQueryType,uint eMatchingeMatchingUGCTypeFileType,uint nCreatorAppID,uint nConsumerAppID,uint unPage)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(m_pSteamUGC,eQueryType,eMatchingeMatchingUGCTypeFileType,nCreatorAppID,nConsumerAppID,unPage);
+ return result;
+}
+public override ulong CreateQueryUGCDetailsRequest(ref ulong pvecPublishedFileID,uint unNumPublishedFileIDs)
+{
+ CheckIfUsable();
+ pvecPublishedFileID = 0;
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest(m_pSteamUGC,ref pvecPublishedFileID,unNumPublishedFileIDs);
+ return result;
+}
+public override ulong SendQueryUGCRequest(ulong handle)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_SendQueryUGCRequest(m_pSteamUGC,handle);
+ return result;
+}
+public override bool GetQueryUGCResult(ulong handle,uint index,ref SteamUGCDetails_t pDetails)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_GetQueryUGCResult(m_pSteamUGC,handle,index,ref pDetails);
+ return result;
+}
+public override bool GetQueryUGCPreviewURL(ulong handle,uint index,out string pchURL)
+{
+ CheckIfUsable();
+ System.Text.StringBuilder pStrBuffer1 = new System.Text.StringBuilder(2048);
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_GetQueryUGCPreviewURL(m_pSteamUGC,handle,index,pStrBuffer1,2048);
+ pchURL = pStrBuffer1.ToString();
+ return result;
+}
+public override bool GetQueryUGCMetadata(ulong handle,uint index,out string pchMetadata)
+{
+ CheckIfUsable();
+ System.Text.StringBuilder pStrBuffer1 = new System.Text.StringBuilder(2048);
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_GetQueryUGCMetadata(m_pSteamUGC,handle,index,pStrBuffer1,2048);
+ pchMetadata = pStrBuffer1.ToString();
+ return result;
+}
+public override bool GetQueryUGCChildren(ulong handle,uint index,ref ulong pvecPublishedFileID,uint cMaxEntries)
+{
+ CheckIfUsable();
+ pvecPublishedFileID = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_GetQueryUGCChildren(m_pSteamUGC,handle,index,ref pvecPublishedFileID,cMaxEntries);
+ return result;
+}
+public override bool GetQueryUGCStatistic(ulong handle,uint index,uint eStatType,ref ulong pStatValue)
+{
+ CheckIfUsable();
+ pStatValue = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_GetQueryUGCStatistic(m_pSteamUGC,handle,index,eStatType,ref pStatValue);
+ return result;
+}
+public override uint GetQueryUGCNumAdditionalPreviews(ulong handle,uint index)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews(m_pSteamUGC,handle,index);
+ return result;
+}
+public override bool GetQueryUGCAdditionalPreview(ulong handle,uint index,uint previewIndex,out string pchURLOrVideoID,out string pchOriginalFileName,uint cchOriginalFileNameSize,ref uint pPreviewType)
+{
+ CheckIfUsable();
+ pPreviewType = 0;
+ System.Text.StringBuilder pStrBuffer1 = new System.Text.StringBuilder(2048);
+ System.Text.StringBuilder pStrBuffer2 = new System.Text.StringBuilder(2048);
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview(m_pSteamUGC,handle,index,previewIndex,pStrBuffer1,2048,pStrBuffer2,cchOriginalFileNameSize,ref pPreviewType);
+ pchURLOrVideoID = pStrBuffer1.ToString();
+ pchOriginalFileName = pStrBuffer2.ToString();
+ return result;
+}
+public override uint GetQueryUGCNumKeyValueTags(ulong handle,uint index)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUGC_GetQueryUGCNumKeyValueTags(m_pSteamUGC,handle,index);
+ return result;
+}
+public override bool GetQueryUGCKeyValueTag(ulong handle,uint index,uint keyValueTagIndex,out string pchKey,out string pchValue)
+{
+ CheckIfUsable();
+ System.Text.StringBuilder pStrBuffer1 = new System.Text.StringBuilder(2048);
+ System.Text.StringBuilder pStrBuffer2 = new System.Text.StringBuilder(2048);
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_GetQueryUGCKeyValueTag(m_pSteamUGC,handle,index,keyValueTagIndex,pStrBuffer1,2048,pStrBuffer2,2048);
+ pchKey = pStrBuffer1.ToString();
+ pchValue = pStrBuffer2.ToString();
+ return result;
+}
+public override bool ReleaseQueryUGCRequest(ulong handle)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(m_pSteamUGC,handle);
+ return result;
+}
+public override bool AddRequiredTag(ulong handle,string pTagName)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_AddRequiredTag(m_pSteamUGC,handle,pTagName);
+ return result;
+}
+public override bool AddExcludedTag(ulong handle,string pTagName)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_AddExcludedTag(m_pSteamUGC,handle,pTagName);
+ return result;
+}
+public override bool SetReturnOnlyIDs(ulong handle,bool bReturnOnlyIDs)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetReturnOnlyIDs(m_pSteamUGC,handle,bReturnOnlyIDs);
+ return result;
+}
+public override bool SetReturnKeyValueTags(ulong handle,bool bReturnKeyValueTags)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetReturnKeyValueTags(m_pSteamUGC,handle,bReturnKeyValueTags);
+ return result;
+}
+public override bool SetReturnLongDescription(ulong handle,bool bReturnLongDescription)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetReturnLongDescription(m_pSteamUGC,handle,bReturnLongDescription);
+ return result;
+}
+public override bool SetReturnMetadata(ulong handle,bool bReturnMetadata)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetReturnMetadata(m_pSteamUGC,handle,bReturnMetadata);
+ return result;
+}
+public override bool SetReturnChildren(ulong handle,bool bReturnChildren)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetReturnChildren(m_pSteamUGC,handle,bReturnChildren);
+ return result;
+}
+public override bool SetReturnAdditionalPreviews(ulong handle,bool bReturnAdditionalPreviews)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetReturnAdditionalPreviews(m_pSteamUGC,handle,bReturnAdditionalPreviews);
+ return result;
+}
+public override bool SetReturnTotalOnly(ulong handle,bool bReturnTotalOnly)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetReturnTotalOnly(m_pSteamUGC,handle,bReturnTotalOnly);
+ return result;
+}
+public override bool SetLanguage(ulong handle,string pchLanguage)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetLanguage(m_pSteamUGC,handle,pchLanguage);
+ return result;
+}
+public override bool SetAllowCachedResponse(ulong handle,uint unMaxAgeSeconds)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetAllowCachedResponse(m_pSteamUGC,handle,unMaxAgeSeconds);
+ return result;
+}
+public override bool SetCloudFileNameFilter(ulong handle,string pMatchCloudFileName)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetCloudFileNameFilter(m_pSteamUGC,handle,pMatchCloudFileName);
+ return result;
+}
+public override bool SetMatchAnyTag(ulong handle,bool bMatchAnyTag)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetMatchAnyTag(m_pSteamUGC,handle,bMatchAnyTag);
+ return result;
+}
+public override bool SetSearchText(ulong handle,string pSearchText)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetSearchText(m_pSteamUGC,handle,pSearchText);
+ return result;
+}
+public override bool SetRankedByTrendDays(ulong handle,uint unDays)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetRankedByTrendDays(m_pSteamUGC,handle,unDays);
+ return result;
+}
+public override bool AddRequiredKeyValueTag(ulong handle,string pKey,string pValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_AddRequiredKeyValueTag(m_pSteamUGC,handle,pKey,pValue);
+ return result;
+}
+public override ulong RequestUGCDetails(ulong nPublishedFileID,uint unMaxAgeSeconds)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_RequestUGCDetails(m_pSteamUGC,nPublishedFileID,unMaxAgeSeconds);
+ return result;
+}
+public override ulong CreateItem(uint nConsumerAppId,uint eFileType)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_CreateItem(m_pSteamUGC,nConsumerAppId,eFileType);
+ return result;
+}
+public override ulong StartItemUpdate(uint nConsumerAppId,ulong nPublishedFileID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_StartItemUpdate(m_pSteamUGC,nConsumerAppId,nPublishedFileID);
+ return result;
+}
+public override bool SetItemTitle(ulong handle,string pchTitle)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemTitle(m_pSteamUGC,handle,pchTitle);
+ return result;
+}
+public override bool SetItemDescription(ulong handle,string pchDescription)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemDescription(m_pSteamUGC,handle,pchDescription);
+ return result;
+}
+public override bool SetItemUpdateLanguage(ulong handle,string pchLanguage)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemUpdateLanguage(m_pSteamUGC,handle,pchLanguage);
+ return result;
+}
+public override bool SetItemMetadata(ulong handle,string pchMetaData)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemMetadata(m_pSteamUGC,handle,pchMetaData);
+ return result;
+}
+public override bool SetItemVisibility(ulong handle,uint eVisibility)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemVisibility(m_pSteamUGC,handle,eVisibility);
+ return result;
+}
+public override bool SetItemTags(ulong updateHandle,ref SteamParamStringArray_t pTags)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemTags(m_pSteamUGC,updateHandle,ref pTags);
+ return result;
+}
+public override bool SetItemContent(ulong handle,string pszContentFolder)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemContent(m_pSteamUGC,handle,pszContentFolder);
+ return result;
+}
+public override bool SetItemPreview(ulong handle,string pszPreviewFile)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemPreview(m_pSteamUGC,handle,pszPreviewFile);
+ return result;
+}
+public override bool RemoveItemKeyValueTags(ulong handle,string pchKey)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_RemoveItemKeyValueTags(m_pSteamUGC,handle,pchKey);
+ return result;
+}
+public override bool AddItemKeyValueTag(ulong handle,string pchKey,string pchValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_AddItemKeyValueTag(m_pSteamUGC,handle,pchKey,pchValue);
+ return result;
+}
+public override bool AddItemPreviewFile(ulong handle,string pszPreviewFile,uint type)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_AddItemPreviewFile(m_pSteamUGC,handle,pszPreviewFile,type);
+ return result;
+}
+public override bool AddItemPreviewVideo(ulong handle,string pszVideoID)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_AddItemPreviewVideo(m_pSteamUGC,handle,pszVideoID);
+ return result;
+}
+public override bool UpdateItemPreviewFile(ulong handle,uint index,string pszPreviewFile)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_UpdateItemPreviewFile(m_pSteamUGC,handle,index,pszPreviewFile);
+ return result;
+}
+public override bool UpdateItemPreviewVideo(ulong handle,uint index,string pszVideoID)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_UpdateItemPreviewVideo(m_pSteamUGC,handle,index,pszVideoID);
+ return result;
+}
+public override bool RemoveItemPreview(ulong handle,uint index)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_RemoveItemPreview(m_pSteamUGC,handle,index);
+ return result;
+}
+public override ulong SubmitItemUpdate(ulong handle,string pchChangeNote)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_SubmitItemUpdate(m_pSteamUGC,handle,pchChangeNote);
+ return result;
+}
+public override uint GetItemUpdateProgress(ulong handle,ref ulong punBytesProcessed,ref ulong punBytesTotal)
+{
+ CheckIfUsable();
+ punBytesProcessed = 0;
+ punBytesTotal = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamUGC_GetItemUpdateProgress(m_pSteamUGC,handle,ref punBytesProcessed,ref punBytesTotal);
+ return result;
+}
+public override ulong SetUserItemVote(ulong nPublishedFileID,bool bVoteUp)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_SetUserItemVote(m_pSteamUGC,nPublishedFileID,bVoteUp);
+ return result;
+}
+public override ulong GetUserItemVote(ulong nPublishedFileID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_GetUserItemVote(m_pSteamUGC,nPublishedFileID);
+ return result;
+}
+public override ulong AddItemToFavorites(uint nAppId,ulong nPublishedFileID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_AddItemToFavorites(m_pSteamUGC,nAppId,nPublishedFileID);
+ return result;
+}
+public override ulong RemoveItemFromFavorites(uint nAppId,ulong nPublishedFileID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_RemoveItemFromFavorites(m_pSteamUGC,nAppId,nPublishedFileID);
+ return result;
+}
+public override ulong SubscribeItem(ulong nPublishedFileID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_SubscribeItem(m_pSteamUGC,nPublishedFileID);
+ return result;
+}
+public override ulong UnsubscribeItem(ulong nPublishedFileID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_UnsubscribeItem(m_pSteamUGC,nPublishedFileID);
+ return result;
+}
+public override uint GetNumSubscribedItems()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUGC_GetNumSubscribedItems(m_pSteamUGC);
+ return result;
+}
+public override uint GetSubscribedItems(ref ulong pvecPublishedFileID,uint cMaxEntries)
+{
+ CheckIfUsable();
+ pvecPublishedFileID = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamUGC_GetSubscribedItems(m_pSteamUGC,ref pvecPublishedFileID,cMaxEntries);
+ return result;
+}
+public override uint GetItemState(ulong nPublishedFileID)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUGC_GetItemState(m_pSteamUGC,nPublishedFileID);
+ return result;
+}
+public override bool GetItemInstallInfo(ulong nPublishedFileID,ref ulong punSizeOnDisk,out string pchFolder,ref uint punTimeStamp)
+{
+ CheckIfUsable();
+ punSizeOnDisk = 0;
+ punTimeStamp = 0;
+ System.Text.StringBuilder pStrBuffer1 = new System.Text.StringBuilder(2048);
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_GetItemInstallInfo(m_pSteamUGC,nPublishedFileID,ref punSizeOnDisk,pStrBuffer1,2048,ref punTimeStamp);
+ pchFolder = pStrBuffer1.ToString();
+ return result;
+}
+public override bool GetItemDownloadInfo(ulong nPublishedFileID,ref ulong punBytesDownloaded,ref ulong punBytesTotal)
+{
+ CheckIfUsable();
+ punBytesDownloaded = 0;
+ punBytesTotal = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_GetItemDownloadInfo(m_pSteamUGC,nPublishedFileID,ref punBytesDownloaded,ref punBytesTotal);
+ return result;
+}
+public override bool DownloadItem(ulong nPublishedFileID,bool bHighPriority)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_DownloadItem(m_pSteamUGC,nPublishedFileID,bHighPriority);
+ return result;
+}
+public override bool BInitWorkshopForGameServer(uint unWorkshopDepotID,string pszFolder)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_BInitWorkshopForGameServer(m_pSteamUGC,unWorkshopDepotID,pszFolder);
+ return result;
+}
+public override void SuspendDownloads(bool bSuspend)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUGC_SuspendDownloads(m_pSteamUGC,bSuspend);
+}
+public override ulong StartPlaytimeTracking(ref ulong pvecPublishedFileID,uint unNumPublishedFileIDs)
+{
+ CheckIfUsable();
+ pvecPublishedFileID = 0;
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_StartPlaytimeTracking(m_pSteamUGC,ref pvecPublishedFileID,unNumPublishedFileIDs);
+ return result;
+}
+public override ulong StopPlaytimeTracking(ref ulong pvecPublishedFileID,uint unNumPublishedFileIDs)
+{
+ CheckIfUsable();
+ pvecPublishedFileID = 0;
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_StopPlaytimeTracking(m_pSteamUGC,ref pvecPublishedFileID,unNumPublishedFileIDs);
+ return result;
+}
+public override ulong StopPlaytimeTrackingForAllItems()
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_StopPlaytimeTrackingForAllItems(m_pSteamUGC);
+ return result;
+}
+}
+
+
+public class CSteamAppList : ISteamAppList
+{
+public CSteamAppList(IntPtr SteamAppList)
+{
+ m_pSteamAppList = SteamAppList;
+}
+IntPtr m_pSteamAppList;
+
+public override IntPtr GetIntPtr() { return m_pSteamAppList; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamAppList == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override uint GetNumInstalledApps()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamAppList_GetNumInstalledApps(m_pSteamAppList);
+ return result;
+}
+public override uint GetInstalledApps(ref uint pvecAppID,uint unMaxAppIDs)
+{
+ CheckIfUsable();
+ pvecAppID = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamAppList_GetInstalledApps(m_pSteamAppList,ref pvecAppID,unMaxAppIDs);
+ return result;
+}
+public override int GetAppName(uint nAppID,System.Text.StringBuilder pchName,int cchNameMax)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamAppList_GetAppName(m_pSteamAppList,nAppID,pchName,cchNameMax);
+ return result;
+}
+public override int GetAppInstallDir(uint nAppID,string pchDirectory,int cchNameMax)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamAppList_GetAppInstallDir(m_pSteamAppList,nAppID,pchDirectory,cchNameMax);
+ return result;
+}
+public override int GetAppBuildId(uint nAppID)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamAppList_GetAppBuildId(m_pSteamAppList,nAppID);
+ return result;
+}
+}
+
+
+public class CSteamHTMLSurface : ISteamHTMLSurface
+{
+public CSteamHTMLSurface(IntPtr SteamHTMLSurface)
+{
+ m_pSteamHTMLSurface = SteamHTMLSurface;
+}
+IntPtr m_pSteamHTMLSurface;
+
+public override IntPtr GetIntPtr() { return m_pSteamHTMLSurface; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamHTMLSurface == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override void DestructISteamHTMLSurface()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(m_pSteamHTMLSurface);
+}
+public override bool Init()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTMLSurface_Init(m_pSteamHTMLSurface);
+ return result;
+}
+public override bool Shutdown()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTMLSurface_Shutdown(m_pSteamHTMLSurface);
+ return result;
+}
+public override ulong CreateBrowser(string pchUserAgent,string pchUserCSS)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamHTMLSurface_CreateBrowser(m_pSteamHTMLSurface,pchUserAgent,pchUserCSS);
+ return result;
+}
+public override void RemoveBrowser(uint unBrowserHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_RemoveBrowser(m_pSteamHTMLSurface,unBrowserHandle);
+}
+public override void LoadURL(uint unBrowserHandle,string pchURL,string pchPostData)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_LoadURL(m_pSteamHTMLSurface,unBrowserHandle,pchURL,pchPostData);
+}
+public override void SetSize(uint unBrowserHandle,uint unWidth,uint unHeight)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_SetSize(m_pSteamHTMLSurface,unBrowserHandle,unWidth,unHeight);
+}
+public override void StopLoad(uint unBrowserHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_StopLoad(m_pSteamHTMLSurface,unBrowserHandle);
+}
+public override void Reload(uint unBrowserHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_Reload(m_pSteamHTMLSurface,unBrowserHandle);
+}
+public override void GoBack(uint unBrowserHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_GoBack(m_pSteamHTMLSurface,unBrowserHandle);
+}
+public override void GoForward(uint unBrowserHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_GoForward(m_pSteamHTMLSurface,unBrowserHandle);
+}
+public override void AddHeader(uint unBrowserHandle,string pchKey,string pchValue)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_AddHeader(m_pSteamHTMLSurface,unBrowserHandle,pchKey,pchValue);
+}
+public override void ExecuteJavascript(uint unBrowserHandle,string pchScript)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_ExecuteJavascript(m_pSteamHTMLSurface,unBrowserHandle,pchScript);
+}
+public override void MouseUp(uint unBrowserHandle,uint eMouseButton)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_MouseUp(m_pSteamHTMLSurface,unBrowserHandle,eMouseButton);
+}
+public override void MouseDown(uint unBrowserHandle,uint eMouseButton)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_MouseDown(m_pSteamHTMLSurface,unBrowserHandle,eMouseButton);
+}
+public override void MouseDoubleClick(uint unBrowserHandle,uint eMouseButton)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_MouseDoubleClick(m_pSteamHTMLSurface,unBrowserHandle,eMouseButton);
+}
+public override void MouseMove(uint unBrowserHandle,int x,int y)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_MouseMove(m_pSteamHTMLSurface,unBrowserHandle,x,y);
+}
+public override void MouseWheel(uint unBrowserHandle,int nDelta)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_MouseWheel(m_pSteamHTMLSurface,unBrowserHandle,nDelta);
+}
+public override void KeyDown(uint unBrowserHandle,uint nNativeKeyCode,uint eHTMLKeyModifiers)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_KeyDown(m_pSteamHTMLSurface,unBrowserHandle,nNativeKeyCode,eHTMLKeyModifiers);
+}
+public override void KeyUp(uint unBrowserHandle,uint nNativeKeyCode,uint eHTMLKeyModifiers)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_KeyUp(m_pSteamHTMLSurface,unBrowserHandle,nNativeKeyCode,eHTMLKeyModifiers);
+}
+public override void KeyChar(uint unBrowserHandle,uint cUnicodeChar,uint eHTMLKeyModifiers)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_KeyChar(m_pSteamHTMLSurface,unBrowserHandle,cUnicodeChar,eHTMLKeyModifiers);
+}
+public override void SetHorizontalScroll(uint unBrowserHandle,uint nAbsolutePixelScroll)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(m_pSteamHTMLSurface,unBrowserHandle,nAbsolutePixelScroll);
+}
+public override void SetVerticalScroll(uint unBrowserHandle,uint nAbsolutePixelScroll)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_SetVerticalScroll(m_pSteamHTMLSurface,unBrowserHandle,nAbsolutePixelScroll);
+}
+public override void SetKeyFocus(uint unBrowserHandle,bool bHasKeyFocus)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_SetKeyFocus(m_pSteamHTMLSurface,unBrowserHandle,bHasKeyFocus);
+}
+public override void ViewSource(uint unBrowserHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_ViewSource(m_pSteamHTMLSurface,unBrowserHandle);
+}
+public override void CopyToClipboard(uint unBrowserHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_CopyToClipboard(m_pSteamHTMLSurface,unBrowserHandle);
+}
+public override void PasteFromClipboard(uint unBrowserHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_PasteFromClipboard(m_pSteamHTMLSurface,unBrowserHandle);
+}
+public override void Find(uint unBrowserHandle,string pchSearchStr,bool bCurrentlyInFind,bool bReverse)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_Find(m_pSteamHTMLSurface,unBrowserHandle,pchSearchStr,bCurrentlyInFind,bReverse);
+}
+public override void StopFind(uint unBrowserHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_StopFind(m_pSteamHTMLSurface,unBrowserHandle);
+}
+public override void GetLinkAtPosition(uint unBrowserHandle,int x,int y)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(m_pSteamHTMLSurface,unBrowserHandle,x,y);
+}
+public override void SetCookie(string pchHostname,string pchKey,string pchValue,string pchPath,ulong nExpires,bool bSecure,bool bHTTPOnly)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_SetCookie(m_pSteamHTMLSurface,pchHostname,pchKey,pchValue,pchPath,nExpires,bSecure,bHTTPOnly);
+}
+public override void SetPageScaleFactor(uint unBrowserHandle,float flZoom,int nPointX,int nPointY)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(m_pSteamHTMLSurface,unBrowserHandle,flZoom,nPointX,nPointY);
+}
+public override void SetBackgroundMode(uint unBrowserHandle,bool bBackgroundMode)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_SetBackgroundMode(m_pSteamHTMLSurface,unBrowserHandle,bBackgroundMode);
+}
+public override void AllowStartRequest(uint unBrowserHandle,bool bAllowed)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_AllowStartRequest(m_pSteamHTMLSurface,unBrowserHandle,bAllowed);
+}
+public override void JSDialogResponse(uint unBrowserHandle,bool bResult)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_JSDialogResponse(m_pSteamHTMLSurface,unBrowserHandle,bResult);
+}
+}
+
+
+public class CSteamInventory : ISteamInventory
+{
+public CSteamInventory(IntPtr SteamInventory)
+{
+ m_pSteamInventory = SteamInventory;
+}
+IntPtr m_pSteamInventory;
+
+public override IntPtr GetIntPtr() { return m_pSteamInventory; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamInventory == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override uint GetResultStatus(int resultHandle)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamInventory_GetResultStatus(m_pSteamInventory,resultHandle);
+ return result;
+}
+public override bool GetResultItems(int resultHandle,out SteamItemDetails_t [] pOutItemsArray)
+{
+ CheckIfUsable();
+ uint punOutItemsArraySize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GetResultItems(m_pSteamInventory,resultHandle,null,ref punOutItemsArraySize);
+ pOutItemsArray= new SteamItemDetails_t[punOutItemsArraySize];
+ result = NativeEntrypoints.SteamAPI_ISteamInventory_GetResultItems(m_pSteamInventory,resultHandle,pOutItemsArray,ref punOutItemsArraySize);
+ return result;
+}
+public override uint GetResultTimestamp(int resultHandle)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamInventory_GetResultTimestamp(m_pSteamInventory,resultHandle);
+ return result;
+}
+public override bool CheckResultSteamID(int resultHandle,ulong steamIDExpected)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_CheckResultSteamID(m_pSteamInventory,resultHandle,steamIDExpected);
+ return result;
+}
+public override void DestroyResult(int resultHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamInventory_DestroyResult(m_pSteamInventory,resultHandle);
+}
+public override bool GetAllItems(ref int pResultHandle)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GetAllItems(m_pSteamInventory,ref pResultHandle);
+ return result;
+}
+public override bool GetItemsByID(ref int pResultHandle,ulong [] pInstanceIDs)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GetItemsByID(m_pSteamInventory,ref pResultHandle,pInstanceIDs,(uint) pInstanceIDs.Length);
+ return result;
+}
+public override bool SerializeResult(int resultHandle,IntPtr pOutBuffer,ref uint punOutBufferSize)
+{
+ CheckIfUsable();
+ punOutBufferSize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_SerializeResult(m_pSteamInventory,resultHandle,pOutBuffer,ref punOutBufferSize);
+ return result;
+}
+public override bool DeserializeResult(ref int pOutResultHandle,IntPtr pBuffer,uint unBufferSize,bool bRESERVED_MUST_BE_FALSE)
+{
+ CheckIfUsable();
+ pOutResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_DeserializeResult(m_pSteamInventory,ref pOutResultHandle,pBuffer,unBufferSize,bRESERVED_MUST_BE_FALSE);
+ return result;
+}
+public override bool GenerateItems(ref int pResultHandle,int [] pArrayItemDefs,uint [] punArrayQuantity)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GenerateItems(m_pSteamInventory,ref pResultHandle,pArrayItemDefs,punArrayQuantity,(uint) punArrayQuantity.Length);
+ return result;
+}
+public override bool GrantPromoItems(ref int pResultHandle)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GrantPromoItems(m_pSteamInventory,ref pResultHandle);
+ return result;
+}
+public override bool AddPromoItem(ref int pResultHandle,int itemDef)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_AddPromoItem(m_pSteamInventory,ref pResultHandle,itemDef);
+ return result;
+}
+public override bool AddPromoItems(ref int pResultHandle,int [] pArrayItemDefs)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_AddPromoItems(m_pSteamInventory,ref pResultHandle,pArrayItemDefs,(uint) pArrayItemDefs.Length);
+ return result;
+}
+public override bool ConsumeItem(ref int pResultHandle,ulong itemConsume,uint unQuantity)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_ConsumeItem(m_pSteamInventory,ref pResultHandle,itemConsume,unQuantity);
+ return result;
+}
+public override bool ExchangeItems(ref int pResultHandle,int [] pArrayGenerate,uint [] punArrayGenerateQuantity,ulong [] pArrayDestroy,uint [] punArrayDestroyQuantity)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_ExchangeItems(m_pSteamInventory,ref pResultHandle,pArrayGenerate,punArrayGenerateQuantity,(uint) punArrayGenerateQuantity.Length,pArrayDestroy,punArrayDestroyQuantity,(uint) punArrayDestroyQuantity.Length);
+ return result;
+}
+public override bool TransferItemQuantity(ref int pResultHandle,ulong itemIdSource,uint unQuantity,ulong itemIdDest)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_TransferItemQuantity(m_pSteamInventory,ref pResultHandle,itemIdSource,unQuantity,itemIdDest);
+ return result;
+}
+public override void SendItemDropHeartbeat()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamInventory_SendItemDropHeartbeat(m_pSteamInventory);
+}
+public override bool TriggerItemDrop(ref int pResultHandle,int dropListDefinition)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_TriggerItemDrop(m_pSteamInventory,ref pResultHandle,dropListDefinition);
+ return result;
+}
+public override bool TradeItems(ref int pResultHandle,ulong steamIDTradePartner,ulong [] pArrayGive,uint [] pArrayGiveQuantity,ulong [] pArrayGet,uint [] pArrayGetQuantity)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_TradeItems(m_pSteamInventory,ref pResultHandle,steamIDTradePartner,pArrayGive,pArrayGiveQuantity,(uint) pArrayGiveQuantity.Length,pArrayGet,pArrayGetQuantity,(uint) pArrayGetQuantity.Length);
+ return result;
+}
+public override bool LoadItemDefinitions()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_LoadItemDefinitions(m_pSteamInventory);
+ return result;
+}
+public override bool GetItemDefinitionIDs(out int [] pItemDefIDs)
+{
+ CheckIfUsable();
+ uint punItemDefIDsArraySize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GetItemDefinitionIDs(m_pSteamInventory,null,ref punItemDefIDsArraySize);
+ pItemDefIDs= new int[punItemDefIDsArraySize];
+ result = NativeEntrypoints.SteamAPI_ISteamInventory_GetItemDefinitionIDs(m_pSteamInventory,pItemDefIDs,ref punItemDefIDsArraySize);
+ return result;
+}
+public override bool GetItemDefinitionProperty(int iDefinition,string pchPropertyName,out string pchValueBuffer)
+{
+ CheckIfUsable();
+ uint punValueBufferSizeOut = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GetItemDefinitionProperty(m_pSteamInventory,iDefinition,pchPropertyName,null,ref punValueBufferSizeOut);
+ System.Text.StringBuilder pStrBuffer1 = new System.Text.StringBuilder((int)punValueBufferSizeOut);
+ result = NativeEntrypoints.SteamAPI_ISteamInventory_GetItemDefinitionProperty(m_pSteamInventory,iDefinition,pchPropertyName,pStrBuffer1,ref punValueBufferSizeOut);
+ pchValueBuffer = pStrBuffer1.ToString();
+ return result;
+}
+public override ulong RequestEligiblePromoItemDefinitionsIDs(ulong steamID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamInventory_RequestEligiblePromoItemDefinitionsIDs(m_pSteamInventory,steamID);
+ return result;
+}
+public override bool GetEligiblePromoItemDefinitionIDs(ulong steamID,out int [] pItemDefIDs)
+{
+ CheckIfUsable();
+ uint punItemDefIDsArraySize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GetEligiblePromoItemDefinitionIDs(m_pSteamInventory,steamID,null,ref punItemDefIDsArraySize);
+ pItemDefIDs= new int[punItemDefIDsArraySize];
+ result = NativeEntrypoints.SteamAPI_ISteamInventory_GetEligiblePromoItemDefinitionIDs(m_pSteamInventory,steamID,pItemDefIDs,ref punItemDefIDsArraySize);
+ return result;
+}
+}
+
+
+public class CSteamVideo : ISteamVideo
+{
+public CSteamVideo(IntPtr SteamVideo)
+{
+ m_pSteamVideo = SteamVideo;
+}
+IntPtr m_pSteamVideo;
+
+public override IntPtr GetIntPtr() { return m_pSteamVideo; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamVideo == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override void GetVideoURL(uint unVideoAppID)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamVideo_GetVideoURL(m_pSteamVideo,unVideoAppID);
+}
+public override bool IsBroadcasting(ref int pnNumViewers)
+{
+ CheckIfUsable();
+ pnNumViewers = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamVideo_IsBroadcasting(m_pSteamVideo,ref pnNumViewers);
+ return result;
+}
+}
+
+
+public class CSteamGameServer : ISteamGameServer
+{
+public CSteamGameServer(IntPtr SteamGameServer)
+{
+ m_pSteamGameServer = SteamGameServer;
+}
+IntPtr m_pSteamGameServer;
+
+public override IntPtr GetIntPtr() { return m_pSteamGameServer; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamGameServer == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override bool InitGameServer(uint unIP,char usGamePort,char usQueryPort,uint unFlags,uint nGameAppId,string pchVersionString)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServer_InitGameServer(m_pSteamGameServer,unIP,usGamePort,usQueryPort,unFlags,nGameAppId,pchVersionString);
+ return result;
+}
+public override void SetProduct(string pszProduct)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetProduct(m_pSteamGameServer,pszProduct);
+}
+public override void SetGameDescription(string pszGameDescription)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetGameDescription(m_pSteamGameServer,pszGameDescription);
+}
+public override void SetModDir(string pszModDir)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetModDir(m_pSteamGameServer,pszModDir);
+}
+public override void SetDedicatedServer(bool bDedicated)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetDedicatedServer(m_pSteamGameServer,bDedicated);
+}
+public override void LogOn(string pszToken)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_LogOn(m_pSteamGameServer,pszToken);
+}
+public override void LogOnAnonymous()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_LogOnAnonymous(m_pSteamGameServer);
+}
+public override void LogOff()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_LogOff(m_pSteamGameServer);
+}
+public override bool BLoggedOn()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServer_BLoggedOn(m_pSteamGameServer);
+ return result;
+}
+public override bool BSecure()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServer_BSecure(m_pSteamGameServer);
+ return result;
+}
+public override ulong GetSteamID()
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamGameServer_GetSteamID(m_pSteamGameServer);
+ return result;
+}
+public override bool WasRestartRequested()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServer_WasRestartRequested(m_pSteamGameServer);
+ return result;
+}
+public override void SetMaxPlayerCount(int cPlayersMax)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetMaxPlayerCount(m_pSteamGameServer,cPlayersMax);
+}
+public override void SetBotPlayerCount(int cBotplayers)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetBotPlayerCount(m_pSteamGameServer,cBotplayers);
+}
+public override void SetServerName(string pszServerName)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetServerName(m_pSteamGameServer,pszServerName);
+}
+public override void SetMapName(string pszMapName)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetMapName(m_pSteamGameServer,pszMapName);
+}
+public override void SetPasswordProtected(bool bPasswordProtected)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetPasswordProtected(m_pSteamGameServer,bPasswordProtected);
+}
+public override void SetSpectatorPort(char unSpectatorPort)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetSpectatorPort(m_pSteamGameServer,unSpectatorPort);
+}
+public override void SetSpectatorServerName(string pszSpectatorServerName)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetSpectatorServerName(m_pSteamGameServer,pszSpectatorServerName);
+}
+public override void ClearAllKeyValues()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_ClearAllKeyValues(m_pSteamGameServer);
+}
+public override void SetKeyValue(string pKey,string pValue)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetKeyValue(m_pSteamGameServer,pKey,pValue);
+}
+public override void SetGameTags(string pchGameTags)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetGameTags(m_pSteamGameServer,pchGameTags);
+}
+public override void SetGameData(string pchGameData)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetGameData(m_pSteamGameServer,pchGameData);
+}
+public override void SetRegion(string pszRegion)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetRegion(m_pSteamGameServer,pszRegion);
+}
+public override bool SendUserConnectAndAuthenticate(uint unIPClient,IntPtr pvAuthBlob,uint cubAuthBlobSize,ref CSteamID pSteamIDUser)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(m_pSteamGameServer,unIPClient,pvAuthBlob,cubAuthBlobSize,ref pSteamIDUser);
+ return result;
+}
+public override ulong CreateUnauthenticatedUserConnection()
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(m_pSteamGameServer);
+ return result;
+}
+public override void SendUserDisconnect(ulong steamIDUser)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SendUserDisconnect(m_pSteamGameServer,steamIDUser);
+}
+public override bool BUpdateUserData(ulong steamIDUser,string pchPlayerName,uint uScore)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServer_BUpdateUserData(m_pSteamGameServer,steamIDUser,pchPlayerName,uScore);
+ return result;
+}
+public override uint GetAuthSessionTicket(IntPtr pTicket,int cbMaxTicket,ref uint pcbTicket)
+{
+ CheckIfUsable();
+ pcbTicket = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamGameServer_GetAuthSessionTicket(m_pSteamGameServer,pTicket,cbMaxTicket,ref pcbTicket);
+ return result;
+}
+public override uint BeginAuthSession(IntPtr pAuthTicket,int cbAuthTicket,ulong steamID)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamGameServer_BeginAuthSession(m_pSteamGameServer,pAuthTicket,cbAuthTicket,steamID);
+ return result;
+}
+public override void EndAuthSession(ulong steamID)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_EndAuthSession(m_pSteamGameServer,steamID);
+}
+public override void CancelAuthTicket(uint hAuthTicket)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_CancelAuthTicket(m_pSteamGameServer,hAuthTicket);
+}
+public override uint UserHasLicenseForApp(ulong steamID,uint appID)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamGameServer_UserHasLicenseForApp(m_pSteamGameServer,steamID,appID);
+ return result;
+}
+public override bool RequestUserGroupStatus(ulong steamIDUser,ulong steamIDGroup)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServer_RequestUserGroupStatus(m_pSteamGameServer,steamIDUser,steamIDGroup);
+ return result;
+}
+public override void GetGameplayStats()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_GetGameplayStats(m_pSteamGameServer);
+}
+public override ulong GetServerReputation()
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamGameServer_GetServerReputation(m_pSteamGameServer);
+ return result;
+}
+public override uint GetPublicIP()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamGameServer_GetPublicIP(m_pSteamGameServer);
+ return result;
+}
+public override bool HandleIncomingPacket(IntPtr pData,int cbData,uint srcIP,char srcPort)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServer_HandleIncomingPacket(m_pSteamGameServer,pData,cbData,srcIP,srcPort);
+ return result;
+}
+public override int GetNextOutgoingPacket(IntPtr pOut,int cbMaxOut,ref uint pNetAdr,ref char pPort)
+{
+ CheckIfUsable();
+ pNetAdr = 0;
+ pPort = (char) 0;
+ int result = NativeEntrypoints.SteamAPI_ISteamGameServer_GetNextOutgoingPacket(m_pSteamGameServer,pOut,cbMaxOut,ref pNetAdr,ref pPort);
+ return result;
+}
+public override void EnableHeartbeats(bool bActive)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_EnableHeartbeats(m_pSteamGameServer,bActive);
+}
+public override void SetHeartbeatInterval(int iHeartbeatInterval)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetHeartbeatInterval(m_pSteamGameServer,iHeartbeatInterval);
+}
+public override void ForceHeartbeat()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_ForceHeartbeat(m_pSteamGameServer);
+}
+public override ulong AssociateWithClan(ulong steamIDClan)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamGameServer_AssociateWithClan(m_pSteamGameServer,steamIDClan);
+ return result;
+}
+public override ulong ComputeNewPlayerCompatibility(ulong steamIDNewPlayer)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(m_pSteamGameServer,steamIDNewPlayer);
+ return result;
+}
+}
+
+
+public class CSteamGameServerStats : ISteamGameServerStats
+{
+public CSteamGameServerStats(IntPtr SteamGameServerStats)
+{
+ m_pSteamGameServerStats = SteamGameServerStats;
+}
+IntPtr m_pSteamGameServerStats;
+
+public override IntPtr GetIntPtr() { return m_pSteamGameServerStats; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamGameServerStats == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override ulong RequestUserStats(ulong steamIDUser)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_RequestUserStats(m_pSteamGameServerStats,steamIDUser);
+ return result;
+}
+public override bool GetUserStat(ulong steamIDUser,string pchName,ref int pData)
+{
+ CheckIfUsable();
+ pData = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_GetUserStat(m_pSteamGameServerStats,steamIDUser,pchName,ref pData);
+ return result;
+}
+public override bool GetUserStat0(ulong steamIDUser,string pchName,ref float pData)
+{
+ CheckIfUsable();
+ pData = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_GetUserStat0(m_pSteamGameServerStats,steamIDUser,pchName,ref pData);
+ return result;
+}
+public override bool GetUserAchievement(ulong steamIDUser,string pchName,ref bool pbAchieved)
+{
+ CheckIfUsable();
+ pbAchieved = false;
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_GetUserAchievement(m_pSteamGameServerStats,steamIDUser,pchName,ref pbAchieved);
+ return result;
+}
+public override bool SetUserStat(ulong steamIDUser,string pchName,int nData)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_SetUserStat(m_pSteamGameServerStats,steamIDUser,pchName,nData);
+ return result;
+}
+public override bool SetUserStat0(ulong steamIDUser,string pchName,float fData)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_SetUserStat0(m_pSteamGameServerStats,steamIDUser,pchName,fData);
+ return result;
+}
+public override bool UpdateUserAvgRateStat(ulong steamIDUser,string pchName,float flCountThisSession,double dSessionLength)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(m_pSteamGameServerStats,steamIDUser,pchName,flCountThisSession,dSessionLength);
+ return result;
+}
+public override bool SetUserAchievement(ulong steamIDUser,string pchName)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_SetUserAchievement(m_pSteamGameServerStats,steamIDUser,pchName);
+ return result;
+}
+public override bool ClearUserAchievement(ulong steamIDUser,string pchName)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_ClearUserAchievement(m_pSteamGameServerStats,steamIDUser,pchName);
+ return result;
+}
+public override ulong StoreUserStats(ulong steamIDUser)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_StoreUserStats(m_pSteamGameServerStats,steamIDUser);
+ return result;
+}
+}
+
+
+public class CUserStatsReceived_t_Callback
+{
+ public CUserStatsReceived_t_Callback() { }
+ ~CUserStatsReceived_t_Callback()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CUserStatsReceived_t_RemoveCallback(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(Valve.Interop.NativeEntrypoints.SteamAPI_UserStatsReceived_t_Callback func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CUserStatsReceived_t_RemoveCallback(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CUserStatsReceived_t_SetCallback(func);
+ }
+}
+public class CRemoteStorageFileReadAsyncComplete_t_CallResult
+{
+ public CRemoteStorageFileReadAsyncComplete_t_CallResult() { }
+ ~CRemoteStorageFileReadAsyncComplete_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageFileReadAsyncComplete_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageFileReadAsyncComplete_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageFileReadAsyncComplete_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageFileReadAsyncComplete_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageGetPublishedItemVoteDetailsResult_t_CallResult
+{
+ public CRemoteStorageGetPublishedItemVoteDetailsResult_t_CallResult() { }
+ ~CRemoteStorageGetPublishedItemVoteDetailsResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageGetPublishedItemVoteDetailsResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageGetPublishedItemVoteDetailsResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageGetPublishedItemVoteDetailsResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageGetPublishedItemVoteDetailsResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CFileDetailsResult_t_CallResult
+{
+ public CFileDetailsResult_t_CallResult() { }
+ ~CFileDetailsResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CFileDetailsResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_FileDetailsResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CFileDetailsResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CFileDetailsResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CGSStatsStored_t_CallResult
+{
+ public CGSStatsStored_t_CallResult() { }
+ ~CGSStatsStored_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGSStatsStored_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_GSStatsStored_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGSStatsStored_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CGSStatsStored_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CStartPlaytimeTrackingResult_t_CallResult
+{
+ public CStartPlaytimeTrackingResult_t_CallResult() { }
+ ~CStartPlaytimeTrackingResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CStartPlaytimeTrackingResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_StartPlaytimeTrackingResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CStartPlaytimeTrackingResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CStartPlaytimeTrackingResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CFriendsGetFollowerCount_t_CallResult
+{
+ public CFriendsGetFollowerCount_t_CallResult() { }
+ ~CFriendsGetFollowerCount_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CFriendsGetFollowerCount_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_FriendsGetFollowerCount_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CFriendsGetFollowerCount_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CFriendsGetFollowerCount_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CFriendsIsFollowing_t_CallResult
+{
+ public CFriendsIsFollowing_t_CallResult() { }
+ ~CFriendsIsFollowing_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CFriendsIsFollowing_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_FriendsIsFollowing_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CFriendsIsFollowing_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CFriendsIsFollowing_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CLobbyMatchList_t_CallResult
+{
+ public CLobbyMatchList_t_CallResult() { }
+ ~CLobbyMatchList_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLobbyMatchList_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_LobbyMatchList_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLobbyMatchList_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CLobbyMatchList_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageUpdatePublishedFileResult_t_CallResult
+{
+ public CRemoteStorageUpdatePublishedFileResult_t_CallResult() { }
+ ~CRemoteStorageUpdatePublishedFileResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageUpdatePublishedFileResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageUpdatePublishedFileResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageUpdatePublishedFileResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageUpdatePublishedFileResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CStoreAuthURLResponse_t_CallResult
+{
+ public CStoreAuthURLResponse_t_CallResult() { }
+ ~CStoreAuthURLResponse_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CStoreAuthURLResponse_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_StoreAuthURLResponse_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CStoreAuthURLResponse_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CStoreAuthURLResponse_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CLobbyCreated_t_CallResult
+{
+ public CLobbyCreated_t_CallResult() { }
+ ~CLobbyCreated_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLobbyCreated_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_LobbyCreated_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLobbyCreated_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CLobbyCreated_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageFileWriteAsyncComplete_t_CallResult
+{
+ public CRemoteStorageFileWriteAsyncComplete_t_CallResult() { }
+ ~CRemoteStorageFileWriteAsyncComplete_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageFileWriteAsyncComplete_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageFileWriteAsyncComplete_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageFileWriteAsyncComplete_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageFileWriteAsyncComplete_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageDeletePublishedFileResult_t_CallResult
+{
+ public CRemoteStorageDeletePublishedFileResult_t_CallResult() { }
+ ~CRemoteStorageDeletePublishedFileResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageDeletePublishedFileResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageDeletePublishedFileResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageDeletePublishedFileResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageDeletePublishedFileResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageGetPublishedFileDetailsResult_t_CallResult
+{
+ public CRemoteStorageGetPublishedFileDetailsResult_t_CallResult() { }
+ ~CRemoteStorageGetPublishedFileDetailsResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageGetPublishedFileDetailsResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageGetPublishedFileDetailsResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageGetPublishedFileDetailsResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageGetPublishedFileDetailsResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageDownloadUGCResult_t_CallResult
+{
+ public CRemoteStorageDownloadUGCResult_t_CallResult() { }
+ ~CRemoteStorageDownloadUGCResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageDownloadUGCResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageDownloadUGCResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageDownloadUGCResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageDownloadUGCResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CSteamUGCQueryCompleted_t_CallResult
+{
+ public CSteamUGCQueryCompleted_t_CallResult() { }
+ ~CSteamUGCQueryCompleted_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSteamUGCQueryCompleted_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_SteamUGCQueryCompleted_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSteamUGCQueryCompleted_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CSteamUGCQueryCompleted_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageFileShareResult_t_CallResult
+{
+ public CRemoteStorageFileShareResult_t_CallResult() { }
+ ~CRemoteStorageFileShareResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageFileShareResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageFileShareResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageFileShareResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageFileShareResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CLobbyEnter_t_CallResult
+{
+ public CLobbyEnter_t_CallResult() { }
+ ~CLobbyEnter_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLobbyEnter_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_LobbyEnter_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLobbyEnter_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CLobbyEnter_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CSubmitItemUpdateResult_t_CallResult
+{
+ public CSubmitItemUpdateResult_t_CallResult() { }
+ ~CSubmitItemUpdateResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSubmitItemUpdateResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_SubmitItemUpdateResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSubmitItemUpdateResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CSubmitItemUpdateResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CNumberOfCurrentPlayers_t_CallResult
+{
+ public CNumberOfCurrentPlayers_t_CallResult() { }
+ ~CNumberOfCurrentPlayers_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CNumberOfCurrentPlayers_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_NumberOfCurrentPlayers_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CNumberOfCurrentPlayers_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CNumberOfCurrentPlayers_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CGSStatsReceived_t_CallResult
+{
+ public CGSStatsReceived_t_CallResult() { }
+ ~CGSStatsReceived_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGSStatsReceived_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_GSStatsReceived_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGSStatsReceived_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CGSStatsReceived_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CHTML_BrowserReady_t_CallResult
+{
+ public CHTML_BrowserReady_t_CallResult() { }
+ ~CHTML_BrowserReady_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CHTML_BrowserReady_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_HTML_BrowserReady_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CHTML_BrowserReady_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CHTML_BrowserReady_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CLeaderboardScoresDownloaded_t_CallResult
+{
+ public CLeaderboardScoresDownloaded_t_CallResult() { }
+ ~CLeaderboardScoresDownloaded_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLeaderboardScoresDownloaded_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_LeaderboardScoresDownloaded_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLeaderboardScoresDownloaded_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CLeaderboardScoresDownloaded_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageUpdateUserPublishedItemVoteResult_t_CallResult
+{
+ public CRemoteStorageUpdateUserPublishedItemVoteResult_t_CallResult() { }
+ ~CRemoteStorageUpdateUserPublishedItemVoteResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageUpdateUserPublishedItemVoteResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageUpdateUserPublishedItemVoteResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageUpdateUserPublishedItemVoteResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageUpdateUserPublishedItemVoteResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageEnumerateUserSubscribedFilesResult_t_CallResult
+{
+ public CRemoteStorageEnumerateUserSubscribedFilesResult_t_CallResult() { }
+ ~CRemoteStorageEnumerateUserSubscribedFilesResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageEnumerateUserSubscribedFilesResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageEnumerateUserSubscribedFilesResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageEnumerateUserSubscribedFilesResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageEnumerateUserSubscribedFilesResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CCreateItemResult_t_CallResult
+{
+ public CCreateItemResult_t_CallResult() { }
+ ~CCreateItemResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CCreateItemResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_CreateItemResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CCreateItemResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CCreateItemResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CSetUserItemVoteResult_t_CallResult
+{
+ public CSetUserItemVoteResult_t_CallResult() { }
+ ~CSetUserItemVoteResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSetUserItemVoteResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_SetUserItemVoteResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSetUserItemVoteResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CSetUserItemVoteResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CComputeNewPlayerCompatibilityResult_t_CallResult
+{
+ public CComputeNewPlayerCompatibilityResult_t_CallResult() { }
+ ~CComputeNewPlayerCompatibilityResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CComputeNewPlayerCompatibilityResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_ComputeNewPlayerCompatibilityResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CComputeNewPlayerCompatibilityResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CComputeNewPlayerCompatibilityResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CLeaderboardScoreUploaded_t_CallResult
+{
+ public CLeaderboardScoreUploaded_t_CallResult() { }
+ ~CLeaderboardScoreUploaded_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLeaderboardScoreUploaded_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_LeaderboardScoreUploaded_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLeaderboardScoreUploaded_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CLeaderboardScoreUploaded_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CGlobalAchievementPercentagesReady_t_CallResult
+{
+ public CGlobalAchievementPercentagesReady_t_CallResult() { }
+ ~CGlobalAchievementPercentagesReady_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGlobalAchievementPercentagesReady_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_GlobalAchievementPercentagesReady_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGlobalAchievementPercentagesReady_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CGlobalAchievementPercentagesReady_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CGlobalStatsReceived_t_CallResult
+{
+ public CGlobalStatsReceived_t_CallResult() { }
+ ~CGlobalStatsReceived_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGlobalStatsReceived_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_GlobalStatsReceived_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGlobalStatsReceived_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CGlobalStatsReceived_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_CallResult
+{
+ public CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_CallResult() { }
+ ~CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageEnumeratePublishedFilesByUserActionResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CClanOfficerListResponse_t_CallResult
+{
+ public CClanOfficerListResponse_t_CallResult() { }
+ ~CClanOfficerListResponse_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CClanOfficerListResponse_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_ClanOfficerListResponse_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CClanOfficerListResponse_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CClanOfficerListResponse_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStoragePublishFileProgress_t_CallResult
+{
+ public CRemoteStoragePublishFileProgress_t_CallResult() { }
+ ~CRemoteStoragePublishFileProgress_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStoragePublishFileProgress_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStoragePublishFileProgress_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStoragePublishFileProgress_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStoragePublishFileProgress_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageEnumerateWorkshopFilesResult_t_CallResult
+{
+ public CRemoteStorageEnumerateWorkshopFilesResult_t_CallResult() { }
+ ~CRemoteStorageEnumerateWorkshopFilesResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageEnumerateWorkshopFilesResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageEnumerateWorkshopFilesResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageEnumerateWorkshopFilesResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageEnumerateWorkshopFilesResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CGSReputation_t_CallResult
+{
+ public CGSReputation_t_CallResult() { }
+ ~CGSReputation_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGSReputation_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_GSReputation_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGSReputation_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CGSReputation_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CUserFavoriteItemsListChanged_t_CallResult
+{
+ public CUserFavoriteItemsListChanged_t_CallResult() { }
+ ~CUserFavoriteItemsListChanged_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CUserFavoriteItemsListChanged_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_UserFavoriteItemsListChanged_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CUserFavoriteItemsListChanged_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CUserFavoriteItemsListChanged_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CEncryptedAppTicketResponse_t_CallResult
+{
+ public CEncryptedAppTicketResponse_t_CallResult() { }
+ ~CEncryptedAppTicketResponse_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CEncryptedAppTicketResponse_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_EncryptedAppTicketResponse_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CEncryptedAppTicketResponse_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CEncryptedAppTicketResponse_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageSetUserPublishedFileActionResult_t_CallResult
+{
+ public CRemoteStorageSetUserPublishedFileActionResult_t_CallResult() { }
+ ~CRemoteStorageSetUserPublishedFileActionResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageSetUserPublishedFileActionResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageSetUserPublishedFileActionResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageSetUserPublishedFileActionResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageSetUserPublishedFileActionResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CStopPlaytimeTrackingResult_t_CallResult
+{
+ public CStopPlaytimeTrackingResult_t_CallResult() { }
+ ~CStopPlaytimeTrackingResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CStopPlaytimeTrackingResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_StopPlaytimeTrackingResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CStopPlaytimeTrackingResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CStopPlaytimeTrackingResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageEnumerateUserPublishedFilesResult_t_CallResult
+{
+ public CRemoteStorageEnumerateUserPublishedFilesResult_t_CallResult() { }
+ ~CRemoteStorageEnumerateUserPublishedFilesResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageEnumerateUserPublishedFilesResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageEnumerateUserPublishedFilesResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageEnumerateUserPublishedFilesResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageEnumerateUserPublishedFilesResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CFriendsEnumerateFollowingList_t_CallResult
+{
+ public CFriendsEnumerateFollowingList_t_CallResult() { }
+ ~CFriendsEnumerateFollowingList_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CFriendsEnumerateFollowingList_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_FriendsEnumerateFollowingList_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CFriendsEnumerateFollowingList_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CFriendsEnumerateFollowingList_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageSubscribePublishedFileResult_t_CallResult
+{
+ public CRemoteStorageSubscribePublishedFileResult_t_CallResult() { }
+ ~CRemoteStorageSubscribePublishedFileResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageSubscribePublishedFileResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageSubscribePublishedFileResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageSubscribePublishedFileResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageSubscribePublishedFileResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CGetUserItemVoteResult_t_CallResult
+{
+ public CGetUserItemVoteResult_t_CallResult() { }
+ ~CGetUserItemVoteResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGetUserItemVoteResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_GetUserItemVoteResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGetUserItemVoteResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CGetUserItemVoteResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CAssociateWithClanResult_t_CallResult
+{
+ public CAssociateWithClanResult_t_CallResult() { }
+ ~CAssociateWithClanResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CAssociateWithClanResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_AssociateWithClanResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CAssociateWithClanResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CAssociateWithClanResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CLeaderboardUGCSet_t_CallResult
+{
+ public CLeaderboardUGCSet_t_CallResult() { }
+ ~CLeaderboardUGCSet_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLeaderboardUGCSet_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_LeaderboardUGCSet_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLeaderboardUGCSet_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CLeaderboardUGCSet_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CCheckFileSignature_t_CallResult
+{
+ public CCheckFileSignature_t_CallResult() { }
+ ~CCheckFileSignature_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CCheckFileSignature_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_CheckFileSignature_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CCheckFileSignature_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CCheckFileSignature_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageUnsubscribePublishedFileResult_t_CallResult
+{
+ public CRemoteStorageUnsubscribePublishedFileResult_t_CallResult() { }
+ ~CRemoteStorageUnsubscribePublishedFileResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageUnsubscribePublishedFileResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageUnsubscribePublishedFileResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageUnsubscribePublishedFileResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageUnsubscribePublishedFileResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CSetPersonaNameResponse_t_CallResult
+{
+ public CSetPersonaNameResponse_t_CallResult() { }
+ ~CSetPersonaNameResponse_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSetPersonaNameResponse_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_SetPersonaNameResponse_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSetPersonaNameResponse_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CSetPersonaNameResponse_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CUserStatsReceived_t_CallResult
+{
+ public CUserStatsReceived_t_CallResult() { }
+ ~CUserStatsReceived_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CUserStatsReceived_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_UserStatsReceived_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CUserStatsReceived_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CUserStatsReceived_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CSteamInventoryEligiblePromoItemDefIDs_t_CallResult
+{
+ public CSteamInventoryEligiblePromoItemDefIDs_t_CallResult() { }
+ ~CSteamInventoryEligiblePromoItemDefIDs_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSteamInventoryEligiblePromoItemDefIDs_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_SteamInventoryEligiblePromoItemDefIDs_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSteamInventoryEligiblePromoItemDefIDs_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CSteamInventoryEligiblePromoItemDefIDs_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CJoinClanChatRoomCompletionResult_t_CallResult
+{
+ public CJoinClanChatRoomCompletionResult_t_CallResult() { }
+ ~CJoinClanChatRoomCompletionResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CJoinClanChatRoomCompletionResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_JoinClanChatRoomCompletionResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CJoinClanChatRoomCompletionResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CJoinClanChatRoomCompletionResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CLeaderboardFindResult_t_CallResult
+{
+ public CLeaderboardFindResult_t_CallResult() { }
+ ~CLeaderboardFindResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLeaderboardFindResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_LeaderboardFindResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLeaderboardFindResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CLeaderboardFindResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class SteamAPIInterop
+{
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_RestartAppIfNecessary")]
+internal static extern void SteamAPI_RestartAppIfNecessary(uint unOwnAppID );
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_Init")]
+internal static extern void SteamAPI_Init();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_RunCallbacks")]
+internal static extern void SteamAPI_RunCallbacks();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_RegisterCallback")]
+internal static extern void SteamAPI_RegisterCallback(IntPtr pCallback, int iCallback);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_UnregisterCallback")]
+internal static extern void SteamAPI_UnregisterCallback(IntPtr pCallback);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamClient")]
+internal static extern IntPtr SteamClient();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamUser")]
+internal static extern IntPtr SteamUser();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamFriends")]
+internal static extern IntPtr SteamFriends();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamUtils")]
+internal static extern IntPtr SteamUtils();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamMatchmaking")]
+internal static extern IntPtr SteamMatchmaking();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamMatchmakingServerListResponse")]
+internal static extern IntPtr SteamMatchmakingServerListResponse();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamMatchmakingPingResponse")]
+internal static extern IntPtr SteamMatchmakingPingResponse();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamMatchmakingPlayersResponse")]
+internal static extern IntPtr SteamMatchmakingPlayersResponse();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamMatchmakingRulesResponse")]
+internal static extern IntPtr SteamMatchmakingRulesResponse();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamMatchmakingServers")]
+internal static extern IntPtr SteamMatchmakingServers();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamRemoteStorage")]
+internal static extern IntPtr SteamRemoteStorage();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamUserStats")]
+internal static extern IntPtr SteamUserStats();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamApps")]
+internal static extern IntPtr SteamApps();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamNetworking")]
+internal static extern IntPtr SteamNetworking();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamScreenshots")]
+internal static extern IntPtr SteamScreenshots();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamMusic")]
+internal static extern IntPtr SteamMusic();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamMusicRemote")]
+internal static extern IntPtr SteamMusicRemote();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamHTTP")]
+internal static extern IntPtr SteamHTTP();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamUnifiedMessages")]
+internal static extern IntPtr SteamUnifiedMessages();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamController")]
+internal static extern IntPtr SteamController();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamUGC")]
+internal static extern IntPtr SteamUGC();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAppList")]
+internal static extern IntPtr SteamAppList();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamHTMLSurface")]
+internal static extern IntPtr SteamHTMLSurface();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamInventory")]
+internal static extern IntPtr SteamInventory();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamVideo")]
+internal static extern IntPtr SteamVideo();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamGameServer")]
+internal static extern IntPtr SteamGameServer();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamGameServerStats")]
+internal static extern IntPtr SteamGameServerStats();
+}
+
+
+public enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseMax = 5,
+}
+public enum EResult
+{
+ k_EResultOK = 1,
+ k_EResultFail = 2,
+ k_EResultNoConnection = 3,
+ k_EResultInvalidPassword = 5,
+ k_EResultLoggedInElsewhere = 6,
+ k_EResultInvalidProtocolVer = 7,
+ k_EResultInvalidParam = 8,
+ k_EResultFileNotFound = 9,
+ k_EResultBusy = 10,
+ k_EResultInvalidState = 11,
+ k_EResultInvalidName = 12,
+ k_EResultInvalidEmail = 13,
+ k_EResultDuplicateName = 14,
+ k_EResultAccessDenied = 15,
+ k_EResultTimeout = 16,
+ k_EResultBanned = 17,
+ k_EResultAccountNotFound = 18,
+ k_EResultInvalidSteamID = 19,
+ k_EResultServiceUnavailable = 20,
+ k_EResultNotLoggedOn = 21,
+ k_EResultPending = 22,
+ k_EResultEncryptionFailure = 23,
+ k_EResultInsufficientPrivilege = 24,
+ k_EResultLimitExceeded = 25,
+ k_EResultRevoked = 26,
+ k_EResultExpired = 27,
+ k_EResultAlreadyRedeemed = 28,
+ k_EResultDuplicateRequest = 29,
+ k_EResultAlreadyOwned = 30,
+ k_EResultIPNotFound = 31,
+ k_EResultPersistFailed = 32,
+ k_EResultLockingFailed = 33,
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39,
+ k_EResultBlocked = 40,
+ k_EResultIgnored = 41,
+ k_EResultNoMatch = 42,
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44,
+ k_EResultAccountNotFeatured = 45,
+ k_EResultAdministratorOK = 46,
+ k_EResultContentVersion = 47,
+ k_EResultTryAnotherCM = 48,
+ k_EResultPasswordRequiredToKickSession = 49,
+ k_EResultAlreadyLoggedInElsewhere = 50,
+ k_EResultSuspended = 51,
+ k_EResultCancelled = 52,
+ k_EResultDataCorruption = 53,
+ k_EResultDiskFull = 54,
+ k_EResultRemoteCallFailed = 55,
+ k_EResultPasswordUnset = 56,
+ k_EResultExternalAccountUnlinked = 57,
+ k_EResultPSNTicketInvalid = 58,
+ k_EResultExternalAccountAlreadyLinked = 59,
+ k_EResultRemoteFileConflict = 60,
+ k_EResultIllegalPassword = 61,
+ k_EResultSameAsPreviousValue = 62,
+ k_EResultAccountLogonDenied = 63,
+ k_EResultCannotUseOldPassword = 64,
+ k_EResultInvalidLoginAuthCode = 65,
+ k_EResultAccountLogonDeniedNoMail = 66,
+ k_EResultHardwareNotCapableOfIPT = 67,
+ k_EResultIPTInitError = 68,
+ k_EResultParentalControlRestricted = 69,
+ k_EResultFacebookQueryError = 70,
+ k_EResultExpiredLoginAuthCode = 71,
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76,
+ k_EResultRequirePasswordReEntry = 77,
+ k_EResultValueOutOfRange = 78,
+ k_EResultUnexpectedError = 79,
+ k_EResultDisabled = 80,
+ k_EResultInvalidCEGSubmission = 81,
+ k_EResultRestrictedDevice = 82,
+ k_EResultRegionLocked = 83,
+ k_EResultRateLimitExceeded = 84,
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85,
+ k_EResultItemDeleted = 86,
+ k_EResultAccountLoginDeniedThrottle = 87,
+ k_EResultTwoFactorCodeMismatch = 88,
+ k_EResultTwoFactorActivationCodeMismatch = 89,
+ k_EResultAccountAssociatedToMultiplePartners = 90,
+ k_EResultNotModified = 91,
+ k_EResultNoMobileDevice = 92,
+ k_EResultTimeNotSynced = 93,
+ k_EResultSmsCodeFailed = 94,
+ k_EResultAccountLimitExceeded = 95,
+ k_EResultAccountActivityLimitExceeded = 96,
+ k_EResultPhoneActivityLimitExceeded = 97,
+ k_EResultRefundToWallet = 98,
+ k_EResultEmailSendFailure = 99,
+ k_EResultNotSettled = 100,
+ k_EResultNeedCaptcha = 101,
+ k_EResultGSLTDenied = 102,
+ k_EResultGSOwnerDenied = 103,
+ k_EResultInvalidItemType = 104,
+ k_EResultIPBanned = 105,
+ k_EResultGSLTExpired = 106,
+}
+public enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+ k_EVoiceResultReceiverOutOfDate = 8,
+ k_EVoiceResultReceiverDidNotAnswer = 9,
+}
+public enum EDenyReason
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+}
+public enum EBeginAuthSessionResult
+{
+ k_EBeginAuthSessionResultOK = 0,
+ k_EBeginAuthSessionResultInvalidTicket = 1,
+ k_EBeginAuthSessionResultDuplicateRequest = 2,
+ k_EBeginAuthSessionResultInvalidVersion = 3,
+ k_EBeginAuthSessionResultGameMismatch = 4,
+ k_EBeginAuthSessionResultExpiredTicket = 5,
+}
+public enum EAuthSessionResponse
+{
+ k_EAuthSessionResponseOK = 0,
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1,
+ k_EAuthSessionResponseNoLicenseOrExpired = 2,
+ k_EAuthSessionResponseVACBanned = 3,
+ k_EAuthSessionResponseLoggedInElseWhere = 4,
+ k_EAuthSessionResponseVACCheckTimedOut = 5,
+ k_EAuthSessionResponseAuthTicketCanceled = 6,
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7,
+ k_EAuthSessionResponseAuthTicketInvalid = 8,
+ k_EAuthSessionResponsePublisherIssuedBan = 9,
+}
+public enum EUserHasLicenseForAppResult
+{
+ k_EUserHasLicenseResultHasLicense = 0,
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1,
+ k_EUserHasLicenseResultNoAuth = 2,
+}
+public enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1,
+ k_EAccountTypeMultiseat = 2,
+ k_EAccountTypeGameServer = 3,
+ k_EAccountTypeAnonGameServer = 4,
+ k_EAccountTypePending = 5,
+ k_EAccountTypeContentServer = 6,
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9,
+ k_EAccountTypeAnonUser = 10,
+ k_EAccountTypeMax = 11,
+}
+public enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0,
+ k_EAppReleaseState_Unavailable = 1,
+ k_EAppReleaseState_Prerelease = 2,
+ k_EAppReleaseState_PreloadOnly = 3,
+ k_EAppReleaseState_Released = 4,
+}
+public enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0,
+ k_EAppOwnershipFlags_OwnsLicense = 1,
+ k_EAppOwnershipFlags_FreeLicense = 2,
+ k_EAppOwnershipFlags_RegionRestricted = 4,
+ k_EAppOwnershipFlags_LowViolence = 8,
+ k_EAppOwnershipFlags_InvalidPlatform = 16,
+ k_EAppOwnershipFlags_SharedLicense = 32,
+ k_EAppOwnershipFlags_FreeWeekend = 64,
+ k_EAppOwnershipFlags_RetailLicense = 128,
+ k_EAppOwnershipFlags_LicenseLocked = 256,
+ k_EAppOwnershipFlags_LicensePending = 512,
+ k_EAppOwnershipFlags_LicenseExpired = 1024,
+ k_EAppOwnershipFlags_LicensePermanent = 2048,
+ k_EAppOwnershipFlags_LicenseRecurring = 4096,
+ k_EAppOwnershipFlags_LicenseCanceled = 8192,
+ k_EAppOwnershipFlags_AutoGrant = 16384,
+ k_EAppOwnershipFlags_PendingGift = 32768,
+ k_EAppOwnershipFlags_RentalNotActivated = 65536,
+ k_EAppOwnershipFlags_Rental = 131072,
+}
+public enum EAppType
+{
+ k_EAppType_Invalid = 0,
+ k_EAppType_Game = 1,
+ k_EAppType_Application = 2,
+ k_EAppType_Tool = 4,
+ k_EAppType_Demo = 8,
+ k_EAppType_Media_DEPRECATED = 16,
+ k_EAppType_DLC = 32,
+ k_EAppType_Guide = 64,
+ k_EAppType_Driver = 128,
+ k_EAppType_Config = 256,
+ k_EAppType_Hardware = 512,
+ k_EAppType_Franchise = 1024,
+ k_EAppType_Video = 2048,
+ k_EAppType_Plugin = 4096,
+ k_EAppType_Music = 8192,
+ k_EAppType_Series = 16384,
+ k_EAppType_Shortcut = 1073741824,
+ k_EAppType_DepotOnly = -2147483648,
+}
+public enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+ k_ESteamUserStatTypeMAX = 6,
+}
+public enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1,
+ k_EChatEntryTypeTyping = 2,
+ k_EChatEntryTypeInviteGame = 3,
+ k_EChatEntryTypeEmote = 4,
+ k_EChatEntryTypeLeftConversation = 6,
+ k_EChatEntryTypeEntered = 7,
+ k_EChatEntryTypeWasKicked = 8,
+ k_EChatEntryTypeWasBanned = 9,
+ k_EChatEntryTypeDisconnected = 10,
+ k_EChatEntryTypeHistoricalChat = 11,
+ k_EChatEntryTypeLinkBlocked = 14,
+}
+public enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1,
+ k_EChatRoomEnterResponseDoesntExist = 2,
+ k_EChatRoomEnterResponseNotAllowed = 3,
+ k_EChatRoomEnterResponseFull = 4,
+ k_EChatRoomEnterResponseError = 5,
+ k_EChatRoomEnterResponseBanned = 6,
+ k_EChatRoomEnterResponseLimited = 7,
+ k_EChatRoomEnterResponseClanDisabled = 8,
+ k_EChatRoomEnterResponseCommunityBan = 9,
+ k_EChatRoomEnterResponseMemberBlockedYou = 10,
+ k_EChatRoomEnterResponseYouBlockedMember = 11,
+}
+public enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 4095,
+ k_EChatInstanceFlagClan = 524288,
+ k_EChatInstanceFlagLobby = 262144,
+ k_EChatInstanceFlagMMSLobby = 131072,
+}
+public enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1,
+ k_EMarketingMessageFlagsPlatformWindows = 2,
+ k_EMarketingMessageFlagsPlatformMac = 4,
+ k_EMarketingMessageFlagsPlatformLinux = 8,
+ k_EMarketingMessageFlagsPlatformRestrictions = 14,
+}
+public enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+}
+public enum EBroadcastUploadResult
+{
+ k_EBroadcastUploadResultNone = 0,
+ k_EBroadcastUploadResultOK = 1,
+ k_EBroadcastUploadResultInitFailed = 2,
+ k_EBroadcastUploadResultFrameFailed = 3,
+ k_EBroadcastUploadResultTimeout = 4,
+ k_EBroadcastUploadResultBandwidthExceeded = 5,
+ k_EBroadcastUploadResultLowFPS = 6,
+ k_EBroadcastUploadResultMissingKeyFrames = 7,
+ k_EBroadcastUploadResultNoConnection = 8,
+ k_EBroadcastUploadResultRelayFailed = 9,
+ k_EBroadcastUploadResultSettingsChanged = 10,
+ k_EBroadcastUploadResultMissingAudio = 11,
+ k_EBroadcastUploadResultTooFarBehind = 12,
+ k_EBroadcastUploadResultTranscodeBehind = 13,
+}
+public enum ELaunchOptionType
+{
+ k_ELaunchOptionType_None = 0,
+ k_ELaunchOptionType_Default = 1,
+ k_ELaunchOptionType_SafeMode = 2,
+ k_ELaunchOptionType_Multiplayer = 3,
+ k_ELaunchOptionType_Config = 4,
+ k_ELaunchOptionType_OpenVR = 5,
+ k_ELaunchOptionType_Server = 6,
+ k_ELaunchOptionType_Editor = 7,
+ k_ELaunchOptionType_Manual = 8,
+ k_ELaunchOptionType_Benchmark = 9,
+ k_ELaunchOptionType_Option1 = 10,
+ k_ELaunchOptionType_Option2 = 11,
+ k_ELaunchOptionType_Option3 = 12,
+ k_ELaunchOptionType_OculusVR = 13,
+ k_ELaunchOptionType_OpenVROverlay = 14,
+ k_ELaunchOptionType_OSVR = 15,
+ k_ELaunchOptionType_Dialog = 1000,
+}
+public enum EVRHMDType
+{
+ k_eEVRHMDType_None = -1,
+ k_eEVRHMDType_Unknown = 0,
+ k_eEVRHMDType_HTC_Dev = 1,
+ k_eEVRHMDType_HTC_VivePre = 2,
+ k_eEVRHMDType_HTC_Vive = 3,
+ k_eEVRHMDType_HTC_Unknown = 20,
+ k_eEVRHMDType_Oculus_DK1 = 21,
+ k_eEVRHMDType_Oculus_DK2 = 22,
+ k_eEVRHMDType_Oculus_Rift = 23,
+ k_eEVRHMDType_Oculus_Unknown = 40,
+}
+public enum EFailureType
+{
+ k_EFailureFlushedCallbackQueue = 0,
+ k_EFailurePipeFail = 1,
+}
+public enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested_DEPRECATED = 7,
+ k_EFriendRelationshipMax = 8,
+}
+public enum EPersonaState
+{
+ k_EPersonaStateOffline = 0,
+ k_EPersonaStateOnline = 1,
+ k_EPersonaStateBusy = 2,
+ k_EPersonaStateAway = 3,
+ k_EPersonaStateSnooze = 4,
+ k_EPersonaStateLookingToTrade = 5,
+ k_EPersonaStateLookingToPlay = 6,
+ k_EPersonaStateMax = 7,
+}
+public enum EFriendFlags
+{
+ k_EFriendFlagNone = 0,
+ k_EFriendFlagBlocked = 1,
+ k_EFriendFlagFriendshipRequested = 2,
+ k_EFriendFlagImmediate = 4,
+ k_EFriendFlagClanMember = 8,
+ k_EFriendFlagOnGameServer = 16,
+ k_EFriendFlagRequestingFriendship = 128,
+ k_EFriendFlagRequestingInfo = 256,
+ k_EFriendFlagIgnored = 512,
+ k_EFriendFlagIgnoredFriend = 1024,
+ k_EFriendFlagChatMember = 4096,
+ k_EFriendFlagAll = 65535,
+}
+public enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0,
+ k_nUserRestrictionUnknown = 1,
+ k_nUserRestrictionAnyChat = 2,
+ k_nUserRestrictionVoiceChat = 4,
+ k_nUserRestrictionGroupChat = 8,
+ k_nUserRestrictionRating = 16,
+ k_nUserRestrictionGameInvites = 32,
+ k_nUserRestrictionTrading = 64,
+}
+public enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+}
+public enum EPersonaChange
+{
+ k_EPersonaChangeName = 1,
+ k_EPersonaChangeStatus = 2,
+ k_EPersonaChangeComeOnline = 4,
+ k_EPersonaChangeGoneOffline = 8,
+ k_EPersonaChangeGamePlayed = 16,
+ k_EPersonaChangeGameServer = 32,
+ k_EPersonaChangeAvatar = 64,
+ k_EPersonaChangeJoinedSource = 128,
+ k_EPersonaChangeLeftSource = 256,
+ k_EPersonaChangeRelationshipChanged = 512,
+ k_EPersonaChangeNameFirstSet = 1024,
+ k_EPersonaChangeFacebookInfo = 2048,
+ k_EPersonaChangeNickname = 4096,
+ k_EPersonaChangeSteamLevel = 8192,
+}
+public enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1,
+ k_ESteamAPICallFailureSteamGone = 0,
+ k_ESteamAPICallFailureNetworkFailure = 1,
+ k_ESteamAPICallFailureInvalidHandle = 2,
+ k_ESteamAPICallFailureMismatchedCallback = 3,
+}
+public enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1,
+}
+public enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1,
+}
+public enum ECheckFileSignature
+{
+ k_ECheckFileSignatureInvalidSignature = 0,
+ k_ECheckFileSignatureValidSignature = 1,
+ k_ECheckFileSignatureFileNotFound = 2,
+ k_ECheckFileSignatureNoSignaturesFoundForThisApp = 3,
+ k_ECheckFileSignatureNoSignaturesFoundForThisFile = 4,
+}
+public enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond = 1,
+ eNoServersListedOnMasterServer = 2,
+}
+public enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0,
+ k_ELobbyTypeFriendsOnly = 1,
+ k_ELobbyTypePublic = 2,
+ k_ELobbyTypeInvisible = 3,
+}
+public enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+}
+public enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose = 0,
+ k_ELobbyDistanceFilterDefault = 1,
+ k_ELobbyDistanceFilterFar = 2,
+ k_ELobbyDistanceFilterWorldwide = 3,
+}
+public enum EChatMemberStateChange
+{
+ k_EChatMemberStateChangeEntered = 1,
+ k_EChatMemberStateChangeLeft = 2,
+ k_EChatMemberStateChangeDisconnected = 4,
+ k_EChatMemberStateChangeKicked = 8,
+ k_EChatMemberStateChangeBanned = 16,
+}
+public enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = 1,
+ k_ERemoteStoragePlatformOSX = 2,
+ k_ERemoteStoragePlatformPS3 = 4,
+ k_ERemoteStoragePlatformLinux = 8,
+ k_ERemoteStoragePlatformReserved2 = 16,
+ k_ERemoteStoragePlatformAll = -1,
+}
+public enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+}
+public enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+ k_EWorkshopFileTypeWebGuide = 9,
+ k_EWorkshopFileTypeIntegratedGuide = 10,
+ k_EWorkshopFileTypeMerch = 11,
+ k_EWorkshopFileTypeControllerBinding = 12,
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13,
+ k_EWorkshopFileTypeSteamVideo = 14,
+ k_EWorkshopFileTypeGameManagedItem = 15,
+ k_EWorkshopFileTypeMax = 16,
+}
+public enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+ k_EWorkshopVoteLater = 3,
+}
+public enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+}
+public enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+}
+public enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1,
+}
+public enum EUGCReadAction
+{
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+ k_EUGCRead_ContinueReading = 1,
+ k_EUGCRead_Close = 2,
+}
+public enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3,
+}
+public enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1,
+ k_ELeaderboardSortMethodDescending = 2,
+}
+public enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1,
+ k_ELeaderboardDisplayTypeTimeSeconds = 2,
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3,
+}
+public enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1,
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2,
+}
+public enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+}
+public enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1,
+ k_EP2PSessionErrorNoRightsToApp = 2,
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3,
+ k_EP2PSessionErrorTimeout = 4,
+ k_EP2PSessionErrorMax = 5,
+}
+public enum EP2PSend
+{
+ k_EP2PSendUnreliable = 0,
+ k_EP2PSendUnreliableNoDelay = 1,
+ k_EP2PSendReliable = 2,
+ k_EP2PSendReliableWithBuffering = 3,
+}
+public enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+ k_ESNetSocketStateConnected = 1,
+ k_ESNetSocketStateInitiated = 10,
+ k_ESNetSocketStateLocalCandidatesFound = 11,
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,
+ k_ESNetSocketStateChallengeHandshake = 15,
+ k_ESNetSocketStateDisconnecting = 21,
+ k_ESNetSocketStateLocalDisconnect = 22,
+ k_ESNetSocketStateTimeoutDuringConnect = 23,
+ k_ESNetSocketStateRemoteEndDisconnected = 24,
+ k_ESNetSocketStateConnectionBroken = 25,
+}
+public enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+}
+public enum EVRScreenshotType
+{
+ k_EVRScreenshotType_None = 0,
+ k_EVRScreenshotType_Mono = 1,
+ k_EVRScreenshotType_Stereo = 2,
+ k_EVRScreenshotType_MonoCubemap = 3,
+ k_EVRScreenshotType_MonoPanorama = 4,
+ k_EVRScreenshotType_StereoPanorama = 5,
+}
+public enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3,
+}
+public enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET = 1,
+ k_EHTTPMethodHEAD = 2,
+ k_EHTTPMethodPOST = 3,
+ k_EHTTPMethodPUT = 4,
+ k_EHTTPMethodDELETE = 5,
+ k_EHTTPMethodOPTIONS = 6,
+ k_EHTTPMethodPATCH = 7,
+}
+public enum EHTTPStatusCode
+{
+ k_EHTTPStatusCodeInvalid = 0,
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402,
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+ k_EHTTPStatusCode4xxUnknown = 418,
+ k_EHTTPStatusCode429TooManyRequests = 429,
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+ k_EHTTPStatusCode5xxUnknown = 599,
+}
+public enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left = 0,
+ k_ESteamControllerPad_Right = 1,
+}
+public enum EControllerSource
+{
+ k_EControllerSource_None = 0,
+ k_EControllerSource_LeftTrackpad = 1,
+ k_EControllerSource_RightTrackpad = 2,
+ k_EControllerSource_Joystick = 3,
+ k_EControllerSource_ABXY = 4,
+ k_EControllerSource_Switch = 5,
+ k_EControllerSource_LeftTrigger = 6,
+ k_EControllerSource_RightTrigger = 7,
+ k_EControllerSource_Gyro = 8,
+ k_EControllerSource_CenterTrackpad = 9,
+ k_EControllerSource_RightJoystick = 10,
+ k_EControllerSource_DPad = 11,
+ k_EControllerSource_Count = 12,
+}
+public enum EControllerSourceMode
+{
+ k_EControllerSourceMode_None = 0,
+ k_EControllerSourceMode_Dpad = 1,
+ k_EControllerSourceMode_Buttons = 2,
+ k_EControllerSourceMode_FourButtons = 3,
+ k_EControllerSourceMode_AbsoluteMouse = 4,
+ k_EControllerSourceMode_RelativeMouse = 5,
+ k_EControllerSourceMode_JoystickMove = 6,
+ k_EControllerSourceMode_JoystickMouse = 7,
+ k_EControllerSourceMode_JoystickCamera = 8,
+ k_EControllerSourceMode_ScrollWheel = 9,
+ k_EControllerSourceMode_Trigger = 10,
+ k_EControllerSourceMode_TouchMenu = 11,
+ k_EControllerSourceMode_MouseJoystick = 12,
+ k_EControllerSourceMode_MouseRegion = 13,
+ k_EControllerSourceMode_RadialMenu = 14,
+ k_EControllerSourceMode_Switches = 15,
+}
+public enum EControllerActionOrigin
+{
+ k_EControllerActionOrigin_None = 0,
+ k_EControllerActionOrigin_A = 1,
+ k_EControllerActionOrigin_B = 2,
+ k_EControllerActionOrigin_X = 3,
+ k_EControllerActionOrigin_Y = 4,
+ k_EControllerActionOrigin_LeftBumper = 5,
+ k_EControllerActionOrigin_RightBumper = 6,
+ k_EControllerActionOrigin_LeftGrip = 7,
+ k_EControllerActionOrigin_RightGrip = 8,
+ k_EControllerActionOrigin_Start = 9,
+ k_EControllerActionOrigin_Back = 10,
+ k_EControllerActionOrigin_LeftPad_Touch = 11,
+ k_EControllerActionOrigin_LeftPad_Swipe = 12,
+ k_EControllerActionOrigin_LeftPad_Click = 13,
+ k_EControllerActionOrigin_LeftPad_DPadNorth = 14,
+ k_EControllerActionOrigin_LeftPad_DPadSouth = 15,
+ k_EControllerActionOrigin_LeftPad_DPadWest = 16,
+ k_EControllerActionOrigin_LeftPad_DPadEast = 17,
+ k_EControllerActionOrigin_RightPad_Touch = 18,
+ k_EControllerActionOrigin_RightPad_Swipe = 19,
+ k_EControllerActionOrigin_RightPad_Click = 20,
+ k_EControllerActionOrigin_RightPad_DPadNorth = 21,
+ k_EControllerActionOrigin_RightPad_DPadSouth = 22,
+ k_EControllerActionOrigin_RightPad_DPadWest = 23,
+ k_EControllerActionOrigin_RightPad_DPadEast = 24,
+ k_EControllerActionOrigin_LeftTrigger_Pull = 25,
+ k_EControllerActionOrigin_LeftTrigger_Click = 26,
+ k_EControllerActionOrigin_RightTrigger_Pull = 27,
+ k_EControllerActionOrigin_RightTrigger_Click = 28,
+ k_EControllerActionOrigin_LeftStick_Move = 29,
+ k_EControllerActionOrigin_LeftStick_Click = 30,
+ k_EControllerActionOrigin_LeftStick_DPadNorth = 31,
+ k_EControllerActionOrigin_LeftStick_DPadSouth = 32,
+ k_EControllerActionOrigin_LeftStick_DPadWest = 33,
+ k_EControllerActionOrigin_LeftStick_DPadEast = 34,
+ k_EControllerActionOrigin_Gyro_Move = 35,
+ k_EControllerActionOrigin_Gyro_Pitch = 36,
+ k_EControllerActionOrigin_Gyro_Yaw = 37,
+ k_EControllerActionOrigin_Gyro_Roll = 38,
+ k_EControllerActionOrigin_PS4_X = 39,
+ k_EControllerActionOrigin_PS4_Circle = 40,
+ k_EControllerActionOrigin_PS4_Triangle = 41,
+ k_EControllerActionOrigin_PS4_Square = 42,
+ k_EControllerActionOrigin_PS4_LeftBumper = 43,
+ k_EControllerActionOrigin_PS4_RightBumper = 44,
+ k_EControllerActionOrigin_PS4_Options = 45,
+ k_EControllerActionOrigin_PS4_Share = 46,
+ k_EControllerActionOrigin_PS4_LeftPad_Touch = 47,
+ k_EControllerActionOrigin_PS4_LeftPad_Swipe = 48,
+ k_EControllerActionOrigin_PS4_LeftPad_Click = 49,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadNorth = 50,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadSouth = 51,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadWest = 52,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadEast = 53,
+ k_EControllerActionOrigin_PS4_RightPad_Touch = 54,
+ k_EControllerActionOrigin_PS4_RightPad_Swipe = 55,
+ k_EControllerActionOrigin_PS4_RightPad_Click = 56,
+ k_EControllerActionOrigin_PS4_RightPad_DPadNorth = 57,
+ k_EControllerActionOrigin_PS4_RightPad_DPadSouth = 58,
+ k_EControllerActionOrigin_PS4_RightPad_DPadWest = 59,
+ k_EControllerActionOrigin_PS4_RightPad_DPadEast = 60,
+ k_EControllerActionOrigin_PS4_CenterPad_Touch = 61,
+ k_EControllerActionOrigin_PS4_CenterPad_Swipe = 62,
+ k_EControllerActionOrigin_PS4_CenterPad_Click = 63,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadNorth = 64,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadSouth = 65,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadWest = 66,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadEast = 67,
+ k_EControllerActionOrigin_PS4_LeftTrigger_Pull = 68,
+ k_EControllerActionOrigin_PS4_LeftTrigger_Click = 69,
+ k_EControllerActionOrigin_PS4_RightTrigger_Pull = 70,
+ k_EControllerActionOrigin_PS4_RightTrigger_Click = 71,
+ k_EControllerActionOrigin_PS4_LeftStick_Move = 72,
+ k_EControllerActionOrigin_PS4_LeftStick_Click = 73,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadNorth = 74,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadSouth = 75,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadWest = 76,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadEast = 77,
+ k_EControllerActionOrigin_PS4_RightStick_Move = 78,
+ k_EControllerActionOrigin_PS4_RightStick_Click = 79,
+ k_EControllerActionOrigin_PS4_RightStick_DPadNorth = 80,
+ k_EControllerActionOrigin_PS4_RightStick_DPadSouth = 81,
+ k_EControllerActionOrigin_PS4_RightStick_DPadWest = 82,
+ k_EControllerActionOrigin_PS4_RightStick_DPadEast = 83,
+ k_EControllerActionOrigin_PS4_DPad_North = 84,
+ k_EControllerActionOrigin_PS4_DPad_South = 85,
+ k_EControllerActionOrigin_PS4_DPad_West = 86,
+ k_EControllerActionOrigin_PS4_DPad_East = 87,
+ k_EControllerActionOrigin_PS4_Gyro_Move = 88,
+ k_EControllerActionOrigin_PS4_Gyro_Pitch = 89,
+ k_EControllerActionOrigin_PS4_Gyro_Yaw = 90,
+ k_EControllerActionOrigin_PS4_Gyro_Roll = 91,
+ k_EControllerActionOrigin_XBoxOne_A = 92,
+ k_EControllerActionOrigin_XBoxOne_B = 93,
+ k_EControllerActionOrigin_XBoxOne_X = 94,
+ k_EControllerActionOrigin_XBoxOne_Y = 95,
+ k_EControllerActionOrigin_XBoxOne_LeftBumper = 96,
+ k_EControllerActionOrigin_XBoxOne_RightBumper = 97,
+ k_EControllerActionOrigin_XBoxOne_Menu = 98,
+ k_EControllerActionOrigin_XBoxOne_View = 99,
+ k_EControllerActionOrigin_XBoxOne_LeftTrigger_Pull = 100,
+ k_EControllerActionOrigin_XBoxOne_LeftTrigger_Click = 101,
+ k_EControllerActionOrigin_XBoxOne_RightTrigger_Pull = 102,
+ k_EControllerActionOrigin_XBoxOne_RightTrigger_Click = 103,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_Move = 104,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_Click = 105,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadNorth = 106,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadSouth = 107,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadWest = 108,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadEast = 109,
+ k_EControllerActionOrigin_XBoxOne_RightStick_Move = 110,
+ k_EControllerActionOrigin_XBoxOne_RightStick_Click = 111,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadNorth = 112,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadSouth = 113,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadWest = 114,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadEast = 115,
+ k_EControllerActionOrigin_XBoxOne_DPad_North = 116,
+ k_EControllerActionOrigin_XBoxOne_DPad_South = 117,
+ k_EControllerActionOrigin_XBoxOne_DPad_West = 118,
+ k_EControllerActionOrigin_XBoxOne_DPad_East = 119,
+ k_EControllerActionOrigin_XBox360_A = 120,
+ k_EControllerActionOrigin_XBox360_B = 121,
+ k_EControllerActionOrigin_XBox360_X = 122,
+ k_EControllerActionOrigin_XBox360_Y = 123,
+ k_EControllerActionOrigin_XBox360_LeftBumper = 124,
+ k_EControllerActionOrigin_XBox360_RightBumper = 125,
+ k_EControllerActionOrigin_XBox360_Start = 126,
+ k_EControllerActionOrigin_XBox360_Back = 127,
+ k_EControllerActionOrigin_XBox360_LeftTrigger_Pull = 128,
+ k_EControllerActionOrigin_XBox360_LeftTrigger_Click = 129,
+ k_EControllerActionOrigin_XBox360_RightTrigger_Pull = 130,
+ k_EControllerActionOrigin_XBox360_RightTrigger_Click = 131,
+ k_EControllerActionOrigin_XBox360_LeftStick_Move = 132,
+ k_EControllerActionOrigin_XBox360_LeftStick_Click = 133,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadNorth = 134,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadSouth = 135,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadWest = 136,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadEast = 137,
+ k_EControllerActionOrigin_XBox360_RightStick_Move = 138,
+ k_EControllerActionOrigin_XBox360_RightStick_Click = 139,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadNorth = 140,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadSouth = 141,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadWest = 142,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadEast = 143,
+ k_EControllerActionOrigin_XBox360_DPad_North = 144,
+ k_EControllerActionOrigin_XBox360_DPad_South = 145,
+ k_EControllerActionOrigin_XBox360_DPad_West = 146,
+ k_EControllerActionOrigin_XBox360_DPad_East = 147,
+ k_EControllerActionOrigin_SteamV2_A = 148,
+ k_EControllerActionOrigin_SteamV2_B = 149,
+ k_EControllerActionOrigin_SteamV2_X = 150,
+ k_EControllerActionOrigin_SteamV2_Y = 151,
+ k_EControllerActionOrigin_SteamV2_LeftBumper = 152,
+ k_EControllerActionOrigin_SteamV2_RightBumper = 153,
+ k_EControllerActionOrigin_SteamV2_LeftGrip = 154,
+ k_EControllerActionOrigin_SteamV2_RightGrip = 155,
+ k_EControllerActionOrigin_SteamV2_Start = 156,
+ k_EControllerActionOrigin_SteamV2_Back = 157,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Touch = 158,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Swipe = 159,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Click = 160,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadNorth = 161,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadSouth = 162,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadWest = 163,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadEast = 164,
+ k_EControllerActionOrigin_SteamV2_RightPad_Touch = 165,
+ k_EControllerActionOrigin_SteamV2_RightPad_Swipe = 166,
+ k_EControllerActionOrigin_SteamV2_RightPad_Click = 167,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadNorth = 168,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadSouth = 169,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadWest = 170,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadEast = 171,
+ k_EControllerActionOrigin_SteamV2_LeftTrigger_Pull = 172,
+ k_EControllerActionOrigin_SteamV2_LeftTrigger_Click = 173,
+ k_EControllerActionOrigin_SteamV2_RightTrigger_Pull = 174,
+ k_EControllerActionOrigin_SteamV2_RightTrigger_Click = 175,
+ k_EControllerActionOrigin_SteamV2_LeftStick_Move = 176,
+ k_EControllerActionOrigin_SteamV2_LeftStick_Click = 177,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadNorth = 178,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadSouth = 179,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadWest = 180,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadEast = 181,
+ k_EControllerActionOrigin_SteamV2_Gyro_Move = 182,
+ k_EControllerActionOrigin_SteamV2_Gyro_Pitch = 183,
+ k_EControllerActionOrigin_SteamV2_Gyro_Yaw = 184,
+ k_EControllerActionOrigin_SteamV2_Gyro_Roll = 185,
+ k_EControllerActionOrigin_Count = 186,
+}
+public enum ESteamControllerLEDFlag
+{
+ k_ESteamControllerLEDFlag_SetColor = 0,
+ k_ESteamControllerLEDFlag_RestoreUserDefault = 1,
+}
+public enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0,
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7,
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10,
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+ k_EUGCMatchingUGCType_GameManagedItems = 12,
+ k_EUGCMatchingUGCType_All = -1,
+}
+public enum EUserUGCList
+{
+ k_EUserUGCList_Published = 0,
+ k_EUserUGCList_VotedOn = 1,
+ k_EUserUGCList_VotedUp = 2,
+ k_EUserUGCList_VotedDown = 3,
+ k_EUserUGCList_WillVoteLater = 4,
+ k_EUserUGCList_Favorited = 5,
+ k_EUserUGCList_Subscribed = 6,
+ k_EUserUGCList_UsedOrPlayed = 7,
+ k_EUserUGCList_Followed = 8,
+}
+public enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc = 0,
+ k_EUserUGCListSortOrder_CreationOrderAsc = 1,
+ k_EUserUGCListSortOrder_TitleAsc = 2,
+ k_EUserUGCListSortOrder_LastUpdatedDesc = 3,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc = 4,
+ k_EUserUGCListSortOrder_VoteScoreDesc = 5,
+ k_EUserUGCListSortOrder_ForModeration = 6,
+}
+public enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+ k_EUGCQuery_RankedByTotalUniqueSubscriptions = 12,
+ k_EUGCQuery_RankedByPlaytimeTrend = 13,
+ k_EUGCQuery_RankedByTotalPlaytime = 14,
+ k_EUGCQuery_RankedByAveragePlaytimeTrend = 15,
+ k_EUGCQuery_RankedByLifetimeAveragePlaytime = 16,
+ k_EUGCQuery_RankedByPlaytimeSessionsTrend = 17,
+ k_EUGCQuery_RankedByLifetimePlaytimeSessions = 18,
+}
+public enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0,
+ k_EItemUpdateStatusPreparingConfig = 1,
+ k_EItemUpdateStatusPreparingContent = 2,
+ k_EItemUpdateStatusUploadingContent = 3,
+ k_EItemUpdateStatusUploadingPreviewFile = 4,
+ k_EItemUpdateStatusCommittingChanges = 5,
+}
+public enum EItemState
+{
+ k_EItemStateNone = 0,
+ k_EItemStateSubscribed = 1,
+ k_EItemStateLegacyItem = 2,
+ k_EItemStateInstalled = 4,
+ k_EItemStateNeedsUpdate = 8,
+ k_EItemStateDownloading = 16,
+ k_EItemStateDownloadPending = 32,
+}
+public enum EItemStatistic
+{
+ k_EItemStatistic_NumSubscriptions = 0,
+ k_EItemStatistic_NumFavorites = 1,
+ k_EItemStatistic_NumFollowers = 2,
+ k_EItemStatistic_NumUniqueSubscriptions = 3,
+ k_EItemStatistic_NumUniqueFavorites = 4,
+ k_EItemStatistic_NumUniqueFollowers = 5,
+ k_EItemStatistic_NumUniqueWebsiteViews = 6,
+ k_EItemStatistic_ReportScore = 7,
+ k_EItemStatistic_NumSecondsPlayed = 8,
+ k_EItemStatistic_NumPlaytimeSessions = 9,
+ k_EItemStatistic_NumComments = 10,
+}
+public enum EItemPreviewType
+{
+ k_EItemPreviewType_Image = 0,
+ k_EItemPreviewType_YouTubeVideo = 1,
+ k_EItemPreviewType_Sketchfab = 2,
+ k_EItemPreviewType_EnvironmentMap_HorizontalCross = 3,
+ k_EItemPreviewType_EnvironmentMap_LatLong = 4,
+ k_EItemPreviewType_ReservedMax = 255,
+}
+public enum EHTMLMouseButton
+{
+ eHTMLMouseButton_Left = 0,
+ eHTMLMouseButton_Right = 1,
+ eHTMLMouseButton_Middle = 2,
+}
+public enum EMouseCursor
+{
+ dc_user = 0,
+ dc_none = 1,
+ dc_arrow = 2,
+ dc_ibeam = 3,
+ dc_hourglass = 4,
+ dc_waitarrow = 5,
+ dc_crosshair = 6,
+ dc_up = 7,
+ dc_sizenw = 8,
+ dc_sizese = 9,
+ dc_sizene = 10,
+ dc_sizesw = 11,
+ dc_sizew = 12,
+ dc_sizee = 13,
+ dc_sizen = 14,
+ dc_sizes = 15,
+ dc_sizewe = 16,
+ dc_sizens = 17,
+ dc_sizeall = 18,
+ dc_no = 19,
+ dc_hand = 20,
+ dc_blank = 21,
+ dc_middle_pan = 22,
+ dc_north_pan = 23,
+ dc_north_east_pan = 24,
+ dc_east_pan = 25,
+ dc_south_east_pan = 26,
+ dc_south_pan = 27,
+ dc_south_west_pan = 28,
+ dc_west_pan = 29,
+ dc_north_west_pan = 30,
+ dc_alias = 31,
+ dc_cell = 32,
+ dc_colresize = 33,
+ dc_copycur = 34,
+ dc_verticaltext = 35,
+ dc_rowresize = 36,
+ dc_zoomin = 37,
+ dc_zoomout = 38,
+ dc_help = 39,
+ dc_custom = 40,
+ dc_last = 41,
+}
+public enum EHTMLKeyModifiers
+{
+ k_eHTMLKeyModifier_None = 0,
+ k_eHTMLKeyModifier_AltDown = 1,
+ k_eHTMLKeyModifier_CtrlDown = 2,
+ k_eHTMLKeyModifier_ShiftDown = 4,
+}
+public enum ESteamItemFlags
+{
+ k_ESteamItemNoTrade = 1,
+ k_ESteamItemRemoved = 256,
+ k_ESteamItemConsumed = 512,
+}
+[StructLayout(LayoutKind.Sequential)] public struct CSteamID
+{
+ public SteamID_t m_steamid;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamID_t
+{
+ public SteamIDComponent_t m_comp;
+ public ulong m_unAll64Bits;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamIDComponent_t
+{
+ public uint m_unAccountID;
+ public uint m_unAccountInstance;
+ public uint m_EAccountType;
+ public EUniverse m_EUniverse;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameID_t
+{
+ public uint m_nAppID;
+ public uint m_nType;
+ public uint m_nModID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ValvePackingSentinel_t
+{
+ public uint m_u32;
+ public ulong m_u64;
+ public char m_u16;
+ public double m_d;
+}
+[StructLayout(LayoutKind.Sequential)] public struct CallbackMsg_t
+{
+ public uint m_hSteamUser;
+ public int m_iCallback;
+ public IntPtr m_pubParam; // uint8 *
+ public int m_cubParam;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamServerConnectFailure_t
+{
+ public EResult m_eResult;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bStillRetrying;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamServersDisconnected_t
+{
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ClientGameServerDeny_t
+{
+ public uint m_uAppID;
+ public uint m_unGameServerIP;
+ public char m_usGameServerPort;
+ public char m_bSecure;
+ public uint m_uReason;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ValidateAuthTicketResponse_t
+{
+ public ulong m_SteamID;
+ public EAuthSessionResponse m_eAuthSessionResponse;
+ public ulong m_OwnerSteamID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct MicroTxnAuthorizationResponse_t
+{
+ public uint m_unAppID;
+ public ulong m_ulOrderID;
+ public byte m_bAuthorized;
+}
+[StructLayout(LayoutKind.Sequential)] public struct EncryptedAppTicketResponse_t
+{
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GetAuthSessionTicketResponse_t
+{
+ public uint m_hAuthTicket;
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameWebCallback_t
+{
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
+ public string m_szURL; //char[256]
+}
+[StructLayout(LayoutKind.Sequential)] public struct StoreAuthURLResponse_t
+{
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
+ public string m_szURL; //char[512]
+}
+[StructLayout(LayoutKind.Sequential)] public struct FriendGameInfo_t
+{
+ public ulong m_gameID;
+ public uint m_unGameIP;
+ public char m_usGamePort;
+ public char m_usQueryPort;
+ public ulong m_steamIDLobby;
+}
+[StructLayout(LayoutKind.Sequential)] public struct FriendSessionStateInfo_t
+{
+ public uint m_uiOnlineSessionInstances;
+ public byte m_uiPublishedToFriendsSessionInstance;
+}
+[StructLayout(LayoutKind.Sequential)] public struct PersonaStateChange_t
+{
+ public ulong m_ulSteamID;
+ public int m_nChangeFlags;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameOverlayActivated_t
+{
+ public byte m_bActive;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameServerChangeRequested_t
+{
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
+ public string m_rgchServer; //char[64]
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
+ public string m_rgchPassword; //char[64]
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameLobbyJoinRequested_t
+{
+ public ulong m_steamIDLobby;
+ public ulong m_steamIDFriend;
+}
+[StructLayout(LayoutKind.Sequential)] public struct AvatarImageLoaded_t
+{
+ public ulong m_steamID;
+ public int m_iImage;
+ public int m_iWide;
+ public int m_iTall;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ClanOfficerListResponse_t
+{
+ public ulong m_steamIDClan;
+ public int m_cOfficers;
+ public byte m_bSuccess;
+}
+[StructLayout(LayoutKind.Sequential)] public struct FriendRichPresenceUpdate_t
+{
+ public ulong m_steamIDFriend;
+ public uint m_nAppID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameRichPresenceJoinRequested_t
+{
+ public ulong m_steamIDFriend;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
+ public string m_rgchConnect; //char[256]
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameConnectedClanChatMsg_t
+{
+ public ulong m_steamIDClanChat;
+ public ulong m_steamIDUser;
+ public int m_iMessageID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameConnectedChatJoin_t
+{
+ public ulong m_steamIDClanChat;
+ public ulong m_steamIDUser;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameConnectedChatLeave_t
+{
+ public ulong m_steamIDClanChat;
+ public ulong m_steamIDUser;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bKicked;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bDropped;
+}
+[StructLayout(LayoutKind.Sequential)] public struct DownloadClanActivityCountsResult_t
+{
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bSuccess;
+}
+[StructLayout(LayoutKind.Sequential)] public struct JoinClanChatRoomCompletionResult_t
+{
+ public ulong m_steamIDClanChat;
+ public EChatRoomEnterResponse m_eChatRoomEnterResponse;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameConnectedFriendChatMsg_t
+{
+ public ulong m_steamIDUser;
+ public int m_iMessageID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct FriendsGetFollowerCount_t
+{
+ public EResult m_eResult;
+ public ulong m_steamID;
+ public int m_nCount;
+}
+[StructLayout(LayoutKind.Sequential)] public struct FriendsIsFollowing_t
+{
+ public EResult m_eResult;
+ public ulong m_steamID;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bIsFollowing;
+}
+[StructLayout(LayoutKind.Sequential)] public struct FriendsEnumerateFollowingList_t
+{
+ public EResult m_eResult;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50, ArraySubType = UnmanagedType.U8)]
+ public CSteamID[] m_rgSteamID; //CSteamID[50]
+ public int m_nResultsReturned;
+ public int m_nTotalResultCount;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SetPersonaNameResponse_t
+{
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bSuccess;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bLocalSuccess;
+ public EResult m_result;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LowBatteryPower_t
+{
+ public byte m_nMinutesBatteryLeft;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamAPICallCompleted_t
+{
+ public ulong m_hAsyncCall;
+ public int m_iCallback;
+ public uint m_cubParam;
+}
+[StructLayout(LayoutKind.Sequential)] public struct CheckFileSignature_t
+{
+ public ECheckFileSignature m_eCheckFileSignature;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GamepadTextInputDismissed_t
+{
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bSubmitted;
+ public uint m_unSubmittedText;
+}
+[StructLayout(LayoutKind.Sequential)] public struct MatchMakingKeyValuePair_t
+{
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
+ public string m_szKey; //char[256]
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
+ public string m_szValue; //char[256]
+}
+[StructLayout(LayoutKind.Sequential)] public struct servernetadr_t
+{
+ public char m_usConnectionPort;
+ public char m_usQueryPort;
+ public uint m_unIP;
+}
+[StructLayout(LayoutKind.Sequential)] public struct gameserveritem_t
+{
+ public servernetadr_t m_NetAdr;
+ public int m_nPing;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bHadSuccessfulResponse;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bDoNotRefresh;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
+ public string m_szGameDir; //char[32]
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
+ public string m_szMap; //char[32]
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
+ public string m_szGameDescription; //char[64]
+ public uint m_nAppID;
+ public int m_nPlayers;
+ public int m_nMaxPlayers;
+ public int m_nBotPlayers;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bPassword;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bSecure;
+ public uint m_ulTimeLastPlayed;
+ public int m_nServerVersion;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
+ public string m_szServerName; //char[64]
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
+ public string m_szGameTags; //char[128]
+ public ulong m_steamID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct FavoritesListChanged_t
+{
+ public uint m_nIP;
+ public uint m_nQueryPort;
+ public uint m_nConnPort;
+ public uint m_nAppID;
+ public uint m_nFlags;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bAdd;
+ public uint m_unAccountId;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LobbyInvite_t
+{
+ public ulong m_ulSteamIDUser;
+ public ulong m_ulSteamIDLobby;
+ public ulong m_ulGameID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LobbyEnter_t
+{
+ public ulong m_ulSteamIDLobby;
+ public uint m_rgfChatPermissions;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bLocked;
+ public uint m_EChatRoomEnterResponse;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LobbyDataUpdate_t
+{
+ public ulong m_ulSteamIDLobby;
+ public ulong m_ulSteamIDMember;
+ public byte m_bSuccess;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LobbyChatUpdate_t
+{
+ public ulong m_ulSteamIDLobby;
+ public ulong m_ulSteamIDUserChanged;
+ public ulong m_ulSteamIDMakingChange;
+ public uint m_rgfChatMemberStateChange;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LobbyChatMsg_t
+{
+ public ulong m_ulSteamIDLobby;
+ public ulong m_ulSteamIDUser;
+ public byte m_eChatEntryType;
+ public uint m_iChatID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LobbyGameCreated_t
+{
+ public ulong m_ulSteamIDLobby;
+ public ulong m_ulSteamIDGameServer;
+ public uint m_unIP;
+ public char m_usPort;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LobbyMatchList_t
+{
+ public uint m_nLobbiesMatching;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LobbyKicked_t
+{
+ public ulong m_ulSteamIDLobby;
+ public ulong m_ulSteamIDAdmin;
+ public byte m_bKickedDueToDisconnect;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LobbyCreated_t
+{
+ public EResult m_eResult;
+ public ulong m_ulSteamIDLobby;
+}
+[StructLayout(LayoutKind.Sequential)] public struct PSNGameBootInviteResult_t
+{
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bGameBootInviteExists;
+ public ulong m_steamIDLobby;
+}
+[StructLayout(LayoutKind.Sequential)] public struct FavoritesListAccountsUpdated_t
+{
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamParamStringArray_t
+{
+ public IntPtr m_ppStrings; // const char **
+ public int m_nNumStrings;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageAppSyncedClient_t
+{
+ public uint m_nAppID;
+ public EResult m_eResult;
+ public int m_unNumDownloads;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageAppSyncedServer_t
+{
+ public uint m_nAppID;
+ public EResult m_eResult;
+ public int m_unNumUploads;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageAppSyncProgress_t
+{
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
+ public string m_rgchCurrentFile; //char[260]
+ public uint m_nAppID;
+ public uint m_uBytesTransferredThisChunk;
+ public double m_dAppPercentComplete;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bUploading;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageAppSyncStatusCheck_t
+{
+ public uint m_nAppID;
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageFileShareResult_t
+{
+ public EResult m_eResult;
+ public ulong m_hFile;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
+ public string m_rgchFilename; //char[260]
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStoragePublishFileResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageDeletePublishedFileResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ public EResult m_eResult;
+ public int m_nResultsReturned;
+ public int m_nTotalResultCount;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50, ArraySubType = UnmanagedType.U8)]
+ public ulong[] m_rgPublishedFileId; //ulong[50]
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageSubscribePublishedFileResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ public EResult m_eResult;
+ public int m_nResultsReturned;
+ public int m_nTotalResultCount;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50, ArraySubType = UnmanagedType.U8)]
+ public ulong[] m_rgPublishedFileId; //ulong[50]
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50, ArraySubType = UnmanagedType.U4)]
+ public uint[] m_rgRTimeSubscribed; //uint[50]
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageUpdatePublishedFileResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageDownloadUGCResult_t
+{
+ public EResult m_eResult;
+ public ulong m_hFile;
+ public uint m_nAppID;
+ public int m_nSizeInBytes;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
+ public string m_pchFileName; //char[260]
+ public ulong m_ulSteamIDOwner;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+ public uint m_nCreatorAppID;
+ public uint m_nConsumerAppID;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 129)]
+ public string m_rgchTitle; //char[129]
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8000)]
+ public string m_rgchDescription; //char[8000]
+ public ulong m_hFile;
+ public ulong m_hPreviewFile;
+ public ulong m_ulSteamIDOwner;
+ public uint m_rtimeCreated;
+ public uint m_rtimeUpdated;
+ public ERemoteStoragePublishedFileVisibility m_eVisibility;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bBanned;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1025)]
+ public string m_rgchTags; //char[1025]
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bTagsTruncated;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
+ public string m_pchFileName; //char[260]
+ public int m_nFileSize;
+ public int m_nPreviewFileSize;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
+ public string m_rgchURL; //char[256]
+ public EWorkshopFileType m_eFileType;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bAcceptedForUse;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ public EResult m_eResult;
+ public int m_nResultsReturned;
+ public int m_nTotalResultCount;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50, ArraySubType = UnmanagedType.U8)]
+ public ulong[] m_rgPublishedFileId; //ulong[50]
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50, ArraySubType = UnmanagedType.R4)]
+ public float[] m_rgScore; //float[50]
+ public uint m_nAppId;
+ public uint m_unStartIndex;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ public EResult m_eResult;
+ public ulong m_unPublishedFileId;
+ public int m_nVotesFor;
+ public int m_nVotesAgainst;
+ public int m_nReports;
+ public float m_fScore;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStoragePublishedFileSubscribed_t
+{
+ public ulong m_nPublishedFileId;
+ public uint m_nAppID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ public ulong m_nPublishedFileId;
+ public uint m_nAppID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStoragePublishedFileDeleted_t
+{
+ public ulong m_nPublishedFileId;
+ public uint m_nAppID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageUserVoteDetails_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+ public EWorkshopVote m_eVote;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ public EResult m_eResult;
+ public int m_nResultsReturned;
+ public int m_nTotalResultCount;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50, ArraySubType = UnmanagedType.U8)]
+ public ulong[] m_rgPublishedFileId; //ulong[50]
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+ public EWorkshopFileAction m_eAction;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ public EResult m_eResult;
+ public EWorkshopFileAction m_eAction;
+ public int m_nResultsReturned;
+ public int m_nTotalResultCount;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50, ArraySubType = UnmanagedType.U8)]
+ public ulong[] m_rgPublishedFileId; //ulong[50]
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50, ArraySubType = UnmanagedType.U4)]
+ public uint[] m_rgRTimeUpdated; //uint[50]
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStoragePublishFileProgress_t
+{
+ public double m_dPercentFile;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bPreview;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStoragePublishedFileUpdated_t
+{
+ public ulong m_nPublishedFileId;
+ public uint m_nAppID;
+ public ulong m_ulUnused;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageFileWriteAsyncComplete_t
+{
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageFileReadAsyncComplete_t
+{
+ public ulong m_hFileReadAsync;
+ public EResult m_eResult;
+ public uint m_nOffset;
+ public uint m_cubRead;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LeaderboardEntry_t
+{
+ public ulong m_steamIDUser;
+ public int m_nGlobalRank;
+ public int m_nScore;
+ public int m_cDetails;
+ public ulong m_hUGC;
+}
+[StructLayout(LayoutKind.Sequential)] public struct UserStatsReceived_t
+{
+ public ulong m_nGameID;
+ public EResult m_eResult;
+ public ulong m_steamIDUser;
+}
+[StructLayout(LayoutKind.Sequential)] public struct UserStatsStored_t
+{
+ public ulong m_nGameID;
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct UserAchievementStored_t
+{
+ public ulong m_nGameID;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bGroupAchievement;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
+ public string m_rgchAchievementName; //char[128]
+ public uint m_nCurProgress;
+ public uint m_nMaxProgress;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LeaderboardFindResult_t
+{
+ public ulong m_hSteamLeaderboard;
+ public byte m_bLeaderboardFound;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LeaderboardScoresDownloaded_t
+{
+ public ulong m_hSteamLeaderboard;
+ public ulong m_hSteamLeaderboardEntries;
+ public int m_cEntryCount;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LeaderboardScoreUploaded_t
+{
+ public byte m_bSuccess;
+ public ulong m_hSteamLeaderboard;
+ public int m_nScore;
+ public byte m_bScoreChanged;
+ public int m_nGlobalRankNew;
+ public int m_nGlobalRankPrevious;
+}
+[StructLayout(LayoutKind.Sequential)] public struct NumberOfCurrentPlayers_t
+{
+ public byte m_bSuccess;
+ public int m_cPlayers;
+}
+[StructLayout(LayoutKind.Sequential)] public struct UserStatsUnloaded_t
+{
+ public ulong m_steamIDUser;
+}
+[StructLayout(LayoutKind.Sequential)] public struct UserAchievementIconFetched_t
+{
+ public ulong m_nGameID;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
+ public string m_rgchAchievementName; //char[128]
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bAchieved;
+ public int m_nIconHandle;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GlobalAchievementPercentagesReady_t
+{
+ public ulong m_nGameID;
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LeaderboardUGCSet_t
+{
+ public EResult m_eResult;
+ public ulong m_hSteamLeaderboard;
+}
+[StructLayout(LayoutKind.Sequential)] public struct PS3TrophiesInstalled_t
+{
+ public ulong m_nGameID;
+ public EResult m_eResult;
+ public ulong m_ulRequiredDiskSpace;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GlobalStatsReceived_t
+{
+ public ulong m_nGameID;
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct DlcInstalled_t
+{
+ public uint m_nAppID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RegisterActivationCodeResponse_t
+{
+ public ERegisterActivationCodeResult m_eResult;
+ public uint m_unPackageRegistered;
+}
+[StructLayout(LayoutKind.Sequential)] public struct AppProofOfPurchaseKeyResponse_t
+{
+ public EResult m_eResult;
+ public uint m_nAppID;
+ public uint m_cchKeyLength;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 240)]
+ public string m_rgchKey; //char[240]
+}
+[StructLayout(LayoutKind.Sequential)] public struct FileDetailsResult_t
+{
+ public EResult m_eResult;
+ public ulong m_ulFileSize;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20, ArraySubType = UnmanagedType.U1)]
+ public byte[] m_FileSHA; //byte[20]
+ public uint m_unFlags;
+}
+[StructLayout(LayoutKind.Sequential)] public struct P2PSessionState_t
+{
+ public byte m_bConnectionActive;
+ public byte m_bConnecting;
+ public byte m_eP2PSessionError;
+ public byte m_bUsingRelay;
+ public int m_nBytesQueuedForSend;
+ public int m_nPacketsQueuedForSend;
+ public uint m_nRemoteIP;
+ public char m_nRemotePort;
+}
+[StructLayout(LayoutKind.Sequential)] public struct P2PSessionRequest_t
+{
+ public ulong m_steamIDRemote;
+}
+[StructLayout(LayoutKind.Sequential)] public struct P2PSessionConnectFail_t
+{
+ public ulong m_steamIDRemote;
+ public byte m_eP2PSessionError;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SocketStatusCallback_t
+{
+ public uint m_hSocket;
+ public uint m_hListenSocket;
+ public ulong m_steamIDRemote;
+ public int m_eSNetSocketState;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ScreenshotReady_t
+{
+ public uint m_hLocal;
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public float m_flNewVolume;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bShuffled;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bLooped;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public float m_flNewVolume;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public int nID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public int nID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public int m_nPlayingRepeatStatus;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTTPRequestCompleted_t
+{
+ public uint m_hRequest;
+ public ulong m_ulContextValue;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bRequestSuccessful;
+ public EHTTPStatusCode m_eStatusCode;
+ public uint m_unBodySize;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTTPRequestHeadersReceived_t
+{
+ public uint m_hRequest;
+ public ulong m_ulContextValue;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTTPRequestDataReceived_t
+{
+ public uint m_hRequest;
+ public ulong m_ulContextValue;
+ public uint m_cOffset;
+ public uint m_cBytesReceived;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamUnifiedMessagesSendMethodResult_t
+{
+ public ulong m_hHandle;
+ public ulong m_unContext;
+ public EResult m_eResult;
+ public uint m_unResponseSize;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ControllerAnalogActionData_t
+{
+ public EControllerSourceMode eMode;
+ public float x;
+ public float y;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bActive;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ControllerDigitalActionData_t
+{
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bState;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bActive;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ControllerMotionData_t
+{
+ public float rotQuatX;
+ public float rotQuatY;
+ public float rotQuatZ;
+ public float rotQuatW;
+ public float posAccelX;
+ public float posAccelY;
+ public float posAccelZ;
+ public float rotVelX;
+ public float rotVelY;
+ public float rotVelZ;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamUGCDetails_t
+{
+ public ulong m_nPublishedFileId;
+ public EResult m_eResult;
+ public EWorkshopFileType m_eFileType;
+ public uint m_nCreatorAppID;
+ public uint m_nConsumerAppID;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 129)]
+ public string m_rgchTitle; //char[129]
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8000)]
+ public string m_rgchDescription; //char[8000]
+ public ulong m_ulSteamIDOwner;
+ public uint m_rtimeCreated;
+ public uint m_rtimeUpdated;
+ public uint m_rtimeAddedToUserList;
+ public ERemoteStoragePublishedFileVisibility m_eVisibility;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bBanned;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bAcceptedForUse;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bTagsTruncated;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1025)]
+ public string m_rgchTags; //char[1025]
+ public ulong m_hFile;
+ public ulong m_hPreviewFile;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
+ public string m_pchFileName; //char[260]
+ public int m_nFileSize;
+ public int m_nPreviewFileSize;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
+ public string m_rgchURL; //char[256]
+ public uint m_unVotesUp;
+ public uint m_unVotesDown;
+ public float m_flScore;
+ public uint m_unNumChildren;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamUGCQueryCompleted_t
+{
+ public ulong m_handle;
+ public EResult m_eResult;
+ public uint m_unNumResultsReturned;
+ public uint m_unTotalMatchingResults;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bCachedData;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamUGCRequestUGCDetailsResult_t
+{
+ public SteamUGCDetails_t m_details;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bCachedData;
+}
+[StructLayout(LayoutKind.Sequential)] public struct CreateItemResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SubmitItemUpdateResult_t
+{
+ public EResult m_eResult;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+}
+[StructLayout(LayoutKind.Sequential)] public struct DownloadItemResult_t
+{
+ public uint m_unAppID;
+ public ulong m_nPublishedFileId;
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct UserFavoriteItemsListChanged_t
+{
+ public ulong m_nPublishedFileId;
+ public EResult m_eResult;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bWasAddRequest;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SetUserItemVoteResult_t
+{
+ public ulong m_nPublishedFileId;
+ public EResult m_eResult;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bVoteUp;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GetUserItemVoteResult_t
+{
+ public ulong m_nPublishedFileId;
+ public EResult m_eResult;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bVotedUp;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bVotedDown;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bVoteSkipped;
+}
+[StructLayout(LayoutKind.Sequential)] public struct StartPlaytimeTrackingResult_t
+{
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct StopPlaytimeTrackingResult_t
+{
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public uint m_nAppID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public uint m_nAppID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_BrowserReady_t
+{
+ public uint unBrowserHandle;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_NeedsPaint_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pBGRA; // const char *
+ public uint unWide;
+ public uint unTall;
+ public uint unUpdateX;
+ public uint unUpdateY;
+ public uint unUpdateWide;
+ public uint unUpdateTall;
+ public uint unScrollX;
+ public uint unScrollY;
+ public float flPageScale;
+ public uint unPageSerial;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_StartRequest_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchURL; // const char *
+ public IntPtr pchTarget; // const char *
+ public IntPtr pchPostData; // const char *
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bIsRedirect;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_CloseBrowser_t
+{
+ public uint unBrowserHandle;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_URLChanged_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchURL; // const char *
+ public IntPtr pchPostData; // const char *
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bIsRedirect;
+ public IntPtr pchPageTitle; // const char *
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bNewNavigation;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_FinishedRequest_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchURL; // const char *
+ public IntPtr pchPageTitle; // const char *
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_OpenLinkInNewTab_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchURL; // const char *
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_ChangedTitle_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchTitle; // const char *
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_SearchResults_t
+{
+ public uint unBrowserHandle;
+ public uint unResults;
+ public uint unCurrentMatch;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_CanGoBackAndForward_t
+{
+ public uint unBrowserHandle;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bCanGoBack;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bCanGoForward;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_HorizontalScroll_t
+{
+ public uint unBrowserHandle;
+ public uint unScrollMax;
+ public uint unScrollCurrent;
+ public float flPageScale;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bVisible;
+ public uint unPageSize;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_VerticalScroll_t
+{
+ public uint unBrowserHandle;
+ public uint unScrollMax;
+ public uint unScrollCurrent;
+ public float flPageScale;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bVisible;
+ public uint unPageSize;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_LinkAtPosition_t
+{
+ public uint unBrowserHandle;
+ public uint x;
+ public uint y;
+ public IntPtr pchURL; // const char *
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bInput;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bLiveLink;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_JSAlert_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchMessage; // const char *
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_JSConfirm_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchMessage; // const char *
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_FileOpenDialog_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchTitle; // const char *
+ public IntPtr pchInitialFile; // const char *
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_NewWindow_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchURL; // const char *
+ public uint unX;
+ public uint unY;
+ public uint unWide;
+ public uint unTall;
+ public uint unNewWindow_BrowserHandle;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_SetCursor_t
+{
+ public uint unBrowserHandle;
+ public uint eMouseCursor;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_StatusText_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchMsg; // const char *
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_ShowToolTip_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchMsg; // const char *
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_UpdateToolTip_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchMsg; // const char *
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_HideToolTip_t
+{
+ public uint unBrowserHandle;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamItemDetails_t
+{
+ public ulong m_itemId;
+ public int m_iDefinition;
+ public char m_unQuantity;
+ public char m_unFlags;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamInventoryResultReady_t
+{
+ public int m_handle;
+ public EResult m_result;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamInventoryFullUpdate_t
+{
+ public int m_handle;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamInventoryEligiblePromoItemDefIDs_t
+{
+ public EResult m_result;
+ public ulong m_steamID;
+ public int m_numEligiblePromoItemDefs;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bCachedData;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public EBroadcastUploadResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public EResult m_eResult;
+ public uint m_unVideoAppID;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
+ public string m_rgchURL; //char[256]
+}
+[StructLayout(LayoutKind.Sequential)] public struct CSteamAPIContext
+{
+ public IntPtr m_pSteamClient; // class ISteamClient *
+ public IntPtr m_pSteamUser; // class ISteamUser *
+ public IntPtr m_pSteamFriends; // class ISteamFriends *
+ public IntPtr m_pSteamUtils; // class ISteamUtils *
+ public IntPtr m_pSteamMatchmaking; // class ISteamMatchmaking *
+ public IntPtr m_pSteamUserStats; // class ISteamUserStats *
+ public IntPtr m_pSteamApps; // class ISteamApps *
+ public IntPtr m_pSteamMatchmakingServers; // class ISteamMatchmakingServers *
+ public IntPtr m_pSteamNetworking; // class ISteamNetworking *
+ public IntPtr m_pSteamRemoteStorage; // class ISteamRemoteStorage *
+ public IntPtr m_pSteamScreenshots; // class ISteamScreenshots *
+ public IntPtr m_pSteamHTTP; // class ISteamHTTP *
+ public IntPtr m_pSteamUnifiedMessages; // class ISteamUnifiedMessages *
+ public IntPtr m_pController; // class ISteamController *
+ public IntPtr m_pSteamUGC; // class ISteamUGC *
+ public IntPtr m_pSteamAppList; // class ISteamAppList *
+ public IntPtr m_pSteamMusic; // class ISteamMusic *
+ public IntPtr m_pSteamMusicRemote; // class ISteamMusicRemote *
+ public IntPtr m_pSteamHTMLSurface; // class ISteamHTMLSurface *
+ public IntPtr m_pSteamInventory; // class ISteamInventory *
+ public IntPtr m_pSteamVideo; // class ISteamVideo *
+}
+[StructLayout(LayoutKind.Sequential)] public struct CCallbackBase
+{
+ public byte m_nCallbackFlags;
+ public int m_iCallback;
+}
+[StructLayout(LayoutKind.Sequential)] public struct CCallResult
+{
+ public ulong m_hAPICall;
+ public IntPtr m_pObj; // T *
+ public IntPtr m_Func;
+}
+[StructLayout(LayoutKind.Sequential)] public struct CCallback
+{
+ public IntPtr m_pObj; // T *
+ public IntPtr m_Func;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSClientApprove_t
+{
+ public ulong m_SteamID;
+ public ulong m_OwnerSteamID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSClientDeny_t
+{
+ public ulong m_SteamID;
+ public EDenyReason m_eDenyReason;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
+ public string m_rgchOptionalText; //char[128]
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSClientKick_t
+{
+ public ulong m_SteamID;
+ public EDenyReason m_eDenyReason;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSClientAchievementStatus_t
+{
+ public ulong m_SteamID;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
+ public string m_pchAchievement; //char[128]
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bUnlocked;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSPolicyResponse_t
+{
+ public byte m_bSecure;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSGameplayStats_t
+{
+ public EResult m_eResult;
+ public int m_nRank;
+ public uint m_unTotalConnects;
+ public uint m_unTotalMinutesPlayed;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSClientGroupStatus_t
+{
+ public ulong m_SteamIDUser;
+ public ulong m_SteamIDGroup;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bMember;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bOfficer;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSReputation_t
+{
+ public EResult m_eResult;
+ public uint m_unReputationScore;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bBanned;
+ public uint m_unBannedIP;
+ public char m_usBannedPort;
+ public ulong m_ulBannedGameID;
+ public uint m_unBanExpires;
+}
+[StructLayout(LayoutKind.Sequential)] public struct AssociateWithClanResult_t
+{
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ComputeNewPlayerCompatibilityResult_t
+{
+ public EResult m_eResult;
+ public int m_cPlayersThatDontLikeCandidate;
+ public int m_cPlayersThatCandidateDoesntLike;
+ public int m_cClanPlayersThatDontLikeCandidate;
+ public ulong m_SteamIDCandidate;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSStatsReceived_t
+{
+ public EResult m_eResult;
+ public ulong m_steamIDUser;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSStatsStored_t
+{
+ public EResult m_eResult;
+ public ulong m_steamIDUser;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSStatsUnloaded_t
+{
+ public ulong m_steamIDUser;
+}
+
+public class SteamAPI
+{
+public static void Init(uint appId)
+{
+SteamAPIInterop.SteamAPI_RestartAppIfNecessary (appId);
+SteamAPIInterop.SteamAPI_Init ();
+}
+
+public static void RunCallbacks()
+{
+SteamAPIInterop.SteamAPI_RunCallbacks ();
+}
+
+public static void RegisterCallback(IntPtr pCallback, int iCallback)
+{
+SteamAPIInterop.SteamAPI_RegisterCallback (pCallback, iCallback);
+}
+
+public static void UnregisterCallback(IntPtr pCallback)
+{
+SteamAPIInterop.SteamAPI_UnregisterCallback (pCallback);
+}
+
+public const int k_iSteamUserCallbacks = 100;
+public const int k_iSteamGameServerCallbacks = 200;
+public const int k_iSteamFriendsCallbacks = 300;
+public const int k_iSteamBillingCallbacks = 400;
+public const int k_iSteamMatchmakingCallbacks = 500;
+public const int k_iSteamContentServerCallbacks = 600;
+public const int k_iSteamUtilsCallbacks = 700;
+public const int k_iClientFriendsCallbacks = 800;
+public const int k_iClientUserCallbacks = 900;
+public const int k_iSteamAppsCallbacks = 1000;
+public const int k_iSteamUserStatsCallbacks = 1100;
+public const int k_iSteamNetworkingCallbacks = 1200;
+public const int k_iClientRemoteStorageCallbacks = 1300;
+public const int k_iClientDepotBuilderCallbacks = 1400;
+public const int k_iSteamGameServerItemsCallbacks = 1500;
+public const int k_iClientUtilsCallbacks = 1600;
+public const int k_iSteamGameCoordinatorCallbacks = 1700;
+public const int k_iSteamGameServerStatsCallbacks = 1800;
+public const int k_iSteam2AsyncCallbacks = 1900;
+public const int k_iSteamGameStatsCallbacks = 2000;
+public const int k_iClientHTTPCallbacks = 2100;
+public const int k_iClientScreenshotsCallbacks = 2200;
+public const int k_iSteamScreenshotsCallbacks = 2300;
+public const int k_iClientAudioCallbacks = 2400;
+public const int k_iClientUnifiedMessagesCallbacks = 2500;
+public const int k_iSteamStreamLauncherCallbacks = 2600;
+public const int k_iClientControllerCallbacks = 2700;
+public const int k_iSteamControllerCallbacks = 2800;
+public const int k_iClientParentalSettingsCallbacks = 2900;
+public const int k_iClientDeviceAuthCallbacks = 3000;
+public const int k_iClientNetworkDeviceManagerCallbacks = 3100;
+public const int k_iClientMusicCallbacks = 3200;
+public const int k_iClientRemoteClientManagerCallbacks = 3300;
+public const int k_iClientUGCCallbacks = 3400;
+public const int k_iSteamStreamClientCallbacks = 3500;
+public const int k_IClientProductBuilderCallbacks = 3600;
+public const int k_iClientShortcutsCallbacks = 3700;
+public const int k_iClientRemoteControlManagerCallbacks = 3800;
+public const int k_iSteamAppListCallbacks = 3900;
+public const int k_iSteamMusicCallbacks = 4000;
+public const int k_iSteamMusicRemoteCallbacks = 4100;
+public const int k_iClientVRCallbacks = 4200;
+public const int k_iClientGameNotificationCallbacks = 4300;
+public const int k_iSteamGameNotificationCallbacks = 4400;
+public const int k_iSteamHTMLSurfaceCallbacks = 4500;
+public const int k_iClientVideoCallbacks = 4600;
+public const int k_iClientInventoryCallbacks = 4700;
+public const int k_iClientBluetoothManagerCallbacks = 4800;
+public const int k_cchPersonaNameMax = 128;
+public const int k_cwchPersonaNameMax = 32;
+public const int k_cchMaxRichPresenceKeys = 20;
+public const int k_cchMaxRichPresenceKeyLength = 64;
+public const int k_cchMaxRichPresenceValueLength = 256;
+public const int k_cchStatNameMax = 128;
+public const int k_cchLeaderboardNameMax = 128;
+public const int k_cLeaderboardDetailsMax = 64;
+public const ulong k_InvalidUnifiedMessageHandle = 0;
+public const ulong k_SteamItemInstanceIDInvalid = 0xffffffffffffffff;
+public const int k_SteamInventoryResultInvalid = -1;
+public static ISteamClient SteamClient()
+{
+return new CSteamClient(SteamAPIInterop.SteamClient());
+}
+
+public static ISteamUser SteamUser()
+{
+return new CSteamUser(SteamAPIInterop.SteamUser());
+}
+
+public static ISteamFriends SteamFriends()
+{
+return new CSteamFriends(SteamAPIInterop.SteamFriends());
+}
+
+public static ISteamUtils SteamUtils()
+{
+return new CSteamUtils(SteamAPIInterop.SteamUtils());
+}
+
+public static ISteamMatchmaking SteamMatchmaking()
+{
+return new CSteamMatchmaking(SteamAPIInterop.SteamMatchmaking());
+}
+
+public static ISteamMatchmakingServerListResponse SteamMatchmakingServerListResponse()
+{
+return new CSteamMatchmakingServerListResponse(SteamAPIInterop.SteamMatchmakingServerListResponse());
+}
+
+public static ISteamMatchmakingPingResponse SteamMatchmakingPingResponse()
+{
+return new CSteamMatchmakingPingResponse(SteamAPIInterop.SteamMatchmakingPingResponse());
+}
+
+public static ISteamMatchmakingPlayersResponse SteamMatchmakingPlayersResponse()
+{
+return new CSteamMatchmakingPlayersResponse(SteamAPIInterop.SteamMatchmakingPlayersResponse());
+}
+
+public static ISteamMatchmakingRulesResponse SteamMatchmakingRulesResponse()
+{
+return new CSteamMatchmakingRulesResponse(SteamAPIInterop.SteamMatchmakingRulesResponse());
+}
+
+public static ISteamMatchmakingServers SteamMatchmakingServers()
+{
+return new CSteamMatchmakingServers(SteamAPIInterop.SteamMatchmakingServers());
+}
+
+public static ISteamRemoteStorage SteamRemoteStorage()
+{
+return new CSteamRemoteStorage(SteamAPIInterop.SteamRemoteStorage());
+}
+
+public static ISteamUserStats SteamUserStats()
+{
+return new CSteamUserStats(SteamAPIInterop.SteamUserStats());
+}
+
+public static ISteamApps SteamApps()
+{
+return new CSteamApps(SteamAPIInterop.SteamApps());
+}
+
+public static ISteamNetworking SteamNetworking()
+{
+return new CSteamNetworking(SteamAPIInterop.SteamNetworking());
+}
+
+public static ISteamScreenshots SteamScreenshots()
+{
+return new CSteamScreenshots(SteamAPIInterop.SteamScreenshots());
+}
+
+public static ISteamMusic SteamMusic()
+{
+return new CSteamMusic(SteamAPIInterop.SteamMusic());
+}
+
+public static ISteamMusicRemote SteamMusicRemote()
+{
+return new CSteamMusicRemote(SteamAPIInterop.SteamMusicRemote());
+}
+
+public static ISteamHTTP SteamHTTP()
+{
+return new CSteamHTTP(SteamAPIInterop.SteamHTTP());
+}
+
+public static ISteamUnifiedMessages SteamUnifiedMessages()
+{
+return new CSteamUnifiedMessages(SteamAPIInterop.SteamUnifiedMessages());
+}
+
+public static ISteamController SteamController()
+{
+return new CSteamController(SteamAPIInterop.SteamController());
+}
+
+public static ISteamUGC SteamUGC()
+{
+return new CSteamUGC(SteamAPIInterop.SteamUGC());
+}
+
+public static ISteamAppList SteamAppList()
+{
+return new CSteamAppList(SteamAPIInterop.SteamAppList());
+}
+
+public static ISteamHTMLSurface SteamHTMLSurface()
+{
+return new CSteamHTMLSurface(SteamAPIInterop.SteamHTMLSurface());
+}
+
+public static ISteamInventory SteamInventory()
+{
+return new CSteamInventory(SteamAPIInterop.SteamInventory());
+}
+
+public static ISteamVideo SteamVideo()
+{
+return new CSteamVideo(SteamAPIInterop.SteamVideo());
+}
+
+public static ISteamGameServer SteamGameServer()
+{
+return new CSteamGameServer(SteamAPIInterop.SteamGameServer());
+}
+
+public static ISteamGameServerStats SteamGameServerStats()
+{
+return new CSteamGameServerStats(SteamAPIInterop.SteamGameServerStats());
+}
+
+}
+
+
+
+}
+
diff --git a/lsteamclient/steamworks_sdk_139/steam_gameserver.h b/lsteamclient/steamworks_sdk_139/steam_gameserver.h
new file mode 100644
index 00000000..dfc70370
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/steam_gameserver.h
@@ -0,0 +1,237 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+
+inline bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+// Most Steam API functions allocate some amount of thread-local memory for
+// parameter storage. Calling SteamGameServer_ReleaseCurrentThreadMemory()
+// will free all API-related memory associated with the calling thread.
+// This memory is released automatically by SteamGameServer_RunCallbacks(),
+// so single-threaded servers do not need to explicitly call this function.
+inline void SteamGameServer_ReleaseCurrentThreadMemory();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+// If your application contains modules which could be built against different Steamworks SDK
+// versions, then you should define VERSION_SAFE_STEAM_API_INTERFACES to enforce that you cannot
+// use the version-less global accessors. Instead, create and use CSteamGameServerAPIContext
+// objects to retrieve interface pointers which are appropriate for your Steamworks SDK headers.
+#if !defined( VERSION_SAFE_STEAM_API_INTERFACES ) && !defined( STEAM_API_EXPORTS )
+inline ISteamClient *SteamGameServerClient();
+inline ISteamGameServer *SteamGameServer();
+inline ISteamUtils *SteamGameServerUtils();
+inline ISteamNetworking *SteamGameServerNetworking();
+inline ISteamGameServerStats *SteamGameServerStats();
+inline ISteamHTTP *SteamGameServerHTTP();
+inline ISteamInventory *SteamGameServerInventory();
+inline ISteamUGC *SteamGameServerUGC();
+inline ISteamApps *SteamGameServerApps();
+#endif
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext() { Clear(); }
+ inline void Clear();
+ inline bool Init();
+
+ ISteamClient *SteamClient() const { return m_pSteamClient; }
+ ISteamGameServer *SteamGameServer() const { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() const { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() const { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() const { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() const { return m_pSteamHTTP; }
+ ISteamInventory *SteamInventory() const { return m_pSteamInventory; }
+ ISteamUGC *SteamUGC() const { return m_pSteamUGC; }
+ ISteamApps *SteamApps() const { return m_pSteamApps; }
+
+private:
+ ISteamClient *m_pSteamClient;
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamInventory *m_pSteamInventory;
+ ISteamUGC *m_pSteamUGC;
+ ISteamApps *m_pSteamApps;
+};
+
+
+// Older SDKs exported this global pointer, but it is no longer supported.
+// You should use SteamGameServerClient() or CSteamGameServerAPIContext to
+// safely access the ISteamClient APIs from your game server application.
+//S_API ISteamClient *g_pSteamClientGameServer;
+
+// SteamGameServer_InitSafe has been replaced with SteamGameServer_Init and
+// is no longer supported. Use SteamGameServer_Init instead.
+//S_API void S_CALLTYPE SteamGameServer_InitSafe();
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// These macros are similar to the STEAM_CALLBACK_* macros in steam_api.h, but only trigger for gameserver callbacks
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, /*callback_type, [deprecated] var*/... ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, GS, 3 ), ( this->SetGameserverFlag();, thisclass, func, __VA_ARGS__ ) )
+
+#define STEAM_GAMESERVER_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type, true > var; void func( callback_type *pParam )
+
+
+#define _STEAM_CALLBACK_GS( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param, true > var; void func( param *pParam )
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe S_CALLTYPE SteamGameServer_GetHSteamPipe();
+S_API HSteamUser S_CALLTYPE SteamGameServer_GetHSteamUser();
+S_API bool S_CALLTYPE SteamInternal_GameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+
+
+#if !defined( VERSION_SAFE_STEAM_API_INTERFACES ) && !defined( STEAM_API_EXPORTS )
+inline CSteamGameServerAPIContext& SteamGameServerInternal_ModuleContext()
+{
+ // NOTE: declaring "static CSteamAPIConext" creates a large function
+ // which queries the initialization status of the object. We know that
+ // it is pointer-aligned and fully memset with zeros, so just alias a
+ // static buffer of the appropriate size and call it a CSteamAPIContext.
+ static void* ctx[ sizeof(CSteamGameServerAPIContext)/sizeof(void*) ];
+ return *(CSteamGameServerAPIContext*)ctx;
+}
+#define _STEAMINTERNAL_ACCESSOR_BODY( AccessFunc ) \
+ if ( !SteamGameServer_GetHSteamPipe() ) return 0; \
+ CSteamGameServerAPIContext &ctx = SteamGameServerInternal_ModuleContext(); \
+ if ( !ctx.AccessFunc() ) ctx.Init(); \
+ return ctx.AccessFunc();
+
+inline ISteamClient *SteamGameServerClient() { _STEAMINTERNAL_ACCESSOR_BODY( SteamClient ) }
+inline ISteamGameServer *SteamGameServer() { _STEAMINTERNAL_ACCESSOR_BODY( SteamGameServer ) }
+inline ISteamUtils *SteamGameServerUtils() { _STEAMINTERNAL_ACCESSOR_BODY( SteamGameServerUtils ) }
+inline ISteamNetworking *SteamGameServerNetworking() { _STEAMINTERNAL_ACCESSOR_BODY( SteamGameServerNetworking ) }
+inline ISteamGameServerStats *SteamGameServerStats() { _STEAMINTERNAL_ACCESSOR_BODY( SteamGameServerStats ) }
+inline ISteamHTTP *SteamGameServerHTTP() { _STEAMINTERNAL_ACCESSOR_BODY( SteamHTTP ) }
+inline ISteamInventory *SteamGameServerInventory() { _STEAMINTERNAL_ACCESSOR_BODY( SteamInventory ) }
+inline ISteamUGC *SteamGameServerUGC() { _STEAMINTERNAL_ACCESSOR_BODY( SteamUGC ) }
+inline ISteamApps *SteamGameServerApps() { _STEAMINTERNAL_ACCESSOR_BODY( SteamApps ) }
+#undef _STEAMINTERNAL_ACCESSOR_BODY
+#endif // !defined( VERSION_SAFE_STEAM_API_INTERFACES ) && !defined( STEAM_API_EXPORTS )
+
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamClient = NULL;
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamInventory = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamApps = NULL;
+}
+
+// This function must be declared inline in the header so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+ if ( !hSteamPipe )
+ return false;
+
+ m_pSteamClient = (ISteamClient*) SteamInternal_CreateInterface( STEAMCLIENT_INTERFACE_VERSION );
+ if ( !m_pSteamClient )
+ return false;
+
+ m_pSteamGameServer = m_pSteamClient->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = m_pSteamClient->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = m_pSteamClient->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = m_pSteamClient->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = m_pSteamClient->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamInventory = m_pSteamClient->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_pSteamUGC = m_pSteamClient->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamApps = m_pSteamClient->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ return true;
+}
+
+
+inline bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString )
+{
+ if ( !SteamInternal_GameServer_Init( unIP, usSteamPort, usGamePort, usQueryPort, eServerMode, pchVersionString ) )
+ return false;
+
+ return true;
+}
+
+
+inline void SteamGameServer_ReleaseCurrentThreadMemory()
+{
+ SteamAPI_ReleaseCurrentThreadMemory();
+}
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_139/steamclientpublic.h b/lsteamclient/steamworks_sdk_139/steamclientpublic.h
new file mode 100644
index 00000000..d8c420cb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/steamclientpublic.h
@@ -0,0 +1,1232 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to login
+ k_EResultItemDeleted = 86, // The thing we're trying to access has been deleted
+ k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to throttle response to possible attacker
+ k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch
+ k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for two-factor didn't match
+ k_EResultAccountAssociatedToMultiplePartners = 90, // account has been associated with multiple partners
+ k_EResultNotModified = 91, // data not modified
+ k_EResultNoMobileDevice = 92, // the account does not have a mobile device associated with it
+ k_EResultTimeNotSynced = 93, // the time presented is out of range or tolerance
+ k_EResultSmsCodeFailed = 94, // SMS code failure (no match, none pending, etc.)
+ k_EResultAccountLimitExceeded = 95, // Too many accounts access this resource
+ k_EResultAccountActivityLimitExceeded = 96, // Too many changes to this account
+ k_EResultPhoneActivityLimitExceeded = 97, // Too many changes to this phone
+ k_EResultRefundToWallet = 98, // Cannot refund to payment method, must use wallet
+ k_EResultEmailSendFailure = 99, // Cannot send an email
+ k_EResultNotSettled = 100, // Can't perform operation till payment has settled
+ k_EResultNeedCaptcha = 101, // Needs to provide a valid captcha
+ k_EResultGSLTDenied = 102, // a game server login token owned by this token's owner has been banned
+ k_EResultGSOwnerDenied = 103, // game server owner is denied for other reason (account lock, community ban, vac ban, missing phone)
+ k_EResultInvalidItemType = 104, // the type of thing we were requested to act on is invalid
+ k_EResultIPBanned = 105, // the ip address has been banned from taking this action
+ k_EResultGSLTExpired = 106, // this token has expired from disuse; can be reset for use
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+ k_EVoiceResultReceiverOutOfDate = 8,
+ k_EVoiceResultReceiverDidNotAnswer = 9,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+enum EDenyReason
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+};
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+enum EBeginAuthSessionResult
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+};
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+enum EAuthSessionResponse
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+ k_EAuthSessionResponsePublisherIssuedBan = 9, // The user is banned for this game. The ban came via the web api and not VAC
+};
+
+// results from UserHasLicenseForApp
+enum EUserHasLicenseForAppResult
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+};
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x0000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x0001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x0002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x0004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x0008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x0010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x0020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x0040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_RetailLicense = 0x0080, // has a retail license for game, (CD-Key etc)
+ k_EAppOwnershipFlags_LicenseLocked = 0x0100, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x0200, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x0400, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x0800, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x1000, // Recurring license, user is charged periodically
+ k_EAppOwnershipFlags_LicenseCanceled = 0x2000, // Mark as canceled, but might be still active if recurring
+ k_EAppOwnershipFlags_AutoGrant = 0x4000, // Ownership is based on any kind of autogrant license
+ k_EAppOwnershipFlags_PendingGift = 0x8000, // user has pending gift to redeem
+ k_EAppOwnershipFlags_RentalNotActivated = 0x10000, // Rental hasn't been activated yet
+ k_EAppOwnershipFlags_Rental = 0x20000, // Is a rental
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media_DEPRECATED = 0x010, // legacy - was used for game trailers, which are now just videos on the web
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+ k_EAppType_Hardware = 0x200, // a hardware device (Steam Machine, Steam Controller, Steam Link, etc.)
+ k_EAppType_Franchise = 0x400, // A hub for collections of multiple apps, eg films, series, games
+ k_EAppType_Video = 0x800, // A video component of either a Film or TVSeries (may be the feature, an episode, preview, making-of, etc)
+ k_EAppType_Plugin = 0x1000, // Plug-in types for other Apps
+ k_EAppType_Music = 0x2000, // Music files
+ k_EAppType_Series = 0x4000, // Container app for video series
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+ //k_EChatEntryTypeReserved1 = 12, // No longer used
+ //k_EChatEntryTypeReserved2 = 13, // No longer used
+ k_EChatEntryTypeLinkBlocked = 14, // a link was removed by the chat filter.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Broadcast upload result details
+//-----------------------------------------------------------------------------
+enum EBroadcastUploadResult
+{
+ k_EBroadcastUploadResultNone = 0, // broadcast state unknown
+ k_EBroadcastUploadResultOK = 1, // broadcast was good, no problems
+ k_EBroadcastUploadResultInitFailed = 2, // broadcast init failed
+ k_EBroadcastUploadResultFrameFailed = 3, // broadcast frame upload failed
+ k_EBroadcastUploadResultTimeout = 4, // broadcast upload timed out
+ k_EBroadcastUploadResultBandwidthExceeded = 5, // broadcast send too much data
+ k_EBroadcastUploadResultLowFPS = 6, // broadcast FPS too low
+ k_EBroadcastUploadResultMissingKeyFrames = 7, // broadcast sending not enough key frames
+ k_EBroadcastUploadResultNoConnection = 8, // broadcast client failed to connect to relay
+ k_EBroadcastUploadResultRelayFailed = 9, // relay dropped the upload
+ k_EBroadcastUploadResultSettingsChanged = 10, // the client changed broadcast settings
+ k_EBroadcastUploadResultMissingAudio = 11, // client failed to send audio data
+ k_EBroadcastUploadResultTooFarBehind = 12, // clients was too slow uploading
+ k_EBroadcastUploadResultTranscodeBehind = 13, // server failed to keep up with transcode
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: codes for well defined launch options
+//-----------------------------------------------------------------------------
+enum ELaunchOptionType
+{
+ k_ELaunchOptionType_None = 0, // unknown what launch option does
+ k_ELaunchOptionType_Default = 1, // runs the game, app, whatever in default mode
+ k_ELaunchOptionType_SafeMode = 2, // runs the game in safe mode
+ k_ELaunchOptionType_Multiplayer = 3, // runs the game in multiplayer mode
+ k_ELaunchOptionType_Config = 4, // runs config tool for this game
+ k_ELaunchOptionType_OpenVR = 5, // runs game in VR mode using OpenVR
+ k_ELaunchOptionType_Server = 6, // runs dedicated server for this game
+ k_ELaunchOptionType_Editor = 7, // runs game editor
+ k_ELaunchOptionType_Manual = 8, // shows game manual
+ k_ELaunchOptionType_Benchmark = 9, // runs game benchmark
+ k_ELaunchOptionType_Option1 = 10, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option2 = 11, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option3 = 12, // generic run option, uses description field for game name
+ k_ELaunchOptionType_OculusVR = 13, // runs game in VR mode using the Oculus SDK
+ k_ELaunchOptionType_OpenVROverlay = 14, // runs an OpenVR dashboard overlay
+ k_ELaunchOptionType_OSVR = 15, // runs game in VR mode using the OSVR SDK
+
+
+ k_ELaunchOptionType_Dialog = 1000, // show launch options dialog
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this launch option is any of the vr launching types
+//-----------------------------------------------------------------------------
+static inline bool BIsVRLaunchOptionType( const ELaunchOptionType eType )
+{
+ return eType == k_ELaunchOptionType_OpenVR
+ || eType == k_ELaunchOptionType_OpenVROverlay
+ || eType == k_ELaunchOptionType_OculusVR
+ || eType == k_ELaunchOptionType_OSVR;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: code points for VR HMD vendors and models
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN A DATABASE
+//-----------------------------------------------------------------------------
+enum EVRHMDType
+{
+ k_eEVRHMDType_None = -1, // unknown vendor and model
+
+ k_eEVRHMDType_Unknown = 0, // unknown vendor and model
+
+ k_eEVRHMDType_HTC_Dev = 1, // original HTC dev kits
+ k_eEVRHMDType_HTC_VivePre = 2, // htc vive pre
+ k_eEVRHMDType_HTC_Vive = 3, // htc vive consumer release
+
+ k_eEVRHMDType_HTC_Unknown = 20, // unknown htc hmd
+
+ k_eEVRHMDType_Oculus_DK1 = 21, // Oculus DK1
+ k_eEVRHMDType_Oculus_DK2 = 22, // Oculus DK2
+ k_eEVRHMDType_Oculus_Rift = 23, // Oculus rift
+
+ k_eEVRHMDType_Oculus_Unknown = 40, // // Oculus unknown HMD
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this is from an Oculus HMD
+//-----------------------------------------------------------------------------
+static inline bool BIsOculusHMD( EVRHMDType eType )
+{
+ return eType == k_eEVRHMDType_Oculus_DK1 || eType == k_eEVRHMDType_Oculus_DK2 || eType == k_eEVRHMDType_Oculus_Rift || eType == k_eEVRHMDType_Oculus_Unknown;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this is from an Vive HMD
+//-----------------------------------------------------------------------------
+static inline bool BIsViveHMD( EVRHMDType eType )
+{
+ return eType == k_eEVRHMDType_HTC_Dev || eType == k_eEVRHMDType_HTC_VivePre || eType == k_eEVRHMDType_HTC_Vive || eType == k_eEVRHMDType_HTC_Unknown;
+}
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM2_USERID_STRUCTS )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ V_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, V_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ if ( pchExePath )
+ CRC32_ProcessBuffer( &crc32, pchExePath, V_strlen( pchExePath ) );
+ if ( pchAppName )
+ CRC32_ProcessBuffer( &crc32, pchAppName, V_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, V_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_139/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_139/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_139/steamhttpenums.h b/lsteamclient/steamworks_sdk_139/steamhttpenums.h
new file mode 100644
index 00000000..b2f05d94
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/steamhttpenums.h
@@ -0,0 +1,98 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+ k_EHTTPMethodPATCH,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401, // You probably want 403 or something else. 401 implies you're sending a WWW-Authenticate header and the client can sent an Authorization header in response.
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+ k_EHTTPStatusCode4xxUnknown = 418, // 418 is reserved, so we'll use it to mean unknown
+ k_EHTTPStatusCode429TooManyRequests = 429,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+ k_EHTTPStatusCode5xxUnknown = 599,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_139/steamps3params.h b/lsteamclient/steamworks_sdk_139/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_139/steamtypes.h b/lsteamclient/steamworks_sdk_139/steamtypes.h
new file mode 100644
index 00000000..2b805ce7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/steamtypes.h
@@ -0,0 +1,181 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+#ifdef API_GEN
+# define CLANG_ATTR(ATTR) __attribute__((annotate( ATTR )))
+#else
+# define CLANG_ATTR(ATTR)
+#endif
+
+#define METHOD_DESC(DESC) CLANG_ATTR( "desc:" #DESC ";" )
+#define IGNOREATTR() CLANG_ATTR( "ignore" )
+#define OUT_STRUCT() CLANG_ATTR( "out_struct: ;" )
+#define OUT_STRING() CLANG_ATTR( "out_string: ;" )
+#define OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" )
+#define OUT_ARRAY_COUNT(COUNTER, DESC) CLANG_ATTR( "out_array_count:" #COUNTER ";desc:" #DESC )
+#define ARRAY_COUNT(COUNTER) CLANG_ATTR( "array_count:" #COUNTER ";" )
+#define ARRAY_COUNT_D(COUNTER, DESC) CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC )
+#define BUFFER_COUNT(COUNTER) CLANG_ATTR( "buffer_count:" #COUNTER ";" )
+#define OUT_BUFFER_COUNT(COUNTER) CLANG_ATTR( "out_buffer_count:" #COUNTER ";" )
+#define OUT_STRING_COUNT(COUNTER) CLANG_ATTR( "out_string_count:" #COUNTER ";" )
+#define DESC(DESC) CLANG_ATTR("desc:" #DESC ";")
+#define CALL_RESULT(RESULT_TYPE) CLANG_ATTR("callresult:" #RESULT_TYPE ";")
+#define CALL_BACK(RESULT_TYPE) CLANG_ATTR("callback:" #RESULT_TYPE ";")
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef uint64 JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+const JobID_t k_JobIDNil = 0xffffffffffffffffull;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+typedef uint32 BundleId_t;
+const BundleId_t k_uBundleIdInvalid = 0;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+// ID for a depot content manifest
+typedef uint64 ManifestId_t;
+const ManifestId_t k_uManifestIdInvalid = 0;
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_139/steamuniverse.h b/lsteamclient/steamworks_sdk_139/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_139/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_140/isteamapplist.h b/lsteamclient/steamworks_sdk_140/isteamapplist.h
new file mode 100644
index 00000000..d0d7e7e7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, OUT_STRING() char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_140/isteamapps.h b/lsteamclient/steamworks_sdk_140/isteamapps.h
new file mode 100644
index 00000000..89c0aaf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamapps.h
@@ -0,0 +1,176 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 240; // max supported length of a legacy cd key
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request legacy cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+ // get download progress for optional DLC
+ virtual bool GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // return the buildid of this app, may change at any time based on backend updates to the game
+ virtual int GetAppBuildId() = 0;
+
+ // Request all proof of purchase keys for the calling appid and asociated DLC.
+ // A series of AppProofOfPurchaseKeyResponse_t callbacks will be sent with
+ // appropriate appid values, ending with a final callback where the m_nAppId
+ // member is k_uAppIdInvalid (zero).
+ virtual void RequestAllProofOfPurchaseKeys() = 0;
+
+ CALL_RESULT( FileDetailsResult_t )
+ virtual SteamAPICall_t GetFileDetails( const char* pszFileName ) = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION008"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RequestAppProofOfPurchaseKey/RequestAllProofOfPurchaseKeys
+// for supporting third-party CD keys, or other proof-of-purchase systems.
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 21 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ uint32 m_cchKeyLength;
+ char m_rgchKey[k_cubAppProofOfPurchaseKeyMax];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetFileDetails
+//-----------------------------------------------------------------------------
+struct FileDetailsResult_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 23 };
+ EResult m_eResult;
+ uint64 m_ulFileSize; // original file size in bytes
+ uint8 m_FileSHA[20]; // original file SHA1 hash
+ uint32 m_unFlags; //
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_140/isteamappticket.h b/lsteamclient/steamworks_sdk_140/isteamappticket.h
new file mode 100644
index 00000000..082e263b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamappticket.h
@@ -0,0 +1,29 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_140/isteamclient.h b/lsteamclient/steamworks_sdk_140/isteamclient.h
new file mode 100644
index 00000000..15bbb770
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamclient.h
@@ -0,0 +1,520 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#if ( defined(STEAM_API_EXPORTS) || defined(STEAM_API_NODLL) ) && !defined(API_GEN)
+#define STEAM_PRIVATE_API( ... ) __VA_ARGS__
+#elif defined(STEAM_API_EXPORTS) && defined(API_GEN)
+#define STEAM_PRIVATE_API( ... )
+#else
+#define STEAM_PRIVATE_API( ... ) protected: __VA_ARGS__ public:
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct ValvePackingSentinel_t
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+extern "C" typedef uint32 ( *SteamAPI_CheckCallbackRegistered_t )( int iCallbackNum );
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamMusicRemote;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+class ISteamHTMLSurface;
+class ISteamInventory;
+class ISteamVideo;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need these APIs if you have a more complex versioning scheme,
+// or if you want to implement a multiplexed gameserver where a single process
+// is handling multiple games at once with independent gameserver SteamIDs.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client.
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Deprecated. Applications should use SteamAPI_RunCallbacks() or SteamGameServer_RunCallbacks() instead.
+ STEAM_PRIVATE_API( virtual void RunFrame() = 0; )
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message.
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player Remote
+ virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // html page display
+ virtual ISteamHTMLSurface *GetISteamHTMLSurface(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // Helper functions for internal Steam usage
+ STEAM_PRIVATE_API( virtual void DEPRECATED_Set_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; )
+ STEAM_PRIVATE_API( virtual void DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; )
+ STEAM_PRIVATE_API( virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0; )
+
+ // inventory
+ virtual ISteamInventory *GetISteamInventory( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Video
+ virtual ISteamVideo *GetISteamVideo( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient017"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iClientDepotBuilderCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+enum { k_iSteamMusicRemoteCallbacks = 4100 };
+enum { k_iClientVRCallbacks = 4200 };
+enum { k_iClientGameNotificationCallbacks = 4300 };
+enum { k_iSteamGameNotificationCallbacks = 4400 };
+enum { k_iSteamHTMLSurfaceCallbacks = 4500 };
+enum { k_iClientVideoCallbacks = 4600 };
+enum { k_iClientInventoryCallbacks = 4700 };
+enum { k_iClientBluetoothManagerCallbacks = 4800 };
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+#ifdef STEAM_CALLBACK_INSPECTION_ENABLED
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname { \
+ typedef callbackname SteamCallback_t; \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+#else
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) struct callbackname { typedef callbackname SteamCallback_t; enum { k_iCallback = callbackid };
+#define CALLBACK_MEMBER( varidx, vartype, varname ) public: vartype varname ;
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) public: vartype varname [ varcount ];
+#define END_CALLBACK_INTERNAL_BEGIN( numvars )
+#define END_CALLBACK_INTERNAL_SWITCH( varidx )
+#define END_CALLBACK_INTERNAL_END() };
+#define END_DEFINE_CALLBACK_0() };
+
+#endif
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_10() \
+ END_CALLBACK_INTERNAL_BEGIN( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_11() \
+ END_CALLBACK_INTERNAL_BEGIN( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_12() \
+ END_CALLBACK_INTERNAL_BEGIN( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_13() \
+ END_CALLBACK_INTERNAL_BEGIN( 13 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_14() \
+ END_CALLBACK_INTERNAL_BEGIN( 14 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 13 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_140/isteamcontroller.h b/lsteamclient/steamworks_sdk_140/isteamcontroller.h
new file mode 100644
index 00000000..36948b77
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamcontroller.h
@@ -0,0 +1,440 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define STEAM_CONTROLLER_MAX_COUNT 16
+
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTIONS 16
+
+#define STEAM_CONTROLLER_MAX_DIGITAL_ACTIONS 128
+
+#define STEAM_CONTROLLER_MAX_ORIGINS 8
+
+// When sending an option to a specific controller handle, you can send to all controllers via this command
+#define STEAM_CONTROLLER_HANDLE_ALL_CONTROLLERS UINT64_MAX
+
+#define STEAM_CONTROLLER_MIN_ANALOG_ACTION_DATA -1.0f
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTION_DATA 1.0f
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+enum EControllerSource
+{
+ k_EControllerSource_None,
+ k_EControllerSource_LeftTrackpad,
+ k_EControllerSource_RightTrackpad,
+ k_EControllerSource_Joystick,
+ k_EControllerSource_ABXY,
+ k_EControllerSource_Switch,
+ k_EControllerSource_LeftTrigger,
+ k_EControllerSource_RightTrigger,
+ k_EControllerSource_Gyro,
+ k_EControllerSource_CenterTrackpad, // PS4
+ k_EControllerSource_RightJoystick, // Traditional Controllers
+ k_EControllerSource_DPad, // Traditional Controllers
+ k_EControllerSource_Count
+};
+
+enum EControllerSourceMode
+{
+ k_EControllerSourceMode_None,
+ k_EControllerSourceMode_Dpad,
+ k_EControllerSourceMode_Buttons,
+ k_EControllerSourceMode_FourButtons,
+ k_EControllerSourceMode_AbsoluteMouse,
+ k_EControllerSourceMode_RelativeMouse,
+ k_EControllerSourceMode_JoystickMove,
+ k_EControllerSourceMode_JoystickMouse,
+ k_EControllerSourceMode_JoystickCamera,
+ k_EControllerSourceMode_ScrollWheel,
+ k_EControllerSourceMode_Trigger,
+ k_EControllerSourceMode_TouchMenu,
+ k_EControllerSourceMode_MouseJoystick,
+ k_EControllerSourceMode_MouseRegion,
+ k_EControllerSourceMode_RadialMenu,
+ k_EControllerSourceMode_SingleButton,
+ k_EControllerSourceMode_Switches
+};
+
+enum EControllerActionOrigin
+{
+ // Steam Controller
+ k_EControllerActionOrigin_None,
+ k_EControllerActionOrigin_A,
+ k_EControllerActionOrigin_B,
+ k_EControllerActionOrigin_X,
+ k_EControllerActionOrigin_Y,
+ k_EControllerActionOrigin_LeftBumper,
+ k_EControllerActionOrigin_RightBumper,
+ k_EControllerActionOrigin_LeftGrip,
+ k_EControllerActionOrigin_RightGrip,
+ k_EControllerActionOrigin_Start,
+ k_EControllerActionOrigin_Back,
+ k_EControllerActionOrigin_LeftPad_Touch,
+ k_EControllerActionOrigin_LeftPad_Swipe,
+ k_EControllerActionOrigin_LeftPad_Click,
+ k_EControllerActionOrigin_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_LeftPad_DPadWest,
+ k_EControllerActionOrigin_LeftPad_DPadEast,
+ k_EControllerActionOrigin_RightPad_Touch,
+ k_EControllerActionOrigin_RightPad_Swipe,
+ k_EControllerActionOrigin_RightPad_Click,
+ k_EControllerActionOrigin_RightPad_DPadNorth,
+ k_EControllerActionOrigin_RightPad_DPadSouth,
+ k_EControllerActionOrigin_RightPad_DPadWest,
+ k_EControllerActionOrigin_RightPad_DPadEast,
+ k_EControllerActionOrigin_LeftTrigger_Pull,
+ k_EControllerActionOrigin_LeftTrigger_Click,
+ k_EControllerActionOrigin_RightTrigger_Pull,
+ k_EControllerActionOrigin_RightTrigger_Click,
+ k_EControllerActionOrigin_LeftStick_Move,
+ k_EControllerActionOrigin_LeftStick_Click,
+ k_EControllerActionOrigin_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_LeftStick_DPadWest,
+ k_EControllerActionOrigin_LeftStick_DPadEast,
+ k_EControllerActionOrigin_Gyro_Move,
+ k_EControllerActionOrigin_Gyro_Pitch,
+ k_EControllerActionOrigin_Gyro_Yaw,
+ k_EControllerActionOrigin_Gyro_Roll,
+
+ // PS4 Dual Shock
+ k_EControllerActionOrigin_PS4_X,
+ k_EControllerActionOrigin_PS4_Circle,
+ k_EControllerActionOrigin_PS4_Triangle,
+ k_EControllerActionOrigin_PS4_Square,
+ k_EControllerActionOrigin_PS4_LeftBumper,
+ k_EControllerActionOrigin_PS4_RightBumper,
+ k_EControllerActionOrigin_PS4_Options, //Start
+ k_EControllerActionOrigin_PS4_Share, //Back
+ k_EControllerActionOrigin_PS4_LeftPad_Touch,
+ k_EControllerActionOrigin_PS4_LeftPad_Swipe,
+ k_EControllerActionOrigin_PS4_LeftPad_Click,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadWest,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadEast,
+ k_EControllerActionOrigin_PS4_RightPad_Touch,
+ k_EControllerActionOrigin_PS4_RightPad_Swipe,
+ k_EControllerActionOrigin_PS4_RightPad_Click,
+ k_EControllerActionOrigin_PS4_RightPad_DPadNorth,
+ k_EControllerActionOrigin_PS4_RightPad_DPadSouth,
+ k_EControllerActionOrigin_PS4_RightPad_DPadWest,
+ k_EControllerActionOrigin_PS4_RightPad_DPadEast,
+ k_EControllerActionOrigin_PS4_CenterPad_Touch,
+ k_EControllerActionOrigin_PS4_CenterPad_Swipe,
+ k_EControllerActionOrigin_PS4_CenterPad_Click,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadNorth,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadSouth,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadWest,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadEast,
+ k_EControllerActionOrigin_PS4_LeftTrigger_Pull,
+ k_EControllerActionOrigin_PS4_LeftTrigger_Click,
+ k_EControllerActionOrigin_PS4_RightTrigger_Pull,
+ k_EControllerActionOrigin_PS4_RightTrigger_Click,
+ k_EControllerActionOrigin_PS4_LeftStick_Move,
+ k_EControllerActionOrigin_PS4_LeftStick_Click,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadWest,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadEast,
+ k_EControllerActionOrigin_PS4_RightStick_Move,
+ k_EControllerActionOrigin_PS4_RightStick_Click,
+ k_EControllerActionOrigin_PS4_RightStick_DPadNorth,
+ k_EControllerActionOrigin_PS4_RightStick_DPadSouth,
+ k_EControllerActionOrigin_PS4_RightStick_DPadWest,
+ k_EControllerActionOrigin_PS4_RightStick_DPadEast,
+ k_EControllerActionOrigin_PS4_DPad_North,
+ k_EControllerActionOrigin_PS4_DPad_South,
+ k_EControllerActionOrigin_PS4_DPad_West,
+ k_EControllerActionOrigin_PS4_DPad_East,
+ k_EControllerActionOrigin_PS4_Gyro_Move,
+ k_EControllerActionOrigin_PS4_Gyro_Pitch,
+ k_EControllerActionOrigin_PS4_Gyro_Yaw,
+ k_EControllerActionOrigin_PS4_Gyro_Roll,
+
+ // XBox One
+ k_EControllerActionOrigin_XBoxOne_A,
+ k_EControllerActionOrigin_XBoxOne_B,
+ k_EControllerActionOrigin_XBoxOne_X,
+ k_EControllerActionOrigin_XBoxOne_Y,
+ k_EControllerActionOrigin_XBoxOne_LeftBumper,
+ k_EControllerActionOrigin_XBoxOne_RightBumper,
+ k_EControllerActionOrigin_XBoxOne_Menu, //Start
+ k_EControllerActionOrigin_XBoxOne_View, //Back
+ k_EControllerActionOrigin_XBoxOne_LeftTrigger_Pull,
+ k_EControllerActionOrigin_XBoxOne_LeftTrigger_Click,
+ k_EControllerActionOrigin_XBoxOne_RightTrigger_Pull,
+ k_EControllerActionOrigin_XBoxOne_RightTrigger_Click,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_Move,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_Click,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadWest,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadEast,
+ k_EControllerActionOrigin_XBoxOne_RightStick_Move,
+ k_EControllerActionOrigin_XBoxOne_RightStick_Click,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadNorth,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadSouth,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadWest,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadEast,
+ k_EControllerActionOrigin_XBoxOne_DPad_North,
+ k_EControllerActionOrigin_XBoxOne_DPad_South,
+ k_EControllerActionOrigin_XBoxOne_DPad_West,
+ k_EControllerActionOrigin_XBoxOne_DPad_East,
+
+ // XBox 360
+ k_EControllerActionOrigin_XBox360_A,
+ k_EControllerActionOrigin_XBox360_B,
+ k_EControllerActionOrigin_XBox360_X,
+ k_EControllerActionOrigin_XBox360_Y,
+ k_EControllerActionOrigin_XBox360_LeftBumper,
+ k_EControllerActionOrigin_XBox360_RightBumper,
+ k_EControllerActionOrigin_XBox360_Start, //Start
+ k_EControllerActionOrigin_XBox360_Back, //Back
+ k_EControllerActionOrigin_XBox360_LeftTrigger_Pull,
+ k_EControllerActionOrigin_XBox360_LeftTrigger_Click,
+ k_EControllerActionOrigin_XBox360_RightTrigger_Pull,
+ k_EControllerActionOrigin_XBox360_RightTrigger_Click,
+ k_EControllerActionOrigin_XBox360_LeftStick_Move,
+ k_EControllerActionOrigin_XBox360_LeftStick_Click,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadWest,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadEast,
+ k_EControllerActionOrigin_XBox360_RightStick_Move,
+ k_EControllerActionOrigin_XBox360_RightStick_Click,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadNorth,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadSouth,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadWest,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadEast,
+ k_EControllerActionOrigin_XBox360_DPad_North,
+ k_EControllerActionOrigin_XBox360_DPad_South,
+ k_EControllerActionOrigin_XBox360_DPad_West,
+ k_EControllerActionOrigin_XBox360_DPad_East,
+
+ // SteamController V2
+ k_EControllerActionOrigin_SteamV2_A,
+ k_EControllerActionOrigin_SteamV2_B,
+ k_EControllerActionOrigin_SteamV2_X,
+ k_EControllerActionOrigin_SteamV2_Y,
+ k_EControllerActionOrigin_SteamV2_LeftBumper,
+ k_EControllerActionOrigin_SteamV2_RightBumper,
+ k_EControllerActionOrigin_SteamV2_LeftGrip,
+ k_EControllerActionOrigin_SteamV2_RightGrip,
+ k_EControllerActionOrigin_SteamV2_LeftGrip_Upper,
+ k_EControllerActionOrigin_SteamV2_RightGrip_Upper,
+ k_EControllerActionOrigin_SteamV2_LeftBumper_Pressure,
+ k_EControllerActionOrigin_SteamV2_RightBumper_Pressure,
+ k_EControllerActionOrigin_SteamV2_LeftGrip_Pressure,
+ k_EControllerActionOrigin_SteamV2_RightGrip_Pressure,
+ k_EControllerActionOrigin_SteamV2_LeftGrip_Upper_Pressure,
+ k_EControllerActionOrigin_SteamV2_RightGrip_Upper_Pressure,
+ k_EControllerActionOrigin_SteamV2_Start,
+ k_EControllerActionOrigin_SteamV2_Back,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Touch,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Swipe,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Click,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Pressure,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadWest,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadEast,
+ k_EControllerActionOrigin_SteamV2_RightPad_Touch,
+ k_EControllerActionOrigin_SteamV2_RightPad_Swipe,
+ k_EControllerActionOrigin_SteamV2_RightPad_Click,
+ k_EControllerActionOrigin_SteamV2_RightPad_Pressure,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadNorth,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadSouth,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadWest,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadEast,
+ k_EControllerActionOrigin_SteamV2_LeftTrigger_Pull,
+ k_EControllerActionOrigin_SteamV2_LeftTrigger_Click,
+ k_EControllerActionOrigin_SteamV2_RightTrigger_Pull,
+ k_EControllerActionOrigin_SteamV2_RightTrigger_Click,
+ k_EControllerActionOrigin_SteamV2_LeftStick_Move,
+ k_EControllerActionOrigin_SteamV2_LeftStick_Click,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadWest,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadEast,
+ k_EControllerActionOrigin_SteamV2_Gyro_Move,
+ k_EControllerActionOrigin_SteamV2_Gyro_Pitch,
+ k_EControllerActionOrigin_SteamV2_Gyro_Yaw,
+ k_EControllerActionOrigin_SteamV2_Gyro_Roll,
+
+ k_EControllerActionOrigin_Count
+};
+
+enum ESteamControllerLEDFlag
+{
+ k_ESteamControllerLEDFlag_SetColor,
+ k_ESteamControllerLEDFlag_RestoreUserDefault
+};
+
+// ControllerHandle_t is used to refer to a specific controller.
+// This handle will consistently identify a controller, even if it is disconnected and re-connected
+typedef uint64 ControllerHandle_t;
+
+
+// These handles are used to refer to a specific in-game action or action set
+// All action handles should be queried during initialization for performance reasons
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+
+#pragma pack( push, 1 )
+
+struct ControllerAnalogActionData_t
+{
+ // Type of data coming from this action, this will match what got specified in the action set
+ EControllerSourceMode eMode;
+
+ // The current state of this action; will be delta updates for mouse actions
+ float x, y;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+struct ControllerDigitalActionData_t
+{
+ // The current state of this action; will be true if currently pressed
+ bool bState;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+struct ControllerMotionData_t
+{
+ // Sensor-fused absolute rotation; will drift in heading
+ float rotQuatX;
+ float rotQuatY;
+ float rotQuatZ;
+ float rotQuatW;
+
+ // Positional acceleration
+ float posAccelX;
+ float posAccelY;
+ float posAccelZ;
+
+ // Angular velocity
+ float rotVelX;
+ float rotVelY;
+ float rotVelZ;
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ // Init and Shutdown must be called when starting/ending use of this interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Synchronize API state with the latest Steam Controller inputs available. This
+ // is performed automatically by SteamAPI_RunCallbacks, but for the absolute lowest
+ // possible latency, you call this directly before reading controller state.
+ virtual void RunFrame() = 0;
+
+ // Enumerate currently connected controllers
+ // handlesOut should point to a STEAM_CONTROLLER_MAX_COUNT sized array of ControllerHandle_t handles
+ // Returns the number of handles written to handlesOut
+ virtual int GetConnectedControllers( ControllerHandle_t *handlesOut ) = 0;
+
+ // Invokes the Steam overlay and brings up the binding screen
+ // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
+ virtual bool ShowBindingPanel( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTION SETS
+ // Lookup the handle for an Action Set. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerActionSetHandle_t GetActionSetHandle( const char *pszActionSetName ) = 0;
+
+ // Reconfigure the controller to use the specified action set (ie 'Menu', 'Walk' or 'Drive')
+ // This is cheap, and can be safely called repeatedly. It's often easier to repeatedly call it in
+ // your state loops, instead of trying to place it in all of your state transitions.
+ virtual void ActivateActionSet( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle ) = 0;
+ virtual ControllerActionSetHandle_t GetCurrentActionSet( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTIONS
+ // Lookup the handle for a digital action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerDigitalActionHandle_t GetDigitalActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of the supplied digital game action
+ virtual ControllerDigitalActionData_t GetDigitalActionData( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle ) = 0;
+
+ // Get the origin(s) for a digital action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ // Lookup the handle for an analog action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerAnalogActionHandle_t GetAnalogActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of these supplied analog game action
+ virtual ControllerAnalogActionData_t GetAnalogActionData( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle ) = 0;
+
+ // Get the origin(s) for an analog action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ virtual void StopAnalogActionMomentum( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction ) = 0;
+
+ // Trigger a haptic pulse on a controller
+ virtual void TriggerHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ // Trigger a pulse with a duty cycle of usDurationMicroSec / usOffMicroSec, unRepeat times.
+ // nFlags is currently unused and reserved for future use.
+ virtual void TriggerRepeatedHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags ) = 0;
+
+ // Tigger a vibration event on supported controllers.
+ virtual void TriggerVibration( ControllerHandle_t controllerHandle, unsigned short usLeftSpeed, unsigned short usRightSpeed ) = 0;
+
+ // Set the controller LED color on supported controllers.
+ virtual void SetLEDColor( ControllerHandle_t controllerHandle, uint8 nColorR, uint8 nColorG, uint8 nColorB, unsigned int nFlags ) = 0;
+
+ // Returns the associated gamepad index for the specified controller, if emulating a gamepad
+ virtual int GetGamepadIndexForController( ControllerHandle_t ulControllerHandle ) = 0;
+
+ // Returns the associated controller handle for the specified emulated gamepad
+ virtual ControllerHandle_t GetControllerForGamepadIndex( int nIndex ) = 0;
+
+ // Returns raw motion data from the specified controller
+ virtual ControllerMotionData_t GetMotionData( ControllerHandle_t controllerHandle ) = 0;
+
+ // Attempt to display origins of given action in the controller HUD, for the currently active action set
+ // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
+ virtual bool ShowDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition ) = 0;
+ virtual bool ShowAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition ) = 0;
+
+ // Returns a localized string (from Steam's language setting) for the specified origin
+ virtual const char *GetStringForActionOrigin( EControllerActionOrigin eOrigin ) = 0;
+
+ // Get a local path to art for on-screen glyph for a particular origin
+ virtual const char *GetGlyphForActionOrigin( EControllerActionOrigin eOrigin ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "SteamController005"
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_140/isteamfriends.h b/lsteamclient/steamworks_sdk_140/isteamfriends.h
new file mode 100644
index 00000000..44f4682e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamfriends.h
@@ -0,0 +1,636 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1, // this doesn't get stored; the user has just done an Ignore on an friendship invite
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5, // this is stored; the user has explicit blocked this other user from comments/chat/etc
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested_DEPRECATED = 7, // was used by the original implementation of the facebook linking feature, but now unused.
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+// friends group identifier type
+typedef int16 FriendsGroupID_t;
+
+// invalid friends group identifier constant
+const FriendsGroupID_t k_FriendsGroupID_Invalid = -1;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ // k_EFriendFlagSuggested = 0x800, // not used
+ k_EFriendFlagChatMember = 0x1000,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ CALL_RESULT( SetPersonaNameResponse_t )
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, OUT_STRUCT() FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+ // friends steam level
+ virtual int GetFriendSteamLevel( CSteamID steamIDFriend ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // friend grouping (tag) apis
+ // returns the number of friends groups
+ virtual int GetFriendsGroupCount() = 0;
+ // returns the friends group ID for the given index (invalid indices return k_FriendsGroupID_Invalid)
+ virtual FriendsGroupID_t GetFriendsGroupIDByIndex( int iFG ) = 0;
+ // returns the name for the given friends group (NULL in the case of invalid friends group IDs)
+ virtual const char *GetFriendsGroupName( FriendsGroupID_t friendsGroupID ) = 0;
+ // returns the number of members in a given friends group
+ virtual int GetFriendsGroupMembersCount( FriendsGroupID_t friendsGroupID ) = 0;
+ // gets up to nMembersCount members of the given friends group, if fewer exist than requested those positions' SteamIDs will be invalid
+ virtual void GetFriendsGroupMembersList( FriendsGroupID_t friendsGroupID, OUT_ARRAY_CALL(nMembersCount, GetFriendsGroupMembersCount, friendsGroupID ) CSteamID *pOutSteamIDMembers, int nMembersCount ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( ARRAY_COUNT(cClansToRequest) CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ CALL_RESULT( ClanOfficerListResponse_t )
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Note the following limits: k_cchMaxRichPresenceKeys, k_cchMaxRichPresenceKeyLength, k_cchMaxRichPresenceValueLength
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ CALL_RESULT( JoinClanChatRoomCompletionResult_t )
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, OUT_STRUCT() CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ CALL_RESULT( FriendsGetFollowerCount_t )
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ CALL_RESULT( FriendsIsFollowing_t )
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ CALL_RESULT( FriendsEnumerateFollowingList_t )
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends015"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_140/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_140/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_140/isteamgameserver.h b/lsteamclient/steamworks_sdk_140/isteamgameserver.h
new file mode 100644
index 00000000..2004c830
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamgameserver.h
@@ -0,0 +1,387 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ CALL_RESULT( GSReputation_t )
+ virtual SteamAPICall_t GetServerReputation() = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ CALL_RESULT( AssociateWithClanResult_t )
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ CALL_RESULT( ComputeNewPlayerCompatibilityResult_t )
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_140/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_140/isteamgameserverstats.h
new file mode 100644
index 00000000..e4c7d648
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamgameserverstats.h
@@ -0,0 +1,101 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ CALL_RESULT( GSStatsReceived_t )
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ CALL_RESULT( GSStatsStored_t )
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_140/isteamhtmlsurface.h b/lsteamclient/steamworks_sdk_140/isteamhtmlsurface.h
new file mode 100644
index 00000000..9b08e4c3
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamhtmlsurface.h
@@ -0,0 +1,453 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to display html pages in a texture
+//
+//=============================================================================
+
+#ifndef ISTEAMHTMLSURFACE_H
+#define ISTEAMHTMLSURFACE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+typedef uint32 HHTMLBrowser;
+const uint32 INVALID_HTMLBROWSER = 0;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for displaying HTML pages and interacting with them
+//-----------------------------------------------------------------------------
+class ISteamHTMLSurface
+{
+public:
+ virtual ~ISteamHTMLSurface() {}
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Create a browser object for display of a html page, when creation is complete the call handle
+ // will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser.
+ // The user agent string is a substring to be added to the general user agent string so you can
+ // identify your client on web servers.
+ // The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if
+ // you do not require this functionality.
+ //
+ // YOU MUST HAVE IMPLEMENTED HANDLERS FOR HTML_BrowserReady_t, HTML_StartRequest_t,
+ // HTML_JSAlert_t, HTML_JSConfirm_t, and HTML_FileOpenDialog_t! See the CALLBACKS
+ // section of this interface (AllowStartRequest, etc) for more details. If you do
+ // not implement these callback handlers, the browser may appear to hang instead of
+ // navigating to new pages or triggering javascript popups.
+ //
+ CALL_RESULT( HTML_BrowserReady_t )
+ virtual SteamAPICall_t CreateBrowser( const char *pchUserAgent, const char *pchUserCSS ) = 0;
+
+ // Call this when you are done with a html surface, this lets us free the resources being used by it
+ virtual void RemoveBrowser( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // Navigate to this URL, results in a HTML_StartRequest_t as the request commences
+ virtual void LoadURL( HHTMLBrowser unBrowserHandle, const char *pchURL, const char *pchPostData ) = 0;
+
+ // Tells the surface the size in pixels to display the surface
+ virtual void SetSize( HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight ) = 0;
+
+ // Stop the load of the current html page
+ virtual void StopLoad( HHTMLBrowser unBrowserHandle ) = 0;
+ // Reload (most likely from local cache) the current page
+ virtual void Reload( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate back in the page history
+ virtual void GoBack( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate forward in the page history
+ virtual void GoForward( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // add this header to any url requests from this browser
+ virtual void AddHeader( HHTMLBrowser unBrowserHandle, const char *pchKey, const char *pchValue ) = 0;
+ // run this javascript script in the currently loaded page
+ virtual void ExecuteJavascript( HHTMLBrowser unBrowserHandle, const char *pchScript ) = 0;
+
+ enum EHTMLMouseButton
+ {
+ eHTMLMouseButton_Left = 0,
+ eHTMLMouseButton_Right = 1,
+ eHTMLMouseButton_Middle = 2,
+ };
+
+ // Mouse click and mouse movement commands
+ virtual void MouseUp( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDown( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDoubleClick( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ // x and y are relative to the HTML bounds
+ virtual void MouseMove( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+ // nDelta is pixels of scroll
+ virtual void MouseWheel( HHTMLBrowser unBrowserHandle, int32 nDelta ) = 0;
+
+ enum EMouseCursor
+ {
+ dc_user = 0,
+ dc_none,
+ dc_arrow,
+ dc_ibeam,
+ dc_hourglass,
+ dc_waitarrow,
+ dc_crosshair,
+ dc_up,
+ dc_sizenw,
+ dc_sizese,
+ dc_sizene,
+ dc_sizesw,
+ dc_sizew,
+ dc_sizee,
+ dc_sizen,
+ dc_sizes,
+ dc_sizewe,
+ dc_sizens,
+ dc_sizeall,
+ dc_no,
+ dc_hand,
+ dc_blank, // don't show any custom cursor, just use your default
+ dc_middle_pan,
+ dc_north_pan,
+ dc_north_east_pan,
+ dc_east_pan,
+ dc_south_east_pan,
+ dc_south_pan,
+ dc_south_west_pan,
+ dc_west_pan,
+ dc_north_west_pan,
+ dc_alias,
+ dc_cell,
+ dc_colresize,
+ dc_copycur,
+ dc_verticaltext,
+ dc_rowresize,
+ dc_zoomin,
+ dc_zoomout,
+ dc_help,
+ dc_custom,
+
+ dc_last, // custom cursors start from this value and up
+ };
+
+ enum EHTMLKeyModifiers
+ {
+ k_eHTMLKeyModifier_None = 0,
+ k_eHTMLKeyModifier_AltDown = 1 << 0,
+ k_eHTMLKeyModifier_CtrlDown = 1 << 1,
+ k_eHTMLKeyModifier_ShiftDown = 1 << 2,
+ };
+
+ // keyboard interactions, native keycode is the virtual key code value from your OS
+ virtual void KeyDown( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ virtual void KeyUp( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ // cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press)
+ virtual void KeyChar( HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+
+ // programmatically scroll this many pixels on the page
+ virtual void SetHorizontalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+ virtual void SetVerticalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+
+ // tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things
+ virtual void SetKeyFocus( HHTMLBrowser unBrowserHandle, bool bHasKeyFocus ) = 0;
+
+ // open the current pages html code in the local editor of choice, used for debugging
+ virtual void ViewSource( HHTMLBrowser unBrowserHandle ) = 0;
+ // copy the currently selected text on the html page to the local clipboard
+ virtual void CopyToClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+ // paste from the local clipboard to the current html page
+ virtual void PasteFromClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element
+ virtual void Find( HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse ) = 0;
+ // cancel a currently running find
+ virtual void StopFind( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // return details about the link at position x,y on the current page
+ virtual void GetLinkAtPosition( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+
+ // set a webcookie for the hostname in question
+ virtual void SetCookie( const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath = "/", RTime32 nExpires = 0, bool bSecure = false, bool bHTTPOnly = false ) = 0;
+
+ // Zoom the current page by flZoom ( from 0.0 to 2.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care)
+ virtual void SetPageScaleFactor( HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY ) = 0;
+
+ // Enable/disable low-resource background mode, where javascript and repaint timers are throttled, resources are
+ // more aggressively purged from memory, and audio/video elements are paused. When background mode is enabled,
+ // all HTML5 video and audio objects will execute ".pause()" and gain the property "._steam_background_paused = 1".
+ // When background mode is disabled, any video or audio objects with that property will resume with ".play()".
+ virtual void SetBackgroundMode( HHTMLBrowser unBrowserHandle, bool bBackgroundMode ) = 0;
+
+ // CALLBACKS
+ //
+ // These set of functions are used as responses to callback requests
+ //
+
+ // You MUST call this in response to a HTML_StartRequest_t callback
+ // Set bAllowed to true to allow this navigation, false to cancel it and stay
+ // on the current page. You can use this feature to limit the valid pages
+ // allowed in your HTML surface.
+ virtual void AllowStartRequest( HHTMLBrowser unBrowserHandle, bool bAllowed ) = 0;
+
+ // You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback
+ // Set bResult to true for the OK option of a confirm, use false otherwise
+ virtual void JSDialogResponse( HHTMLBrowser unBrowserHandle, bool bResult ) = 0;
+
+ // You MUST call this in response to a HTML_FileOpenDialog_t callback
+ IGNOREATTR()
+ virtual void FileLoadDialogResponse( HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles ) = 0;
+};
+
+#define STEAMHTMLSURFACE_INTERFACE_VERSION "STEAMHTMLSURFACE_INTERFACE_VERSION_003"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser is ready for use
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_BrowserReady_t, k_iSteamHTMLSurfaceCallbacks + 1 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this browser is now fully created and ready to navigate to pages
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser has a pending paint
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_NeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 2)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint
+CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called
+CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture
+CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture
+CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update
+CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update
+CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update
+CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update
+CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered
+CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages
+END_DEFINE_CALLBACK_12()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser wanted to navigate to a new page
+// NOTE - you MUST call AllowStartRequest in response to this callback
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_StartRequest_t, k_iSteamHTMLSurfaceCallbacks + 3)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface navigating
+CALLBACK_MEMBER(1, const char *, pchURL) // the url they wish to navigate to
+CALLBACK_MEMBER(2, const char *, pchTarget) // the html link target type (i.e _blank, _self, _parent, _top )
+CALLBACK_MEMBER(3, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER(4, bool, bIsRedirect) // true if this was a http/html redirect from the last load request
+END_DEFINE_CALLBACK_5()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser has been requested to close due to user interaction (usually from a javascript window.close() call)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_CloseBrowser_t, k_iSteamHTMLSurfaceCallbacks + 4)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser is navigating to a new url
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_URLChanged_t, k_iSteamHTMLSurfaceCallbacks + 5 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface navigating
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the url they wish to navigate to
+CALLBACK_MEMBER( 2, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER( 3, bool, bIsRedirect ) // true if this was a http/html redirect from the last load request
+CALLBACK_MEMBER( 4, const char *, pchPageTitle ) // the title of the page
+CALLBACK_MEMBER( 5, bool, bNewNavigation ) // true if this was from a fresh tab and not a click on an existing page
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A page is finished loading
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FinishedRequest_t, k_iSteamHTMLSurfaceCallbacks + 6 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+CALLBACK_MEMBER( 2, const char *, pchPageTitle ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a request to load this url in a new tab
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_OpenLinkInNewTab_t, k_iSteamHTMLSurfaceCallbacks + 7 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the page has a new title now
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ChangedTitle_t, k_iSteamHTMLSurfaceCallbacks + 8 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: results from a search
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SearchResults_t, k_iSteamHTMLSurfaceCallbacks + 9 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unResults ) //
+CALLBACK_MEMBER( 2, uint32, unCurrentMatch ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: page history status changed on the ability to go backwards and forward
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_CanGoBackAndForward_t, k_iSteamHTMLSurfaceCallbacks + 10 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, bool, bCanGoBack ) //
+CALLBACK_MEMBER( 2, bool, bCanGoForward ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the horizontal scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HorizontalScroll_t, k_iSteamHTMLSurfaceCallbacks + 11 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool , bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the vertical scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_VerticalScroll_t, k_iSteamHTMLSurfaceCallbacks + 12 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool, bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetLinkAtPosition call
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_LinkAtPosition_t, k_iSteamHTMLSurfaceCallbacks + 13 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, x ) // NOTE - Not currently set
+CALLBACK_MEMBER( 2, uint32, y ) // NOTE - Not currently set
+CALLBACK_MEMBER( 3, const char *, pchURL ) //
+CALLBACK_MEMBER( 4, bool, bInput ) //
+CALLBACK_MEMBER( 5, bool, bLiveLink ) //
+END_DEFINE_CALLBACK_6()
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript alert dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSAlert_t, k_iSteamHTMLSurfaceCallbacks + 14 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript confirmation dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSConfirm_t, k_iSteamHTMLSurfaceCallbacks + 15 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: when received show a file open dialog
+// then call FileLoadDialogResponse with the file(s) the user selected.
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FileOpenDialog_t, k_iSteamHTMLSurfaceCallbacks + 16 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+CALLBACK_MEMBER( 2, const char *, pchInitialFile ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new html window has been created
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_NewWindow_t, k_iSteamHTMLSurfaceCallbacks + 21 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the current surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the page to load
+CALLBACK_MEMBER( 2, uint32, unX ) // the x pos into the page to display the popup
+CALLBACK_MEMBER( 3, uint32, unY ) // the y pos into the page to display the popup
+CALLBACK_MEMBER( 4, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 5, uint32, unTall ) // the total height of the pBGRA texture
+CALLBACK_MEMBER( 6, HHTMLBrowser, unNewWindow_BrowserHandle ) // the handle of the new window surface
+END_DEFINE_CALLBACK_7()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: change the cursor to display
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SetCursor_t, k_iSteamHTMLSurfaceCallbacks + 22 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, eMouseCursor ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: informational message from the browser
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_StatusText_t, k_iSteamHTMLSurfaceCallbacks + 23 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ShowToolTip_t, k_iSteamHTMLSurfaceCallbacks + 24 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: update the text of an existing tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_UpdateToolTip_t, k_iSteamHTMLSurfaceCallbacks + 25 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: hide the tooltip you are showing
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HideToolTip_t, k_iSteamHTMLSurfaceCallbacks + 26 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMHTMLSURFACE_H
diff --git a/lsteamclient/steamworks_sdk_140/isteamhttp.h b/lsteamclient/steamworks_sdk_140/isteamhttp.h
new file mode 100644
index 00000000..d96a631f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamhttp.h
@@ -0,0 +1,210 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+typedef uint32 HTTPCookieContainerHandle;
+#define INVALID_HTTPCOOKIE_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Both http and https are supported,
+ // so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+
+ // Creates a cookie container handle which you must later free with ReleaseCookieContainer(). If bAllowResponsesToModify=true
+ // than any response to your requests using this cookie container may add new cookies which may be transmitted with
+ // future requests. If bAllowResponsesToModify=false than only cookies you explicitly set will be sent. This API is just for
+ // during process lifetime, after steam restarts no cookies are persisted and you have no way to access the cookie container across
+ // repeat executions of your process.
+ virtual HTTPCookieContainerHandle CreateCookieContainer( bool bAllowResponsesToModify ) = 0;
+
+ // Release a cookie container you are finished using, freeing it's memory
+ virtual bool ReleaseCookieContainer( HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Adds a cookie to the specified cookie container that will be used with future requests.
+ virtual bool SetCookie( HTTPCookieContainerHandle hCookieContainer, const char *pchHost, const char *pchUrl, const char *pchCookie ) = 0;
+
+ // Set the cookie container to use for a HTTP request
+ virtual bool SetHTTPRequestCookieContainer( HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Set the extra user agent info for a request, this doesn't clobber the normal user agent, it just adds the extra info on the end
+ virtual bool SetHTTPRequestUserAgentInfo( HTTPRequestHandle hRequest, const char *pchUserAgentInfo ) = 0;
+
+ // Set that https request should require verified SSL certificate via machines certificate trust store
+ virtual bool SetHTTPRequestRequiresVerifiedCertificate( HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate ) = 0;
+
+ // Set an absolute timeout on the HTTP request, this is just a total time timeout different than the network activity timeout
+ // which can bump everytime we get more data
+ virtual bool SetHTTPRequestAbsoluteTimeoutMS( HTTPRequestHandle hRequest, uint32 unMilliseconds ) = 0;
+
+ // Check if the reason the request failed was because we timed it out (rather than some harder failure)
+ virtual bool GetHTTPRequestWasTimedOut( HTTPRequestHandle hRequest, bool *pbWasTimedOut ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+
+ uint32 m_unBodySize; // Same as GetHTTPResponseBodySize()
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_140/isteaminventory.h b/lsteamclient/steamworks_sdk_140/isteaminventory.h
new file mode 100644
index 00000000..e788a255
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteaminventory.h
@@ -0,0 +1,382 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Inventory
+//
+//=============================================================================
+
+#ifndef ISTEAMINVENTORY_H
+#define ISTEAMINVENTORY_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// Every individual instance of an item has a globally-unique ItemInstanceID.
+// This ID is unique to the combination of (player, specific item instance)
+// and will not be transferred to another player or re-used for another item.
+typedef uint64 SteamItemInstanceID_t;
+
+static const SteamItemInstanceID_t k_SteamItemInstanceIDInvalid = (SteamItemInstanceID_t)~0;
+
+// Types of items in your game are identified by a 32-bit "item definition number".
+// Valid definition numbers are between 1 and 999999999; numbers less than or equal to
+// zero are invalid, and numbers greater than or equal to one billion (1x10^9) are
+// reserved for internal Steam use.
+typedef int32 SteamItemDef_t;
+
+
+enum ESteamItemFlags
+{
+ // Item status flags - these flags are permanently attached to specific item instances
+ k_ESteamItemNoTrade = 1 << 0, // This item is account-locked and cannot be traded or given away.
+
+ // Action confirmation flags - these flags are set one time only, as part of a result set
+ k_ESteamItemRemoved = 1 << 8, // The item has been destroyed, traded away, expired, or otherwise invalidated
+ k_ESteamItemConsumed = 1 << 9, // The item quantity has been decreased by 1 via ConsumeItem API.
+
+ // All other flag bits are currently reserved for internal Steam use at this time.
+ // Do not assume anything about the state of other flags which are not defined here.
+};
+
+struct SteamItemDetails_t
+{
+ SteamItemInstanceID_t m_itemId;
+ SteamItemDef_t m_iDefinition;
+ uint16 m_unQuantity;
+ uint16 m_unFlags; // see ESteamItemFlags
+};
+
+typedef int32 SteamInventoryResult_t;
+
+static const SteamInventoryResult_t k_SteamInventoryResultInvalid = -1;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Inventory query and manipulation API
+//-----------------------------------------------------------------------------
+class ISteamInventory
+{
+public:
+
+ // INVENTORY ASYNC RESULT MANAGEMENT
+ //
+ // Asynchronous inventory queries always output a result handle which can be used with
+ // GetResultStatus, GetResultItems, etc. A SteamInventoryResultReady_t callback will
+ // be triggered when the asynchronous result becomes ready (or fails).
+ //
+
+ // Find out the status of an asynchronous inventory result handle. Possible values:
+ // k_EResultPending - still in progress
+ // k_EResultOK - done, result ready
+ // k_EResultExpired - done, result ready, maybe out of date (see DeserializeResult)
+ // k_EResultInvalidParam - ERROR: invalid API call parameters
+ // k_EResultServiceUnavailable - ERROR: service temporarily down, you may retry later
+ // k_EResultLimitExceeded - ERROR: operation would exceed per-user inventory limits
+ // k_EResultFail - ERROR: unknown / generic error
+ METHOD_DESC(Find out the status of an asynchronous inventory result handle.)
+ virtual EResult GetResultStatus( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Copies the contents of a result set into a flat array. The specific
+ // contents of the result set depend on which query which was used.
+ METHOD_DESC(Copies the contents of a result set into a flat array. The specific contents of the result set depend on which query which was used.)
+ virtual bool GetResultItems( SteamInventoryResult_t resultHandle,
+ OUT_ARRAY_COUNT( punOutItemsArraySize,Output array) SteamItemDetails_t *pOutItemsArray,
+ uint32 *punOutItemsArraySize ) = 0;
+
+ // In combination with GetResultItems, you can use GetResultItemProperty to retrieve
+ // dynamic string properties for a given item returned in the result set.
+ //
+ // Property names are always composed of ASCII letters, numbers, and/or underscores.
+ //
+ // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available
+ // property names.
+ //
+ // If pchValueBuffer is NULL, *punValueBufferSize will contain the
+ // suggested buffer size. Otherwise it will be the number of bytes actually copied
+ // to pchValueBuffer. If the results do not fit in the given buffer, partial
+ // results may be copied.
+ virtual bool GetResultItemProperty( SteamInventoryResult_t resultHandle,
+ uint32 unItemIndex,
+ const char *pchPropertyName,
+ OUT_STRING_COUNT( punValueBufferSizeOut ) char *pchValueBuffer, uint32 *punValueBufferSizeOut ) = 0;
+
+ // Returns the server time at which the result was generated. Compare against
+ // the value of IClientUtils::GetServerRealTime() to determine age.
+ METHOD_DESC(Returns the server time at which the result was generated. Compare against the value of IClientUtils::GetServerRealTime() to determine age.)
+ virtual uint32 GetResultTimestamp( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Returns true if the result belongs to the target steam ID, false if the
+ // result does not. This is important when using DeserializeResult, to verify
+ // that a remote player is not pretending to have a different user's inventory.
+ METHOD_DESC(Returns true if the result belongs to the target steam ID or false if the result does not. This is important when using DeserializeResult to verify that a remote player is not pretending to have a different users inventory.)
+ virtual bool CheckResultSteamID( SteamInventoryResult_t resultHandle, CSteamID steamIDExpected ) = 0;
+
+ // Destroys a result handle and frees all associated memory.
+ METHOD_DESC(Destroys a result handle and frees all associated memory.)
+ virtual void DestroyResult( SteamInventoryResult_t resultHandle ) = 0;
+
+
+ // INVENTORY ASYNC QUERY
+ //
+
+ // Captures the entire state of the current user's Steam inventory.
+ // You must call DestroyResult on this handle when you are done with it.
+ // Returns false and sets *pResultHandle to zero if inventory is unavailable.
+ // Note: calls to this function are subject to rate limits and may return
+ // cached results if called too frequently. It is suggested that you call
+ // this function only when you are about to display the user's full inventory,
+ // or if you expect that the inventory may have changed.
+ METHOD_DESC(Captures the entire state of the current users Steam inventory.)
+ virtual bool GetAllItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+
+ // Captures the state of a subset of the current user's Steam inventory,
+ // identified by an array of item instance IDs. The results from this call
+ // can be serialized and passed to other players to "prove" that the current
+ // user owns specific items, without exposing the user's entire inventory.
+ // For example, you could call GetItemsByID with the IDs of the user's
+ // currently equipped cosmetic items and serialize this to a buffer, and
+ // then transmit this buffer to other players upon joining a game.
+ METHOD_DESC(Captures the state of a subset of the current users Steam inventory identified by an array of item instance IDs.)
+ virtual bool GetItemsByID( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT( unCountInstanceIDs ) const SteamItemInstanceID_t *pInstanceIDs, uint32 unCountInstanceIDs ) = 0;
+
+
+ // RESULT SERIALIZATION AND AUTHENTICATION
+ //
+ // Serialized result sets contain a short signature which can't be forged
+ // or replayed across different game sessions. A result set can be serialized
+ // on the local client, transmitted to other players via your game networking,
+ // and deserialized by the remote players. This is a secure way of preventing
+ // hackers from lying about posessing rare/high-value items.
+
+ // Serializes a result set with signature bytes to an output buffer. Pass
+ // NULL as an output buffer to get the required size via punOutBufferSize.
+ // The size of a serialized result depends on the number items which are being
+ // serialized. When securely transmitting items to other players, it is
+ // recommended to use "GetItemsByID" first to create a minimal result set.
+ // Results have a built-in timestamp which will be considered "expired" after
+ // an hour has elapsed. See DeserializeResult for expiration handling.
+ virtual bool SerializeResult( SteamInventoryResult_t resultHandle, OUT_BUFFER_COUNT(punOutBufferSize) void *pOutBuffer, uint32 *punOutBufferSize ) = 0;
+
+ // Deserializes a result set and verifies the signature bytes. Returns false
+ // if bRequireFullOnlineVerify is set but Steam is running in Offline mode.
+ // Otherwise returns true and then delivers error codes via GetResultStatus.
+ //
+ // The bRESERVED_MUST_BE_FALSE flag is reserved for future use and should not
+ // be set to true by your game at this time.
+ //
+ // DeserializeResult has a potential soft-failure mode where the handle status
+ // is set to k_EResultExpired. GetResultItems() still succeeds in this mode.
+ // The "expired" result could indicate that the data may be out of date - not
+ // just due to timed expiration (one hour), but also because one of the items
+ // in the result set may have been traded or consumed since the result set was
+ // generated. You could compare the timestamp from GetResultTimestamp() to
+ // ISteamUtils::GetServerRealTime() to determine how old the data is. You could
+ // simply ignore the "expired" result code and continue as normal, or you
+ // could challenge the player with expired data to send an updated result set.
+ virtual bool DeserializeResult( SteamInventoryResult_t *pOutResultHandle, BUFFER_COUNT(punOutBufferSize) const void *pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE = false ) = 0;
+
+
+ // INVENTORY ASYNC MODIFICATION
+ //
+
+ // GenerateItems() creates one or more items and then generates a SteamInventoryCallback_t
+ // notification with a matching nCallbackContext parameter. This API is only intended
+ // for prototyping - it is only usable by Steam accounts that belong to the publisher group
+ // for your game.
+ // If punArrayQuantity is not NULL, it should be the same length as pArrayItems and should
+ // describe the quantity of each item to generate.
+ virtual bool GenerateItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, ARRAY_COUNT(unArrayLength) const uint32 *punArrayQuantity, uint32 unArrayLength ) = 0;
+
+ // GrantPromoItems() checks the list of promotional items for which the user may be eligible
+ // and grants the items (one time only). On success, the result set will include items which
+ // were granted, if any. If no items were granted because the user isn't eligible for any
+ // promotions, this is still considered a success.
+ METHOD_DESC(GrantPromoItems() checks the list of promotional items for which the user may be eligible and grants the items (one time only).)
+ virtual bool GrantPromoItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+ // AddPromoItem() / AddPromoItems() are restricted versions of GrantPromoItems(). Instead of
+ // scanning for all eligible promotional items, the check is restricted to a single item
+ // definition or set of item definitions. This can be useful if your game has custom UI for
+ // showing a specific promo item to the user.
+ virtual bool AddPromoItem( SteamInventoryResult_t *pResultHandle, SteamItemDef_t itemDef ) = 0;
+ virtual bool AddPromoItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, uint32 unArrayLength ) = 0;
+
+ // ConsumeItem() removes items from the inventory, permanently. They cannot be recovered.
+ // Not for the faint of heart - if your game implements item removal at all, a high-friction
+ // UI confirmation process is highly recommended.
+ METHOD_DESC(ConsumeItem() removes items from the inventory permanently.)
+ virtual bool ConsumeItem( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity ) = 0;
+
+ // ExchangeItems() is an atomic combination of item generation and consumption.
+ // It can be used to implement crafting recipes or transmutations, or items which unpack
+ // themselves into other items (e.g., a chest).
+ // Exchange recipes are defined in the ItemDef, and explicitly list the required item
+ // types and resulting generated type.
+ // Exchange recipes are evaluated atomically by the Inventory Service; if the supplied
+ // components do not match the recipe, or do not contain sufficient quantity, the
+ // exchange will fail.
+ virtual bool ExchangeItems( SteamInventoryResult_t *pResultHandle,
+ ARRAY_COUNT(unArrayGenerateLength) const SteamItemDef_t *pArrayGenerate, ARRAY_COUNT(unArrayGenerateLength) const uint32 *punArrayGenerateQuantity, uint32 unArrayGenerateLength,
+ ARRAY_COUNT(unArrayDestroyLength) const SteamItemInstanceID_t *pArrayDestroy, ARRAY_COUNT(unArrayDestroyLength) const uint32 *punArrayDestroyQuantity, uint32 unArrayDestroyLength ) = 0;
+
+
+ // TransferItemQuantity() is intended for use with items which are "stackable" (can have
+ // quantity greater than one). It can be used to split a stack into two, or to transfer
+ // quantity from one stack into another stack of identical items. To split one stack into
+ // two, pass k_SteamItemInstanceIDInvalid for itemIdDest and a new item will be generated.
+ virtual bool TransferItemQuantity( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest ) = 0;
+
+
+ // TIMED DROPS AND PLAYTIME CREDIT
+ //
+
+ // Deprecated. Calling this method is not required for proper playtime accounting.
+ METHOD_DESC( Deprecated method. Playtime accounting is performed on the Steam servers. )
+ virtual void SendItemDropHeartbeat() = 0;
+
+ // Playtime credit must be consumed and turned into item drops by your game. Only item
+ // definitions which are marked as "playtime item generators" can be spawned. The call
+ // will return an empty result set if there is not enough playtime credit for a drop.
+ // Your game should call TriggerItemDrop at an appropriate time for the user to receive
+ // new items, such as between rounds or while the player is dead. Note that players who
+ // hack their clients could modify the value of "dropListDefinition", so do not use it
+ // to directly control rarity.
+ // See your Steamworks configuration to set playtime drop rates for individual itemdefs.
+ // The client library will suppress too-frequent calls to this method.
+ METHOD_DESC(Playtime credit must be consumed and turned into item drops by your game.)
+ virtual bool TriggerItemDrop( SteamInventoryResult_t *pResultHandle, SteamItemDef_t dropListDefinition ) = 0;
+
+
+ // IN-GAME TRADING
+ //
+ // TradeItems() implements limited in-game trading of items, if you prefer not to use
+ // the overlay or an in-game web browser to perform Steam Trading through the website.
+ // You should implement a UI where both players can see and agree to a trade, and then
+ // each client should call TradeItems simultaneously (+/- 5 seconds) with matching
+ // (but reversed) parameters. The result is the same as if both players performed a
+ // Steam Trading transaction through the web. Each player will get an inventory result
+ // confirming the removal or quantity changes of the items given away, and the new
+ // item instance id numbers and quantities of the received items.
+ // (Note: new item instance IDs are generated whenever an item changes ownership.)
+ virtual bool TradeItems( SteamInventoryResult_t *pResultHandle, CSteamID steamIDTradePartner,
+ ARRAY_COUNT(nArrayGiveLength) const SteamItemInstanceID_t *pArrayGive, ARRAY_COUNT(nArrayGiveLength) const uint32 *pArrayGiveQuantity, uint32 nArrayGiveLength,
+ ARRAY_COUNT(nArrayGetLength) const SteamItemInstanceID_t *pArrayGet, ARRAY_COUNT(nArrayGetLength) const uint32 *pArrayGetQuantity, uint32 nArrayGetLength ) = 0;
+
+
+ // ITEM DEFINITIONS
+ //
+ // Item definitions are a mapping of "definition IDs" (integers between 1 and 1000000)
+ // to a set of string properties. Some of these properties are required to display items
+ // on the Steam community web site. Other properties can be defined by applications.
+ // Use of these functions is optional; there is no reason to call LoadItemDefinitions
+ // if your game hardcodes the numeric definition IDs (eg, purple face mask = 20, blue
+ // weapon mod = 55) and does not allow for adding new item types without a client patch.
+ //
+
+ // LoadItemDefinitions triggers the automatic load and refresh of item definitions.
+ // Every time new item definitions are available (eg, from the dynamic addition of new
+ // item types while players are still in-game), a SteamInventoryDefinitionUpdate_t
+ // callback will be fired.
+ METHOD_DESC(LoadItemDefinitions triggers the automatic load and refresh of item definitions.)
+ virtual bool LoadItemDefinitions() = 0;
+
+ // GetItemDefinitionIDs returns the set of all defined item definition IDs (which are
+ // defined via Steamworks configuration, and not necessarily contiguous integers).
+ // If pItemDefIDs is null, the call will return true and *punItemDefIDsArraySize will
+ // contain the total size necessary for a subsequent call. Otherwise, the call will
+ // return false if and only if there is not enough space in the output array.
+ virtual bool GetItemDefinitionIDs(
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+
+ // GetItemDefinitionProperty returns a string property from a given item definition.
+ // Note that some properties (for example, "name") may be localized and will depend
+ // on the current Steam language settings (see ISteamApps::GetCurrentGameLanguage).
+ // Property names are always composed of ASCII letters, numbers, and/or underscores.
+ // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available
+ // property names. If pchValueBuffer is NULL, *punValueBufferSize will contain the
+ // suggested buffer size. Otherwise it will be the number of bytes actually copied
+ // to pchValueBuffer. If the results do not fit in the given buffer, partial
+ // results may be copied.
+ virtual bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPropertyName,
+ OUT_STRING_COUNT(punValueBufferSizeOut) char *pchValueBuffer, uint32 *punValueBufferSizeOut ) = 0;
+
+ // Request the list of "eligible" promo items that can be manually granted to the given
+ // user. These are promo items of type "manual" that won't be granted automatically.
+ // An example usage of this is an item that becomes available every week.
+ CALL_RESULT( SteamInventoryEligiblePromoItemDefIDs_t )
+ virtual SteamAPICall_t RequestEligiblePromoItemDefinitionsIDs( CSteamID steamID ) = 0;
+
+ // After handling a SteamInventoryEligiblePromoItemDefIDs_t call result, use this
+ // function to pull out the list of item definition ids that the user can be
+ // manually granted via the AddPromoItems() call.
+ virtual bool GetEligiblePromoItemDefinitionIDs(
+ CSteamID steamID,
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+};
+
+#define STEAMINVENTORY_INTERFACE_VERSION "STEAMINVENTORY_INTERFACE_V002"
+
+
+// SteamInventoryResultReady_t callbacks are fired whenever asynchronous
+// results transition from "Pending" to "OK" or an error state. There will
+// always be exactly one callback per handle.
+struct SteamInventoryResultReady_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 0 };
+ SteamInventoryResult_t m_handle;
+ EResult m_result;
+};
+
+
+// SteamInventoryFullUpdate_t callbacks are triggered when GetAllItems
+// successfully returns a result which is newer / fresher than the last
+// known result. (It will not trigger if the inventory hasn't changed,
+// or if results from two overlapping calls are reversed in flight and
+// the earlier result is already known to be stale/out-of-date.)
+// The normal ResultReady callback will still be triggered immediately
+// afterwards; this is an additional notification for your convenience.
+struct SteamInventoryFullUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 1 };
+ SteamInventoryResult_t m_handle;
+};
+
+
+// A SteamInventoryDefinitionUpdate_t callback is triggered whenever
+// item definitions have been updated, which could be in response to
+// LoadItemDefinitions() or any other async request which required
+// a definition update in order to process results from the server.
+struct SteamInventoryDefinitionUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 2 };
+};
+
+// Returned
+struct SteamInventoryEligiblePromoItemDefIDs_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 3 };
+ EResult m_result;
+ CSteamID m_steamID;
+ int m_numEligiblePromoItemDefs;
+ bool m_bCachedData; // indicates that the data was retrieved from the cache and not the server
+};
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_140/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_140/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_140/isteammatchmaking.h b/lsteamclient/steamworks_sdk_140/isteammatchmaking.h
new file mode 100644
index 00000000..5af69129
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteammatchmaking.h
@@ -0,0 +1,751 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) = 0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ CALL_RESULT( LobbyMatchList_t )
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ CALL_RESULT( LobbyCreated_t )
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ CALL_RESULT( LobbyEnter_t )
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, OUT_STRUCT() CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, OUT_STRUCT() CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+ CALL_BACK( LobbyChatUpdate_t )
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_140/isteammusic.h b/lsteamclient/steamworks_sdk_140/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_140/isteammusicremote.h b/lsteamclient/steamworks_sdk_140/isteammusicremote.h
new file mode 100644
index 00000000..5893ef4b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteammusicremote.h
@@ -0,0 +1,129 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSICREMOTE_H
+#define ISTEAMMUSICREMOTE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteammusic.h"
+
+#define k_SteamMusicNameMaxLength 255
+#define k_SteamMusicPNGMaxLength 65535
+
+
+class ISteamMusicRemote
+{
+public:
+ // Service Definition
+ virtual bool RegisterSteamMusicRemote( const char *pchName ) = 0;
+ virtual bool DeregisterSteamMusicRemote() = 0;
+ virtual bool BIsCurrentMusicRemote() = 0;
+ virtual bool BActivationSuccess( bool bValue ) = 0;
+
+ virtual bool SetDisplayName( const char *pchDisplayName ) = 0;
+ virtual bool SetPNGIcon_64x64( void *pvBuffer, uint32 cbBufferLength ) = 0;
+
+ // Abilities for the user interface
+ virtual bool EnablePlayPrevious(bool bValue) = 0;
+ virtual bool EnablePlayNext( bool bValue ) = 0;
+ virtual bool EnableShuffled( bool bValue ) = 0;
+ virtual bool EnableLooped( bool bValue ) = 0;
+ virtual bool EnableQueue( bool bValue ) = 0;
+ virtual bool EnablePlaylists( bool bValue ) = 0;
+
+ // Status
+ virtual bool UpdatePlaybackStatus( AudioPlayback_Status nStatus ) = 0;
+ virtual bool UpdateShuffled( bool bValue ) = 0;
+ virtual bool UpdateLooped( bool bValue ) = 0;
+ virtual bool UpdateVolume( float flValue ) = 0; // volume is between 0.0 and 1.0
+
+ // Current Entry
+ virtual bool CurrentEntryWillChange() = 0;
+ virtual bool CurrentEntryIsAvailable( bool bAvailable ) = 0;
+ virtual bool UpdateCurrentEntryText( const char *pchText ) = 0;
+ virtual bool UpdateCurrentEntryElapsedSeconds( int nValue ) = 0;
+ virtual bool UpdateCurrentEntryCoverArt( void *pvBuffer, uint32 cbBufferLength ) = 0;
+ virtual bool CurrentEntryDidChange() = 0;
+
+ // Queue
+ virtual bool QueueWillChange() = 0;
+ virtual bool ResetQueueEntries() = 0;
+ virtual bool SetQueueEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentQueueEntry( int nID ) = 0;
+ virtual bool QueueDidChange() = 0;
+
+ // Playlist
+ virtual bool PlaylistWillChange() = 0;
+ virtual bool ResetPlaylistEntries() = 0;
+ virtual bool SetPlaylistEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentPlaylistEntry( int nID ) = 0;
+ virtual bool PlaylistDidChange() = 0;
+};
+
+#define STEAMMUSICREMOTE_INTERFACE_VERSION "STEAMMUSICREMOTE_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillActivate_t, k_iSteamMusicRemoteCallbacks + 1)
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillDeactivate_t, k_iSteamMusicRemoteCallbacks + 2 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteToFront_t, k_iSteamMusicRemoteCallbacks + 3 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWillQuit_t, k_iSteamMusicRemoteCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlay_t, k_iSteamMusicRemoteCallbacks + 5 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPause_t, k_iSteamMusicRemoteCallbacks + 6 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayPrevious_t, k_iSteamMusicRemoteCallbacks + 7 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayNext_t, k_iSteamMusicRemoteCallbacks + 8 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsShuffled_t, k_iSteamMusicRemoteCallbacks + 9 )
+ CALLBACK_MEMBER( 0, bool, m_bShuffled )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsLooped_t, k_iSteamMusicRemoteCallbacks + 10 )
+ CALLBACK_MEMBER(0, bool, m_bLooped )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsVolume_t, k_iSteamMusicCallbacks + 11 )
+ CALLBACK_MEMBER(0, float, m_flNewVolume)
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsQueueEntry_t, k_iSteamMusicCallbacks + 12 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsPlaylistEntry_t, k_iSteamMusicCallbacks + 13 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayingRepeatStatus_t, k_iSteamMusicRemoteCallbacks + 14 )
+ CALLBACK_MEMBER(0, int, m_nPlayingRepeatStatus )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+
+#endif // #define ISTEAMMUSICREMOTE_H
diff --git a/lsteamclient/steamworks_sdk_140/isteamnetworking.h b/lsteamclient/steamworks_sdk_140/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_140/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_140/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_140/isteamremotestorage.h b/lsteamclient/steamworks_sdk_140/isteamremotestorage.h
new file mode 100644
index 00000000..7ca558e2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamremotestorage.h
@@ -0,0 +1,681 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0, // normal Workshop item that can be subscribed to
+ k_EWorkshopFileTypeMicrotransaction = 1, // Workshop item that is meant to be voted on for the purpose of selling in-game
+ k_EWorkshopFileTypeCollection = 2, // a collection of Workshop or Greenlight items
+ k_EWorkshopFileTypeArt = 3, // artwork
+ k_EWorkshopFileTypeVideo = 4, // external video
+ k_EWorkshopFileTypeScreenshot = 5, // screenshot
+ k_EWorkshopFileTypeGame = 6, // Greenlight game entry
+ k_EWorkshopFileTypeSoftware = 7, // Greenlight software entry
+ k_EWorkshopFileTypeConcept = 8, // Greenlight concept
+ k_EWorkshopFileTypeWebGuide = 9, // Steam web guide
+ k_EWorkshopFileTypeIntegratedGuide = 10, // application integrated guide
+ k_EWorkshopFileTypeMerch = 11, // Workshop merchandise meant to be voted on for the purpose of being sold
+ k_EWorkshopFileTypeControllerBinding = 12, // Steam Controller bindings
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13, // internal
+ k_EWorkshopFileTypeSteamVideo = 14, // Steam video
+ k_EWorkshopFileTypeGameManagedItem = 15, // managed completely by the game, not the user, and not shown on the web
+
+ // Update k_EWorkshopFileTypeMax if you add values.
+ k_EWorkshopFileTypeMax = 16
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+ k_EWorkshopVoteLater = 3,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+
+ CALL_RESULT( RemoteStorageFileWriteAsyncComplete_t )
+ virtual SteamAPICall_t FileWriteAsync( const char *pchFile, const void *pvData, uint32 cubData ) = 0;
+
+ CALL_RESULT( RemoteStorageFileReadAsyncComplete_t )
+ virtual SteamAPICall_t FileReadAsync( const char *pchFile, uint32 nOffset, uint32 cubToRead ) = 0;
+ virtual bool FileReadAsyncComplete( SteamAPICall_t hReadCall, void *pvBuffer, uint32 cubToRead ) = 0;
+
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ CALL_RESULT( RemoteStorageFileShareResult_t )
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( uint64 *pnTotalBytes, uint64 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ CALL_RESULT( RemoteStorageDownloadUGCResult_t )
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, OUT_STRING() char **ppchName, int32 *pnFileSizeInBytes, OUT_STRUCT() CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ CALL_RESULT( RemoteStoragePublishFileProgress_t )
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ CALL_RESULT( RemoteStorageUpdatePublishedFileResult_t )
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ CALL_RESULT( RemoteStorageGetPublishedFileDetailsResult_t )
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ CALL_RESULT( RemoteStorageDeletePublishedFileResult_t )
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ CALL_RESULT( RemoteStorageEnumerateUserPublishedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ CALL_RESULT( RemoteStorageSubscribePublishedFileResult_t )
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageEnumerateUserSubscribedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ CALL_RESULT( RemoteStorageUnsubscribePublishedFileResult_t )
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ CALL_RESULT( RemoteStorageGetPublishedItemVoteDetailsResult_t )
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageUpdateUserPublishedItemVoteResult_t )
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ CALL_RESULT( RemoteStorageGetPublishedItemVoteDetailsResult_t )
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageEnumerateUserPublishedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ CALL_RESULT( RemoteStoragePublishFileProgress_t )
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ CALL_RESULT( RemoteStorageSetUserPublishedFileActionResult_t )
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ CALL_RESULT( RemoteStorageEnumeratePublishedFilesByUserActionResult_t )
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ CALL_RESULT( RemoteStorageEnumerateWorkshopFilesResult_t )
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ CALL_RESULT( RemoteStorageDownloadUGCResult_t )
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION014"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ uint64 m_ulUnused; // not used anymore
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileWriteAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileWriteAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 31 };
+ EResult m_eResult; // result
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileReadAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileReadAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 32 };
+ SteamAPICall_t m_hFileReadAsync; // call handle of the async read which was made
+ EResult m_eResult; // result
+ uint32 m_nOffset; // offset in the file this read was at
+ uint32 m_cubRead; // amount read - will the <= the amount requested
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_140/isteamscreenshots.h b/lsteamclient/steamworks_sdk_140/isteamscreenshots.h
new file mode 100644
index 00000000..653b28a4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamscreenshots.h
@@ -0,0 +1,116 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+enum EVRScreenshotType
+{
+ k_EVRScreenshotType_None = 0,
+ k_EVRScreenshotType_Mono = 1,
+ k_EVRScreenshotType_Stereo = 2,
+ k_EVRScreenshotType_MonoCubemap = 3,
+ k_EVRScreenshotType_MonoPanorama = 4,
+ k_EVRScreenshotType_StereoPanorama = 5
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+
+ // Returns true if the app has hooked the screenshot
+ virtual bool IsScreenshotsHooked() = 0;
+
+ // Adds a VR screenshot to the user's screenshot library from disk in the supported type.
+ // pchFilename should be the normal 2D image used in the library view
+ // pchVRFilename should contain the image that matches the correct type
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddVRScreenshotToLibrary( EVRScreenshotType eType, const char *pchFilename, const char *pchVRFilename ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION003"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMSCREENSHOTS_H
+
diff --git a/lsteamclient/steamworks_sdk_140/isteamugc.h b/lsteamclient/steamworks_sdk_140/isteamugc.h
new file mode 100644
index 00000000..cf9d4fbb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamugc.h
@@ -0,0 +1,484 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+ k_EUGCMatchingUGCType_GameManagedItems = 12, // game managed items (not managed by users)
+ k_EUGCMatchingUGCType_All = ~0, // return everything
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+ k_EUGCQuery_RankedByTotalUniqueSubscriptions = 12,
+ k_EUGCQuery_RankedByPlaytimeTrend = 13,
+ k_EUGCQuery_RankedByTotalPlaytime = 14,
+ k_EUGCQuery_RankedByAveragePlaytimeTrend = 15,
+ k_EUGCQuery_RankedByLifetimeAveragePlaytime = 16,
+ k_EUGCQuery_RankedByPlaytimeSessionsTrend = 17,
+ k_EUGCQuery_RankedByLifetimePlaytimeSessions = 18,
+};
+
+enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0, // The item update handle was invalid, job might be finished, listen too SubmitItemUpdateResult_t
+ k_EItemUpdateStatusPreparingConfig = 1, // The item update is processing configuration data
+ k_EItemUpdateStatusPreparingContent = 2, // The item update is reading and processing content files
+ k_EItemUpdateStatusUploadingContent = 3, // The item update is uploading content changes to Steam
+ k_EItemUpdateStatusUploadingPreviewFile = 4, // The item update is uploading new preview file image
+ k_EItemUpdateStatusCommittingChanges = 5 // The item update is committing all changes
+};
+
+enum EItemState
+{
+ k_EItemStateNone = 0, // item not tracked on client
+ k_EItemStateSubscribed = 1, // current user is subscribed to this item. Not just cached.
+ k_EItemStateLegacyItem = 2, // item was created with ISteamRemoteStorage
+ k_EItemStateInstalled = 4, // item is installed and usable (but maybe out of date)
+ k_EItemStateNeedsUpdate = 8, // items needs an update. Either because it's not installed yet or creator updated content
+ k_EItemStateDownloading = 16, // item update is currently downloading
+ k_EItemStateDownloadPending = 32, // DownloadItem() was called for this item, content isn't available until DownloadItemResult_t is fired
+};
+
+enum EItemStatistic
+{
+ k_EItemStatistic_NumSubscriptions = 0,
+ k_EItemStatistic_NumFavorites = 1,
+ k_EItemStatistic_NumFollowers = 2,
+ k_EItemStatistic_NumUniqueSubscriptions = 3,
+ k_EItemStatistic_NumUniqueFavorites = 4,
+ k_EItemStatistic_NumUniqueFollowers = 5,
+ k_EItemStatistic_NumUniqueWebsiteViews = 6,
+ k_EItemStatistic_ReportScore = 7,
+ k_EItemStatistic_NumSecondsPlayed = 8,
+ k_EItemStatistic_NumPlaytimeSessions = 9,
+ k_EItemStatistic_NumComments = 10,
+ k_EItemStatistic_NumSecondsPlayedDuringTimePeriod = 11,
+ k_EItemStatistic_NumPlaytimeSessionsDuringTimePeriod = 12,
+};
+
+enum EItemPreviewType
+{
+ k_EItemPreviewType_Image = 0, // standard image file expected (e.g. jpg, png, gif, etc.)
+ k_EItemPreviewType_YouTubeVideo = 1, // video id is stored
+ k_EItemPreviewType_Sketchfab = 2, // model id is stored
+ k_EItemPreviewType_EnvironmentMap_HorizontalCross = 3, // standard image file expected - cube map in the layout
+ // +---+---+-------+
+ // | |Up | |
+ // +---+---+---+---+
+ // | L | F | R | B |
+ // +---+---+---+---+
+ // | |Dn | |
+ // +---+---+---+---+
+ k_EItemPreviewType_EnvironmentMap_LatLong = 4, // standard image file expected
+ k_EItemPreviewType_ReservedMax = 255, // you can specify your own types above this value
+};
+
+const uint32 kNumUGCResultsPerPage = 50;
+const uint32 k_cchDeveloperMetadataMax = 5000;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+ // collection details
+ uint32 m_unNumChildren;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for the details of the given published file ids (the RequestUGCDetails call is deprecated and replaced with this)
+ virtual UGCQueryHandle_t CreateQueryUGCDetailsRequest( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+
+ // Send the query to Steam
+ CALL_RESULT( SteamUGCQueryCompleted_t )
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+ virtual bool GetQueryUGCPreviewURL( UGCQueryHandle_t handle, uint32 index, OUT_STRING_COUNT(cchURLSize) char *pchURL, uint32 cchURLSize ) = 0;
+ virtual bool GetQueryUGCMetadata( UGCQueryHandle_t handle, uint32 index, OUT_STRING_COUNT(cchMetadatasize) char *pchMetadata, uint32 cchMetadatasize ) = 0;
+ virtual bool GetQueryUGCChildren( UGCQueryHandle_t handle, uint32 index, PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0;
+ virtual bool GetQueryUGCStatistic( UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint64 *pStatValue ) = 0;
+ virtual uint32 GetQueryUGCNumAdditionalPreviews( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCAdditionalPreview( UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, OUT_STRING_COUNT(cchURLSize) char *pchURLOrVideoID, uint32 cchURLSize, OUT_STRING_COUNT(cchURLSize) char *pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType *pPreviewType ) = 0;
+ virtual uint32 GetQueryUGCNumKeyValueTags( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCKeyValueTag( UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, OUT_STRING_COUNT(cchKeySize) char *pchKey, uint32 cchKeySize, OUT_STRING_COUNT(cchValueSize) char *pchValue, uint32 cchValueSize ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnOnlyIDs( UGCQueryHandle_t handle, bool bReturnOnlyIDs ) = 0;
+ virtual bool SetReturnKeyValueTags( UGCQueryHandle_t handle, bool bReturnKeyValueTags ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnMetadata( UGCQueryHandle_t handle, bool bReturnMetadata ) = 0;
+ virtual bool SetReturnChildren( UGCQueryHandle_t handle, bool bReturnChildren ) = 0;
+ virtual bool SetReturnAdditionalPreviews( UGCQueryHandle_t handle, bool bReturnAdditionalPreviews ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetReturnPlaytimeStats( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+ virtual bool SetLanguage( UGCQueryHandle_t handle, const char *pchLanguage ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+ virtual bool AddRequiredKeyValueTag( UGCQueryHandle_t handle, const char *pKey, const char *pValue ) = 0;
+
+ // DEPRECATED - Use CreateQueryUGCDetailsRequest call above instead!
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+ // Steam Workshop Creator API
+ CALL_RESULT( CreateItemResult_t )
+ virtual SteamAPICall_t CreateItem( AppId_t nConsumerAppId, EWorkshopFileType eFileType ) = 0; // create new item for this app with no content attached yet
+
+ virtual UGCUpdateHandle_t StartItemUpdate( AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID ) = 0; // start an UGC item update. Set changed properties before commiting update with CommitItemUpdate()
+
+ virtual bool SetItemTitle( UGCUpdateHandle_t handle, const char *pchTitle ) = 0; // change the title of an UGC item
+ virtual bool SetItemDescription( UGCUpdateHandle_t handle, const char *pchDescription ) = 0; // change the description of an UGC item
+ virtual bool SetItemUpdateLanguage( UGCUpdateHandle_t handle, const char *pchLanguage ) = 0; // specify the language of the title or description that will be set
+ virtual bool SetItemMetadata( UGCUpdateHandle_t handle, const char *pchMetaData ) = 0; // change the metadata of an UGC item (max = k_cchDeveloperMetadataMax)
+ virtual bool SetItemVisibility( UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item
+ virtual bool SetItemTags( UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item
+ virtual bool SetItemContent( UGCUpdateHandle_t handle, const char *pszContentFolder ) = 0; // update item content from this local folder
+ virtual bool SetItemPreview( UGCUpdateHandle_t handle, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file, which must be under 1MB in size
+ virtual bool RemoveItemKeyValueTags( UGCUpdateHandle_t handle, const char *pchKey ) = 0; // remove any existing key-value tags with the specified key
+ virtual bool AddItemKeyValueTag( UGCUpdateHandle_t handle, const char *pchKey, const char *pchValue ) = 0; // add new key-value tags for the item. Note that there can be multiple values for a tag.
+ virtual bool AddItemPreviewFile( UGCUpdateHandle_t handle, const char *pszPreviewFile, EItemPreviewType type ) = 0; // add preview file for this item. pszPreviewFile points to local file, which must be under 1MB in size
+ virtual bool AddItemPreviewVideo( UGCUpdateHandle_t handle, const char *pszVideoID ) = 0; // add preview video for this item
+ virtual bool UpdateItemPreviewFile( UGCUpdateHandle_t handle, uint32 index, const char *pszPreviewFile ) = 0; // updates an existing preview file for this item. pszPreviewFile points to local file, which must be under 1MB in size
+ virtual bool UpdateItemPreviewVideo( UGCUpdateHandle_t handle, uint32 index, const char *pszVideoID ) = 0; // updates an existing preview video for this item
+ virtual bool RemoveItemPreview( UGCUpdateHandle_t handle, uint32 index ) = 0; // remove a preview by index starting at 0 (previews are sorted)
+
+ CALL_RESULT( SubmitItemUpdateResult_t )
+ virtual SteamAPICall_t SubmitItemUpdate( UGCUpdateHandle_t handle, const char *pchChangeNote ) = 0; // commit update process started with StartItemUpdate()
+ virtual EItemUpdateStatus GetItemUpdateProgress( UGCUpdateHandle_t handle, uint64 *punBytesProcessed, uint64* punBytesTotal ) = 0;
+
+ // Steam Workshop Consumer API
+ CALL_RESULT( SetUserItemVoteResult_t )
+ virtual SteamAPICall_t SetUserItemVote( PublishedFileId_t nPublishedFileID, bool bVoteUp ) = 0;
+ CALL_RESULT( GetUserItemVoteResult_t )
+ virtual SteamAPICall_t GetUserItemVote( PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( UserFavoriteItemsListChanged_t )
+ virtual SteamAPICall_t AddItemToFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( UserFavoriteItemsListChanged_t )
+ virtual SteamAPICall_t RemoveItemFromFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( RemoteStorageSubscribePublishedFileResult_t )
+ virtual SteamAPICall_t SubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // subscribe to this item, will be installed ASAP
+ CALL_RESULT( RemoteStorageUnsubscribePublishedFileResult_t )
+ virtual SteamAPICall_t UnsubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // unsubscribe from this item, will be uninstalled after game quits
+ virtual uint32 GetNumSubscribedItems() = 0; // number of subscribed items
+ virtual uint32 GetSubscribedItems( PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; // all subscribed item PublishFileIDs
+
+ // get EItemState flags about item on this client
+ virtual uint32 GetItemState( PublishedFileId_t nPublishedFileID ) = 0;
+
+ // get info about currently installed content on disc for items that have k_EItemStateInstalled set
+ // if k_EItemStateLegacyItem is set, pchFolder contains the path to the legacy file itself (not a folder)
+ virtual bool GetItemInstallInfo( PublishedFileId_t nPublishedFileID, uint64 *punSizeOnDisk, OUT_STRING_COUNT( cchFolderSize ) char *pchFolder, uint32 cchFolderSize, uint32 *punTimeStamp ) = 0;
+
+ // get info about pending update for items that have k_EItemStateNeedsUpdate set. punBytesTotal will be valid after download started once
+ virtual bool GetItemDownloadInfo( PublishedFileId_t nPublishedFileID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // download new or update already installed item. If function returns true, wait for DownloadItemResult_t. If the item is already installed,
+ // then files on disk should not be used until callback received. If item is not subscribed to, it will be cached for some time.
+ // If bHighPriority is set, any other item download will be suspended and this item downloaded ASAP.
+ virtual bool DownloadItem( PublishedFileId_t nPublishedFileID, bool bHighPriority ) = 0;
+
+ // game servers can set a specific workshop folder before issuing any UGC commands.
+ // This is helpful if you want to support multiple game servers running out of the same install folder
+ virtual bool BInitWorkshopForGameServer( DepotId_t unWorkshopDepotID, const char *pszFolder ) = 0;
+
+ // SuspendDownloads( true ) will suspend all workshop downloads until SuspendDownloads( false ) is called or the game ends
+ virtual void SuspendDownloads( bool bSuspend ) = 0;
+
+ // usage tracking
+ CALL_RESULT( StartPlaytimeTrackingResult_t )
+ virtual SteamAPICall_t StartPlaytimeTracking( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+ CALL_RESULT( StopPlaytimeTrackingResult_t )
+ virtual SteamAPICall_t StopPlaytimeTracking( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+ CALL_RESULT( StopPlaytimeTrackingResult_t )
+ virtual SteamAPICall_t StopPlaytimeTrackingForAllItems() = 0;
+
+ // parent-child relationship or dependency management
+ CALL_RESULT( AddUGCDependencyResult_t )
+ virtual SteamAPICall_t AddDependency( PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID ) = 0;
+ CALL_RESULT( RemoveUGCDependencyResult_t )
+ virtual SteamAPICall_t RemoveDependency( PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID ) = 0;
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION010"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::CreateItem()
+//-----------------------------------------------------------------------------
+struct CreateItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 3 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId; // new item got this UGC PublishFileID
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::SubmitItemUpdate()
+//-----------------------------------------------------------------------------
+struct SubmitItemUpdateResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 4 };
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a Workshop item has been installed or updated
+//-----------------------------------------------------------------------------
+struct ItemInstalled_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 5 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of DownloadItem(), existing item files can be accessed again
+//-----------------------------------------------------------------------------
+struct DownloadItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 6 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: result of AddItemToFavorites() or RemoveItemFromFavorites()
+//-----------------------------------------------------------------------------
+struct UserFavoriteItemsListChanged_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 7 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bWasAddRequest;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SetUserItemVote()
+//-----------------------------------------------------------------------------
+struct SetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 8 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVoteUp;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserItemVote()
+//-----------------------------------------------------------------------------
+struct GetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 9 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVotedUp;
+ bool m_bVotedDown;
+ bool m_bVoteSkipped;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to StartPlaytimeTracking()
+//-----------------------------------------------------------------------------
+struct StartPlaytimeTrackingResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 10 };
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to StopPlaytimeTracking()
+//-----------------------------------------------------------------------------
+struct StopPlaytimeTrackingResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 11 };
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to AddDependency
+//-----------------------------------------------------------------------------
+struct AddUGCDependencyResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 12 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ PublishedFileId_t m_nChildPublishedFileId;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to RemoveDependency
+//-----------------------------------------------------------------------------
+struct RemoveUGCDependencyResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 13 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ PublishedFileId_t m_nChildPublishedFileId;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_140/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_140/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_140/isteamuser.h b/lsteamclient/steamworks_sdk_140/isteamuser.h
new file mode 100644
index 00000000..6d1309b7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamuser.h
@@ -0,0 +1,369 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the size of captured audio data that is available from GetVoice.
+ // Most applications will only use compressed data and should ignore the other
+ // parameters, which exist primarily for backwards compatibility. See comments
+ // below for further explanation of "uncompressed" data.
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed_Deprecated = 0, uint32 nUncompressedVoiceDesiredSampleRate_Deprecated = 0 ) = 0;
+
+ // ---------------------------------------------------------------------------
+ // NOTE: "uncompressed" audio is a deprecated feature and should not be used
+ // by most applications. It is raw single-channel 16-bit PCM wave data which
+ // may have been run through preprocessing filters and/or had silence removed,
+ // so the uncompressed audio could have a shorter duration than you expect.
+ // There may be no data at all during long periods of silence. Also, fetching
+ // uncompressed audio will cause GetVoice to discard any leftover compressed
+ // audio, so you must fetch both types at once. Finally, GetAvailableVoice is
+ // not precisely accurate when the uncompressed size is requested. So if you
+ // really need to use uncompressed audio, you should call GetVoice frequently
+ // with two very large (20kb+) output buffers instead of trying to allocate
+ // perfectly-sized buffers. But most applications should ignore all of these
+ // details and simply leave the "uncompressed" parameters as NULL/zero.
+ // ---------------------------------------------------------------------------
+
+ // Read captured audio data from the microphone buffer. This should be called
+ // at least once per frame, and preferably every few milliseconds, to keep the
+ // microphone input delay as low as possible. Most applications will only use
+ // compressed data and should pass NULL/zero for the "uncompressed" parameters.
+ // Compressed data can be transmitted by your application and decoded into raw
+ // using the DecompressVoice function below.
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed_Deprecated = false, void *pUncompressedDestBuffer_Deprecated = 0, uint32 cbUncompressedDestBufferSize_Deprecated = 0, uint32 *nUncompressBytesWritten_Deprecated = 0, uint32 nUncompressedVoiceDesiredSampleRate_Deprecated = 0 ) = 0;
+
+ // Decodes the compressed voice data returned by GetVoice. The output data is
+ // raw single-channel 16-bit PCM audio. The decoder supports any sample rate
+ // from 11025 to 48000; see GetVoiceOptimalSampleRate() below for details.
+ // If the output buffer is not large enough, then *nBytesWritten will be set
+ // to the required buffer size, and k_EVoiceResultBufferTooSmall is returned.
+ // It is suggested to start with a 20kb buffer and reallocate as necessary.
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the native sample rate of the Steam voice decompressor; using
+ // this sample rate for DecompressVoice will perform the least CPU processing.
+ // However, the final audio quality will depend on how well the audio device
+ // (and/or your application's audio output SDK) deals with lower sample rates.
+ // You may find that you get the best audio output quality when you ignore
+ // this function and use the native sample rate of your audio output device,
+ // which is usually 48000 or 44100.
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ CALL_RESULT( EncryptedAppTicketResponse_t )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+ // Requests a URL which authenticates an in-game browser for store check-out,
+ // and then redirects to the specified URL. As long as the in-game browser
+ // accepts and handles session cookies, Steam microtransaction checkout pages
+ // will automatically recognize the user instead of presenting a login page.
+ // The result of this API call will be a StoreAuthURLResponse_t callback.
+ // NOTE: The URL has a very short lifetime to prevent history-snooping attacks,
+ // so you should only call this API when you are about to launch the browser,
+ // or else immediately navigate to the result URL using a hidden browser window.
+ // NOTE 2: The resulting authorization cookie has an expiration time of one day,
+ // so it would be a good idea to request and visit a new auth URL every 12 hours.
+ CALL_RESULT( StoreAuthURLResponse_t )
+ virtual SteamAPICall_t RequestStoreAuthURL( const char *pchRedirectURL ) = 0;
+
+ // gets whether the users phone number is verified
+ virtual bool BIsPhoneVerified() = 0;
+
+ // gets whether the user has two factor enabled on their account
+ virtual bool BIsTwoFactorEnabled() = 0;
+
+ // gets whether the users phone number is identifying
+ virtual bool BIsPhoneIdentifying() = 0;
+
+ // gets whether the users phone number is awaiting (re)verification
+ virtual bool BIsPhoneRequiringVerification() = 0;
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser019"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+ bool m_bStillRetrying;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Signaled whenever licenses change
+//-----------------------------------------------------------------------------
+struct LicensesUpdated_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 25 };
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to ISteamUser::RequestStoreAuthURL
+//-----------------------------------------------------------------------------
+struct StoreAuthURLResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 65 };
+ char m_szURL[512];
+};
+
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_140/isteamuserstats.h b/lsteamclient/steamworks_sdk_140/isteamuserstats.h
new file mode 100644
index 00000000..8bb42697
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamuserstats.h
@@ -0,0 +1,476 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ CALL_BACK( UserStatsReceived_t )
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ CALL_RESULT( UserStatsReceived_t )
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ CALL_RESULT(LeaderboardFindResult_t)
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ CALL_RESULT( LeaderboardFindResult_t )
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ CALL_RESULT( LeaderboardScoresDownloaded_t )
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ METHOD_DESC(Downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers)
+ CALL_RESULT( LeaderboardScoresDownloaded_t )
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard,
+ ARRAY_COUNT_D(cUsers, Array of users to retrieve) CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ CALL_RESULT( LeaderboardScoreUploaded_t )
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ CALL_RESULT( LeaderboardUGCSet_t )
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ CALL_RESULT( NumberOfCurrentPlayers_t )
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ CALL_RESULT( GlobalAchievementPercentagesReady_t )
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ CALL_RESULT( GlobalStatsReceived_t )
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_140/isteamutils.h b/lsteamclient/steamworks_sdk_140/isteamutils.h
new file mode 100644
index 00000000..ed79d2cb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamutils.h
@@ -0,0 +1,264 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time. Number of seconds since January 1, 1970, GMT (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // Deprecated. Applications should use SteamAPI_RunCallbacks() instead. Game servers do not need to call this function.
+ STEAM_PRIVATE_API( virtual void RunFrame() = 0; )
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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 an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ CALL_RESULT( CheckFileSignature_t )
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+
+ // Sets the inset of the overlay notification from the corner specified by SetOverlayNotificationPosition.
+ virtual void SetOverlayNotificationInset( int nHorizontalInset, int nVerticalInset ) = 0;
+
+ // returns true if Steam & the Steam Overlay are running in Big Picture mode
+ // Games much be launched through the Steam client to enable the Big Picture overlay. During development,
+ // a game can be added as a non-steam game to the developers library to test this feature
+ virtual bool IsSteamInBigPictureMode() = 0;
+
+ // ask SteamUI to create and render its OpenVR dashboard
+ virtual void StartVRDashboard() = 0;
+
+ // Returns true if the HMD content will be streamed via Steam In-Home Streaming
+ virtual bool IsVRHeadsetStreamingEnabled() = 0;
+
+ // Set whether the HMD content will be streamed via Steam In-Home Streaming
+ // If this is set to true, then the scene in the HMD headset will be streamed, and remote input will not be allowed.
+ // If this is set to false, then the application window will be streamed instead, and remote input will be allowed.
+ // The default is true unless "VRHeadsetStreaming" "0" is in the extended appinfo for a game.
+ // (this is useful for games that have asymmetric multiplayer gameplay)
+ virtual void SetVRHeadsetStreamingEnabled( bool bEnabled ) = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils009"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+ int m_iCallback;
+ uint32 m_cubParam;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_140/isteamvideo.h b/lsteamclient/steamworks_sdk_140/isteamvideo.h
new file mode 100644
index 00000000..83041caa
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/isteamvideo.h
@@ -0,0 +1,71 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Video
+//
+//=============================================================================
+
+#ifndef ISTEAMVIDEO_H
+#define ISTEAMVIDEO_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Video API
+//-----------------------------------------------------------------------------
+class ISteamVideo
+{
+public:
+
+ // Get a URL suitable for streaming the given Video app ID's video
+ virtual void GetVideoURL( AppId_t unVideoAppID ) = 0;
+
+ // returns true if user is uploading a live broadcast
+ virtual bool IsBroadcasting( int *pnNumViewers ) = 0;
+
+ // Get the OPF Details for 360 Video Playback
+ CALL_BACK( GetOPFSettingsResult_t )
+ virtual void GetOPFSettings( AppId_t unVideoAppID ) = 0;
+ virtual bool GetOPFStringForApp( AppId_t unVideoAppID, char *pchBuffer, int32 *pnBufferSize ) = 0;
+};
+
+#define STEAMVIDEO_INTERFACE_VERSION "STEAMVIDEO_INTERFACE_V002"
+
+DEFINE_CALLBACK( BroadcastUploadStart_t, k_iClientVideoCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( BroadcastUploadStop_t, k_iClientVideoCallbacks + 5 )
+ CALLBACK_MEMBER( 0, EBroadcastUploadResult, m_eResult )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( GetVideoURLResult_t, k_iClientVideoCallbacks + 11 )
+ CALLBACK_MEMBER( 0, EResult, m_eResult )
+ CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID )
+ CALLBACK_MEMBER( 2, char, m_rgchURL[256] )
+END_DEFINE_CALLBACK_3()
+
+
+DEFINE_CALLBACK( GetOPFSettingsResult_t, k_iClientVideoCallbacks + 24 )
+ CALLBACK_MEMBER( 0, EResult, m_eResult )
+ CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID )
+END_DEFINE_CALLBACK_2()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMVIDEO_H
diff --git a/lsteamclient/steamworks_sdk_140/matchmakingtypes.h b/lsteamclient/steamworks_sdk_140/matchmakingtypes.h
new file mode 100644
index 00000000..fcb61664
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/matchmakingtypes.h
@@ -0,0 +1,251 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ servernetadr_t() : m_usConnectionPort( 0 ), m_usQueryPort( 0 ), m_unIP( 0 ) {}
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_140/steam_api.h b/lsteamclient/steamworks_sdk_140/steam_api.h
new file mode 100644
index 00000000..788db9b8
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/steam_api.h
@@ -0,0 +1,394 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteammusicremote.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+#include "isteamhtmlsurface.h"
+#include "isteaminventory.h"
+#include "isteamvideo.h"
+
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+
+// SteamAPI_Init must be called before using any other API functions. If it fails, an
+// error message will be output to the debugger (or stderr) with further information.
+S_API bool S_CALLTYPE SteamAPI_Init();
+
+// SteamAPI_Shutdown should be called during process shutdown if possible.
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// SteamAPI_RestartAppIfNecessary ensures that your executable was launched through Steam.
+//
+// Returns true if the current process should terminate. Steam is now re-launching your application.
+//
+// Returns false if no action needs to be taken. This means that your executable was started through
+// the Steam client, or a steam_appid.txt file is present in your game's directory (for development).
+// Your current process should continue if false is returned.
+//
+// NOTE: If you use the Steam DRM wrapper on your primary executable file, this check is unnecessary
+// since the DRM wrapper will ensure that your application was launched properly through Steam.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// Many Steam API functions allocate a small amount of thread-local memory for parameter storage.
+// SteamAPI_ReleaseCurrentThreadMemory() will free API memory associated with the calling thread.
+// This function is also called automatically by SteamAPI_RunCallbacks(), so a single-threaded
+// program never needs to explicitly call this function.
+S_API void S_CALLTYPE SteamAPI_ReleaseCurrentThreadMemory();
+
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Global accessors for Steamworks C++ APIs. See individual isteam*.h files for details.
+// You should not cache the results of these accessors or pass the result pointers across
+// modules! Different modules may be compiled against different SDK header versions, and
+// the interface pointers could therefore be different across modules. Every line of code
+// which calls into a Steamworks API should retrieve the interface from a global accessor.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#if !defined( STEAM_API_EXPORTS )
+inline ISteamClient *SteamClient();
+inline ISteamUser *SteamUser();
+inline ISteamFriends *SteamFriends();
+inline ISteamUtils *SteamUtils();
+inline ISteamMatchmaking *SteamMatchmaking();
+inline ISteamUserStats *SteamUserStats();
+inline ISteamApps *SteamApps();
+inline ISteamNetworking *SteamNetworking();
+inline ISteamMatchmakingServers *SteamMatchmakingServers();
+inline ISteamRemoteStorage *SteamRemoteStorage();
+inline ISteamScreenshots *SteamScreenshots();
+inline ISteamHTTP *SteamHTTP();
+inline ISteamUnifiedMessages *SteamUnifiedMessages();
+inline ISteamController *SteamController();
+inline ISteamUGC *SteamUGC();
+inline ISteamAppList *SteamAppList();
+inline ISteamMusic *SteamMusic();
+inline ISteamMusicRemote *SteamMusicRemote();
+inline ISteamHTMLSurface *SteamHTMLSurface();
+inline ISteamInventory *SteamInventory();
+inline ISteamVideo *SteamVideo();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+// CSteamAPIContext encapsulates the Steamworks API global accessors into
+// a single object. This is DEPRECATED and only remains for compatibility.
+class CSteamAPIContext
+{
+public:
+ // DEPRECATED - there is no benefit to using this over the global accessors
+ CSteamAPIContext() { Clear(); }
+ void Clear();
+ bool Init();
+ ISteamClient* SteamClient() const { return m_pSteamClient; }
+ ISteamUser* SteamUser() const { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() const { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() const { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() const { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() const { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() const { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() const { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() const { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() const { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() const { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() const { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() const { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() const { return m_pController; }
+ ISteamUGC* SteamUGC() const { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() const { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() const { return m_pSteamMusic; }
+ ISteamMusicRemote* SteamMusicRemote() const { return m_pSteamMusicRemote; }
+ ISteamHTMLSurface* SteamHTMLSurface() const { return m_pSteamHTMLSurface; }
+ ISteamInventory* SteamInventory() const { return m_pSteamInventory; }
+ ISteamVideo* SteamVideo() const { return m_pSteamVideo; }
+ // DEPRECATED - there is no benefit to using this over the global accessors
+private:
+ ISteamClient *m_pSteamClient;
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages *m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+ ISteamMusicRemote *m_pSteamMusicRemote;
+ ISteamHTMLSurface *m_pSteamHTMLSurface;
+ ISteamInventory *m_pSteamInventory;
+ ISteamVideo *m_pSteamVideo;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback and call-result helpers
+//
+// The following macros and classes are used to register your application for
+// callbacks and call-results, which are delivered in a predictable manner.
+//
+// STEAM_CALLBACK macros are meant for use inside of a C++ class definition.
+// They map a Steam notification callback directly to a class member function
+// which is automatically prototyped as "void func( callback_type *pParam )".
+//
+// CCallResult is used with specific Steam APIs that return "result handles".
+// The handle can be passed to a CCallResult object's Set function, along with
+// an object pointer and member-function pointer. The member function will
+// be executed once the results of the Steam API call are available.
+//
+// CCallback and CCallbackManual classes can be used instead of STEAM_CALLBACK
+// macros if you require finer control over registration and unregistration.
+//
+// Callbacks and call-results are queued automatically and are only
+// delivered/executed when your application calls SteamAPI_RunCallbacks().
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// SteamAPI_RunCallbacks is safe to call from multiple threads simultaneously,
+// but if you choose to do this, callback code could be executed on any thread.
+// One alternative is to call SteamAPI_RunCallbacks from the main thread only,
+// and call SteamAPI_ReleaseCurrentThreadMemory regularly on other threads.
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+// Declares a callback member function plus a helper member variable which
+// registers the callback on object creation and unregisters on destruction.
+// The optional fourth 'var' param exists only for backwards-compatibility
+// and can be ignored.
+#define STEAM_CALLBACK( thisclass, func, .../*callback_type, [deprecated] var*/ ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, 4, 3 ), ( /**/, thisclass, func, __VA_ARGS__ ) )
+
+// Declares a callback function and a named CCallbackManual variable which
+// has Register and Unregister functions instead of automatic registration.
+#define STEAM_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type > var; void func( callback_type *pParam )
+
+
+// Internal functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// Internal functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks and call results - internal implementation detail
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+
+private:
+ CCallbackBase( const CCallbackBase& );
+ CCallbackBase& operator=( const CCallbackBase& );
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: templated base for callbacks - internal implementation detail
+//-----------------------------------------------------------------------------
+template< int sizeof_P >
+class CCallbackImpl : protected CCallbackBase
+{
+public:
+ ~CCallbackImpl() { if ( m_nCallbackFlags & k_ECallbackFlagsRegistered ) SteamAPI_UnregisterCallback( this ); }
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+
+protected:
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool /*bIOFailure*/, SteamAPICall_t /*hSteamAPICall*/ ) { Run( pvParam ); }
+ virtual int GetCallbackSizeBytes() { return sizeof_P; }
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult();
+ ~CCallResult();
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func );
+ bool IsActive() const;
+ void Cancel();
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam );
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall );
+ virtual int GetCallbackSizeBytes() { return sizeof( P ); }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct,
+// bGameserver = listen for gameserver callbacks instead of client callbacks
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameserver = false >
+class CCallback : public CCallbackImpl< sizeof( P ) >
+{
+public:
+ typedef void (T::*func_t)(P*);
+
+ // NOTE: If you can't provide the correct parameters at construction time, you should
+ // use the CCallbackManual callback object (STEAM_CALLBACK_MANUAL macro) instead.
+ CCallback( T *pObj, func_t func );
+
+ void Register( T *pObj, func_t func );
+ void Unregister();
+
+protected:
+ virtual void Run( void *pvParam );
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: subclass of CCallback which allows default-construction in
+// an unregistered state; you must call Register manually
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer = false >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+
+ // Inherits public Register and Unregister functions from base class
+};
+
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// SteamAPI_IsSteamRunning() returns true if Steam is currently running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Pumps out all the steam messages, calling registered callbacks.
+// NOT THREADSAFE - do not call from multiple threads simultaneously.
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name.
+// DEPRECATED - implementation is Windows only, and the path returned is a UTF-8 string which must be converted to UTF-16 for use with Win32 APIs
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+
+#if defined( VERSION_SAFE_STEAM_API_INTERFACES )
+// exists only for backwards compat with code written against older SDKs
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#endif
+
+#include "steam_api_internal.h"
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_140/steam_api.json b/lsteamclient/steamworks_sdk_140/steam_api.json
new file mode 100644
index 00000000..b591ea28
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/steam_api.json
@@ -0,0 +1,7826 @@
+{"typedefs":[{"typedef": "uint8","type": "unsigned char"}
+,{"typedef": "uint8","type": "unsigned char"}
+,{"typedef": "int8","type": "signed char"}
+,{"typedef": "int16","type": "short"}
+,{"typedef": "uint16","type": "unsigned short"}
+,{"typedef": "int32","type": "int"}
+,{"typedef": "uint32","type": "unsigned int"}
+,{"typedef": "int64","type": "long long"}
+,{"typedef": "uint64","type": "unsigned long long"}
+,{"typedef": "lint64","type": "int64"}
+,{"typedef": "ulint64","type": "uint64"}
+,{"typedef": "intp","type": "long long"}
+,{"typedef": "uintp","type": "unsigned long long"}
+,{"typedef": "Salt_t","type": "uint8 [8]"}
+,{"typedef": "GID_t","type": "uint64"}
+,{"typedef": "JobID_t","type": "uint64"}
+,{"typedef": "TxnID_t","type": "GID_t"}
+,{"typedef": "PackageId_t","type": "uint32"}
+,{"typedef": "BundleId_t","type": "uint32"}
+,{"typedef": "AppId_t","type": "uint32"}
+,{"typedef": "AssetClassId_t","type": "uint64"}
+,{"typedef": "PhysicalItemId_t","type": "uint32"}
+,{"typedef": "DepotId_t","type": "uint32"}
+,{"typedef": "RTime32","type": "uint32"}
+,{"typedef": "CellID_t","type": "uint32"}
+,{"typedef": "SteamAPICall_t","type": "uint64"}
+,{"typedef": "AccountID_t","type": "uint32"}
+,{"typedef": "PartnerId_t","type": "uint32"}
+,{"typedef": "ManifestId_t","type": "uint64"}
+,{"typedef": "HAuthTicket","type": "uint32"}
+,{"typedef": "PFNLegacyKeyRegistration","type": "void (*)(const char *, const char *)"}
+,{"typedef": "PFNLegacyKeyInstalled","type": "_Bool (*)(void)"}
+,{"typedef": "PFNPreMinidumpCallback","type": "void (*)(void *)"}
+,{"typedef": "BREAKPAD_HANDLE","type": "void *"}
+,{"typedef": "ValvePackingSentinel_t","type": "struct ValvePackingSentinel_t"}
+,{"typedef": "compile_time_assert_type","type": "char [1]"}
+,{"typedef": "HSteamPipe","type": "int32"}
+,{"typedef": "HSteamUser","type": "int32"}
+,{"typedef": "SteamAPIWarningMessageHook_t","type": "void (*)(int, const char *) __attribute__((cdecl))"}
+,{"typedef": "SteamAPI_CheckCallbackRegistered_t","type": "uint32 (*)(int)"}
+,{"typedef": "FriendsGroupID_t","type": "int16"}
+,{"typedef": "SteamAPIWarningMessageHook_t","type": "void (*)(int, const char *) __attribute__((cdecl))"}
+,{"typedef": "HServerListRequest","type": "void *"}
+,{"typedef": "HServerQuery","type": "int"}
+,{"typedef": "UGCHandle_t","type": "uint64"}
+,{"typedef": "PublishedFileUpdateHandle_t","type": "uint64"}
+,{"typedef": "PublishedFileId_t","type": "uint64"}
+,{"typedef": "UGCFileWriteStreamHandle_t","type": "uint64"}
+,{"typedef": "compile_time_assert_type","type": "char [1]"}
+,{"typedef": "SteamLeaderboard_t","type": "uint64"}
+,{"typedef": "SteamLeaderboardEntries_t","type": "uint64"}
+,{"typedef": "SNetSocket_t","type": "uint32"}
+,{"typedef": "SNetListenSocket_t","type": "uint32"}
+,{"typedef": "ScreenshotHandle","type": "uint32"}
+,{"typedef": "PlaybackStatusHasChanged_t::SteamCallback_t","type": "struct PlaybackStatusHasChanged_t"}
+,{"typedef": "VolumeHasChanged_t::SteamCallback_t","type": "struct VolumeHasChanged_t"}
+,{"typedef": "MusicPlayerRemoteWillActivate_t::SteamCallback_t","type": "struct MusicPlayerRemoteWillActivate_t"}
+,{"typedef": "MusicPlayerRemoteWillDeactivate_t::SteamCallback_t","type": "struct MusicPlayerRemoteWillDeactivate_t"}
+,{"typedef": "MusicPlayerRemoteToFront_t::SteamCallback_t","type": "struct MusicPlayerRemoteToFront_t"}
+,{"typedef": "MusicPlayerWillQuit_t::SteamCallback_t","type": "struct MusicPlayerWillQuit_t"}
+,{"typedef": "MusicPlayerWantsPlay_t::SteamCallback_t","type": "struct MusicPlayerWantsPlay_t"}
+,{"typedef": "MusicPlayerWantsPause_t::SteamCallback_t","type": "struct MusicPlayerWantsPause_t"}
+,{"typedef": "MusicPlayerWantsPlayPrevious_t::SteamCallback_t","type": "struct MusicPlayerWantsPlayPrevious_t"}
+,{"typedef": "MusicPlayerWantsPlayNext_t::SteamCallback_t","type": "struct MusicPlayerWantsPlayNext_t"}
+,{"typedef": "MusicPlayerWantsShuffled_t::SteamCallback_t","type": "struct MusicPlayerWantsShuffled_t"}
+,{"typedef": "MusicPlayerWantsLooped_t::SteamCallback_t","type": "struct MusicPlayerWantsLooped_t"}
+,{"typedef": "MusicPlayerWantsVolume_t::SteamCallback_t","type": "struct MusicPlayerWantsVolume_t"}
+,{"typedef": "MusicPlayerSelectsQueueEntry_t::SteamCallback_t","type": "struct MusicPlayerSelectsQueueEntry_t"}
+,{"typedef": "MusicPlayerSelectsPlaylistEntry_t::SteamCallback_t","type": "struct MusicPlayerSelectsPlaylistEntry_t"}
+,{"typedef": "MusicPlayerWantsPlayingRepeatStatus_t::SteamCallback_t","type": "struct MusicPlayerWantsPlayingRepeatStatus_t"}
+,{"typedef": "HTTPRequestHandle","type": "uint32"}
+,{"typedef": "HTTPCookieContainerHandle","type": "uint32"}
+,{"typedef": "ClientUnifiedMessageHandle","type": "uint64"}
+,{"typedef": "ControllerHandle_t","type": "uint64"}
+,{"typedef": "ControllerActionSetHandle_t","type": "uint64"}
+,{"typedef": "ControllerDigitalActionHandle_t","type": "uint64"}
+,{"typedef": "ControllerAnalogActionHandle_t","type": "uint64"}
+,{"typedef": "UGCQueryHandle_t","type": "uint64"}
+,{"typedef": "UGCUpdateHandle_t","type": "uint64"}
+,{"typedef": "SteamAppInstalled_t::SteamCallback_t","type": "struct SteamAppInstalled_t"}
+,{"typedef": "SteamAppUninstalled_t::SteamCallback_t","type": "struct SteamAppUninstalled_t"}
+,{"typedef": "HHTMLBrowser","type": "uint32"}
+,{"typedef": "HTML_BrowserReady_t::SteamCallback_t","type": "struct HTML_BrowserReady_t"}
+,{"typedef": "HTML_NeedsPaint_t::SteamCallback_t","type": "struct HTML_NeedsPaint_t"}
+,{"typedef": "HTML_StartRequest_t::SteamCallback_t","type": "struct HTML_StartRequest_t"}
+,{"typedef": "HTML_CloseBrowser_t::SteamCallback_t","type": "struct HTML_CloseBrowser_t"}
+,{"typedef": "HTML_URLChanged_t::SteamCallback_t","type": "struct HTML_URLChanged_t"}
+,{"typedef": "HTML_FinishedRequest_t::SteamCallback_t","type": "struct HTML_FinishedRequest_t"}
+,{"typedef": "HTML_OpenLinkInNewTab_t::SteamCallback_t","type": "struct HTML_OpenLinkInNewTab_t"}
+,{"typedef": "HTML_ChangedTitle_t::SteamCallback_t","type": "struct HTML_ChangedTitle_t"}
+,{"typedef": "HTML_SearchResults_t::SteamCallback_t","type": "struct HTML_SearchResults_t"}
+,{"typedef": "HTML_CanGoBackAndForward_t::SteamCallback_t","type": "struct HTML_CanGoBackAndForward_t"}
+,{"typedef": "HTML_HorizontalScroll_t::SteamCallback_t","type": "struct HTML_HorizontalScroll_t"}
+,{"typedef": "HTML_VerticalScroll_t::SteamCallback_t","type": "struct HTML_VerticalScroll_t"}
+,{"typedef": "HTML_LinkAtPosition_t::SteamCallback_t","type": "struct HTML_LinkAtPosition_t"}
+,{"typedef": "HTML_JSAlert_t::SteamCallback_t","type": "struct HTML_JSAlert_t"}
+,{"typedef": "HTML_JSConfirm_t::SteamCallback_t","type": "struct HTML_JSConfirm_t"}
+,{"typedef": "HTML_FileOpenDialog_t::SteamCallback_t","type": "struct HTML_FileOpenDialog_t"}
+,{"typedef": "HTML_NewWindow_t::SteamCallback_t","type": "struct HTML_NewWindow_t"}
+,{"typedef": "HTML_SetCursor_t::SteamCallback_t","type": "struct HTML_SetCursor_t"}
+,{"typedef": "HTML_StatusText_t::SteamCallback_t","type": "struct HTML_StatusText_t"}
+,{"typedef": "HTML_ShowToolTip_t::SteamCallback_t","type": "struct HTML_ShowToolTip_t"}
+,{"typedef": "HTML_UpdateToolTip_t::SteamCallback_t","type": "struct HTML_UpdateToolTip_t"}
+,{"typedef": "HTML_HideToolTip_t::SteamCallback_t","type": "struct HTML_HideToolTip_t"}
+,{"typedef": "SteamItemInstanceID_t","type": "uint64"}
+,{"typedef": "SteamItemDef_t","type": "int32"}
+,{"typedef": "SteamInventoryResult_t","type": "int32"}
+,{"typedef": "BroadcastUploadStart_t::SteamCallback_t","type": "struct BroadcastUploadStart_t"}
+,{"typedef": "BroadcastUploadStop_t::SteamCallback_t","type": "struct BroadcastUploadStop_t"}
+,{"typedef": "GetVideoURLResult_t::SteamCallback_t","type": "struct GetVideoURLResult_t"}
+,{"typedef": "GetOPFSettingsResult_t::SteamCallback_t","type": "struct GetOPFSettingsResult_t"}
+,{"typedef": "CCallResult::func_t","type": "void (T::*)(P *, _Bool)"}
+,{"typedef": "CCallback::func_t","type": "void (T::*)(P *)"}
+],
+"enums":[
+ {"enumname": "EUniverse","values": [
+ {"name": "k_EUniverseInvalid","value": "0"}
+ ,{"name": "k_EUniversePublic","value": "1"}
+ ,{"name": "k_EUniverseBeta","value": "2"}
+ ,{"name": "k_EUniverseInternal","value": "3"}
+ ,{"name": "k_EUniverseDev","value": "4"}
+ ,{"name": "k_EUniverseMax","value": "5"}
+]}
+, {"enumname": "EResult","values": [
+ {"name": "k_EResultOK","value": "1"}
+ ,{"name": "k_EResultFail","value": "2"}
+ ,{"name": "k_EResultNoConnection","value": "3"}
+ ,{"name": "k_EResultInvalidPassword","value": "5"}
+ ,{"name": "k_EResultLoggedInElsewhere","value": "6"}
+ ,{"name": "k_EResultInvalidProtocolVer","value": "7"}
+ ,{"name": "k_EResultInvalidParam","value": "8"}
+ ,{"name": "k_EResultFileNotFound","value": "9"}
+ ,{"name": "k_EResultBusy","value": "10"}
+ ,{"name": "k_EResultInvalidState","value": "11"}
+ ,{"name": "k_EResultInvalidName","value": "12"}
+ ,{"name": "k_EResultInvalidEmail","value": "13"}
+ ,{"name": "k_EResultDuplicateName","value": "14"}
+ ,{"name": "k_EResultAccessDenied","value": "15"}
+ ,{"name": "k_EResultTimeout","value": "16"}
+ ,{"name": "k_EResultBanned","value": "17"}
+ ,{"name": "k_EResultAccountNotFound","value": "18"}
+ ,{"name": "k_EResultInvalidSteamID","value": "19"}
+ ,{"name": "k_EResultServiceUnavailable","value": "20"}
+ ,{"name": "k_EResultNotLoggedOn","value": "21"}
+ ,{"name": "k_EResultPending","value": "22"}
+ ,{"name": "k_EResultEncryptionFailure","value": "23"}
+ ,{"name": "k_EResultInsufficientPrivilege","value": "24"}
+ ,{"name": "k_EResultLimitExceeded","value": "25"}
+ ,{"name": "k_EResultRevoked","value": "26"}
+ ,{"name": "k_EResultExpired","value": "27"}
+ ,{"name": "k_EResultAlreadyRedeemed","value": "28"}
+ ,{"name": "k_EResultDuplicateRequest","value": "29"}
+ ,{"name": "k_EResultAlreadyOwned","value": "30"}
+ ,{"name": "k_EResultIPNotFound","value": "31"}
+ ,{"name": "k_EResultPersistFailed","value": "32"}
+ ,{"name": "k_EResultLockingFailed","value": "33"}
+ ,{"name": "k_EResultLogonSessionReplaced","value": "34"}
+ ,{"name": "k_EResultConnectFailed","value": "35"}
+ ,{"name": "k_EResultHandshakeFailed","value": "36"}
+ ,{"name": "k_EResultIOFailure","value": "37"}
+ ,{"name": "k_EResultRemoteDisconnect","value": "38"}
+ ,{"name": "k_EResultShoppingCartNotFound","value": "39"}
+ ,{"name": "k_EResultBlocked","value": "40"}
+ ,{"name": "k_EResultIgnored","value": "41"}
+ ,{"name": "k_EResultNoMatch","value": "42"}
+ ,{"name": "k_EResultAccountDisabled","value": "43"}
+ ,{"name": "k_EResultServiceReadOnly","value": "44"}
+ ,{"name": "k_EResultAccountNotFeatured","value": "45"}
+ ,{"name": "k_EResultAdministratorOK","value": "46"}
+ ,{"name": "k_EResultContentVersion","value": "47"}
+ ,{"name": "k_EResultTryAnotherCM","value": "48"}
+ ,{"name": "k_EResultPasswordRequiredToKickSession","value": "49"}
+ ,{"name": "k_EResultAlreadyLoggedInElsewhere","value": "50"}
+ ,{"name": "k_EResultSuspended","value": "51"}
+ ,{"name": "k_EResultCancelled","value": "52"}
+ ,{"name": "k_EResultDataCorruption","value": "53"}
+ ,{"name": "k_EResultDiskFull","value": "54"}
+ ,{"name": "k_EResultRemoteCallFailed","value": "55"}
+ ,{"name": "k_EResultPasswordUnset","value": "56"}
+ ,{"name": "k_EResultExternalAccountUnlinked","value": "57"}
+ ,{"name": "k_EResultPSNTicketInvalid","value": "58"}
+ ,{"name": "k_EResultExternalAccountAlreadyLinked","value": "59"}
+ ,{"name": "k_EResultRemoteFileConflict","value": "60"}
+ ,{"name": "k_EResultIllegalPassword","value": "61"}
+ ,{"name": "k_EResultSameAsPreviousValue","value": "62"}
+ ,{"name": "k_EResultAccountLogonDenied","value": "63"}
+ ,{"name": "k_EResultCannotUseOldPassword","value": "64"}
+ ,{"name": "k_EResultInvalidLoginAuthCode","value": "65"}
+ ,{"name": "k_EResultAccountLogonDeniedNoMail","value": "66"}
+ ,{"name": "k_EResultHardwareNotCapableOfIPT","value": "67"}
+ ,{"name": "k_EResultIPTInitError","value": "68"}
+ ,{"name": "k_EResultParentalControlRestricted","value": "69"}
+ ,{"name": "k_EResultFacebookQueryError","value": "70"}
+ ,{"name": "k_EResultExpiredLoginAuthCode","value": "71"}
+ ,{"name": "k_EResultIPLoginRestrictionFailed","value": "72"}
+ ,{"name": "k_EResultAccountLockedDown","value": "73"}
+ ,{"name": "k_EResultAccountLogonDeniedVerifiedEmailRequired","value": "74"}
+ ,{"name": "k_EResultNoMatchingURL","value": "75"}
+ ,{"name": "k_EResultBadResponse","value": "76"}
+ ,{"name": "k_EResultRequirePasswordReEntry","value": "77"}
+ ,{"name": "k_EResultValueOutOfRange","value": "78"}
+ ,{"name": "k_EResultUnexpectedError","value": "79"}
+ ,{"name": "k_EResultDisabled","value": "80"}
+ ,{"name": "k_EResultInvalidCEGSubmission","value": "81"}
+ ,{"name": "k_EResultRestrictedDevice","value": "82"}
+ ,{"name": "k_EResultRegionLocked","value": "83"}
+ ,{"name": "k_EResultRateLimitExceeded","value": "84"}
+ ,{"name": "k_EResultAccountLoginDeniedNeedTwoFactor","value": "85"}
+ ,{"name": "k_EResultItemDeleted","value": "86"}
+ ,{"name": "k_EResultAccountLoginDeniedThrottle","value": "87"}
+ ,{"name": "k_EResultTwoFactorCodeMismatch","value": "88"}
+ ,{"name": "k_EResultTwoFactorActivationCodeMismatch","value": "89"}
+ ,{"name": "k_EResultAccountAssociatedToMultiplePartners","value": "90"}
+ ,{"name": "k_EResultNotModified","value": "91"}
+ ,{"name": "k_EResultNoMobileDevice","value": "92"}
+ ,{"name": "k_EResultTimeNotSynced","value": "93"}
+ ,{"name": "k_EResultSmsCodeFailed","value": "94"}
+ ,{"name": "k_EResultAccountLimitExceeded","value": "95"}
+ ,{"name": "k_EResultAccountActivityLimitExceeded","value": "96"}
+ ,{"name": "k_EResultPhoneActivityLimitExceeded","value": "97"}
+ ,{"name": "k_EResultRefundToWallet","value": "98"}
+ ,{"name": "k_EResultEmailSendFailure","value": "99"}
+ ,{"name": "k_EResultNotSettled","value": "100"}
+ ,{"name": "k_EResultNeedCaptcha","value": "101"}
+ ,{"name": "k_EResultGSLTDenied","value": "102"}
+ ,{"name": "k_EResultGSOwnerDenied","value": "103"}
+ ,{"name": "k_EResultInvalidItemType","value": "104"}
+ ,{"name": "k_EResultIPBanned","value": "105"}
+ ,{"name": "k_EResultGSLTExpired","value": "106"}
+ ,{"name": "k_EResultInsufficientFunds","value": "107"}
+ ,{"name": "k_EResultTooManyPending","value": "108"}
+]}
+, {"enumname": "EVoiceResult","values": [
+ {"name": "k_EVoiceResultOK","value": "0"}
+ ,{"name": "k_EVoiceResultNotInitialized","value": "1"}
+ ,{"name": "k_EVoiceResultNotRecording","value": "2"}
+ ,{"name": "k_EVoiceResultNoData","value": "3"}
+ ,{"name": "k_EVoiceResultBufferTooSmall","value": "4"}
+ ,{"name": "k_EVoiceResultDataCorrupted","value": "5"}
+ ,{"name": "k_EVoiceResultRestricted","value": "6"}
+ ,{"name": "k_EVoiceResultUnsupportedCodec","value": "7"}
+ ,{"name": "k_EVoiceResultReceiverOutOfDate","value": "8"}
+ ,{"name": "k_EVoiceResultReceiverDidNotAnswer","value": "9"}
+]}
+, {"enumname": "EDenyReason","values": [
+ {"name": "k_EDenyInvalid","value": "0"}
+ ,{"name": "k_EDenyInvalidVersion","value": "1"}
+ ,{"name": "k_EDenyGeneric","value": "2"}
+ ,{"name": "k_EDenyNotLoggedOn","value": "3"}
+ ,{"name": "k_EDenyNoLicense","value": "4"}
+ ,{"name": "k_EDenyCheater","value": "5"}
+ ,{"name": "k_EDenyLoggedInElseWhere","value": "6"}
+ ,{"name": "k_EDenyUnknownText","value": "7"}
+ ,{"name": "k_EDenyIncompatibleAnticheat","value": "8"}
+ ,{"name": "k_EDenyMemoryCorruption","value": "9"}
+ ,{"name": "k_EDenyIncompatibleSoftware","value": "10"}
+ ,{"name": "k_EDenySteamConnectionLost","value": "11"}
+ ,{"name": "k_EDenySteamConnectionError","value": "12"}
+ ,{"name": "k_EDenySteamResponseTimedOut","value": "13"}
+ ,{"name": "k_EDenySteamValidationStalled","value": "14"}
+ ,{"name": "k_EDenySteamOwnerLeftGuestUser","value": "15"}
+]}
+, {"enumname": "EBeginAuthSessionResult","values": [
+ {"name": "k_EBeginAuthSessionResultOK","value": "0"}
+ ,{"name": "k_EBeginAuthSessionResultInvalidTicket","value": "1"}
+ ,{"name": "k_EBeginAuthSessionResultDuplicateRequest","value": "2"}
+ ,{"name": "k_EBeginAuthSessionResultInvalidVersion","value": "3"}
+ ,{"name": "k_EBeginAuthSessionResultGameMismatch","value": "4"}
+ ,{"name": "k_EBeginAuthSessionResultExpiredTicket","value": "5"}
+]}
+, {"enumname": "EAuthSessionResponse","values": [
+ {"name": "k_EAuthSessionResponseOK","value": "0"}
+ ,{"name": "k_EAuthSessionResponseUserNotConnectedToSteam","value": "1"}
+ ,{"name": "k_EAuthSessionResponseNoLicenseOrExpired","value": "2"}
+ ,{"name": "k_EAuthSessionResponseVACBanned","value": "3"}
+ ,{"name": "k_EAuthSessionResponseLoggedInElseWhere","value": "4"}
+ ,{"name": "k_EAuthSessionResponseVACCheckTimedOut","value": "5"}
+ ,{"name": "k_EAuthSessionResponseAuthTicketCanceled","value": "6"}
+ ,{"name": "k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed","value": "7"}
+ ,{"name": "k_EAuthSessionResponseAuthTicketInvalid","value": "8"}
+ ,{"name": "k_EAuthSessionResponsePublisherIssuedBan","value": "9"}
+]}
+, {"enumname": "EUserHasLicenseForAppResult","values": [
+ {"name": "k_EUserHasLicenseResultHasLicense","value": "0"}
+ ,{"name": "k_EUserHasLicenseResultDoesNotHaveLicense","value": "1"}
+ ,{"name": "k_EUserHasLicenseResultNoAuth","value": "2"}
+]}
+, {"enumname": "EAccountType","values": [
+ {"name": "k_EAccountTypeInvalid","value": "0"}
+ ,{"name": "k_EAccountTypeIndividual","value": "1"}
+ ,{"name": "k_EAccountTypeMultiseat","value": "2"}
+ ,{"name": "k_EAccountTypeGameServer","value": "3"}
+ ,{"name": "k_EAccountTypeAnonGameServer","value": "4"}
+ ,{"name": "k_EAccountTypePending","value": "5"}
+ ,{"name": "k_EAccountTypeContentServer","value": "6"}
+ ,{"name": "k_EAccountTypeClan","value": "7"}
+ ,{"name": "k_EAccountTypeChat","value": "8"}
+ ,{"name": "k_EAccountTypeConsoleUser","value": "9"}
+ ,{"name": "k_EAccountTypeAnonUser","value": "10"}
+ ,{"name": "k_EAccountTypeMax","value": "11"}
+]}
+, {"enumname": "EAppReleaseState","values": [
+ {"name": "k_EAppReleaseState_Unknown","value": "0"}
+ ,{"name": "k_EAppReleaseState_Unavailable","value": "1"}
+ ,{"name": "k_EAppReleaseState_Prerelease","value": "2"}
+ ,{"name": "k_EAppReleaseState_PreloadOnly","value": "3"}
+ ,{"name": "k_EAppReleaseState_Released","value": "4"}
+]}
+, {"enumname": "EAppOwnershipFlags","values": [
+ {"name": "k_EAppOwnershipFlags_None","value": "0"}
+ ,{"name": "k_EAppOwnershipFlags_OwnsLicense","value": "1"}
+ ,{"name": "k_EAppOwnershipFlags_FreeLicense","value": "2"}
+ ,{"name": "k_EAppOwnershipFlags_RegionRestricted","value": "4"}
+ ,{"name": "k_EAppOwnershipFlags_LowViolence","value": "8"}
+ ,{"name": "k_EAppOwnershipFlags_InvalidPlatform","value": "16"}
+ ,{"name": "k_EAppOwnershipFlags_SharedLicense","value": "32"}
+ ,{"name": "k_EAppOwnershipFlags_FreeWeekend","value": "64"}
+ ,{"name": "k_EAppOwnershipFlags_RetailLicense","value": "128"}
+ ,{"name": "k_EAppOwnershipFlags_LicenseLocked","value": "256"}
+ ,{"name": "k_EAppOwnershipFlags_LicensePending","value": "512"}
+ ,{"name": "k_EAppOwnershipFlags_LicenseExpired","value": "1024"}
+ ,{"name": "k_EAppOwnershipFlags_LicensePermanent","value": "2048"}
+ ,{"name": "k_EAppOwnershipFlags_LicenseRecurring","value": "4096"}
+ ,{"name": "k_EAppOwnershipFlags_LicenseCanceled","value": "8192"}
+ ,{"name": "k_EAppOwnershipFlags_AutoGrant","value": "16384"}
+ ,{"name": "k_EAppOwnershipFlags_PendingGift","value": "32768"}
+ ,{"name": "k_EAppOwnershipFlags_RentalNotActivated","value": "65536"}
+ ,{"name": "k_EAppOwnershipFlags_Rental","value": "131072"}
+ ,{"name": "k_EAppOwnershipFlags_SiteLicense","value": "262144"}
+]}
+, {"enumname": "EAppType","values": [
+ {"name": "k_EAppType_Invalid","value": "0"}
+ ,{"name": "k_EAppType_Game","value": "1"}
+ ,{"name": "k_EAppType_Application","value": "2"}
+ ,{"name": "k_EAppType_Tool","value": "4"}
+ ,{"name": "k_EAppType_Demo","value": "8"}
+ ,{"name": "k_EAppType_Media_DEPRECATED","value": "16"}
+ ,{"name": "k_EAppType_DLC","value": "32"}
+ ,{"name": "k_EAppType_Guide","value": "64"}
+ ,{"name": "k_EAppType_Driver","value": "128"}
+ ,{"name": "k_EAppType_Config","value": "256"}
+ ,{"name": "k_EAppType_Hardware","value": "512"}
+ ,{"name": "k_EAppType_Franchise","value": "1024"}
+ ,{"name": "k_EAppType_Video","value": "2048"}
+ ,{"name": "k_EAppType_Plugin","value": "4096"}
+ ,{"name": "k_EAppType_Music","value": "8192"}
+ ,{"name": "k_EAppType_Series","value": "16384"}
+ ,{"name": "k_EAppType_Shortcut","value": "1073741824"}
+ ,{"name": "k_EAppType_DepotOnly","value": "-2147483648"}
+]}
+, {"enumname": "ESteamUserStatType","values": [
+ {"name": "k_ESteamUserStatTypeINVALID","value": "0"}
+ ,{"name": "k_ESteamUserStatTypeINT","value": "1"}
+ ,{"name": "k_ESteamUserStatTypeFLOAT","value": "2"}
+ ,{"name": "k_ESteamUserStatTypeAVGRATE","value": "3"}
+ ,{"name": "k_ESteamUserStatTypeACHIEVEMENTS","value": "4"}
+ ,{"name": "k_ESteamUserStatTypeGROUPACHIEVEMENTS","value": "5"}
+ ,{"name": "k_ESteamUserStatTypeMAX","value": "6"}
+]}
+, {"enumname": "EChatEntryType","values": [
+ {"name": "k_EChatEntryTypeInvalid","value": "0"}
+ ,{"name": "k_EChatEntryTypeChatMsg","value": "1"}
+ ,{"name": "k_EChatEntryTypeTyping","value": "2"}
+ ,{"name": "k_EChatEntryTypeInviteGame","value": "3"}
+ ,{"name": "k_EChatEntryTypeEmote","value": "4"}
+ ,{"name": "k_EChatEntryTypeLeftConversation","value": "6"}
+ ,{"name": "k_EChatEntryTypeEntered","value": "7"}
+ ,{"name": "k_EChatEntryTypeWasKicked","value": "8"}
+ ,{"name": "k_EChatEntryTypeWasBanned","value": "9"}
+ ,{"name": "k_EChatEntryTypeDisconnected","value": "10"}
+ ,{"name": "k_EChatEntryTypeHistoricalChat","value": "11"}
+ ,{"name": "k_EChatEntryTypeLinkBlocked","value": "14"}
+]}
+, {"enumname": "EChatRoomEnterResponse","values": [
+ {"name": "k_EChatRoomEnterResponseSuccess","value": "1"}
+ ,{"name": "k_EChatRoomEnterResponseDoesntExist","value": "2"}
+ ,{"name": "k_EChatRoomEnterResponseNotAllowed","value": "3"}
+ ,{"name": "k_EChatRoomEnterResponseFull","value": "4"}
+ ,{"name": "k_EChatRoomEnterResponseError","value": "5"}
+ ,{"name": "k_EChatRoomEnterResponseBanned","value": "6"}
+ ,{"name": "k_EChatRoomEnterResponseLimited","value": "7"}
+ ,{"name": "k_EChatRoomEnterResponseClanDisabled","value": "8"}
+ ,{"name": "k_EChatRoomEnterResponseCommunityBan","value": "9"}
+ ,{"name": "k_EChatRoomEnterResponseMemberBlockedYou","value": "10"}
+ ,{"name": "k_EChatRoomEnterResponseYouBlockedMember","value": "11"}
+]}
+, {"enumname": "EChatSteamIDInstanceFlags","values": [
+ {"name": "k_EChatAccountInstanceMask","value": "4095"}
+ ,{"name": "k_EChatInstanceFlagClan","value": "524288"}
+ ,{"name": "k_EChatInstanceFlagLobby","value": "262144"}
+ ,{"name": "k_EChatInstanceFlagMMSLobby","value": "131072"}
+]}
+, {"enumname": "EMarketingMessageFlags","values": [
+ {"name": "k_EMarketingMessageFlagsNone","value": "0"}
+ ,{"name": "k_EMarketingMessageFlagsHighPriority","value": "1"}
+ ,{"name": "k_EMarketingMessageFlagsPlatformWindows","value": "2"}
+ ,{"name": "k_EMarketingMessageFlagsPlatformMac","value": "4"}
+ ,{"name": "k_EMarketingMessageFlagsPlatformLinux","value": "8"}
+ ,{"name": "k_EMarketingMessageFlagsPlatformRestrictions","value": "14"}
+]}
+, {"enumname": "ENotificationPosition","values": [
+ {"name": "k_EPositionTopLeft","value": "0"}
+ ,{"name": "k_EPositionTopRight","value": "1"}
+ ,{"name": "k_EPositionBottomLeft","value": "2"}
+ ,{"name": "k_EPositionBottomRight","value": "3"}
+]}
+, {"enumname": "EBroadcastUploadResult","values": [
+ {"name": "k_EBroadcastUploadResultNone","value": "0"}
+ ,{"name": "k_EBroadcastUploadResultOK","value": "1"}
+ ,{"name": "k_EBroadcastUploadResultInitFailed","value": "2"}
+ ,{"name": "k_EBroadcastUploadResultFrameFailed","value": "3"}
+ ,{"name": "k_EBroadcastUploadResultTimeout","value": "4"}
+ ,{"name": "k_EBroadcastUploadResultBandwidthExceeded","value": "5"}
+ ,{"name": "k_EBroadcastUploadResultLowFPS","value": "6"}
+ ,{"name": "k_EBroadcastUploadResultMissingKeyFrames","value": "7"}
+ ,{"name": "k_EBroadcastUploadResultNoConnection","value": "8"}
+ ,{"name": "k_EBroadcastUploadResultRelayFailed","value": "9"}
+ ,{"name": "k_EBroadcastUploadResultSettingsChanged","value": "10"}
+ ,{"name": "k_EBroadcastUploadResultMissingAudio","value": "11"}
+ ,{"name": "k_EBroadcastUploadResultTooFarBehind","value": "12"}
+ ,{"name": "k_EBroadcastUploadResultTranscodeBehind","value": "13"}
+]}
+, {"enumname": "ELaunchOptionType","values": [
+ {"name": "k_ELaunchOptionType_None","value": "0"}
+ ,{"name": "k_ELaunchOptionType_Default","value": "1"}
+ ,{"name": "k_ELaunchOptionType_SafeMode","value": "2"}
+ ,{"name": "k_ELaunchOptionType_Multiplayer","value": "3"}
+ ,{"name": "k_ELaunchOptionType_Config","value": "4"}
+ ,{"name": "k_ELaunchOptionType_OpenVR","value": "5"}
+ ,{"name": "k_ELaunchOptionType_Server","value": "6"}
+ ,{"name": "k_ELaunchOptionType_Editor","value": "7"}
+ ,{"name": "k_ELaunchOptionType_Manual","value": "8"}
+ ,{"name": "k_ELaunchOptionType_Benchmark","value": "9"}
+ ,{"name": "k_ELaunchOptionType_Option1","value": "10"}
+ ,{"name": "k_ELaunchOptionType_Option2","value": "11"}
+ ,{"name": "k_ELaunchOptionType_Option3","value": "12"}
+ ,{"name": "k_ELaunchOptionType_OculusVR","value": "13"}
+ ,{"name": "k_ELaunchOptionType_OpenVROverlay","value": "14"}
+ ,{"name": "k_ELaunchOptionType_OSVR","value": "15"}
+ ,{"name": "k_ELaunchOptionType_Dialog","value": "1000"}
+]}
+, {"enumname": "EVRHMDType","values": [
+ {"name": "k_eEVRHMDType_None","value": "-1"}
+ ,{"name": "k_eEVRHMDType_Unknown","value": "0"}
+ ,{"name": "k_eEVRHMDType_HTC_Dev","value": "1"}
+ ,{"name": "k_eEVRHMDType_HTC_VivePre","value": "2"}
+ ,{"name": "k_eEVRHMDType_HTC_Vive","value": "3"}
+ ,{"name": "k_eEVRHMDType_HTC_Unknown","value": "20"}
+ ,{"name": "k_eEVRHMDType_Oculus_DK1","value": "21"}
+ ,{"name": "k_eEVRHMDType_Oculus_DK2","value": "22"}
+ ,{"name": "k_eEVRHMDType_Oculus_Rift","value": "23"}
+ ,{"name": "k_eEVRHMDType_Oculus_Unknown","value": "40"}
+]}
+, {"enumname": "CGameID::EGameIDType","values": [
+ {"name": "k_EGameIDTypeApp","value": "0"}
+ ,{"name": "k_EGameIDTypeGameMod","value": "1"}
+ ,{"name": "k_EGameIDTypeShortcut","value": "2"}
+ ,{"name": "k_EGameIDTypeP2P","value": "3"}
+]}
+, {"enumname": "IPCFailure_t::EFailureType","values": [
+ {"name": "k_EFailureFlushedCallbackQueue","value": "0"}
+ ,{"name": "k_EFailurePipeFail","value": "1"}
+]}
+, {"enumname": "EFriendRelationship","values": [
+ {"name": "k_EFriendRelationshipNone","value": "0"}
+ ,{"name": "k_EFriendRelationshipBlocked","value": "1"}
+ ,{"name": "k_EFriendRelationshipRequestRecipient","value": "2"}
+ ,{"name": "k_EFriendRelationshipFriend","value": "3"}
+ ,{"name": "k_EFriendRelationshipRequestInitiator","value": "4"}
+ ,{"name": "k_EFriendRelationshipIgnored","value": "5"}
+ ,{"name": "k_EFriendRelationshipIgnoredFriend","value": "6"}
+ ,{"name": "k_EFriendRelationshipSuggested_DEPRECATED","value": "7"}
+ ,{"name": "k_EFriendRelationshipMax","value": "8"}
+]}
+, {"enumname": "EPersonaState","values": [
+ {"name": "k_EPersonaStateOffline","value": "0"}
+ ,{"name": "k_EPersonaStateOnline","value": "1"}
+ ,{"name": "k_EPersonaStateBusy","value": "2"}
+ ,{"name": "k_EPersonaStateAway","value": "3"}
+ ,{"name": "k_EPersonaStateSnooze","value": "4"}
+ ,{"name": "k_EPersonaStateLookingToTrade","value": "5"}
+ ,{"name": "k_EPersonaStateLookingToPlay","value": "6"}
+ ,{"name": "k_EPersonaStateMax","value": "7"}
+]}
+, {"enumname": "EFriendFlags","values": [
+ {"name": "k_EFriendFlagNone","value": "0"}
+ ,{"name": "k_EFriendFlagBlocked","value": "1"}
+ ,{"name": "k_EFriendFlagFriendshipRequested","value": "2"}
+ ,{"name": "k_EFriendFlagImmediate","value": "4"}
+ ,{"name": "k_EFriendFlagClanMember","value": "8"}
+ ,{"name": "k_EFriendFlagOnGameServer","value": "16"}
+ ,{"name": "k_EFriendFlagRequestingFriendship","value": "128"}
+ ,{"name": "k_EFriendFlagRequestingInfo","value": "256"}
+ ,{"name": "k_EFriendFlagIgnored","value": "512"}
+ ,{"name": "k_EFriendFlagIgnoredFriend","value": "1024"}
+ ,{"name": "k_EFriendFlagChatMember","value": "4096"}
+ ,{"name": "k_EFriendFlagAll","value": "65535"}
+]}
+, {"enumname": "EUserRestriction","values": [
+ {"name": "k_nUserRestrictionNone","value": "0"}
+ ,{"name": "k_nUserRestrictionUnknown","value": "1"}
+ ,{"name": "k_nUserRestrictionAnyChat","value": "2"}
+ ,{"name": "k_nUserRestrictionVoiceChat","value": "4"}
+ ,{"name": "k_nUserRestrictionGroupChat","value": "8"}
+ ,{"name": "k_nUserRestrictionRating","value": "16"}
+ ,{"name": "k_nUserRestrictionGameInvites","value": "32"}
+ ,{"name": "k_nUserRestrictionTrading","value": "64"}
+]}
+, {"enumname": "EOverlayToStoreFlag","values": [
+ {"name": "k_EOverlayToStoreFlag_None","value": "0"}
+ ,{"name": "k_EOverlayToStoreFlag_AddToCart","value": "1"}
+ ,{"name": "k_EOverlayToStoreFlag_AddToCartAndShow","value": "2"}
+]}
+, {"enumname": "EPersonaChange","values": [
+ {"name": "k_EPersonaChangeName","value": "1"}
+ ,{"name": "k_EPersonaChangeStatus","value": "2"}
+ ,{"name": "k_EPersonaChangeComeOnline","value": "4"}
+ ,{"name": "k_EPersonaChangeGoneOffline","value": "8"}
+ ,{"name": "k_EPersonaChangeGamePlayed","value": "16"}
+ ,{"name": "k_EPersonaChangeGameServer","value": "32"}
+ ,{"name": "k_EPersonaChangeAvatar","value": "64"}
+ ,{"name": "k_EPersonaChangeJoinedSource","value": "128"}
+ ,{"name": "k_EPersonaChangeLeftSource","value": "256"}
+ ,{"name": "k_EPersonaChangeRelationshipChanged","value": "512"}
+ ,{"name": "k_EPersonaChangeNameFirstSet","value": "1024"}
+ ,{"name": "k_EPersonaChangeFacebookInfo","value": "2048"}
+ ,{"name": "k_EPersonaChangeNickname","value": "4096"}
+ ,{"name": "k_EPersonaChangeSteamLevel","value": "8192"}
+]}
+, {"enumname": "ESteamAPICallFailure","values": [
+ {"name": "k_ESteamAPICallFailureNone","value": "-1"}
+ ,{"name": "k_ESteamAPICallFailureSteamGone","value": "0"}
+ ,{"name": "k_ESteamAPICallFailureNetworkFailure","value": "1"}
+ ,{"name": "k_ESteamAPICallFailureInvalidHandle","value": "2"}
+ ,{"name": "k_ESteamAPICallFailureMismatchedCallback","value": "3"}
+]}
+, {"enumname": "EGamepadTextInputMode","values": [
+ {"name": "k_EGamepadTextInputModeNormal","value": "0"}
+ ,{"name": "k_EGamepadTextInputModePassword","value": "1"}
+]}
+, {"enumname": "EGamepadTextInputLineMode","values": [
+ {"name": "k_EGamepadTextInputLineModeSingleLine","value": "0"}
+ ,{"name": "k_EGamepadTextInputLineModeMultipleLines","value": "1"}
+]}
+, {"enumname": "ECheckFileSignature","values": [
+ {"name": "k_ECheckFileSignatureInvalidSignature","value": "0"}
+ ,{"name": "k_ECheckFileSignatureValidSignature","value": "1"}
+ ,{"name": "k_ECheckFileSignatureFileNotFound","value": "2"}
+ ,{"name": "k_ECheckFileSignatureNoSignaturesFoundForThisApp","value": "3"}
+ ,{"name": "k_ECheckFileSignatureNoSignaturesFoundForThisFile","value": "4"}
+]}
+, {"enumname": "EMatchMakingServerResponse","values": [
+ {"name": "eServerResponded","value": "0"}
+ ,{"name": "eServerFailedToRespond","value": "1"}
+ ,{"name": "eNoServersListedOnMasterServer","value": "2"}
+]}
+, {"enumname": "ELobbyType","values": [
+ {"name": "k_ELobbyTypePrivate","value": "0"}
+ ,{"name": "k_ELobbyTypeFriendsOnly","value": "1"}
+ ,{"name": "k_ELobbyTypePublic","value": "2"}
+ ,{"name": "k_ELobbyTypeInvisible","value": "3"}
+]}
+, {"enumname": "ELobbyComparison","values": [
+ {"name": "k_ELobbyComparisonEqualToOrLessThan","value": "-2"}
+ ,{"name": "k_ELobbyComparisonLessThan","value": "-1"}
+ ,{"name": "k_ELobbyComparisonEqual","value": "0"}
+ ,{"name": "k_ELobbyComparisonGreaterThan","value": "1"}
+ ,{"name": "k_ELobbyComparisonEqualToOrGreaterThan","value": "2"}
+ ,{"name": "k_ELobbyComparisonNotEqual","value": "3"}
+]}
+, {"enumname": "ELobbyDistanceFilter","values": [
+ {"name": "k_ELobbyDistanceFilterClose","value": "0"}
+ ,{"name": "k_ELobbyDistanceFilterDefault","value": "1"}
+ ,{"name": "k_ELobbyDistanceFilterFar","value": "2"}
+ ,{"name": "k_ELobbyDistanceFilterWorldwide","value": "3"}
+]}
+, {"enumname": "EChatMemberStateChange","values": [
+ {"name": "k_EChatMemberStateChangeEntered","value": "1"}
+ ,{"name": "k_EChatMemberStateChangeLeft","value": "2"}
+ ,{"name": "k_EChatMemberStateChangeDisconnected","value": "4"}
+ ,{"name": "k_EChatMemberStateChangeKicked","value": "8"}
+ ,{"name": "k_EChatMemberStateChangeBanned","value": "16"}
+]}
+, {"enumname": "ERemoteStoragePlatform","values": [
+ {"name": "k_ERemoteStoragePlatformNone","value": "0"}
+ ,{"name": "k_ERemoteStoragePlatformWindows","value": "1"}
+ ,{"name": "k_ERemoteStoragePlatformOSX","value": "2"}
+ ,{"name": "k_ERemoteStoragePlatformPS3","value": "4"}
+ ,{"name": "k_ERemoteStoragePlatformLinux","value": "8"}
+ ,{"name": "k_ERemoteStoragePlatformReserved2","value": "16"}
+ ,{"name": "k_ERemoteStoragePlatformAll","value": "-1"}
+]}
+, {"enumname": "ERemoteStoragePublishedFileVisibility","values": [
+ {"name": "k_ERemoteStoragePublishedFileVisibilityPublic","value": "0"}
+ ,{"name": "k_ERemoteStoragePublishedFileVisibilityFriendsOnly","value": "1"}
+ ,{"name": "k_ERemoteStoragePublishedFileVisibilityPrivate","value": "2"}
+]}
+, {"enumname": "EWorkshopFileType","values": [
+ {"name": "k_EWorkshopFileTypeFirst","value": "0"}
+ ,{"name": "k_EWorkshopFileTypeCommunity","value": "0"}
+ ,{"name": "k_EWorkshopFileTypeMicrotransaction","value": "1"}
+ ,{"name": "k_EWorkshopFileTypeCollection","value": "2"}
+ ,{"name": "k_EWorkshopFileTypeArt","value": "3"}
+ ,{"name": "k_EWorkshopFileTypeVideo","value": "4"}
+ ,{"name": "k_EWorkshopFileTypeScreenshot","value": "5"}
+ ,{"name": "k_EWorkshopFileTypeGame","value": "6"}
+ ,{"name": "k_EWorkshopFileTypeSoftware","value": "7"}
+ ,{"name": "k_EWorkshopFileTypeConcept","value": "8"}
+ ,{"name": "k_EWorkshopFileTypeWebGuide","value": "9"}
+ ,{"name": "k_EWorkshopFileTypeIntegratedGuide","value": "10"}
+ ,{"name": "k_EWorkshopFileTypeMerch","value": "11"}
+ ,{"name": "k_EWorkshopFileTypeControllerBinding","value": "12"}
+ ,{"name": "k_EWorkshopFileTypeSteamworksAccessInvite","value": "13"}
+ ,{"name": "k_EWorkshopFileTypeSteamVideo","value": "14"}
+ ,{"name": "k_EWorkshopFileTypeGameManagedItem","value": "15"}
+ ,{"name": "k_EWorkshopFileTypeMax","value": "16"}
+]}
+, {"enumname": "EWorkshopVote","values": [
+ {"name": "k_EWorkshopVoteUnvoted","value": "0"}
+ ,{"name": "k_EWorkshopVoteFor","value": "1"}
+ ,{"name": "k_EWorkshopVoteAgainst","value": "2"}
+ ,{"name": "k_EWorkshopVoteLater","value": "3"}
+]}
+, {"enumname": "EWorkshopFileAction","values": [
+ {"name": "k_EWorkshopFileActionPlayed","value": "0"}
+ ,{"name": "k_EWorkshopFileActionCompleted","value": "1"}
+]}
+, {"enumname": "EWorkshopEnumerationType","values": [
+ {"name": "k_EWorkshopEnumerationTypeRankedByVote","value": "0"}
+ ,{"name": "k_EWorkshopEnumerationTypeRecent","value": "1"}
+ ,{"name": "k_EWorkshopEnumerationTypeTrending","value": "2"}
+ ,{"name": "k_EWorkshopEnumerationTypeFavoritesOfFriends","value": "3"}
+ ,{"name": "k_EWorkshopEnumerationTypeVotedByFriends","value": "4"}
+ ,{"name": "k_EWorkshopEnumerationTypeContentByFriends","value": "5"}
+ ,{"name": "k_EWorkshopEnumerationTypeRecentFromFollowedUsers","value": "6"}
+]}
+, {"enumname": "EWorkshopVideoProvider","values": [
+ {"name": "k_EWorkshopVideoProviderNone","value": "0"}
+ ,{"name": "k_EWorkshopVideoProviderYoutube","value": "1"}
+]}
+, {"enumname": "EUGCReadAction","values": [
+ {"name": "k_EUGCRead_ContinueReadingUntilFinished","value": "0"}
+ ,{"name": "k_EUGCRead_ContinueReading","value": "1"}
+ ,{"name": "k_EUGCRead_Close","value": "2"}
+]}
+, {"enumname": "ELeaderboardDataRequest","values": [
+ {"name": "k_ELeaderboardDataRequestGlobal","value": "0"}
+ ,{"name": "k_ELeaderboardDataRequestGlobalAroundUser","value": "1"}
+ ,{"name": "k_ELeaderboardDataRequestFriends","value": "2"}
+ ,{"name": "k_ELeaderboardDataRequestUsers","value": "3"}
+]}
+, {"enumname": "ELeaderboardSortMethod","values": [
+ {"name": "k_ELeaderboardSortMethodNone","value": "0"}
+ ,{"name": "k_ELeaderboardSortMethodAscending","value": "1"}
+ ,{"name": "k_ELeaderboardSortMethodDescending","value": "2"}
+]}
+, {"enumname": "ELeaderboardDisplayType","values": [
+ {"name": "k_ELeaderboardDisplayTypeNone","value": "0"}
+ ,{"name": "k_ELeaderboardDisplayTypeNumeric","value": "1"}
+ ,{"name": "k_ELeaderboardDisplayTypeTimeSeconds","value": "2"}
+ ,{"name": "k_ELeaderboardDisplayTypeTimeMilliSeconds","value": "3"}
+]}
+, {"enumname": "ELeaderboardUploadScoreMethod","values": [
+ {"name": "k_ELeaderboardUploadScoreMethodNone","value": "0"}
+ ,{"name": "k_ELeaderboardUploadScoreMethodKeepBest","value": "1"}
+ ,{"name": "k_ELeaderboardUploadScoreMethodForceUpdate","value": "2"}
+]}
+, {"enumname": "ERegisterActivationCodeResult","values": [
+ {"name": "k_ERegisterActivationCodeResultOK","value": "0"}
+ ,{"name": "k_ERegisterActivationCodeResultFail","value": "1"}
+ ,{"name": "k_ERegisterActivationCodeResultAlreadyRegistered","value": "2"}
+ ,{"name": "k_ERegisterActivationCodeResultTimeout","value": "3"}
+ ,{"name": "k_ERegisterActivationCodeAlreadyOwned","value": "4"}
+]}
+, {"enumname": "EP2PSessionError","values": [
+ {"name": "k_EP2PSessionErrorNone","value": "0"}
+ ,{"name": "k_EP2PSessionErrorNotRunningApp","value": "1"}
+ ,{"name": "k_EP2PSessionErrorNoRightsToApp","value": "2"}
+ ,{"name": "k_EP2PSessionErrorDestinationNotLoggedIn","value": "3"}
+ ,{"name": "k_EP2PSessionErrorTimeout","value": "4"}
+ ,{"name": "k_EP2PSessionErrorMax","value": "5"}
+]}
+, {"enumname": "EP2PSend","values": [
+ {"name": "k_EP2PSendUnreliable","value": "0"}
+ ,{"name": "k_EP2PSendUnreliableNoDelay","value": "1"}
+ ,{"name": "k_EP2PSendReliable","value": "2"}
+ ,{"name": "k_EP2PSendReliableWithBuffering","value": "3"}
+]}
+, {"enumname": "ESNetSocketState","values": [
+ {"name": "k_ESNetSocketStateInvalid","value": "0"}
+ ,{"name": "k_ESNetSocketStateConnected","value": "1"}
+ ,{"name": "k_ESNetSocketStateInitiated","value": "10"}
+ ,{"name": "k_ESNetSocketStateLocalCandidatesFound","value": "11"}
+ ,{"name": "k_ESNetSocketStateReceivedRemoteCandidates","value": "12"}
+ ,{"name": "k_ESNetSocketStateChallengeHandshake","value": "15"}
+ ,{"name": "k_ESNetSocketStateDisconnecting","value": "21"}
+ ,{"name": "k_ESNetSocketStateLocalDisconnect","value": "22"}
+ ,{"name": "k_ESNetSocketStateTimeoutDuringConnect","value": "23"}
+ ,{"name": "k_ESNetSocketStateRemoteEndDisconnected","value": "24"}
+ ,{"name": "k_ESNetSocketStateConnectionBroken","value": "25"}
+]}
+, {"enumname": "ESNetSocketConnectionType","values": [
+ {"name": "k_ESNetSocketConnectionTypeNotConnected","value": "0"}
+ ,{"name": "k_ESNetSocketConnectionTypeUDP","value": "1"}
+ ,{"name": "k_ESNetSocketConnectionTypeUDPRelay","value": "2"}
+]}
+, {"enumname": "EVRScreenshotType","values": [
+ {"name": "k_EVRScreenshotType_None","value": "0"}
+ ,{"name": "k_EVRScreenshotType_Mono","value": "1"}
+ ,{"name": "k_EVRScreenshotType_Stereo","value": "2"}
+ ,{"name": "k_EVRScreenshotType_MonoCubemap","value": "3"}
+ ,{"name": "k_EVRScreenshotType_MonoPanorama","value": "4"}
+ ,{"name": "k_EVRScreenshotType_StereoPanorama","value": "5"}
+]}
+, {"enumname": "AudioPlayback_Status","values": [
+ {"name": "AudioPlayback_Undefined","value": "0"}
+ ,{"name": "AudioPlayback_Playing","value": "1"}
+ ,{"name": "AudioPlayback_Paused","value": "2"}
+ ,{"name": "AudioPlayback_Idle","value": "3"}
+]}
+, {"enumname": "EHTTPMethod","values": [
+ {"name": "k_EHTTPMethodInvalid","value": "0"}
+ ,{"name": "k_EHTTPMethodGET","value": "1"}
+ ,{"name": "k_EHTTPMethodHEAD","value": "2"}
+ ,{"name": "k_EHTTPMethodPOST","value": "3"}
+ ,{"name": "k_EHTTPMethodPUT","value": "4"}
+ ,{"name": "k_EHTTPMethodDELETE","value": "5"}
+ ,{"name": "k_EHTTPMethodOPTIONS","value": "6"}
+ ,{"name": "k_EHTTPMethodPATCH","value": "7"}
+]}
+, {"enumname": "EHTTPStatusCode","values": [
+ {"name": "k_EHTTPStatusCodeInvalid","value": "0"}
+ ,{"name": "k_EHTTPStatusCode100Continue","value": "100"}
+ ,{"name": "k_EHTTPStatusCode101SwitchingProtocols","value": "101"}
+ ,{"name": "k_EHTTPStatusCode200OK","value": "200"}
+ ,{"name": "k_EHTTPStatusCode201Created","value": "201"}
+ ,{"name": "k_EHTTPStatusCode202Accepted","value": "202"}
+ ,{"name": "k_EHTTPStatusCode203NonAuthoritative","value": "203"}
+ ,{"name": "k_EHTTPStatusCode204NoContent","value": "204"}
+ ,{"name": "k_EHTTPStatusCode205ResetContent","value": "205"}
+ ,{"name": "k_EHTTPStatusCode206PartialContent","value": "206"}
+ ,{"name": "k_EHTTPStatusCode300MultipleChoices","value": "300"}
+ ,{"name": "k_EHTTPStatusCode301MovedPermanently","value": "301"}
+ ,{"name": "k_EHTTPStatusCode302Found","value": "302"}
+ ,{"name": "k_EHTTPStatusCode303SeeOther","value": "303"}
+ ,{"name": "k_EHTTPStatusCode304NotModified","value": "304"}
+ ,{"name": "k_EHTTPStatusCode305UseProxy","value": "305"}
+ ,{"name": "k_EHTTPStatusCode307TemporaryRedirect","value": "307"}
+ ,{"name": "k_EHTTPStatusCode400BadRequest","value": "400"}
+ ,{"name": "k_EHTTPStatusCode401Unauthorized","value": "401"}
+ ,{"name": "k_EHTTPStatusCode402PaymentRequired","value": "402"}
+ ,{"name": "k_EHTTPStatusCode403Forbidden","value": "403"}
+ ,{"name": "k_EHTTPStatusCode404NotFound","value": "404"}
+ ,{"name": "k_EHTTPStatusCode405MethodNotAllowed","value": "405"}
+ ,{"name": "k_EHTTPStatusCode406NotAcceptable","value": "406"}
+ ,{"name": "k_EHTTPStatusCode407ProxyAuthRequired","value": "407"}
+ ,{"name": "k_EHTTPStatusCode408RequestTimeout","value": "408"}
+ ,{"name": "k_EHTTPStatusCode409Conflict","value": "409"}
+ ,{"name": "k_EHTTPStatusCode410Gone","value": "410"}
+ ,{"name": "k_EHTTPStatusCode411LengthRequired","value": "411"}
+ ,{"name": "k_EHTTPStatusCode412PreconditionFailed","value": "412"}
+ ,{"name": "k_EHTTPStatusCode413RequestEntityTooLarge","value": "413"}
+ ,{"name": "k_EHTTPStatusCode414RequestURITooLong","value": "414"}
+ ,{"name": "k_EHTTPStatusCode415UnsupportedMediaType","value": "415"}
+ ,{"name": "k_EHTTPStatusCode416RequestedRangeNotSatisfiable","value": "416"}
+ ,{"name": "k_EHTTPStatusCode417ExpectationFailed","value": "417"}
+ ,{"name": "k_EHTTPStatusCode4xxUnknown","value": "418"}
+ ,{"name": "k_EHTTPStatusCode429TooManyRequests","value": "429"}
+ ,{"name": "k_EHTTPStatusCode500InternalServerError","value": "500"}
+ ,{"name": "k_EHTTPStatusCode501NotImplemented","value": "501"}
+ ,{"name": "k_EHTTPStatusCode502BadGateway","value": "502"}
+ ,{"name": "k_EHTTPStatusCode503ServiceUnavailable","value": "503"}
+ ,{"name": "k_EHTTPStatusCode504GatewayTimeout","value": "504"}
+ ,{"name": "k_EHTTPStatusCode505HTTPVersionNotSupported","value": "505"}
+ ,{"name": "k_EHTTPStatusCode5xxUnknown","value": "599"}
+]}
+, {"enumname": "ESteamControllerPad","values": [
+ {"name": "k_ESteamControllerPad_Left","value": "0"}
+ ,{"name": "k_ESteamControllerPad_Right","value": "1"}
+]}
+, {"enumname": "EControllerSource","values": [
+ {"name": "k_EControllerSource_None","value": "0"}
+ ,{"name": "k_EControllerSource_LeftTrackpad","value": "1"}
+ ,{"name": "k_EControllerSource_RightTrackpad","value": "2"}
+ ,{"name": "k_EControllerSource_Joystick","value": "3"}
+ ,{"name": "k_EControllerSource_ABXY","value": "4"}
+ ,{"name": "k_EControllerSource_Switch","value": "5"}
+ ,{"name": "k_EControllerSource_LeftTrigger","value": "6"}
+ ,{"name": "k_EControllerSource_RightTrigger","value": "7"}
+ ,{"name": "k_EControllerSource_Gyro","value": "8"}
+ ,{"name": "k_EControllerSource_CenterTrackpad","value": "9"}
+ ,{"name": "k_EControllerSource_RightJoystick","value": "10"}
+ ,{"name": "k_EControllerSource_DPad","value": "11"}
+ ,{"name": "k_EControllerSource_Count","value": "12"}
+]}
+, {"enumname": "EControllerSourceMode","values": [
+ {"name": "k_EControllerSourceMode_None","value": "0"}
+ ,{"name": "k_EControllerSourceMode_Dpad","value": "1"}
+ ,{"name": "k_EControllerSourceMode_Buttons","value": "2"}
+ ,{"name": "k_EControllerSourceMode_FourButtons","value": "3"}
+ ,{"name": "k_EControllerSourceMode_AbsoluteMouse","value": "4"}
+ ,{"name": "k_EControllerSourceMode_RelativeMouse","value": "5"}
+ ,{"name": "k_EControllerSourceMode_JoystickMove","value": "6"}
+ ,{"name": "k_EControllerSourceMode_JoystickMouse","value": "7"}
+ ,{"name": "k_EControllerSourceMode_JoystickCamera","value": "8"}
+ ,{"name": "k_EControllerSourceMode_ScrollWheel","value": "9"}
+ ,{"name": "k_EControllerSourceMode_Trigger","value": "10"}
+ ,{"name": "k_EControllerSourceMode_TouchMenu","value": "11"}
+ ,{"name": "k_EControllerSourceMode_MouseJoystick","value": "12"}
+ ,{"name": "k_EControllerSourceMode_MouseRegion","value": "13"}
+ ,{"name": "k_EControllerSourceMode_RadialMenu","value": "14"}
+ ,{"name": "k_EControllerSourceMode_SingleButton","value": "15"}
+ ,{"name": "k_EControllerSourceMode_Switches","value": "16"}
+]}
+, {"enumname": "EControllerActionOrigin","values": [
+ {"name": "k_EControllerActionOrigin_None","value": "0"}
+ ,{"name": "k_EControllerActionOrigin_A","value": "1"}
+ ,{"name": "k_EControllerActionOrigin_B","value": "2"}
+ ,{"name": "k_EControllerActionOrigin_X","value": "3"}
+ ,{"name": "k_EControllerActionOrigin_Y","value": "4"}
+ ,{"name": "k_EControllerActionOrigin_LeftBumper","value": "5"}
+ ,{"name": "k_EControllerActionOrigin_RightBumper","value": "6"}
+ ,{"name": "k_EControllerActionOrigin_LeftGrip","value": "7"}
+ ,{"name": "k_EControllerActionOrigin_RightGrip","value": "8"}
+ ,{"name": "k_EControllerActionOrigin_Start","value": "9"}
+ ,{"name": "k_EControllerActionOrigin_Back","value": "10"}
+ ,{"name": "k_EControllerActionOrigin_LeftPad_Touch","value": "11"}
+ ,{"name": "k_EControllerActionOrigin_LeftPad_Swipe","value": "12"}
+ ,{"name": "k_EControllerActionOrigin_LeftPad_Click","value": "13"}
+ ,{"name": "k_EControllerActionOrigin_LeftPad_DPadNorth","value": "14"}
+ ,{"name": "k_EControllerActionOrigin_LeftPad_DPadSouth","value": "15"}
+ ,{"name": "k_EControllerActionOrigin_LeftPad_DPadWest","value": "16"}
+ ,{"name": "k_EControllerActionOrigin_LeftPad_DPadEast","value": "17"}
+ ,{"name": "k_EControllerActionOrigin_RightPad_Touch","value": "18"}
+ ,{"name": "k_EControllerActionOrigin_RightPad_Swipe","value": "19"}
+ ,{"name": "k_EControllerActionOrigin_RightPad_Click","value": "20"}
+ ,{"name": "k_EControllerActionOrigin_RightPad_DPadNorth","value": "21"}
+ ,{"name": "k_EControllerActionOrigin_RightPad_DPadSouth","value": "22"}
+ ,{"name": "k_EControllerActionOrigin_RightPad_DPadWest","value": "23"}
+ ,{"name": "k_EControllerActionOrigin_RightPad_DPadEast","value": "24"}
+ ,{"name": "k_EControllerActionOrigin_LeftTrigger_Pull","value": "25"}
+ ,{"name": "k_EControllerActionOrigin_LeftTrigger_Click","value": "26"}
+ ,{"name": "k_EControllerActionOrigin_RightTrigger_Pull","value": "27"}
+ ,{"name": "k_EControllerActionOrigin_RightTrigger_Click","value": "28"}
+ ,{"name": "k_EControllerActionOrigin_LeftStick_Move","value": "29"}
+ ,{"name": "k_EControllerActionOrigin_LeftStick_Click","value": "30"}
+ ,{"name": "k_EControllerActionOrigin_LeftStick_DPadNorth","value": "31"}
+ ,{"name": "k_EControllerActionOrigin_LeftStick_DPadSouth","value": "32"}
+ ,{"name": "k_EControllerActionOrigin_LeftStick_DPadWest","value": "33"}
+ ,{"name": "k_EControllerActionOrigin_LeftStick_DPadEast","value": "34"}
+ ,{"name": "k_EControllerActionOrigin_Gyro_Move","value": "35"}
+ ,{"name": "k_EControllerActionOrigin_Gyro_Pitch","value": "36"}
+ ,{"name": "k_EControllerActionOrigin_Gyro_Yaw","value": "37"}
+ ,{"name": "k_EControllerActionOrigin_Gyro_Roll","value": "38"}
+ ,{"name": "k_EControllerActionOrigin_PS4_X","value": "39"}
+ ,{"name": "k_EControllerActionOrigin_PS4_Circle","value": "40"}
+ ,{"name": "k_EControllerActionOrigin_PS4_Triangle","value": "41"}
+ ,{"name": "k_EControllerActionOrigin_PS4_Square","value": "42"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftBumper","value": "43"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightBumper","value": "44"}
+ ,{"name": "k_EControllerActionOrigin_PS4_Options","value": "45"}
+ ,{"name": "k_EControllerActionOrigin_PS4_Share","value": "46"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftPad_Touch","value": "47"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftPad_Swipe","value": "48"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftPad_Click","value": "49"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftPad_DPadNorth","value": "50"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftPad_DPadSouth","value": "51"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftPad_DPadWest","value": "52"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftPad_DPadEast","value": "53"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightPad_Touch","value": "54"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightPad_Swipe","value": "55"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightPad_Click","value": "56"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightPad_DPadNorth","value": "57"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightPad_DPadSouth","value": "58"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightPad_DPadWest","value": "59"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightPad_DPadEast","value": "60"}
+ ,{"name": "k_EControllerActionOrigin_PS4_CenterPad_Touch","value": "61"}
+ ,{"name": "k_EControllerActionOrigin_PS4_CenterPad_Swipe","value": "62"}
+ ,{"name": "k_EControllerActionOrigin_PS4_CenterPad_Click","value": "63"}
+ ,{"name": "k_EControllerActionOrigin_PS4_CenterPad_DPadNorth","value": "64"}
+ ,{"name": "k_EControllerActionOrigin_PS4_CenterPad_DPadSouth","value": "65"}
+ ,{"name": "k_EControllerActionOrigin_PS4_CenterPad_DPadWest","value": "66"}
+ ,{"name": "k_EControllerActionOrigin_PS4_CenterPad_DPadEast","value": "67"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftTrigger_Pull","value": "68"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftTrigger_Click","value": "69"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightTrigger_Pull","value": "70"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightTrigger_Click","value": "71"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftStick_Move","value": "72"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftStick_Click","value": "73"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftStick_DPadNorth","value": "74"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftStick_DPadSouth","value": "75"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftStick_DPadWest","value": "76"}
+ ,{"name": "k_EControllerActionOrigin_PS4_LeftStick_DPadEast","value": "77"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightStick_Move","value": "78"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightStick_Click","value": "79"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightStick_DPadNorth","value": "80"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightStick_DPadSouth","value": "81"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightStick_DPadWest","value": "82"}
+ ,{"name": "k_EControllerActionOrigin_PS4_RightStick_DPadEast","value": "83"}
+ ,{"name": "k_EControllerActionOrigin_PS4_DPad_North","value": "84"}
+ ,{"name": "k_EControllerActionOrigin_PS4_DPad_South","value": "85"}
+ ,{"name": "k_EControllerActionOrigin_PS4_DPad_West","value": "86"}
+ ,{"name": "k_EControllerActionOrigin_PS4_DPad_East","value": "87"}
+ ,{"name": "k_EControllerActionOrigin_PS4_Gyro_Move","value": "88"}
+ ,{"name": "k_EControllerActionOrigin_PS4_Gyro_Pitch","value": "89"}
+ ,{"name": "k_EControllerActionOrigin_PS4_Gyro_Yaw","value": "90"}
+ ,{"name": "k_EControllerActionOrigin_PS4_Gyro_Roll","value": "91"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_A","value": "92"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_B","value": "93"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_X","value": "94"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_Y","value": "95"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_LeftBumper","value": "96"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_RightBumper","value": "97"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_Menu","value": "98"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_View","value": "99"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_LeftTrigger_Pull","value": "100"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_LeftTrigger_Click","value": "101"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_RightTrigger_Pull","value": "102"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_RightTrigger_Click","value": "103"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_LeftStick_Move","value": "104"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_LeftStick_Click","value": "105"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_LeftStick_DPadNorth","value": "106"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_LeftStick_DPadSouth","value": "107"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_LeftStick_DPadWest","value": "108"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_LeftStick_DPadEast","value": "109"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_RightStick_Move","value": "110"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_RightStick_Click","value": "111"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_RightStick_DPadNorth","value": "112"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_RightStick_DPadSouth","value": "113"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_RightStick_DPadWest","value": "114"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_RightStick_DPadEast","value": "115"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_DPad_North","value": "116"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_DPad_South","value": "117"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_DPad_West","value": "118"}
+ ,{"name": "k_EControllerActionOrigin_XBoxOne_DPad_East","value": "119"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_A","value": "120"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_B","value": "121"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_X","value": "122"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_Y","value": "123"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_LeftBumper","value": "124"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_RightBumper","value": "125"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_Start","value": "126"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_Back","value": "127"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_LeftTrigger_Pull","value": "128"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_LeftTrigger_Click","value": "129"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_RightTrigger_Pull","value": "130"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_RightTrigger_Click","value": "131"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_LeftStick_Move","value": "132"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_LeftStick_Click","value": "133"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_LeftStick_DPadNorth","value": "134"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_LeftStick_DPadSouth","value": "135"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_LeftStick_DPadWest","value": "136"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_LeftStick_DPadEast","value": "137"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_RightStick_Move","value": "138"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_RightStick_Click","value": "139"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_RightStick_DPadNorth","value": "140"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_RightStick_DPadSouth","value": "141"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_RightStick_DPadWest","value": "142"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_RightStick_DPadEast","value": "143"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_DPad_North","value": "144"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_DPad_South","value": "145"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_DPad_West","value": "146"}
+ ,{"name": "k_EControllerActionOrigin_XBox360_DPad_East","value": "147"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_A","value": "148"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_B","value": "149"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_X","value": "150"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_Y","value": "151"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftBumper","value": "152"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightBumper","value": "153"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftGrip","value": "154"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightGrip","value": "155"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftGrip_Upper","value": "156"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightGrip_Upper","value": "157"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftBumper_Pressure","value": "158"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightBumper_Pressure","value": "159"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftGrip_Pressure","value": "160"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightGrip_Pressure","value": "161"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftGrip_Upper_Pressure","value": "162"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightGrip_Upper_Pressure","value": "163"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_Start","value": "164"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_Back","value": "165"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftPad_Touch","value": "166"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftPad_Swipe","value": "167"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftPad_Click","value": "168"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftPad_Pressure","value": "169"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftPad_DPadNorth","value": "170"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftPad_DPadSouth","value": "171"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftPad_DPadWest","value": "172"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftPad_DPadEast","value": "173"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightPad_Touch","value": "174"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightPad_Swipe","value": "175"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightPad_Click","value": "176"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightPad_Pressure","value": "177"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightPad_DPadNorth","value": "178"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightPad_DPadSouth","value": "179"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightPad_DPadWest","value": "180"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightPad_DPadEast","value": "181"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftTrigger_Pull","value": "182"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftTrigger_Click","value": "183"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightTrigger_Pull","value": "184"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_RightTrigger_Click","value": "185"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftStick_Move","value": "186"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftStick_Click","value": "187"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftStick_DPadNorth","value": "188"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftStick_DPadSouth","value": "189"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftStick_DPadWest","value": "190"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_LeftStick_DPadEast","value": "191"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_Gyro_Move","value": "192"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_Gyro_Pitch","value": "193"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_Gyro_Yaw","value": "194"}
+ ,{"name": "k_EControllerActionOrigin_SteamV2_Gyro_Roll","value": "195"}
+ ,{"name": "k_EControllerActionOrigin_Count","value": "196"}
+]}
+, {"enumname": "ESteamControllerLEDFlag","values": [
+ {"name": "k_ESteamControllerLEDFlag_SetColor","value": "0"}
+ ,{"name": "k_ESteamControllerLEDFlag_RestoreUserDefault","value": "1"}
+]}
+, {"enumname": "EUGCMatchingUGCType","values": [
+ {"name": "k_EUGCMatchingUGCType_Items","value": "0"}
+ ,{"name": "k_EUGCMatchingUGCType_Items_Mtx","value": "1"}
+ ,{"name": "k_EUGCMatchingUGCType_Items_ReadyToUse","value": "2"}
+ ,{"name": "k_EUGCMatchingUGCType_Collections","value": "3"}
+ ,{"name": "k_EUGCMatchingUGCType_Artwork","value": "4"}
+ ,{"name": "k_EUGCMatchingUGCType_Videos","value": "5"}
+ ,{"name": "k_EUGCMatchingUGCType_Screenshots","value": "6"}
+ ,{"name": "k_EUGCMatchingUGCType_AllGuides","value": "7"}
+ ,{"name": "k_EUGCMatchingUGCType_WebGuides","value": "8"}
+ ,{"name": "k_EUGCMatchingUGCType_IntegratedGuides","value": "9"}
+ ,{"name": "k_EUGCMatchingUGCType_UsableInGame","value": "10"}
+ ,{"name": "k_EUGCMatchingUGCType_ControllerBindings","value": "11"}
+ ,{"name": "k_EUGCMatchingUGCType_GameManagedItems","value": "12"}
+ ,{"name": "k_EUGCMatchingUGCType_All","value": "-1"}
+]}
+, {"enumname": "EUserUGCList","values": [
+ {"name": "k_EUserUGCList_Published","value": "0"}
+ ,{"name": "k_EUserUGCList_VotedOn","value": "1"}
+ ,{"name": "k_EUserUGCList_VotedUp","value": "2"}
+ ,{"name": "k_EUserUGCList_VotedDown","value": "3"}
+ ,{"name": "k_EUserUGCList_WillVoteLater","value": "4"}
+ ,{"name": "k_EUserUGCList_Favorited","value": "5"}
+ ,{"name": "k_EUserUGCList_Subscribed","value": "6"}
+ ,{"name": "k_EUserUGCList_UsedOrPlayed","value": "7"}
+ ,{"name": "k_EUserUGCList_Followed","value": "8"}
+]}
+, {"enumname": "EUserUGCListSortOrder","values": [
+ {"name": "k_EUserUGCListSortOrder_CreationOrderDesc","value": "0"}
+ ,{"name": "k_EUserUGCListSortOrder_CreationOrderAsc","value": "1"}
+ ,{"name": "k_EUserUGCListSortOrder_TitleAsc","value": "2"}
+ ,{"name": "k_EUserUGCListSortOrder_LastUpdatedDesc","value": "3"}
+ ,{"name": "k_EUserUGCListSortOrder_SubscriptionDateDesc","value": "4"}
+ ,{"name": "k_EUserUGCListSortOrder_VoteScoreDesc","value": "5"}
+ ,{"name": "k_EUserUGCListSortOrder_ForModeration","value": "6"}
+]}
+, {"enumname": "EUGCQuery","values": [
+ {"name": "k_EUGCQuery_RankedByVote","value": "0"}
+ ,{"name": "k_EUGCQuery_RankedByPublicationDate","value": "1"}
+ ,{"name": "k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate","value": "2"}
+ ,{"name": "k_EUGCQuery_RankedByTrend","value": "3"}
+ ,{"name": "k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate","value": "4"}
+ ,{"name": "k_EUGCQuery_CreatedByFriendsRankedByPublicationDate","value": "5"}
+ ,{"name": "k_EUGCQuery_RankedByNumTimesReported","value": "6"}
+ ,{"name": "k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate","value": "7"}
+ ,{"name": "k_EUGCQuery_NotYetRated","value": "8"}
+ ,{"name": "k_EUGCQuery_RankedByTotalVotesAsc","value": "9"}
+ ,{"name": "k_EUGCQuery_RankedByVotesUp","value": "10"}
+ ,{"name": "k_EUGCQuery_RankedByTextSearch","value": "11"}
+ ,{"name": "k_EUGCQuery_RankedByTotalUniqueSubscriptions","value": "12"}
+ ,{"name": "k_EUGCQuery_RankedByPlaytimeTrend","value": "13"}
+ ,{"name": "k_EUGCQuery_RankedByTotalPlaytime","value": "14"}
+ ,{"name": "k_EUGCQuery_RankedByAveragePlaytimeTrend","value": "15"}
+ ,{"name": "k_EUGCQuery_RankedByLifetimeAveragePlaytime","value": "16"}
+ ,{"name": "k_EUGCQuery_RankedByPlaytimeSessionsTrend","value": "17"}
+ ,{"name": "k_EUGCQuery_RankedByLifetimePlaytimeSessions","value": "18"}
+]}
+, {"enumname": "EItemUpdateStatus","values": [
+ {"name": "k_EItemUpdateStatusInvalid","value": "0"}
+ ,{"name": "k_EItemUpdateStatusPreparingConfig","value": "1"}
+ ,{"name": "k_EItemUpdateStatusPreparingContent","value": "2"}
+ ,{"name": "k_EItemUpdateStatusUploadingContent","value": "3"}
+ ,{"name": "k_EItemUpdateStatusUploadingPreviewFile","value": "4"}
+ ,{"name": "k_EItemUpdateStatusCommittingChanges","value": "5"}
+]}
+, {"enumname": "EItemState","values": [
+ {"name": "k_EItemStateNone","value": "0"}
+ ,{"name": "k_EItemStateSubscribed","value": "1"}
+ ,{"name": "k_EItemStateLegacyItem","value": "2"}
+ ,{"name": "k_EItemStateInstalled","value": "4"}
+ ,{"name": "k_EItemStateNeedsUpdate","value": "8"}
+ ,{"name": "k_EItemStateDownloading","value": "16"}
+ ,{"name": "k_EItemStateDownloadPending","value": "32"}
+]}
+, {"enumname": "EItemStatistic","values": [
+ {"name": "k_EItemStatistic_NumSubscriptions","value": "0"}
+ ,{"name": "k_EItemStatistic_NumFavorites","value": "1"}
+ ,{"name": "k_EItemStatistic_NumFollowers","value": "2"}
+ ,{"name": "k_EItemStatistic_NumUniqueSubscriptions","value": "3"}
+ ,{"name": "k_EItemStatistic_NumUniqueFavorites","value": "4"}
+ ,{"name": "k_EItemStatistic_NumUniqueFollowers","value": "5"}
+ ,{"name": "k_EItemStatistic_NumUniqueWebsiteViews","value": "6"}
+ ,{"name": "k_EItemStatistic_ReportScore","value": "7"}
+ ,{"name": "k_EItemStatistic_NumSecondsPlayed","value": "8"}
+ ,{"name": "k_EItemStatistic_NumPlaytimeSessions","value": "9"}
+ ,{"name": "k_EItemStatistic_NumComments","value": "10"}
+ ,{"name": "k_EItemStatistic_NumSecondsPlayedDuringTimePeriod","value": "11"}
+ ,{"name": "k_EItemStatistic_NumPlaytimeSessionsDuringTimePeriod","value": "12"}
+]}
+, {"enumname": "EItemPreviewType","values": [
+ {"name": "k_EItemPreviewType_Image","value": "0"}
+ ,{"name": "k_EItemPreviewType_YouTubeVideo","value": "1"}
+ ,{"name": "k_EItemPreviewType_Sketchfab","value": "2"}
+ ,{"name": "k_EItemPreviewType_EnvironmentMap_HorizontalCross","value": "3"}
+ ,{"name": "k_EItemPreviewType_EnvironmentMap_LatLong","value": "4"}
+ ,{"name": "k_EItemPreviewType_ReservedMax","value": "255"}
+]}
+, {"enumname": "ISteamHTMLSurface::EHTMLMouseButton","values": [
+ {"name": "eHTMLMouseButton_Left","value": "0"}
+ ,{"name": "eHTMLMouseButton_Right","value": "1"}
+ ,{"name": "eHTMLMouseButton_Middle","value": "2"}
+]}
+, {"enumname": "ISteamHTMLSurface::EMouseCursor","values": [
+ {"name": "dc_user","value": "0"}
+ ,{"name": "dc_none","value": "1"}
+ ,{"name": "dc_arrow","value": "2"}
+ ,{"name": "dc_ibeam","value": "3"}
+ ,{"name": "dc_hourglass","value": "4"}
+ ,{"name": "dc_waitarrow","value": "5"}
+ ,{"name": "dc_crosshair","value": "6"}
+ ,{"name": "dc_up","value": "7"}
+ ,{"name": "dc_sizenw","value": "8"}
+ ,{"name": "dc_sizese","value": "9"}
+ ,{"name": "dc_sizene","value": "10"}
+ ,{"name": "dc_sizesw","value": "11"}
+ ,{"name": "dc_sizew","value": "12"}
+ ,{"name": "dc_sizee","value": "13"}
+ ,{"name": "dc_sizen","value": "14"}
+ ,{"name": "dc_sizes","value": "15"}
+ ,{"name": "dc_sizewe","value": "16"}
+ ,{"name": "dc_sizens","value": "17"}
+ ,{"name": "dc_sizeall","value": "18"}
+ ,{"name": "dc_no","value": "19"}
+ ,{"name": "dc_hand","value": "20"}
+ ,{"name": "dc_blank","value": "21"}
+ ,{"name": "dc_middle_pan","value": "22"}
+ ,{"name": "dc_north_pan","value": "23"}
+ ,{"name": "dc_north_east_pan","value": "24"}
+ ,{"name": "dc_east_pan","value": "25"}
+ ,{"name": "dc_south_east_pan","value": "26"}
+ ,{"name": "dc_south_pan","value": "27"}
+ ,{"name": "dc_south_west_pan","value": "28"}
+ ,{"name": "dc_west_pan","value": "29"}
+ ,{"name": "dc_north_west_pan","value": "30"}
+ ,{"name": "dc_alias","value": "31"}
+ ,{"name": "dc_cell","value": "32"}
+ ,{"name": "dc_colresize","value": "33"}
+ ,{"name": "dc_copycur","value": "34"}
+ ,{"name": "dc_verticaltext","value": "35"}
+ ,{"name": "dc_rowresize","value": "36"}
+ ,{"name": "dc_zoomin","value": "37"}
+ ,{"name": "dc_zoomout","value": "38"}
+ ,{"name": "dc_help","value": "39"}
+ ,{"name": "dc_custom","value": "40"}
+ ,{"name": "dc_last","value": "41"}
+]}
+, {"enumname": "ISteamHTMLSurface::EHTMLKeyModifiers","values": [
+ {"name": "k_eHTMLKeyModifier_None","value": "0"}
+ ,{"name": "k_eHTMLKeyModifier_AltDown","value": "1"}
+ ,{"name": "k_eHTMLKeyModifier_CtrlDown","value": "2"}
+ ,{"name": "k_eHTMLKeyModifier_ShiftDown","value": "4"}
+]}
+, {"enumname": "ESteamItemFlags","values": [
+ {"name": "k_ESteamItemNoTrade","value": "1"}
+ ,{"name": "k_ESteamItemRemoved","value": "256"}
+ ,{"name": "k_ESteamItemConsumed","value": "512"}
+]}
+],
+"consts":[{
+ "constname": "k_iSteamUserCallbacks","consttype": "int", "constval": "100"}
+,{
+ "constname": "k_iSteamGameServerCallbacks","consttype": "int", "constval": "200"}
+,{
+ "constname": "k_iSteamFriendsCallbacks","consttype": "int", "constval": "300"}
+,{
+ "constname": "k_iSteamBillingCallbacks","consttype": "int", "constval": "400"}
+,{
+ "constname": "k_iSteamMatchmakingCallbacks","consttype": "int", "constval": "500"}
+,{
+ "constname": "k_iSteamContentServerCallbacks","consttype": "int", "constval": "600"}
+,{
+ "constname": "k_iSteamUtilsCallbacks","consttype": "int", "constval": "700"}
+,{
+ "constname": "k_iClientFriendsCallbacks","consttype": "int", "constval": "800"}
+,{
+ "constname": "k_iClientUserCallbacks","consttype": "int", "constval": "900"}
+,{
+ "constname": "k_iSteamAppsCallbacks","consttype": "int", "constval": "1000"}
+,{
+ "constname": "k_iSteamUserStatsCallbacks","consttype": "int", "constval": "1100"}
+,{
+ "constname": "k_iSteamNetworkingCallbacks","consttype": "int", "constval": "1200"}
+,{
+ "constname": "k_iClientRemoteStorageCallbacks","consttype": "int", "constval": "1300"}
+,{
+ "constname": "k_iClientDepotBuilderCallbacks","consttype": "int", "constval": "1400"}
+,{
+ "constname": "k_iSteamGameServerItemsCallbacks","consttype": "int", "constval": "1500"}
+,{
+ "constname": "k_iClientUtilsCallbacks","consttype": "int", "constval": "1600"}
+,{
+ "constname": "k_iSteamGameCoordinatorCallbacks","consttype": "int", "constval": "1700"}
+,{
+ "constname": "k_iSteamGameServerStatsCallbacks","consttype": "int", "constval": "1800"}
+,{
+ "constname": "k_iSteam2AsyncCallbacks","consttype": "int", "constval": "1900"}
+,{
+ "constname": "k_iSteamGameStatsCallbacks","consttype": "int", "constval": "2000"}
+,{
+ "constname": "k_iClientHTTPCallbacks","consttype": "int", "constval": "2100"}
+,{
+ "constname": "k_iClientScreenshotsCallbacks","consttype": "int", "constval": "2200"}
+,{
+ "constname": "k_iSteamScreenshotsCallbacks","consttype": "int", "constval": "2300"}
+,{
+ "constname": "k_iClientAudioCallbacks","consttype": "int", "constval": "2400"}
+,{
+ "constname": "k_iClientUnifiedMessagesCallbacks","consttype": "int", "constval": "2500"}
+,{
+ "constname": "k_iSteamStreamLauncherCallbacks","consttype": "int", "constval": "2600"}
+,{
+ "constname": "k_iClientControllerCallbacks","consttype": "int", "constval": "2700"}
+,{
+ "constname": "k_iSteamControllerCallbacks","consttype": "int", "constval": "2800"}
+,{
+ "constname": "k_iClientParentalSettingsCallbacks","consttype": "int", "constval": "2900"}
+,{
+ "constname": "k_iClientDeviceAuthCallbacks","consttype": "int", "constval": "3000"}
+,{
+ "constname": "k_iClientNetworkDeviceManagerCallbacks","consttype": "int", "constval": "3100"}
+,{
+ "constname": "k_iClientMusicCallbacks","consttype": "int", "constval": "3200"}
+,{
+ "constname": "k_iClientRemoteClientManagerCallbacks","consttype": "int", "constval": "3300"}
+,{
+ "constname": "k_iClientUGCCallbacks","consttype": "int", "constval": "3400"}
+,{
+ "constname": "k_iSteamStreamClientCallbacks","consttype": "int", "constval": "3500"}
+,{
+ "constname": "k_IClientProductBuilderCallbacks","consttype": "int", "constval": "3600"}
+,{
+ "constname": "k_iClientShortcutsCallbacks","consttype": "int", "constval": "3700"}
+,{
+ "constname": "k_iClientRemoteControlManagerCallbacks","consttype": "int", "constval": "3800"}
+,{
+ "constname": "k_iSteamAppListCallbacks","consttype": "int", "constval": "3900"}
+,{
+ "constname": "k_iSteamMusicCallbacks","consttype": "int", "constval": "4000"}
+,{
+ "constname": "k_iSteamMusicRemoteCallbacks","consttype": "int", "constval": "4100"}
+,{
+ "constname": "k_iClientVRCallbacks","consttype": "int", "constval": "4200"}
+,{
+ "constname": "k_iClientGameNotificationCallbacks","consttype": "int", "constval": "4300"}
+,{
+ "constname": "k_iSteamGameNotificationCallbacks","consttype": "int", "constval": "4400"}
+,{
+ "constname": "k_iSteamHTMLSurfaceCallbacks","consttype": "int", "constval": "4500"}
+,{
+ "constname": "k_iClientVideoCallbacks","consttype": "int", "constval": "4600"}
+,{
+ "constname": "k_iClientInventoryCallbacks","consttype": "int", "constval": "4700"}
+,{
+ "constname": "k_iClientBluetoothManagerCallbacks","consttype": "int", "constval": "4800"}
+,{
+ "constname": "k_cchPersonaNameMax","consttype": "int", "constval": "128"}
+,{
+ "constname": "k_cwchPersonaNameMax","consttype": "int", "constval": "32"}
+,{
+ "constname": "k_cchMaxRichPresenceKeys","consttype": "int", "constval": "20"}
+,{
+ "constname": "k_cchMaxRichPresenceKeyLength","consttype": "int", "constval": "64"}
+,{
+ "constname": "k_cchMaxRichPresenceValueLength","consttype": "int", "constval": "256"}
+,{
+ "constname": "k_cchStatNameMax","consttype": "int", "constval": "128"}
+,{
+ "constname": "k_cchLeaderboardNameMax","consttype": "int", "constval": "128"}
+,{
+ "constname": "k_cLeaderboardDetailsMax","consttype": "int", "constval": "64"}
+,{
+ "constname": "k_InvalidUnifiedMessageHandle","consttype": "const ClientUnifiedMessageHandle", "constval": "0"}
+,{
+ "constname": "k_SteamItemInstanceIDInvalid","consttype": "const SteamItemInstanceID_t", "constval": "18446744073709551615"}
+,{
+ "constname": "k_SteamInventoryResultInvalid","consttype": "const SteamInventoryResult_t", "constval": "-1"}
+],
+"structs":[{"struct": "CSteamID","fields": [
+{ "fieldname": "m_steamid", "fieldtype": "union SteamID_t"}]}
+,{"struct": "CSteamID::SteamID_t","fields": [
+{ "fieldname": "m_comp", "fieldtype": "struct SteamIDComponent_t"},
+{ "fieldname": "m_unAll64Bits", "fieldtype": "uint64"}]}
+,{"struct": "CSteamID::SteamID_t::SteamIDComponent_t","fields": [
+{ "fieldname": "m_unAccountID", "fieldtype": "uint32"},
+{ "fieldname": "m_unAccountInstance", "fieldtype": "unsigned int"},
+{ "fieldname": "m_EAccountType", "fieldtype": "unsigned int"},
+{ "fieldname": "m_EUniverse", "fieldtype": "enum EUniverse"}]}
+,{"struct": "CGameID::GameID_t","fields": [
+{ "fieldname": "m_nAppID", "fieldtype": "unsigned int"},
+{ "fieldname": "m_nType", "fieldtype": "unsigned int"},
+{ "fieldname": "m_nModID", "fieldtype": "unsigned int"}]}
+,{"struct": "CGameID::(anonymous)","fields": [
+{ "fieldname": "m_ulGameID", "fieldtype": "uint64"},
+{ "fieldname": "m_gameID", "fieldtype": "struct CGameID::GameID_t"}]}
+,{"struct": "ValvePackingSentinel_t","fields": [
+{ "fieldname": "m_u32", "fieldtype": "uint32"},
+{ "fieldname": "m_u64", "fieldtype": "uint64"},
+{ "fieldname": "m_u16", "fieldtype": "uint16"},
+{ "fieldname": "m_d", "fieldtype": "double"}]}
+,{"struct": "CallbackMsg_t","fields": [
+{ "fieldname": "m_hSteamUser", "fieldtype": "HSteamUser"},
+{ "fieldname": "m_iCallback", "fieldtype": "int"},
+{ "fieldname": "m_pubParam", "fieldtype": "uint8 *"},
+{ "fieldname": "m_cubParam", "fieldtype": "int"}]}
+,{"struct": "SteamServerConnectFailure_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_bStillRetrying", "fieldtype": "_Bool"}]}
+,{"struct": "SteamServersDisconnected_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "ClientGameServerDeny_t","fields": [
+{ "fieldname": "m_uAppID", "fieldtype": "uint32"},
+{ "fieldname": "m_unGameServerIP", "fieldtype": "uint32"},
+{ "fieldname": "m_usGameServerPort", "fieldtype": "uint16"},
+{ "fieldname": "m_bSecure", "fieldtype": "uint16"},
+{ "fieldname": "m_uReason", "fieldtype": "uint32"}]}
+,{"struct": "ValidateAuthTicketResponse_t","fields": [
+{ "fieldname": "m_SteamID", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_eAuthSessionResponse", "fieldtype": "enum EAuthSessionResponse"},
+{ "fieldname": "m_OwnerSteamID", "fieldtype": "class CSteamID"}]}
+,{"struct": "MicroTxnAuthorizationResponse_t","fields": [
+{ "fieldname": "m_unAppID", "fieldtype": "uint32"},
+{ "fieldname": "m_ulOrderID", "fieldtype": "uint64"},
+{ "fieldname": "m_bAuthorized", "fieldtype": "uint8"}]}
+,{"struct": "EncryptedAppTicketResponse_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "GetAuthSessionTicketResponse_t","fields": [
+{ "fieldname": "m_hAuthTicket", "fieldtype": "HAuthTicket"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "GameWebCallback_t","fields": [
+{ "fieldname": "m_szURL", "fieldtype": "char [256]"}]}
+,{"struct": "StoreAuthURLResponse_t","fields": [
+{ "fieldname": "m_szURL", "fieldtype": "char [512]"}]}
+,{"struct": "FriendGameInfo_t","fields": [
+{ "fieldname": "m_gameID", "fieldtype": "class CGameID"},
+{ "fieldname": "m_unGameIP", "fieldtype": "uint32"},
+{ "fieldname": "m_usGamePort", "fieldtype": "uint16"},
+{ "fieldname": "m_usQueryPort", "fieldtype": "uint16"},
+{ "fieldname": "m_steamIDLobby", "fieldtype": "class CSteamID"}]}
+,{"struct": "FriendSessionStateInfo_t","fields": [
+{ "fieldname": "m_uiOnlineSessionInstances", "fieldtype": "uint32"},
+{ "fieldname": "m_uiPublishedToFriendsSessionInstance", "fieldtype": "uint8"}]}
+,{"struct": "PersonaStateChange_t","fields": [
+{ "fieldname": "m_ulSteamID", "fieldtype": "uint64"},
+{ "fieldname": "m_nChangeFlags", "fieldtype": "int"}]}
+,{"struct": "GameOverlayActivated_t","fields": [
+{ "fieldname": "m_bActive", "fieldtype": "uint8"}]}
+,{"struct": "GameServerChangeRequested_t","fields": [
+{ "fieldname": "m_rgchServer", "fieldtype": "char [64]"},
+{ "fieldname": "m_rgchPassword", "fieldtype": "char [64]"}]}
+,{"struct": "GameLobbyJoinRequested_t","fields": [
+{ "fieldname": "m_steamIDLobby", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_steamIDFriend", "fieldtype": "class CSteamID"}]}
+,{"struct": "AvatarImageLoaded_t","fields": [
+{ "fieldname": "m_steamID", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_iImage", "fieldtype": "int"},
+{ "fieldname": "m_iWide", "fieldtype": "int"},
+{ "fieldname": "m_iTall", "fieldtype": "int"}]}
+,{"struct": "ClanOfficerListResponse_t","fields": [
+{ "fieldname": "m_steamIDClan", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_cOfficers", "fieldtype": "int"},
+{ "fieldname": "m_bSuccess", "fieldtype": "uint8"}]}
+,{"struct": "FriendRichPresenceUpdate_t","fields": [
+{ "fieldname": "m_steamIDFriend", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"}]}
+,{"struct": "GameRichPresenceJoinRequested_t","fields": [
+{ "fieldname": "m_steamIDFriend", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_rgchConnect", "fieldtype": "char [256]"}]}
+,{"struct": "GameConnectedClanChatMsg_t","fields": [
+{ "fieldname": "m_steamIDClanChat", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_iMessageID", "fieldtype": "int"}]}
+,{"struct": "GameConnectedChatJoin_t","fields": [
+{ "fieldname": "m_steamIDClanChat", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"}]}
+,{"struct": "GameConnectedChatLeave_t","fields": [
+{ "fieldname": "m_steamIDClanChat", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_bKicked", "fieldtype": "_Bool"},
+{ "fieldname": "m_bDropped", "fieldtype": "_Bool"}]}
+,{"struct": "DownloadClanActivityCountsResult_t","fields": [
+{ "fieldname": "m_bSuccess", "fieldtype": "_Bool"}]}
+,{"struct": "JoinClanChatRoomCompletionResult_t","fields": [
+{ "fieldname": "m_steamIDClanChat", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_eChatRoomEnterResponse", "fieldtype": "enum EChatRoomEnterResponse"}]}
+,{"struct": "GameConnectedFriendChatMsg_t","fields": [
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_iMessageID", "fieldtype": "int"}]}
+,{"struct": "FriendsGetFollowerCount_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_steamID", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_nCount", "fieldtype": "int"}]}
+,{"struct": "FriendsIsFollowing_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_steamID", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_bIsFollowing", "fieldtype": "_Bool"}]}
+,{"struct": "FriendsEnumerateFollowingList_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_rgSteamID", "fieldtype": "class CSteamID [50]"},
+{ "fieldname": "m_nResultsReturned", "fieldtype": "int32"},
+{ "fieldname": "m_nTotalResultCount", "fieldtype": "int32"}]}
+,{"struct": "SetPersonaNameResponse_t","fields": [
+{ "fieldname": "m_bSuccess", "fieldtype": "_Bool"},
+{ "fieldname": "m_bLocalSuccess", "fieldtype": "_Bool"},
+{ "fieldname": "m_result", "fieldtype": "enum EResult"}]}
+,{"struct": "LowBatteryPower_t","fields": [
+{ "fieldname": "m_nMinutesBatteryLeft", "fieldtype": "uint8"}]}
+,{"struct": "SteamAPICallCompleted_t","fields": [
+{ "fieldname": "m_hAsyncCall", "fieldtype": "SteamAPICall_t"},
+{ "fieldname": "m_iCallback", "fieldtype": "int"},
+{ "fieldname": "m_cubParam", "fieldtype": "uint32"}]}
+,{"struct": "CheckFileSignature_t","fields": [
+{ "fieldname": "m_eCheckFileSignature", "fieldtype": "enum ECheckFileSignature"}]}
+,{"struct": "GamepadTextInputDismissed_t","fields": [
+{ "fieldname": "m_bSubmitted", "fieldtype": "_Bool"},
+{ "fieldname": "m_unSubmittedText", "fieldtype": "uint32"}]}
+,{"struct": "MatchMakingKeyValuePair_t","fields": [
+{ "fieldname": "m_szKey", "fieldtype": "char [256]"},
+{ "fieldname": "m_szValue", "fieldtype": "char [256]"}]}
+,{"struct": "servernetadr_t","fields": [
+{ "fieldname": "m_usConnectionPort", "fieldtype": "uint16"},
+{ "fieldname": "m_usQueryPort", "fieldtype": "uint16"},
+{ "fieldname": "m_unIP", "fieldtype": "uint32"}]}
+,{"struct": "gameserveritem_t","fields": [
+{ "fieldname": "m_NetAdr", "fieldtype": "class servernetadr_t"},
+{ "fieldname": "m_nPing", "fieldtype": "int"},
+{ "fieldname": "m_bHadSuccessfulResponse", "fieldtype": "_Bool"},
+{ "fieldname": "m_bDoNotRefresh", "fieldtype": "_Bool"},
+{ "fieldname": "m_szGameDir", "fieldtype": "char [32]"},
+{ "fieldname": "m_szMap", "fieldtype": "char [32]"},
+{ "fieldname": "m_szGameDescription", "fieldtype": "char [64]"},
+{ "fieldname": "m_nAppID", "fieldtype": "uint32"},
+{ "fieldname": "m_nPlayers", "fieldtype": "int"},
+{ "fieldname": "m_nMaxPlayers", "fieldtype": "int"},
+{ "fieldname": "m_nBotPlayers", "fieldtype": "int"},
+{ "fieldname": "m_bPassword", "fieldtype": "_Bool"},
+{ "fieldname": "m_bSecure", "fieldtype": "_Bool"},
+{ "fieldname": "m_ulTimeLastPlayed", "fieldtype": "uint32"},
+{ "fieldname": "m_nServerVersion", "fieldtype": "int"},
+{ "fieldname": "m_szServerName", "fieldtype": "char [64]"},
+{ "fieldname": "m_szGameTags", "fieldtype": "char [128]"},
+{ "fieldname": "m_steamID", "fieldtype": "class CSteamID"}]}
+,{"struct": "FavoritesListChanged_t","fields": [
+{ "fieldname": "m_nIP", "fieldtype": "uint32"},
+{ "fieldname": "m_nQueryPort", "fieldtype": "uint32"},
+{ "fieldname": "m_nConnPort", "fieldtype": "uint32"},
+{ "fieldname": "m_nAppID", "fieldtype": "uint32"},
+{ "fieldname": "m_nFlags", "fieldtype": "uint32"},
+{ "fieldname": "m_bAdd", "fieldtype": "_Bool"},
+{ "fieldname": "m_unAccountId", "fieldtype": "AccountID_t"}]}
+,{"struct": "LobbyInvite_t","fields": [
+{ "fieldname": "m_ulSteamIDUser", "fieldtype": "uint64"},
+{ "fieldname": "m_ulSteamIDLobby", "fieldtype": "uint64"},
+{ "fieldname": "m_ulGameID", "fieldtype": "uint64"}]}
+,{"struct": "LobbyEnter_t","fields": [
+{ "fieldname": "m_ulSteamIDLobby", "fieldtype": "uint64"},
+{ "fieldname": "m_rgfChatPermissions", "fieldtype": "uint32"},
+{ "fieldname": "m_bLocked", "fieldtype": "_Bool"},
+{ "fieldname": "m_EChatRoomEnterResponse", "fieldtype": "uint32"}]}
+,{"struct": "LobbyDataUpdate_t","fields": [
+{ "fieldname": "m_ulSteamIDLobby", "fieldtype": "uint64"},
+{ "fieldname": "m_ulSteamIDMember", "fieldtype": "uint64"},
+{ "fieldname": "m_bSuccess", "fieldtype": "uint8"}]}
+,{"struct": "LobbyChatUpdate_t","fields": [
+{ "fieldname": "m_ulSteamIDLobby", "fieldtype": "uint64"},
+{ "fieldname": "m_ulSteamIDUserChanged", "fieldtype": "uint64"},
+{ "fieldname": "m_ulSteamIDMakingChange", "fieldtype": "uint64"},
+{ "fieldname": "m_rgfChatMemberStateChange", "fieldtype": "uint32"}]}
+,{"struct": "LobbyChatMsg_t","fields": [
+{ "fieldname": "m_ulSteamIDLobby", "fieldtype": "uint64"},
+{ "fieldname": "m_ulSteamIDUser", "fieldtype": "uint64"},
+{ "fieldname": "m_eChatEntryType", "fieldtype": "uint8"},
+{ "fieldname": "m_iChatID", "fieldtype": "uint32"}]}
+,{"struct": "LobbyGameCreated_t","fields": [
+{ "fieldname": "m_ulSteamIDLobby", "fieldtype": "uint64"},
+{ "fieldname": "m_ulSteamIDGameServer", "fieldtype": "uint64"},
+{ "fieldname": "m_unIP", "fieldtype": "uint32"},
+{ "fieldname": "m_usPort", "fieldtype": "uint16"}]}
+,{"struct": "LobbyMatchList_t","fields": [
+{ "fieldname": "m_nLobbiesMatching", "fieldtype": "uint32"}]}
+,{"struct": "LobbyKicked_t","fields": [
+{ "fieldname": "m_ulSteamIDLobby", "fieldtype": "uint64"},
+{ "fieldname": "m_ulSteamIDAdmin", "fieldtype": "uint64"},
+{ "fieldname": "m_bKickedDueToDisconnect", "fieldtype": "uint8"}]}
+,{"struct": "LobbyCreated_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_ulSteamIDLobby", "fieldtype": "uint64"}]}
+,{"struct": "PSNGameBootInviteResult_t","fields": [
+{ "fieldname": "m_bGameBootInviteExists", "fieldtype": "_Bool"},
+{ "fieldname": "m_steamIDLobby", "fieldtype": "class CSteamID"}]}
+,{"struct": "FavoritesListAccountsUpdated_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "SteamParamStringArray_t","fields": [
+{ "fieldname": "m_ppStrings", "fieldtype": "const char **"},
+{ "fieldname": "m_nNumStrings", "fieldtype": "int32"}]}
+,{"struct": "RemoteStorageAppSyncedClient_t","fields": [
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_unNumDownloads", "fieldtype": "int"}]}
+,{"struct": "RemoteStorageAppSyncedServer_t","fields": [
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_unNumUploads", "fieldtype": "int"}]}
+,{"struct": "RemoteStorageAppSyncProgress_t","fields": [
+{ "fieldname": "m_rgchCurrentFile", "fieldtype": "char [260]"},
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_uBytesTransferredThisChunk", "fieldtype": "uint32"},
+{ "fieldname": "m_dAppPercentComplete", "fieldtype": "double"},
+{ "fieldname": "m_bUploading", "fieldtype": "_Bool"}]}
+,{"struct": "RemoteStorageAppSyncStatusCheck_t","fields": [
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "RemoteStorageFileShareResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_hFile", "fieldtype": "UGCHandle_t"},
+{ "fieldname": "m_rgchFilename", "fieldtype": "char [260]"}]}
+,{"struct": "RemoteStoragePublishFileResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_bUserNeedsToAcceptWorkshopLegalAgreement", "fieldtype": "_Bool"}]}
+,{"struct": "RemoteStorageDeletePublishedFileResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"}]}
+,{"struct": "RemoteStorageEnumerateUserPublishedFilesResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nResultsReturned", "fieldtype": "int32"},
+{ "fieldname": "m_nTotalResultCount", "fieldtype": "int32"},
+{ "fieldname": "m_rgPublishedFileId", "fieldtype": "PublishedFileId_t [50]"}]}
+,{"struct": "RemoteStorageSubscribePublishedFileResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"}]}
+,{"struct": "RemoteStorageEnumerateUserSubscribedFilesResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nResultsReturned", "fieldtype": "int32"},
+{ "fieldname": "m_nTotalResultCount", "fieldtype": "int32"},
+{ "fieldname": "m_rgPublishedFileId", "fieldtype": "PublishedFileId_t [50]"},
+{ "fieldname": "m_rgRTimeSubscribed", "fieldtype": "uint32 [50]"}]}
+,{"struct": "RemoteStorageUnsubscribePublishedFileResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"}]}
+,{"struct": "RemoteStorageUpdatePublishedFileResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_bUserNeedsToAcceptWorkshopLegalAgreement", "fieldtype": "_Bool"}]}
+,{"struct": "RemoteStorageDownloadUGCResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_hFile", "fieldtype": "UGCHandle_t"},
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_nSizeInBytes", "fieldtype": "int32"},
+{ "fieldname": "m_pchFileName", "fieldtype": "char [260]"},
+{ "fieldname": "m_ulSteamIDOwner", "fieldtype": "uint64"}]}
+,{"struct": "RemoteStorageGetPublishedFileDetailsResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_nCreatorAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_nConsumerAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_rgchTitle", "fieldtype": "char [129]"},
+{ "fieldname": "m_rgchDescription", "fieldtype": "char [8000]"},
+{ "fieldname": "m_hFile", "fieldtype": "UGCHandle_t"},
+{ "fieldname": "m_hPreviewFile", "fieldtype": "UGCHandle_t"},
+{ "fieldname": "m_ulSteamIDOwner", "fieldtype": "uint64"},
+{ "fieldname": "m_rtimeCreated", "fieldtype": "uint32"},
+{ "fieldname": "m_rtimeUpdated", "fieldtype": "uint32"},
+{ "fieldname": "m_eVisibility", "fieldtype": "enum ERemoteStoragePublishedFileVisibility"},
+{ "fieldname": "m_bBanned", "fieldtype": "_Bool"},
+{ "fieldname": "m_rgchTags", "fieldtype": "char [1025]"},
+{ "fieldname": "m_bTagsTruncated", "fieldtype": "_Bool"},
+{ "fieldname": "m_pchFileName", "fieldtype": "char [260]"},
+{ "fieldname": "m_nFileSize", "fieldtype": "int32"},
+{ "fieldname": "m_nPreviewFileSize", "fieldtype": "int32"},
+{ "fieldname": "m_rgchURL", "fieldtype": "char [256]"},
+{ "fieldname": "m_eFileType", "fieldtype": "enum EWorkshopFileType"},
+{ "fieldname": "m_bAcceptedForUse", "fieldtype": "_Bool"}]}
+,{"struct": "RemoteStorageEnumerateWorkshopFilesResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nResultsReturned", "fieldtype": "int32"},
+{ "fieldname": "m_nTotalResultCount", "fieldtype": "int32"},
+{ "fieldname": "m_rgPublishedFileId", "fieldtype": "PublishedFileId_t [50]"},
+{ "fieldname": "m_rgScore", "fieldtype": "float [50]"},
+{ "fieldname": "m_nAppId", "fieldtype": "AppId_t"},
+{ "fieldname": "m_unStartIndex", "fieldtype": "uint32"}]}
+,{"struct": "RemoteStorageGetPublishedItemVoteDetailsResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_unPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_nVotesFor", "fieldtype": "int32"},
+{ "fieldname": "m_nVotesAgainst", "fieldtype": "int32"},
+{ "fieldname": "m_nReports", "fieldtype": "int32"},
+{ "fieldname": "m_fScore", "fieldtype": "float"}]}
+,{"struct": "RemoteStoragePublishedFileSubscribed_t","fields": [
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"}]}
+,{"struct": "RemoteStoragePublishedFileUnsubscribed_t","fields": [
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"}]}
+,{"struct": "RemoteStoragePublishedFileDeleted_t","fields": [
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"}]}
+,{"struct": "RemoteStorageUpdateUserPublishedItemVoteResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"}]}
+,{"struct": "RemoteStorageUserVoteDetails_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_eVote", "fieldtype": "enum EWorkshopVote"}]}
+,{"struct": "RemoteStorageEnumerateUserSharedWorkshopFilesResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nResultsReturned", "fieldtype": "int32"},
+{ "fieldname": "m_nTotalResultCount", "fieldtype": "int32"},
+{ "fieldname": "m_rgPublishedFileId", "fieldtype": "PublishedFileId_t [50]"}]}
+,{"struct": "RemoteStorageSetUserPublishedFileActionResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_eAction", "fieldtype": "enum EWorkshopFileAction"}]}
+,{"struct": "RemoteStorageEnumeratePublishedFilesByUserActionResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_eAction", "fieldtype": "enum EWorkshopFileAction"},
+{ "fieldname": "m_nResultsReturned", "fieldtype": "int32"},
+{ "fieldname": "m_nTotalResultCount", "fieldtype": "int32"},
+{ "fieldname": "m_rgPublishedFileId", "fieldtype": "PublishedFileId_t [50]"},
+{ "fieldname": "m_rgRTimeUpdated", "fieldtype": "uint32 [50]"}]}
+,{"struct": "RemoteStoragePublishFileProgress_t","fields": [
+{ "fieldname": "m_dPercentFile", "fieldtype": "double"},
+{ "fieldname": "m_bPreview", "fieldtype": "_Bool"}]}
+,{"struct": "RemoteStoragePublishedFileUpdated_t","fields": [
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_ulUnused", "fieldtype": "uint64"}]}
+,{"struct": "RemoteStorageFileWriteAsyncComplete_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "RemoteStorageFileReadAsyncComplete_t","fields": [
+{ "fieldname": "m_hFileReadAsync", "fieldtype": "SteamAPICall_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nOffset", "fieldtype": "uint32"},
+{ "fieldname": "m_cubRead", "fieldtype": "uint32"}]}
+,{"struct": "LeaderboardEntry_t","fields": [
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_nGlobalRank", "fieldtype": "int32"},
+{ "fieldname": "m_nScore", "fieldtype": "int32"},
+{ "fieldname": "m_cDetails", "fieldtype": "int32"},
+{ "fieldname": "m_hUGC", "fieldtype": "UGCHandle_t"}]}
+,{"struct": "UserStatsReceived_t","fields": [
+{ "fieldname": "m_nGameID", "fieldtype": "uint64"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"}]}
+,{"struct": "UserStatsStored_t","fields": [
+{ "fieldname": "m_nGameID", "fieldtype": "uint64"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "UserAchievementStored_t","fields": [
+{ "fieldname": "m_nGameID", "fieldtype": "uint64"},
+{ "fieldname": "m_bGroupAchievement", "fieldtype": "_Bool"},
+{ "fieldname": "m_rgchAchievementName", "fieldtype": "char [128]"},
+{ "fieldname": "m_nCurProgress", "fieldtype": "uint32"},
+{ "fieldname": "m_nMaxProgress", "fieldtype": "uint32"}]}
+,{"struct": "LeaderboardFindResult_t","fields": [
+{ "fieldname": "m_hSteamLeaderboard", "fieldtype": "SteamLeaderboard_t"},
+{ "fieldname": "m_bLeaderboardFound", "fieldtype": "uint8"}]}
+,{"struct": "LeaderboardScoresDownloaded_t","fields": [
+{ "fieldname": "m_hSteamLeaderboard", "fieldtype": "SteamLeaderboard_t"},
+{ "fieldname": "m_hSteamLeaderboardEntries", "fieldtype": "SteamLeaderboardEntries_t"},
+{ "fieldname": "m_cEntryCount", "fieldtype": "int"}]}
+,{"struct": "LeaderboardScoreUploaded_t","fields": [
+{ "fieldname": "m_bSuccess", "fieldtype": "uint8"},
+{ "fieldname": "m_hSteamLeaderboard", "fieldtype": "SteamLeaderboard_t"},
+{ "fieldname": "m_nScore", "fieldtype": "int32"},
+{ "fieldname": "m_bScoreChanged", "fieldtype": "uint8"},
+{ "fieldname": "m_nGlobalRankNew", "fieldtype": "int"},
+{ "fieldname": "m_nGlobalRankPrevious", "fieldtype": "int"}]}
+,{"struct": "NumberOfCurrentPlayers_t","fields": [
+{ "fieldname": "m_bSuccess", "fieldtype": "uint8"},
+{ "fieldname": "m_cPlayers", "fieldtype": "int32"}]}
+,{"struct": "UserStatsUnloaded_t","fields": [
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"}]}
+,{"struct": "UserAchievementIconFetched_t","fields": [
+{ "fieldname": "m_nGameID", "fieldtype": "class CGameID"},
+{ "fieldname": "m_rgchAchievementName", "fieldtype": "char [128]"},
+{ "fieldname": "m_bAchieved", "fieldtype": "_Bool"},
+{ "fieldname": "m_nIconHandle", "fieldtype": "int"}]}
+,{"struct": "GlobalAchievementPercentagesReady_t","fields": [
+{ "fieldname": "m_nGameID", "fieldtype": "uint64"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "LeaderboardUGCSet_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_hSteamLeaderboard", "fieldtype": "SteamLeaderboard_t"}]}
+,{"struct": "PS3TrophiesInstalled_t","fields": [
+{ "fieldname": "m_nGameID", "fieldtype": "uint64"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_ulRequiredDiskSpace", "fieldtype": "uint64"}]}
+,{"struct": "GlobalStatsReceived_t","fields": [
+{ "fieldname": "m_nGameID", "fieldtype": "uint64"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "DlcInstalled_t","fields": [
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"}]}
+,{"struct": "RegisterActivationCodeResponse_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum ERegisterActivationCodeResult"},
+{ "fieldname": "m_unPackageRegistered", "fieldtype": "uint32"}]}
+,{"struct": "AppProofOfPurchaseKeyResponse_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nAppID", "fieldtype": "uint32"},
+{ "fieldname": "m_cchKeyLength", "fieldtype": "uint32"},
+{ "fieldname": "m_rgchKey", "fieldtype": "char [240]"}]}
+,{"struct": "FileDetailsResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_ulFileSize", "fieldtype": "uint64"},
+{ "fieldname": "m_FileSHA", "fieldtype": "uint8 [20]"},
+{ "fieldname": "m_unFlags", "fieldtype": "uint32"}]}
+,{"struct": "P2PSessionState_t","fields": [
+{ "fieldname": "m_bConnectionActive", "fieldtype": "uint8"},
+{ "fieldname": "m_bConnecting", "fieldtype": "uint8"},
+{ "fieldname": "m_eP2PSessionError", "fieldtype": "uint8"},
+{ "fieldname": "m_bUsingRelay", "fieldtype": "uint8"},
+{ "fieldname": "m_nBytesQueuedForSend", "fieldtype": "int32"},
+{ "fieldname": "m_nPacketsQueuedForSend", "fieldtype": "int32"},
+{ "fieldname": "m_nRemoteIP", "fieldtype": "uint32"},
+{ "fieldname": "m_nRemotePort", "fieldtype": "uint16"}]}
+,{"struct": "P2PSessionRequest_t","fields": [
+{ "fieldname": "m_steamIDRemote", "fieldtype": "class CSteamID"}]}
+,{"struct": "P2PSessionConnectFail_t","fields": [
+{ "fieldname": "m_steamIDRemote", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_eP2PSessionError", "fieldtype": "uint8"}]}
+,{"struct": "SocketStatusCallback_t","fields": [
+{ "fieldname": "m_hSocket", "fieldtype": "SNetSocket_t"},
+{ "fieldname": "m_hListenSocket", "fieldtype": "SNetListenSocket_t"},
+{ "fieldname": "m_steamIDRemote", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_eSNetSocketState", "fieldtype": "int"}]}
+,{"struct": "ScreenshotReady_t","fields": [
+{ "fieldname": "m_hLocal", "fieldtype": "ScreenshotHandle"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "VolumeHasChanged_t","fields": [
+{ "fieldname": "m_flNewVolume", "fieldtype": "float"}]}
+,{"struct": "MusicPlayerWantsShuffled_t","fields": [
+{ "fieldname": "m_bShuffled", "fieldtype": "_Bool"}]}
+,{"struct": "MusicPlayerWantsLooped_t","fields": [
+{ "fieldname": "m_bLooped", "fieldtype": "_Bool"}]}
+,{"struct": "MusicPlayerWantsVolume_t","fields": [
+{ "fieldname": "m_flNewVolume", "fieldtype": "float"}]}
+,{"struct": "MusicPlayerSelectsQueueEntry_t","fields": [
+{ "fieldname": "nID", "fieldtype": "int"}]}
+,{"struct": "MusicPlayerSelectsPlaylistEntry_t","fields": [
+{ "fieldname": "nID", "fieldtype": "int"}]}
+,{"struct": "MusicPlayerWantsPlayingRepeatStatus_t","fields": [
+{ "fieldname": "m_nPlayingRepeatStatus", "fieldtype": "int"}]}
+,{"struct": "HTTPRequestCompleted_t","fields": [
+{ "fieldname": "m_hRequest", "fieldtype": "HTTPRequestHandle"},
+{ "fieldname": "m_ulContextValue", "fieldtype": "uint64"},
+{ "fieldname": "m_bRequestSuccessful", "fieldtype": "_Bool"},
+{ "fieldname": "m_eStatusCode", "fieldtype": "enum EHTTPStatusCode"},
+{ "fieldname": "m_unBodySize", "fieldtype": "uint32"}]}
+,{"struct": "HTTPRequestHeadersReceived_t","fields": [
+{ "fieldname": "m_hRequest", "fieldtype": "HTTPRequestHandle"},
+{ "fieldname": "m_ulContextValue", "fieldtype": "uint64"}]}
+,{"struct": "HTTPRequestDataReceived_t","fields": [
+{ "fieldname": "m_hRequest", "fieldtype": "HTTPRequestHandle"},
+{ "fieldname": "m_ulContextValue", "fieldtype": "uint64"},
+{ "fieldname": "m_cOffset", "fieldtype": "uint32"},
+{ "fieldname": "m_cBytesReceived", "fieldtype": "uint32"}]}
+,{"struct": "SteamUnifiedMessagesSendMethodResult_t","fields": [
+{ "fieldname": "m_hHandle", "fieldtype": "ClientUnifiedMessageHandle"},
+{ "fieldname": "m_unContext", "fieldtype": "uint64"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_unResponseSize", "fieldtype": "uint32"}]}
+,{"struct": "ControllerAnalogActionData_t","fields": [
+{ "fieldname": "eMode", "fieldtype": "enum EControllerSourceMode"},
+{ "fieldname": "x", "fieldtype": "float"},
+{ "fieldname": "y", "fieldtype": "float"},
+{ "fieldname": "bActive", "fieldtype": "_Bool"}]}
+,{"struct": "ControllerDigitalActionData_t","fields": [
+{ "fieldname": "bState", "fieldtype": "_Bool"},
+{ "fieldname": "bActive", "fieldtype": "_Bool"}]}
+,{"struct": "ControllerMotionData_t","fields": [
+{ "fieldname": "rotQuatX", "fieldtype": "float"},
+{ "fieldname": "rotQuatY", "fieldtype": "float"},
+{ "fieldname": "rotQuatZ", "fieldtype": "float"},
+{ "fieldname": "rotQuatW", "fieldtype": "float"},
+{ "fieldname": "posAccelX", "fieldtype": "float"},
+{ "fieldname": "posAccelY", "fieldtype": "float"},
+{ "fieldname": "posAccelZ", "fieldtype": "float"},
+{ "fieldname": "rotVelX", "fieldtype": "float"},
+{ "fieldname": "rotVelY", "fieldtype": "float"},
+{ "fieldname": "rotVelZ", "fieldtype": "float"}]}
+,{"struct": "SteamUGCDetails_t","fields": [
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_eFileType", "fieldtype": "enum EWorkshopFileType"},
+{ "fieldname": "m_nCreatorAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_nConsumerAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_rgchTitle", "fieldtype": "char [129]"},
+{ "fieldname": "m_rgchDescription", "fieldtype": "char [8000]"},
+{ "fieldname": "m_ulSteamIDOwner", "fieldtype": "uint64"},
+{ "fieldname": "m_rtimeCreated", "fieldtype": "uint32"},
+{ "fieldname": "m_rtimeUpdated", "fieldtype": "uint32"},
+{ "fieldname": "m_rtimeAddedToUserList", "fieldtype": "uint32"},
+{ "fieldname": "m_eVisibility", "fieldtype": "enum ERemoteStoragePublishedFileVisibility"},
+{ "fieldname": "m_bBanned", "fieldtype": "_Bool"},
+{ "fieldname": "m_bAcceptedForUse", "fieldtype": "_Bool"},
+{ "fieldname": "m_bTagsTruncated", "fieldtype": "_Bool"},
+{ "fieldname": "m_rgchTags", "fieldtype": "char [1025]"},
+{ "fieldname": "m_hFile", "fieldtype": "UGCHandle_t"},
+{ "fieldname": "m_hPreviewFile", "fieldtype": "UGCHandle_t"},
+{ "fieldname": "m_pchFileName", "fieldtype": "char [260]"},
+{ "fieldname": "m_nFileSize", "fieldtype": "int32"},
+{ "fieldname": "m_nPreviewFileSize", "fieldtype": "int32"},
+{ "fieldname": "m_rgchURL", "fieldtype": "char [256]"},
+{ "fieldname": "m_unVotesUp", "fieldtype": "uint32"},
+{ "fieldname": "m_unVotesDown", "fieldtype": "uint32"},
+{ "fieldname": "m_flScore", "fieldtype": "float"},
+{ "fieldname": "m_unNumChildren", "fieldtype": "uint32"}]}
+,{"struct": "SteamUGCQueryCompleted_t","fields": [
+{ "fieldname": "m_handle", "fieldtype": "UGCQueryHandle_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_unNumResultsReturned", "fieldtype": "uint32"},
+{ "fieldname": "m_unTotalMatchingResults", "fieldtype": "uint32"},
+{ "fieldname": "m_bCachedData", "fieldtype": "_Bool"}]}
+,{"struct": "SteamUGCRequestUGCDetailsResult_t","fields": [
+{ "fieldname": "m_details", "fieldtype": "struct SteamUGCDetails_t"},
+{ "fieldname": "m_bCachedData", "fieldtype": "_Bool"}]}
+,{"struct": "CreateItemResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_bUserNeedsToAcceptWorkshopLegalAgreement", "fieldtype": "_Bool"}]}
+,{"struct": "SubmitItemUpdateResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_bUserNeedsToAcceptWorkshopLegalAgreement", "fieldtype": "_Bool"}]}
+,{"struct": "DownloadItemResult_t","fields": [
+{ "fieldname": "m_unAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "UserFavoriteItemsListChanged_t","fields": [
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_bWasAddRequest", "fieldtype": "_Bool"}]}
+,{"struct": "SetUserItemVoteResult_t","fields": [
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_bVoteUp", "fieldtype": "_Bool"}]}
+,{"struct": "GetUserItemVoteResult_t","fields": [
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_bVotedUp", "fieldtype": "_Bool"},
+{ "fieldname": "m_bVotedDown", "fieldtype": "_Bool"},
+{ "fieldname": "m_bVoteSkipped", "fieldtype": "_Bool"}]}
+,{"struct": "StartPlaytimeTrackingResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "StopPlaytimeTrackingResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "AddUGCDependencyResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_nChildPublishedFileId", "fieldtype": "PublishedFileId_t"}]}
+,{"struct": "RemoveUGCDependencyResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nPublishedFileId", "fieldtype": "PublishedFileId_t"},
+{ "fieldname": "m_nChildPublishedFileId", "fieldtype": "PublishedFileId_t"}]}
+,{"struct": "SteamAppInstalled_t","fields": [
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"}]}
+,{"struct": "SteamAppUninstalled_t","fields": [
+{ "fieldname": "m_nAppID", "fieldtype": "AppId_t"}]}
+,{"struct": "HTML_BrowserReady_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"}]}
+,{"struct": "HTML_NeedsPaint_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pBGRA", "fieldtype": "const char *"},
+{ "fieldname": "unWide", "fieldtype": "uint32"},
+{ "fieldname": "unTall", "fieldtype": "uint32"},
+{ "fieldname": "unUpdateX", "fieldtype": "uint32"},
+{ "fieldname": "unUpdateY", "fieldtype": "uint32"},
+{ "fieldname": "unUpdateWide", "fieldtype": "uint32"},
+{ "fieldname": "unUpdateTall", "fieldtype": "uint32"},
+{ "fieldname": "unScrollX", "fieldtype": "uint32"},
+{ "fieldname": "unScrollY", "fieldtype": "uint32"},
+{ "fieldname": "flPageScale", "fieldtype": "float"},
+{ "fieldname": "unPageSerial", "fieldtype": "uint32"}]}
+,{"struct": "HTML_StartRequest_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchURL", "fieldtype": "const char *"},
+{ "fieldname": "pchTarget", "fieldtype": "const char *"},
+{ "fieldname": "pchPostData", "fieldtype": "const char *"},
+{ "fieldname": "bIsRedirect", "fieldtype": "_Bool"}]}
+,{"struct": "HTML_CloseBrowser_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"}]}
+,{"struct": "HTML_URLChanged_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchURL", "fieldtype": "const char *"},
+{ "fieldname": "pchPostData", "fieldtype": "const char *"},
+{ "fieldname": "bIsRedirect", "fieldtype": "_Bool"},
+{ "fieldname": "pchPageTitle", "fieldtype": "const char *"},
+{ "fieldname": "bNewNavigation", "fieldtype": "_Bool"}]}
+,{"struct": "HTML_FinishedRequest_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchURL", "fieldtype": "const char *"},
+{ "fieldname": "pchPageTitle", "fieldtype": "const char *"}]}
+,{"struct": "HTML_OpenLinkInNewTab_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchURL", "fieldtype": "const char *"}]}
+,{"struct": "HTML_ChangedTitle_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchTitle", "fieldtype": "const char *"}]}
+,{"struct": "HTML_SearchResults_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "unResults", "fieldtype": "uint32"},
+{ "fieldname": "unCurrentMatch", "fieldtype": "uint32"}]}
+,{"struct": "HTML_CanGoBackAndForward_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "bCanGoBack", "fieldtype": "_Bool"},
+{ "fieldname": "bCanGoForward", "fieldtype": "_Bool"}]}
+,{"struct": "HTML_HorizontalScroll_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "unScrollMax", "fieldtype": "uint32"},
+{ "fieldname": "unScrollCurrent", "fieldtype": "uint32"},
+{ "fieldname": "flPageScale", "fieldtype": "float"},
+{ "fieldname": "bVisible", "fieldtype": "_Bool"},
+{ "fieldname": "unPageSize", "fieldtype": "uint32"}]}
+,{"struct": "HTML_VerticalScroll_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "unScrollMax", "fieldtype": "uint32"},
+{ "fieldname": "unScrollCurrent", "fieldtype": "uint32"},
+{ "fieldname": "flPageScale", "fieldtype": "float"},
+{ "fieldname": "bVisible", "fieldtype": "_Bool"},
+{ "fieldname": "unPageSize", "fieldtype": "uint32"}]}
+,{"struct": "HTML_LinkAtPosition_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "x", "fieldtype": "uint32"},
+{ "fieldname": "y", "fieldtype": "uint32"},
+{ "fieldname": "pchURL", "fieldtype": "const char *"},
+{ "fieldname": "bInput", "fieldtype": "_Bool"},
+{ "fieldname": "bLiveLink", "fieldtype": "_Bool"}]}
+,{"struct": "HTML_JSAlert_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchMessage", "fieldtype": "const char *"}]}
+,{"struct": "HTML_JSConfirm_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchMessage", "fieldtype": "const char *"}]}
+,{"struct": "HTML_FileOpenDialog_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchTitle", "fieldtype": "const char *"},
+{ "fieldname": "pchInitialFile", "fieldtype": "const char *"}]}
+,{"struct": "HTML_NewWindow_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchURL", "fieldtype": "const char *"},
+{ "fieldname": "unX", "fieldtype": "uint32"},
+{ "fieldname": "unY", "fieldtype": "uint32"},
+{ "fieldname": "unWide", "fieldtype": "uint32"},
+{ "fieldname": "unTall", "fieldtype": "uint32"},
+{ "fieldname": "unNewWindow_BrowserHandle", "fieldtype": "HHTMLBrowser"}]}
+,{"struct": "HTML_SetCursor_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "eMouseCursor", "fieldtype": "uint32"}]}
+,{"struct": "HTML_StatusText_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchMsg", "fieldtype": "const char *"}]}
+,{"struct": "HTML_ShowToolTip_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchMsg", "fieldtype": "const char *"}]}
+,{"struct": "HTML_UpdateToolTip_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"},
+{ "fieldname": "pchMsg", "fieldtype": "const char *"}]}
+,{"struct": "HTML_HideToolTip_t","fields": [
+{ "fieldname": "unBrowserHandle", "fieldtype": "HHTMLBrowser"}]}
+,{"struct": "SteamItemDetails_t","fields": [
+{ "fieldname": "m_itemId", "fieldtype": "SteamItemInstanceID_t"},
+{ "fieldname": "m_iDefinition", "fieldtype": "SteamItemDef_t"},
+{ "fieldname": "m_unQuantity", "fieldtype": "uint16"},
+{ "fieldname": "m_unFlags", "fieldtype": "uint16"}]}
+,{"struct": "SteamInventoryResultReady_t","fields": [
+{ "fieldname": "m_handle", "fieldtype": "SteamInventoryResult_t"},
+{ "fieldname": "m_result", "fieldtype": "enum EResult"}]}
+,{"struct": "SteamInventoryFullUpdate_t","fields": [
+{ "fieldname": "m_handle", "fieldtype": "SteamInventoryResult_t"}]}
+,{"struct": "SteamInventoryEligiblePromoItemDefIDs_t","fields": [
+{ "fieldname": "m_result", "fieldtype": "enum EResult"},
+{ "fieldname": "m_steamID", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_numEligiblePromoItemDefs", "fieldtype": "int"},
+{ "fieldname": "m_bCachedData", "fieldtype": "_Bool"}]}
+,{"struct": "BroadcastUploadStop_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EBroadcastUploadResult"}]}
+,{"struct": "GetVideoURLResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_unVideoAppID", "fieldtype": "AppId_t"},
+{ "fieldname": "m_rgchURL", "fieldtype": "char [256]"}]}
+,{"struct": "GetOPFSettingsResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_unVideoAppID", "fieldtype": "AppId_t"}]}
+,{"struct": "CSteamAPIContext","fields": [
+{ "fieldname": "m_pSteamClient", "fieldtype": "class ISteamClient *"},
+{ "fieldname": "m_pSteamUser", "fieldtype": "class ISteamUser *"},
+{ "fieldname": "m_pSteamFriends", "fieldtype": "class ISteamFriends *"},
+{ "fieldname": "m_pSteamUtils", "fieldtype": "class ISteamUtils *"},
+{ "fieldname": "m_pSteamMatchmaking", "fieldtype": "class ISteamMatchmaking *"},
+{ "fieldname": "m_pSteamUserStats", "fieldtype": "class ISteamUserStats *"},
+{ "fieldname": "m_pSteamApps", "fieldtype": "class ISteamApps *"},
+{ "fieldname": "m_pSteamMatchmakingServers", "fieldtype": "class ISteamMatchmakingServers *"},
+{ "fieldname": "m_pSteamNetworking", "fieldtype": "class ISteamNetworking *"},
+{ "fieldname": "m_pSteamRemoteStorage", "fieldtype": "class ISteamRemoteStorage *"},
+{ "fieldname": "m_pSteamScreenshots", "fieldtype": "class ISteamScreenshots *"},
+{ "fieldname": "m_pSteamHTTP", "fieldtype": "class ISteamHTTP *"},
+{ "fieldname": "m_pSteamUnifiedMessages", "fieldtype": "class ISteamUnifiedMessages *"},
+{ "fieldname": "m_pController", "fieldtype": "class ISteamController *"},
+{ "fieldname": "m_pSteamUGC", "fieldtype": "class ISteamUGC *"},
+{ "fieldname": "m_pSteamAppList", "fieldtype": "class ISteamAppList *"},
+{ "fieldname": "m_pSteamMusic", "fieldtype": "class ISteamMusic *"},
+{ "fieldname": "m_pSteamMusicRemote", "fieldtype": "class ISteamMusicRemote *"},
+{ "fieldname": "m_pSteamHTMLSurface", "fieldtype": "class ISteamHTMLSurface *"},
+{ "fieldname": "m_pSteamInventory", "fieldtype": "class ISteamInventory *"},
+{ "fieldname": "m_pSteamVideo", "fieldtype": "class ISteamVideo *"}]}
+,{"struct": "CCallbackBase","fields": [
+{ "fieldname": "m_nCallbackFlags", "fieldtype": "uint8"},
+{ "fieldname": "m_iCallback", "fieldtype": "int"}]}
+,{"struct": "CCallResult","fields": [
+{ "fieldname": "m_hAPICall", "fieldtype": "SteamAPICall_t"},
+{ "fieldname": "m_pObj", "fieldtype": "T *"},
+{ "fieldname": "m_Func", "fieldtype": "func_t"}]}
+,{"struct": "CCallback","fields": [
+{ "fieldname": "m_pObj", "fieldtype": "T *"},
+{ "fieldname": "m_Func", "fieldtype": "func_t"}]}
+,{"struct": "GSClientApprove_t","fields": [
+{ "fieldname": "m_SteamID", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_OwnerSteamID", "fieldtype": "class CSteamID"}]}
+,{"struct": "GSClientDeny_t","fields": [
+{ "fieldname": "m_SteamID", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_eDenyReason", "fieldtype": "enum EDenyReason"},
+{ "fieldname": "m_rgchOptionalText", "fieldtype": "char [128]"}]}
+,{"struct": "GSClientKick_t","fields": [
+{ "fieldname": "m_SteamID", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_eDenyReason", "fieldtype": "enum EDenyReason"}]}
+,{"struct": "GSClientAchievementStatus_t","fields": [
+{ "fieldname": "m_SteamID", "fieldtype": "uint64"},
+{ "fieldname": "m_pchAchievement", "fieldtype": "char [128]"},
+{ "fieldname": "m_bUnlocked", "fieldtype": "_Bool"}]}
+,{"struct": "GSPolicyResponse_t","fields": [
+{ "fieldname": "m_bSecure", "fieldtype": "uint8"}]}
+,{"struct": "GSGameplayStats_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_nRank", "fieldtype": "int32"},
+{ "fieldname": "m_unTotalConnects", "fieldtype": "uint32"},
+{ "fieldname": "m_unTotalMinutesPlayed", "fieldtype": "uint32"}]}
+,{"struct": "GSClientGroupStatus_t","fields": [
+{ "fieldname": "m_SteamIDUser", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_SteamIDGroup", "fieldtype": "class CSteamID"},
+{ "fieldname": "m_bMember", "fieldtype": "_Bool"},
+{ "fieldname": "m_bOfficer", "fieldtype": "_Bool"}]}
+,{"struct": "GSReputation_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_unReputationScore", "fieldtype": "uint32"},
+{ "fieldname": "m_bBanned", "fieldtype": "_Bool"},
+{ "fieldname": "m_unBannedIP", "fieldtype": "uint32"},
+{ "fieldname": "m_usBannedPort", "fieldtype": "uint16"},
+{ "fieldname": "m_ulBannedGameID", "fieldtype": "uint64"},
+{ "fieldname": "m_unBanExpires", "fieldtype": "uint32"}]}
+,{"struct": "AssociateWithClanResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"}]}
+,{"struct": "ComputeNewPlayerCompatibilityResult_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_cPlayersThatDontLikeCandidate", "fieldtype": "int"},
+{ "fieldname": "m_cPlayersThatCandidateDoesntLike", "fieldtype": "int"},
+{ "fieldname": "m_cClanPlayersThatDontLikeCandidate", "fieldtype": "int"},
+{ "fieldname": "m_SteamIDCandidate", "fieldtype": "class CSteamID"}]}
+,{"struct": "GSStatsReceived_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"}]}
+,{"struct": "GSStatsStored_t","fields": [
+{ "fieldname": "m_eResult", "fieldtype": "enum EResult"},
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"}]}
+,{"struct": "GSStatsUnloaded_t","fields": [
+{ "fieldname": "m_steamIDUser", "fieldtype": "class CSteamID"}]}
+],
+"methods":[{
+ "classname": "ISteamClient",
+ "methodname": "CreateSteamPipe",
+ "returntype": "HSteamPipe"
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "BReleaseSteamPipe",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "ConnectToGlobalUser",
+ "returntype": "HSteamUser",
+ "params": [
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "CreateLocalUser",
+ "returntype": "HSteamUser",
+ "params": [
+{ "paramname": "phSteamPipe" ,"paramtype": "HSteamPipe *"},
+{ "paramname": "eAccountType" ,"paramtype": "EAccountType"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "ReleaseUser",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "hUser" ,"paramtype": "HSteamUser"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamUser",
+ "returntype": "class ISteamUser *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamGameServer",
+ "returntype": "class ISteamGameServer *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "SetLocalIPBinding",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unIP" ,"paramtype": "uint32"},
+{ "paramname": "usPort" ,"paramtype": "uint16"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamFriends",
+ "returntype": "class ISteamFriends *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamUtils",
+ "returntype": "class ISteamUtils *",
+ "params": [
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamMatchmaking",
+ "returntype": "class ISteamMatchmaking *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamMatchmakingServers",
+ "returntype": "class ISteamMatchmakingServers *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamGenericInterface",
+ "returntype": "void *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamUserStats",
+ "returntype": "class ISteamUserStats *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamGameServerStats",
+ "returntype": "class ISteamGameServerStats *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamApps",
+ "returntype": "class ISteamApps *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamNetworking",
+ "returntype": "class ISteamNetworking *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamRemoteStorage",
+ "returntype": "class ISteamRemoteStorage *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamScreenshots",
+ "returntype": "class ISteamScreenshots *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetIPCCallCount",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "SetWarningMessageHook",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pFunction" ,"paramtype": "SteamAPIWarningMessageHook_t"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "BShutdownIfAllPipesClosed",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamHTTP",
+ "returntype": "class ISteamHTTP *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamUnifiedMessages",
+ "returntype": "class ISteamUnifiedMessages *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamController",
+ "returntype": "class ISteamController *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamUGC",
+ "returntype": "class ISteamUGC *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamAppList",
+ "returntype": "class ISteamAppList *",
+ "params": [
+{ "paramname": "hSteamUser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamMusic",
+ "returntype": "class ISteamMusic *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamMusicRemote",
+ "returntype": "class ISteamMusicRemote *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamHTMLSurface",
+ "returntype": "class ISteamHTMLSurface *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamInventory",
+ "returntype": "class ISteamInventory *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamClient",
+ "methodname": "GetISteamVideo",
+ "returntype": "class ISteamVideo *",
+ "params": [
+{ "paramname": "hSteamuser" ,"paramtype": "HSteamUser"},
+{ "paramname": "hSteamPipe" ,"paramtype": "HSteamPipe"},
+{ "paramname": "pchVersion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetHSteamUser",
+ "returntype": "HSteamUser"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "BLoggedOn",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetSteamID",
+ "returntype": "class CSteamID"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "InitiateGameConnection",
+ "returntype": "int",
+ "params": [
+{ "paramname": "pAuthBlob" ,"paramtype": "void *"},
+{ "paramname": "cbMaxAuthBlob" ,"paramtype": "int"},
+{ "paramname": "steamIDGameServer" ,"paramtype": "class CSteamID"},
+{ "paramname": "unIPServer" ,"paramtype": "uint32"},
+{ "paramname": "usPortServer" ,"paramtype": "uint16"},
+{ "paramname": "bSecure" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "TerminateGameConnection",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unIPServer" ,"paramtype": "uint32"},
+{ "paramname": "usPortServer" ,"paramtype": "uint16"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "TrackAppUsageEvent",
+ "returntype": "void",
+ "params": [
+{ "paramname": "gameID" ,"paramtype": "class CGameID"},
+{ "paramname": "eAppUsageEvent" ,"paramtype": "int"},
+{ "paramname": "pchExtraInfo" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetUserDataFolder",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchBuffer" ,"paramtype": "char *"},
+{ "paramname": "cubBuffer" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "StartVoiceRecording",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "StopVoiceRecording",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetAvailableVoice",
+ "returntype": "EVoiceResult",
+ "params": [
+{ "paramname": "pcbCompressed" ,"paramtype": "uint32 *"},
+{ "paramname": "pcbUncompressed_Deprecated" ,"paramtype": "uint32 *"},
+{ "paramname": "nUncompressedVoiceDesiredSampleRate_Deprecated" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetVoice",
+ "returntype": "EVoiceResult",
+ "params": [
+{ "paramname": "bWantCompressed" ,"paramtype": "bool"},
+{ "paramname": "pDestBuffer" ,"paramtype": "void *"},
+{ "paramname": "cbDestBufferSize" ,"paramtype": "uint32"},
+{ "paramname": "nBytesWritten" ,"paramtype": "uint32 *"},
+{ "paramname": "bWantUncompressed_Deprecated" ,"paramtype": "bool"},
+{ "paramname": "pUncompressedDestBuffer_Deprecated" ,"paramtype": "void *"},
+{ "paramname": "cbUncompressedDestBufferSize_Deprecated" ,"paramtype": "uint32"},
+{ "paramname": "nUncompressBytesWritten_Deprecated" ,"paramtype": "uint32 *"},
+{ "paramname": "nUncompressedVoiceDesiredSampleRate_Deprecated" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "DecompressVoice",
+ "returntype": "EVoiceResult",
+ "params": [
+{ "paramname": "pCompressed" ,"paramtype": "const void *"},
+{ "paramname": "cbCompressed" ,"paramtype": "uint32"},
+{ "paramname": "pDestBuffer" ,"paramtype": "void *"},
+{ "paramname": "cbDestBufferSize" ,"paramtype": "uint32"},
+{ "paramname": "nBytesWritten" ,"paramtype": "uint32 *"},
+{ "paramname": "nDesiredSampleRate" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetVoiceOptimalSampleRate",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetAuthSessionTicket",
+ "returntype": "HAuthTicket",
+ "params": [
+{ "paramname": "pTicket" ,"paramtype": "void *"},
+{ "paramname": "cbMaxTicket" ,"paramtype": "int"},
+{ "paramname": "pcbTicket" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "BeginAuthSession",
+ "returntype": "EBeginAuthSessionResult",
+ "params": [
+{ "paramname": "pAuthTicket" ,"paramtype": "const void *"},
+{ "paramname": "cbAuthTicket" ,"paramtype": "int"},
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "EndAuthSession",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "CancelAuthTicket",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hAuthTicket" ,"paramtype": "HAuthTicket"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "UserHasLicenseForApp",
+ "returntype": "EUserHasLicenseForAppResult",
+ "params": [
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"},
+{ "paramname": "appID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "BIsBehindNAT",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "AdvertiseGame",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDGameServer" ,"paramtype": "class CSteamID"},
+{ "paramname": "unIPServer" ,"paramtype": "uint32"},
+{ "paramname": "usPortServer" ,"paramtype": "uint16"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "RequestEncryptedAppTicket", "callresult": "EncryptedAppTicketResponse_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pDataToInclude" ,"paramtype": "void *"},
+{ "paramname": "cbDataToInclude" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetEncryptedAppTicket",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pTicket" ,"paramtype": "void *"},
+{ "paramname": "cbMaxTicket" ,"paramtype": "int"},
+{ "paramname": "pcbTicket" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetGameBadgeLevel",
+ "returntype": "int",
+ "params": [
+{ "paramname": "nSeries" ,"paramtype": "int"},
+{ "paramname": "bFoil" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "GetPlayerSteamLevel",
+ "returntype": "int"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "RequestStoreAuthURL", "callresult": "StoreAuthURLResponse_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pchRedirectURL" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "BIsPhoneVerified",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "BIsTwoFactorEnabled",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "BIsPhoneIdentifying",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUser",
+ "methodname": "BIsPhoneRequiringVerification",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetPersonaName",
+ "returntype": "const char *"
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "SetPersonaName", "callresult": "SetPersonaNameResponse_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pchPersonaName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetPersonaState",
+ "returntype": "EPersonaState"
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendCount",
+ "returntype": "int",
+ "params": [
+{ "paramname": "iFriendFlags" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendByIndex",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "iFriend" ,"paramtype": "int"},
+{ "paramname": "iFriendFlags" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendRelationship",
+ "returntype": "EFriendRelationship",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendPersonaState",
+ "returntype": "EPersonaState",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendPersonaName",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendGamePlayed",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"},
+{ "paramname": "pFriendGameInfo" ,"out_struct": " " ,"paramtype": "struct FriendGameInfo_t *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendPersonaNameHistory",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"},
+{ "paramname": "iPersonaName" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendSteamLevel",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetPlayerNickname",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "steamIDPlayer" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendsGroupCount",
+ "returntype": "int"
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendsGroupIDByIndex",
+ "returntype": "FriendsGroupID_t",
+ "params": [
+{ "paramname": "iFG" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendsGroupName",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "friendsGroupID" ,"paramtype": "FriendsGroupID_t"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendsGroupMembersCount",
+ "returntype": "int",
+ "params": [
+{ "paramname": "friendsGroupID" ,"paramtype": "FriendsGroupID_t"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendsGroupMembersList",
+ "returntype": "void",
+ "params": [
+{ "paramname": "friendsGroupID" ,"paramtype": "FriendsGroupID_t"},
+{ "paramname": "pOutSteamIDMembers" ,"out_array_call": "nMembersCount,GetFriendsGroupMembersCount,friendsGroupID" ,"paramtype": "class CSteamID *"},
+{ "paramname": "nMembersCount" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "HasFriend",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"},
+{ "paramname": "iFriendFlags" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanCount",
+ "returntype": "int"
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanByIndex",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "iClan" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanName",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanTag",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanActivityCounts",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"},
+{ "paramname": "pnOnline" ,"paramtype": "int *"},
+{ "paramname": "pnInGame" ,"paramtype": "int *"},
+{ "paramname": "pnChatting" ,"paramtype": "int *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "DownloadClanActivityCounts",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "psteamIDClans" ,"array_count": "cClansToRequest" ,"paramtype": "class CSteamID *"},
+{ "paramname": "cClansToRequest" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendCountFromSource",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDSource" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendFromSourceByIndex",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "steamIDSource" ,"paramtype": "class CSteamID"},
+{ "paramname": "iFriend" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "IsUserInSource",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "steamIDSource" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "SetInGameVoiceSpeaking",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "bSpeaking" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "ActivateGameOverlay",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchDialog" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "ActivateGameOverlayToUser",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchDialog" ,"paramtype": "const char *"},
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "ActivateGameOverlayToWebPage",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchURL" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "ActivateGameOverlayToStore",
+ "returntype": "void",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "eFlag" ,"paramtype": "EOverlayToStoreFlag"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "SetPlayedWith",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDUserPlayedWith" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "ActivateGameOverlayInviteDialog",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetSmallFriendAvatar",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetMediumFriendAvatar",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetLargeFriendAvatar",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "RequestUserInformation",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "bRequireNameOnly" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "RequestClanOfficerList", "callresult": "ClanOfficerListResponse_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanOwner",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanOfficerCount",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanOfficerByIndex",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"},
+{ "paramname": "iOfficer" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetUserRestrictions",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "SetRichPresence",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchKey" ,"paramtype": "const char *"},
+{ "paramname": "pchValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "ClearRichPresence",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendRichPresence",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendRichPresenceKeyCount",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendRichPresenceKeyByIndex",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"},
+{ "paramname": "iKey" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "RequestFriendRichPresence",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "InviteUserToGame",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchConnectString" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetCoplayFriendCount",
+ "returntype": "int"
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetCoplayFriend",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "iCoplayFriend" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendCoplayTime",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendCoplayGame",
+ "returntype": "AppId_t",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "JoinClanChatRoom", "callresult": "JoinClanChatRoomCompletionResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "LeaveClanChatRoom",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanChatMemberCount",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetChatMemberByIndex",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"},
+{ "paramname": "iUser" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "SendClanChatMessage",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDClanChat" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchText" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetClanChatMessage",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDClanChat" ,"paramtype": "class CSteamID"},
+{ "paramname": "iMessage" ,"paramtype": "int"},
+{ "paramname": "prgchText" ,"paramtype": "void *"},
+{ "paramname": "cchTextMax" ,"paramtype": "int"},
+{ "paramname": "peChatEntryType" ,"paramtype": "EChatEntryType *"},
+{ "paramname": "psteamidChatter" ,"out_struct": " " ,"paramtype": "class CSteamID *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "IsClanChatAdmin",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDClanChat" ,"paramtype": "class CSteamID"},
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "IsClanChatWindowOpenInSteam",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDClanChat" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "OpenClanChatWindowInSteam",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDClanChat" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "CloseClanChatWindowInSteam",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDClanChat" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "SetListenForFriendsMessages",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bInterceptEnabled" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "ReplyToFriendMessage",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchMsgToSend" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFriendMessage",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDFriend" ,"paramtype": "class CSteamID"},
+{ "paramname": "iMessageID" ,"paramtype": "int"},
+{ "paramname": "pvData" ,"paramtype": "void *"},
+{ "paramname": "cubData" ,"paramtype": "int"},
+{ "paramname": "peChatEntryType" ,"paramtype": "EChatEntryType *"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "GetFollowerCount", "callresult": "FriendsGetFollowerCount_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "IsFollowing", "callresult": "FriendsIsFollowing_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamFriends",
+ "methodname": "EnumerateFollowingList", "callresult": "FriendsEnumerateFollowingList_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unStartIndex" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetSecondsSinceAppActive",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetSecondsSinceComputerActive",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetConnectedUniverse",
+ "returntype": "EUniverse"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetServerRealTime",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetIPCountry",
+ "returntype": "const char *"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetImageSize",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "iImage" ,"paramtype": "int"},
+{ "paramname": "pnWidth" ,"paramtype": "uint32 *"},
+{ "paramname": "pnHeight" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetImageRGBA",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "iImage" ,"paramtype": "int"},
+{ "paramname": "pubDest" ,"paramtype": "uint8 *"},
+{ "paramname": "nDestBufferSize" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetCSERIPPort",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "unIP" ,"paramtype": "uint32 *"},
+{ "paramname": "usPort" ,"paramtype": "uint16 *"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetCurrentBatteryPower",
+ "returntype": "uint8"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetAppID",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "SetOverlayNotificationPosition",
+ "returntype": "void",
+ "params": [
+{ "paramname": "eNotificationPosition" ,"paramtype": "ENotificationPosition"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "IsAPICallCompleted",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSteamAPICall" ,"paramtype": "SteamAPICall_t"},
+{ "paramname": "pbFailed" ,"paramtype": "bool *"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetAPICallFailureReason",
+ "returntype": "ESteamAPICallFailure",
+ "params": [
+{ "paramname": "hSteamAPICall" ,"paramtype": "SteamAPICall_t"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetAPICallResult",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSteamAPICall" ,"paramtype": "SteamAPICall_t"},
+{ "paramname": "pCallback" ,"paramtype": "void *"},
+{ "paramname": "cubCallback" ,"paramtype": "int"},
+{ "paramname": "iCallbackExpected" ,"paramtype": "int"},
+{ "paramname": "pbFailed" ,"paramtype": "bool *"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetIPCCallCount",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "SetWarningMessageHook",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pFunction" ,"paramtype": "SteamAPIWarningMessageHook_t"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "IsOverlayEnabled",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "BOverlayNeedsPresent",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "CheckFileSignature", "callresult": "CheckFileSignature_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "szFileName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "ShowGamepadTextInput",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "eInputMode" ,"paramtype": "EGamepadTextInputMode"},
+{ "paramname": "eLineInputMode" ,"paramtype": "EGamepadTextInputLineMode"},
+{ "paramname": "pchDescription" ,"paramtype": "const char *"},
+{ "paramname": "unCharMax" ,"paramtype": "uint32"},
+{ "paramname": "pchExistingText" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetEnteredGamepadTextLength",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetEnteredGamepadTextInput",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchText" ,"paramtype": "char *"},
+{ "paramname": "cchText" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "GetSteamUILanguage",
+ "returntype": "const char *"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "IsSteamRunningInVR",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "SetOverlayNotificationInset",
+ "returntype": "void",
+ "params": [
+{ "paramname": "nHorizontalInset" ,"paramtype": "int"},
+{ "paramname": "nVerticalInset" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "IsSteamInBigPictureMode",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "StartVRDashboard",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "IsVRHeadsetStreamingEnabled",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUtils",
+ "methodname": "SetVRHeadsetStreamingEnabled",
+ "returntype": "void",
+ "params": [
+{ "paramname": "bEnabled" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetFavoriteGameCount",
+ "returntype": "int"
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetFavoriteGame",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "iGame" ,"paramtype": "int"},
+{ "paramname": "pnAppID" ,"paramtype": "AppId_t *"},
+{ "paramname": "pnIP" ,"paramtype": "uint32 *"},
+{ "paramname": "pnConnPort" ,"paramtype": "uint16 *"},
+{ "paramname": "pnQueryPort" ,"paramtype": "uint16 *"},
+{ "paramname": "punFlags" ,"paramtype": "uint32 *"},
+{ "paramname": "pRTime32LastPlayedOnServer" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "AddFavoriteGame",
+ "returntype": "int",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "nIP" ,"paramtype": "uint32"},
+{ "paramname": "nConnPort" ,"paramtype": "uint16"},
+{ "paramname": "nQueryPort" ,"paramtype": "uint16"},
+{ "paramname": "unFlags" ,"paramtype": "uint32"},
+{ "paramname": "rTime32LastPlayedOnServer" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "RemoveFavoriteGame",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "nIP" ,"paramtype": "uint32"},
+{ "paramname": "nConnPort" ,"paramtype": "uint16"},
+{ "paramname": "nQueryPort" ,"paramtype": "uint16"},
+{ "paramname": "unFlags" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "RequestLobbyList", "callresult": "LobbyMatchList_t",
+ "returntype": "SteamAPICall_t"
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "AddRequestLobbyListStringFilter",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchKeyToMatch" ,"paramtype": "const char *"},
+{ "paramname": "pchValueToMatch" ,"paramtype": "const char *"},
+{ "paramname": "eComparisonType" ,"paramtype": "ELobbyComparison"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "AddRequestLobbyListNumericalFilter",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchKeyToMatch" ,"paramtype": "const char *"},
+{ "paramname": "nValueToMatch" ,"paramtype": "int"},
+{ "paramname": "eComparisonType" ,"paramtype": "ELobbyComparison"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "AddRequestLobbyListNearValueFilter",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchKeyToMatch" ,"paramtype": "const char *"},
+{ "paramname": "nValueToBeCloseTo" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "AddRequestLobbyListFilterSlotsAvailable",
+ "returntype": "void",
+ "params": [
+{ "paramname": "nSlotsAvailable" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "AddRequestLobbyListDistanceFilter",
+ "returntype": "void",
+ "params": [
+{ "paramname": "eLobbyDistanceFilter" ,"paramtype": "ELobbyDistanceFilter"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "AddRequestLobbyListResultCountFilter",
+ "returntype": "void",
+ "params": [
+{ "paramname": "cMaxResults" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "AddRequestLobbyListCompatibleMembersFilter",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyByIndex",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "iLobby" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "CreateLobby", "callresult": "LobbyCreated_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "eLobbyType" ,"paramtype": "ELobbyType"},
+{ "paramname": "cMaxMembers" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "JoinLobby", "callresult": "LobbyEnter_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "LeaveLobby",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "InviteUserToLobby",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "steamIDInvitee" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetNumLobbyMembers",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyMemberByIndex",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "iMember" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyData",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "SetLobbyData",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"},
+{ "paramname": "pchValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyDataCount",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyDataByIndex",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "iLobbyData" ,"paramtype": "int"},
+{ "paramname": "pchKey" ,"paramtype": "char *"},
+{ "paramname": "cchKeyBufferSize" ,"paramtype": "int"},
+{ "paramname": "pchValue" ,"paramtype": "char *"},
+{ "paramname": "cchValueBufferSize" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "DeleteLobbyData",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyMemberData",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "SetLobbyMemberData",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"},
+{ "paramname": "pchValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "SendLobbyChatMsg",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "pvMsgBody" ,"paramtype": "const void *"},
+{ "paramname": "cubMsgBody" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyChatEntry",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "iChatID" ,"paramtype": "int"},
+{ "paramname": "pSteamIDUser" ,"out_struct": " " ,"paramtype": "class CSteamID *"},
+{ "paramname": "pvData" ,"paramtype": "void *"},
+{ "paramname": "cubData" ,"paramtype": "int"},
+{ "paramname": "peChatEntryType" ,"paramtype": "EChatEntryType *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "RequestLobbyData",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "SetLobbyGameServer",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "unGameServerIP" ,"paramtype": "uint32"},
+{ "paramname": "unGameServerPort" ,"paramtype": "uint16"},
+{ "paramname": "steamIDGameServer" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyGameServer",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "punGameServerIP" ,"paramtype": "uint32 *"},
+{ "paramname": "punGameServerPort" ,"paramtype": "uint16 *"},
+{ "paramname": "psteamIDGameServer" ,"out_struct": " " ,"paramtype": "class CSteamID *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "SetLobbyMemberLimit",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "cMaxMembers" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyMemberLimit",
+ "returntype": "int",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "SetLobbyType",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "eLobbyType" ,"paramtype": "ELobbyType"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "SetLobbyJoinable",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "bLobbyJoinable" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "GetLobbyOwner",
+ "returntype": "class CSteamID",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "SetLobbyOwner",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "steamIDNewOwner" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmaking",
+ "methodname": "SetLinkedLobby",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDLobby" ,"paramtype": "class CSteamID"},
+{ "paramname": "steamIDLobbyDependent" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServerListResponse",
+ "methodname": "ServerResponded",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HServerListRequest"},
+{ "paramname": "iServer" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServerListResponse",
+ "methodname": "ServerFailedToRespond",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HServerListRequest"},
+{ "paramname": "iServer" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServerListResponse",
+ "methodname": "RefreshComplete",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HServerListRequest"},
+{ "paramname": "response" ,"paramtype": "EMatchMakingServerResponse"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingPingResponse",
+ "methodname": "ServerResponded",
+ "returntype": "void",
+ "params": [
+{ "paramname": "server" ,"paramtype": "class gameserveritem_t &"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingPingResponse",
+ "methodname": "ServerFailedToRespond",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMatchmakingPlayersResponse",
+ "methodname": "AddPlayerToList",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "nScore" ,"paramtype": "int"},
+{ "paramname": "flTimePlayed" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingPlayersResponse",
+ "methodname": "PlayersFailedToRespond",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMatchmakingPlayersResponse",
+ "methodname": "PlayersRefreshComplete",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMatchmakingRulesResponse",
+ "methodname": "RulesResponded",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchRule" ,"paramtype": "const char *"},
+{ "paramname": "pchValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingRulesResponse",
+ "methodname": "RulesFailedToRespond",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMatchmakingRulesResponse",
+ "methodname": "RulesRefreshComplete",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "RequestInternetServerList",
+ "returntype": "HServerListRequest",
+ "params": [
+{ "paramname": "iApp" ,"paramtype": "AppId_t"},
+{ "paramname": "ppchFilters" ,"array_count": "nFilters" ,"paramtype": "struct MatchMakingKeyValuePair_t **"},
+{ "paramname": "nFilters" ,"paramtype": "uint32"},
+{ "paramname": "pRequestServersResponse" ,"paramtype": "class ISteamMatchmakingServerListResponse *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "RequestLANServerList",
+ "returntype": "HServerListRequest",
+ "params": [
+{ "paramname": "iApp" ,"paramtype": "AppId_t"},
+{ "paramname": "pRequestServersResponse" ,"paramtype": "class ISteamMatchmakingServerListResponse *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "RequestFriendsServerList",
+ "returntype": "HServerListRequest",
+ "params": [
+{ "paramname": "iApp" ,"paramtype": "AppId_t"},
+{ "paramname": "ppchFilters" ,"array_count": "nFilters" ,"paramtype": "struct MatchMakingKeyValuePair_t **"},
+{ "paramname": "nFilters" ,"paramtype": "uint32"},
+{ "paramname": "pRequestServersResponse" ,"paramtype": "class ISteamMatchmakingServerListResponse *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "RequestFavoritesServerList",
+ "returntype": "HServerListRequest",
+ "params": [
+{ "paramname": "iApp" ,"paramtype": "AppId_t"},
+{ "paramname": "ppchFilters" ,"array_count": "nFilters" ,"paramtype": "struct MatchMakingKeyValuePair_t **"},
+{ "paramname": "nFilters" ,"paramtype": "uint32"},
+{ "paramname": "pRequestServersResponse" ,"paramtype": "class ISteamMatchmakingServerListResponse *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "RequestHistoryServerList",
+ "returntype": "HServerListRequest",
+ "params": [
+{ "paramname": "iApp" ,"paramtype": "AppId_t"},
+{ "paramname": "ppchFilters" ,"array_count": "nFilters" ,"paramtype": "struct MatchMakingKeyValuePair_t **"},
+{ "paramname": "nFilters" ,"paramtype": "uint32"},
+{ "paramname": "pRequestServersResponse" ,"paramtype": "class ISteamMatchmakingServerListResponse *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "RequestSpectatorServerList",
+ "returntype": "HServerListRequest",
+ "params": [
+{ "paramname": "iApp" ,"paramtype": "AppId_t"},
+{ "paramname": "ppchFilters" ,"array_count": "nFilters" ,"paramtype": "struct MatchMakingKeyValuePair_t **"},
+{ "paramname": "nFilters" ,"paramtype": "uint32"},
+{ "paramname": "pRequestServersResponse" ,"paramtype": "class ISteamMatchmakingServerListResponse *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "ReleaseRequest",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hServerListRequest" ,"paramtype": "HServerListRequest"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "GetServerDetails",
+ "returntype": "class gameserveritem_t *",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HServerListRequest"},
+{ "paramname": "iServer" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "CancelQuery",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HServerListRequest"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "RefreshQuery",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HServerListRequest"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "IsRefreshing",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HServerListRequest"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "GetServerCount",
+ "returntype": "int",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HServerListRequest"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "RefreshServer",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HServerListRequest"},
+{ "paramname": "iServer" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "PingServer",
+ "returntype": "HServerQuery",
+ "params": [
+{ "paramname": "unIP" ,"paramtype": "uint32"},
+{ "paramname": "usPort" ,"paramtype": "uint16"},
+{ "paramname": "pRequestServersResponse" ,"paramtype": "class ISteamMatchmakingPingResponse *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "PlayerDetails",
+ "returntype": "HServerQuery",
+ "params": [
+{ "paramname": "unIP" ,"paramtype": "uint32"},
+{ "paramname": "usPort" ,"paramtype": "uint16"},
+{ "paramname": "pRequestServersResponse" ,"paramtype": "class ISteamMatchmakingPlayersResponse *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "ServerRules",
+ "returntype": "HServerQuery",
+ "params": [
+{ "paramname": "unIP" ,"paramtype": "uint32"},
+{ "paramname": "usPort" ,"paramtype": "uint16"},
+{ "paramname": "pRequestServersResponse" ,"paramtype": "class ISteamMatchmakingRulesResponse *"}
+ ]
+}
+,{
+ "classname": "ISteamMatchmakingServers",
+ "methodname": "CancelServerQuery",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hServerQuery" ,"paramtype": "HServerQuery"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileWrite",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"},
+{ "paramname": "pvData" ,"paramtype": "const void *"},
+{ "paramname": "cubData" ,"paramtype": "int32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileRead",
+ "returntype": "int32",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"},
+{ "paramname": "pvData" ,"paramtype": "void *"},
+{ "paramname": "cubDataToRead" ,"paramtype": "int32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileWriteAsync", "callresult": "RemoteStorageFileWriteAsyncComplete_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"},
+{ "paramname": "pvData" ,"paramtype": "const void *"},
+{ "paramname": "cubData" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileReadAsync", "callresult": "RemoteStorageFileReadAsyncComplete_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"},
+{ "paramname": "nOffset" ,"paramtype": "uint32"},
+{ "paramname": "cubToRead" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileReadAsyncComplete",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hReadCall" ,"paramtype": "SteamAPICall_t"},
+{ "paramname": "pvBuffer" ,"paramtype": "void *"},
+{ "paramname": "cubToRead" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileForget",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileDelete",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileShare", "callresult": "RemoteStorageFileShareResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "SetSyncPlatforms",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"},
+{ "paramname": "eRemoteStoragePlatform" ,"paramtype": "ERemoteStoragePlatform"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileWriteStreamOpen",
+ "returntype": "UGCFileWriteStreamHandle_t",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileWriteStreamWriteChunk",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "writeHandle" ,"paramtype": "UGCFileWriteStreamHandle_t"},
+{ "paramname": "pvData" ,"paramtype": "const void *"},
+{ "paramname": "cubData" ,"paramtype": "int32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileWriteStreamClose",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "writeHandle" ,"paramtype": "UGCFileWriteStreamHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileWriteStreamCancel",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "writeHandle" ,"paramtype": "UGCFileWriteStreamHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FileExists",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "FilePersisted",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetFileSize",
+ "returntype": "int32",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetFileTimestamp",
+ "returntype": "int64",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetSyncPlatforms",
+ "returntype": "ERemoteStoragePlatform",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetFileCount",
+ "returntype": "int32"
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetFileNameAndSize",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "iFile" ,"paramtype": "int"},
+{ "paramname": "pnFileSizeInBytes" ,"paramtype": "int32 *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetQuota",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pnTotalBytes" ,"paramtype": "uint64 *"},
+{ "paramname": "puAvailableBytes" ,"paramtype": "uint64 *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "IsCloudEnabledForAccount",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "IsCloudEnabledForApp",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "SetCloudEnabledForApp",
+ "returntype": "void",
+ "params": [
+{ "paramname": "bEnabled" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UGCDownload", "callresult": "RemoteStorageDownloadUGCResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "hContent" ,"paramtype": "UGCHandle_t"},
+{ "paramname": "unPriority" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetUGCDownloadProgress",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hContent" ,"paramtype": "UGCHandle_t"},
+{ "paramname": "pnBytesDownloaded" ,"paramtype": "int32 *"},
+{ "paramname": "pnBytesExpected" ,"paramtype": "int32 *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetUGCDetails",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hContent" ,"paramtype": "UGCHandle_t"},
+{ "paramname": "pnAppID" ,"paramtype": "AppId_t *"},
+{ "paramname": "ppchName" ,"out_string": " " ,"paramtype": "char **"},
+{ "paramname": "pnFileSizeInBytes" ,"paramtype": "int32 *"},
+{ "paramname": "pSteamIDOwner" ,"out_struct": " " ,"paramtype": "class CSteamID *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UGCRead",
+ "returntype": "int32",
+ "params": [
+{ "paramname": "hContent" ,"paramtype": "UGCHandle_t"},
+{ "paramname": "pvData" ,"paramtype": "void *"},
+{ "paramname": "cubDataToRead" ,"paramtype": "int32"},
+{ "paramname": "cOffset" ,"paramtype": "uint32"},
+{ "paramname": "eAction" ,"paramtype": "EUGCReadAction"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetCachedUGCCount",
+ "returntype": "int32"
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetCachedUGCHandle",
+ "returntype": "UGCHandle_t",
+ "params": [
+{ "paramname": "iCachedContent" ,"paramtype": "int32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "PublishWorkshopFile", "callresult": "RemoteStoragePublishFileProgress_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pchFile" ,"paramtype": "const char *"},
+{ "paramname": "pchPreviewFile" ,"paramtype": "const char *"},
+{ "paramname": "nConsumerAppId" ,"paramtype": "AppId_t"},
+{ "paramname": "pchTitle" ,"paramtype": "const char *"},
+{ "paramname": "pchDescription" ,"paramtype": "const char *"},
+{ "paramname": "eVisibility" ,"paramtype": "ERemoteStoragePublishedFileVisibility"},
+{ "paramname": "pTags" ,"paramtype": "struct SteamParamStringArray_t *"},
+{ "paramname": "eWorkshopFileType" ,"paramtype": "EWorkshopFileType"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "CreatePublishedFileUpdateRequest",
+ "returntype": "PublishedFileUpdateHandle_t",
+ "params": [
+{ "paramname": "unPublishedFileId" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UpdatePublishedFileFile",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "updateHandle" ,"paramtype": "PublishedFileUpdateHandle_t"},
+{ "paramname": "pchFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UpdatePublishedFilePreviewFile",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "updateHandle" ,"paramtype": "PublishedFileUpdateHandle_t"},
+{ "paramname": "pchPreviewFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UpdatePublishedFileTitle",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "updateHandle" ,"paramtype": "PublishedFileUpdateHandle_t"},
+{ "paramname": "pchTitle" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UpdatePublishedFileDescription",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "updateHandle" ,"paramtype": "PublishedFileUpdateHandle_t"},
+{ "paramname": "pchDescription" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UpdatePublishedFileVisibility",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "updateHandle" ,"paramtype": "PublishedFileUpdateHandle_t"},
+{ "paramname": "eVisibility" ,"paramtype": "ERemoteStoragePublishedFileVisibility"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UpdatePublishedFileTags",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "updateHandle" ,"paramtype": "PublishedFileUpdateHandle_t"},
+{ "paramname": "pTags" ,"paramtype": "struct SteamParamStringArray_t *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "CommitPublishedFileUpdate", "callresult": "RemoteStorageUpdatePublishedFileResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "updateHandle" ,"paramtype": "PublishedFileUpdateHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetPublishedFileDetails", "callresult": "RemoteStorageGetPublishedFileDetailsResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unPublishedFileId" ,"paramtype": "PublishedFileId_t"},
+{ "paramname": "unMaxSecondsOld" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "DeletePublishedFile", "callresult": "RemoteStorageDeletePublishedFileResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unPublishedFileId" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "EnumerateUserPublishedFiles", "callresult": "RemoteStorageEnumerateUserPublishedFilesResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unStartIndex" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "SubscribePublishedFile", "callresult": "RemoteStorageSubscribePublishedFileResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unPublishedFileId" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "EnumerateUserSubscribedFiles", "callresult": "RemoteStorageEnumerateUserSubscribedFilesResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unStartIndex" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UnsubscribePublishedFile", "callresult": "RemoteStorageUnsubscribePublishedFileResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unPublishedFileId" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UpdatePublishedFileSetChangeDescription",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "updateHandle" ,"paramtype": "PublishedFileUpdateHandle_t"},
+{ "paramname": "pchChangeDescription" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetPublishedItemVoteDetails", "callresult": "RemoteStorageGetPublishedItemVoteDetailsResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unPublishedFileId" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UpdateUserPublishedItemVote", "callresult": "RemoteStorageUpdateUserPublishedItemVoteResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unPublishedFileId" ,"paramtype": "PublishedFileId_t"},
+{ "paramname": "bVoteUp" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "GetUserPublishedItemVoteDetails", "callresult": "RemoteStorageGetPublishedItemVoteDetailsResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unPublishedFileId" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "EnumerateUserSharedWorkshopFiles", "callresult": "RemoteStorageEnumerateUserPublishedFilesResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamId" ,"paramtype": "class CSteamID"},
+{ "paramname": "unStartIndex" ,"paramtype": "uint32"},
+{ "paramname": "pRequiredTags" ,"paramtype": "struct SteamParamStringArray_t *"},
+{ "paramname": "pExcludedTags" ,"paramtype": "struct SteamParamStringArray_t *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "PublishVideo", "callresult": "RemoteStoragePublishFileProgress_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "eVideoProvider" ,"paramtype": "EWorkshopVideoProvider"},
+{ "paramname": "pchVideoAccount" ,"paramtype": "const char *"},
+{ "paramname": "pchVideoIdentifier" ,"paramtype": "const char *"},
+{ "paramname": "pchPreviewFile" ,"paramtype": "const char *"},
+{ "paramname": "nConsumerAppId" ,"paramtype": "AppId_t"},
+{ "paramname": "pchTitle" ,"paramtype": "const char *"},
+{ "paramname": "pchDescription" ,"paramtype": "const char *"},
+{ "paramname": "eVisibility" ,"paramtype": "ERemoteStoragePublishedFileVisibility"},
+{ "paramname": "pTags" ,"paramtype": "struct SteamParamStringArray_t *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "SetUserPublishedFileAction", "callresult": "RemoteStorageSetUserPublishedFileActionResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "unPublishedFileId" ,"paramtype": "PublishedFileId_t"},
+{ "paramname": "eAction" ,"paramtype": "EWorkshopFileAction"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "EnumeratePublishedFilesByUserAction", "callresult": "RemoteStorageEnumeratePublishedFilesByUserActionResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "eAction" ,"paramtype": "EWorkshopFileAction"},
+{ "paramname": "unStartIndex" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "EnumeratePublishedWorkshopFiles", "callresult": "RemoteStorageEnumerateWorkshopFilesResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "eEnumerationType" ,"paramtype": "EWorkshopEnumerationType"},
+{ "paramname": "unStartIndex" ,"paramtype": "uint32"},
+{ "paramname": "unCount" ,"paramtype": "uint32"},
+{ "paramname": "unDays" ,"paramtype": "uint32"},
+{ "paramname": "pTags" ,"paramtype": "struct SteamParamStringArray_t *"},
+{ "paramname": "pUserTags" ,"paramtype": "struct SteamParamStringArray_t *"}
+ ]
+}
+,{
+ "classname": "ISteamRemoteStorage",
+ "methodname": "UGCDownloadToLocation", "callresult": "RemoteStorageDownloadUGCResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "hContent" ,"paramtype": "UGCHandle_t"},
+{ "paramname": "pchLocation" ,"paramtype": "const char *"},
+{ "paramname": "unPriority" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "RequestCurrentStats", "callback": "UserStatsReceived_t",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"paramtype": "int32 *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"paramtype": "float *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "SetStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "nData" ,"paramtype": "int32"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "SetStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "fData" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "UpdateAvgRateStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "flCountThisSession" ,"paramtype": "float"},
+{ "paramname": "dSessionLength" ,"paramtype": "double"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetAchievement",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pbAchieved" ,"paramtype": "bool *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "SetAchievement",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "ClearAchievement",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetAchievementAndUnlockTime",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pbAchieved" ,"paramtype": "bool *"},
+{ "paramname": "punUnlockTime" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "StoreStats",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetAchievementIcon",
+ "returntype": "int",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetAchievementDisplayAttribute",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "IndicateAchievementProgress",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "nCurProgress" ,"paramtype": "uint32"},
+{ "paramname": "nMaxProgress" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetNumAchievements",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetAchievementName",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "iAchievement" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "RequestUserStats", "callresult": "UserStatsReceived_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetUserStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"paramtype": "int32 *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetUserStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"paramtype": "float *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetUserAchievement",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pbAchieved" ,"paramtype": "bool *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetUserAchievementAndUnlockTime",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pbAchieved" ,"paramtype": "bool *"},
+{ "paramname": "punUnlockTime" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "ResetAllStats",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bAchievementsToo" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "FindOrCreateLeaderboard", "callresult": "LeaderboardFindResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pchLeaderboardName" ,"paramtype": "const char *"},
+{ "paramname": "eLeaderboardSortMethod" ,"paramtype": "ELeaderboardSortMethod"},
+{ "paramname": "eLeaderboardDisplayType" ,"paramtype": "ELeaderboardDisplayType"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "FindLeaderboard", "callresult": "LeaderboardFindResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pchLeaderboardName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetLeaderboardName",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "hSteamLeaderboard" ,"paramtype": "SteamLeaderboard_t"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetLeaderboardEntryCount",
+ "returntype": "int",
+ "params": [
+{ "paramname": "hSteamLeaderboard" ,"paramtype": "SteamLeaderboard_t"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetLeaderboardSortMethod",
+ "returntype": "ELeaderboardSortMethod",
+ "params": [
+{ "paramname": "hSteamLeaderboard" ,"paramtype": "SteamLeaderboard_t"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetLeaderboardDisplayType",
+ "returntype": "ELeaderboardDisplayType",
+ "params": [
+{ "paramname": "hSteamLeaderboard" ,"paramtype": "SteamLeaderboard_t"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "DownloadLeaderboardEntries", "callresult": "LeaderboardScoresDownloaded_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "hSteamLeaderboard" ,"paramtype": "SteamLeaderboard_t"},
+{ "paramname": "eLeaderboardDataRequest" ,"paramtype": "ELeaderboardDataRequest"},
+{ "paramname": "nRangeStart" ,"paramtype": "int"},
+{ "paramname": "nRangeEnd" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "DownloadLeaderboardEntriesForUsers", "callresult": "LeaderboardScoresDownloaded_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "hSteamLeaderboard" ,"paramtype": "SteamLeaderboard_t"},
+{ "paramname": "prgUsers" ,"array_count": "cUsers" ,"desc": "Array of users to retrieve" ,"paramtype": "class CSteamID *"},
+{ "paramname": "cUsers" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetDownloadedLeaderboardEntry",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSteamLeaderboardEntries" ,"paramtype": "SteamLeaderboardEntries_t"},
+{ "paramname": "index" ,"paramtype": "int"},
+{ "paramname": "pLeaderboardEntry" ,"paramtype": "struct LeaderboardEntry_t *"},
+{ "paramname": "pDetails" ,"paramtype": "int32 *"},
+{ "paramname": "cDetailsMax" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "UploadLeaderboardScore", "callresult": "LeaderboardScoreUploaded_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "hSteamLeaderboard" ,"paramtype": "SteamLeaderboard_t"},
+{ "paramname": "eLeaderboardUploadScoreMethod" ,"paramtype": "ELeaderboardUploadScoreMethod"},
+{ "paramname": "nScore" ,"paramtype": "int32"},
+{ "paramname": "pScoreDetails" ,"paramtype": "const int32 *"},
+{ "paramname": "cScoreDetailsCount" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "AttachLeaderboardUGC", "callresult": "LeaderboardUGCSet_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "hSteamLeaderboard" ,"paramtype": "SteamLeaderboard_t"},
+{ "paramname": "hUGC" ,"paramtype": "UGCHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetNumberOfCurrentPlayers", "callresult": "NumberOfCurrentPlayers_t",
+ "returntype": "SteamAPICall_t"
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "RequestGlobalAchievementPercentages", "callresult": "GlobalAchievementPercentagesReady_t",
+ "returntype": "SteamAPICall_t"
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetMostAchievedAchievementInfo",
+ "returntype": "int",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "char *"},
+{ "paramname": "unNameBufLen" ,"paramtype": "uint32"},
+{ "paramname": "pflPercent" ,"paramtype": "float *"},
+{ "paramname": "pbAchieved" ,"paramtype": "bool *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetNextMostAchievedAchievementInfo",
+ "returntype": "int",
+ "params": [
+{ "paramname": "iIteratorPrevious" ,"paramtype": "int"},
+{ "paramname": "pchName" ,"paramtype": "char *"},
+{ "paramname": "unNameBufLen" ,"paramtype": "uint32"},
+{ "paramname": "pflPercent" ,"paramtype": "float *"},
+{ "paramname": "pbAchieved" ,"paramtype": "bool *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetAchievementAchievedPercent",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pflPercent" ,"paramtype": "float *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "RequestGlobalStats", "callresult": "GlobalStatsReceived_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nHistoryDays" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetGlobalStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchStatName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"paramtype": "int64 *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetGlobalStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchStatName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"paramtype": "double *"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetGlobalStatHistory",
+ "returntype": "int32",
+ "params": [
+{ "paramname": "pchStatName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"array_count": "cubData" ,"paramtype": "int64 *"},
+{ "paramname": "cubData" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUserStats",
+ "methodname": "GetGlobalStatHistory",
+ "returntype": "int32",
+ "params": [
+{ "paramname": "pchStatName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"array_count": "cubData" ,"paramtype": "double *"},
+{ "paramname": "cubData" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "BIsSubscribed",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "BIsLowViolence",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "BIsCybercafe",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "BIsVACBanned",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetCurrentGameLanguage",
+ "returntype": "const char *"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetAvailableGameLanguages",
+ "returntype": "const char *"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "BIsSubscribedApp",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "appID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "BIsDlcInstalled",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "appID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetEarliestPurchaseUnixTime",
+ "returntype": "uint32",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "BIsSubscribedFromFreeWeekend",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetDLCCount",
+ "returntype": "int"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "BGetDLCDataByIndex",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "iDLC" ,"paramtype": "int"},
+{ "paramname": "pAppID" ,"paramtype": "AppId_t *"},
+{ "paramname": "pbAvailable" ,"paramtype": "bool *"},
+{ "paramname": "pchName" ,"paramtype": "char *"},
+{ "paramname": "cchNameBufferSize" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "InstallDLC",
+ "returntype": "void",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "UninstallDLC",
+ "returntype": "void",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "RequestAppProofOfPurchaseKey",
+ "returntype": "void",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetCurrentBetaName",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "char *"},
+{ "paramname": "cchNameBufferSize" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "MarkContentCorrupt",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bMissingFilesOnly" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetInstalledDepots",
+ "returntype": "uint32",
+ "params": [
+{ "paramname": "appID" ,"paramtype": "AppId_t"},
+{ "paramname": "pvecDepots" ,"paramtype": "DepotId_t *"},
+{ "paramname": "cMaxDepots" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetAppInstallDir",
+ "returntype": "uint32",
+ "params": [
+{ "paramname": "appID" ,"paramtype": "AppId_t"},
+{ "paramname": "pchFolder" ,"paramtype": "char *"},
+{ "paramname": "cchFolderBufferSize" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "BIsAppInstalled",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "appID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetAppOwner",
+ "returntype": "class CSteamID"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetLaunchQueryParam",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "pchKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetDlcDownloadProgress",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "punBytesDownloaded" ,"paramtype": "uint64 *"},
+{ "paramname": "punBytesTotal" ,"paramtype": "uint64 *"}
+ ]
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetAppBuildId",
+ "returntype": "int"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "RequestAllProofOfPurchaseKeys",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamApps",
+ "methodname": "GetFileDetails", "callresult": "FileDetailsResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pszFileName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "SendP2PPacket",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDRemote" ,"paramtype": "class CSteamID"},
+{ "paramname": "pubData" ,"paramtype": "const void *"},
+{ "paramname": "cubData" ,"paramtype": "uint32"},
+{ "paramname": "eP2PSendType" ,"paramtype": "EP2PSend"},
+{ "paramname": "nChannel" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "IsP2PPacketAvailable",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pcubMsgSize" ,"paramtype": "uint32 *"},
+{ "paramname": "nChannel" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "ReadP2PPacket",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pubDest" ,"paramtype": "void *"},
+{ "paramname": "cubDest" ,"paramtype": "uint32"},
+{ "paramname": "pcubMsgSize" ,"paramtype": "uint32 *"},
+{ "paramname": "psteamIDRemote" ,"paramtype": "class CSteamID *"},
+{ "paramname": "nChannel" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "AcceptP2PSessionWithUser",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDRemote" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "CloseP2PSessionWithUser",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDRemote" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "CloseP2PChannelWithUser",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDRemote" ,"paramtype": "class CSteamID"},
+{ "paramname": "nChannel" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "GetP2PSessionState",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDRemote" ,"paramtype": "class CSteamID"},
+{ "paramname": "pConnectionState" ,"paramtype": "struct P2PSessionState_t *"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "AllowP2PPacketRelay",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bAllow" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "CreateListenSocket",
+ "returntype": "SNetListenSocket_t",
+ "params": [
+{ "paramname": "nVirtualP2PPort" ,"paramtype": "int"},
+{ "paramname": "nIP" ,"paramtype": "uint32"},
+{ "paramname": "nPort" ,"paramtype": "uint16"},
+{ "paramname": "bAllowUseOfPacketRelay" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "CreateP2PConnectionSocket",
+ "returntype": "SNetSocket_t",
+ "params": [
+{ "paramname": "steamIDTarget" ,"paramtype": "class CSteamID"},
+{ "paramname": "nVirtualPort" ,"paramtype": "int"},
+{ "paramname": "nTimeoutSec" ,"paramtype": "int"},
+{ "paramname": "bAllowUseOfPacketRelay" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "CreateConnectionSocket",
+ "returntype": "SNetSocket_t",
+ "params": [
+{ "paramname": "nIP" ,"paramtype": "uint32"},
+{ "paramname": "nPort" ,"paramtype": "uint16"},
+{ "paramname": "nTimeoutSec" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "DestroySocket",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSocket" ,"paramtype": "SNetSocket_t"},
+{ "paramname": "bNotifyRemoteEnd" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "DestroyListenSocket",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSocket" ,"paramtype": "SNetListenSocket_t"},
+{ "paramname": "bNotifyRemoteEnd" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "SendDataOnSocket",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSocket" ,"paramtype": "SNetSocket_t"},
+{ "paramname": "pubData" ,"paramtype": "void *"},
+{ "paramname": "cubData" ,"paramtype": "uint32"},
+{ "paramname": "bReliable" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "IsDataAvailableOnSocket",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSocket" ,"paramtype": "SNetSocket_t"},
+{ "paramname": "pcubMsgSize" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "RetrieveDataFromSocket",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSocket" ,"paramtype": "SNetSocket_t"},
+{ "paramname": "pubDest" ,"paramtype": "void *"},
+{ "paramname": "cubDest" ,"paramtype": "uint32"},
+{ "paramname": "pcubMsgSize" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "IsDataAvailable",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hListenSocket" ,"paramtype": "SNetListenSocket_t"},
+{ "paramname": "pcubMsgSize" ,"paramtype": "uint32 *"},
+{ "paramname": "phSocket" ,"paramtype": "SNetSocket_t *"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "RetrieveData",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hListenSocket" ,"paramtype": "SNetListenSocket_t"},
+{ "paramname": "pubDest" ,"paramtype": "void *"},
+{ "paramname": "cubDest" ,"paramtype": "uint32"},
+{ "paramname": "pcubMsgSize" ,"paramtype": "uint32 *"},
+{ "paramname": "phSocket" ,"paramtype": "SNetSocket_t *"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "GetSocketInfo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hSocket" ,"paramtype": "SNetSocket_t"},
+{ "paramname": "pSteamIDRemote" ,"paramtype": "class CSteamID *"},
+{ "paramname": "peSocketStatus" ,"paramtype": "int *"},
+{ "paramname": "punIPRemote" ,"paramtype": "uint32 *"},
+{ "paramname": "punPortRemote" ,"paramtype": "uint16 *"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "GetListenSocketInfo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hListenSocket" ,"paramtype": "SNetListenSocket_t"},
+{ "paramname": "pnIP" ,"paramtype": "uint32 *"},
+{ "paramname": "pnPort" ,"paramtype": "uint16 *"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "GetSocketConnectionType",
+ "returntype": "ESNetSocketConnectionType",
+ "params": [
+{ "paramname": "hSocket" ,"paramtype": "SNetSocket_t"}
+ ]
+}
+,{
+ "classname": "ISteamNetworking",
+ "methodname": "GetMaxPacketSize",
+ "returntype": "int",
+ "params": [
+{ "paramname": "hSocket" ,"paramtype": "SNetSocket_t"}
+ ]
+}
+,{
+ "classname": "ISteamScreenshots",
+ "methodname": "WriteScreenshot",
+ "returntype": "ScreenshotHandle",
+ "params": [
+{ "paramname": "pubRGB" ,"paramtype": "void *"},
+{ "paramname": "cubRGB" ,"paramtype": "uint32"},
+{ "paramname": "nWidth" ,"paramtype": "int"},
+{ "paramname": "nHeight" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamScreenshots",
+ "methodname": "AddScreenshotToLibrary",
+ "returntype": "ScreenshotHandle",
+ "params": [
+{ "paramname": "pchFilename" ,"paramtype": "const char *"},
+{ "paramname": "pchThumbnailFilename" ,"paramtype": "const char *"},
+{ "paramname": "nWidth" ,"paramtype": "int"},
+{ "paramname": "nHeight" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamScreenshots",
+ "methodname": "TriggerScreenshot",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamScreenshots",
+ "methodname": "HookScreenshots",
+ "returntype": "void",
+ "params": [
+{ "paramname": "bHook" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamScreenshots",
+ "methodname": "SetLocation",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hScreenshot" ,"paramtype": "ScreenshotHandle"},
+{ "paramname": "pchLocation" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamScreenshots",
+ "methodname": "TagUser",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hScreenshot" ,"paramtype": "ScreenshotHandle"},
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamScreenshots",
+ "methodname": "TagPublishedFile",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hScreenshot" ,"paramtype": "ScreenshotHandle"},
+{ "paramname": "unPublishedFileID" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamScreenshots",
+ "methodname": "IsScreenshotsHooked",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamScreenshots",
+ "methodname": "AddVRScreenshotToLibrary",
+ "returntype": "ScreenshotHandle",
+ "params": [
+{ "paramname": "eType" ,"paramtype": "EVRScreenshotType"},
+{ "paramname": "pchFilename" ,"paramtype": "const char *"},
+{ "paramname": "pchVRFilename" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMusic",
+ "methodname": "BIsEnabled",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusic",
+ "methodname": "BIsPlaying",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusic",
+ "methodname": "GetPlaybackStatus",
+ "returntype": "AudioPlayback_Status"
+}
+,{
+ "classname": "ISteamMusic",
+ "methodname": "Play",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMusic",
+ "methodname": "Pause",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMusic",
+ "methodname": "PlayPrevious",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMusic",
+ "methodname": "PlayNext",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamMusic",
+ "methodname": "SetVolume",
+ "returntype": "void",
+ "params": [
+{ "paramname": "flVolume" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "ISteamMusic",
+ "methodname": "GetVolume",
+ "returntype": "float"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "RegisterSteamMusicRemote",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "DeregisterSteamMusicRemote",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "BIsCurrentMusicRemote",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "BActivationSuccess",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bValue" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "SetDisplayName",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchDisplayName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "SetPNGIcon_64x64",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pvBuffer" ,"paramtype": "void *"},
+{ "paramname": "cbBufferLength" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "EnablePlayPrevious",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bValue" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "EnablePlayNext",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bValue" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "EnableShuffled",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bValue" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "EnableLooped",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bValue" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "EnableQueue",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bValue" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "EnablePlaylists",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bValue" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "UpdatePlaybackStatus",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nStatus" ,"paramtype": "AudioPlayback_Status"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "UpdateShuffled",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bValue" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "UpdateLooped",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bValue" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "UpdateVolume",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "flValue" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "CurrentEntryWillChange",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "CurrentEntryIsAvailable",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bAvailable" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "UpdateCurrentEntryText",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchText" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "UpdateCurrentEntryElapsedSeconds",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nValue" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "UpdateCurrentEntryCoverArt",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pvBuffer" ,"paramtype": "void *"},
+{ "paramname": "cbBufferLength" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "CurrentEntryDidChange",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "QueueWillChange",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "ResetQueueEntries",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "SetQueueEntry",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nID" ,"paramtype": "int"},
+{ "paramname": "nPosition" ,"paramtype": "int"},
+{ "paramname": "pchEntryText" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "SetCurrentQueueEntry",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nID" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "QueueDidChange",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "PlaylistWillChange",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "ResetPlaylistEntries",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "SetPlaylistEntry",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nID" ,"paramtype": "int"},
+{ "paramname": "nPosition" ,"paramtype": "int"},
+{ "paramname": "pchEntryText" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "SetCurrentPlaylistEntry",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nID" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamMusicRemote",
+ "methodname": "PlaylistDidChange",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "CreateHTTPRequest",
+ "returntype": "HTTPRequestHandle",
+ "params": [
+{ "paramname": "eHTTPRequestMethod" ,"paramtype": "EHTTPMethod"},
+{ "paramname": "pchAbsoluteURL" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetHTTPRequestContextValue",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "ulContextValue" ,"paramtype": "uint64"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetHTTPRequestNetworkActivityTimeout",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "unTimeoutSeconds" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetHTTPRequestHeaderValue",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pchHeaderName" ,"paramtype": "const char *"},
+{ "paramname": "pchHeaderValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetHTTPRequestGetOrPostParameter",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pchParamName" ,"paramtype": "const char *"},
+{ "paramname": "pchParamValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SendHTTPRequest",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pCallHandle" ,"paramtype": "SteamAPICall_t *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SendHTTPRequestAndStreamResponse",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pCallHandle" ,"paramtype": "SteamAPICall_t *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "DeferHTTPRequest",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "PrioritizeHTTPRequest",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "GetHTTPResponseHeaderSize",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pchHeaderName" ,"paramtype": "const char *"},
+{ "paramname": "unResponseHeaderSize" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "GetHTTPResponseHeaderValue",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pchHeaderName" ,"paramtype": "const char *"},
+{ "paramname": "pHeaderValueBuffer" ,"paramtype": "uint8 *"},
+{ "paramname": "unBufferSize" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "GetHTTPResponseBodySize",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "unBodySize" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "GetHTTPResponseBodyData",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pBodyDataBuffer" ,"paramtype": "uint8 *"},
+{ "paramname": "unBufferSize" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "GetHTTPStreamingResponseBodyData",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "cOffset" ,"paramtype": "uint32"},
+{ "paramname": "pBodyDataBuffer" ,"paramtype": "uint8 *"},
+{ "paramname": "unBufferSize" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "ReleaseHTTPRequest",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "GetHTTPDownloadProgressPct",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pflPercentOut" ,"paramtype": "float *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetHTTPRequestRawPostBody",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pchContentType" ,"paramtype": "const char *"},
+{ "paramname": "pubBody" ,"paramtype": "uint8 *"},
+{ "paramname": "unBodyLen" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "CreateCookieContainer",
+ "returntype": "HTTPCookieContainerHandle",
+ "params": [
+{ "paramname": "bAllowResponsesToModify" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "ReleaseCookieContainer",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hCookieContainer" ,"paramtype": "HTTPCookieContainerHandle"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetCookie",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hCookieContainer" ,"paramtype": "HTTPCookieContainerHandle"},
+{ "paramname": "pchHost" ,"paramtype": "const char *"},
+{ "paramname": "pchUrl" ,"paramtype": "const char *"},
+{ "paramname": "pchCookie" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetHTTPRequestCookieContainer",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "hCookieContainer" ,"paramtype": "HTTPCookieContainerHandle"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetHTTPRequestUserAgentInfo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pchUserAgentInfo" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetHTTPRequestRequiresVerifiedCertificate",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "bRequireVerifiedCertificate" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "SetHTTPRequestAbsoluteTimeoutMS",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "unMilliseconds" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamHTTP",
+ "methodname": "GetHTTPRequestWasTimedOut",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hRequest" ,"paramtype": "HTTPRequestHandle"},
+{ "paramname": "pbWasTimedOut" ,"paramtype": "bool *"}
+ ]
+}
+,{
+ "classname": "ISteamUnifiedMessages",
+ "methodname": "SendMethod",
+ "returntype": "ClientUnifiedMessageHandle",
+ "params": [
+{ "paramname": "pchServiceMethod" ,"paramtype": "const char *"},
+{ "paramname": "pRequestBuffer" ,"paramtype": "const void *"},
+{ "paramname": "unRequestBufferSize" ,"paramtype": "uint32"},
+{ "paramname": "unContext" ,"paramtype": "uint64"}
+ ]
+}
+,{
+ "classname": "ISteamUnifiedMessages",
+ "methodname": "GetMethodResponseInfo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hHandle" ,"paramtype": "ClientUnifiedMessageHandle"},
+{ "paramname": "punResponseSize" ,"paramtype": "uint32 *"},
+{ "paramname": "peResult" ,"paramtype": "EResult *"}
+ ]
+}
+,{
+ "classname": "ISteamUnifiedMessages",
+ "methodname": "GetMethodResponseData",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hHandle" ,"paramtype": "ClientUnifiedMessageHandle"},
+{ "paramname": "pResponseBuffer" ,"paramtype": "void *"},
+{ "paramname": "unResponseBufferSize" ,"paramtype": "uint32"},
+{ "paramname": "bAutoRelease" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUnifiedMessages",
+ "methodname": "ReleaseMethod",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "hHandle" ,"paramtype": "ClientUnifiedMessageHandle"}
+ ]
+}
+,{
+ "classname": "ISteamUnifiedMessages",
+ "methodname": "SendNotification",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchServiceNotification" ,"paramtype": "const char *"},
+{ "paramname": "pNotificationBuffer" ,"paramtype": "const void *"},
+{ "paramname": "unNotificationBufferSize" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "Init",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "Shutdown",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "RunFrame",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetConnectedControllers",
+ "returntype": "int",
+ "params": [
+{ "paramname": "handlesOut" ,"paramtype": "ControllerHandle_t *"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "ShowBindingPanel",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetActionSetHandle",
+ "returntype": "ControllerActionSetHandle_t",
+ "params": [
+{ "paramname": "pszActionSetName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "ActivateActionSet",
+ "returntype": "void",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "actionSetHandle" ,"paramtype": "ControllerActionSetHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetCurrentActionSet",
+ "returntype": "ControllerActionSetHandle_t",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetDigitalActionHandle",
+ "returntype": "ControllerDigitalActionHandle_t",
+ "params": [
+{ "paramname": "pszActionName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetDigitalActionData",
+ "returntype": "struct ControllerDigitalActionData_t",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "digitalActionHandle" ,"paramtype": "ControllerDigitalActionHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetDigitalActionOrigins",
+ "returntype": "int",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "actionSetHandle" ,"paramtype": "ControllerActionSetHandle_t"},
+{ "paramname": "digitalActionHandle" ,"paramtype": "ControllerDigitalActionHandle_t"},
+{ "paramname": "originsOut" ,"paramtype": "EControllerActionOrigin *"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetAnalogActionHandle",
+ "returntype": "ControllerAnalogActionHandle_t",
+ "params": [
+{ "paramname": "pszActionName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetAnalogActionData",
+ "returntype": "struct ControllerAnalogActionData_t",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "analogActionHandle" ,"paramtype": "ControllerAnalogActionHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetAnalogActionOrigins",
+ "returntype": "int",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "actionSetHandle" ,"paramtype": "ControllerActionSetHandle_t"},
+{ "paramname": "analogActionHandle" ,"paramtype": "ControllerAnalogActionHandle_t"},
+{ "paramname": "originsOut" ,"paramtype": "EControllerActionOrigin *"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "StopAnalogActionMomentum",
+ "returntype": "void",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "eAction" ,"paramtype": "ControllerAnalogActionHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "TriggerHapticPulse",
+ "returntype": "void",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "eTargetPad" ,"paramtype": "ESteamControllerPad"},
+{ "paramname": "usDurationMicroSec" ,"paramtype": "unsigned short"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "TriggerRepeatedHapticPulse",
+ "returntype": "void",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "eTargetPad" ,"paramtype": "ESteamControllerPad"},
+{ "paramname": "usDurationMicroSec" ,"paramtype": "unsigned short"},
+{ "paramname": "usOffMicroSec" ,"paramtype": "unsigned short"},
+{ "paramname": "unRepeat" ,"paramtype": "unsigned short"},
+{ "paramname": "nFlags" ,"paramtype": "unsigned int"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "TriggerVibration",
+ "returntype": "void",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "usLeftSpeed" ,"paramtype": "unsigned short"},
+{ "paramname": "usRightSpeed" ,"paramtype": "unsigned short"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "SetLEDColor",
+ "returntype": "void",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "nColorR" ,"paramtype": "uint8"},
+{ "paramname": "nColorG" ,"paramtype": "uint8"},
+{ "paramname": "nColorB" ,"paramtype": "uint8"},
+{ "paramname": "nFlags" ,"paramtype": "unsigned int"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetGamepadIndexForController",
+ "returntype": "int",
+ "params": [
+{ "paramname": "ulControllerHandle" ,"paramtype": "ControllerHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetControllerForGamepadIndex",
+ "returntype": "ControllerHandle_t",
+ "params": [
+{ "paramname": "nIndex" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetMotionData",
+ "returntype": "struct ControllerMotionData_t",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "ShowDigitalActionOrigins",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "digitalActionHandle" ,"paramtype": "ControllerDigitalActionHandle_t"},
+{ "paramname": "flScale" ,"paramtype": "float"},
+{ "paramname": "flXPosition" ,"paramtype": "float"},
+{ "paramname": "flYPosition" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "ShowAnalogActionOrigins",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "controllerHandle" ,"paramtype": "ControllerHandle_t"},
+{ "paramname": "analogActionHandle" ,"paramtype": "ControllerAnalogActionHandle_t"},
+{ "paramname": "flScale" ,"paramtype": "float"},
+{ "paramname": "flXPosition" ,"paramtype": "float"},
+{ "paramname": "flYPosition" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetStringForActionOrigin",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "eOrigin" ,"paramtype": "EControllerActionOrigin"}
+ ]
+}
+,{
+ "classname": "ISteamController",
+ "methodname": "GetGlyphForActionOrigin",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "eOrigin" ,"paramtype": "EControllerActionOrigin"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "CreateQueryUserUGCRequest",
+ "returntype": "UGCQueryHandle_t",
+ "params": [
+{ "paramname": "unAccountID" ,"paramtype": "AccountID_t"},
+{ "paramname": "eListType" ,"paramtype": "EUserUGCList"},
+{ "paramname": "eMatchingUGCType" ,"paramtype": "EUGCMatchingUGCType"},
+{ "paramname": "eSortOrder" ,"paramtype": "EUserUGCListSortOrder"},
+{ "paramname": "nCreatorAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "nConsumerAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "unPage" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "CreateQueryAllUGCRequest",
+ "returntype": "UGCQueryHandle_t",
+ "params": [
+{ "paramname": "eQueryType" ,"paramtype": "EUGCQuery"},
+{ "paramname": "eMatchingeMatchingUGCTypeFileType" ,"paramtype": "EUGCMatchingUGCType"},
+{ "paramname": "nCreatorAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "nConsumerAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "unPage" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "CreateQueryUGCDetailsRequest",
+ "returntype": "UGCQueryHandle_t",
+ "params": [
+{ "paramname": "pvecPublishedFileID" ,"paramtype": "PublishedFileId_t *"},
+{ "paramname": "unNumPublishedFileIDs" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SendQueryUGCRequest", "callresult": "SteamUGCQueryCompleted_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetQueryUGCResult",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"},
+{ "paramname": "pDetails" ,"paramtype": "struct SteamUGCDetails_t *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetQueryUGCPreviewURL",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"},
+{ "paramname": "pchURL" ,"out_string_count": "cchURLSize" ,"paramtype": "char *"},
+{ "paramname": "cchURLSize" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetQueryUGCMetadata",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"},
+{ "paramname": "pchMetadata" ,"out_string_count": "cchMetadatasize" ,"paramtype": "char *"},
+{ "paramname": "cchMetadatasize" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetQueryUGCChildren",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"},
+{ "paramname": "pvecPublishedFileID" ,"paramtype": "PublishedFileId_t *"},
+{ "paramname": "cMaxEntries" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetQueryUGCStatistic",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"},
+{ "paramname": "eStatType" ,"paramtype": "EItemStatistic"},
+{ "paramname": "pStatValue" ,"paramtype": "uint64 *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetQueryUGCNumAdditionalPreviews",
+ "returntype": "uint32",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetQueryUGCAdditionalPreview",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"},
+{ "paramname": "previewIndex" ,"paramtype": "uint32"},
+{ "paramname": "pchURLOrVideoID" ,"out_string_count": "cchURLSize" ,"paramtype": "char *"},
+{ "paramname": "cchURLSize" ,"paramtype": "uint32"},
+{ "paramname": "pchOriginalFileName" ,"out_string_count": "cchURLSize" ,"paramtype": "char *"},
+{ "paramname": "cchOriginalFileNameSize" ,"paramtype": "uint32"},
+{ "paramname": "pPreviewType" ,"paramtype": "EItemPreviewType *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetQueryUGCNumKeyValueTags",
+ "returntype": "uint32",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetQueryUGCKeyValueTag",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"},
+{ "paramname": "keyValueTagIndex" ,"paramtype": "uint32"},
+{ "paramname": "pchKey" ,"out_string_count": "cchKeySize" ,"paramtype": "char *"},
+{ "paramname": "cchKeySize" ,"paramtype": "uint32"},
+{ "paramname": "pchValue" ,"out_string_count": "cchValueSize" ,"paramtype": "char *"},
+{ "paramname": "cchValueSize" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "ReleaseQueryUGCRequest",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "AddRequiredTag",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "pTagName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "AddExcludedTag",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "pTagName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetReturnOnlyIDs",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "bReturnOnlyIDs" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetReturnKeyValueTags",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "bReturnKeyValueTags" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetReturnLongDescription",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "bReturnLongDescription" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetReturnMetadata",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "bReturnMetadata" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetReturnChildren",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "bReturnChildren" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetReturnAdditionalPreviews",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "bReturnAdditionalPreviews" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetReturnTotalOnly",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "bReturnTotalOnly" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetReturnPlaytimeStats",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "unDays" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetLanguage",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "pchLanguage" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetAllowCachedResponse",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "unMaxAgeSeconds" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetCloudFileNameFilter",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "pMatchCloudFileName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetMatchAnyTag",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "bMatchAnyTag" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetSearchText",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "pSearchText" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetRankedByTrendDays",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "unDays" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "AddRequiredKeyValueTag",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCQueryHandle_t"},
+{ "paramname": "pKey" ,"paramtype": "const char *"},
+{ "paramname": "pValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "RequestUGCDetails",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"},
+{ "paramname": "unMaxAgeSeconds" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "CreateItem", "callresult": "CreateItemResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nConsumerAppId" ,"paramtype": "AppId_t"},
+{ "paramname": "eFileType" ,"paramtype": "EWorkshopFileType"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "StartItemUpdate",
+ "returntype": "UGCUpdateHandle_t",
+ "params": [
+{ "paramname": "nConsumerAppId" ,"paramtype": "AppId_t"},
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetItemTitle",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pchTitle" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetItemDescription",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pchDescription" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetItemUpdateLanguage",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pchLanguage" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetItemMetadata",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pchMetaData" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetItemVisibility",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "eVisibility" ,"paramtype": "ERemoteStoragePublishedFileVisibility"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetItemTags",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "updateHandle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pTags" ,"paramtype": "const struct SteamParamStringArray_t *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetItemContent",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pszContentFolder" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetItemPreview",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pszPreviewFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "RemoveItemKeyValueTags",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "AddItemKeyValueTag",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"},
+{ "paramname": "pchValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "AddItemPreviewFile",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pszPreviewFile" ,"paramtype": "const char *"},
+{ "paramname": "type" ,"paramtype": "EItemPreviewType"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "AddItemPreviewVideo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pszVideoID" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "UpdateItemPreviewFile",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"},
+{ "paramname": "pszPreviewFile" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "UpdateItemPreviewVideo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"},
+{ "paramname": "pszVideoID" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "RemoveItemPreview",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "index" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SubmitItemUpdate", "callresult": "SubmitItemUpdateResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "pchChangeNote" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetItemUpdateProgress",
+ "returntype": "EItemUpdateStatus",
+ "params": [
+{ "paramname": "handle" ,"paramtype": "UGCUpdateHandle_t"},
+{ "paramname": "punBytesProcessed" ,"paramtype": "uint64 *"},
+{ "paramname": "punBytesTotal" ,"paramtype": "uint64 *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SetUserItemVote", "callresult": "SetUserItemVoteResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"},
+{ "paramname": "bVoteUp" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetUserItemVote", "callresult": "GetUserItemVoteResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "AddItemToFavorites", "callresult": "UserFavoriteItemsListChanged_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nAppId" ,"paramtype": "AppId_t"},
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "RemoveItemFromFavorites", "callresult": "UserFavoriteItemsListChanged_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nAppId" ,"paramtype": "AppId_t"},
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SubscribeItem", "callresult": "RemoteStorageSubscribePublishedFileResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "UnsubscribeItem", "callresult": "RemoteStorageUnsubscribePublishedFileResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetNumSubscribedItems",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetSubscribedItems",
+ "returntype": "uint32",
+ "params": [
+{ "paramname": "pvecPublishedFileID" ,"paramtype": "PublishedFileId_t *"},
+{ "paramname": "cMaxEntries" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetItemState",
+ "returntype": "uint32",
+ "params": [
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetItemInstallInfo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"},
+{ "paramname": "punSizeOnDisk" ,"paramtype": "uint64 *"},
+{ "paramname": "pchFolder" ,"out_string_count": "cchFolderSize" ,"paramtype": "char *"},
+{ "paramname": "cchFolderSize" ,"paramtype": "uint32"},
+{ "paramname": "punTimeStamp" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "GetItemDownloadInfo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"},
+{ "paramname": "punBytesDownloaded" ,"paramtype": "uint64 *"},
+{ "paramname": "punBytesTotal" ,"paramtype": "uint64 *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "DownloadItem",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "nPublishedFileID" ,"paramtype": "PublishedFileId_t"},
+{ "paramname": "bHighPriority" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "BInitWorkshopForGameServer",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "unWorkshopDepotID" ,"paramtype": "DepotId_t"},
+{ "paramname": "pszFolder" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "SuspendDownloads",
+ "returntype": "void",
+ "params": [
+{ "paramname": "bSuspend" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "StartPlaytimeTracking", "callresult": "StartPlaytimeTrackingResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pvecPublishedFileID" ,"paramtype": "PublishedFileId_t *"},
+{ "paramname": "unNumPublishedFileIDs" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "StopPlaytimeTracking", "callresult": "StopPlaytimeTrackingResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pvecPublishedFileID" ,"paramtype": "PublishedFileId_t *"},
+{ "paramname": "unNumPublishedFileIDs" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "StopPlaytimeTrackingForAllItems", "callresult": "StopPlaytimeTrackingResult_t",
+ "returntype": "SteamAPICall_t"
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "AddDependency", "callresult": "AddUGCDependencyResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nParentPublishedFileID" ,"paramtype": "PublishedFileId_t"},
+{ "paramname": "nChildPublishedFileID" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamUGC",
+ "methodname": "RemoveDependency", "callresult": "RemoveUGCDependencyResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "nParentPublishedFileID" ,"paramtype": "PublishedFileId_t"},
+{ "paramname": "nChildPublishedFileID" ,"paramtype": "PublishedFileId_t"}
+ ]
+}
+,{
+ "classname": "ISteamAppList",
+ "methodname": "GetNumInstalledApps",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamAppList",
+ "methodname": "GetInstalledApps",
+ "returntype": "uint32",
+ "params": [
+{ "paramname": "pvecAppID" ,"paramtype": "AppId_t *"},
+{ "paramname": "unMaxAppIDs" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamAppList",
+ "methodname": "GetAppName",
+ "returntype": "int",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "pchName" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "cchNameMax" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamAppList",
+ "methodname": "GetAppInstallDir",
+ "returntype": "int",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "pchDirectory" ,"paramtype": "char *"},
+{ "paramname": "cchNameMax" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamAppList",
+ "methodname": "GetAppBuildId",
+ "returntype": "int",
+ "params": [
+{ "paramname": "nAppID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "DestructISteamHTMLSurface",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "Init",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "Shutdown",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "CreateBrowser", "callresult": "HTML_BrowserReady_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "pchUserAgent" ,"paramtype": "const char *"},
+{ "paramname": "pchUserCSS" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "RemoveBrowser",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "LoadURL",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "pchURL" ,"paramtype": "const char *"},
+{ "paramname": "pchPostData" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "SetSize",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "unWidth" ,"paramtype": "uint32"},
+{ "paramname": "unHeight" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "StopLoad",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "Reload",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "GoBack",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "GoForward",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "AddHeader",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"},
+{ "paramname": "pchValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "ExecuteJavascript",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "pchScript" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "MouseUp",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "eMouseButton" ,"paramtype": "ISteamHTMLSurface::EHTMLMouseButton"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "MouseDown",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "eMouseButton" ,"paramtype": "ISteamHTMLSurface::EHTMLMouseButton"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "MouseDoubleClick",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "eMouseButton" ,"paramtype": "ISteamHTMLSurface::EHTMLMouseButton"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "MouseMove",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "x" ,"paramtype": "int"},
+{ "paramname": "y" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "MouseWheel",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "nDelta" ,"paramtype": "int32"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "KeyDown",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "nNativeKeyCode" ,"paramtype": "uint32"},
+{ "paramname": "eHTMLKeyModifiers" ,"paramtype": "ISteamHTMLSurface::EHTMLKeyModifiers"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "KeyUp",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "nNativeKeyCode" ,"paramtype": "uint32"},
+{ "paramname": "eHTMLKeyModifiers" ,"paramtype": "ISteamHTMLSurface::EHTMLKeyModifiers"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "KeyChar",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "cUnicodeChar" ,"paramtype": "uint32"},
+{ "paramname": "eHTMLKeyModifiers" ,"paramtype": "ISteamHTMLSurface::EHTMLKeyModifiers"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "SetHorizontalScroll",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "nAbsolutePixelScroll" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "SetVerticalScroll",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "nAbsolutePixelScroll" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "SetKeyFocus",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "bHasKeyFocus" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "ViewSource",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "CopyToClipboard",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "PasteFromClipboard",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "Find",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "pchSearchStr" ,"paramtype": "const char *"},
+{ "paramname": "bCurrentlyInFind" ,"paramtype": "bool"},
+{ "paramname": "bReverse" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "StopFind",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "GetLinkAtPosition",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "x" ,"paramtype": "int"},
+{ "paramname": "y" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "SetCookie",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchHostname" ,"paramtype": "const char *"},
+{ "paramname": "pchKey" ,"paramtype": "const char *"},
+{ "paramname": "pchValue" ,"paramtype": "const char *"},
+{ "paramname": "pchPath" ,"paramtype": "const char *"},
+{ "paramname": "nExpires" ,"paramtype": "RTime32"},
+{ "paramname": "bSecure" ,"paramtype": "bool"},
+{ "paramname": "bHTTPOnly" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "SetPageScaleFactor",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "flZoom" ,"paramtype": "float"},
+{ "paramname": "nPointX" ,"paramtype": "int"},
+{ "paramname": "nPointY" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "SetBackgroundMode",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "bBackgroundMode" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "AllowStartRequest",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "bAllowed" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamHTMLSurface",
+ "methodname": "JSDialogResponse",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unBrowserHandle" ,"paramtype": "HHTMLBrowser"},
+{ "paramname": "bResult" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GetResultStatus", "desc": "Find out the status of an asynchronous inventory result handle.",
+ "returntype": "EResult",
+ "params": [
+{ "paramname": "resultHandle" ,"paramtype": "SteamInventoryResult_t"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GetResultItems", "desc": "Copies the contents of a result set into a flat array. The specific contents of the result set depend on which query which was used.",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "resultHandle" ,"paramtype": "SteamInventoryResult_t"},
+{ "paramname": "pOutItemsArray" ,"out_array_count": "punOutItemsArraySize" ,"desc": "Output array" ,"paramtype": "struct SteamItemDetails_t *"},
+{ "paramname": "punOutItemsArraySize" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GetResultItemProperty",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "resultHandle" ,"paramtype": "SteamInventoryResult_t"},
+{ "paramname": "unItemIndex" ,"paramtype": "uint32"},
+{ "paramname": "pchPropertyName" ,"paramtype": "const char *"},
+{ "paramname": "pchValueBuffer" ,"out_string_count": "punValueBufferSizeOut" ,"paramtype": "char *"},
+{ "paramname": "punValueBufferSizeOut" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GetResultTimestamp", "desc": "Returns the server time at which the result was generated. Compare against the value of IClientUtils::GetServerRealTime() to determine age.",
+ "returntype": "uint32",
+ "params": [
+{ "paramname": "resultHandle" ,"paramtype": "SteamInventoryResult_t"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "CheckResultSteamID", "desc": "Returns true if the result belongs to the target steam ID or false if the result does not. This is important when using DeserializeResult to verify that a remote player is not pretending to have a different users inventory.",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "resultHandle" ,"paramtype": "SteamInventoryResult_t"},
+{ "paramname": "steamIDExpected" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "DestroyResult", "desc": "Destroys a result handle and frees all associated memory.",
+ "returntype": "void",
+ "params": [
+{ "paramname": "resultHandle" ,"paramtype": "SteamInventoryResult_t"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GetAllItems", "desc": "Captures the entire state of the current users Steam inventory.",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GetItemsByID", "desc": "Captures the state of a subset of the current users Steam inventory identified by an array of item instance IDs.",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "pInstanceIDs" ,"array_count": "unCountInstanceIDs" ,"paramtype": "const SteamItemInstanceID_t *"},
+{ "paramname": "unCountInstanceIDs" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "SerializeResult",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "resultHandle" ,"paramtype": "SteamInventoryResult_t"},
+{ "paramname": "pOutBuffer" ,"out_buffer_count": "punOutBufferSize" ,"paramtype": "void *"},
+{ "paramname": "punOutBufferSize" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "DeserializeResult",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pOutResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "pBuffer" ,"buffer_count": "punOutBufferSize" ,"paramtype": "const void *"},
+{ "paramname": "unBufferSize" ,"paramtype": "uint32"},
+{ "paramname": "bRESERVED_MUST_BE_FALSE" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GenerateItems",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "pArrayItemDefs" ,"array_count": "unArrayLength" ,"paramtype": "const SteamItemDef_t *"},
+{ "paramname": "punArrayQuantity" ,"array_count": "unArrayLength" ,"paramtype": "const uint32 *"},
+{ "paramname": "unArrayLength" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GrantPromoItems", "desc": "GrantPromoItems() checks the list of promotional items for which the user may be eligible and grants the items (one time only).",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "AddPromoItem",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "itemDef" ,"paramtype": "SteamItemDef_t"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "AddPromoItems",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "pArrayItemDefs" ,"array_count": "unArrayLength" ,"paramtype": "const SteamItemDef_t *"},
+{ "paramname": "unArrayLength" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "ConsumeItem", "desc": "ConsumeItem() removes items from the inventory permanently.",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "itemConsume" ,"paramtype": "SteamItemInstanceID_t"},
+{ "paramname": "unQuantity" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "ExchangeItems",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "pArrayGenerate" ,"array_count": "unArrayGenerateLength" ,"paramtype": "const SteamItemDef_t *"},
+{ "paramname": "punArrayGenerateQuantity" ,"array_count": "unArrayGenerateLength" ,"paramtype": "const uint32 *"},
+{ "paramname": "unArrayGenerateLength" ,"paramtype": "uint32"},
+{ "paramname": "pArrayDestroy" ,"array_count": "unArrayDestroyLength" ,"paramtype": "const SteamItemInstanceID_t *"},
+{ "paramname": "punArrayDestroyQuantity" ,"array_count": "unArrayDestroyLength" ,"paramtype": "const uint32 *"},
+{ "paramname": "unArrayDestroyLength" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "TransferItemQuantity",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "itemIdSource" ,"paramtype": "SteamItemInstanceID_t"},
+{ "paramname": "unQuantity" ,"paramtype": "uint32"},
+{ "paramname": "itemIdDest" ,"paramtype": "SteamItemInstanceID_t"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "SendItemDropHeartbeat", "desc": "Deprecated method. Playtime accounting is performed on the Steam servers.",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "TriggerItemDrop", "desc": "Playtime credit must be consumed and turned into item drops by your game.",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "dropListDefinition" ,"paramtype": "SteamItemDef_t"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "TradeItems",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pResultHandle" ,"paramtype": "SteamInventoryResult_t *"},
+{ "paramname": "steamIDTradePartner" ,"paramtype": "class CSteamID"},
+{ "paramname": "pArrayGive" ,"array_count": "nArrayGiveLength" ,"paramtype": "const SteamItemInstanceID_t *"},
+{ "paramname": "pArrayGiveQuantity" ,"array_count": "nArrayGiveLength" ,"paramtype": "const uint32 *"},
+{ "paramname": "nArrayGiveLength" ,"paramtype": "uint32"},
+{ "paramname": "pArrayGet" ,"array_count": "nArrayGetLength" ,"paramtype": "const SteamItemInstanceID_t *"},
+{ "paramname": "pArrayGetQuantity" ,"array_count": "nArrayGetLength" ,"paramtype": "const uint32 *"},
+{ "paramname": "nArrayGetLength" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "LoadItemDefinitions", "desc": "LoadItemDefinitions triggers the automatic load and refresh of item definitions.",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GetItemDefinitionIDs",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pItemDefIDs" ,"out_array_count": "punItemDefIDsArraySize" ,"desc": "List of item definition IDs" ,"paramtype": "SteamItemDef_t *"},
+{ "paramname": "punItemDefIDsArraySize" ,"desc": "Size of array is passed in and actual size used is returned in this param" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GetItemDefinitionProperty",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "iDefinition" ,"paramtype": "SteamItemDef_t"},
+{ "paramname": "pchPropertyName" ,"paramtype": "const char *"},
+{ "paramname": "pchValueBuffer" ,"out_string_count": "punValueBufferSizeOut" ,"paramtype": "char *"},
+{ "paramname": "punValueBufferSizeOut" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "RequestEligiblePromoItemDefinitionsIDs", "callresult": "SteamInventoryEligiblePromoItemDefIDs_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamInventory",
+ "methodname": "GetEligiblePromoItemDefinitionIDs",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"},
+{ "paramname": "pItemDefIDs" ,"out_array_count": "punItemDefIDsArraySize" ,"desc": "List of item definition IDs" ,"paramtype": "SteamItemDef_t *"},
+{ "paramname": "punItemDefIDsArraySize" ,"desc": "Size of array is passed in and actual size used is returned in this param" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamVideo",
+ "methodname": "GetVideoURL",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unVideoAppID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamVideo",
+ "methodname": "IsBroadcasting",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pnNumViewers" ,"paramtype": "int *"}
+ ]
+}
+,{
+ "classname": "ISteamVideo",
+ "methodname": "GetOPFSettings", "callback": "GetOPFSettingsResult_t",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unVideoAppID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamVideo",
+ "methodname": "GetOPFStringForApp",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "unVideoAppID" ,"paramtype": "AppId_t"},
+{ "paramname": "pchBuffer" ,"paramtype": "char *"},
+{ "paramname": "pnBufferSize" ,"paramtype": "int32 *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "InitGameServer",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "unIP" ,"paramtype": "uint32"},
+{ "paramname": "usGamePort" ,"paramtype": "uint16"},
+{ "paramname": "usQueryPort" ,"paramtype": "uint16"},
+{ "paramname": "unFlags" ,"paramtype": "uint32"},
+{ "paramname": "nGameAppId" ,"paramtype": "AppId_t"},
+{ "paramname": "pchVersionString" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetProduct",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pszProduct" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetGameDescription",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pszGameDescription" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetModDir",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pszModDir" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetDedicatedServer",
+ "returntype": "void",
+ "params": [
+{ "paramname": "bDedicated" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "LogOn",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pszToken" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "LogOnAnonymous",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "LogOff",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "BLoggedOn",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "BSecure",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "GetSteamID",
+ "returntype": "class CSteamID"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "WasRestartRequested",
+ "returntype": "bool"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetMaxPlayerCount",
+ "returntype": "void",
+ "params": [
+{ "paramname": "cPlayersMax" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetBotPlayerCount",
+ "returntype": "void",
+ "params": [
+{ "paramname": "cBotplayers" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetServerName",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pszServerName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetMapName",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pszMapName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetPasswordProtected",
+ "returntype": "void",
+ "params": [
+{ "paramname": "bPasswordProtected" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetSpectatorPort",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unSpectatorPort" ,"paramtype": "uint16"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetSpectatorServerName",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pszSpectatorServerName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "ClearAllKeyValues",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetKeyValue",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pKey" ,"paramtype": "const char *"},
+{ "paramname": "pValue" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetGameTags",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchGameTags" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetGameData",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchGameData" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetRegion",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pszRegion" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SendUserConnectAndAuthenticate",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "unIPClient" ,"paramtype": "uint32"},
+{ "paramname": "pvAuthBlob" ,"paramtype": "const void *"},
+{ "paramname": "cubAuthBlobSize" ,"paramtype": "uint32"},
+{ "paramname": "pSteamIDUser" ,"paramtype": "class CSteamID *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "CreateUnauthenticatedUserConnection",
+ "returntype": "class CSteamID"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SendUserDisconnect",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "BUpdateUserData",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchPlayerName" ,"paramtype": "const char *"},
+{ "paramname": "uScore" ,"paramtype": "uint32"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "GetAuthSessionTicket",
+ "returntype": "HAuthTicket",
+ "params": [
+{ "paramname": "pTicket" ,"paramtype": "void *"},
+{ "paramname": "cbMaxTicket" ,"paramtype": "int"},
+{ "paramname": "pcbTicket" ,"paramtype": "uint32 *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "BeginAuthSession",
+ "returntype": "EBeginAuthSessionResult",
+ "params": [
+{ "paramname": "pAuthTicket" ,"paramtype": "const void *"},
+{ "paramname": "cbAuthTicket" ,"paramtype": "int"},
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "EndAuthSession",
+ "returntype": "void",
+ "params": [
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "CancelAuthTicket",
+ "returntype": "void",
+ "params": [
+{ "paramname": "hAuthTicket" ,"paramtype": "HAuthTicket"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "UserHasLicenseForApp",
+ "returntype": "EUserHasLicenseForAppResult",
+ "params": [
+{ "paramname": "steamID" ,"paramtype": "class CSteamID"},
+{ "paramname": "appID" ,"paramtype": "AppId_t"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "RequestUserGroupStatus",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "steamIDGroup" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "GetGameplayStats",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "GetServerReputation", "callresult": "GSReputation_t",
+ "returntype": "SteamAPICall_t"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "GetPublicIP",
+ "returntype": "uint32"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "HandleIncomingPacket",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pData" ,"paramtype": "const void *"},
+{ "paramname": "cbData" ,"paramtype": "int"},
+{ "paramname": "srcIP" ,"paramtype": "uint32"},
+{ "paramname": "srcPort" ,"paramtype": "uint16"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "GetNextOutgoingPacket",
+ "returntype": "int",
+ "params": [
+{ "paramname": "pOut" ,"paramtype": "void *"},
+{ "paramname": "cbMaxOut" ,"paramtype": "int"},
+{ "paramname": "pNetAdr" ,"paramtype": "uint32 *"},
+{ "paramname": "pPort" ,"paramtype": "uint16 *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "EnableHeartbeats",
+ "returntype": "void",
+ "params": [
+{ "paramname": "bActive" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "SetHeartbeatInterval",
+ "returntype": "void",
+ "params": [
+{ "paramname": "iHeartbeatInterval" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "ForceHeartbeat",
+ "returntype": "void"
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "AssociateWithClan", "callresult": "AssociateWithClanResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamIDClan" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamGameServer",
+ "methodname": "ComputeNewPlayerCompatibility", "callresult": "ComputeNewPlayerCompatibilityResult_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamIDNewPlayer" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "RequestUserStats", "callresult": "GSStatsReceived_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "GetUserStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"paramtype": "int32 *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "GetUserStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pData" ,"paramtype": "float *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "GetUserAchievement",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "pbAchieved" ,"paramtype": "bool *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "SetUserStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "nData" ,"paramtype": "int32"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "SetUserStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "fData" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "UpdateUserAvgRateStat",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"},
+{ "paramname": "flCountThisSession" ,"paramtype": "float"},
+{ "paramname": "dSessionLength" ,"paramtype": "double"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "SetUserAchievement",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "ClearUserAchievement",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"},
+{ "paramname": "pchName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "ISteamGameServerStats",
+ "methodname": "StoreUserStats", "callresult": "GSStatsStored_t",
+ "returntype": "SteamAPICall_t",
+ "params": [
+{ "paramname": "steamIDUser" ,"paramtype": "class CSteamID"}
+ ]
+}
+]
+} \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_140/steam_api_flat.h b/lsteamclient/steamworks_sdk_140/steam_api_flat.h
new file mode 100644
index 00000000..aca8cbde
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/steam_api_flat.h
@@ -0,0 +1,816 @@
+//====== Copyright (c) 1996-2014, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Header for flatted SteamAPI. Use this for binding to other languages.
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+#ifndef STEAMAPIFLAT_H
+#define STEAMAPIFLAT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <stdint.h>
+
+
+typedef unsigned char uint8;
+typedef unsigned char uint8;
+typedef signed char int8;
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+typedef int64 lint64;
+typedef uint64 ulint64;
+typedef uint8 Salt_t[8];
+typedef uint64 GID_t;
+typedef uint64 JobID_t;
+typedef GID_t TxnID_t;
+typedef uint32 PackageId_t;
+typedef uint32 BundleId_t;
+typedef uint32 AppId_t;
+typedef uint64 AssetClassId_t;
+typedef uint32 PhysicalItemId_t;
+typedef uint32 DepotId_t;
+typedef uint32 RTime32;
+typedef uint32 CellID_t;
+typedef uint64 SteamAPICall_t;
+typedef uint32 AccountID_t;
+typedef uint32 PartnerId_t;
+typedef uint64 ManifestId_t;
+typedef uint32 HAuthTicket;
+typedef void * BREAKPAD_HANDLE;
+typedef char compile_time_assert_type[1];
+typedef int32 HSteamPipe;
+typedef int32 HSteamUser;
+typedef int16 FriendsGroupID_t;
+typedef void * HServerListRequest;
+typedef int HServerQuery;
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+typedef uint64 UGCFileWriteStreamHandle_t;
+typedef char compile_time_assert_type[1];
+typedef uint64 SteamLeaderboard_t;
+typedef uint64 SteamLeaderboardEntries_t;
+typedef uint32 SNetSocket_t;
+typedef uint32 SNetListenSocket_t;
+typedef uint32 ScreenshotHandle;
+typedef uint32 HTTPRequestHandle;
+typedef uint32 HTTPCookieContainerHandle;
+typedef uint64 ClientUnifiedMessageHandle;
+typedef uint64 ControllerHandle_t;
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+typedef uint32 HHTMLBrowser;
+typedef uint64 SteamItemInstanceID_t;
+typedef int32 SteamItemDef_t;
+typedef int32 SteamInventoryResult_t;
+// OpenVR Constants
+int const_k_iSteamUserCallbacks = 100;
+int const_k_iSteamGameServerCallbacks = 200;
+int const_k_iSteamFriendsCallbacks = 300;
+int const_k_iSteamBillingCallbacks = 400;
+int const_k_iSteamMatchmakingCallbacks = 500;
+int const_k_iSteamContentServerCallbacks = 600;
+int const_k_iSteamUtilsCallbacks = 700;
+int const_k_iClientFriendsCallbacks = 800;
+int const_k_iClientUserCallbacks = 900;
+int const_k_iSteamAppsCallbacks = 1000;
+int const_k_iSteamUserStatsCallbacks = 1100;
+int const_k_iSteamNetworkingCallbacks = 1200;
+int const_k_iClientRemoteStorageCallbacks = 1300;
+int const_k_iClientDepotBuilderCallbacks = 1400;
+int const_k_iSteamGameServerItemsCallbacks = 1500;
+int const_k_iClientUtilsCallbacks = 1600;
+int const_k_iSteamGameCoordinatorCallbacks = 1700;
+int const_k_iSteamGameServerStatsCallbacks = 1800;
+int const_k_iSteam2AsyncCallbacks = 1900;
+int const_k_iSteamGameStatsCallbacks = 2000;
+int const_k_iClientHTTPCallbacks = 2100;
+int const_k_iClientScreenshotsCallbacks = 2200;
+int const_k_iSteamScreenshotsCallbacks = 2300;
+int const_k_iClientAudioCallbacks = 2400;
+int const_k_iClientUnifiedMessagesCallbacks = 2500;
+int const_k_iSteamStreamLauncherCallbacks = 2600;
+int const_k_iClientControllerCallbacks = 2700;
+int const_k_iSteamControllerCallbacks = 2800;
+int const_k_iClientParentalSettingsCallbacks = 2900;
+int const_k_iClientDeviceAuthCallbacks = 3000;
+int const_k_iClientNetworkDeviceManagerCallbacks = 3100;
+int const_k_iClientMusicCallbacks = 3200;
+int const_k_iClientRemoteClientManagerCallbacks = 3300;
+int const_k_iClientUGCCallbacks = 3400;
+int const_k_iSteamStreamClientCallbacks = 3500;
+int const_k_IClientProductBuilderCallbacks = 3600;
+int const_k_iClientShortcutsCallbacks = 3700;
+int const_k_iClientRemoteControlManagerCallbacks = 3800;
+int const_k_iSteamAppListCallbacks = 3900;
+int const_k_iSteamMusicCallbacks = 4000;
+int const_k_iSteamMusicRemoteCallbacks = 4100;
+int const_k_iClientVRCallbacks = 4200;
+int const_k_iClientGameNotificationCallbacks = 4300;
+int const_k_iSteamGameNotificationCallbacks = 4400;
+int const_k_iSteamHTMLSurfaceCallbacks = 4500;
+int const_k_iClientVideoCallbacks = 4600;
+int const_k_iClientInventoryCallbacks = 4700;
+int const_k_iClientBluetoothManagerCallbacks = 4800;
+int const_k_cchPersonaNameMax = 128;
+int const_k_cwchPersonaNameMax = 32;
+int const_k_cchMaxRichPresenceKeys = 20;
+int const_k_cchMaxRichPresenceKeyLength = 64;
+int const_k_cchMaxRichPresenceValueLength = 256;
+int const_k_cchStatNameMax = 128;
+int const_k_cchLeaderboardNameMax = 128;
+int const_k_cLeaderboardDetailsMax = 64;
+unsigned long const_k_InvalidUnifiedMessageHandle = 0;
+unsigned long const_k_SteamItemInstanceIDInvalid = 0xffffffff;
+int const_k_SteamInventoryResultInvalid = -1;
+
+
+
+// OpenVR Enums
+// OpenVR Structs
+
+
+
+S_API HSteamPipe SteamAPI_ISteamClient_CreateSteamPipe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamClient_BReleaseSteamPipe(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_ConnectToGlobalUser(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_CreateLocalUser(intptr_t instancePtr, HSteamPipe * phSteamPipe, EAccountType eAccountType);
+S_API void SteamAPI_ISteamClient_ReleaseUser(intptr_t instancePtr, HSteamPipe hSteamPipe, HSteamUser hUser);
+S_API class ISteamUser * SteamAPI_ISteamClient_GetISteamUser(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServer * SteamAPI_ISteamClient_GetISteamGameServer(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_SetLocalIPBinding(intptr_t instancePtr, uint32 unIP, uint16 usPort);
+S_API class ISteamFriends * SteamAPI_ISteamClient_GetISteamFriends(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUtils * SteamAPI_ISteamClient_GetISteamUtils(intptr_t instancePtr, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmaking * SteamAPI_ISteamClient_GetISteamMatchmaking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmakingServers * SteamAPI_ISteamClient_GetISteamMatchmakingServers(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void * SteamAPI_ISteamClient_GetISteamGenericInterface(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUserStats * SteamAPI_ISteamClient_GetISteamUserStats(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServerStats * SteamAPI_ISteamClient_GetISteamGameServerStats(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamApps * SteamAPI_ISteamClient_GetISteamApps(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamNetworking * SteamAPI_ISteamClient_GetISteamNetworking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamRemoteStorage * SteamAPI_ISteamClient_GetISteamRemoteStorage(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamScreenshots * SteamAPI_ISteamClient_GetISteamScreenshots(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API uint32 SteamAPI_ISteamClient_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamClient_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(intptr_t instancePtr);
+S_API class ISteamHTTP * SteamAPI_ISteamClient_GetISteamHTTP(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUnifiedMessages * SteamAPI_ISteamClient_GetISteamUnifiedMessages(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamController * SteamAPI_ISteamClient_GetISteamController(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUGC * SteamAPI_ISteamClient_GetISteamUGC(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamAppList * SteamAPI_ISteamClient_GetISteamAppList(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusic * SteamAPI_ISteamClient_GetISteamMusic(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusicRemote * SteamAPI_ISteamClient_GetISteamMusicRemote(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamHTMLSurface * SteamAPI_ISteamClient_GetISteamHTMLSurface(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamInventory * SteamAPI_ISteamClient_GetISteamInventory(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamVideo * SteamAPI_ISteamClient_GetISteamVideo(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API HSteamUser SteamAPI_ISteamUser_GetHSteamUser(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BLoggedOn(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamUser_GetSteamID(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUser_InitiateGameConnection(intptr_t instancePtr, void * pAuthBlob, int cbMaxAuthBlob, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure);
+S_API void SteamAPI_ISteamUser_TerminateGameConnection(intptr_t instancePtr, uint32 unIPServer, uint16 usPortServer);
+S_API void SteamAPI_ISteamUser_TrackAppUsageEvent(intptr_t instancePtr, class CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo);
+S_API bool SteamAPI_ISteamUser_GetUserDataFolder(intptr_t instancePtr, char * pchBuffer, int cubBuffer);
+S_API void SteamAPI_ISteamUser_StartVoiceRecording(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_StopVoiceRecording(intptr_t instancePtr);
+S_API EVoiceResult SteamAPI_ISteamUser_GetAvailableVoice(intptr_t instancePtr, uint32 * pcbCompressed, uint32 * pcbUncompressed_Deprecated, uint32 nUncompressedVoiceDesiredSampleRate_Deprecated);
+S_API EVoiceResult SteamAPI_ISteamUser_GetVoice(intptr_t instancePtr, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed_Deprecated, void * pUncompressedDestBuffer_Deprecated, uint32 cbUncompressedDestBufferSize_Deprecated, uint32 * nUncompressBytesWritten_Deprecated, uint32 nUncompressedVoiceDesiredSampleRate_Deprecated);
+S_API EVoiceResult SteamAPI_ISteamUser_DecompressVoice(intptr_t instancePtr, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate);
+S_API uint32 SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(intptr_t instancePtr);
+S_API HAuthTicket SteamAPI_ISteamUser_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamUser_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamUser_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamUser_BIsBehindNAT(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_AdvertiseGame(intptr_t instancePtr, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestEncryptedAppTicket(intptr_t instancePtr, void * pDataToInclude, int cbDataToInclude);
+S_API bool SteamAPI_ISteamUser_GetEncryptedAppTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API int SteamAPI_ISteamUser_GetGameBadgeLevel(intptr_t instancePtr, int nSeries, bool bFoil);
+S_API int SteamAPI_ISteamUser_GetPlayerSteamLevel(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestStoreAuthURL(intptr_t instancePtr, const char * pchRedirectURL);
+S_API bool SteamAPI_ISteamUser_BIsPhoneVerified(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsTwoFactorEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsPhoneIdentifying(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsPhoneRequiringVerification(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetPersonaName(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_SetPersonaName(intptr_t instancePtr, const char * pchPersonaName);
+S_API EPersonaState SteamAPI_ISteamFriends_GetPersonaState(intptr_t instancePtr);
+S_API int SteamAPI_ISteamFriends_GetFriendCount(intptr_t instancePtr, int iFriendFlags);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendByIndex(intptr_t instancePtr, int iFriend, int iFriendFlags);
+S_API EFriendRelationship SteamAPI_ISteamFriends_GetFriendRelationship(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API EPersonaState SteamAPI_ISteamFriends_GetFriendPersonaState(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaName(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_GetFriendGamePlayed(intptr_t instancePtr, class CSteamID steamIDFriend, struct FriendGameInfo_t * pFriendGameInfo);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(intptr_t instancePtr, class CSteamID steamIDFriend, int iPersonaName);
+S_API int SteamAPI_ISteamFriends_GetFriendSteamLevel(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetPlayerNickname(intptr_t instancePtr, class CSteamID steamIDPlayer);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupCount(intptr_t instancePtr);
+S_API FriendsGroupID_t SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(intptr_t instancePtr, int iFG);
+S_API const char * SteamAPI_ISteamFriends_GetFriendsGroupName(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API void SteamAPI_ISteamFriends_GetFriendsGroupMembersList(intptr_t instancePtr, FriendsGroupID_t friendsGroupID, class CSteamID * pOutSteamIDMembers, int nMembersCount);
+S_API bool SteamAPI_ISteamFriends_HasFriend(intptr_t instancePtr, class CSteamID steamIDFriend, int iFriendFlags);
+S_API int SteamAPI_ISteamFriends_GetClanCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetClanByIndex(intptr_t instancePtr, int iClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanName(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanTag(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_GetClanActivityCounts(intptr_t instancePtr, class CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_DownloadClanActivityCounts(intptr_t instancePtr, class CSteamID * psteamIDClans, int cClansToRequest);
+S_API int SteamAPI_ISteamFriends_GetFriendCountFromSource(intptr_t instancePtr, class CSteamID steamIDSource);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(intptr_t instancePtr, class CSteamID steamIDSource, int iFriend);
+S_API bool SteamAPI_ISteamFriends_IsUserInSource(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDSource);
+S_API void SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(intptr_t instancePtr, class CSteamID steamIDUser, bool bSpeaking);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlay(intptr_t instancePtr, const char * pchDialog);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToUser(intptr_t instancePtr, const char * pchDialog, class CSteamID steamID);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(intptr_t instancePtr, const char * pchURL);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToStore(intptr_t instancePtr, AppId_t nAppID, EOverlayToStoreFlag eFlag);
+S_API void SteamAPI_ISteamFriends_SetPlayedWith(intptr_t instancePtr, class CSteamID steamIDUserPlayedWith);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API int SteamAPI_ISteamFriends_GetSmallFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetMediumFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetLargeFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_RequestUserInformation(intptr_t instancePtr, class CSteamID steamIDUser, bool bRequireNameOnly);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_RequestClanOfficerList(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOwner(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanOfficerCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOfficerByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iOfficer);
+S_API uint32 SteamAPI_ISteamFriends_GetUserRestrictions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamFriends_SetRichPresence(intptr_t instancePtr, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamFriends_ClearRichPresence(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchKey);
+S_API int SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(intptr_t instancePtr, class CSteamID steamIDFriend, int iKey);
+S_API void SteamAPI_ISteamFriends_RequestFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_InviteUserToGame(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchConnectString);
+S_API int SteamAPI_ISteamFriends_GetCoplayFriendCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetCoplayFriend(intptr_t instancePtr, int iCoplayFriend);
+S_API int SteamAPI_ISteamFriends_GetFriendCoplayTime(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API AppId_t SteamAPI_ISteamFriends_GetFriendCoplayGame(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_JoinClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_LeaveClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanChatMemberCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetChatMemberByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iUser);
+S_API bool SteamAPI_ISteamFriends_SendClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, const char * pchText);
+S_API int SteamAPI_ISteamFriends_GetClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, class CSteamID * psteamidChatter);
+S_API bool SteamAPI_ISteamFriends_IsClanChatAdmin(intptr_t instancePtr, class CSteamID steamIDClanChat, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_SetListenForFriendsMessages(intptr_t instancePtr, bool bInterceptEnabled);
+S_API bool SteamAPI_ISteamFriends_ReplyToFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchMsgToSend);
+S_API int SteamAPI_ISteamFriends_GetFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_GetFollowerCount(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_IsFollowing(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_EnumerateFollowingList(intptr_t instancePtr, uint32 unStartIndex);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceAppActive(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(intptr_t instancePtr);
+S_API EUniverse SteamAPI_ISteamUtils_GetConnectedUniverse(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetServerRealTime(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUtils_GetIPCountry(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetImageSize(intptr_t instancePtr, int iImage, uint32 * pnWidth, uint32 * pnHeight);
+S_API bool SteamAPI_ISteamUtils_GetImageRGBA(intptr_t instancePtr, int iImage, uint8 * pubDest, int nDestBufferSize);
+S_API bool SteamAPI_ISteamUtils_GetCSERIPPort(intptr_t instancePtr, uint32 * unIP, uint16 * usPort);
+S_API uint8 SteamAPI_ISteamUtils_GetCurrentBatteryPower(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetAppID(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationPosition(intptr_t instancePtr, ENotificationPosition eNotificationPosition);
+S_API bool SteamAPI_ISteamUtils_IsAPICallCompleted(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, bool * pbFailed);
+S_API ESteamAPICallFailure SteamAPI_ISteamUtils_GetAPICallFailureReason(intptr_t instancePtr, SteamAPICall_t hSteamAPICall);
+S_API bool SteamAPI_ISteamUtils_GetAPICallResult(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed);
+S_API uint32 SteamAPI_ISteamUtils_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamUtils_IsOverlayEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_BOverlayNeedsPresent(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUtils_CheckFileSignature(intptr_t instancePtr, const char * szFileName);
+S_API bool SteamAPI_ISteamUtils_ShowGamepadTextInput(intptr_t instancePtr, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText);
+S_API uint32 SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(intptr_t instancePtr, char * pchText, uint32 cchText);
+S_API const char * SteamAPI_ISteamUtils_GetSteamUILanguage(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_IsSteamRunningInVR(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationInset(intptr_t instancePtr, int nHorizontalInset, int nVerticalInset);
+S_API bool SteamAPI_ISteamUtils_IsSteamInBigPictureMode(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_StartVRDashboard(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_IsVRHeadsetStreamingEnabled(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetVRHeadsetStreamingEnabled(intptr_t instancePtr, bool bEnabled);
+S_API int SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMatchmaking_GetFavoriteGame(intptr_t instancePtr, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer);
+S_API int SteamAPI_ISteamMatchmaking_AddFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer);
+S_API bool SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_RequestLobbyList(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(intptr_t instancePtr, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToBeCloseTo);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(intptr_t instancePtr, int nSlotsAvailable);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(intptr_t instancePtr, ELobbyDistanceFilter eLobbyDistanceFilter);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(intptr_t instancePtr, int cMaxResults);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyByIndex(intptr_t instancePtr, int iLobby);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_CreateLobby(intptr_t instancePtr, ELobbyType eLobbyType, int cMaxMembers);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_JoinLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_LeaveLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_InviteUserToLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDInvitee);
+S_API int SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iMember);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyDataCount(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize);
+S_API bool SteamAPI_ISteamMatchmaking_DeleteLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDUser, const char * pchKey);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(intptr_t instancePtr, class CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(intptr_t instancePtr, class CSteamID steamIDLobby, int iChatID, class CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API bool SteamAPI_ISteamMatchmaking_RequestLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, class CSteamID steamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, class CSteamID * psteamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby, int cMaxMembers);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyType(intptr_t instancePtr, class CSteamID steamIDLobby, ELobbyType eLobbyType);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyJoinable(intptr_t instancePtr, class CSteamID steamIDLobby, bool bLobbyJoinable);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDNewOwner);
+S_API bool SteamAPI_ISteamMatchmaking_SetLinkedLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDLobbyDependent);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(intptr_t instancePtr, HServerListRequest hRequest, EMatchMakingServerResponse response);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(intptr_t instancePtr, class gameserveritem_t & server);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(intptr_t instancePtr, const char * pchName, int nScore, float flTimePlayed);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(intptr_t instancePtr, const char * pchRule, const char * pchValue);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(intptr_t instancePtr);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestLANServerList(intptr_t instancePtr, AppId_t iApp, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_ReleaseRequest(intptr_t instancePtr, HServerListRequest hServerListRequest);
+S_API class gameserveritem_t * SteamAPI_ISteamMatchmakingServers_GetServerDetails(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API bool SteamAPI_ISteamMatchmakingServers_IsRefreshing(intptr_t instancePtr, HServerListRequest hRequest);
+S_API int SteamAPI_ISteamMatchmakingServers_GetServerCount(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshServer(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PingServer(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPingResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PlayerDetails(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPlayersResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_ServerRules(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingRulesResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelServerQuery(intptr_t instancePtr, HServerQuery hServerQuery);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWrite(intptr_t instancePtr, const char * pchFile, const void * pvData, int32 cubData);
+S_API int32 SteamAPI_ISteamRemoteStorage_FileRead(intptr_t instancePtr, const char * pchFile, void * pvData, int32 cubDataToRead);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileWriteAsync(intptr_t instancePtr, const char * pchFile, const void * pvData, uint32 cubData);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileReadAsync(intptr_t instancePtr, const char * pchFile, uint32 nOffset, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileReadAsyncComplete(intptr_t instancePtr, SteamAPICall_t hReadCall, void * pvBuffer, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileForget(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileDelete(intptr_t instancePtr, const char * pchFile);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileShare(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(intptr_t instancePtr, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform);
+S_API UGCFileWriteStreamHandle_t SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileExists(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FilePersisted(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileSize(intptr_t instancePtr, const char * pchFile);
+S_API int64 SteamAPI_ISteamRemoteStorage_GetFileTimestamp(intptr_t instancePtr, const char * pchFile);
+S_API ERemoteStoragePlatform SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileCount(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(intptr_t instancePtr, int iFile, int32 * pnFileSizeInBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_GetQuota(intptr_t instancePtr, uint64 * pnTotalBytes, uint64 * puAvailableBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(intptr_t instancePtr);
+S_API void SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(intptr_t instancePtr, bool bEnabled);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownload(intptr_t instancePtr, UGCHandle_t hContent, uint32 unPriority);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(intptr_t instancePtr, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDetails(intptr_t instancePtr, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, class CSteamID * pSteamIDOwner);
+S_API int32 SteamAPI_ISteamRemoteStorage_UGCRead(intptr_t instancePtr, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(intptr_t instancePtr);
+S_API UGCHandle_t SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(intptr_t instancePtr, int32 iCachedContent);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(intptr_t instancePtr, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType);
+S_API PublishedFileUpdateHandle_t SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_DeletePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(intptr_t instancePtr, class CSteamID steamId, uint32 unStartIndex, struct SteamParamStringArray_t * pRequiredTags, struct SteamParamStringArray_t * pExcludedTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishVideo(intptr_t instancePtr, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(intptr_t instancePtr, EWorkshopFileAction eAction, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(intptr_t instancePtr, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, struct SteamParamStringArray_t * pTags, struct SteamParamStringArray_t * pUserTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(intptr_t instancePtr, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority);
+S_API bool SteamAPI_ISteamUserStats_RequestCurrentStats(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUserStats_GetStat(intptr_t instancePtr, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetStat0(intptr_t instancePtr, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_SetStat(intptr_t instancePtr, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamUserStats_SetStat0(intptr_t instancePtr, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamUserStats_UpdateAvgRateStat(intptr_t instancePtr, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamUserStats_GetAchievement(intptr_t instancePtr, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_SetAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_ClearAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(intptr_t instancePtr, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_StoreStats(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetAchievementIcon(intptr_t instancePtr, const char * pchName);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(intptr_t instancePtr, const char * pchName, const char * pchKey);
+S_API bool SteamAPI_ISteamUserStats_IndicateAchievementProgress(intptr_t instancePtr, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress);
+S_API uint32 SteamAPI_ISteamUserStats_GetNumAchievements(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementName(intptr_t instancePtr, uint32 iAchievement);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_ResetAllStats(intptr_t instancePtr, bool bAchievementsToo);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName);
+S_API const char * SteamAPI_ISteamUserStats_GetLeaderboardName(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API int SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardSortMethod SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardDisplayType SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, class CSteamID * prgUsers, int cUsers);
+S_API bool SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(intptr_t instancePtr, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, struct LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_UploadLeaderboardScore(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_AttachLeaderboardUGC(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(intptr_t instancePtr, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API int SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(intptr_t instancePtr, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(intptr_t instancePtr, const char * pchName, float * pflPercent);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalStats(intptr_t instancePtr, int nHistoryDays);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat(intptr_t instancePtr, const char * pchStatName, int64 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat0(intptr_t instancePtr, const char * pchStatName, double * pData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory(intptr_t instancePtr, const char * pchStatName, int64 * pData, uint32 cubData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory0(intptr_t instancePtr, const char * pchStatName, double * pData, uint32 cubData);
+S_API bool SteamAPI_ISteamApps_BIsSubscribed(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsLowViolence(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsCybercafe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsVACBanned(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetCurrentGameLanguage(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetAvailableGameLanguages(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedApp(intptr_t instancePtr, AppId_t appID);
+S_API bool SteamAPI_ISteamApps_BIsDlcInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint32 SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(intptr_t instancePtr);
+S_API int SteamAPI_ISteamApps_GetDLCCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BGetDLCDataByIndex(intptr_t instancePtr, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize);
+S_API void SteamAPI_ISteamApps_InstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_UninstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_GetCurrentBetaName(intptr_t instancePtr, char * pchName, int cchNameBufferSize);
+S_API bool SteamAPI_ISteamApps_MarkContentCorrupt(intptr_t instancePtr, bool bMissingFilesOnly);
+S_API uint32 SteamAPI_ISteamApps_GetInstalledDepots(intptr_t instancePtr, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots);
+S_API uint32 SteamAPI_ISteamApps_GetAppInstallDir(intptr_t instancePtr, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize);
+S_API bool SteamAPI_ISteamApps_BIsAppInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint64 SteamAPI_ISteamApps_GetAppOwner(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetLaunchQueryParam(intptr_t instancePtr, const char * pchKey);
+S_API bool SteamAPI_ISteamApps_GetDlcDownloadProgress(intptr_t instancePtr, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API int SteamAPI_ISteamApps_GetAppBuildId(intptr_t instancePtr);
+S_API void SteamAPI_ISteamApps_RequestAllProofOfPurchaseKeys(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamApps_GetFileDetails(intptr_t instancePtr, const char * pszFileName);
+S_API bool SteamAPI_ISteamNetworking_SendP2PPacket(intptr_t instancePtr, class CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_IsP2PPacketAvailable(intptr_t instancePtr, uint32 * pcubMsgSize, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_ReadP2PPacket(intptr_t instancePtr, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, class CSteamID * psteamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(intptr_t instancePtr, class CSteamID steamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_GetP2PSessionState(intptr_t instancePtr, class CSteamID steamIDRemote, struct P2PSessionState_t * pConnectionState);
+S_API bool SteamAPI_ISteamNetworking_AllowP2PPacketRelay(intptr_t instancePtr, bool bAllow);
+S_API SNetListenSocket_t SteamAPI_ISteamNetworking_CreateListenSocket(intptr_t instancePtr, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(intptr_t instancePtr, class CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateConnectionSocket(intptr_t instancePtr, uint32 nIP, uint16 nPort, int nTimeoutSec);
+S_API bool SteamAPI_ISteamNetworking_DestroySocket(intptr_t instancePtr, SNetSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_DestroyListenSocket(intptr_t instancePtr, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_SendDataOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_RetrieveDataFromSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailable(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_RetrieveData(intptr_t instancePtr, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_GetSocketInfo(intptr_t instancePtr, SNetSocket_t hSocket, class CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote);
+S_API bool SteamAPI_ISteamNetworking_GetListenSocketInfo(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort);
+S_API ESNetSocketConnectionType SteamAPI_ISteamNetworking_GetSocketConnectionType(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API int SteamAPI_ISteamNetworking_GetMaxPacketSize(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_WriteScreenshot(intptr_t instancePtr, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(intptr_t instancePtr, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight);
+S_API void SteamAPI_ISteamScreenshots_TriggerScreenshot(intptr_t instancePtr);
+S_API void SteamAPI_ISteamScreenshots_HookScreenshots(intptr_t instancePtr, bool bHook);
+S_API bool SteamAPI_ISteamScreenshots_SetLocation(intptr_t instancePtr, ScreenshotHandle hScreenshot, const char * pchLocation);
+S_API bool SteamAPI_ISteamScreenshots_TagUser(intptr_t instancePtr, ScreenshotHandle hScreenshot, class CSteamID steamID);
+S_API bool SteamAPI_ISteamScreenshots_TagPublishedFile(intptr_t instancePtr, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID);
+S_API bool SteamAPI_ISteamScreenshots_IsScreenshotsHooked(intptr_t instancePtr);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddVRScreenshotToLibrary(intptr_t instancePtr, EVRScreenshotType eType, const char * pchFilename, const char * pchVRFilename);
+S_API bool SteamAPI_ISteamMusic_BIsEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusic_BIsPlaying(intptr_t instancePtr);
+S_API AudioPlayback_Status SteamAPI_ISteamMusic_GetPlaybackStatus(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Play(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Pause(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayPrevious(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayNext(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_SetVolume(intptr_t instancePtr, float flVolume);
+S_API float SteamAPI_ISteamMusic_GetVolume(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BActivationSuccess(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_SetDisplayName(intptr_t instancePtr, const char * pchDisplayName);
+S_API bool SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayPrevious(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayNext(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableQueue(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlaylists(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(intptr_t instancePtr, AudioPlayback_Status nStatus);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateVolume(intptr_t instancePtr, float flValue);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(intptr_t instancePtr, bool bAvailable);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(intptr_t instancePtr, const char * pchText);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(intptr_t instancePtr, int nValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_QueueWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetQueueEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetQueueEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_QueueDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetPlaylistEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistDidChange(intptr_t instancePtr);
+S_API HTTPRequestHandle SteamAPI_ISteamHTTP_CreateHTTPRequest(intptr_t instancePtr, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(intptr_t instancePtr, HTTPRequestHandle hRequest, uint64 ulContextValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_DeferHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 * unBodySize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 cOffset, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_ReleaseHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(intptr_t instancePtr, HTTPRequestHandle hRequest, float * pflPercentOut);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen);
+S_API HTTPCookieContainerHandle SteamAPI_ISteamHTTP_CreateCookieContainer(intptr_t instancePtr, bool bAllowResponsesToModify);
+S_API bool SteamAPI_ISteamHTTP_ReleaseCookieContainer(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetCookie(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer, const char * pchHost, const char * pchUrl, const char * pchCookie);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(intptr_t instancePtr, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchUserAgentInfo);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(intptr_t instancePtr, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unMilliseconds);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(intptr_t instancePtr, HTTPRequestHandle hRequest, bool * pbWasTimedOut);
+S_API ClientUnifiedMessageHandle SteamAPI_ISteamUnifiedMessages_SendMethod(intptr_t instancePtr, const char * pchServiceMethod, const void * pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, uint32 * punResponseSize, EResult * peResult);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseData(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, void * pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease);
+S_API bool SteamAPI_ISteamUnifiedMessages_ReleaseMethod(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle);
+S_API bool SteamAPI_ISteamUnifiedMessages_SendNotification(intptr_t instancePtr, const char * pchServiceNotification, const void * pNotificationBuffer, uint32 unNotificationBufferSize);
+S_API bool SteamAPI_ISteamController_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamController_Shutdown(intptr_t instancePtr);
+S_API void SteamAPI_ISteamController_RunFrame(intptr_t instancePtr);
+S_API int SteamAPI_ISteamController_GetConnectedControllers(intptr_t instancePtr, ControllerHandle_t * handlesOut);
+S_API bool SteamAPI_ISteamController_ShowBindingPanel(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetActionSetHandle(intptr_t instancePtr, const char * pszActionSetName);
+S_API void SteamAPI_ISteamController_ActivateActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetCurrentActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerDigitalActionHandle_t SteamAPI_ISteamController_GetDigitalActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerDigitalActionData_t SteamAPI_ISteamController_GetDigitalActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle);
+S_API int SteamAPI_ISteamController_GetDigitalActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin * originsOut);
+S_API ControllerAnalogActionHandle_t SteamAPI_ISteamController_GetAnalogActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerAnalogActionData_t SteamAPI_ISteamController_GetAnalogActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle);
+S_API int SteamAPI_ISteamController_GetAnalogActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin * originsOut);
+S_API void SteamAPI_ISteamController_StopAnalogActionMomentum(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction);
+S_API void SteamAPI_ISteamController_TriggerHapticPulse(intptr_t instancePtr, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec);
+S_API void SteamAPI_ISteamController_TriggerRepeatedHapticPulse(intptr_t instancePtr, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags);
+S_API void SteamAPI_ISteamController_TriggerVibration(intptr_t instancePtr, ControllerHandle_t controllerHandle, unsigned short usLeftSpeed, unsigned short usRightSpeed);
+S_API void SteamAPI_ISteamController_SetLEDColor(intptr_t instancePtr, ControllerHandle_t controllerHandle, uint8 nColorR, uint8 nColorG, uint8 nColorB, unsigned int nFlags);
+S_API int SteamAPI_ISteamController_GetGamepadIndexForController(intptr_t instancePtr, ControllerHandle_t ulControllerHandle);
+S_API ControllerHandle_t SteamAPI_ISteamController_GetControllerForGamepadIndex(intptr_t instancePtr, int nIndex);
+S_API struct ControllerMotionData_t SteamAPI_ISteamController_GetMotionData(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API bool SteamAPI_ISteamController_ShowDigitalActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition);
+S_API bool SteamAPI_ISteamController_ShowAnalogActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition);
+S_API const char * SteamAPI_ISteamController_GetStringForActionOrigin(intptr_t instancePtr, EControllerActionOrigin eOrigin);
+S_API const char * SteamAPI_ISteamController_GetGlyphForActionOrigin(intptr_t instancePtr, EControllerActionOrigin eOrigin);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(intptr_t instancePtr, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(intptr_t instancePtr, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SendQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCResult(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, struct SteamUGCDetails_t * pDetails);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCPreviewURL(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCChildren(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCStatistic(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint64 * pStatValue);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, char * pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType * pPreviewType);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize);
+S_API bool SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_AddRequiredTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_AddExcludedTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_SetReturnOnlyIDs(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnOnlyIDs);
+S_API bool SteamAPI_ISteamUGC_SetReturnKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnKeyValueTags);
+S_API bool SteamAPI_ISteamUGC_SetReturnLongDescription(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnLongDescription);
+S_API bool SteamAPI_ISteamUGC_SetReturnMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnMetadata);
+S_API bool SteamAPI_ISteamUGC_SetReturnChildren(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnChildren);
+S_API bool SteamAPI_ISteamUGC_SetReturnAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews);
+S_API bool SteamAPI_ISteamUGC_SetReturnTotalOnly(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnTotalOnly);
+S_API bool SteamAPI_ISteamUGC_SetReturnPlaytimeStats(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unDays);
+S_API bool SteamAPI_ISteamUGC_SetLanguage(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetAllowCachedResponse(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds);
+S_API bool SteamAPI_ISteamUGC_SetCloudFileNameFilter(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pMatchCloudFileName);
+S_API bool SteamAPI_ISteamUGC_SetMatchAnyTag(intptr_t instancePtr, UGCQueryHandle_t handle, bool bMatchAnyTag);
+S_API bool SteamAPI_ISteamUGC_SetSearchText(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pSearchText);
+S_API bool SteamAPI_ISteamUGC_SetRankedByTrendDays(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unDays);
+S_API bool SteamAPI_ISteamUGC_AddRequiredKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pKey, const char * pValue);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RequestUGCDetails(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_CreateItem(intptr_t instancePtr, AppId_t nConsumerAppId, EWorkshopFileType eFileType);
+S_API UGCUpdateHandle_t SteamAPI_ISteamUGC_StartItemUpdate(intptr_t instancePtr, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_SetItemTitle(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchTitle);
+S_API bool SteamAPI_ISteamUGC_SetItemDescription(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchDescription);
+S_API bool SteamAPI_ISteamUGC_SetItemUpdateLanguage(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetItemMetadata(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchMetaData);
+S_API bool SteamAPI_ISteamUGC_SetItemVisibility(intptr_t instancePtr, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamUGC_SetItemTags(intptr_t instancePtr, UGCUpdateHandle_t updateHandle, const struct SteamParamStringArray_t * pTags);
+S_API bool SteamAPI_ISteamUGC_SetItemContent(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszContentFolder);
+S_API bool SteamAPI_ISteamUGC_SetItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile);
+S_API bool SteamAPI_ISteamUGC_RemoveItemKeyValueTags(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey);
+S_API bool SteamAPI_ISteamUGC_AddItemKeyValueTag(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamUGC_AddItemPreviewFile(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile, EItemPreviewType type);
+S_API bool SteamAPI_ISteamUGC_AddItemPreviewVideo(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszVideoID);
+S_API bool SteamAPI_ISteamUGC_UpdateItemPreviewFile(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index, const char * pszPreviewFile);
+S_API bool SteamAPI_ISteamUGC_UpdateItemPreviewVideo(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index, const char * pszVideoID);
+S_API bool SteamAPI_ISteamUGC_RemoveItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubmitItemUpdate(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchChangeNote);
+S_API EItemUpdateStatus SteamAPI_ISteamUGC_GetItemUpdateProgress(intptr_t instancePtr, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_GetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddItemToFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveItemFromFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_UnsubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API uint32 SteamAPI_ISteamUGC_GetNumSubscribedItems(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUGC_GetSubscribedItems(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API uint32 SteamAPI_ISteamUGC_GetItemState(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_GetItemInstallInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp);
+S_API bool SteamAPI_ISteamUGC_GetItemDownloadInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API bool SteamAPI_ISteamUGC_DownloadItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bHighPriority);
+S_API bool SteamAPI_ISteamUGC_BInitWorkshopForGameServer(intptr_t instancePtr, DepotId_t unWorkshopDepotID, const char * pszFolder);
+S_API void SteamAPI_ISteamUGC_SuspendDownloads(intptr_t instancePtr, bool bSuspend);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_StartPlaytimeTracking(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_StopPlaytimeTracking(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_StopPlaytimeTrackingForAllItems(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddDependency(intptr_t instancePtr, PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveDependency(intptr_t instancePtr, PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID);
+S_API uint32 SteamAPI_ISteamAppList_GetNumInstalledApps(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamAppList_GetInstalledApps(intptr_t instancePtr, AppId_t * pvecAppID, uint32 unMaxAppIDs);
+S_API int SteamAPI_ISteamAppList_GetAppName(intptr_t instancePtr, AppId_t nAppID, char * pchName, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppInstallDir(intptr_t instancePtr, AppId_t nAppID, char * pchDirectory, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppBuildId(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Shutdown(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamHTMLSurface_CreateBrowser(intptr_t instancePtr, const char * pchUserAgent, const char * pchUserCSS);
+S_API void SteamAPI_ISteamHTMLSurface_RemoveBrowser(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_LoadURL(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData);
+S_API void SteamAPI_ISteamHTMLSurface_SetSize(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight);
+S_API void SteamAPI_ISteamHTMLSurface_StopLoad(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Reload(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoBack(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoForward(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_AddHeader(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamHTMLSurface_ExecuteJavascript(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchScript);
+S_API void SteamAPI_ISteamHTMLSurface_MouseUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDoubleClick(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseMove(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_MouseWheel(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int32 nDelta);
+S_API void SteamAPI_ISteamHTMLSurface_KeyDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyChar(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetVerticalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetKeyFocus(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus);
+S_API void SteamAPI_ISteamHTMLSurface_ViewSource(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_CopyToClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_PasteFromClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Find(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse);
+S_API void SteamAPI_ISteamHTMLSurface_StopFind(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_SetCookie(intptr_t instancePtr, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly);
+S_API void SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY);
+S_API void SteamAPI_ISteamHTMLSurface_SetBackgroundMode(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bBackgroundMode);
+S_API void SteamAPI_ISteamHTMLSurface_AllowStartRequest(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bAllowed);
+S_API void SteamAPI_ISteamHTMLSurface_JSDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bResult);
+S_API EResult SteamAPI_ISteamInventory_GetResultStatus(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetResultItems(intptr_t instancePtr, SteamInventoryResult_t resultHandle, struct SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize);
+S_API bool SteamAPI_ISteamInventory_GetResultItemProperty(intptr_t instancePtr, SteamInventoryResult_t resultHandle, uint32 unItemIndex, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSizeOut);
+S_API uint32 SteamAPI_ISteamInventory_GetResultTimestamp(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_CheckResultSteamID(intptr_t instancePtr, SteamInventoryResult_t resultHandle, class CSteamID steamIDExpected);
+S_API void SteamAPI_ISteamInventory_DestroyResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetAllItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_GetItemsByID(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs);
+S_API bool SteamAPI_ISteamInventory_SerializeResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize);
+S_API bool SteamAPI_ISteamInventory_DeserializeResult(intptr_t instancePtr, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE);
+S_API bool SteamAPI_ISteamInventory_GenerateItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_GrantPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_AddPromoItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef);
+S_API bool SteamAPI_ISteamInventory_AddPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_ConsumeItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity);
+S_API bool SteamAPI_ISteamInventory_ExchangeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength);
+S_API bool SteamAPI_ISteamInventory_TransferItemQuantity(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest);
+S_API void SteamAPI_ISteamInventory_SendItemDropHeartbeat(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_TriggerItemDrop(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition);
+S_API bool SteamAPI_ISteamInventory_TradeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, class CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength);
+S_API bool SteamAPI_ISteamInventory_LoadItemDefinitions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionIDs(intptr_t instancePtr, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionProperty(intptr_t instancePtr, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSizeOut);
+S_API SteamAPICall_t SteamAPI_ISteamInventory_RequestEligiblePromoItemDefinitionsIDs(intptr_t instancePtr, class CSteamID steamID);
+S_API bool SteamAPI_ISteamInventory_GetEligiblePromoItemDefinitionIDs(intptr_t instancePtr, class CSteamID steamID, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API void SteamAPI_ISteamVideo_GetVideoURL(intptr_t instancePtr, AppId_t unVideoAppID);
+S_API bool SteamAPI_ISteamVideo_IsBroadcasting(intptr_t instancePtr, int * pnNumViewers);
+S_API void SteamAPI_ISteamVideo_GetOPFSettings(intptr_t instancePtr, AppId_t unVideoAppID);
+S_API bool SteamAPI_ISteamVideo_GetOPFStringForApp(intptr_t instancePtr, AppId_t unVideoAppID, char * pchBuffer, int32 * pnBufferSize);
+S_API bool SteamAPI_ISteamGameServer_InitGameServer(intptr_t instancePtr, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString);
+S_API void SteamAPI_ISteamGameServer_SetProduct(intptr_t instancePtr, const char * pszProduct);
+S_API void SteamAPI_ISteamGameServer_SetGameDescription(intptr_t instancePtr, const char * pszGameDescription);
+S_API void SteamAPI_ISteamGameServer_SetModDir(intptr_t instancePtr, const char * pszModDir);
+S_API void SteamAPI_ISteamGameServer_SetDedicatedServer(intptr_t instancePtr, bool bDedicated);
+S_API void SteamAPI_ISteamGameServer_LogOn(intptr_t instancePtr, const char * pszToken);
+S_API void SteamAPI_ISteamGameServer_LogOnAnonymous(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_LogOff(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BLoggedOn(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BSecure(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamGameServer_GetSteamID(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_WasRestartRequested(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetMaxPlayerCount(intptr_t instancePtr, int cPlayersMax);
+S_API void SteamAPI_ISteamGameServer_SetBotPlayerCount(intptr_t instancePtr, int cBotplayers);
+S_API void SteamAPI_ISteamGameServer_SetServerName(intptr_t instancePtr, const char * pszServerName);
+S_API void SteamAPI_ISteamGameServer_SetMapName(intptr_t instancePtr, const char * pszMapName);
+S_API void SteamAPI_ISteamGameServer_SetPasswordProtected(intptr_t instancePtr, bool bPasswordProtected);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorPort(intptr_t instancePtr, uint16 unSpectatorPort);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorServerName(intptr_t instancePtr, const char * pszSpectatorServerName);
+S_API void SteamAPI_ISteamGameServer_ClearAllKeyValues(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetKeyValue(intptr_t instancePtr, const char * pKey, const char * pValue);
+S_API void SteamAPI_ISteamGameServer_SetGameTags(intptr_t instancePtr, const char * pchGameTags);
+S_API void SteamAPI_ISteamGameServer_SetGameData(intptr_t instancePtr, const char * pchGameData);
+S_API void SteamAPI_ISteamGameServer_SetRegion(intptr_t instancePtr, const char * pszRegion);
+S_API bool SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(intptr_t instancePtr, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, class CSteamID * pSteamIDUser);
+S_API uint64 SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SendUserDisconnect(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServer_BUpdateUserData(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore);
+S_API HAuthTicket SteamAPI_ISteamGameServer_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamGameServer_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamGameServer_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamGameServer_RequestUserGroupStatus(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDGroup);
+S_API void SteamAPI_ISteamGameServer_GetGameplayStats(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_GetServerReputation(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamGameServer_GetPublicIP(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_HandleIncomingPacket(intptr_t instancePtr, const void * pData, int cbData, uint32 srcIP, uint16 srcPort);
+S_API int SteamAPI_ISteamGameServer_GetNextOutgoingPacket(intptr_t instancePtr, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort);
+S_API void SteamAPI_ISteamGameServer_EnableHeartbeats(intptr_t instancePtr, bool bActive);
+S_API void SteamAPI_ISteamGameServer_SetHeartbeatInterval(intptr_t instancePtr, int iHeartbeatInterval);
+S_API void SteamAPI_ISteamGameServer_ForceHeartbeat(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_AssociateWithClan(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(intptr_t instancePtr, class CSteamID steamIDNewPlayer);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API bool SteamAPI_ISteamGameServerStats_ClearUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_StoreUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+#endif // STEAMAPIFLAT_H
+
+
diff --git a/lsteamclient/steamworks_sdk_140/steam_api_internal.h b/lsteamclient/steamworks_sdk_140/steam_api_internal.h
new file mode 100644
index 00000000..ef3a949c
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/steam_api_internal.h
@@ -0,0 +1,327 @@
+//====== Copyright 1996-2015, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Internal private Steamworks API declarations and definitions
+//
+//=============================================================================
+
+#ifndef STEAM_API_INTERNAL_H
+#define STEAM_API_INTERNAL_H
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+S_API void * S_CALLTYPE SteamInternal_ContextInit( void *pContextInitData );
+S_API void * S_CALLTYPE SteamInternal_CreateInterface( const char *ver );
+
+#if !defined( STEAM_API_EXPORTS )
+
+inline void S_CALLTYPE SteamInternal_OnContextInit( void* p )
+{
+ ((CSteamAPIContext*)p)->Clear();
+ if ( SteamAPI_GetHSteamPipe() )
+ ((CSteamAPIContext*)p)->Init();
+}
+inline CSteamAPIContext& SteamInternal_ModuleContext()
+{
+ // SteamInternal_ContextInit takes a base pointer for the equivalent of
+ // struct { void (*pFn)(void* pCtx); uintp counter; CSteamAPIContext ctx; }
+ // Do not change layout of 2 + sizeof... or add non-pointer aligned data!
+ // NOTE: declaring "static CSteamAPIConext" creates a large function
+ // which queries the initialization status of the object. We know that
+ // it is pointer-aligned and fully memset with zeros, so just alias a
+ // static buffer of the appropriate size and call it a CSteamAPIContext.
+ static void* s_CallbackCounterAndContext[ 2 + sizeof(CSteamAPIContext)/sizeof(void*) ] = { (void*)&SteamInternal_OnContextInit, 0 };
+ return *(CSteamAPIContext*)SteamInternal_ContextInit( s_CallbackCounterAndContext );
+}
+
+inline ISteamClient *SteamClient() { return SteamInternal_ModuleContext().SteamClient(); }
+inline ISteamUser *SteamUser() { return SteamInternal_ModuleContext().SteamUser(); }
+inline ISteamFriends *SteamFriends() { return SteamInternal_ModuleContext().SteamFriends(); }
+inline ISteamUtils *SteamUtils() { return SteamInternal_ModuleContext().SteamUtils(); }
+inline ISteamMatchmaking *SteamMatchmaking() { return SteamInternal_ModuleContext().SteamMatchmaking(); }
+inline ISteamUserStats *SteamUserStats() { return SteamInternal_ModuleContext().SteamUserStats(); }
+inline ISteamApps *SteamApps() { return SteamInternal_ModuleContext().SteamApps(); }
+inline ISteamMatchmakingServers *SteamMatchmakingServers() { return SteamInternal_ModuleContext().SteamMatchmakingServers(); }
+inline ISteamNetworking *SteamNetworking() { return SteamInternal_ModuleContext().SteamNetworking(); }
+inline ISteamRemoteStorage *SteamRemoteStorage() { return SteamInternal_ModuleContext().SteamRemoteStorage(); }
+inline ISteamScreenshots *SteamScreenshots() { return SteamInternal_ModuleContext().SteamScreenshots(); }
+inline ISteamHTTP *SteamHTTP() { return SteamInternal_ModuleContext().SteamHTTP(); }
+inline ISteamUnifiedMessages *SteamUnifiedMessages() { return SteamInternal_ModuleContext().SteamUnifiedMessages(); }
+inline ISteamController *SteamController() { return SteamInternal_ModuleContext().SteamController(); }
+inline ISteamUGC *SteamUGC() { return SteamInternal_ModuleContext().SteamUGC(); }
+inline ISteamAppList *SteamAppList() { return SteamInternal_ModuleContext().SteamAppList(); }
+inline ISteamMusic *SteamMusic() { return SteamInternal_ModuleContext().SteamMusic(); }
+inline ISteamMusicRemote *SteamMusicRemote() { return SteamInternal_ModuleContext().SteamMusicRemote(); }
+inline ISteamHTMLSurface *SteamHTMLSurface() { return SteamInternal_ModuleContext().SteamHTMLSurface(); }
+inline ISteamInventory *SteamInventory() { return SteamInternal_ModuleContext().SteamInventory(); }
+inline ISteamVideo *SteamVideo() { return SteamInternal_ModuleContext().SteamVideo(); }
+
+#endif // !defined( STEAM_API_EXPORTS )
+
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamClient = NULL;
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamMusicRemote = NULL;
+ m_pSteamHTMLSurface = NULL;
+ m_pSteamInventory = NULL;
+}
+
+
+// This function must be declared inline in the header so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+ if ( !hSteamPipe )
+ return false;
+
+ m_pSteamClient = (ISteamClient*) SteamInternal_CreateInterface( STEAMCLIENT_INTERFACE_VERSION );
+ if ( !m_pSteamClient )
+ return false;
+
+ m_pSteamUser = m_pSteamClient->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = m_pSteamClient->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = m_pSteamClient->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = m_pSteamClient->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = m_pSteamClient->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = m_pSteamClient->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = m_pSteamClient->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = m_pSteamClient->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = m_pSteamClient->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = m_pSteamClient->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = m_pSteamClient->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = m_pSteamClient->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = m_pSteamClient->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = m_pSteamClient->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = m_pSteamClient->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = m_pSteamClient->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ return false;
+
+ m_pSteamMusicRemote = m_pSteamClient->GetISteamMusicRemote( hSteamUser, hSteamPipe, STEAMMUSICREMOTE_INTERFACE_VERSION );
+ if ( !m_pSteamMusicRemote )
+ return false;
+
+ m_pSteamHTMLSurface = m_pSteamClient->GetISteamHTMLSurface( hSteamUser, hSteamPipe, STEAMHTMLSURFACE_INTERFACE_VERSION );
+ if ( !m_pSteamHTMLSurface )
+ return false;
+
+ m_pSteamInventory = m_pSteamClient->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_pSteamVideo = m_pSteamClient->GetISteamVideo( hSteamUser, hSteamPipe, STEAMVIDEO_INTERFACE_VERSION );
+ if ( !m_pSteamVideo )
+ return false;
+
+ return true;
+}
+
+
+//-----------------------------------------------------------------------------
+// The following macros are implementation details, not intended for public use
+//-----------------------------------------------------------------------------
+#define _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param )
+#define _STEAM_CALLBACK_HELPER( _1, _2, SELECTED, ... ) _STEAM_CALLBACK_##SELECTED
+#define _STEAM_CALLBACK_SELECT( X, Y ) _STEAM_CALLBACK_HELPER X Y
+#define _STEAM_CALLBACK_3( extra_code, thisclass, func, param ) \
+ struct CCallbackInternal_ ## func : private CCallbackImpl< sizeof( param ) > { \
+ CCallbackInternal_ ## func () { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func ( const CCallbackInternal_ ## func & ) { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func & operator=( const CCallbackInternal_ ## func & ) { return *this; } \
+ private: virtual void Run( void *pvParam ) { _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param ) \
+ thisclass *pOuter = reinterpret_cast<thisclass*>( reinterpret_cast<char*>(this) - offsetof( thisclass, m_steamcallback_ ## func ) ); \
+ pOuter->func( reinterpret_cast<param*>( pvParam ) ); \
+ } \
+ } m_steamcallback_ ## func ; void func( param *pParam )
+#define _STEAM_CALLBACK_4( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param > var; void func( param *pParam )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+inline CCallResult<T, P>::CCallResult()
+{
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Set( SteamAPICall_t hAPICall, T *p, func_t func )
+{
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+}
+
+template< class T, class P >
+inline bool CCallResult<T, P>::IsActive() const
+{
+ return (m_hAPICall != k_uAPICallInvalid);
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Cancel()
+{
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+}
+
+template< class T, class P >
+inline CCallResult<T, P>::~CCallResult()
+{
+ Cancel();
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Run( void *pvParam )
+{
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)((P *)pvParam, false);
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+{
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)((P *)pvParam, bIOFailure);
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct,
+// bGameserver = listen for gameserver callbacks instead of client callbacks
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameserver >
+inline CCallback< T, P, bGameserver >::CCallback( T *pObj, func_t func )
+ : m_pObj( NULL ), m_Func( NULL )
+{
+ if ( bGameserver )
+ {
+ this->SetGameserverFlag();
+ }
+ Register( pObj, func );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Register( T *pObj, func_t func )
+{
+ if ( !pObj || !func )
+ return;
+
+ if ( this->m_nCallbackFlags & CCallbackBase::k_ECallbackFlagsRegistered )
+ Unregister();
+
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Unregister()
+{
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Run( void *pvParam )
+{
+ (m_pObj->*m_Func)((P *)pvParam);
+}
+
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+
+#endif // STEAM_API_INTERNAL_H
diff --git a/lsteamclient/steamworks_sdk_140/steam_api_interop.cs b/lsteamclient/steamworks_sdk_140/steam_api_interop.cs
new file mode 100644
index 00000000..d767d6c9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/steam_api_interop.cs
@@ -0,0 +1,10877 @@
+//====== Copyright 1996-2016, Valve Corporation, All rights reserved. =======
+//
+// Purpose: This file contains C#/managed code bindings for the SteamAPI interfaces
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+using System;
+using System.Runtime.InteropServices;
+using Valve.Steamworks;
+using Valve.Interop;
+
+namespace Valve.Interop
+{
+
+public class NativeEntrypoints
+{
+
+
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_CreateSteamPipe")]
+internal static extern uint SteamAPI_ISteamClient_CreateSteamPipe(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_BReleaseSteamPipe")]
+internal static extern bool SteamAPI_ISteamClient_BReleaseSteamPipe(IntPtr instancePtr, uint hSteamPipe);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_ConnectToGlobalUser")]
+internal static extern uint SteamAPI_ISteamClient_ConnectToGlobalUser(IntPtr instancePtr, uint hSteamPipe);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_CreateLocalUser")]
+internal static extern uint SteamAPI_ISteamClient_CreateLocalUser(IntPtr instancePtr, ref uint phSteamPipe, uint eAccountType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_ReleaseUser")]
+internal static extern void SteamAPI_ISteamClient_ReleaseUser(IntPtr instancePtr, uint hSteamPipe, uint hUser);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamUser")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUser(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamGameServer")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamGameServer(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_SetLocalIPBinding")]
+internal static extern void SteamAPI_ISteamClient_SetLocalIPBinding(IntPtr instancePtr, uint unIP, char usPort);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamFriends")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamFriends(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamUtils")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUtils(IntPtr instancePtr, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamMatchmaking")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamMatchmaking(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamMatchmakingServers")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamMatchmakingServers(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamGenericInterface")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamGenericInterface(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamUserStats")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUserStats(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamGameServerStats")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamGameServerStats(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamApps")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamApps(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamNetworking")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamNetworking(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamRemoteStorage")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamRemoteStorage(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamScreenshots")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamScreenshots(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetIPCCallCount")]
+internal static extern uint SteamAPI_ISteamClient_GetIPCCallCount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_SetWarningMessageHook")]
+internal static extern void SteamAPI_ISteamClient_SetWarningMessageHook(IntPtr instancePtr, IntPtr pFunction);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_BShutdownIfAllPipesClosed")]
+internal static extern bool SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamHTTP")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamHTTP(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamUnifiedMessages")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUnifiedMessages(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamController")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamController(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamUGC")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUGC(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamAppList")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamAppList(IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamMusic")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamMusic(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamMusicRemote")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamMusicRemote(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamHTMLSurface")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamHTMLSurface(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamInventory")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamInventory(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamClient_GetISteamVideo")]
+internal static extern IntPtr SteamAPI_ISteamClient_GetISteamVideo(IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetHSteamUser")]
+internal static extern uint SteamAPI_ISteamUser_GetHSteamUser(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_BLoggedOn")]
+internal static extern bool SteamAPI_ISteamUser_BLoggedOn(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetSteamID")]
+internal static extern ulong SteamAPI_ISteamUser_GetSteamID(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_InitiateGameConnection")]
+internal static extern int SteamAPI_ISteamUser_InitiateGameConnection(IntPtr instancePtr, IntPtr pAuthBlob, int cbMaxAuthBlob, ulong steamIDGameServer, uint unIPServer, char usPortServer, bool bSecure);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_TerminateGameConnection")]
+internal static extern void SteamAPI_ISteamUser_TerminateGameConnection(IntPtr instancePtr, uint unIPServer, char usPortServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_TrackAppUsageEvent")]
+internal static extern void SteamAPI_ISteamUser_TrackAppUsageEvent(IntPtr instancePtr, ulong gameID, int eAppUsageEvent, string pchExtraInfo);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetUserDataFolder")]
+internal static extern bool SteamAPI_ISteamUser_GetUserDataFolder(IntPtr instancePtr, string pchBuffer, int cubBuffer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_StartVoiceRecording")]
+internal static extern void SteamAPI_ISteamUser_StartVoiceRecording(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_StopVoiceRecording")]
+internal static extern void SteamAPI_ISteamUser_StopVoiceRecording(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetAvailableVoice")]
+internal static extern uint SteamAPI_ISteamUser_GetAvailableVoice(IntPtr instancePtr, ref uint pcbCompressed, ref uint pcbUncompressed_Deprecated, uint nUncompressedVoiceDesiredSampleRate_Deprecated);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetVoice")]
+internal static extern uint SteamAPI_ISteamUser_GetVoice(IntPtr instancePtr, bool bWantCompressed, IntPtr pDestBuffer, uint cbDestBufferSize, ref uint nBytesWritten, bool bWantUncompressed_Deprecated, IntPtr pUncompressedDestBuffer_Deprecated, uint cbUncompressedDestBufferSize_Deprecated, ref uint nUncompressBytesWritten_Deprecated, uint nUncompressedVoiceDesiredSampleRate_Deprecated);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_DecompressVoice")]
+internal static extern uint SteamAPI_ISteamUser_DecompressVoice(IntPtr instancePtr, IntPtr pCompressed, uint cbCompressed, IntPtr pDestBuffer, uint cbDestBufferSize, ref uint nBytesWritten, uint nDesiredSampleRate);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetVoiceOptimalSampleRate")]
+internal static extern uint SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetAuthSessionTicket")]
+internal static extern uint SteamAPI_ISteamUser_GetAuthSessionTicket(IntPtr instancePtr, IntPtr pTicket, int cbMaxTicket, ref uint pcbTicket);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_BeginAuthSession")]
+internal static extern uint SteamAPI_ISteamUser_BeginAuthSession(IntPtr instancePtr, IntPtr pAuthTicket, int cbAuthTicket, ulong steamID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_EndAuthSession")]
+internal static extern void SteamAPI_ISteamUser_EndAuthSession(IntPtr instancePtr, ulong steamID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_CancelAuthTicket")]
+internal static extern void SteamAPI_ISteamUser_CancelAuthTicket(IntPtr instancePtr, uint hAuthTicket);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_UserHasLicenseForApp")]
+internal static extern uint SteamAPI_ISteamUser_UserHasLicenseForApp(IntPtr instancePtr, ulong steamID, uint appID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_BIsBehindNAT")]
+internal static extern bool SteamAPI_ISteamUser_BIsBehindNAT(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_AdvertiseGame")]
+internal static extern void SteamAPI_ISteamUser_AdvertiseGame(IntPtr instancePtr, ulong steamIDGameServer, uint unIPServer, char usPortServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_RequestEncryptedAppTicket")]
+internal static extern ulong SteamAPI_ISteamUser_RequestEncryptedAppTicket(IntPtr instancePtr, IntPtr pDataToInclude, int cbDataToInclude);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetEncryptedAppTicket")]
+internal static extern bool SteamAPI_ISteamUser_GetEncryptedAppTicket(IntPtr instancePtr, IntPtr pTicket, int cbMaxTicket, ref uint pcbTicket);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetGameBadgeLevel")]
+internal static extern int SteamAPI_ISteamUser_GetGameBadgeLevel(IntPtr instancePtr, int nSeries, bool bFoil);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_GetPlayerSteamLevel")]
+internal static extern int SteamAPI_ISteamUser_GetPlayerSteamLevel(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_RequestStoreAuthURL")]
+internal static extern ulong SteamAPI_ISteamUser_RequestStoreAuthURL(IntPtr instancePtr, string pchRedirectURL);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_BIsPhoneVerified")]
+internal static extern bool SteamAPI_ISteamUser_BIsPhoneVerified(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_BIsTwoFactorEnabled")]
+internal static extern bool SteamAPI_ISteamUser_BIsTwoFactorEnabled(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_BIsPhoneIdentifying")]
+internal static extern bool SteamAPI_ISteamUser_BIsPhoneIdentifying(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUser_BIsPhoneRequiringVerification")]
+internal static extern bool SteamAPI_ISteamUser_BIsPhoneRequiringVerification(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetPersonaName")]
+internal static extern IntPtr SteamAPI_ISteamFriends_GetPersonaName(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_SetPersonaName")]
+internal static extern ulong SteamAPI_ISteamFriends_SetPersonaName(IntPtr instancePtr, string pchPersonaName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetPersonaState")]
+internal static extern uint SteamAPI_ISteamFriends_GetPersonaState(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendCount")]
+internal static extern int SteamAPI_ISteamFriends_GetFriendCount(IntPtr instancePtr, int iFriendFlags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendByIndex")]
+internal static extern ulong SteamAPI_ISteamFriends_GetFriendByIndex(IntPtr instancePtr, int iFriend, int iFriendFlags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendRelationship")]
+internal static extern uint SteamAPI_ISteamFriends_GetFriendRelationship(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendPersonaState")]
+internal static extern uint SteamAPI_ISteamFriends_GetFriendPersonaState(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendPersonaName")]
+internal static extern IntPtr SteamAPI_ISteamFriends_GetFriendPersonaName(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendGamePlayed")]
+internal static extern bool SteamAPI_ISteamFriends_GetFriendGamePlayed(IntPtr instancePtr, ulong steamIDFriend, ref FriendGameInfo_t pFriendGameInfo);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendPersonaNameHistory")]
+internal static extern IntPtr SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(IntPtr instancePtr, ulong steamIDFriend, int iPersonaName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendSteamLevel")]
+internal static extern int SteamAPI_ISteamFriends_GetFriendSteamLevel(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetPlayerNickname")]
+internal static extern IntPtr SteamAPI_ISteamFriends_GetPlayerNickname(IntPtr instancePtr, ulong steamIDPlayer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendsGroupCount")]
+internal static extern int SteamAPI_ISteamFriends_GetFriendsGroupCount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex")]
+internal static extern char SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(IntPtr instancePtr, int iFG);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendsGroupName")]
+internal static extern IntPtr SteamAPI_ISteamFriends_GetFriendsGroupName(IntPtr instancePtr, char friendsGroupID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendsGroupMembersCount")]
+internal static extern int SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(IntPtr instancePtr, char friendsGroupID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendsGroupMembersList")]
+internal static extern void SteamAPI_ISteamFriends_GetFriendsGroupMembersList(IntPtr instancePtr, char friendsGroupID, [In, Out] CSteamID[] pOutSteamIDMembers, int nMembersCount);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_HasFriend")]
+internal static extern bool SteamAPI_ISteamFriends_HasFriend(IntPtr instancePtr, ulong steamIDFriend, int iFriendFlags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanCount")]
+internal static extern int SteamAPI_ISteamFriends_GetClanCount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanByIndex")]
+internal static extern ulong SteamAPI_ISteamFriends_GetClanByIndex(IntPtr instancePtr, int iClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanName")]
+internal static extern IntPtr SteamAPI_ISteamFriends_GetClanName(IntPtr instancePtr, ulong steamIDClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanTag")]
+internal static extern IntPtr SteamAPI_ISteamFriends_GetClanTag(IntPtr instancePtr, ulong steamIDClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanActivityCounts")]
+internal static extern bool SteamAPI_ISteamFriends_GetClanActivityCounts(IntPtr instancePtr, ulong steamIDClan, ref int pnOnline, ref int pnInGame, ref int pnChatting);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_DownloadClanActivityCounts")]
+internal static extern ulong SteamAPI_ISteamFriends_DownloadClanActivityCounts(IntPtr instancePtr, [In, Out] CSteamID[] psteamIDClans, int cClansToRequest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendCountFromSource")]
+internal static extern int SteamAPI_ISteamFriends_GetFriendCountFromSource(IntPtr instancePtr, ulong steamIDSource);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendFromSourceByIndex")]
+internal static extern ulong SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(IntPtr instancePtr, ulong steamIDSource, int iFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_IsUserInSource")]
+internal static extern bool SteamAPI_ISteamFriends_IsUserInSource(IntPtr instancePtr, ulong steamIDUser, ulong steamIDSource);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_SetInGameVoiceSpeaking")]
+internal static extern void SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(IntPtr instancePtr, ulong steamIDUser, bool bSpeaking);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_ActivateGameOverlay")]
+internal static extern void SteamAPI_ISteamFriends_ActivateGameOverlay(IntPtr instancePtr, string pchDialog);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_ActivateGameOverlayToUser")]
+internal static extern void SteamAPI_ISteamFriends_ActivateGameOverlayToUser(IntPtr instancePtr, string pchDialog, ulong steamID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage")]
+internal static extern void SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(IntPtr instancePtr, string pchURL);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_ActivateGameOverlayToStore")]
+internal static extern void SteamAPI_ISteamFriends_ActivateGameOverlayToStore(IntPtr instancePtr, uint nAppID, char eFlag);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_SetPlayedWith")]
+internal static extern void SteamAPI_ISteamFriends_SetPlayedWith(IntPtr instancePtr, ulong steamIDUserPlayedWith);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog")]
+internal static extern void SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(IntPtr instancePtr, ulong steamIDLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetSmallFriendAvatar")]
+internal static extern int SteamAPI_ISteamFriends_GetSmallFriendAvatar(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetMediumFriendAvatar")]
+internal static extern int SteamAPI_ISteamFriends_GetMediumFriendAvatar(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetLargeFriendAvatar")]
+internal static extern int SteamAPI_ISteamFriends_GetLargeFriendAvatar(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_RequestUserInformation")]
+internal static extern bool SteamAPI_ISteamFriends_RequestUserInformation(IntPtr instancePtr, ulong steamIDUser, bool bRequireNameOnly);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_RequestClanOfficerList")]
+internal static extern ulong SteamAPI_ISteamFriends_RequestClanOfficerList(IntPtr instancePtr, ulong steamIDClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanOwner")]
+internal static extern ulong SteamAPI_ISteamFriends_GetClanOwner(IntPtr instancePtr, ulong steamIDClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanOfficerCount")]
+internal static extern int SteamAPI_ISteamFriends_GetClanOfficerCount(IntPtr instancePtr, ulong steamIDClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanOfficerByIndex")]
+internal static extern ulong SteamAPI_ISteamFriends_GetClanOfficerByIndex(IntPtr instancePtr, ulong steamIDClan, int iOfficer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetUserRestrictions")]
+internal static extern uint SteamAPI_ISteamFriends_GetUserRestrictions(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_SetRichPresence")]
+internal static extern bool SteamAPI_ISteamFriends_SetRichPresence(IntPtr instancePtr, string pchKey, string pchValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_ClearRichPresence")]
+internal static extern void SteamAPI_ISteamFriends_ClearRichPresence(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendRichPresence")]
+internal static extern IntPtr SteamAPI_ISteamFriends_GetFriendRichPresence(IntPtr instancePtr, ulong steamIDFriend, string pchKey);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount")]
+internal static extern int SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex")]
+internal static extern IntPtr SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(IntPtr instancePtr, ulong steamIDFriend, int iKey);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_RequestFriendRichPresence")]
+internal static extern void SteamAPI_ISteamFriends_RequestFriendRichPresence(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_InviteUserToGame")]
+internal static extern bool SteamAPI_ISteamFriends_InviteUserToGame(IntPtr instancePtr, ulong steamIDFriend, string pchConnectString);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetCoplayFriendCount")]
+internal static extern int SteamAPI_ISteamFriends_GetCoplayFriendCount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetCoplayFriend")]
+internal static extern ulong SteamAPI_ISteamFriends_GetCoplayFriend(IntPtr instancePtr, int iCoplayFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendCoplayTime")]
+internal static extern int SteamAPI_ISteamFriends_GetFriendCoplayTime(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendCoplayGame")]
+internal static extern uint SteamAPI_ISteamFriends_GetFriendCoplayGame(IntPtr instancePtr, ulong steamIDFriend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_JoinClanChatRoom")]
+internal static extern ulong SteamAPI_ISteamFriends_JoinClanChatRoom(IntPtr instancePtr, ulong steamIDClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_LeaveClanChatRoom")]
+internal static extern bool SteamAPI_ISteamFriends_LeaveClanChatRoom(IntPtr instancePtr, ulong steamIDClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanChatMemberCount")]
+internal static extern int SteamAPI_ISteamFriends_GetClanChatMemberCount(IntPtr instancePtr, ulong steamIDClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetChatMemberByIndex")]
+internal static extern ulong SteamAPI_ISteamFriends_GetChatMemberByIndex(IntPtr instancePtr, ulong steamIDClan, int iUser);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_SendClanChatMessage")]
+internal static extern bool SteamAPI_ISteamFriends_SendClanChatMessage(IntPtr instancePtr, ulong steamIDClanChat, string pchText);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetClanChatMessage")]
+internal static extern int SteamAPI_ISteamFriends_GetClanChatMessage(IntPtr instancePtr, ulong steamIDClanChat, int iMessage, IntPtr prgchText, int cchTextMax, ref uint peChatEntryType, ref CSteamID psteamidChatter);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_IsClanChatAdmin")]
+internal static extern bool SteamAPI_ISteamFriends_IsClanChatAdmin(IntPtr instancePtr, ulong steamIDClanChat, ulong steamIDUser);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam")]
+internal static extern bool SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(IntPtr instancePtr, ulong steamIDClanChat);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_OpenClanChatWindowInSteam")]
+internal static extern bool SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(IntPtr instancePtr, ulong steamIDClanChat);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_CloseClanChatWindowInSteam")]
+internal static extern bool SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(IntPtr instancePtr, ulong steamIDClanChat);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_SetListenForFriendsMessages")]
+internal static extern bool SteamAPI_ISteamFriends_SetListenForFriendsMessages(IntPtr instancePtr, bool bInterceptEnabled);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_ReplyToFriendMessage")]
+internal static extern bool SteamAPI_ISteamFriends_ReplyToFriendMessage(IntPtr instancePtr, ulong steamIDFriend, string pchMsgToSend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFriendMessage")]
+internal static extern int SteamAPI_ISteamFriends_GetFriendMessage(IntPtr instancePtr, ulong steamIDFriend, int iMessageID, IntPtr pvData, int cubData, ref uint peChatEntryType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_GetFollowerCount")]
+internal static extern ulong SteamAPI_ISteamFriends_GetFollowerCount(IntPtr instancePtr, ulong steamID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_IsFollowing")]
+internal static extern ulong SteamAPI_ISteamFriends_IsFollowing(IntPtr instancePtr, ulong steamID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamFriends_EnumerateFollowingList")]
+internal static extern ulong SteamAPI_ISteamFriends_EnumerateFollowingList(IntPtr instancePtr, uint unStartIndex);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetSecondsSinceAppActive")]
+internal static extern uint SteamAPI_ISteamUtils_GetSecondsSinceAppActive(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetSecondsSinceComputerActive")]
+internal static extern uint SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetConnectedUniverse")]
+internal static extern int SteamAPI_ISteamUtils_GetConnectedUniverse(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetServerRealTime")]
+internal static extern uint SteamAPI_ISteamUtils_GetServerRealTime(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetIPCountry")]
+internal static extern IntPtr SteamAPI_ISteamUtils_GetIPCountry(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetImageSize")]
+internal static extern bool SteamAPI_ISteamUtils_GetImageSize(IntPtr instancePtr, int iImage, ref uint pnWidth, ref uint pnHeight);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetImageRGBA")]
+internal static extern bool SteamAPI_ISteamUtils_GetImageRGBA(IntPtr instancePtr, int iImage, IntPtr pubDest, int nDestBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetCSERIPPort")]
+internal static extern bool SteamAPI_ISteamUtils_GetCSERIPPort(IntPtr instancePtr, ref uint unIP, ref char usPort);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetCurrentBatteryPower")]
+internal static extern byte SteamAPI_ISteamUtils_GetCurrentBatteryPower(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetAppID")]
+internal static extern uint SteamAPI_ISteamUtils_GetAppID(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_SetOverlayNotificationPosition")]
+internal static extern void SteamAPI_ISteamUtils_SetOverlayNotificationPosition(IntPtr instancePtr, uint eNotificationPosition);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_IsAPICallCompleted")]
+internal static extern bool SteamAPI_ISteamUtils_IsAPICallCompleted(IntPtr instancePtr, ulong hSteamAPICall, ref bool pbFailed);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetAPICallFailureReason")]
+internal static extern int SteamAPI_ISteamUtils_GetAPICallFailureReason(IntPtr instancePtr, ulong hSteamAPICall);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetAPICallResult")]
+internal static extern bool SteamAPI_ISteamUtils_GetAPICallResult(IntPtr instancePtr, ulong hSteamAPICall, IntPtr pCallback, int cubCallback, int iCallbackExpected, ref bool pbFailed);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetIPCCallCount")]
+internal static extern uint SteamAPI_ISteamUtils_GetIPCCallCount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_SetWarningMessageHook")]
+internal static extern void SteamAPI_ISteamUtils_SetWarningMessageHook(IntPtr instancePtr, IntPtr pFunction);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_IsOverlayEnabled")]
+internal static extern bool SteamAPI_ISteamUtils_IsOverlayEnabled(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_BOverlayNeedsPresent")]
+internal static extern bool SteamAPI_ISteamUtils_BOverlayNeedsPresent(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_CheckFileSignature")]
+internal static extern ulong SteamAPI_ISteamUtils_CheckFileSignature(IntPtr instancePtr, string szFileName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_ShowGamepadTextInput")]
+internal static extern bool SteamAPI_ISteamUtils_ShowGamepadTextInput(IntPtr instancePtr, int eInputMode, int eLineInputMode, string pchDescription, uint unCharMax, string pchExistingText);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetEnteredGamepadTextLength")]
+internal static extern uint SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetEnteredGamepadTextInput")]
+internal static extern bool SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(IntPtr instancePtr, string pchText, uint cchText);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_GetSteamUILanguage")]
+internal static extern IntPtr SteamAPI_ISteamUtils_GetSteamUILanguage(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_IsSteamRunningInVR")]
+internal static extern bool SteamAPI_ISteamUtils_IsSteamRunningInVR(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_SetOverlayNotificationInset")]
+internal static extern void SteamAPI_ISteamUtils_SetOverlayNotificationInset(IntPtr instancePtr, int nHorizontalInset, int nVerticalInset);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_IsSteamInBigPictureMode")]
+internal static extern bool SteamAPI_ISteamUtils_IsSteamInBigPictureMode(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_StartVRDashboard")]
+internal static extern void SteamAPI_ISteamUtils_StartVRDashboard(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_IsVRHeadsetStreamingEnabled")]
+internal static extern bool SteamAPI_ISteamUtils_IsVRHeadsetStreamingEnabled(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUtils_SetVRHeadsetStreamingEnabled")]
+internal static extern void SteamAPI_ISteamUtils_SetVRHeadsetStreamingEnabled(IntPtr instancePtr, bool bEnabled);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetFavoriteGameCount")]
+internal static extern int SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetFavoriteGame")]
+internal static extern bool SteamAPI_ISteamMatchmaking_GetFavoriteGame(IntPtr instancePtr, int iGame, ref uint pnAppID, ref uint pnIP, ref char pnConnPort, ref char pnQueryPort, ref uint punFlags, ref uint pRTime32LastPlayedOnServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_AddFavoriteGame")]
+internal static extern int SteamAPI_ISteamMatchmaking_AddFavoriteGame(IntPtr instancePtr, uint nAppID, uint nIP, char nConnPort, char nQueryPort, uint unFlags, uint rTime32LastPlayedOnServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_RemoveFavoriteGame")]
+internal static extern bool SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(IntPtr instancePtr, uint nAppID, uint nIP, char nConnPort, char nQueryPort, uint unFlags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_RequestLobbyList")]
+internal static extern ulong SteamAPI_ISteamMatchmaking_RequestLobbyList(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter")]
+internal static extern void SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(IntPtr instancePtr, string pchKeyToMatch, string pchValueToMatch, uint eComparisonType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter")]
+internal static extern void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(IntPtr instancePtr, string pchKeyToMatch, int nValueToMatch, uint eComparisonType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter")]
+internal static extern void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(IntPtr instancePtr, string pchKeyToMatch, int nValueToBeCloseTo);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable")]
+internal static extern void SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(IntPtr instancePtr, int nSlotsAvailable);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter")]
+internal static extern void SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(IntPtr instancePtr, uint eLobbyDistanceFilter);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter")]
+internal static extern void SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(IntPtr instancePtr, int cMaxResults);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter")]
+internal static extern void SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(IntPtr instancePtr, ulong steamIDLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyByIndex")]
+internal static extern ulong SteamAPI_ISteamMatchmaking_GetLobbyByIndex(IntPtr instancePtr, int iLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_CreateLobby")]
+internal static extern ulong SteamAPI_ISteamMatchmaking_CreateLobby(IntPtr instancePtr, uint eLobbyType, int cMaxMembers);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_JoinLobby")]
+internal static extern ulong SteamAPI_ISteamMatchmaking_JoinLobby(IntPtr instancePtr, ulong steamIDLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_LeaveLobby")]
+internal static extern void SteamAPI_ISteamMatchmaking_LeaveLobby(IntPtr instancePtr, ulong steamIDLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_InviteUserToLobby")]
+internal static extern bool SteamAPI_ISteamMatchmaking_InviteUserToLobby(IntPtr instancePtr, ulong steamIDLobby, ulong steamIDInvitee);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetNumLobbyMembers")]
+internal static extern int SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(IntPtr instancePtr, ulong steamIDLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex")]
+internal static extern ulong SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(IntPtr instancePtr, ulong steamIDLobby, int iMember);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyData")]
+internal static extern IntPtr SteamAPI_ISteamMatchmaking_GetLobbyData(IntPtr instancePtr, ulong steamIDLobby, string pchKey);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_SetLobbyData")]
+internal static extern bool SteamAPI_ISteamMatchmaking_SetLobbyData(IntPtr instancePtr, ulong steamIDLobby, string pchKey, string pchValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyDataCount")]
+internal static extern int SteamAPI_ISteamMatchmaking_GetLobbyDataCount(IntPtr instancePtr, ulong steamIDLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex")]
+internal static extern bool SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(IntPtr instancePtr, ulong steamIDLobby, int iLobbyData, string pchKey, int cchKeyBufferSize, string pchValue, int cchValueBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_DeleteLobbyData")]
+internal static extern bool SteamAPI_ISteamMatchmaking_DeleteLobbyData(IntPtr instancePtr, ulong steamIDLobby, string pchKey);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyMemberData")]
+internal static extern IntPtr SteamAPI_ISteamMatchmaking_GetLobbyMemberData(IntPtr instancePtr, ulong steamIDLobby, ulong steamIDUser, string pchKey);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_SetLobbyMemberData")]
+internal static extern void SteamAPI_ISteamMatchmaking_SetLobbyMemberData(IntPtr instancePtr, ulong steamIDLobby, string pchKey, string pchValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_SendLobbyChatMsg")]
+internal static extern bool SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(IntPtr instancePtr, ulong steamIDLobby, IntPtr pvMsgBody, int cubMsgBody);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyChatEntry")]
+internal static extern int SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(IntPtr instancePtr, ulong steamIDLobby, int iChatID, ref CSteamID pSteamIDUser, IntPtr pvData, int cubData, ref uint peChatEntryType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_RequestLobbyData")]
+internal static extern bool SteamAPI_ISteamMatchmaking_RequestLobbyData(IntPtr instancePtr, ulong steamIDLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_SetLobbyGameServer")]
+internal static extern void SteamAPI_ISteamMatchmaking_SetLobbyGameServer(IntPtr instancePtr, ulong steamIDLobby, uint unGameServerIP, char unGameServerPort, ulong steamIDGameServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyGameServer")]
+internal static extern bool SteamAPI_ISteamMatchmaking_GetLobbyGameServer(IntPtr instancePtr, ulong steamIDLobby, ref uint punGameServerIP, ref char punGameServerPort, ref CSteamID psteamIDGameServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit")]
+internal static extern bool SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(IntPtr instancePtr, ulong steamIDLobby, int cMaxMembers);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit")]
+internal static extern int SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(IntPtr instancePtr, ulong steamIDLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_SetLobbyType")]
+internal static extern bool SteamAPI_ISteamMatchmaking_SetLobbyType(IntPtr instancePtr, ulong steamIDLobby, uint eLobbyType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_SetLobbyJoinable")]
+internal static extern bool SteamAPI_ISteamMatchmaking_SetLobbyJoinable(IntPtr instancePtr, ulong steamIDLobby, bool bLobbyJoinable);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_GetLobbyOwner")]
+internal static extern ulong SteamAPI_ISteamMatchmaking_GetLobbyOwner(IntPtr instancePtr, ulong steamIDLobby);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_SetLobbyOwner")]
+internal static extern bool SteamAPI_ISteamMatchmaking_SetLobbyOwner(IntPtr instancePtr, ulong steamIDLobby, ulong steamIDNewOwner);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmaking_SetLinkedLobby")]
+internal static extern bool SteamAPI_ISteamMatchmaking_SetLinkedLobby(IntPtr instancePtr, ulong steamIDLobby, ulong steamIDLobbyDependent);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded")]
+internal static extern void SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(IntPtr instancePtr, uint hRequest, int iServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond")]
+internal static extern void SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(IntPtr instancePtr, uint hRequest, int iServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete")]
+internal static extern void SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(IntPtr instancePtr, uint hRequest, uint response);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingPingResponse_ServerResponded")]
+internal static extern void SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(IntPtr instancePtr, IntPtr server);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond")]
+internal static extern void SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList")]
+internal static extern void SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(IntPtr instancePtr, string pchName, int nScore, float flTimePlayed);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond")]
+internal static extern void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete")]
+internal static extern void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded")]
+internal static extern void SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(IntPtr instancePtr, string pchRule, string pchValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond")]
+internal static extern void SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete")]
+internal static extern void SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_RequestInternetServerList")]
+internal static extern uint SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(IntPtr instancePtr, uint iApp, [In, Out] IntPtr[] ppchFilters, uint nFilters, IntPtr pRequestServersResponse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_RequestLANServerList")]
+internal static extern uint SteamAPI_ISteamMatchmakingServers_RequestLANServerList(IntPtr instancePtr, uint iApp, IntPtr pRequestServersResponse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList")]
+internal static extern uint SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(IntPtr instancePtr, uint iApp, [In, Out] IntPtr[] ppchFilters, uint nFilters, IntPtr pRequestServersResponse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList")]
+internal static extern uint SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(IntPtr instancePtr, uint iApp, [In, Out] IntPtr[] ppchFilters, uint nFilters, IntPtr pRequestServersResponse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList")]
+internal static extern uint SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(IntPtr instancePtr, uint iApp, [In, Out] IntPtr[] ppchFilters, uint nFilters, IntPtr pRequestServersResponse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList")]
+internal static extern uint SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(IntPtr instancePtr, uint iApp, [In, Out] IntPtr[] ppchFilters, uint nFilters, IntPtr pRequestServersResponse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_ReleaseRequest")]
+internal static extern void SteamAPI_ISteamMatchmakingServers_ReleaseRequest(IntPtr instancePtr, uint hServerListRequest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_GetServerDetails")]
+internal static extern IntPtr SteamAPI_ISteamMatchmakingServers_GetServerDetails(IntPtr instancePtr, uint hRequest, int iServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_CancelQuery")]
+internal static extern void SteamAPI_ISteamMatchmakingServers_CancelQuery(IntPtr instancePtr, uint hRequest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_RefreshQuery")]
+internal static extern void SteamAPI_ISteamMatchmakingServers_RefreshQuery(IntPtr instancePtr, uint hRequest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_IsRefreshing")]
+internal static extern bool SteamAPI_ISteamMatchmakingServers_IsRefreshing(IntPtr instancePtr, uint hRequest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_GetServerCount")]
+internal static extern int SteamAPI_ISteamMatchmakingServers_GetServerCount(IntPtr instancePtr, uint hRequest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_RefreshServer")]
+internal static extern void SteamAPI_ISteamMatchmakingServers_RefreshServer(IntPtr instancePtr, uint hRequest, int iServer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_PingServer")]
+internal static extern uint SteamAPI_ISteamMatchmakingServers_PingServer(IntPtr instancePtr, uint unIP, char usPort, IntPtr pRequestServersResponse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_PlayerDetails")]
+internal static extern uint SteamAPI_ISteamMatchmakingServers_PlayerDetails(IntPtr instancePtr, uint unIP, char usPort, IntPtr pRequestServersResponse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_ServerRules")]
+internal static extern uint SteamAPI_ISteamMatchmakingServers_ServerRules(IntPtr instancePtr, uint unIP, char usPort, IntPtr pRequestServersResponse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMatchmakingServers_CancelServerQuery")]
+internal static extern void SteamAPI_ISteamMatchmakingServers_CancelServerQuery(IntPtr instancePtr, uint hServerQuery);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileWrite")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_FileWrite(IntPtr instancePtr, string pchFile, IntPtr pvData, int cubData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileRead")]
+internal static extern int SteamAPI_ISteamRemoteStorage_FileRead(IntPtr instancePtr, string pchFile, IntPtr pvData, int cubDataToRead);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileWriteAsync")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_FileWriteAsync(IntPtr instancePtr, string pchFile, IntPtr pvData, uint cubData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileReadAsync")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_FileReadAsync(IntPtr instancePtr, string pchFile, uint nOffset, uint cubToRead);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileReadAsyncComplete")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_FileReadAsyncComplete(IntPtr instancePtr, ulong hReadCall, IntPtr pvBuffer, uint cubToRead);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileForget")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_FileForget(IntPtr instancePtr, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileDelete")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_FileDelete(IntPtr instancePtr, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileShare")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_FileShare(IntPtr instancePtr, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_SetSyncPlatforms")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(IntPtr instancePtr, string pchFile, uint eRemoteStoragePlatform);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(IntPtr instancePtr, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(IntPtr instancePtr, ulong writeHandle, IntPtr pvData, int cubData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileWriteStreamClose")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(IntPtr instancePtr, ulong writeHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(IntPtr instancePtr, ulong writeHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FileExists")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_FileExists(IntPtr instancePtr, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_FilePersisted")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_FilePersisted(IntPtr instancePtr, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetFileSize")]
+internal static extern int SteamAPI_ISteamRemoteStorage_GetFileSize(IntPtr instancePtr, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetFileTimestamp")]
+internal static extern long SteamAPI_ISteamRemoteStorage_GetFileTimestamp(IntPtr instancePtr, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetSyncPlatforms")]
+internal static extern uint SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(IntPtr instancePtr, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetFileCount")]
+internal static extern int SteamAPI_ISteamRemoteStorage_GetFileCount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetFileNameAndSize")]
+internal static extern IntPtr SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(IntPtr instancePtr, int iFile, ref int pnFileSizeInBytes);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetQuota")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_GetQuota(IntPtr instancePtr, ref ulong pnTotalBytes, ref ulong puAvailableBytes);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp")]
+internal static extern void SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(IntPtr instancePtr, bool bEnabled);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UGCDownload")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_UGCDownload(IntPtr instancePtr, ulong hContent, uint unPriority);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(IntPtr instancePtr, ulong hContent, ref int pnBytesDownloaded, ref int pnBytesExpected);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetUGCDetails")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_GetUGCDetails(IntPtr instancePtr, ulong hContent, ref uint pnAppID, System.Text.StringBuilder ppchName, ref int pnFileSizeInBytes, ref CSteamID pSteamIDOwner);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UGCRead")]
+internal static extern int SteamAPI_ISteamRemoteStorage_UGCRead(IntPtr instancePtr, ulong hContent, IntPtr pvData, int cubDataToRead, uint cOffset, uint eAction);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetCachedUGCCount")]
+internal static extern int SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(IntPtr instancePtr, int iCachedContent);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_PublishWorkshopFile")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(IntPtr instancePtr, string pchFile, string pchPreviewFile, uint nConsumerAppId, string pchTitle, string pchDescription, uint eVisibility, ref SteamParamStringArray_t pTags, uint eWorkshopFileType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(IntPtr instancePtr, ulong unPublishedFileId);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(IntPtr instancePtr, ulong updateHandle, string pchFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(IntPtr instancePtr, ulong updateHandle, string pchPreviewFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(IntPtr instancePtr, ulong updateHandle, string pchTitle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(IntPtr instancePtr, ulong updateHandle, string pchDescription);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(IntPtr instancePtr, ulong updateHandle, uint eVisibility);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(IntPtr instancePtr, ulong updateHandle, ref SteamParamStringArray_t pTags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(IntPtr instancePtr, ulong updateHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(IntPtr instancePtr, ulong unPublishedFileId, uint unMaxSecondsOld);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_DeletePublishedFile")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_DeletePublishedFile(IntPtr instancePtr, ulong unPublishedFileId);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(IntPtr instancePtr, uint unStartIndex);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_SubscribePublishedFile")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(IntPtr instancePtr, ulong unPublishedFileId);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(IntPtr instancePtr, uint unStartIndex);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(IntPtr instancePtr, ulong unPublishedFileId);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription")]
+internal static extern bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(IntPtr instancePtr, ulong updateHandle, string pchChangeDescription);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(IntPtr instancePtr, ulong unPublishedFileId);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(IntPtr instancePtr, ulong unPublishedFileId, bool bVoteUp);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(IntPtr instancePtr, ulong unPublishedFileId);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(IntPtr instancePtr, ulong steamId, uint unStartIndex, ref SteamParamStringArray_t pRequiredTags, ref SteamParamStringArray_t pExcludedTags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_PublishVideo")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_PublishVideo(IntPtr instancePtr, uint eVideoProvider, string pchVideoAccount, string pchVideoIdentifier, string pchPreviewFile, uint nConsumerAppId, string pchTitle, string pchDescription, uint eVisibility, ref SteamParamStringArray_t pTags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(IntPtr instancePtr, ulong unPublishedFileId, uint eAction);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(IntPtr instancePtr, uint eAction, uint unStartIndex);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(IntPtr instancePtr, uint eEnumerationType, uint unStartIndex, uint unCount, uint unDays, ref SteamParamStringArray_t pTags, ref SteamParamStringArray_t pUserTags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation")]
+internal static extern ulong SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(IntPtr instancePtr, ulong hContent, string pchLocation, uint unPriority);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_RequestCurrentStats")]
+internal static extern bool SteamAPI_ISteamUserStats_RequestCurrentStats(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetStat")]
+internal static extern bool SteamAPI_ISteamUserStats_GetStat(IntPtr instancePtr, string pchName, ref int pData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetStat0")]
+internal static extern bool SteamAPI_ISteamUserStats_GetStat0(IntPtr instancePtr, string pchName, ref float pData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_SetStat")]
+internal static extern bool SteamAPI_ISteamUserStats_SetStat(IntPtr instancePtr, string pchName, int nData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_SetStat0")]
+internal static extern bool SteamAPI_ISteamUserStats_SetStat0(IntPtr instancePtr, string pchName, float fData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_UpdateAvgRateStat")]
+internal static extern bool SteamAPI_ISteamUserStats_UpdateAvgRateStat(IntPtr instancePtr, string pchName, float flCountThisSession, double dSessionLength);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetAchievement")]
+internal static extern bool SteamAPI_ISteamUserStats_GetAchievement(IntPtr instancePtr, string pchName, ref bool pbAchieved);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_SetAchievement")]
+internal static extern bool SteamAPI_ISteamUserStats_SetAchievement(IntPtr instancePtr, string pchName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_ClearAchievement")]
+internal static extern bool SteamAPI_ISteamUserStats_ClearAchievement(IntPtr instancePtr, string pchName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime")]
+internal static extern bool SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(IntPtr instancePtr, string pchName, ref bool pbAchieved, ref uint punUnlockTime);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_StoreStats")]
+internal static extern bool SteamAPI_ISteamUserStats_StoreStats(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetAchievementIcon")]
+internal static extern int SteamAPI_ISteamUserStats_GetAchievementIcon(IntPtr instancePtr, string pchName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute")]
+internal static extern IntPtr SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(IntPtr instancePtr, string pchName, string pchKey);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_IndicateAchievementProgress")]
+internal static extern bool SteamAPI_ISteamUserStats_IndicateAchievementProgress(IntPtr instancePtr, string pchName, uint nCurProgress, uint nMaxProgress);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetNumAchievements")]
+internal static extern uint SteamAPI_ISteamUserStats_GetNumAchievements(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetAchievementName")]
+internal static extern IntPtr SteamAPI_ISteamUserStats_GetAchievementName(IntPtr instancePtr, uint iAchievement);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_RequestUserStats")]
+internal static extern ulong SteamAPI_ISteamUserStats_RequestUserStats(IntPtr instancePtr, ulong steamIDUser);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetUserStat")]
+internal static extern bool SteamAPI_ISteamUserStats_GetUserStat(IntPtr instancePtr, ulong steamIDUser, string pchName, ref int pData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetUserStat0")]
+internal static extern bool SteamAPI_ISteamUserStats_GetUserStat0(IntPtr instancePtr, ulong steamIDUser, string pchName, ref float pData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetUserAchievement")]
+internal static extern bool SteamAPI_ISteamUserStats_GetUserAchievement(IntPtr instancePtr, ulong steamIDUser, string pchName, ref bool pbAchieved);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime")]
+internal static extern bool SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(IntPtr instancePtr, ulong steamIDUser, string pchName, ref bool pbAchieved, ref uint punUnlockTime);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_ResetAllStats")]
+internal static extern bool SteamAPI_ISteamUserStats_ResetAllStats(IntPtr instancePtr, bool bAchievementsToo);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_FindOrCreateLeaderboard")]
+internal static extern ulong SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(IntPtr instancePtr, string pchLeaderboardName, uint eLeaderboardSortMethod, uint eLeaderboardDisplayType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_FindLeaderboard")]
+internal static extern ulong SteamAPI_ISteamUserStats_FindLeaderboard(IntPtr instancePtr, string pchLeaderboardName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetLeaderboardName")]
+internal static extern IntPtr SteamAPI_ISteamUserStats_GetLeaderboardName(IntPtr instancePtr, ulong hSteamLeaderboard);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetLeaderboardEntryCount")]
+internal static extern int SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(IntPtr instancePtr, ulong hSteamLeaderboard);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetLeaderboardSortMethod")]
+internal static extern uint SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(IntPtr instancePtr, ulong hSteamLeaderboard);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetLeaderboardDisplayType")]
+internal static extern uint SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(IntPtr instancePtr, ulong hSteamLeaderboard);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_DownloadLeaderboardEntries")]
+internal static extern ulong SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(IntPtr instancePtr, ulong hSteamLeaderboard, uint eLeaderboardDataRequest, int nRangeStart, int nRangeEnd);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers")]
+internal static extern ulong SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(IntPtr instancePtr, ulong hSteamLeaderboard, [In, Out] CSteamID[] prgUsers, int cUsers);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry")]
+internal static extern bool SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(IntPtr instancePtr, ulong hSteamLeaderboardEntries, int index, ref LeaderboardEntry_t pLeaderboardEntry, ref int pDetails, int cDetailsMax);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_UploadLeaderboardScore")]
+internal static extern ulong SteamAPI_ISteamUserStats_UploadLeaderboardScore(IntPtr instancePtr, ulong hSteamLeaderboard, uint eLeaderboardUploadScoreMethod, int nScore, ref int pScoreDetails, int cScoreDetailsCount);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_AttachLeaderboardUGC")]
+internal static extern ulong SteamAPI_ISteamUserStats_AttachLeaderboardUGC(IntPtr instancePtr, ulong hSteamLeaderboard, ulong hUGC);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers")]
+internal static extern ulong SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages")]
+internal static extern ulong SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo")]
+internal static extern int SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(IntPtr instancePtr, string pchName, uint unNameBufLen, ref float pflPercent, ref bool pbAchieved);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo")]
+internal static extern int SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(IntPtr instancePtr, int iIteratorPrevious, string pchName, uint unNameBufLen, ref float pflPercent, ref bool pbAchieved);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetAchievementAchievedPercent")]
+internal static extern bool SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(IntPtr instancePtr, string pchName, ref float pflPercent);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_RequestGlobalStats")]
+internal static extern ulong SteamAPI_ISteamUserStats_RequestGlobalStats(IntPtr instancePtr, int nHistoryDays);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetGlobalStat")]
+internal static extern bool SteamAPI_ISteamUserStats_GetGlobalStat(IntPtr instancePtr, string pchStatName, ref long pData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetGlobalStat0")]
+internal static extern bool SteamAPI_ISteamUserStats_GetGlobalStat0(IntPtr instancePtr, string pchStatName, ref double pData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetGlobalStatHistory")]
+internal static extern int SteamAPI_ISteamUserStats_GetGlobalStatHistory(IntPtr instancePtr, string pchStatName, [In, Out] long[] pData, uint cubData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUserStats_GetGlobalStatHistory0")]
+internal static extern int SteamAPI_ISteamUserStats_GetGlobalStatHistory0(IntPtr instancePtr, string pchStatName, [In, Out] double[] pData, uint cubData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_BIsSubscribed")]
+internal static extern bool SteamAPI_ISteamApps_BIsSubscribed(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_BIsLowViolence")]
+internal static extern bool SteamAPI_ISteamApps_BIsLowViolence(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_BIsCybercafe")]
+internal static extern bool SteamAPI_ISteamApps_BIsCybercafe(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_BIsVACBanned")]
+internal static extern bool SteamAPI_ISteamApps_BIsVACBanned(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetCurrentGameLanguage")]
+internal static extern IntPtr SteamAPI_ISteamApps_GetCurrentGameLanguage(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetAvailableGameLanguages")]
+internal static extern IntPtr SteamAPI_ISteamApps_GetAvailableGameLanguages(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_BIsSubscribedApp")]
+internal static extern bool SteamAPI_ISteamApps_BIsSubscribedApp(IntPtr instancePtr, uint appID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_BIsDlcInstalled")]
+internal static extern bool SteamAPI_ISteamApps_BIsDlcInstalled(IntPtr instancePtr, uint appID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime")]
+internal static extern uint SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(IntPtr instancePtr, uint nAppID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend")]
+internal static extern bool SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetDLCCount")]
+internal static extern int SteamAPI_ISteamApps_GetDLCCount(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_BGetDLCDataByIndex")]
+internal static extern bool SteamAPI_ISteamApps_BGetDLCDataByIndex(IntPtr instancePtr, int iDLC, ref uint pAppID, ref bool pbAvailable, string pchName, int cchNameBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_InstallDLC")]
+internal static extern void SteamAPI_ISteamApps_InstallDLC(IntPtr instancePtr, uint nAppID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_UninstallDLC")]
+internal static extern void SteamAPI_ISteamApps_UninstallDLC(IntPtr instancePtr, uint nAppID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey")]
+internal static extern void SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(IntPtr instancePtr, uint nAppID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetCurrentBetaName")]
+internal static extern bool SteamAPI_ISteamApps_GetCurrentBetaName(IntPtr instancePtr, string pchName, int cchNameBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_MarkContentCorrupt")]
+internal static extern bool SteamAPI_ISteamApps_MarkContentCorrupt(IntPtr instancePtr, bool bMissingFilesOnly);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetInstalledDepots")]
+internal static extern uint SteamAPI_ISteamApps_GetInstalledDepots(IntPtr instancePtr, uint appID, ref uint pvecDepots, uint cMaxDepots);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetAppInstallDir")]
+internal static extern uint SteamAPI_ISteamApps_GetAppInstallDir(IntPtr instancePtr, uint appID, string pchFolder, uint cchFolderBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_BIsAppInstalled")]
+internal static extern bool SteamAPI_ISteamApps_BIsAppInstalled(IntPtr instancePtr, uint appID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetAppOwner")]
+internal static extern ulong SteamAPI_ISteamApps_GetAppOwner(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetLaunchQueryParam")]
+internal static extern IntPtr SteamAPI_ISteamApps_GetLaunchQueryParam(IntPtr instancePtr, string pchKey);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetDlcDownloadProgress")]
+internal static extern bool SteamAPI_ISteamApps_GetDlcDownloadProgress(IntPtr instancePtr, uint nAppID, ref ulong punBytesDownloaded, ref ulong punBytesTotal);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetAppBuildId")]
+internal static extern int SteamAPI_ISteamApps_GetAppBuildId(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_RequestAllProofOfPurchaseKeys")]
+internal static extern void SteamAPI_ISteamApps_RequestAllProofOfPurchaseKeys(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamApps_GetFileDetails")]
+internal static extern ulong SteamAPI_ISteamApps_GetFileDetails(IntPtr instancePtr, string pszFileName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_SendP2PPacket")]
+internal static extern bool SteamAPI_ISteamNetworking_SendP2PPacket(IntPtr instancePtr, ulong steamIDRemote, IntPtr pubData, uint cubData, uint eP2PSendType, int nChannel);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_IsP2PPacketAvailable")]
+internal static extern bool SteamAPI_ISteamNetworking_IsP2PPacketAvailable(IntPtr instancePtr, ref uint pcubMsgSize, int nChannel);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_ReadP2PPacket")]
+internal static extern bool SteamAPI_ISteamNetworking_ReadP2PPacket(IntPtr instancePtr, IntPtr pubDest, uint cubDest, ref uint pcubMsgSize, ref CSteamID psteamIDRemote, int nChannel);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser")]
+internal static extern bool SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(IntPtr instancePtr, ulong steamIDRemote);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_CloseP2PSessionWithUser")]
+internal static extern bool SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(IntPtr instancePtr, ulong steamIDRemote);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_CloseP2PChannelWithUser")]
+internal static extern bool SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(IntPtr instancePtr, ulong steamIDRemote, int nChannel);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_GetP2PSessionState")]
+internal static extern bool SteamAPI_ISteamNetworking_GetP2PSessionState(IntPtr instancePtr, ulong steamIDRemote, ref P2PSessionState_t pConnectionState);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_AllowP2PPacketRelay")]
+internal static extern bool SteamAPI_ISteamNetworking_AllowP2PPacketRelay(IntPtr instancePtr, bool bAllow);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_CreateListenSocket")]
+internal static extern uint SteamAPI_ISteamNetworking_CreateListenSocket(IntPtr instancePtr, int nVirtualP2PPort, uint nIP, char nPort, bool bAllowUseOfPacketRelay);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_CreateP2PConnectionSocket")]
+internal static extern uint SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(IntPtr instancePtr, ulong steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_CreateConnectionSocket")]
+internal static extern uint SteamAPI_ISteamNetworking_CreateConnectionSocket(IntPtr instancePtr, uint nIP, char nPort, int nTimeoutSec);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_DestroySocket")]
+internal static extern bool SteamAPI_ISteamNetworking_DestroySocket(IntPtr instancePtr, uint hSocket, bool bNotifyRemoteEnd);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_DestroyListenSocket")]
+internal static extern bool SteamAPI_ISteamNetworking_DestroyListenSocket(IntPtr instancePtr, uint hSocket, bool bNotifyRemoteEnd);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_SendDataOnSocket")]
+internal static extern bool SteamAPI_ISteamNetworking_SendDataOnSocket(IntPtr instancePtr, uint hSocket, IntPtr pubData, uint cubData, bool bReliable);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_IsDataAvailableOnSocket")]
+internal static extern bool SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(IntPtr instancePtr, uint hSocket, ref uint pcubMsgSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_RetrieveDataFromSocket")]
+internal static extern bool SteamAPI_ISteamNetworking_RetrieveDataFromSocket(IntPtr instancePtr, uint hSocket, IntPtr pubDest, uint cubDest, ref uint pcubMsgSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_IsDataAvailable")]
+internal static extern bool SteamAPI_ISteamNetworking_IsDataAvailable(IntPtr instancePtr, uint hListenSocket, ref uint pcubMsgSize, ref uint phSocket);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_RetrieveData")]
+internal static extern bool SteamAPI_ISteamNetworking_RetrieveData(IntPtr instancePtr, uint hListenSocket, IntPtr pubDest, uint cubDest, ref uint pcubMsgSize, ref uint phSocket);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_GetSocketInfo")]
+internal static extern bool SteamAPI_ISteamNetworking_GetSocketInfo(IntPtr instancePtr, uint hSocket, ref CSteamID pSteamIDRemote, ref int peSocketStatus, ref uint punIPRemote, ref char punPortRemote);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_GetListenSocketInfo")]
+internal static extern bool SteamAPI_ISteamNetworking_GetListenSocketInfo(IntPtr instancePtr, uint hListenSocket, ref uint pnIP, ref char pnPort);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_GetSocketConnectionType")]
+internal static extern uint SteamAPI_ISteamNetworking_GetSocketConnectionType(IntPtr instancePtr, uint hSocket);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamNetworking_GetMaxPacketSize")]
+internal static extern int SteamAPI_ISteamNetworking_GetMaxPacketSize(IntPtr instancePtr, uint hSocket);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamScreenshots_WriteScreenshot")]
+internal static extern uint SteamAPI_ISteamScreenshots_WriteScreenshot(IntPtr instancePtr, IntPtr pubRGB, uint cubRGB, int nWidth, int nHeight);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamScreenshots_AddScreenshotToLibrary")]
+internal static extern uint SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(IntPtr instancePtr, string pchFilename, string pchThumbnailFilename, int nWidth, int nHeight);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamScreenshots_TriggerScreenshot")]
+internal static extern void SteamAPI_ISteamScreenshots_TriggerScreenshot(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamScreenshots_HookScreenshots")]
+internal static extern void SteamAPI_ISteamScreenshots_HookScreenshots(IntPtr instancePtr, bool bHook);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamScreenshots_SetLocation")]
+internal static extern bool SteamAPI_ISteamScreenshots_SetLocation(IntPtr instancePtr, uint hScreenshot, string pchLocation);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamScreenshots_TagUser")]
+internal static extern bool SteamAPI_ISteamScreenshots_TagUser(IntPtr instancePtr, uint hScreenshot, ulong steamID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamScreenshots_TagPublishedFile")]
+internal static extern bool SteamAPI_ISteamScreenshots_TagPublishedFile(IntPtr instancePtr, uint hScreenshot, ulong unPublishedFileID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamScreenshots_IsScreenshotsHooked")]
+internal static extern bool SteamAPI_ISteamScreenshots_IsScreenshotsHooked(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamScreenshots_AddVRScreenshotToLibrary")]
+internal static extern uint SteamAPI_ISteamScreenshots_AddVRScreenshotToLibrary(IntPtr instancePtr, uint eType, string pchFilename, string pchVRFilename);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusic_BIsEnabled")]
+internal static extern bool SteamAPI_ISteamMusic_BIsEnabled(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusic_BIsPlaying")]
+internal static extern bool SteamAPI_ISteamMusic_BIsPlaying(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusic_GetPlaybackStatus")]
+internal static extern int SteamAPI_ISteamMusic_GetPlaybackStatus(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusic_Play")]
+internal static extern void SteamAPI_ISteamMusic_Play(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusic_Pause")]
+internal static extern void SteamAPI_ISteamMusic_Pause(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusic_PlayPrevious")]
+internal static extern void SteamAPI_ISteamMusic_PlayPrevious(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusic_PlayNext")]
+internal static extern void SteamAPI_ISteamMusic_PlayNext(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusic_SetVolume")]
+internal static extern void SteamAPI_ISteamMusic_SetVolume(IntPtr instancePtr, float flVolume);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusic_GetVolume")]
+internal static extern float SteamAPI_ISteamMusic_GetVolume(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote")]
+internal static extern bool SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(IntPtr instancePtr, string pchName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote")]
+internal static extern bool SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote")]
+internal static extern bool SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_BActivationSuccess")]
+internal static extern bool SteamAPI_ISteamMusicRemote_BActivationSuccess(IntPtr instancePtr, bool bValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_SetDisplayName")]
+internal static extern bool SteamAPI_ISteamMusicRemote_SetDisplayName(IntPtr instancePtr, string pchDisplayName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64")]
+internal static extern bool SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(IntPtr instancePtr, IntPtr pvBuffer, uint cbBufferLength);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_EnablePlayPrevious")]
+internal static extern bool SteamAPI_ISteamMusicRemote_EnablePlayPrevious(IntPtr instancePtr, bool bValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_EnablePlayNext")]
+internal static extern bool SteamAPI_ISteamMusicRemote_EnablePlayNext(IntPtr instancePtr, bool bValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_EnableShuffled")]
+internal static extern bool SteamAPI_ISteamMusicRemote_EnableShuffled(IntPtr instancePtr, bool bValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_EnableLooped")]
+internal static extern bool SteamAPI_ISteamMusicRemote_EnableLooped(IntPtr instancePtr, bool bValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_EnableQueue")]
+internal static extern bool SteamAPI_ISteamMusicRemote_EnableQueue(IntPtr instancePtr, bool bValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_EnablePlaylists")]
+internal static extern bool SteamAPI_ISteamMusicRemote_EnablePlaylists(IntPtr instancePtr, bool bValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus")]
+internal static extern bool SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(IntPtr instancePtr, int nStatus);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_UpdateShuffled")]
+internal static extern bool SteamAPI_ISteamMusicRemote_UpdateShuffled(IntPtr instancePtr, bool bValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_UpdateLooped")]
+internal static extern bool SteamAPI_ISteamMusicRemote_UpdateLooped(IntPtr instancePtr, bool bValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_UpdateVolume")]
+internal static extern bool SteamAPI_ISteamMusicRemote_UpdateVolume(IntPtr instancePtr, float flValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_CurrentEntryWillChange")]
+internal static extern bool SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable")]
+internal static extern bool SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(IntPtr instancePtr, bool bAvailable);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText")]
+internal static extern bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(IntPtr instancePtr, string pchText);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds")]
+internal static extern bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(IntPtr instancePtr, int nValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt")]
+internal static extern bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(IntPtr instancePtr, IntPtr pvBuffer, uint cbBufferLength);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_CurrentEntryDidChange")]
+internal static extern bool SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_QueueWillChange")]
+internal static extern bool SteamAPI_ISteamMusicRemote_QueueWillChange(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_ResetQueueEntries")]
+internal static extern bool SteamAPI_ISteamMusicRemote_ResetQueueEntries(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_SetQueueEntry")]
+internal static extern bool SteamAPI_ISteamMusicRemote_SetQueueEntry(IntPtr instancePtr, int nID, int nPosition, string pchEntryText);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry")]
+internal static extern bool SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(IntPtr instancePtr, int nID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_QueueDidChange")]
+internal static extern bool SteamAPI_ISteamMusicRemote_QueueDidChange(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_PlaylistWillChange")]
+internal static extern bool SteamAPI_ISteamMusicRemote_PlaylistWillChange(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_ResetPlaylistEntries")]
+internal static extern bool SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_SetPlaylistEntry")]
+internal static extern bool SteamAPI_ISteamMusicRemote_SetPlaylistEntry(IntPtr instancePtr, int nID, int nPosition, string pchEntryText);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry")]
+internal static extern bool SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(IntPtr instancePtr, int nID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamMusicRemote_PlaylistDidChange")]
+internal static extern bool SteamAPI_ISteamMusicRemote_PlaylistDidChange(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_CreateHTTPRequest")]
+internal static extern uint SteamAPI_ISteamHTTP_CreateHTTPRequest(IntPtr instancePtr, uint eHTTPRequestMethod, string pchAbsoluteURL);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetHTTPRequestContextValue")]
+internal static extern bool SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(IntPtr instancePtr, uint hRequest, ulong ulContextValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout")]
+internal static extern bool SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(IntPtr instancePtr, uint hRequest, uint unTimeoutSeconds);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue")]
+internal static extern bool SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(IntPtr instancePtr, uint hRequest, string pchHeaderName, string pchHeaderValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter")]
+internal static extern bool SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(IntPtr instancePtr, uint hRequest, string pchParamName, string pchParamValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SendHTTPRequest")]
+internal static extern bool SteamAPI_ISteamHTTP_SendHTTPRequest(IntPtr instancePtr, uint hRequest, ref ulong pCallHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse")]
+internal static extern bool SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(IntPtr instancePtr, uint hRequest, ref ulong pCallHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_DeferHTTPRequest")]
+internal static extern bool SteamAPI_ISteamHTTP_DeferHTTPRequest(IntPtr instancePtr, uint hRequest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_PrioritizeHTTPRequest")]
+internal static extern bool SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(IntPtr instancePtr, uint hRequest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize")]
+internal static extern bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(IntPtr instancePtr, uint hRequest, string pchHeaderName, ref uint unResponseHeaderSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue")]
+internal static extern bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(IntPtr instancePtr, uint hRequest, string pchHeaderName, IntPtr pHeaderValueBuffer, uint unBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_GetHTTPResponseBodySize")]
+internal static extern bool SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(IntPtr instancePtr, uint hRequest, ref uint unBodySize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_GetHTTPResponseBodyData")]
+internal static extern bool SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(IntPtr instancePtr, uint hRequest, IntPtr pBodyDataBuffer, uint unBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData")]
+internal static extern bool SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(IntPtr instancePtr, uint hRequest, uint cOffset, IntPtr pBodyDataBuffer, uint unBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_ReleaseHTTPRequest")]
+internal static extern bool SteamAPI_ISteamHTTP_ReleaseHTTPRequest(IntPtr instancePtr, uint hRequest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct")]
+internal static extern bool SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(IntPtr instancePtr, uint hRequest, ref float pflPercentOut);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody")]
+internal static extern bool SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(IntPtr instancePtr, uint hRequest, string pchContentType, IntPtr pubBody, uint unBodyLen);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_CreateCookieContainer")]
+internal static extern uint SteamAPI_ISteamHTTP_CreateCookieContainer(IntPtr instancePtr, bool bAllowResponsesToModify);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_ReleaseCookieContainer")]
+internal static extern bool SteamAPI_ISteamHTTP_ReleaseCookieContainer(IntPtr instancePtr, uint hCookieContainer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetCookie")]
+internal static extern bool SteamAPI_ISteamHTTP_SetCookie(IntPtr instancePtr, uint hCookieContainer, string pchHost, string pchUrl, string pchCookie);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer")]
+internal static extern bool SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(IntPtr instancePtr, uint hRequest, uint hCookieContainer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo")]
+internal static extern bool SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(IntPtr instancePtr, uint hRequest, string pchUserAgentInfo);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate")]
+internal static extern bool SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(IntPtr instancePtr, uint hRequest, bool bRequireVerifiedCertificate);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS")]
+internal static extern bool SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(IntPtr instancePtr, uint hRequest, uint unMilliseconds);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut")]
+internal static extern bool SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(IntPtr instancePtr, uint hRequest, ref bool pbWasTimedOut);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUnifiedMessages_SendMethod")]
+internal static extern ulong SteamAPI_ISteamUnifiedMessages_SendMethod(IntPtr instancePtr, string pchServiceMethod, IntPtr pRequestBuffer, uint unRequestBufferSize, ulong unContext);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo")]
+internal static extern bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo(IntPtr instancePtr, ulong hHandle, ref uint punResponseSize, ref uint peResult);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUnifiedMessages_GetMethodResponseData")]
+internal static extern bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseData(IntPtr instancePtr, ulong hHandle, IntPtr pResponseBuffer, uint unResponseBufferSize, bool bAutoRelease);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUnifiedMessages_ReleaseMethod")]
+internal static extern bool SteamAPI_ISteamUnifiedMessages_ReleaseMethod(IntPtr instancePtr, ulong hHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUnifiedMessages_SendNotification")]
+internal static extern bool SteamAPI_ISteamUnifiedMessages_SendNotification(IntPtr instancePtr, string pchServiceNotification, IntPtr pNotificationBuffer, uint unNotificationBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_Init")]
+internal static extern bool SteamAPI_ISteamController_Init(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_Shutdown")]
+internal static extern bool SteamAPI_ISteamController_Shutdown(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_RunFrame")]
+internal static extern void SteamAPI_ISteamController_RunFrame(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetConnectedControllers")]
+internal static extern int SteamAPI_ISteamController_GetConnectedControllers(IntPtr instancePtr, ref ulong handlesOut);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_ShowBindingPanel")]
+internal static extern bool SteamAPI_ISteamController_ShowBindingPanel(IntPtr instancePtr, ulong controllerHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetActionSetHandle")]
+internal static extern ulong SteamAPI_ISteamController_GetActionSetHandle(IntPtr instancePtr, string pszActionSetName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_ActivateActionSet")]
+internal static extern void SteamAPI_ISteamController_ActivateActionSet(IntPtr instancePtr, ulong controllerHandle, ulong actionSetHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetCurrentActionSet")]
+internal static extern ulong SteamAPI_ISteamController_GetCurrentActionSet(IntPtr instancePtr, ulong controllerHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetDigitalActionHandle")]
+internal static extern ulong SteamAPI_ISteamController_GetDigitalActionHandle(IntPtr instancePtr, string pszActionName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetDigitalActionData")]
+internal static extern ControllerDigitalActionData_t SteamAPI_ISteamController_GetDigitalActionData(IntPtr instancePtr, ulong controllerHandle, ulong digitalActionHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetDigitalActionOrigins")]
+internal static extern int SteamAPI_ISteamController_GetDigitalActionOrigins(IntPtr instancePtr, ulong controllerHandle, ulong actionSetHandle, ulong digitalActionHandle, ref uint originsOut);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetAnalogActionHandle")]
+internal static extern ulong SteamAPI_ISteamController_GetAnalogActionHandle(IntPtr instancePtr, string pszActionName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetAnalogActionData")]
+internal static extern ControllerAnalogActionData_t SteamAPI_ISteamController_GetAnalogActionData(IntPtr instancePtr, ulong controllerHandle, ulong analogActionHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetAnalogActionOrigins")]
+internal static extern int SteamAPI_ISteamController_GetAnalogActionOrigins(IntPtr instancePtr, ulong controllerHandle, ulong actionSetHandle, ulong analogActionHandle, ref uint originsOut);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_StopAnalogActionMomentum")]
+internal static extern void SteamAPI_ISteamController_StopAnalogActionMomentum(IntPtr instancePtr, ulong controllerHandle, ulong eAction);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_TriggerHapticPulse")]
+internal static extern void SteamAPI_ISteamController_TriggerHapticPulse(IntPtr instancePtr, ulong controllerHandle, uint eTargetPad, char usDurationMicroSec);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_TriggerRepeatedHapticPulse")]
+internal static extern void SteamAPI_ISteamController_TriggerRepeatedHapticPulse(IntPtr instancePtr, ulong controllerHandle, uint eTargetPad, char usDurationMicroSec, char usOffMicroSec, char unRepeat, uint nFlags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_TriggerVibration")]
+internal static extern void SteamAPI_ISteamController_TriggerVibration(IntPtr instancePtr, ulong controllerHandle, char usLeftSpeed, char usRightSpeed);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_SetLEDColor")]
+internal static extern void SteamAPI_ISteamController_SetLEDColor(IntPtr instancePtr, ulong controllerHandle, byte nColorR, byte nColorG, byte nColorB, uint nFlags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetGamepadIndexForController")]
+internal static extern int SteamAPI_ISteamController_GetGamepadIndexForController(IntPtr instancePtr, ulong ulControllerHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetControllerForGamepadIndex")]
+internal static extern ulong SteamAPI_ISteamController_GetControllerForGamepadIndex(IntPtr instancePtr, int nIndex);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetMotionData")]
+internal static extern ControllerMotionData_t SteamAPI_ISteamController_GetMotionData(IntPtr instancePtr, ulong controllerHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_ShowDigitalActionOrigins")]
+internal static extern bool SteamAPI_ISteamController_ShowDigitalActionOrigins(IntPtr instancePtr, ulong controllerHandle, ulong digitalActionHandle, float flScale, float flXPosition, float flYPosition);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_ShowAnalogActionOrigins")]
+internal static extern bool SteamAPI_ISteamController_ShowAnalogActionOrigins(IntPtr instancePtr, ulong controllerHandle, ulong analogActionHandle, float flScale, float flXPosition, float flYPosition);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetStringForActionOrigin")]
+internal static extern IntPtr SteamAPI_ISteamController_GetStringForActionOrigin(IntPtr instancePtr, uint eOrigin);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamController_GetGlyphForActionOrigin")]
+internal static extern IntPtr SteamAPI_ISteamController_GetGlyphForActionOrigin(IntPtr instancePtr, uint eOrigin);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_CreateQueryUserUGCRequest")]
+internal static extern ulong SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(IntPtr instancePtr, uint unAccountID, uint eListType, uint eMatchingUGCType, uint eSortOrder, uint nCreatorAppID, uint nConsumerAppID, uint unPage);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_CreateQueryAllUGCRequest")]
+internal static extern ulong SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(IntPtr instancePtr, uint eQueryType, uint eMatchingeMatchingUGCTypeFileType, uint nCreatorAppID, uint nConsumerAppID, uint unPage);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest")]
+internal static extern ulong SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest(IntPtr instancePtr, ref ulong pvecPublishedFileID, uint unNumPublishedFileIDs);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SendQueryUGCRequest")]
+internal static extern ulong SteamAPI_ISteamUGC_SendQueryUGCRequest(IntPtr instancePtr, ulong handle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCResult")]
+internal static extern bool SteamAPI_ISteamUGC_GetQueryUGCResult(IntPtr instancePtr, ulong handle, uint index, ref SteamUGCDetails_t pDetails);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCPreviewURL")]
+internal static extern bool SteamAPI_ISteamUGC_GetQueryUGCPreviewURL(IntPtr instancePtr, ulong handle, uint index, System.Text.StringBuilder pchURL, uint cchURLSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCMetadata")]
+internal static extern bool SteamAPI_ISteamUGC_GetQueryUGCMetadata(IntPtr instancePtr, ulong handle, uint index, System.Text.StringBuilder pchMetadata, uint cchMetadatasize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCChildren")]
+internal static extern bool SteamAPI_ISteamUGC_GetQueryUGCChildren(IntPtr instancePtr, ulong handle, uint index, ref ulong pvecPublishedFileID, uint cMaxEntries);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCStatistic")]
+internal static extern bool SteamAPI_ISteamUGC_GetQueryUGCStatistic(IntPtr instancePtr, ulong handle, uint index, uint eStatType, ref ulong pStatValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews")]
+internal static extern uint SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews(IntPtr instancePtr, ulong handle, uint index);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview")]
+internal static extern bool SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview(IntPtr instancePtr, ulong handle, uint index, uint previewIndex, System.Text.StringBuilder pchURLOrVideoID, uint cchURLSize, System.Text.StringBuilder pchOriginalFileName, uint cchOriginalFileNameSize, ref uint pPreviewType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCNumKeyValueTags")]
+internal static extern uint SteamAPI_ISteamUGC_GetQueryUGCNumKeyValueTags(IntPtr instancePtr, ulong handle, uint index);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCKeyValueTag")]
+internal static extern bool SteamAPI_ISteamUGC_GetQueryUGCKeyValueTag(IntPtr instancePtr, ulong handle, uint index, uint keyValueTagIndex, System.Text.StringBuilder pchKey, uint cchKeySize, System.Text.StringBuilder pchValue, uint cchValueSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_ReleaseQueryUGCRequest")]
+internal static extern bool SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(IntPtr instancePtr, ulong handle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_AddRequiredTag")]
+internal static extern bool SteamAPI_ISteamUGC_AddRequiredTag(IntPtr instancePtr, ulong handle, string pTagName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_AddExcludedTag")]
+internal static extern bool SteamAPI_ISteamUGC_AddExcludedTag(IntPtr instancePtr, ulong handle, string pTagName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetReturnOnlyIDs")]
+internal static extern bool SteamAPI_ISteamUGC_SetReturnOnlyIDs(IntPtr instancePtr, ulong handle, bool bReturnOnlyIDs);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetReturnKeyValueTags")]
+internal static extern bool SteamAPI_ISteamUGC_SetReturnKeyValueTags(IntPtr instancePtr, ulong handle, bool bReturnKeyValueTags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetReturnLongDescription")]
+internal static extern bool SteamAPI_ISteamUGC_SetReturnLongDescription(IntPtr instancePtr, ulong handle, bool bReturnLongDescription);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetReturnMetadata")]
+internal static extern bool SteamAPI_ISteamUGC_SetReturnMetadata(IntPtr instancePtr, ulong handle, bool bReturnMetadata);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetReturnChildren")]
+internal static extern bool SteamAPI_ISteamUGC_SetReturnChildren(IntPtr instancePtr, ulong handle, bool bReturnChildren);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetReturnAdditionalPreviews")]
+internal static extern bool SteamAPI_ISteamUGC_SetReturnAdditionalPreviews(IntPtr instancePtr, ulong handle, bool bReturnAdditionalPreviews);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetReturnTotalOnly")]
+internal static extern bool SteamAPI_ISteamUGC_SetReturnTotalOnly(IntPtr instancePtr, ulong handle, bool bReturnTotalOnly);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetReturnPlaytimeStats")]
+internal static extern bool SteamAPI_ISteamUGC_SetReturnPlaytimeStats(IntPtr instancePtr, ulong handle, uint unDays);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetLanguage")]
+internal static extern bool SteamAPI_ISteamUGC_SetLanguage(IntPtr instancePtr, ulong handle, string pchLanguage);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetAllowCachedResponse")]
+internal static extern bool SteamAPI_ISteamUGC_SetAllowCachedResponse(IntPtr instancePtr, ulong handle, uint unMaxAgeSeconds);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetCloudFileNameFilter")]
+internal static extern bool SteamAPI_ISteamUGC_SetCloudFileNameFilter(IntPtr instancePtr, ulong handle, string pMatchCloudFileName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetMatchAnyTag")]
+internal static extern bool SteamAPI_ISteamUGC_SetMatchAnyTag(IntPtr instancePtr, ulong handle, bool bMatchAnyTag);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetSearchText")]
+internal static extern bool SteamAPI_ISteamUGC_SetSearchText(IntPtr instancePtr, ulong handle, string pSearchText);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetRankedByTrendDays")]
+internal static extern bool SteamAPI_ISteamUGC_SetRankedByTrendDays(IntPtr instancePtr, ulong handle, uint unDays);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_AddRequiredKeyValueTag")]
+internal static extern bool SteamAPI_ISteamUGC_AddRequiredKeyValueTag(IntPtr instancePtr, ulong handle, string pKey, string pValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_RequestUGCDetails")]
+internal static extern ulong SteamAPI_ISteamUGC_RequestUGCDetails(IntPtr instancePtr, ulong nPublishedFileID, uint unMaxAgeSeconds);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_CreateItem")]
+internal static extern ulong SteamAPI_ISteamUGC_CreateItem(IntPtr instancePtr, uint nConsumerAppId, uint eFileType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_StartItemUpdate")]
+internal static extern ulong SteamAPI_ISteamUGC_StartItemUpdate(IntPtr instancePtr, uint nConsumerAppId, ulong nPublishedFileID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetItemTitle")]
+internal static extern bool SteamAPI_ISteamUGC_SetItemTitle(IntPtr instancePtr, ulong handle, string pchTitle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetItemDescription")]
+internal static extern bool SteamAPI_ISteamUGC_SetItemDescription(IntPtr instancePtr, ulong handle, string pchDescription);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetItemUpdateLanguage")]
+internal static extern bool SteamAPI_ISteamUGC_SetItemUpdateLanguage(IntPtr instancePtr, ulong handle, string pchLanguage);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetItemMetadata")]
+internal static extern bool SteamAPI_ISteamUGC_SetItemMetadata(IntPtr instancePtr, ulong handle, string pchMetaData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetItemVisibility")]
+internal static extern bool SteamAPI_ISteamUGC_SetItemVisibility(IntPtr instancePtr, ulong handle, uint eVisibility);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetItemTags")]
+internal static extern bool SteamAPI_ISteamUGC_SetItemTags(IntPtr instancePtr, ulong updateHandle, ref SteamParamStringArray_t pTags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetItemContent")]
+internal static extern bool SteamAPI_ISteamUGC_SetItemContent(IntPtr instancePtr, ulong handle, string pszContentFolder);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetItemPreview")]
+internal static extern bool SteamAPI_ISteamUGC_SetItemPreview(IntPtr instancePtr, ulong handle, string pszPreviewFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_RemoveItemKeyValueTags")]
+internal static extern bool SteamAPI_ISteamUGC_RemoveItemKeyValueTags(IntPtr instancePtr, ulong handle, string pchKey);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_AddItemKeyValueTag")]
+internal static extern bool SteamAPI_ISteamUGC_AddItemKeyValueTag(IntPtr instancePtr, ulong handle, string pchKey, string pchValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_AddItemPreviewFile")]
+internal static extern bool SteamAPI_ISteamUGC_AddItemPreviewFile(IntPtr instancePtr, ulong handle, string pszPreviewFile, uint type);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_AddItemPreviewVideo")]
+internal static extern bool SteamAPI_ISteamUGC_AddItemPreviewVideo(IntPtr instancePtr, ulong handle, string pszVideoID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_UpdateItemPreviewFile")]
+internal static extern bool SteamAPI_ISteamUGC_UpdateItemPreviewFile(IntPtr instancePtr, ulong handle, uint index, string pszPreviewFile);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_UpdateItemPreviewVideo")]
+internal static extern bool SteamAPI_ISteamUGC_UpdateItemPreviewVideo(IntPtr instancePtr, ulong handle, uint index, string pszVideoID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_RemoveItemPreview")]
+internal static extern bool SteamAPI_ISteamUGC_RemoveItemPreview(IntPtr instancePtr, ulong handle, uint index);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SubmitItemUpdate")]
+internal static extern ulong SteamAPI_ISteamUGC_SubmitItemUpdate(IntPtr instancePtr, ulong handle, string pchChangeNote);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetItemUpdateProgress")]
+internal static extern uint SteamAPI_ISteamUGC_GetItemUpdateProgress(IntPtr instancePtr, ulong handle, ref ulong punBytesProcessed, ref ulong punBytesTotal);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SetUserItemVote")]
+internal static extern ulong SteamAPI_ISteamUGC_SetUserItemVote(IntPtr instancePtr, ulong nPublishedFileID, bool bVoteUp);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetUserItemVote")]
+internal static extern ulong SteamAPI_ISteamUGC_GetUserItemVote(IntPtr instancePtr, ulong nPublishedFileID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_AddItemToFavorites")]
+internal static extern ulong SteamAPI_ISteamUGC_AddItemToFavorites(IntPtr instancePtr, uint nAppId, ulong nPublishedFileID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_RemoveItemFromFavorites")]
+internal static extern ulong SteamAPI_ISteamUGC_RemoveItemFromFavorites(IntPtr instancePtr, uint nAppId, ulong nPublishedFileID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SubscribeItem")]
+internal static extern ulong SteamAPI_ISteamUGC_SubscribeItem(IntPtr instancePtr, ulong nPublishedFileID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_UnsubscribeItem")]
+internal static extern ulong SteamAPI_ISteamUGC_UnsubscribeItem(IntPtr instancePtr, ulong nPublishedFileID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetNumSubscribedItems")]
+internal static extern uint SteamAPI_ISteamUGC_GetNumSubscribedItems(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetSubscribedItems")]
+internal static extern uint SteamAPI_ISteamUGC_GetSubscribedItems(IntPtr instancePtr, ref ulong pvecPublishedFileID, uint cMaxEntries);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetItemState")]
+internal static extern uint SteamAPI_ISteamUGC_GetItemState(IntPtr instancePtr, ulong nPublishedFileID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetItemInstallInfo")]
+internal static extern bool SteamAPI_ISteamUGC_GetItemInstallInfo(IntPtr instancePtr, ulong nPublishedFileID, ref ulong punSizeOnDisk, System.Text.StringBuilder pchFolder, uint cchFolderSize, ref uint punTimeStamp);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_GetItemDownloadInfo")]
+internal static extern bool SteamAPI_ISteamUGC_GetItemDownloadInfo(IntPtr instancePtr, ulong nPublishedFileID, ref ulong punBytesDownloaded, ref ulong punBytesTotal);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_DownloadItem")]
+internal static extern bool SteamAPI_ISteamUGC_DownloadItem(IntPtr instancePtr, ulong nPublishedFileID, bool bHighPriority);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_BInitWorkshopForGameServer")]
+internal static extern bool SteamAPI_ISteamUGC_BInitWorkshopForGameServer(IntPtr instancePtr, uint unWorkshopDepotID, string pszFolder);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_SuspendDownloads")]
+internal static extern void SteamAPI_ISteamUGC_SuspendDownloads(IntPtr instancePtr, bool bSuspend);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_StartPlaytimeTracking")]
+internal static extern ulong SteamAPI_ISteamUGC_StartPlaytimeTracking(IntPtr instancePtr, ref ulong pvecPublishedFileID, uint unNumPublishedFileIDs);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_StopPlaytimeTracking")]
+internal static extern ulong SteamAPI_ISteamUGC_StopPlaytimeTracking(IntPtr instancePtr, ref ulong pvecPublishedFileID, uint unNumPublishedFileIDs);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_StopPlaytimeTrackingForAllItems")]
+internal static extern ulong SteamAPI_ISteamUGC_StopPlaytimeTrackingForAllItems(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_AddDependency")]
+internal static extern ulong SteamAPI_ISteamUGC_AddDependency(IntPtr instancePtr, ulong nParentPublishedFileID, ulong nChildPublishedFileID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamUGC_RemoveDependency")]
+internal static extern ulong SteamAPI_ISteamUGC_RemoveDependency(IntPtr instancePtr, ulong nParentPublishedFileID, ulong nChildPublishedFileID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamAppList_GetNumInstalledApps")]
+internal static extern uint SteamAPI_ISteamAppList_GetNumInstalledApps(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamAppList_GetInstalledApps")]
+internal static extern uint SteamAPI_ISteamAppList_GetInstalledApps(IntPtr instancePtr, ref uint pvecAppID, uint unMaxAppIDs);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamAppList_GetAppName")]
+internal static extern int SteamAPI_ISteamAppList_GetAppName(IntPtr instancePtr, uint nAppID, System.Text.StringBuilder pchName, int cchNameMax);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamAppList_GetAppInstallDir")]
+internal static extern int SteamAPI_ISteamAppList_GetAppInstallDir(IntPtr instancePtr, uint nAppID, string pchDirectory, int cchNameMax);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamAppList_GetAppBuildId")]
+internal static extern int SteamAPI_ISteamAppList_GetAppBuildId(IntPtr instancePtr, uint nAppID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface")]
+internal static extern void SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_Init")]
+internal static extern bool SteamAPI_ISteamHTMLSurface_Init(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_Shutdown")]
+internal static extern bool SteamAPI_ISteamHTMLSurface_Shutdown(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_CreateBrowser")]
+internal static extern ulong SteamAPI_ISteamHTMLSurface_CreateBrowser(IntPtr instancePtr, string pchUserAgent, string pchUserCSS);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_RemoveBrowser")]
+internal static extern void SteamAPI_ISteamHTMLSurface_RemoveBrowser(IntPtr instancePtr, uint unBrowserHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_LoadURL")]
+internal static extern void SteamAPI_ISteamHTMLSurface_LoadURL(IntPtr instancePtr, uint unBrowserHandle, string pchURL, string pchPostData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_SetSize")]
+internal static extern void SteamAPI_ISteamHTMLSurface_SetSize(IntPtr instancePtr, uint unBrowserHandle, uint unWidth, uint unHeight);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_StopLoad")]
+internal static extern void SteamAPI_ISteamHTMLSurface_StopLoad(IntPtr instancePtr, uint unBrowserHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_Reload")]
+internal static extern void SteamAPI_ISteamHTMLSurface_Reload(IntPtr instancePtr, uint unBrowserHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_GoBack")]
+internal static extern void SteamAPI_ISteamHTMLSurface_GoBack(IntPtr instancePtr, uint unBrowserHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_GoForward")]
+internal static extern void SteamAPI_ISteamHTMLSurface_GoForward(IntPtr instancePtr, uint unBrowserHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_AddHeader")]
+internal static extern void SteamAPI_ISteamHTMLSurface_AddHeader(IntPtr instancePtr, uint unBrowserHandle, string pchKey, string pchValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_ExecuteJavascript")]
+internal static extern void SteamAPI_ISteamHTMLSurface_ExecuteJavascript(IntPtr instancePtr, uint unBrowserHandle, string pchScript);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_MouseUp")]
+internal static extern void SteamAPI_ISteamHTMLSurface_MouseUp(IntPtr instancePtr, uint unBrowserHandle, uint eMouseButton);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_MouseDown")]
+internal static extern void SteamAPI_ISteamHTMLSurface_MouseDown(IntPtr instancePtr, uint unBrowserHandle, uint eMouseButton);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_MouseDoubleClick")]
+internal static extern void SteamAPI_ISteamHTMLSurface_MouseDoubleClick(IntPtr instancePtr, uint unBrowserHandle, uint eMouseButton);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_MouseMove")]
+internal static extern void SteamAPI_ISteamHTMLSurface_MouseMove(IntPtr instancePtr, uint unBrowserHandle, int x, int y);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_MouseWheel")]
+internal static extern void SteamAPI_ISteamHTMLSurface_MouseWheel(IntPtr instancePtr, uint unBrowserHandle, int nDelta);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_KeyDown")]
+internal static extern void SteamAPI_ISteamHTMLSurface_KeyDown(IntPtr instancePtr, uint unBrowserHandle, uint nNativeKeyCode, uint eHTMLKeyModifiers);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_KeyUp")]
+internal static extern void SteamAPI_ISteamHTMLSurface_KeyUp(IntPtr instancePtr, uint unBrowserHandle, uint nNativeKeyCode, uint eHTMLKeyModifiers);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_KeyChar")]
+internal static extern void SteamAPI_ISteamHTMLSurface_KeyChar(IntPtr instancePtr, uint unBrowserHandle, uint cUnicodeChar, uint eHTMLKeyModifiers);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_SetHorizontalScroll")]
+internal static extern void SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(IntPtr instancePtr, uint unBrowserHandle, uint nAbsolutePixelScroll);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_SetVerticalScroll")]
+internal static extern void SteamAPI_ISteamHTMLSurface_SetVerticalScroll(IntPtr instancePtr, uint unBrowserHandle, uint nAbsolutePixelScroll);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_SetKeyFocus")]
+internal static extern void SteamAPI_ISteamHTMLSurface_SetKeyFocus(IntPtr instancePtr, uint unBrowserHandle, bool bHasKeyFocus);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_ViewSource")]
+internal static extern void SteamAPI_ISteamHTMLSurface_ViewSource(IntPtr instancePtr, uint unBrowserHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_CopyToClipboard")]
+internal static extern void SteamAPI_ISteamHTMLSurface_CopyToClipboard(IntPtr instancePtr, uint unBrowserHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_PasteFromClipboard")]
+internal static extern void SteamAPI_ISteamHTMLSurface_PasteFromClipboard(IntPtr instancePtr, uint unBrowserHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_Find")]
+internal static extern void SteamAPI_ISteamHTMLSurface_Find(IntPtr instancePtr, uint unBrowserHandle, string pchSearchStr, bool bCurrentlyInFind, bool bReverse);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_StopFind")]
+internal static extern void SteamAPI_ISteamHTMLSurface_StopFind(IntPtr instancePtr, uint unBrowserHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_GetLinkAtPosition")]
+internal static extern void SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(IntPtr instancePtr, uint unBrowserHandle, int x, int y);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_SetCookie")]
+internal static extern void SteamAPI_ISteamHTMLSurface_SetCookie(IntPtr instancePtr, string pchHostname, string pchKey, string pchValue, string pchPath, ulong nExpires, bool bSecure, bool bHTTPOnly);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_SetPageScaleFactor")]
+internal static extern void SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(IntPtr instancePtr, uint unBrowserHandle, float flZoom, int nPointX, int nPointY);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_SetBackgroundMode")]
+internal static extern void SteamAPI_ISteamHTMLSurface_SetBackgroundMode(IntPtr instancePtr, uint unBrowserHandle, bool bBackgroundMode);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_AllowStartRequest")]
+internal static extern void SteamAPI_ISteamHTMLSurface_AllowStartRequest(IntPtr instancePtr, uint unBrowserHandle, bool bAllowed);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamHTMLSurface_JSDialogResponse")]
+internal static extern void SteamAPI_ISteamHTMLSurface_JSDialogResponse(IntPtr instancePtr, uint unBrowserHandle, bool bResult);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GetResultStatus")]
+internal static extern uint SteamAPI_ISteamInventory_GetResultStatus(IntPtr instancePtr, int resultHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GetResultItems")]
+internal static extern bool SteamAPI_ISteamInventory_GetResultItems(IntPtr instancePtr, int resultHandle, [In, Out] SteamItemDetails_t[] pOutItemsArray, ref uint punOutItemsArraySize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GetResultItemProperty")]
+internal static extern bool SteamAPI_ISteamInventory_GetResultItemProperty(IntPtr instancePtr, int resultHandle, uint unItemIndex, string pchPropertyName, System.Text.StringBuilder pchValueBuffer, ref uint punValueBufferSizeOut);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GetResultTimestamp")]
+internal static extern uint SteamAPI_ISteamInventory_GetResultTimestamp(IntPtr instancePtr, int resultHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_CheckResultSteamID")]
+internal static extern bool SteamAPI_ISteamInventory_CheckResultSteamID(IntPtr instancePtr, int resultHandle, ulong steamIDExpected);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_DestroyResult")]
+internal static extern void SteamAPI_ISteamInventory_DestroyResult(IntPtr instancePtr, int resultHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GetAllItems")]
+internal static extern bool SteamAPI_ISteamInventory_GetAllItems(IntPtr instancePtr, ref int pResultHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GetItemsByID")]
+internal static extern bool SteamAPI_ISteamInventory_GetItemsByID(IntPtr instancePtr, ref int pResultHandle, [In, Out] ulong[] pInstanceIDs, uint unCountInstanceIDs);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_SerializeResult")]
+internal static extern bool SteamAPI_ISteamInventory_SerializeResult(IntPtr instancePtr, int resultHandle, IntPtr pOutBuffer, ref uint punOutBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_DeserializeResult")]
+internal static extern bool SteamAPI_ISteamInventory_DeserializeResult(IntPtr instancePtr, ref int pOutResultHandle, IntPtr pBuffer, uint unBufferSize, bool bRESERVED_MUST_BE_FALSE);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GenerateItems")]
+internal static extern bool SteamAPI_ISteamInventory_GenerateItems(IntPtr instancePtr, ref int pResultHandle, [In, Out] int[] pArrayItemDefs, [In, Out] uint[] punArrayQuantity, uint unArrayLength);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GrantPromoItems")]
+internal static extern bool SteamAPI_ISteamInventory_GrantPromoItems(IntPtr instancePtr, ref int pResultHandle);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_AddPromoItem")]
+internal static extern bool SteamAPI_ISteamInventory_AddPromoItem(IntPtr instancePtr, ref int pResultHandle, int itemDef);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_AddPromoItems")]
+internal static extern bool SteamAPI_ISteamInventory_AddPromoItems(IntPtr instancePtr, ref int pResultHandle, [In, Out] int[] pArrayItemDefs, uint unArrayLength);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_ConsumeItem")]
+internal static extern bool SteamAPI_ISteamInventory_ConsumeItem(IntPtr instancePtr, ref int pResultHandle, ulong itemConsume, uint unQuantity);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_ExchangeItems")]
+internal static extern bool SteamAPI_ISteamInventory_ExchangeItems(IntPtr instancePtr, ref int pResultHandle, [In, Out] int[] pArrayGenerate, [In, Out] uint[] punArrayGenerateQuantity, uint unArrayGenerateLength, [In, Out] ulong[] pArrayDestroy, [In, Out] uint[] punArrayDestroyQuantity, uint unArrayDestroyLength);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_TransferItemQuantity")]
+internal static extern bool SteamAPI_ISteamInventory_TransferItemQuantity(IntPtr instancePtr, ref int pResultHandle, ulong itemIdSource, uint unQuantity, ulong itemIdDest);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_SendItemDropHeartbeat")]
+internal static extern void SteamAPI_ISteamInventory_SendItemDropHeartbeat(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_TriggerItemDrop")]
+internal static extern bool SteamAPI_ISteamInventory_TriggerItemDrop(IntPtr instancePtr, ref int pResultHandle, int dropListDefinition);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_TradeItems")]
+internal static extern bool SteamAPI_ISteamInventory_TradeItems(IntPtr instancePtr, ref int pResultHandle, ulong steamIDTradePartner, [In, Out] ulong[] pArrayGive, [In, Out] uint[] pArrayGiveQuantity, uint nArrayGiveLength, [In, Out] ulong[] pArrayGet, [In, Out] uint[] pArrayGetQuantity, uint nArrayGetLength);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_LoadItemDefinitions")]
+internal static extern bool SteamAPI_ISteamInventory_LoadItemDefinitions(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GetItemDefinitionIDs")]
+internal static extern bool SteamAPI_ISteamInventory_GetItemDefinitionIDs(IntPtr instancePtr, [In, Out] int[] pItemDefIDs, ref uint punItemDefIDsArraySize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GetItemDefinitionProperty")]
+internal static extern bool SteamAPI_ISteamInventory_GetItemDefinitionProperty(IntPtr instancePtr, int iDefinition, string pchPropertyName, System.Text.StringBuilder pchValueBuffer, ref uint punValueBufferSizeOut);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_RequestEligiblePromoItemDefinitionsIDs")]
+internal static extern ulong SteamAPI_ISteamInventory_RequestEligiblePromoItemDefinitionsIDs(IntPtr instancePtr, ulong steamID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamInventory_GetEligiblePromoItemDefinitionIDs")]
+internal static extern bool SteamAPI_ISteamInventory_GetEligiblePromoItemDefinitionIDs(IntPtr instancePtr, ulong steamID, [In, Out] int[] pItemDefIDs, ref uint punItemDefIDsArraySize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamVideo_GetVideoURL")]
+internal static extern void SteamAPI_ISteamVideo_GetVideoURL(IntPtr instancePtr, uint unVideoAppID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamVideo_IsBroadcasting")]
+internal static extern bool SteamAPI_ISteamVideo_IsBroadcasting(IntPtr instancePtr, ref int pnNumViewers);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamVideo_GetOPFSettings")]
+internal static extern void SteamAPI_ISteamVideo_GetOPFSettings(IntPtr instancePtr, uint unVideoAppID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamVideo_GetOPFStringForApp")]
+internal static extern bool SteamAPI_ISteamVideo_GetOPFStringForApp(IntPtr instancePtr, uint unVideoAppID, string pchBuffer, ref int pnBufferSize);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_InitGameServer")]
+internal static extern bool SteamAPI_ISteamGameServer_InitGameServer(IntPtr instancePtr, uint unIP, char usGamePort, char usQueryPort, uint unFlags, uint nGameAppId, string pchVersionString);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetProduct")]
+internal static extern void SteamAPI_ISteamGameServer_SetProduct(IntPtr instancePtr, string pszProduct);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetGameDescription")]
+internal static extern void SteamAPI_ISteamGameServer_SetGameDescription(IntPtr instancePtr, string pszGameDescription);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetModDir")]
+internal static extern void SteamAPI_ISteamGameServer_SetModDir(IntPtr instancePtr, string pszModDir);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetDedicatedServer")]
+internal static extern void SteamAPI_ISteamGameServer_SetDedicatedServer(IntPtr instancePtr, bool bDedicated);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_LogOn")]
+internal static extern void SteamAPI_ISteamGameServer_LogOn(IntPtr instancePtr, string pszToken);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_LogOnAnonymous")]
+internal static extern void SteamAPI_ISteamGameServer_LogOnAnonymous(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_LogOff")]
+internal static extern void SteamAPI_ISteamGameServer_LogOff(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_BLoggedOn")]
+internal static extern bool SteamAPI_ISteamGameServer_BLoggedOn(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_BSecure")]
+internal static extern bool SteamAPI_ISteamGameServer_BSecure(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_GetSteamID")]
+internal static extern ulong SteamAPI_ISteamGameServer_GetSteamID(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_WasRestartRequested")]
+internal static extern bool SteamAPI_ISteamGameServer_WasRestartRequested(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetMaxPlayerCount")]
+internal static extern void SteamAPI_ISteamGameServer_SetMaxPlayerCount(IntPtr instancePtr, int cPlayersMax);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetBotPlayerCount")]
+internal static extern void SteamAPI_ISteamGameServer_SetBotPlayerCount(IntPtr instancePtr, int cBotplayers);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetServerName")]
+internal static extern void SteamAPI_ISteamGameServer_SetServerName(IntPtr instancePtr, string pszServerName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetMapName")]
+internal static extern void SteamAPI_ISteamGameServer_SetMapName(IntPtr instancePtr, string pszMapName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetPasswordProtected")]
+internal static extern void SteamAPI_ISteamGameServer_SetPasswordProtected(IntPtr instancePtr, bool bPasswordProtected);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetSpectatorPort")]
+internal static extern void SteamAPI_ISteamGameServer_SetSpectatorPort(IntPtr instancePtr, char unSpectatorPort);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetSpectatorServerName")]
+internal static extern void SteamAPI_ISteamGameServer_SetSpectatorServerName(IntPtr instancePtr, string pszSpectatorServerName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_ClearAllKeyValues")]
+internal static extern void SteamAPI_ISteamGameServer_ClearAllKeyValues(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetKeyValue")]
+internal static extern void SteamAPI_ISteamGameServer_SetKeyValue(IntPtr instancePtr, string pKey, string pValue);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetGameTags")]
+internal static extern void SteamAPI_ISteamGameServer_SetGameTags(IntPtr instancePtr, string pchGameTags);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetGameData")]
+internal static extern void SteamAPI_ISteamGameServer_SetGameData(IntPtr instancePtr, string pchGameData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetRegion")]
+internal static extern void SteamAPI_ISteamGameServer_SetRegion(IntPtr instancePtr, string pszRegion);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate")]
+internal static extern bool SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(IntPtr instancePtr, uint unIPClient, IntPtr pvAuthBlob, uint cubAuthBlobSize, ref CSteamID pSteamIDUser);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection")]
+internal static extern ulong SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SendUserDisconnect")]
+internal static extern void SteamAPI_ISteamGameServer_SendUserDisconnect(IntPtr instancePtr, ulong steamIDUser);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_BUpdateUserData")]
+internal static extern bool SteamAPI_ISteamGameServer_BUpdateUserData(IntPtr instancePtr, ulong steamIDUser, string pchPlayerName, uint uScore);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_GetAuthSessionTicket")]
+internal static extern uint SteamAPI_ISteamGameServer_GetAuthSessionTicket(IntPtr instancePtr, IntPtr pTicket, int cbMaxTicket, ref uint pcbTicket);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_BeginAuthSession")]
+internal static extern uint SteamAPI_ISteamGameServer_BeginAuthSession(IntPtr instancePtr, IntPtr pAuthTicket, int cbAuthTicket, ulong steamID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_EndAuthSession")]
+internal static extern void SteamAPI_ISteamGameServer_EndAuthSession(IntPtr instancePtr, ulong steamID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_CancelAuthTicket")]
+internal static extern void SteamAPI_ISteamGameServer_CancelAuthTicket(IntPtr instancePtr, uint hAuthTicket);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_UserHasLicenseForApp")]
+internal static extern uint SteamAPI_ISteamGameServer_UserHasLicenseForApp(IntPtr instancePtr, ulong steamID, uint appID);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_RequestUserGroupStatus")]
+internal static extern bool SteamAPI_ISteamGameServer_RequestUserGroupStatus(IntPtr instancePtr, ulong steamIDUser, ulong steamIDGroup);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_GetGameplayStats")]
+internal static extern void SteamAPI_ISteamGameServer_GetGameplayStats(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_GetServerReputation")]
+internal static extern ulong SteamAPI_ISteamGameServer_GetServerReputation(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_GetPublicIP")]
+internal static extern uint SteamAPI_ISteamGameServer_GetPublicIP(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_HandleIncomingPacket")]
+internal static extern bool SteamAPI_ISteamGameServer_HandleIncomingPacket(IntPtr instancePtr, IntPtr pData, int cbData, uint srcIP, char srcPort);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_GetNextOutgoingPacket")]
+internal static extern int SteamAPI_ISteamGameServer_GetNextOutgoingPacket(IntPtr instancePtr, IntPtr pOut, int cbMaxOut, ref uint pNetAdr, ref char pPort);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_EnableHeartbeats")]
+internal static extern void SteamAPI_ISteamGameServer_EnableHeartbeats(IntPtr instancePtr, bool bActive);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_SetHeartbeatInterval")]
+internal static extern void SteamAPI_ISteamGameServer_SetHeartbeatInterval(IntPtr instancePtr, int iHeartbeatInterval);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_ForceHeartbeat")]
+internal static extern void SteamAPI_ISteamGameServer_ForceHeartbeat(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_AssociateWithClan")]
+internal static extern ulong SteamAPI_ISteamGameServer_AssociateWithClan(IntPtr instancePtr, ulong steamIDClan);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility")]
+internal static extern ulong SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(IntPtr instancePtr, ulong steamIDNewPlayer);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_RequestUserStats")]
+internal static extern ulong SteamAPI_ISteamGameServerStats_RequestUserStats(IntPtr instancePtr, ulong steamIDUser);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_GetUserStat")]
+internal static extern bool SteamAPI_ISteamGameServerStats_GetUserStat(IntPtr instancePtr, ulong steamIDUser, string pchName, ref int pData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_GetUserStat0")]
+internal static extern bool SteamAPI_ISteamGameServerStats_GetUserStat0(IntPtr instancePtr, ulong steamIDUser, string pchName, ref float pData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_GetUserAchievement")]
+internal static extern bool SteamAPI_ISteamGameServerStats_GetUserAchievement(IntPtr instancePtr, ulong steamIDUser, string pchName, ref bool pbAchieved);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_SetUserStat")]
+internal static extern bool SteamAPI_ISteamGameServerStats_SetUserStat(IntPtr instancePtr, ulong steamIDUser, string pchName, int nData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_SetUserStat0")]
+internal static extern bool SteamAPI_ISteamGameServerStats_SetUserStat0(IntPtr instancePtr, ulong steamIDUser, string pchName, float fData);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat")]
+internal static extern bool SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(IntPtr instancePtr, ulong steamIDUser, string pchName, float flCountThisSession, double dSessionLength);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_SetUserAchievement")]
+internal static extern bool SteamAPI_ISteamGameServerStats_SetUserAchievement(IntPtr instancePtr, ulong steamIDUser, string pchName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_ClearUserAchievement")]
+internal static extern bool SteamAPI_ISteamGameServerStats_ClearUserAchievement(IntPtr instancePtr, ulong steamIDUser, string pchName);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_ISteamGameServerStats_StoreUserStats")]
+internal static extern ulong SteamAPI_ISteamGameServerStats_StoreUserStats(IntPtr instancePtr, ulong steamIDUser);
+public delegate void SteamAPI_UserStatsReceived_t_Callback(UserStatsReceived_t pUserStatsReceived_t);
+[DllImportAttribute("Steam_api", EntryPoint = "CUserStatsReceived_t_SetCallback")]
+public static extern ulong CUserStatsReceived_t_SetCallback(SteamAPI_UserStatsReceived_t_Callback func);
+[DllImportAttribute("Steam_api", EntryPoint = "CUserStatsReceived_t_RemoveCallback")]
+public static extern ulong CUserStatsReceived_t_RemoveCallback(ulong handle);
+public delegate void SteamAPI_GetOPFSettingsResult_t_Callback(GetOPFSettingsResult_t pGetOPFSettingsResult_t);
+[DllImportAttribute("Steam_api", EntryPoint = "CGetOPFSettingsResult_t_SetCallback")]
+public static extern ulong CGetOPFSettingsResult_t_SetCallback(SteamAPI_GetOPFSettingsResult_t_Callback func);
+[DllImportAttribute("Steam_api", EntryPoint = "CGetOPFSettingsResult_t_RemoveCallback")]
+public static extern ulong CGetOPFSettingsResult_t_RemoveCallback(ulong handle);
+public delegate void SteamAPI_RemoteStorageFileReadAsyncComplete_t_CallResult(RemoteStorageFileReadAsyncComplete_t pRemoteStorageFileReadAsyncComplete_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageFileReadAsyncComplete_t_SetCallResult")]
+public static extern ulong CRemoteStorageFileReadAsyncComplete_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageFileReadAsyncComplete_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageFileReadAsyncComplete_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageFileReadAsyncComplete_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageGetPublishedItemVoteDetailsResult_t_CallResult(RemoteStorageGetPublishedItemVoteDetailsResult_t pRemoteStorageGetPublishedItemVoteDetailsResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageGetPublishedItemVoteDetailsResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageGetPublishedItemVoteDetailsResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageGetPublishedItemVoteDetailsResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageGetPublishedItemVoteDetailsResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageGetPublishedItemVoteDetailsResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_FileDetailsResult_t_CallResult(FileDetailsResult_t pFileDetailsResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CFileDetailsResult_t_SetCallResult")]
+public static extern ulong CFileDetailsResult_t_SetCallResult(ulong hAPICall, SteamAPI_FileDetailsResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CFileDetailsResult_t_RemoveCallResult")]
+public static extern ulong CFileDetailsResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_GSStatsStored_t_CallResult(GSStatsStored_t pGSStatsStored_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CGSStatsStored_t_SetCallResult")]
+public static extern ulong CGSStatsStored_t_SetCallResult(ulong hAPICall, SteamAPI_GSStatsStored_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CGSStatsStored_t_RemoveCallResult")]
+public static extern ulong CGSStatsStored_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_StartPlaytimeTrackingResult_t_CallResult(StartPlaytimeTrackingResult_t pStartPlaytimeTrackingResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CStartPlaytimeTrackingResult_t_SetCallResult")]
+public static extern ulong CStartPlaytimeTrackingResult_t_SetCallResult(ulong hAPICall, SteamAPI_StartPlaytimeTrackingResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CStartPlaytimeTrackingResult_t_RemoveCallResult")]
+public static extern ulong CStartPlaytimeTrackingResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_FriendsGetFollowerCount_t_CallResult(FriendsGetFollowerCount_t pFriendsGetFollowerCount_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CFriendsGetFollowerCount_t_SetCallResult")]
+public static extern ulong CFriendsGetFollowerCount_t_SetCallResult(ulong hAPICall, SteamAPI_FriendsGetFollowerCount_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CFriendsGetFollowerCount_t_RemoveCallResult")]
+public static extern ulong CFriendsGetFollowerCount_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_FriendsIsFollowing_t_CallResult(FriendsIsFollowing_t pFriendsIsFollowing_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CFriendsIsFollowing_t_SetCallResult")]
+public static extern ulong CFriendsIsFollowing_t_SetCallResult(ulong hAPICall, SteamAPI_FriendsIsFollowing_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CFriendsIsFollowing_t_RemoveCallResult")]
+public static extern ulong CFriendsIsFollowing_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_LobbyMatchList_t_CallResult(LobbyMatchList_t pLobbyMatchList_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CLobbyMatchList_t_SetCallResult")]
+public static extern ulong CLobbyMatchList_t_SetCallResult(ulong hAPICall, SteamAPI_LobbyMatchList_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CLobbyMatchList_t_RemoveCallResult")]
+public static extern ulong CLobbyMatchList_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageUpdatePublishedFileResult_t_CallResult(RemoteStorageUpdatePublishedFileResult_t pRemoteStorageUpdatePublishedFileResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageUpdatePublishedFileResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageUpdatePublishedFileResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageUpdatePublishedFileResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageUpdatePublishedFileResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageUpdatePublishedFileResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_StoreAuthURLResponse_t_CallResult(StoreAuthURLResponse_t pStoreAuthURLResponse_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CStoreAuthURLResponse_t_SetCallResult")]
+public static extern ulong CStoreAuthURLResponse_t_SetCallResult(ulong hAPICall, SteamAPI_StoreAuthURLResponse_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CStoreAuthURLResponse_t_RemoveCallResult")]
+public static extern ulong CStoreAuthURLResponse_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_LobbyCreated_t_CallResult(LobbyCreated_t pLobbyCreated_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CLobbyCreated_t_SetCallResult")]
+public static extern ulong CLobbyCreated_t_SetCallResult(ulong hAPICall, SteamAPI_LobbyCreated_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CLobbyCreated_t_RemoveCallResult")]
+public static extern ulong CLobbyCreated_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageFileWriteAsyncComplete_t_CallResult(RemoteStorageFileWriteAsyncComplete_t pRemoteStorageFileWriteAsyncComplete_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageFileWriteAsyncComplete_t_SetCallResult")]
+public static extern ulong CRemoteStorageFileWriteAsyncComplete_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageFileWriteAsyncComplete_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageFileWriteAsyncComplete_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageFileWriteAsyncComplete_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageDeletePublishedFileResult_t_CallResult(RemoteStorageDeletePublishedFileResult_t pRemoteStorageDeletePublishedFileResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageDeletePublishedFileResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageDeletePublishedFileResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageDeletePublishedFileResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageDeletePublishedFileResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageDeletePublishedFileResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageGetPublishedFileDetailsResult_t_CallResult(RemoteStorageGetPublishedFileDetailsResult_t pRemoteStorageGetPublishedFileDetailsResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageGetPublishedFileDetailsResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageGetPublishedFileDetailsResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageGetPublishedFileDetailsResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageGetPublishedFileDetailsResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageGetPublishedFileDetailsResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_AddUGCDependencyResult_t_CallResult(AddUGCDependencyResult_t pAddUGCDependencyResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CAddUGCDependencyResult_t_SetCallResult")]
+public static extern ulong CAddUGCDependencyResult_t_SetCallResult(ulong hAPICall, SteamAPI_AddUGCDependencyResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CAddUGCDependencyResult_t_RemoveCallResult")]
+public static extern ulong CAddUGCDependencyResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageDownloadUGCResult_t_CallResult(RemoteStorageDownloadUGCResult_t pRemoteStorageDownloadUGCResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageDownloadUGCResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageDownloadUGCResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageDownloadUGCResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageDownloadUGCResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageDownloadUGCResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_SteamUGCQueryCompleted_t_CallResult(SteamUGCQueryCompleted_t pSteamUGCQueryCompleted_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CSteamUGCQueryCompleted_t_SetCallResult")]
+public static extern ulong CSteamUGCQueryCompleted_t_SetCallResult(ulong hAPICall, SteamAPI_SteamUGCQueryCompleted_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CSteamUGCQueryCompleted_t_RemoveCallResult")]
+public static extern ulong CSteamUGCQueryCompleted_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageFileShareResult_t_CallResult(RemoteStorageFileShareResult_t pRemoteStorageFileShareResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageFileShareResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageFileShareResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageFileShareResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageFileShareResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageFileShareResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_LobbyEnter_t_CallResult(LobbyEnter_t pLobbyEnter_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CLobbyEnter_t_SetCallResult")]
+public static extern ulong CLobbyEnter_t_SetCallResult(ulong hAPICall, SteamAPI_LobbyEnter_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CLobbyEnter_t_RemoveCallResult")]
+public static extern ulong CLobbyEnter_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_SubmitItemUpdateResult_t_CallResult(SubmitItemUpdateResult_t pSubmitItemUpdateResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CSubmitItemUpdateResult_t_SetCallResult")]
+public static extern ulong CSubmitItemUpdateResult_t_SetCallResult(ulong hAPICall, SteamAPI_SubmitItemUpdateResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CSubmitItemUpdateResult_t_RemoveCallResult")]
+public static extern ulong CSubmitItemUpdateResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_NumberOfCurrentPlayers_t_CallResult(NumberOfCurrentPlayers_t pNumberOfCurrentPlayers_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CNumberOfCurrentPlayers_t_SetCallResult")]
+public static extern ulong CNumberOfCurrentPlayers_t_SetCallResult(ulong hAPICall, SteamAPI_NumberOfCurrentPlayers_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CNumberOfCurrentPlayers_t_RemoveCallResult")]
+public static extern ulong CNumberOfCurrentPlayers_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_GSStatsReceived_t_CallResult(GSStatsReceived_t pGSStatsReceived_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CGSStatsReceived_t_SetCallResult")]
+public static extern ulong CGSStatsReceived_t_SetCallResult(ulong hAPICall, SteamAPI_GSStatsReceived_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CGSStatsReceived_t_RemoveCallResult")]
+public static extern ulong CGSStatsReceived_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_HTML_BrowserReady_t_CallResult(HTML_BrowserReady_t pHTML_BrowserReady_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CHTML_BrowserReady_t_SetCallResult")]
+public static extern ulong CHTML_BrowserReady_t_SetCallResult(ulong hAPICall, SteamAPI_HTML_BrowserReady_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CHTML_BrowserReady_t_RemoveCallResult")]
+public static extern ulong CHTML_BrowserReady_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_LeaderboardScoresDownloaded_t_CallResult(LeaderboardScoresDownloaded_t pLeaderboardScoresDownloaded_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CLeaderboardScoresDownloaded_t_SetCallResult")]
+public static extern ulong CLeaderboardScoresDownloaded_t_SetCallResult(ulong hAPICall, SteamAPI_LeaderboardScoresDownloaded_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CLeaderboardScoresDownloaded_t_RemoveCallResult")]
+public static extern ulong CLeaderboardScoresDownloaded_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageUpdateUserPublishedItemVoteResult_t_CallResult(RemoteStorageUpdateUserPublishedItemVoteResult_t pRemoteStorageUpdateUserPublishedItemVoteResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageUpdateUserPublishedItemVoteResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageUpdateUserPublishedItemVoteResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageUpdateUserPublishedItemVoteResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageUpdateUserPublishedItemVoteResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageUpdateUserPublishedItemVoteResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageEnumerateUserSubscribedFilesResult_t_CallResult(RemoteStorageEnumerateUserSubscribedFilesResult_t pRemoteStorageEnumerateUserSubscribedFilesResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageEnumerateUserSubscribedFilesResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageEnumerateUserSubscribedFilesResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageEnumerateUserSubscribedFilesResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageEnumerateUserSubscribedFilesResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageEnumerateUserSubscribedFilesResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_CreateItemResult_t_CallResult(CreateItemResult_t pCreateItemResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CCreateItemResult_t_SetCallResult")]
+public static extern ulong CCreateItemResult_t_SetCallResult(ulong hAPICall, SteamAPI_CreateItemResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CCreateItemResult_t_RemoveCallResult")]
+public static extern ulong CCreateItemResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_SetUserItemVoteResult_t_CallResult(SetUserItemVoteResult_t pSetUserItemVoteResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CSetUserItemVoteResult_t_SetCallResult")]
+public static extern ulong CSetUserItemVoteResult_t_SetCallResult(ulong hAPICall, SteamAPI_SetUserItemVoteResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CSetUserItemVoteResult_t_RemoveCallResult")]
+public static extern ulong CSetUserItemVoteResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_ComputeNewPlayerCompatibilityResult_t_CallResult(ComputeNewPlayerCompatibilityResult_t pComputeNewPlayerCompatibilityResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CComputeNewPlayerCompatibilityResult_t_SetCallResult")]
+public static extern ulong CComputeNewPlayerCompatibilityResult_t_SetCallResult(ulong hAPICall, SteamAPI_ComputeNewPlayerCompatibilityResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CComputeNewPlayerCompatibilityResult_t_RemoveCallResult")]
+public static extern ulong CComputeNewPlayerCompatibilityResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_LeaderboardScoreUploaded_t_CallResult(LeaderboardScoreUploaded_t pLeaderboardScoreUploaded_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CLeaderboardScoreUploaded_t_SetCallResult")]
+public static extern ulong CLeaderboardScoreUploaded_t_SetCallResult(ulong hAPICall, SteamAPI_LeaderboardScoreUploaded_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CLeaderboardScoreUploaded_t_RemoveCallResult")]
+public static extern ulong CLeaderboardScoreUploaded_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_GlobalAchievementPercentagesReady_t_CallResult(GlobalAchievementPercentagesReady_t pGlobalAchievementPercentagesReady_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CGlobalAchievementPercentagesReady_t_SetCallResult")]
+public static extern ulong CGlobalAchievementPercentagesReady_t_SetCallResult(ulong hAPICall, SteamAPI_GlobalAchievementPercentagesReady_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CGlobalAchievementPercentagesReady_t_RemoveCallResult")]
+public static extern ulong CGlobalAchievementPercentagesReady_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_GlobalStatsReceived_t_CallResult(GlobalStatsReceived_t pGlobalStatsReceived_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CGlobalStatsReceived_t_SetCallResult")]
+public static extern ulong CGlobalStatsReceived_t_SetCallResult(ulong hAPICall, SteamAPI_GlobalStatsReceived_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CGlobalStatsReceived_t_RemoveCallResult")]
+public static extern ulong CGlobalStatsReceived_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageEnumeratePublishedFilesByUserActionResult_t_CallResult(RemoteStorageEnumeratePublishedFilesByUserActionResult_t pRemoteStorageEnumeratePublishedFilesByUserActionResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageEnumeratePublishedFilesByUserActionResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_ClanOfficerListResponse_t_CallResult(ClanOfficerListResponse_t pClanOfficerListResponse_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CClanOfficerListResponse_t_SetCallResult")]
+public static extern ulong CClanOfficerListResponse_t_SetCallResult(ulong hAPICall, SteamAPI_ClanOfficerListResponse_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CClanOfficerListResponse_t_RemoveCallResult")]
+public static extern ulong CClanOfficerListResponse_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStoragePublishFileProgress_t_CallResult(RemoteStoragePublishFileProgress_t pRemoteStoragePublishFileProgress_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStoragePublishFileProgress_t_SetCallResult")]
+public static extern ulong CRemoteStoragePublishFileProgress_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStoragePublishFileProgress_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStoragePublishFileProgress_t_RemoveCallResult")]
+public static extern ulong CRemoteStoragePublishFileProgress_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageEnumerateWorkshopFilesResult_t_CallResult(RemoteStorageEnumerateWorkshopFilesResult_t pRemoteStorageEnumerateWorkshopFilesResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageEnumerateWorkshopFilesResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageEnumerateWorkshopFilesResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageEnumerateWorkshopFilesResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageEnumerateWorkshopFilesResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageEnumerateWorkshopFilesResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoveUGCDependencyResult_t_CallResult(RemoveUGCDependencyResult_t pRemoveUGCDependencyResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoveUGCDependencyResult_t_SetCallResult")]
+public static extern ulong CRemoveUGCDependencyResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoveUGCDependencyResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoveUGCDependencyResult_t_RemoveCallResult")]
+public static extern ulong CRemoveUGCDependencyResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_GSReputation_t_CallResult(GSReputation_t pGSReputation_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CGSReputation_t_SetCallResult")]
+public static extern ulong CGSReputation_t_SetCallResult(ulong hAPICall, SteamAPI_GSReputation_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CGSReputation_t_RemoveCallResult")]
+public static extern ulong CGSReputation_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_UserFavoriteItemsListChanged_t_CallResult(UserFavoriteItemsListChanged_t pUserFavoriteItemsListChanged_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CUserFavoriteItemsListChanged_t_SetCallResult")]
+public static extern ulong CUserFavoriteItemsListChanged_t_SetCallResult(ulong hAPICall, SteamAPI_UserFavoriteItemsListChanged_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CUserFavoriteItemsListChanged_t_RemoveCallResult")]
+public static extern ulong CUserFavoriteItemsListChanged_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_EncryptedAppTicketResponse_t_CallResult(EncryptedAppTicketResponse_t pEncryptedAppTicketResponse_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CEncryptedAppTicketResponse_t_SetCallResult")]
+public static extern ulong CEncryptedAppTicketResponse_t_SetCallResult(ulong hAPICall, SteamAPI_EncryptedAppTicketResponse_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CEncryptedAppTicketResponse_t_RemoveCallResult")]
+public static extern ulong CEncryptedAppTicketResponse_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageSetUserPublishedFileActionResult_t_CallResult(RemoteStorageSetUserPublishedFileActionResult_t pRemoteStorageSetUserPublishedFileActionResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageSetUserPublishedFileActionResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageSetUserPublishedFileActionResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageSetUserPublishedFileActionResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageSetUserPublishedFileActionResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageSetUserPublishedFileActionResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_StopPlaytimeTrackingResult_t_CallResult(StopPlaytimeTrackingResult_t pStopPlaytimeTrackingResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CStopPlaytimeTrackingResult_t_SetCallResult")]
+public static extern ulong CStopPlaytimeTrackingResult_t_SetCallResult(ulong hAPICall, SteamAPI_StopPlaytimeTrackingResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CStopPlaytimeTrackingResult_t_RemoveCallResult")]
+public static extern ulong CStopPlaytimeTrackingResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageEnumerateUserPublishedFilesResult_t_CallResult(RemoteStorageEnumerateUserPublishedFilesResult_t pRemoteStorageEnumerateUserPublishedFilesResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageEnumerateUserPublishedFilesResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageEnumerateUserPublishedFilesResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageEnumerateUserPublishedFilesResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageEnumerateUserPublishedFilesResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageEnumerateUserPublishedFilesResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_FriendsEnumerateFollowingList_t_CallResult(FriendsEnumerateFollowingList_t pFriendsEnumerateFollowingList_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CFriendsEnumerateFollowingList_t_SetCallResult")]
+public static extern ulong CFriendsEnumerateFollowingList_t_SetCallResult(ulong hAPICall, SteamAPI_FriendsEnumerateFollowingList_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CFriendsEnumerateFollowingList_t_RemoveCallResult")]
+public static extern ulong CFriendsEnumerateFollowingList_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageSubscribePublishedFileResult_t_CallResult(RemoteStorageSubscribePublishedFileResult_t pRemoteStorageSubscribePublishedFileResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageSubscribePublishedFileResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageSubscribePublishedFileResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageSubscribePublishedFileResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageSubscribePublishedFileResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageSubscribePublishedFileResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_GetUserItemVoteResult_t_CallResult(GetUserItemVoteResult_t pGetUserItemVoteResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CGetUserItemVoteResult_t_SetCallResult")]
+public static extern ulong CGetUserItemVoteResult_t_SetCallResult(ulong hAPICall, SteamAPI_GetUserItemVoteResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CGetUserItemVoteResult_t_RemoveCallResult")]
+public static extern ulong CGetUserItemVoteResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_AssociateWithClanResult_t_CallResult(AssociateWithClanResult_t pAssociateWithClanResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CAssociateWithClanResult_t_SetCallResult")]
+public static extern ulong CAssociateWithClanResult_t_SetCallResult(ulong hAPICall, SteamAPI_AssociateWithClanResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CAssociateWithClanResult_t_RemoveCallResult")]
+public static extern ulong CAssociateWithClanResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_LeaderboardUGCSet_t_CallResult(LeaderboardUGCSet_t pLeaderboardUGCSet_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CLeaderboardUGCSet_t_SetCallResult")]
+public static extern ulong CLeaderboardUGCSet_t_SetCallResult(ulong hAPICall, SteamAPI_LeaderboardUGCSet_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CLeaderboardUGCSet_t_RemoveCallResult")]
+public static extern ulong CLeaderboardUGCSet_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_CheckFileSignature_t_CallResult(CheckFileSignature_t pCheckFileSignature_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CCheckFileSignature_t_SetCallResult")]
+public static extern ulong CCheckFileSignature_t_SetCallResult(ulong hAPICall, SteamAPI_CheckFileSignature_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CCheckFileSignature_t_RemoveCallResult")]
+public static extern ulong CCheckFileSignature_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_RemoteStorageUnsubscribePublishedFileResult_t_CallResult(RemoteStorageUnsubscribePublishedFileResult_t pRemoteStorageUnsubscribePublishedFileResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageUnsubscribePublishedFileResult_t_SetCallResult")]
+public static extern ulong CRemoteStorageUnsubscribePublishedFileResult_t_SetCallResult(ulong hAPICall, SteamAPI_RemoteStorageUnsubscribePublishedFileResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CRemoteStorageUnsubscribePublishedFileResult_t_RemoveCallResult")]
+public static extern ulong CRemoteStorageUnsubscribePublishedFileResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_SetPersonaNameResponse_t_CallResult(SetPersonaNameResponse_t pSetPersonaNameResponse_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CSetPersonaNameResponse_t_SetCallResult")]
+public static extern ulong CSetPersonaNameResponse_t_SetCallResult(ulong hAPICall, SteamAPI_SetPersonaNameResponse_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CSetPersonaNameResponse_t_RemoveCallResult")]
+public static extern ulong CSetPersonaNameResponse_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_UserStatsReceived_t_CallResult(UserStatsReceived_t pUserStatsReceived_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CUserStatsReceived_t_SetCallResult")]
+public static extern ulong CUserStatsReceived_t_SetCallResult(ulong hAPICall, SteamAPI_UserStatsReceived_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CUserStatsReceived_t_RemoveCallResult")]
+public static extern ulong CUserStatsReceived_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_SteamInventoryEligiblePromoItemDefIDs_t_CallResult(SteamInventoryEligiblePromoItemDefIDs_t pSteamInventoryEligiblePromoItemDefIDs_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CSteamInventoryEligiblePromoItemDefIDs_t_SetCallResult")]
+public static extern ulong CSteamInventoryEligiblePromoItemDefIDs_t_SetCallResult(ulong hAPICall, SteamAPI_SteamInventoryEligiblePromoItemDefIDs_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CSteamInventoryEligiblePromoItemDefIDs_t_RemoveCallResult")]
+public static extern ulong CSteamInventoryEligiblePromoItemDefIDs_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_JoinClanChatRoomCompletionResult_t_CallResult(JoinClanChatRoomCompletionResult_t pJoinClanChatRoomCompletionResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CJoinClanChatRoomCompletionResult_t_SetCallResult")]
+public static extern ulong CJoinClanChatRoomCompletionResult_t_SetCallResult(ulong hAPICall, SteamAPI_JoinClanChatRoomCompletionResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CJoinClanChatRoomCompletionResult_t_RemoveCallResult")]
+public static extern ulong CJoinClanChatRoomCompletionResult_t_RemoveCallResult(ulong handle);
+public delegate void SteamAPI_LeaderboardFindResult_t_CallResult(LeaderboardFindResult_t pLeaderboardFindResult_t, bool bIOFailure);
+[DllImportAttribute("Steam_api", EntryPoint = "CLeaderboardFindResult_t_SetCallResult")]
+public static extern ulong CLeaderboardFindResult_t_SetCallResult(ulong hAPICall, SteamAPI_LeaderboardFindResult_t_CallResult func);
+[DllImportAttribute("Steam_api", EntryPoint = "CLeaderboardFindResult_t_RemoveCallResult")]
+public static extern ulong CLeaderboardFindResult_t_RemoveCallResult(ulong handle);
+
+}
+
+}
+
+namespace Valve.Steamworks
+{
+
+ public abstract class ISteamClient
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract uint CreateSteamPipe();
+ public abstract bool BReleaseSteamPipe(uint hSteamPipe);
+ public abstract uint ConnectToGlobalUser(uint hSteamPipe);
+ public abstract uint CreateLocalUser(ref uint phSteamPipe,uint eAccountType);
+ public abstract void ReleaseUser(uint hSteamPipe,uint hUser);
+ public abstract ISteamUser GetISteamUser(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamGameServer GetISteamGameServer(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract void SetLocalIPBinding(uint unIP,char usPort);
+ public abstract ISteamFriends GetISteamFriends(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamUtils GetISteamUtils(uint hSteamPipe,string pchVersion);
+ public abstract ISteamMatchmaking GetISteamMatchmaking(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamMatchmakingServers GetISteamMatchmakingServers(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract IntPtr GetISteamGenericInterface(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamUserStats GetISteamUserStats(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamGameServerStats GetISteamGameServerStats(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamApps GetISteamApps(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamNetworking GetISteamNetworking(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamRemoteStorage GetISteamRemoteStorage(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamScreenshots GetISteamScreenshots(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ public abstract uint GetIPCCallCount();
+ public abstract void SetWarningMessageHook(IntPtr pFunction);
+ public abstract bool BShutdownIfAllPipesClosed();
+ public abstract ISteamHTTP GetISteamHTTP(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamUnifiedMessages GetISteamUnifiedMessages(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamController GetISteamController(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamUGC GetISteamUGC(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamAppList GetISteamAppList(uint hSteamUser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamMusic GetISteamMusic(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamMusicRemote GetISteamMusicRemote(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamHTMLSurface GetISteamHTMLSurface(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamInventory GetISteamInventory(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ public abstract ISteamVideo GetISteamVideo(uint hSteamuser,uint hSteamPipe,string pchVersion);
+ }
+
+
+ public abstract class ISteamUser
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract uint GetHSteamUser();
+ public abstract bool BLoggedOn();
+ public abstract ulong GetSteamID();
+ public abstract int InitiateGameConnection(IntPtr pAuthBlob,int cbMaxAuthBlob,ulong steamIDGameServer,uint unIPServer,char usPortServer,bool bSecure);
+ public abstract void TerminateGameConnection(uint unIPServer,char usPortServer);
+ public abstract void TrackAppUsageEvent(ulong gameID,int eAppUsageEvent,string pchExtraInfo);
+ public abstract bool GetUserDataFolder(string pchBuffer,int cubBuffer);
+ public abstract void StartVoiceRecording();
+ public abstract void StopVoiceRecording();
+ public abstract uint GetAvailableVoice(ref uint pcbCompressed,ref uint pcbUncompressed_Deprecated,uint nUncompressedVoiceDesiredSampleRate_Deprecated);
+ public abstract uint GetVoice(bool bWantCompressed,IntPtr pDestBuffer,uint cbDestBufferSize,ref uint nBytesWritten,bool bWantUncompressed_Deprecated,IntPtr pUncompressedDestBuffer_Deprecated,uint cbUncompressedDestBufferSize_Deprecated,ref uint nUncompressBytesWritten_Deprecated,uint nUncompressedVoiceDesiredSampleRate_Deprecated);
+ public abstract uint DecompressVoice(IntPtr pCompressed,uint cbCompressed,IntPtr pDestBuffer,uint cbDestBufferSize,ref uint nBytesWritten,uint nDesiredSampleRate);
+ public abstract uint GetVoiceOptimalSampleRate();
+ public abstract uint GetAuthSessionTicket(IntPtr pTicket,int cbMaxTicket,ref uint pcbTicket);
+ public abstract uint BeginAuthSession(IntPtr pAuthTicket,int cbAuthTicket,ulong steamID);
+ public abstract void EndAuthSession(ulong steamID);
+ public abstract void CancelAuthTicket(uint hAuthTicket);
+ public abstract uint UserHasLicenseForApp(ulong steamID,uint appID);
+ public abstract bool BIsBehindNAT();
+ public abstract void AdvertiseGame(ulong steamIDGameServer,uint unIPServer,char usPortServer);
+ public abstract ulong RequestEncryptedAppTicket(IntPtr pDataToInclude,int cbDataToInclude);
+ public abstract bool GetEncryptedAppTicket(IntPtr pTicket,int cbMaxTicket,ref uint pcbTicket);
+ public abstract int GetGameBadgeLevel(int nSeries,bool bFoil);
+ public abstract int GetPlayerSteamLevel();
+ public abstract ulong RequestStoreAuthURL(string pchRedirectURL);
+ public abstract bool BIsPhoneVerified();
+ public abstract bool BIsTwoFactorEnabled();
+ public abstract bool BIsPhoneIdentifying();
+ public abstract bool BIsPhoneRequiringVerification();
+ }
+
+
+ public abstract class ISteamFriends
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract string GetPersonaName();
+ public abstract ulong SetPersonaName(string pchPersonaName);
+ public abstract uint GetPersonaState();
+ public abstract int GetFriendCount(int iFriendFlags);
+ public abstract ulong GetFriendByIndex(int iFriend,int iFriendFlags);
+ public abstract uint GetFriendRelationship(ulong steamIDFriend);
+ public abstract uint GetFriendPersonaState(ulong steamIDFriend);
+ public abstract string GetFriendPersonaName(ulong steamIDFriend);
+ public abstract bool GetFriendGamePlayed(ulong steamIDFriend,out FriendGameInfo_t pFriendGameInfo);
+ public abstract string GetFriendPersonaNameHistory(ulong steamIDFriend,int iPersonaName);
+ public abstract int GetFriendSteamLevel(ulong steamIDFriend);
+ public abstract string GetPlayerNickname(ulong steamIDPlayer);
+ public abstract int GetFriendsGroupCount();
+ public abstract char GetFriendsGroupIDByIndex(int iFG);
+ public abstract string GetFriendsGroupName(char friendsGroupID);
+ public abstract int GetFriendsGroupMembersCount(char friendsGroupID);
+ public abstract void GetFriendsGroupMembersList(char friendsGroupID,out CSteamID [] pOutSteamIDMembers);
+ public abstract bool HasFriend(ulong steamIDFriend,int iFriendFlags);
+ public abstract int GetClanCount();
+ public abstract ulong GetClanByIndex(int iClan);
+ public abstract string GetClanName(ulong steamIDClan);
+ public abstract string GetClanTag(ulong steamIDClan);
+ public abstract bool GetClanActivityCounts(ulong steamIDClan,ref int pnOnline,ref int pnInGame,ref int pnChatting);
+ public abstract ulong DownloadClanActivityCounts(CSteamID [] psteamIDClans);
+ public abstract int GetFriendCountFromSource(ulong steamIDSource);
+ public abstract ulong GetFriendFromSourceByIndex(ulong steamIDSource,int iFriend);
+ public abstract bool IsUserInSource(ulong steamIDUser,ulong steamIDSource);
+ public abstract void SetInGameVoiceSpeaking(ulong steamIDUser,bool bSpeaking);
+ public abstract void ActivateGameOverlay(string pchDialog);
+ public abstract void ActivateGameOverlayToUser(string pchDialog,ulong steamID);
+ public abstract void ActivateGameOverlayToWebPage(string pchURL);
+ public abstract void ActivateGameOverlayToStore(uint nAppID,char eFlag);
+ public abstract void SetPlayedWith(ulong steamIDUserPlayedWith);
+ public abstract void ActivateGameOverlayInviteDialog(ulong steamIDLobby);
+ public abstract int GetSmallFriendAvatar(ulong steamIDFriend);
+ public abstract int GetMediumFriendAvatar(ulong steamIDFriend);
+ public abstract int GetLargeFriendAvatar(ulong steamIDFriend);
+ public abstract bool RequestUserInformation(ulong steamIDUser,bool bRequireNameOnly);
+ public abstract ulong RequestClanOfficerList(ulong steamIDClan);
+ public abstract ulong GetClanOwner(ulong steamIDClan);
+ public abstract int GetClanOfficerCount(ulong steamIDClan);
+ public abstract ulong GetClanOfficerByIndex(ulong steamIDClan,int iOfficer);
+ public abstract uint GetUserRestrictions();
+ public abstract bool SetRichPresence(string pchKey,string pchValue);
+ public abstract void ClearRichPresence();
+ public abstract string GetFriendRichPresence(ulong steamIDFriend,string pchKey);
+ public abstract int GetFriendRichPresenceKeyCount(ulong steamIDFriend);
+ public abstract string GetFriendRichPresenceKeyByIndex(ulong steamIDFriend,int iKey);
+ public abstract void RequestFriendRichPresence(ulong steamIDFriend);
+ public abstract bool InviteUserToGame(ulong steamIDFriend,string pchConnectString);
+ public abstract int GetCoplayFriendCount();
+ public abstract ulong GetCoplayFriend(int iCoplayFriend);
+ public abstract int GetFriendCoplayTime(ulong steamIDFriend);
+ public abstract uint GetFriendCoplayGame(ulong steamIDFriend);
+ public abstract ulong JoinClanChatRoom(ulong steamIDClan);
+ public abstract bool LeaveClanChatRoom(ulong steamIDClan);
+ public abstract int GetClanChatMemberCount(ulong steamIDClan);
+ public abstract ulong GetChatMemberByIndex(ulong steamIDClan,int iUser);
+ public abstract bool SendClanChatMessage(ulong steamIDClanChat,string pchText);
+ public abstract int GetClanChatMessage(ulong steamIDClanChat,int iMessage,IntPtr prgchText,int cchTextMax,ref uint peChatEntryType,out CSteamID psteamidChatter);
+ public abstract bool IsClanChatAdmin(ulong steamIDClanChat,ulong steamIDUser);
+ public abstract bool IsClanChatWindowOpenInSteam(ulong steamIDClanChat);
+ public abstract bool OpenClanChatWindowInSteam(ulong steamIDClanChat);
+ public abstract bool CloseClanChatWindowInSteam(ulong steamIDClanChat);
+ public abstract bool SetListenForFriendsMessages(bool bInterceptEnabled);
+ public abstract bool ReplyToFriendMessage(ulong steamIDFriend,string pchMsgToSend);
+ public abstract int GetFriendMessage(ulong steamIDFriend,int iMessageID,IntPtr pvData,int cubData,ref uint peChatEntryType);
+ public abstract ulong GetFollowerCount(ulong steamID);
+ public abstract ulong IsFollowing(ulong steamID);
+ public abstract ulong EnumerateFollowingList(uint unStartIndex);
+ }
+
+
+ public abstract class ISteamUtils
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract uint GetSecondsSinceAppActive();
+ public abstract uint GetSecondsSinceComputerActive();
+ public abstract int GetConnectedUniverse();
+ public abstract uint GetServerRealTime();
+ public abstract string GetIPCountry();
+ public abstract bool GetImageSize(int iImage,ref uint pnWidth,ref uint pnHeight);
+ public abstract bool GetImageRGBA(int iImage,IntPtr pubDest,int nDestBufferSize);
+ public abstract bool GetCSERIPPort(ref uint unIP,ref char usPort);
+ public abstract byte GetCurrentBatteryPower();
+ public abstract uint GetAppID();
+ public abstract void SetOverlayNotificationPosition(uint eNotificationPosition);
+ public abstract bool IsAPICallCompleted(ulong hSteamAPICall,ref bool pbFailed);
+ public abstract int GetAPICallFailureReason(ulong hSteamAPICall);
+ public abstract bool GetAPICallResult(ulong hSteamAPICall,IntPtr pCallback,int cubCallback,int iCallbackExpected,ref bool pbFailed);
+ public abstract uint GetIPCCallCount();
+ public abstract void SetWarningMessageHook(IntPtr pFunction);
+ public abstract bool IsOverlayEnabled();
+ public abstract bool BOverlayNeedsPresent();
+ public abstract ulong CheckFileSignature(string szFileName);
+ public abstract bool ShowGamepadTextInput(int eInputMode,int eLineInputMode,string pchDescription,uint unCharMax,string pchExistingText);
+ public abstract uint GetEnteredGamepadTextLength();
+ public abstract bool GetEnteredGamepadTextInput(string pchText,uint cchText);
+ public abstract string GetSteamUILanguage();
+ public abstract bool IsSteamRunningInVR();
+ public abstract void SetOverlayNotificationInset(int nHorizontalInset,int nVerticalInset);
+ public abstract bool IsSteamInBigPictureMode();
+ public abstract void StartVRDashboard();
+ public abstract bool IsVRHeadsetStreamingEnabled();
+ public abstract void SetVRHeadsetStreamingEnabled(bool bEnabled);
+ }
+
+
+ public abstract class ISteamMatchmaking
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract int GetFavoriteGameCount();
+ public abstract bool GetFavoriteGame(int iGame,ref uint pnAppID,ref uint pnIP,ref char pnConnPort,ref char pnQueryPort,ref uint punFlags,ref uint pRTime32LastPlayedOnServer);
+ public abstract int AddFavoriteGame(uint nAppID,uint nIP,char nConnPort,char nQueryPort,uint unFlags,uint rTime32LastPlayedOnServer);
+ public abstract bool RemoveFavoriteGame(uint nAppID,uint nIP,char nConnPort,char nQueryPort,uint unFlags);
+ public abstract ulong RequestLobbyList();
+ public abstract void AddRequestLobbyListStringFilter(string pchKeyToMatch,string pchValueToMatch,uint eComparisonType);
+ public abstract void AddRequestLobbyListNumericalFilter(string pchKeyToMatch,int nValueToMatch,uint eComparisonType);
+ public abstract void AddRequestLobbyListNearValueFilter(string pchKeyToMatch,int nValueToBeCloseTo);
+ public abstract void AddRequestLobbyListFilterSlotsAvailable(int nSlotsAvailable);
+ public abstract void AddRequestLobbyListDistanceFilter(uint eLobbyDistanceFilter);
+ public abstract void AddRequestLobbyListResultCountFilter(int cMaxResults);
+ public abstract void AddRequestLobbyListCompatibleMembersFilter(ulong steamIDLobby);
+ public abstract ulong GetLobbyByIndex(int iLobby);
+ public abstract ulong CreateLobby(uint eLobbyType,int cMaxMembers);
+ public abstract ulong JoinLobby(ulong steamIDLobby);
+ public abstract void LeaveLobby(ulong steamIDLobby);
+ public abstract bool InviteUserToLobby(ulong steamIDLobby,ulong steamIDInvitee);
+ public abstract int GetNumLobbyMembers(ulong steamIDLobby);
+ public abstract ulong GetLobbyMemberByIndex(ulong steamIDLobby,int iMember);
+ public abstract string GetLobbyData(ulong steamIDLobby,string pchKey);
+ public abstract bool SetLobbyData(ulong steamIDLobby,string pchKey,string pchValue);
+ public abstract int GetLobbyDataCount(ulong steamIDLobby);
+ public abstract bool GetLobbyDataByIndex(ulong steamIDLobby,int iLobbyData,string pchKey,int cchKeyBufferSize,string pchValue,int cchValueBufferSize);
+ public abstract bool DeleteLobbyData(ulong steamIDLobby,string pchKey);
+ public abstract string GetLobbyMemberData(ulong steamIDLobby,ulong steamIDUser,string pchKey);
+ public abstract void SetLobbyMemberData(ulong steamIDLobby,string pchKey,string pchValue);
+ public abstract bool SendLobbyChatMsg(ulong steamIDLobby,IntPtr pvMsgBody,int cubMsgBody);
+ public abstract int GetLobbyChatEntry(ulong steamIDLobby,int iChatID,out CSteamID pSteamIDUser,IntPtr pvData,int cubData,ref uint peChatEntryType);
+ public abstract bool RequestLobbyData(ulong steamIDLobby);
+ public abstract void SetLobbyGameServer(ulong steamIDLobby,uint unGameServerIP,char unGameServerPort,ulong steamIDGameServer);
+ public abstract bool GetLobbyGameServer(ulong steamIDLobby,ref uint punGameServerIP,ref char punGameServerPort,out CSteamID psteamIDGameServer);
+ public abstract bool SetLobbyMemberLimit(ulong steamIDLobby,int cMaxMembers);
+ public abstract int GetLobbyMemberLimit(ulong steamIDLobby);
+ public abstract bool SetLobbyType(ulong steamIDLobby,uint eLobbyType);
+ public abstract bool SetLobbyJoinable(ulong steamIDLobby,bool bLobbyJoinable);
+ public abstract ulong GetLobbyOwner(ulong steamIDLobby);
+ public abstract bool SetLobbyOwner(ulong steamIDLobby,ulong steamIDNewOwner);
+ public abstract bool SetLinkedLobby(ulong steamIDLobby,ulong steamIDLobbyDependent);
+ }
+
+
+ public abstract class ISteamMatchmakingServerListResponse
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract void ServerResponded(uint hRequest,int iServer);
+ public abstract void ServerFailedToRespond(uint hRequest,int iServer);
+ public abstract void RefreshComplete(uint hRequest,uint response);
+ }
+
+
+ public abstract class ISteamMatchmakingPingResponse
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract void ServerResponded(IntPtr server);
+ public abstract void ServerFailedToRespond();
+ }
+
+
+ public abstract class ISteamMatchmakingPlayersResponse
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract void AddPlayerToList(string pchName,int nScore,float flTimePlayed);
+ public abstract void PlayersFailedToRespond();
+ public abstract void PlayersRefreshComplete();
+ }
+
+
+ public abstract class ISteamMatchmakingRulesResponse
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract void RulesResponded(string pchRule,string pchValue);
+ public abstract void RulesFailedToRespond();
+ public abstract void RulesRefreshComplete();
+ }
+
+
+ public abstract class ISteamMatchmakingServers
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract uint RequestInternetServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse);
+ public abstract uint RequestLANServerList(uint iApp,ISteamMatchmakingServerListResponse pRequestServersResponse);
+ public abstract uint RequestFriendsServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse);
+ public abstract uint RequestFavoritesServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse);
+ public abstract uint RequestHistoryServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse);
+ public abstract uint RequestSpectatorServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse);
+ public abstract void ReleaseRequest(uint hServerListRequest);
+ public abstract gameserveritem_t GetServerDetails(uint hRequest,int iServer);
+ public abstract void CancelQuery(uint hRequest);
+ public abstract void RefreshQuery(uint hRequest);
+ public abstract bool IsRefreshing(uint hRequest);
+ public abstract int GetServerCount(uint hRequest);
+ public abstract void RefreshServer(uint hRequest,int iServer);
+ public abstract uint PingServer(uint unIP,char usPort,ISteamMatchmakingPingResponse pRequestServersResponse);
+ public abstract uint PlayerDetails(uint unIP,char usPort,ISteamMatchmakingPlayersResponse pRequestServersResponse);
+ public abstract uint ServerRules(uint unIP,char usPort,ISteamMatchmakingRulesResponse pRequestServersResponse);
+ public abstract void CancelServerQuery(uint hServerQuery);
+ }
+
+
+ public abstract class ISteamRemoteStorage
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract bool FileWrite(string pchFile,IntPtr pvData,int cubData);
+ public abstract int FileRead(string pchFile,IntPtr pvData,int cubDataToRead);
+ public abstract ulong FileWriteAsync(string pchFile,IntPtr pvData,uint cubData);
+ public abstract ulong FileReadAsync(string pchFile,uint nOffset,uint cubToRead);
+ public abstract bool FileReadAsyncComplete(ulong hReadCall,IntPtr pvBuffer,uint cubToRead);
+ public abstract bool FileForget(string pchFile);
+ public abstract bool FileDelete(string pchFile);
+ public abstract ulong FileShare(string pchFile);
+ public abstract bool SetSyncPlatforms(string pchFile,uint eRemoteStoragePlatform);
+ public abstract ulong FileWriteStreamOpen(string pchFile);
+ public abstract bool FileWriteStreamWriteChunk(ulong writeHandle,IntPtr pvData,int cubData);
+ public abstract bool FileWriteStreamClose(ulong writeHandle);
+ public abstract bool FileWriteStreamCancel(ulong writeHandle);
+ public abstract bool FileExists(string pchFile);
+ public abstract bool FilePersisted(string pchFile);
+ public abstract int GetFileSize(string pchFile);
+ public abstract long GetFileTimestamp(string pchFile);
+ public abstract uint GetSyncPlatforms(string pchFile);
+ public abstract int GetFileCount();
+ public abstract string GetFileNameAndSize(int iFile,ref int pnFileSizeInBytes);
+ public abstract bool GetQuota(ref ulong pnTotalBytes,ref ulong puAvailableBytes);
+ public abstract bool IsCloudEnabledForAccount();
+ public abstract bool IsCloudEnabledForApp();
+ public abstract void SetCloudEnabledForApp(bool bEnabled);
+ public abstract ulong UGCDownload(ulong hContent,uint unPriority);
+ public abstract bool GetUGCDownloadProgress(ulong hContent,ref int pnBytesDownloaded,ref int pnBytesExpected);
+ public abstract bool GetUGCDetails(ulong hContent,ref uint pnAppID,System.Text.StringBuilder ppchName,ref int pnFileSizeInBytes,out CSteamID pSteamIDOwner);
+ public abstract int UGCRead(ulong hContent,IntPtr pvData,int cubDataToRead,uint cOffset,uint eAction);
+ public abstract int GetCachedUGCCount();
+ public abstract ulong GetCachedUGCHandle(int iCachedContent);
+ public abstract ulong PublishWorkshopFile(string pchFile,string pchPreviewFile,uint nConsumerAppId,string pchTitle,string pchDescription,uint eVisibility,ref SteamParamStringArray_t pTags,uint eWorkshopFileType);
+ public abstract ulong CreatePublishedFileUpdateRequest(ulong unPublishedFileId);
+ public abstract bool UpdatePublishedFileFile(ulong updateHandle,string pchFile);
+ public abstract bool UpdatePublishedFilePreviewFile(ulong updateHandle,string pchPreviewFile);
+ public abstract bool UpdatePublishedFileTitle(ulong updateHandle,string pchTitle);
+ public abstract bool UpdatePublishedFileDescription(ulong updateHandle,string pchDescription);
+ public abstract bool UpdatePublishedFileVisibility(ulong updateHandle,uint eVisibility);
+ public abstract bool UpdatePublishedFileTags(ulong updateHandle,ref SteamParamStringArray_t pTags);
+ public abstract ulong CommitPublishedFileUpdate(ulong updateHandle);
+ public abstract ulong GetPublishedFileDetails(ulong unPublishedFileId,uint unMaxSecondsOld);
+ public abstract ulong DeletePublishedFile(ulong unPublishedFileId);
+ public abstract ulong EnumerateUserPublishedFiles(uint unStartIndex);
+ public abstract ulong SubscribePublishedFile(ulong unPublishedFileId);
+ public abstract ulong EnumerateUserSubscribedFiles(uint unStartIndex);
+ public abstract ulong UnsubscribePublishedFile(ulong unPublishedFileId);
+ public abstract bool UpdatePublishedFileSetChangeDescription(ulong updateHandle,string pchChangeDescription);
+ public abstract ulong GetPublishedItemVoteDetails(ulong unPublishedFileId);
+ public abstract ulong UpdateUserPublishedItemVote(ulong unPublishedFileId,bool bVoteUp);
+ public abstract ulong GetUserPublishedItemVoteDetails(ulong unPublishedFileId);
+ public abstract ulong EnumerateUserSharedWorkshopFiles(ulong steamId,uint unStartIndex,ref SteamParamStringArray_t pRequiredTags,ref SteamParamStringArray_t pExcludedTags);
+ public abstract ulong PublishVideo(uint eVideoProvider,string pchVideoAccount,string pchVideoIdentifier,string pchPreviewFile,uint nConsumerAppId,string pchTitle,string pchDescription,uint eVisibility,ref SteamParamStringArray_t pTags);
+ public abstract ulong SetUserPublishedFileAction(ulong unPublishedFileId,uint eAction);
+ public abstract ulong EnumeratePublishedFilesByUserAction(uint eAction,uint unStartIndex);
+ public abstract ulong EnumeratePublishedWorkshopFiles(uint eEnumerationType,uint unStartIndex,uint unCount,uint unDays,ref SteamParamStringArray_t pTags,ref SteamParamStringArray_t pUserTags);
+ public abstract ulong UGCDownloadToLocation(ulong hContent,string pchLocation,uint unPriority);
+ }
+
+
+ public abstract class ISteamUserStats
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract bool RequestCurrentStats();
+ public abstract bool GetStat(string pchName,ref int pData);
+ public abstract bool GetStat0(string pchName,ref float pData);
+ public abstract bool SetStat(string pchName,int nData);
+ public abstract bool SetStat0(string pchName,float fData);
+ public abstract bool UpdateAvgRateStat(string pchName,float flCountThisSession,double dSessionLength);
+ public abstract bool GetAchievement(string pchName,ref bool pbAchieved);
+ public abstract bool SetAchievement(string pchName);
+ public abstract bool ClearAchievement(string pchName);
+ public abstract bool GetAchievementAndUnlockTime(string pchName,ref bool pbAchieved,ref uint punUnlockTime);
+ public abstract bool StoreStats();
+ public abstract int GetAchievementIcon(string pchName);
+ public abstract string GetAchievementDisplayAttribute(string pchName,string pchKey);
+ public abstract bool IndicateAchievementProgress(string pchName,uint nCurProgress,uint nMaxProgress);
+ public abstract uint GetNumAchievements();
+ public abstract string GetAchievementName(uint iAchievement);
+ public abstract ulong RequestUserStats(ulong steamIDUser);
+ public abstract bool GetUserStat(ulong steamIDUser,string pchName,ref int pData);
+ public abstract bool GetUserStat0(ulong steamIDUser,string pchName,ref float pData);
+ public abstract bool GetUserAchievement(ulong steamIDUser,string pchName,ref bool pbAchieved);
+ public abstract bool GetUserAchievementAndUnlockTime(ulong steamIDUser,string pchName,ref bool pbAchieved,ref uint punUnlockTime);
+ public abstract bool ResetAllStats(bool bAchievementsToo);
+ public abstract ulong FindOrCreateLeaderboard(string pchLeaderboardName,uint eLeaderboardSortMethod,uint eLeaderboardDisplayType);
+ public abstract ulong FindLeaderboard(string pchLeaderboardName);
+ public abstract string GetLeaderboardName(ulong hSteamLeaderboard);
+ public abstract int GetLeaderboardEntryCount(ulong hSteamLeaderboard);
+ public abstract uint GetLeaderboardSortMethod(ulong hSteamLeaderboard);
+ public abstract uint GetLeaderboardDisplayType(ulong hSteamLeaderboard);
+ public abstract ulong DownloadLeaderboardEntries(ulong hSteamLeaderboard,uint eLeaderboardDataRequest,int nRangeStart,int nRangeEnd);
+ public abstract ulong DownloadLeaderboardEntriesForUsers(ulong hSteamLeaderboard,CSteamID [] prgUsers);
+ public abstract bool GetDownloadedLeaderboardEntry(ulong hSteamLeaderboardEntries,int index,ref LeaderboardEntry_t pLeaderboardEntry,ref int pDetails,int cDetailsMax);
+ public abstract ulong UploadLeaderboardScore(ulong hSteamLeaderboard,uint eLeaderboardUploadScoreMethod,int nScore,ref int pScoreDetails,int cScoreDetailsCount);
+ public abstract ulong AttachLeaderboardUGC(ulong hSteamLeaderboard,ulong hUGC);
+ public abstract ulong GetNumberOfCurrentPlayers();
+ public abstract ulong RequestGlobalAchievementPercentages();
+ public abstract int GetMostAchievedAchievementInfo(string pchName,uint unNameBufLen,ref float pflPercent,ref bool pbAchieved);
+ public abstract int GetNextMostAchievedAchievementInfo(int iIteratorPrevious,string pchName,uint unNameBufLen,ref float pflPercent,ref bool pbAchieved);
+ public abstract bool GetAchievementAchievedPercent(string pchName,ref float pflPercent);
+ public abstract ulong RequestGlobalStats(int nHistoryDays);
+ public abstract bool GetGlobalStat(string pchStatName,ref long pData);
+ public abstract bool GetGlobalStat0(string pchStatName,ref double pData);
+ public abstract int GetGlobalStatHistory(string pchStatName,long [] pData);
+ public abstract int GetGlobalStatHistory0(string pchStatName,double [] pData);
+ }
+
+
+ public abstract class ISteamApps
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract bool BIsSubscribed();
+ public abstract bool BIsLowViolence();
+ public abstract bool BIsCybercafe();
+ public abstract bool BIsVACBanned();
+ public abstract string GetCurrentGameLanguage();
+ public abstract string GetAvailableGameLanguages();
+ public abstract bool BIsSubscribedApp(uint appID);
+ public abstract bool BIsDlcInstalled(uint appID);
+ public abstract uint GetEarliestPurchaseUnixTime(uint nAppID);
+ public abstract bool BIsSubscribedFromFreeWeekend();
+ public abstract int GetDLCCount();
+ public abstract bool BGetDLCDataByIndex(int iDLC,ref uint pAppID,ref bool pbAvailable,string pchName,int cchNameBufferSize);
+ public abstract void InstallDLC(uint nAppID);
+ public abstract void UninstallDLC(uint nAppID);
+ public abstract void RequestAppProofOfPurchaseKey(uint nAppID);
+ public abstract bool GetCurrentBetaName(string pchName,int cchNameBufferSize);
+ public abstract bool MarkContentCorrupt(bool bMissingFilesOnly);
+ public abstract uint GetInstalledDepots(uint appID,ref uint pvecDepots,uint cMaxDepots);
+ public abstract uint GetAppInstallDir(uint appID,string pchFolder,uint cchFolderBufferSize);
+ public abstract bool BIsAppInstalled(uint appID);
+ public abstract ulong GetAppOwner();
+ public abstract string GetLaunchQueryParam(string pchKey);
+ public abstract bool GetDlcDownloadProgress(uint nAppID,ref ulong punBytesDownloaded,ref ulong punBytesTotal);
+ public abstract int GetAppBuildId();
+ public abstract void RequestAllProofOfPurchaseKeys();
+ public abstract ulong GetFileDetails(string pszFileName);
+ }
+
+
+ public abstract class ISteamNetworking
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract bool SendP2PPacket(ulong steamIDRemote,IntPtr pubData,uint cubData,uint eP2PSendType,int nChannel);
+ public abstract bool IsP2PPacketAvailable(ref uint pcubMsgSize,int nChannel);
+ public abstract bool ReadP2PPacket(IntPtr pubDest,uint cubDest,ref uint pcubMsgSize,ref CSteamID psteamIDRemote,int nChannel);
+ public abstract bool AcceptP2PSessionWithUser(ulong steamIDRemote);
+ public abstract bool CloseP2PSessionWithUser(ulong steamIDRemote);
+ public abstract bool CloseP2PChannelWithUser(ulong steamIDRemote,int nChannel);
+ public abstract bool GetP2PSessionState(ulong steamIDRemote,ref P2PSessionState_t pConnectionState);
+ public abstract bool AllowP2PPacketRelay(bool bAllow);
+ public abstract uint CreateListenSocket(int nVirtualP2PPort,uint nIP,char nPort,bool bAllowUseOfPacketRelay);
+ public abstract uint CreateP2PConnectionSocket(ulong steamIDTarget,int nVirtualPort,int nTimeoutSec,bool bAllowUseOfPacketRelay);
+ public abstract uint CreateConnectionSocket(uint nIP,char nPort,int nTimeoutSec);
+ public abstract bool DestroySocket(uint hSocket,bool bNotifyRemoteEnd);
+ public abstract bool DestroyListenSocket(uint hSocket,bool bNotifyRemoteEnd);
+ public abstract bool SendDataOnSocket(uint hSocket,IntPtr pubData,uint cubData,bool bReliable);
+ public abstract bool IsDataAvailableOnSocket(uint hSocket,ref uint pcubMsgSize);
+ public abstract bool RetrieveDataFromSocket(uint hSocket,IntPtr pubDest,uint cubDest,ref uint pcubMsgSize);
+ public abstract bool IsDataAvailable(uint hListenSocket,ref uint pcubMsgSize,ref uint phSocket);
+ public abstract bool RetrieveData(uint hListenSocket,IntPtr pubDest,uint cubDest,ref uint pcubMsgSize,ref uint phSocket);
+ public abstract bool GetSocketInfo(uint hSocket,ref CSteamID pSteamIDRemote,ref int peSocketStatus,ref uint punIPRemote,ref char punPortRemote);
+ public abstract bool GetListenSocketInfo(uint hListenSocket,ref uint pnIP,ref char pnPort);
+ public abstract uint GetSocketConnectionType(uint hSocket);
+ public abstract int GetMaxPacketSize(uint hSocket);
+ }
+
+
+ public abstract class ISteamScreenshots
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract uint WriteScreenshot(IntPtr pubRGB,uint cubRGB,int nWidth,int nHeight);
+ public abstract uint AddScreenshotToLibrary(string pchFilename,string pchThumbnailFilename,int nWidth,int nHeight);
+ public abstract void TriggerScreenshot();
+ public abstract void HookScreenshots(bool bHook);
+ public abstract bool SetLocation(uint hScreenshot,string pchLocation);
+ public abstract bool TagUser(uint hScreenshot,ulong steamID);
+ public abstract bool TagPublishedFile(uint hScreenshot,ulong unPublishedFileID);
+ public abstract bool IsScreenshotsHooked();
+ public abstract uint AddVRScreenshotToLibrary(uint eType,string pchFilename,string pchVRFilename);
+ }
+
+
+ public abstract class ISteamMusic
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract bool BIsEnabled();
+ public abstract bool BIsPlaying();
+ public abstract int GetPlaybackStatus();
+ public abstract void Play();
+ public abstract void Pause();
+ public abstract void PlayPrevious();
+ public abstract void PlayNext();
+ public abstract void SetVolume(float flVolume);
+ public abstract float GetVolume();
+ }
+
+
+ public abstract class ISteamMusicRemote
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract bool RegisterSteamMusicRemote(string pchName);
+ public abstract bool DeregisterSteamMusicRemote();
+ public abstract bool BIsCurrentMusicRemote();
+ public abstract bool BActivationSuccess(bool bValue);
+ public abstract bool SetDisplayName(string pchDisplayName);
+ public abstract bool SetPNGIcon_64x64(IntPtr pvBuffer,uint cbBufferLength);
+ public abstract bool EnablePlayPrevious(bool bValue);
+ public abstract bool EnablePlayNext(bool bValue);
+ public abstract bool EnableShuffled(bool bValue);
+ public abstract bool EnableLooped(bool bValue);
+ public abstract bool EnableQueue(bool bValue);
+ public abstract bool EnablePlaylists(bool bValue);
+ public abstract bool UpdatePlaybackStatus(int nStatus);
+ public abstract bool UpdateShuffled(bool bValue);
+ public abstract bool UpdateLooped(bool bValue);
+ public abstract bool UpdateVolume(float flValue);
+ public abstract bool CurrentEntryWillChange();
+ public abstract bool CurrentEntryIsAvailable(bool bAvailable);
+ public abstract bool UpdateCurrentEntryText(string pchText);
+ public abstract bool UpdateCurrentEntryElapsedSeconds(int nValue);
+ public abstract bool UpdateCurrentEntryCoverArt(IntPtr pvBuffer,uint cbBufferLength);
+ public abstract bool CurrentEntryDidChange();
+ public abstract bool QueueWillChange();
+ public abstract bool ResetQueueEntries();
+ public abstract bool SetQueueEntry(int nID,int nPosition,string pchEntryText);
+ public abstract bool SetCurrentQueueEntry(int nID);
+ public abstract bool QueueDidChange();
+ public abstract bool PlaylistWillChange();
+ public abstract bool ResetPlaylistEntries();
+ public abstract bool SetPlaylistEntry(int nID,int nPosition,string pchEntryText);
+ public abstract bool SetCurrentPlaylistEntry(int nID);
+ public abstract bool PlaylistDidChange();
+ }
+
+
+ public abstract class ISteamHTTP
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract uint CreateHTTPRequest(uint eHTTPRequestMethod,string pchAbsoluteURL);
+ public abstract bool SetHTTPRequestContextValue(uint hRequest,ulong ulContextValue);
+ public abstract bool SetHTTPRequestNetworkActivityTimeout(uint hRequest,uint unTimeoutSeconds);
+ public abstract bool SetHTTPRequestHeaderValue(uint hRequest,string pchHeaderName,string pchHeaderValue);
+ public abstract bool SetHTTPRequestGetOrPostParameter(uint hRequest,string pchParamName,string pchParamValue);
+ public abstract bool SendHTTPRequest(uint hRequest,ref ulong pCallHandle);
+ public abstract bool SendHTTPRequestAndStreamResponse(uint hRequest,ref ulong pCallHandle);
+ public abstract bool DeferHTTPRequest(uint hRequest);
+ public abstract bool PrioritizeHTTPRequest(uint hRequest);
+ public abstract bool GetHTTPResponseHeaderSize(uint hRequest,string pchHeaderName,ref uint unResponseHeaderSize);
+ public abstract bool GetHTTPResponseHeaderValue(uint hRequest,string pchHeaderName,IntPtr pHeaderValueBuffer,uint unBufferSize);
+ public abstract bool GetHTTPResponseBodySize(uint hRequest,ref uint unBodySize);
+ public abstract bool GetHTTPResponseBodyData(uint hRequest,IntPtr pBodyDataBuffer,uint unBufferSize);
+ public abstract bool GetHTTPStreamingResponseBodyData(uint hRequest,uint cOffset,IntPtr pBodyDataBuffer,uint unBufferSize);
+ public abstract bool ReleaseHTTPRequest(uint hRequest);
+ public abstract bool GetHTTPDownloadProgressPct(uint hRequest,ref float pflPercentOut);
+ public abstract bool SetHTTPRequestRawPostBody(uint hRequest,string pchContentType,IntPtr pubBody,uint unBodyLen);
+ public abstract uint CreateCookieContainer(bool bAllowResponsesToModify);
+ public abstract bool ReleaseCookieContainer(uint hCookieContainer);
+ public abstract bool SetCookie(uint hCookieContainer,string pchHost,string pchUrl,string pchCookie);
+ public abstract bool SetHTTPRequestCookieContainer(uint hRequest,uint hCookieContainer);
+ public abstract bool SetHTTPRequestUserAgentInfo(uint hRequest,string pchUserAgentInfo);
+ public abstract bool SetHTTPRequestRequiresVerifiedCertificate(uint hRequest,bool bRequireVerifiedCertificate);
+ public abstract bool SetHTTPRequestAbsoluteTimeoutMS(uint hRequest,uint unMilliseconds);
+ public abstract bool GetHTTPRequestWasTimedOut(uint hRequest,ref bool pbWasTimedOut);
+ }
+
+
+ public abstract class ISteamUnifiedMessages
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract ulong SendMethod(string pchServiceMethod,IntPtr pRequestBuffer,uint unRequestBufferSize,ulong unContext);
+ public abstract bool GetMethodResponseInfo(ulong hHandle,ref uint punResponseSize,ref uint peResult);
+ public abstract bool GetMethodResponseData(ulong hHandle,IntPtr pResponseBuffer,uint unResponseBufferSize,bool bAutoRelease);
+ public abstract bool ReleaseMethod(ulong hHandle);
+ public abstract bool SendNotification(string pchServiceNotification,IntPtr pNotificationBuffer,uint unNotificationBufferSize);
+ }
+
+
+ public abstract class ISteamController
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract bool Init();
+ public abstract bool Shutdown();
+ public abstract void RunFrame();
+ public abstract int GetConnectedControllers(ref ulong handlesOut);
+ public abstract bool ShowBindingPanel(ulong controllerHandle);
+ public abstract ulong GetActionSetHandle(string pszActionSetName);
+ public abstract void ActivateActionSet(ulong controllerHandle,ulong actionSetHandle);
+ public abstract ulong GetCurrentActionSet(ulong controllerHandle);
+ public abstract ulong GetDigitalActionHandle(string pszActionName);
+ public abstract ControllerDigitalActionData_t GetDigitalActionData(ulong controllerHandle,ulong digitalActionHandle);
+ public abstract int GetDigitalActionOrigins(ulong controllerHandle,ulong actionSetHandle,ulong digitalActionHandle,ref uint originsOut);
+ public abstract ulong GetAnalogActionHandle(string pszActionName);
+ public abstract ControllerAnalogActionData_t GetAnalogActionData(ulong controllerHandle,ulong analogActionHandle);
+ public abstract int GetAnalogActionOrigins(ulong controllerHandle,ulong actionSetHandle,ulong analogActionHandle,ref uint originsOut);
+ public abstract void StopAnalogActionMomentum(ulong controllerHandle,ulong eAction);
+ public abstract void TriggerHapticPulse(ulong controllerHandle,uint eTargetPad,char usDurationMicroSec);
+ public abstract void TriggerRepeatedHapticPulse(ulong controllerHandle,uint eTargetPad,char usDurationMicroSec,char usOffMicroSec,char unRepeat,uint nFlags);
+ public abstract void TriggerVibration(ulong controllerHandle,char usLeftSpeed,char usRightSpeed);
+ public abstract void SetLEDColor(ulong controllerHandle,byte nColorR,byte nColorG,byte nColorB,uint nFlags);
+ public abstract int GetGamepadIndexForController(ulong ulControllerHandle);
+ public abstract ulong GetControllerForGamepadIndex(int nIndex);
+ public abstract ControllerMotionData_t GetMotionData(ulong controllerHandle);
+ public abstract bool ShowDigitalActionOrigins(ulong controllerHandle,ulong digitalActionHandle,float flScale,float flXPosition,float flYPosition);
+ public abstract bool ShowAnalogActionOrigins(ulong controllerHandle,ulong analogActionHandle,float flScale,float flXPosition,float flYPosition);
+ public abstract string GetStringForActionOrigin(uint eOrigin);
+ public abstract string GetGlyphForActionOrigin(uint eOrigin);
+ }
+
+
+ public abstract class ISteamUGC
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract ulong CreateQueryUserUGCRequest(uint unAccountID,uint eListType,uint eMatchingUGCType,uint eSortOrder,uint nCreatorAppID,uint nConsumerAppID,uint unPage);
+ public abstract ulong CreateQueryAllUGCRequest(uint eQueryType,uint eMatchingeMatchingUGCTypeFileType,uint nCreatorAppID,uint nConsumerAppID,uint unPage);
+ public abstract ulong CreateQueryUGCDetailsRequest(ref ulong pvecPublishedFileID,uint unNumPublishedFileIDs);
+ public abstract ulong SendQueryUGCRequest(ulong handle);
+ public abstract bool GetQueryUGCResult(ulong handle,uint index,ref SteamUGCDetails_t pDetails);
+ public abstract bool GetQueryUGCPreviewURL(ulong handle,uint index,out string pchURL);
+ public abstract bool GetQueryUGCMetadata(ulong handle,uint index,out string pchMetadata);
+ public abstract bool GetQueryUGCChildren(ulong handle,uint index,ref ulong pvecPublishedFileID,uint cMaxEntries);
+ public abstract bool GetQueryUGCStatistic(ulong handle,uint index,uint eStatType,ref ulong pStatValue);
+ public abstract uint GetQueryUGCNumAdditionalPreviews(ulong handle,uint index);
+ public abstract bool GetQueryUGCAdditionalPreview(ulong handle,uint index,uint previewIndex,out string pchURLOrVideoID,out string pchOriginalFileName,uint cchOriginalFileNameSize,ref uint pPreviewType);
+ public abstract uint GetQueryUGCNumKeyValueTags(ulong handle,uint index);
+ public abstract bool GetQueryUGCKeyValueTag(ulong handle,uint index,uint keyValueTagIndex,out string pchKey,out string pchValue);
+ public abstract bool ReleaseQueryUGCRequest(ulong handle);
+ public abstract bool AddRequiredTag(ulong handle,string pTagName);
+ public abstract bool AddExcludedTag(ulong handle,string pTagName);
+ public abstract bool SetReturnOnlyIDs(ulong handle,bool bReturnOnlyIDs);
+ public abstract bool SetReturnKeyValueTags(ulong handle,bool bReturnKeyValueTags);
+ public abstract bool SetReturnLongDescription(ulong handle,bool bReturnLongDescription);
+ public abstract bool SetReturnMetadata(ulong handle,bool bReturnMetadata);
+ public abstract bool SetReturnChildren(ulong handle,bool bReturnChildren);
+ public abstract bool SetReturnAdditionalPreviews(ulong handle,bool bReturnAdditionalPreviews);
+ public abstract bool SetReturnTotalOnly(ulong handle,bool bReturnTotalOnly);
+ public abstract bool SetReturnPlaytimeStats(ulong handle,uint unDays);
+ public abstract bool SetLanguage(ulong handle,string pchLanguage);
+ public abstract bool SetAllowCachedResponse(ulong handle,uint unMaxAgeSeconds);
+ public abstract bool SetCloudFileNameFilter(ulong handle,string pMatchCloudFileName);
+ public abstract bool SetMatchAnyTag(ulong handle,bool bMatchAnyTag);
+ public abstract bool SetSearchText(ulong handle,string pSearchText);
+ public abstract bool SetRankedByTrendDays(ulong handle,uint unDays);
+ public abstract bool AddRequiredKeyValueTag(ulong handle,string pKey,string pValue);
+ public abstract ulong RequestUGCDetails(ulong nPublishedFileID,uint unMaxAgeSeconds);
+ public abstract ulong CreateItem(uint nConsumerAppId,uint eFileType);
+ public abstract ulong StartItemUpdate(uint nConsumerAppId,ulong nPublishedFileID);
+ public abstract bool SetItemTitle(ulong handle,string pchTitle);
+ public abstract bool SetItemDescription(ulong handle,string pchDescription);
+ public abstract bool SetItemUpdateLanguage(ulong handle,string pchLanguage);
+ public abstract bool SetItemMetadata(ulong handle,string pchMetaData);
+ public abstract bool SetItemVisibility(ulong handle,uint eVisibility);
+ public abstract bool SetItemTags(ulong updateHandle,ref SteamParamStringArray_t pTags);
+ public abstract bool SetItemContent(ulong handle,string pszContentFolder);
+ public abstract bool SetItemPreview(ulong handle,string pszPreviewFile);
+ public abstract bool RemoveItemKeyValueTags(ulong handle,string pchKey);
+ public abstract bool AddItemKeyValueTag(ulong handle,string pchKey,string pchValue);
+ public abstract bool AddItemPreviewFile(ulong handle,string pszPreviewFile,uint type);
+ public abstract bool AddItemPreviewVideo(ulong handle,string pszVideoID);
+ public abstract bool UpdateItemPreviewFile(ulong handle,uint index,string pszPreviewFile);
+ public abstract bool UpdateItemPreviewVideo(ulong handle,uint index,string pszVideoID);
+ public abstract bool RemoveItemPreview(ulong handle,uint index);
+ public abstract ulong SubmitItemUpdate(ulong handle,string pchChangeNote);
+ public abstract uint GetItemUpdateProgress(ulong handle,ref ulong punBytesProcessed,ref ulong punBytesTotal);
+ public abstract ulong SetUserItemVote(ulong nPublishedFileID,bool bVoteUp);
+ public abstract ulong GetUserItemVote(ulong nPublishedFileID);
+ public abstract ulong AddItemToFavorites(uint nAppId,ulong nPublishedFileID);
+ public abstract ulong RemoveItemFromFavorites(uint nAppId,ulong nPublishedFileID);
+ public abstract ulong SubscribeItem(ulong nPublishedFileID);
+ public abstract ulong UnsubscribeItem(ulong nPublishedFileID);
+ public abstract uint GetNumSubscribedItems();
+ public abstract uint GetSubscribedItems(ref ulong pvecPublishedFileID,uint cMaxEntries);
+ public abstract uint GetItemState(ulong nPublishedFileID);
+ public abstract bool GetItemInstallInfo(ulong nPublishedFileID,ref ulong punSizeOnDisk,out string pchFolder,ref uint punTimeStamp);
+ public abstract bool GetItemDownloadInfo(ulong nPublishedFileID,ref ulong punBytesDownloaded,ref ulong punBytesTotal);
+ public abstract bool DownloadItem(ulong nPublishedFileID,bool bHighPriority);
+ public abstract bool BInitWorkshopForGameServer(uint unWorkshopDepotID,string pszFolder);
+ public abstract void SuspendDownloads(bool bSuspend);
+ public abstract ulong StartPlaytimeTracking(ref ulong pvecPublishedFileID,uint unNumPublishedFileIDs);
+ public abstract ulong StopPlaytimeTracking(ref ulong pvecPublishedFileID,uint unNumPublishedFileIDs);
+ public abstract ulong StopPlaytimeTrackingForAllItems();
+ public abstract ulong AddDependency(ulong nParentPublishedFileID,ulong nChildPublishedFileID);
+ public abstract ulong RemoveDependency(ulong nParentPublishedFileID,ulong nChildPublishedFileID);
+ }
+
+
+ public abstract class ISteamAppList
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract uint GetNumInstalledApps();
+ public abstract uint GetInstalledApps(ref uint pvecAppID,uint unMaxAppIDs);
+ public abstract int GetAppName(uint nAppID,System.Text.StringBuilder pchName,int cchNameMax);
+ public abstract int GetAppInstallDir(uint nAppID,string pchDirectory,int cchNameMax);
+ public abstract int GetAppBuildId(uint nAppID);
+ }
+
+
+ public abstract class ISteamHTMLSurface
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract void DestructISteamHTMLSurface();
+ public abstract bool Init();
+ public abstract bool Shutdown();
+ public abstract ulong CreateBrowser(string pchUserAgent,string pchUserCSS);
+ public abstract void RemoveBrowser(uint unBrowserHandle);
+ public abstract void LoadURL(uint unBrowserHandle,string pchURL,string pchPostData);
+ public abstract void SetSize(uint unBrowserHandle,uint unWidth,uint unHeight);
+ public abstract void StopLoad(uint unBrowserHandle);
+ public abstract void Reload(uint unBrowserHandle);
+ public abstract void GoBack(uint unBrowserHandle);
+ public abstract void GoForward(uint unBrowserHandle);
+ public abstract void AddHeader(uint unBrowserHandle,string pchKey,string pchValue);
+ public abstract void ExecuteJavascript(uint unBrowserHandle,string pchScript);
+ public abstract void MouseUp(uint unBrowserHandle,uint eMouseButton);
+ public abstract void MouseDown(uint unBrowserHandle,uint eMouseButton);
+ public abstract void MouseDoubleClick(uint unBrowserHandle,uint eMouseButton);
+ public abstract void MouseMove(uint unBrowserHandle,int x,int y);
+ public abstract void MouseWheel(uint unBrowserHandle,int nDelta);
+ public abstract void KeyDown(uint unBrowserHandle,uint nNativeKeyCode,uint eHTMLKeyModifiers);
+ public abstract void KeyUp(uint unBrowserHandle,uint nNativeKeyCode,uint eHTMLKeyModifiers);
+ public abstract void KeyChar(uint unBrowserHandle,uint cUnicodeChar,uint eHTMLKeyModifiers);
+ public abstract void SetHorizontalScroll(uint unBrowserHandle,uint nAbsolutePixelScroll);
+ public abstract void SetVerticalScroll(uint unBrowserHandle,uint nAbsolutePixelScroll);
+ public abstract void SetKeyFocus(uint unBrowserHandle,bool bHasKeyFocus);
+ public abstract void ViewSource(uint unBrowserHandle);
+ public abstract void CopyToClipboard(uint unBrowserHandle);
+ public abstract void PasteFromClipboard(uint unBrowserHandle);
+ public abstract void Find(uint unBrowserHandle,string pchSearchStr,bool bCurrentlyInFind,bool bReverse);
+ public abstract void StopFind(uint unBrowserHandle);
+ public abstract void GetLinkAtPosition(uint unBrowserHandle,int x,int y);
+ public abstract void SetCookie(string pchHostname,string pchKey,string pchValue,string pchPath,ulong nExpires,bool bSecure,bool bHTTPOnly);
+ public abstract void SetPageScaleFactor(uint unBrowserHandle,float flZoom,int nPointX,int nPointY);
+ public abstract void SetBackgroundMode(uint unBrowserHandle,bool bBackgroundMode);
+ public abstract void AllowStartRequest(uint unBrowserHandle,bool bAllowed);
+ public abstract void JSDialogResponse(uint unBrowserHandle,bool bResult);
+ }
+
+
+ public abstract class ISteamInventory
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract uint GetResultStatus(int resultHandle);
+ public abstract bool GetResultItems(int resultHandle,out SteamItemDetails_t [] pOutItemsArray);
+ public abstract bool GetResultItemProperty(int resultHandle,uint unItemIndex,string pchPropertyName,out string pchValueBuffer);
+ public abstract uint GetResultTimestamp(int resultHandle);
+ public abstract bool CheckResultSteamID(int resultHandle,ulong steamIDExpected);
+ public abstract void DestroyResult(int resultHandle);
+ public abstract bool GetAllItems(ref int pResultHandle);
+ public abstract bool GetItemsByID(ref int pResultHandle,ulong [] pInstanceIDs);
+ public abstract bool SerializeResult(int resultHandle,IntPtr pOutBuffer,ref uint punOutBufferSize);
+ public abstract bool DeserializeResult(ref int pOutResultHandle,IntPtr pBuffer,uint unBufferSize,bool bRESERVED_MUST_BE_FALSE);
+ public abstract bool GenerateItems(ref int pResultHandle,int [] pArrayItemDefs,uint [] punArrayQuantity);
+ public abstract bool GrantPromoItems(ref int pResultHandle);
+ public abstract bool AddPromoItem(ref int pResultHandle,int itemDef);
+ public abstract bool AddPromoItems(ref int pResultHandle,int [] pArrayItemDefs);
+ public abstract bool ConsumeItem(ref int pResultHandle,ulong itemConsume,uint unQuantity);
+ public abstract bool ExchangeItems(ref int pResultHandle,int [] pArrayGenerate,uint [] punArrayGenerateQuantity,ulong [] pArrayDestroy,uint [] punArrayDestroyQuantity);
+ public abstract bool TransferItemQuantity(ref int pResultHandle,ulong itemIdSource,uint unQuantity,ulong itemIdDest);
+ public abstract void SendItemDropHeartbeat();
+ public abstract bool TriggerItemDrop(ref int pResultHandle,int dropListDefinition);
+ public abstract bool TradeItems(ref int pResultHandle,ulong steamIDTradePartner,ulong [] pArrayGive,uint [] pArrayGiveQuantity,ulong [] pArrayGet,uint [] pArrayGetQuantity);
+ public abstract bool LoadItemDefinitions();
+ public abstract bool GetItemDefinitionIDs(out int [] pItemDefIDs);
+ public abstract bool GetItemDefinitionProperty(int iDefinition,string pchPropertyName,out string pchValueBuffer);
+ public abstract ulong RequestEligiblePromoItemDefinitionsIDs(ulong steamID);
+ public abstract bool GetEligiblePromoItemDefinitionIDs(ulong steamID,out int [] pItemDefIDs);
+ }
+
+
+ public abstract class ISteamVideo
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract void GetVideoURL(uint unVideoAppID);
+ public abstract bool IsBroadcasting(ref int pnNumViewers);
+ public abstract void GetOPFSettings(uint unVideoAppID);
+ public abstract bool GetOPFStringForApp(uint unVideoAppID,string pchBuffer,ref int pnBufferSize);
+ }
+
+
+ public abstract class ISteamGameServer
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract bool InitGameServer(uint unIP,char usGamePort,char usQueryPort,uint unFlags,uint nGameAppId,string pchVersionString);
+ public abstract void SetProduct(string pszProduct);
+ public abstract void SetGameDescription(string pszGameDescription);
+ public abstract void SetModDir(string pszModDir);
+ public abstract void SetDedicatedServer(bool bDedicated);
+ public abstract void LogOn(string pszToken);
+ public abstract void LogOnAnonymous();
+ public abstract void LogOff();
+ public abstract bool BLoggedOn();
+ public abstract bool BSecure();
+ public abstract ulong GetSteamID();
+ public abstract bool WasRestartRequested();
+ public abstract void SetMaxPlayerCount(int cPlayersMax);
+ public abstract void SetBotPlayerCount(int cBotplayers);
+ public abstract void SetServerName(string pszServerName);
+ public abstract void SetMapName(string pszMapName);
+ public abstract void SetPasswordProtected(bool bPasswordProtected);
+ public abstract void SetSpectatorPort(char unSpectatorPort);
+ public abstract void SetSpectatorServerName(string pszSpectatorServerName);
+ public abstract void ClearAllKeyValues();
+ public abstract void SetKeyValue(string pKey,string pValue);
+ public abstract void SetGameTags(string pchGameTags);
+ public abstract void SetGameData(string pchGameData);
+ public abstract void SetRegion(string pszRegion);
+ public abstract bool SendUserConnectAndAuthenticate(uint unIPClient,IntPtr pvAuthBlob,uint cubAuthBlobSize,ref CSteamID pSteamIDUser);
+ public abstract ulong CreateUnauthenticatedUserConnection();
+ public abstract void SendUserDisconnect(ulong steamIDUser);
+ public abstract bool BUpdateUserData(ulong steamIDUser,string pchPlayerName,uint uScore);
+ public abstract uint GetAuthSessionTicket(IntPtr pTicket,int cbMaxTicket,ref uint pcbTicket);
+ public abstract uint BeginAuthSession(IntPtr pAuthTicket,int cbAuthTicket,ulong steamID);
+ public abstract void EndAuthSession(ulong steamID);
+ public abstract void CancelAuthTicket(uint hAuthTicket);
+ public abstract uint UserHasLicenseForApp(ulong steamID,uint appID);
+ public abstract bool RequestUserGroupStatus(ulong steamIDUser,ulong steamIDGroup);
+ public abstract void GetGameplayStats();
+ public abstract ulong GetServerReputation();
+ public abstract uint GetPublicIP();
+ public abstract bool HandleIncomingPacket(IntPtr pData,int cbData,uint srcIP,char srcPort);
+ public abstract int GetNextOutgoingPacket(IntPtr pOut,int cbMaxOut,ref uint pNetAdr,ref char pPort);
+ public abstract void EnableHeartbeats(bool bActive);
+ public abstract void SetHeartbeatInterval(int iHeartbeatInterval);
+ public abstract void ForceHeartbeat();
+ public abstract ulong AssociateWithClan(ulong steamIDClan);
+ public abstract ulong ComputeNewPlayerCompatibility(ulong steamIDNewPlayer);
+ }
+
+
+ public abstract class ISteamGameServerStats
+ {
+ public abstract IntPtr GetIntPtr();
+ public abstract ulong RequestUserStats(ulong steamIDUser);
+ public abstract bool GetUserStat(ulong steamIDUser,string pchName,ref int pData);
+ public abstract bool GetUserStat0(ulong steamIDUser,string pchName,ref float pData);
+ public abstract bool GetUserAchievement(ulong steamIDUser,string pchName,ref bool pbAchieved);
+ public abstract bool SetUserStat(ulong steamIDUser,string pchName,int nData);
+ public abstract bool SetUserStat0(ulong steamIDUser,string pchName,float fData);
+ public abstract bool UpdateUserAvgRateStat(ulong steamIDUser,string pchName,float flCountThisSession,double dSessionLength);
+ public abstract bool SetUserAchievement(ulong steamIDUser,string pchName);
+ public abstract bool ClearUserAchievement(ulong steamIDUser,string pchName);
+ public abstract ulong StoreUserStats(ulong steamIDUser);
+ }
+
+
+public class CSteamClient : ISteamClient
+{
+public CSteamClient(IntPtr SteamClient)
+{
+ m_pSteamClient = SteamClient;
+}
+IntPtr m_pSteamClient;
+
+public override IntPtr GetIntPtr() { return m_pSteamClient; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamClient == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override uint CreateSteamPipe()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamClient_CreateSteamPipe(m_pSteamClient);
+ return result;
+}
+public override bool BReleaseSteamPipe(uint hSteamPipe)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamClient_BReleaseSteamPipe(m_pSteamClient,hSteamPipe);
+ return result;
+}
+public override uint ConnectToGlobalUser(uint hSteamPipe)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamClient_ConnectToGlobalUser(m_pSteamClient,hSteamPipe);
+ return result;
+}
+public override uint CreateLocalUser(ref uint phSteamPipe,uint eAccountType)
+{
+ CheckIfUsable();
+ phSteamPipe = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamClient_CreateLocalUser(m_pSteamClient,ref phSteamPipe,eAccountType);
+ return result;
+}
+public override void ReleaseUser(uint hSteamPipe,uint hUser)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamClient_ReleaseUser(m_pSteamClient,hSteamPipe,hUser);
+}
+public override ISteamUser GetISteamUser(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamUser(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamUser) Marshal.PtrToStructure(result, typeof(ISteamUser));
+}
+public override ISteamGameServer GetISteamGameServer(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamGameServer(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamGameServer) Marshal.PtrToStructure(result, typeof(ISteamGameServer));
+}
+public override void SetLocalIPBinding(uint unIP,char usPort)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamClient_SetLocalIPBinding(m_pSteamClient,unIP,usPort);
+}
+public override ISteamFriends GetISteamFriends(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamFriends(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamFriends) Marshal.PtrToStructure(result, typeof(ISteamFriends));
+}
+public override ISteamUtils GetISteamUtils(uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamUtils(m_pSteamClient,hSteamPipe,pchVersion);
+ return (ISteamUtils) Marshal.PtrToStructure(result, typeof(ISteamUtils));
+}
+public override ISteamMatchmaking GetISteamMatchmaking(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamMatchmaking(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamMatchmaking) Marshal.PtrToStructure(result, typeof(ISteamMatchmaking));
+}
+public override ISteamMatchmakingServers GetISteamMatchmakingServers(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamMatchmakingServers(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamMatchmakingServers) Marshal.PtrToStructure(result, typeof(ISteamMatchmakingServers));
+}
+public override IntPtr GetISteamGenericInterface(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamGenericInterface(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (IntPtr) Marshal.PtrToStructure(result, typeof(IntPtr));
+}
+public override ISteamUserStats GetISteamUserStats(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamUserStats(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamUserStats) Marshal.PtrToStructure(result, typeof(ISteamUserStats));
+}
+public override ISteamGameServerStats GetISteamGameServerStats(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamGameServerStats(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamGameServerStats) Marshal.PtrToStructure(result, typeof(ISteamGameServerStats));
+}
+public override ISteamApps GetISteamApps(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamApps(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamApps) Marshal.PtrToStructure(result, typeof(ISteamApps));
+}
+public override ISteamNetworking GetISteamNetworking(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamNetworking(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamNetworking) Marshal.PtrToStructure(result, typeof(ISteamNetworking));
+}
+public override ISteamRemoteStorage GetISteamRemoteStorage(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamRemoteStorage(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamRemoteStorage) Marshal.PtrToStructure(result, typeof(ISteamRemoteStorage));
+}
+public override ISteamScreenshots GetISteamScreenshots(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamScreenshots(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamScreenshots) Marshal.PtrToStructure(result, typeof(ISteamScreenshots));
+}
+public override uint GetIPCCallCount()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamClient_GetIPCCallCount(m_pSteamClient);
+ return result;
+}
+public override void SetWarningMessageHook(IntPtr pFunction)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamClient_SetWarningMessageHook(m_pSteamClient,pFunction);
+}
+public override bool BShutdownIfAllPipesClosed()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(m_pSteamClient);
+ return result;
+}
+public override ISteamHTTP GetISteamHTTP(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamHTTP(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamHTTP) Marshal.PtrToStructure(result, typeof(ISteamHTTP));
+}
+public override ISteamUnifiedMessages GetISteamUnifiedMessages(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamUnifiedMessages(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamUnifiedMessages) Marshal.PtrToStructure(result, typeof(ISteamUnifiedMessages));
+}
+public override ISteamController GetISteamController(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamController(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamController) Marshal.PtrToStructure(result, typeof(ISteamController));
+}
+public override ISteamUGC GetISteamUGC(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamUGC(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamUGC) Marshal.PtrToStructure(result, typeof(ISteamUGC));
+}
+public override ISteamAppList GetISteamAppList(uint hSteamUser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamAppList(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
+ return (ISteamAppList) Marshal.PtrToStructure(result, typeof(ISteamAppList));
+}
+public override ISteamMusic GetISteamMusic(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamMusic(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamMusic) Marshal.PtrToStructure(result, typeof(ISteamMusic));
+}
+public override ISteamMusicRemote GetISteamMusicRemote(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamMusicRemote(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamMusicRemote) Marshal.PtrToStructure(result, typeof(ISteamMusicRemote));
+}
+public override ISteamHTMLSurface GetISteamHTMLSurface(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamHTMLSurface(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamHTMLSurface) Marshal.PtrToStructure(result, typeof(ISteamHTMLSurface));
+}
+public override ISteamInventory GetISteamInventory(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamInventory(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamInventory) Marshal.PtrToStructure(result, typeof(ISteamInventory));
+}
+public override ISteamVideo GetISteamVideo(uint hSteamuser,uint hSteamPipe,string pchVersion)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamVideo(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ return (ISteamVideo) Marshal.PtrToStructure(result, typeof(ISteamVideo));
+}
+}
+
+
+public class CSteamUser : ISteamUser
+{
+public CSteamUser(IntPtr SteamUser)
+{
+ m_pSteamUser = SteamUser;
+}
+IntPtr m_pSteamUser;
+
+public override IntPtr GetIntPtr() { return m_pSteamUser; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamUser == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override uint GetHSteamUser()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUser_GetHSteamUser(m_pSteamUser);
+ return result;
+}
+public override bool BLoggedOn()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUser_BLoggedOn(m_pSteamUser);
+ return result;
+}
+public override ulong GetSteamID()
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUser_GetSteamID(m_pSteamUser);
+ return result;
+}
+public override int InitiateGameConnection(IntPtr pAuthBlob,int cbMaxAuthBlob,ulong steamIDGameServer,uint unIPServer,char usPortServer,bool bSecure)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamUser_InitiateGameConnection(m_pSteamUser,pAuthBlob,cbMaxAuthBlob,steamIDGameServer,unIPServer,usPortServer,bSecure);
+ return result;
+}
+public override void TerminateGameConnection(uint unIPServer,char usPortServer)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUser_TerminateGameConnection(m_pSteamUser,unIPServer,usPortServer);
+}
+public override void TrackAppUsageEvent(ulong gameID,int eAppUsageEvent,string pchExtraInfo)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUser_TrackAppUsageEvent(m_pSteamUser,gameID,eAppUsageEvent,pchExtraInfo);
+}
+public override bool GetUserDataFolder(string pchBuffer,int cubBuffer)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUser_GetUserDataFolder(m_pSteamUser,pchBuffer,cubBuffer);
+ return result;
+}
+public override void StartVoiceRecording()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUser_StartVoiceRecording(m_pSteamUser);
+}
+public override void StopVoiceRecording()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUser_StopVoiceRecording(m_pSteamUser);
+}
+public override uint GetAvailableVoice(ref uint pcbCompressed,ref uint pcbUncompressed_Deprecated,uint nUncompressedVoiceDesiredSampleRate_Deprecated)
+{
+ CheckIfUsable();
+ pcbCompressed = 0;
+ pcbUncompressed_Deprecated = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamUser_GetAvailableVoice(m_pSteamUser,ref pcbCompressed,ref pcbUncompressed_Deprecated,nUncompressedVoiceDesiredSampleRate_Deprecated);
+ return result;
+}
+public override uint GetVoice(bool bWantCompressed,IntPtr pDestBuffer,uint cbDestBufferSize,ref uint nBytesWritten,bool bWantUncompressed_Deprecated,IntPtr pUncompressedDestBuffer_Deprecated,uint cbUncompressedDestBufferSize_Deprecated,ref uint nUncompressBytesWritten_Deprecated,uint nUncompressedVoiceDesiredSampleRate_Deprecated)
+{
+ CheckIfUsable();
+ nBytesWritten = 0;
+ nUncompressBytesWritten_Deprecated = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamUser_GetVoice(m_pSteamUser,bWantCompressed,pDestBuffer,cbDestBufferSize,ref nBytesWritten,bWantUncompressed_Deprecated,pUncompressedDestBuffer_Deprecated,cbUncompressedDestBufferSize_Deprecated,ref nUncompressBytesWritten_Deprecated,nUncompressedVoiceDesiredSampleRate_Deprecated);
+ return result;
+}
+public override uint DecompressVoice(IntPtr pCompressed,uint cbCompressed,IntPtr pDestBuffer,uint cbDestBufferSize,ref uint nBytesWritten,uint nDesiredSampleRate)
+{
+ CheckIfUsable();
+ nBytesWritten = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamUser_DecompressVoice(m_pSteamUser,pCompressed,cbCompressed,pDestBuffer,cbDestBufferSize,ref nBytesWritten,nDesiredSampleRate);
+ return result;
+}
+public override uint GetVoiceOptimalSampleRate()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(m_pSteamUser);
+ return result;
+}
+public override uint GetAuthSessionTicket(IntPtr pTicket,int cbMaxTicket,ref uint pcbTicket)
+{
+ CheckIfUsable();
+ pcbTicket = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamUser_GetAuthSessionTicket(m_pSteamUser,pTicket,cbMaxTicket,ref pcbTicket);
+ return result;
+}
+public override uint BeginAuthSession(IntPtr pAuthTicket,int cbAuthTicket,ulong steamID)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUser_BeginAuthSession(m_pSteamUser,pAuthTicket,cbAuthTicket,steamID);
+ return result;
+}
+public override void EndAuthSession(ulong steamID)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUser_EndAuthSession(m_pSteamUser,steamID);
+}
+public override void CancelAuthTicket(uint hAuthTicket)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUser_CancelAuthTicket(m_pSteamUser,hAuthTicket);
+}
+public override uint UserHasLicenseForApp(ulong steamID,uint appID)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUser_UserHasLicenseForApp(m_pSteamUser,steamID,appID);
+ return result;
+}
+public override bool BIsBehindNAT()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUser_BIsBehindNAT(m_pSteamUser);
+ return result;
+}
+public override void AdvertiseGame(ulong steamIDGameServer,uint unIPServer,char usPortServer)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUser_AdvertiseGame(m_pSteamUser,steamIDGameServer,unIPServer,usPortServer);
+}
+public override ulong RequestEncryptedAppTicket(IntPtr pDataToInclude,int cbDataToInclude)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUser_RequestEncryptedAppTicket(m_pSteamUser,pDataToInclude,cbDataToInclude);
+ return result;
+}
+public override bool GetEncryptedAppTicket(IntPtr pTicket,int cbMaxTicket,ref uint pcbTicket)
+{
+ CheckIfUsable();
+ pcbTicket = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUser_GetEncryptedAppTicket(m_pSteamUser,pTicket,cbMaxTicket,ref pcbTicket);
+ return result;
+}
+public override int GetGameBadgeLevel(int nSeries,bool bFoil)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamUser_GetGameBadgeLevel(m_pSteamUser,nSeries,bFoil);
+ return result;
+}
+public override int GetPlayerSteamLevel()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamUser_GetPlayerSteamLevel(m_pSteamUser);
+ return result;
+}
+public override ulong RequestStoreAuthURL(string pchRedirectURL)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUser_RequestStoreAuthURL(m_pSteamUser,pchRedirectURL);
+ return result;
+}
+public override bool BIsPhoneVerified()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUser_BIsPhoneVerified(m_pSteamUser);
+ return result;
+}
+public override bool BIsTwoFactorEnabled()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUser_BIsTwoFactorEnabled(m_pSteamUser);
+ return result;
+}
+public override bool BIsPhoneIdentifying()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUser_BIsPhoneIdentifying(m_pSteamUser);
+ return result;
+}
+public override bool BIsPhoneRequiringVerification()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUser_BIsPhoneRequiringVerification(m_pSteamUser);
+ return result;
+}
+}
+
+
+public class CSteamFriends : ISteamFriends
+{
+public CSteamFriends(IntPtr SteamFriends)
+{
+ m_pSteamFriends = SteamFriends;
+}
+IntPtr m_pSteamFriends;
+
+public override IntPtr GetIntPtr() { return m_pSteamFriends; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamFriends == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override string GetPersonaName()
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamFriends_GetPersonaName(m_pSteamFriends);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override ulong SetPersonaName(string pchPersonaName)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_SetPersonaName(m_pSteamFriends,pchPersonaName);
+ return result;
+}
+public override uint GetPersonaState()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamFriends_GetPersonaState(m_pSteamFriends);
+ return result;
+}
+public override int GetFriendCount(int iFriendFlags)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendCount(m_pSteamFriends,iFriendFlags);
+ return result;
+}
+public override ulong GetFriendByIndex(int iFriend,int iFriendFlags)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendByIndex(m_pSteamFriends,iFriend,iFriendFlags);
+ return result;
+}
+public override uint GetFriendRelationship(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendRelationship(m_pSteamFriends,steamIDFriend);
+ return result;
+}
+public override uint GetFriendPersonaState(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendPersonaState(m_pSteamFriends,steamIDFriend);
+ return result;
+}
+public override string GetFriendPersonaName(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendPersonaName(m_pSteamFriends,steamIDFriend);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override bool GetFriendGamePlayed(ulong steamIDFriend,out FriendGameInfo_t pFriendGameInfo)
+{
+ CheckIfUsable();
+ pFriendGameInfo = new FriendGameInfo_t();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendGamePlayed(m_pSteamFriends,steamIDFriend,ref pFriendGameInfo);
+ return result;
+}
+public override string GetFriendPersonaNameHistory(ulong steamIDFriend,int iPersonaName)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(m_pSteamFriends,steamIDFriend,iPersonaName);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override int GetFriendSteamLevel(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendSteamLevel(m_pSteamFriends,steamIDFriend);
+ return result;
+}
+public override string GetPlayerNickname(ulong steamIDPlayer)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamFriends_GetPlayerNickname(m_pSteamFriends,steamIDPlayer);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override int GetFriendsGroupCount()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendsGroupCount(m_pSteamFriends);
+ return result;
+}
+public override char GetFriendsGroupIDByIndex(int iFG)
+{
+ CheckIfUsable();
+ char result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(m_pSteamFriends,iFG);
+ return result;
+}
+public override string GetFriendsGroupName(char friendsGroupID)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendsGroupName(m_pSteamFriends,friendsGroupID);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override int GetFriendsGroupMembersCount(char friendsGroupID)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(m_pSteamFriends,friendsGroupID);
+ return result;
+}
+public override void GetFriendsGroupMembersList(char friendsGroupID,out CSteamID [] pOutSteamIDMembers)
+{
+ CheckIfUsable();
+ int nMembersCount = GetFriendsGroupMembersCount (friendsGroupID);
+ pOutSteamIDMembers = new CSteamID[nMembersCount];
+ NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendsGroupMembersList(m_pSteamFriends,friendsGroupID,pOutSteamIDMembers,nMembersCount);
+}
+public override bool HasFriend(ulong steamIDFriend,int iFriendFlags)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_HasFriend(m_pSteamFriends,steamIDFriend,iFriendFlags);
+ return result;
+}
+public override int GetClanCount()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanCount(m_pSteamFriends);
+ return result;
+}
+public override ulong GetClanByIndex(int iClan)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanByIndex(m_pSteamFriends,iClan);
+ return result;
+}
+public override string GetClanName(ulong steamIDClan)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanName(m_pSteamFriends,steamIDClan);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override string GetClanTag(ulong steamIDClan)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanTag(m_pSteamFriends,steamIDClan);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override bool GetClanActivityCounts(ulong steamIDClan,ref int pnOnline,ref int pnInGame,ref int pnChatting)
+{
+ CheckIfUsable();
+ pnOnline = 0;
+ pnInGame = 0;
+ pnChatting = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanActivityCounts(m_pSteamFriends,steamIDClan,ref pnOnline,ref pnInGame,ref pnChatting);
+ return result;
+}
+public override ulong DownloadClanActivityCounts(CSteamID [] psteamIDClans)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_DownloadClanActivityCounts(m_pSteamFriends,psteamIDClans,(int) psteamIDClans.Length);
+ return result;
+}
+public override int GetFriendCountFromSource(ulong steamIDSource)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendCountFromSource(m_pSteamFriends,steamIDSource);
+ return result;
+}
+public override ulong GetFriendFromSourceByIndex(ulong steamIDSource,int iFriend)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(m_pSteamFriends,steamIDSource,iFriend);
+ return result;
+}
+public override bool IsUserInSource(ulong steamIDUser,ulong steamIDSource)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_IsUserInSource(m_pSteamFriends,steamIDUser,steamIDSource);
+ return result;
+}
+public override void SetInGameVoiceSpeaking(ulong steamIDUser,bool bSpeaking)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(m_pSteamFriends,steamIDUser,bSpeaking);
+}
+public override void ActivateGameOverlay(string pchDialog)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamFriends_ActivateGameOverlay(m_pSteamFriends,pchDialog);
+}
+public override void ActivateGameOverlayToUser(string pchDialog,ulong steamID)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamFriends_ActivateGameOverlayToUser(m_pSteamFriends,pchDialog,steamID);
+}
+public override void ActivateGameOverlayToWebPage(string pchURL)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(m_pSteamFriends,pchURL);
+}
+public override void ActivateGameOverlayToStore(uint nAppID,char eFlag)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamFriends_ActivateGameOverlayToStore(m_pSteamFriends,nAppID,eFlag);
+}
+public override void SetPlayedWith(ulong steamIDUserPlayedWith)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamFriends_SetPlayedWith(m_pSteamFriends,steamIDUserPlayedWith);
+}
+public override void ActivateGameOverlayInviteDialog(ulong steamIDLobby)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(m_pSteamFriends,steamIDLobby);
+}
+public override int GetSmallFriendAvatar(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetSmallFriendAvatar(m_pSteamFriends,steamIDFriend);
+ return result;
+}
+public override int GetMediumFriendAvatar(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetMediumFriendAvatar(m_pSteamFriends,steamIDFriend);
+ return result;
+}
+public override int GetLargeFriendAvatar(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetLargeFriendAvatar(m_pSteamFriends,steamIDFriend);
+ return result;
+}
+public override bool RequestUserInformation(ulong steamIDUser,bool bRequireNameOnly)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_RequestUserInformation(m_pSteamFriends,steamIDUser,bRequireNameOnly);
+ return result;
+}
+public override ulong RequestClanOfficerList(ulong steamIDClan)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_RequestClanOfficerList(m_pSteamFriends,steamIDClan);
+ return result;
+}
+public override ulong GetClanOwner(ulong steamIDClan)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanOwner(m_pSteamFriends,steamIDClan);
+ return result;
+}
+public override int GetClanOfficerCount(ulong steamIDClan)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanOfficerCount(m_pSteamFriends,steamIDClan);
+ return result;
+}
+public override ulong GetClanOfficerByIndex(ulong steamIDClan,int iOfficer)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanOfficerByIndex(m_pSteamFriends,steamIDClan,iOfficer);
+ return result;
+}
+public override uint GetUserRestrictions()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamFriends_GetUserRestrictions(m_pSteamFriends);
+ return result;
+}
+public override bool SetRichPresence(string pchKey,string pchValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_SetRichPresence(m_pSteamFriends,pchKey,pchValue);
+ return result;
+}
+public override void ClearRichPresence()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamFriends_ClearRichPresence(m_pSteamFriends);
+}
+public override string GetFriendRichPresence(ulong steamIDFriend,string pchKey)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendRichPresence(m_pSteamFriends,steamIDFriend,pchKey);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override int GetFriendRichPresenceKeyCount(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(m_pSteamFriends,steamIDFriend);
+ return result;
+}
+public override string GetFriendRichPresenceKeyByIndex(ulong steamIDFriend,int iKey)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(m_pSteamFriends,steamIDFriend,iKey);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override void RequestFriendRichPresence(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamFriends_RequestFriendRichPresence(m_pSteamFriends,steamIDFriend);
+}
+public override bool InviteUserToGame(ulong steamIDFriend,string pchConnectString)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_InviteUserToGame(m_pSteamFriends,steamIDFriend,pchConnectString);
+ return result;
+}
+public override int GetCoplayFriendCount()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetCoplayFriendCount(m_pSteamFriends);
+ return result;
+}
+public override ulong GetCoplayFriend(int iCoplayFriend)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_GetCoplayFriend(m_pSteamFriends,iCoplayFriend);
+ return result;
+}
+public override int GetFriendCoplayTime(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendCoplayTime(m_pSteamFriends,steamIDFriend);
+ return result;
+}
+public override uint GetFriendCoplayGame(ulong steamIDFriend)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendCoplayGame(m_pSteamFriends,steamIDFriend);
+ return result;
+}
+public override ulong JoinClanChatRoom(ulong steamIDClan)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_JoinClanChatRoom(m_pSteamFriends,steamIDClan);
+ return result;
+}
+public override bool LeaveClanChatRoom(ulong steamIDClan)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_LeaveClanChatRoom(m_pSteamFriends,steamIDClan);
+ return result;
+}
+public override int GetClanChatMemberCount(ulong steamIDClan)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanChatMemberCount(m_pSteamFriends,steamIDClan);
+ return result;
+}
+public override ulong GetChatMemberByIndex(ulong steamIDClan,int iUser)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_GetChatMemberByIndex(m_pSteamFriends,steamIDClan,iUser);
+ return result;
+}
+public override bool SendClanChatMessage(ulong steamIDClanChat,string pchText)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_SendClanChatMessage(m_pSteamFriends,steamIDClanChat,pchText);
+ return result;
+}
+public override int GetClanChatMessage(ulong steamIDClanChat,int iMessage,IntPtr prgchText,int cchTextMax,ref uint peChatEntryType,out CSteamID psteamidChatter)
+{
+ CheckIfUsable();
+ peChatEntryType = 0;
+ psteamidChatter = new CSteamID();
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetClanChatMessage(m_pSteamFriends,steamIDClanChat,iMessage,prgchText,cchTextMax,ref peChatEntryType,ref psteamidChatter);
+ return result;
+}
+public override bool IsClanChatAdmin(ulong steamIDClanChat,ulong steamIDUser)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_IsClanChatAdmin(m_pSteamFriends,steamIDClanChat,steamIDUser);
+ return result;
+}
+public override bool IsClanChatWindowOpenInSteam(ulong steamIDClanChat)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(m_pSteamFriends,steamIDClanChat);
+ return result;
+}
+public override bool OpenClanChatWindowInSteam(ulong steamIDClanChat)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(m_pSteamFriends,steamIDClanChat);
+ return result;
+}
+public override bool CloseClanChatWindowInSteam(ulong steamIDClanChat)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(m_pSteamFriends,steamIDClanChat);
+ return result;
+}
+public override bool SetListenForFriendsMessages(bool bInterceptEnabled)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_SetListenForFriendsMessages(m_pSteamFriends,bInterceptEnabled);
+ return result;
+}
+public override bool ReplyToFriendMessage(ulong steamIDFriend,string pchMsgToSend)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamFriends_ReplyToFriendMessage(m_pSteamFriends,steamIDFriend,pchMsgToSend);
+ return result;
+}
+public override int GetFriendMessage(ulong steamIDFriend,int iMessageID,IntPtr pvData,int cubData,ref uint peChatEntryType)
+{
+ CheckIfUsable();
+ peChatEntryType = 0;
+ int result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFriendMessage(m_pSteamFriends,steamIDFriend,iMessageID,pvData,cubData,ref peChatEntryType);
+ return result;
+}
+public override ulong GetFollowerCount(ulong steamID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_GetFollowerCount(m_pSteamFriends,steamID);
+ return result;
+}
+public override ulong IsFollowing(ulong steamID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_IsFollowing(m_pSteamFriends,steamID);
+ return result;
+}
+public override ulong EnumerateFollowingList(uint unStartIndex)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamFriends_EnumerateFollowingList(m_pSteamFriends,unStartIndex);
+ return result;
+}
+}
+
+
+public class CSteamUtils : ISteamUtils
+{
+public CSteamUtils(IntPtr SteamUtils)
+{
+ m_pSteamUtils = SteamUtils;
+}
+IntPtr m_pSteamUtils;
+
+public override IntPtr GetIntPtr() { return m_pSteamUtils; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamUtils == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override uint GetSecondsSinceAppActive()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUtils_GetSecondsSinceAppActive(m_pSteamUtils);
+ return result;
+}
+public override uint GetSecondsSinceComputerActive()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(m_pSteamUtils);
+ return result;
+}
+public override int GetConnectedUniverse()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamUtils_GetConnectedUniverse(m_pSteamUtils);
+ return result;
+}
+public override uint GetServerRealTime()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUtils_GetServerRealTime(m_pSteamUtils);
+ return result;
+}
+public override string GetIPCountry()
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamUtils_GetIPCountry(m_pSteamUtils);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override bool GetImageSize(int iImage,ref uint pnWidth,ref uint pnHeight)
+{
+ CheckIfUsable();
+ pnWidth = 0;
+ pnHeight = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_GetImageSize(m_pSteamUtils,iImage,ref pnWidth,ref pnHeight);
+ return result;
+}
+public override bool GetImageRGBA(int iImage,IntPtr pubDest,int nDestBufferSize)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_GetImageRGBA(m_pSteamUtils,iImage,pubDest,nDestBufferSize);
+ return result;
+}
+public override bool GetCSERIPPort(ref uint unIP,ref char usPort)
+{
+ CheckIfUsable();
+ unIP = 0;
+ usPort = (char) 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_GetCSERIPPort(m_pSteamUtils,ref unIP,ref usPort);
+ return result;
+}
+public override byte GetCurrentBatteryPower()
+{
+ CheckIfUsable();
+ byte result = NativeEntrypoints.SteamAPI_ISteamUtils_GetCurrentBatteryPower(m_pSteamUtils);
+ return result;
+}
+public override uint GetAppID()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUtils_GetAppID(m_pSteamUtils);
+ return result;
+}
+public override void SetOverlayNotificationPosition(uint eNotificationPosition)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUtils_SetOverlayNotificationPosition(m_pSteamUtils,eNotificationPosition);
+}
+public override bool IsAPICallCompleted(ulong hSteamAPICall,ref bool pbFailed)
+{
+ CheckIfUsable();
+ pbFailed = false;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_IsAPICallCompleted(m_pSteamUtils,hSteamAPICall,ref pbFailed);
+ return result;
+}
+public override int GetAPICallFailureReason(ulong hSteamAPICall)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamUtils_GetAPICallFailureReason(m_pSteamUtils,hSteamAPICall);
+ return result;
+}
+public override bool GetAPICallResult(ulong hSteamAPICall,IntPtr pCallback,int cubCallback,int iCallbackExpected,ref bool pbFailed)
+{
+ CheckIfUsable();
+ pbFailed = false;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_GetAPICallResult(m_pSteamUtils,hSteamAPICall,pCallback,cubCallback,iCallbackExpected,ref pbFailed);
+ return result;
+}
+public override uint GetIPCCallCount()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUtils_GetIPCCallCount(m_pSteamUtils);
+ return result;
+}
+public override void SetWarningMessageHook(IntPtr pFunction)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUtils_SetWarningMessageHook(m_pSteamUtils,pFunction);
+}
+public override bool IsOverlayEnabled()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_IsOverlayEnabled(m_pSteamUtils);
+ return result;
+}
+public override bool BOverlayNeedsPresent()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_BOverlayNeedsPresent(m_pSteamUtils);
+ return result;
+}
+public override ulong CheckFileSignature(string szFileName)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUtils_CheckFileSignature(m_pSteamUtils,szFileName);
+ return result;
+}
+public override bool ShowGamepadTextInput(int eInputMode,int eLineInputMode,string pchDescription,uint unCharMax,string pchExistingText)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_ShowGamepadTextInput(m_pSteamUtils,eInputMode,eLineInputMode,pchDescription,unCharMax,pchExistingText);
+ return result;
+}
+public override uint GetEnteredGamepadTextLength()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(m_pSteamUtils);
+ return result;
+}
+public override bool GetEnteredGamepadTextInput(string pchText,uint cchText)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(m_pSteamUtils,pchText,cchText);
+ return result;
+}
+public override string GetSteamUILanguage()
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamUtils_GetSteamUILanguage(m_pSteamUtils);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override bool IsSteamRunningInVR()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_IsSteamRunningInVR(m_pSteamUtils);
+ return result;
+}
+public override void SetOverlayNotificationInset(int nHorizontalInset,int nVerticalInset)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUtils_SetOverlayNotificationInset(m_pSteamUtils,nHorizontalInset,nVerticalInset);
+}
+public override bool IsSteamInBigPictureMode()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_IsSteamInBigPictureMode(m_pSteamUtils);
+ return result;
+}
+public override void StartVRDashboard()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUtils_StartVRDashboard(m_pSteamUtils);
+}
+public override bool IsVRHeadsetStreamingEnabled()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUtils_IsVRHeadsetStreamingEnabled(m_pSteamUtils);
+ return result;
+}
+public override void SetVRHeadsetStreamingEnabled(bool bEnabled)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUtils_SetVRHeadsetStreamingEnabled(m_pSteamUtils,bEnabled);
+}
+}
+
+
+public class CSteamMatchmaking : ISteamMatchmaking
+{
+public CSteamMatchmaking(IntPtr SteamMatchmaking)
+{
+ m_pSteamMatchmaking = SteamMatchmaking;
+}
+IntPtr m_pSteamMatchmaking;
+
+public override IntPtr GetIntPtr() { return m_pSteamMatchmaking; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamMatchmaking == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override int GetFavoriteGameCount()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(m_pSteamMatchmaking);
+ return result;
+}
+public override bool GetFavoriteGame(int iGame,ref uint pnAppID,ref uint pnIP,ref char pnConnPort,ref char pnQueryPort,ref uint punFlags,ref uint pRTime32LastPlayedOnServer)
+{
+ CheckIfUsable();
+ pnAppID = 0;
+ pnIP = 0;
+ pnConnPort = (char) 0;
+ pnQueryPort = (char) 0;
+ punFlags = 0;
+ pRTime32LastPlayedOnServer = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetFavoriteGame(m_pSteamMatchmaking,iGame,ref pnAppID,ref pnIP,ref pnConnPort,ref pnQueryPort,ref punFlags,ref pRTime32LastPlayedOnServer);
+ return result;
+}
+public override int AddFavoriteGame(uint nAppID,uint nIP,char nConnPort,char nQueryPort,uint unFlags,uint rTime32LastPlayedOnServer)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_AddFavoriteGame(m_pSteamMatchmaking,nAppID,nIP,nConnPort,nQueryPort,unFlags,rTime32LastPlayedOnServer);
+ return result;
+}
+public override bool RemoveFavoriteGame(uint nAppID,uint nIP,char nConnPort,char nQueryPort,uint unFlags)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(m_pSteamMatchmaking,nAppID,nIP,nConnPort,nQueryPort,unFlags);
+ return result;
+}
+public override ulong RequestLobbyList()
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_RequestLobbyList(m_pSteamMatchmaking);
+ return result;
+}
+public override void AddRequestLobbyListStringFilter(string pchKeyToMatch,string pchValueToMatch,uint eComparisonType)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(m_pSteamMatchmaking,pchKeyToMatch,pchValueToMatch,eComparisonType);
+}
+public override void AddRequestLobbyListNumericalFilter(string pchKeyToMatch,int nValueToMatch,uint eComparisonType)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(m_pSteamMatchmaking,pchKeyToMatch,nValueToMatch,eComparisonType);
+}
+public override void AddRequestLobbyListNearValueFilter(string pchKeyToMatch,int nValueToBeCloseTo)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(m_pSteamMatchmaking,pchKeyToMatch,nValueToBeCloseTo);
+}
+public override void AddRequestLobbyListFilterSlotsAvailable(int nSlotsAvailable)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(m_pSteamMatchmaking,nSlotsAvailable);
+}
+public override void AddRequestLobbyListDistanceFilter(uint eLobbyDistanceFilter)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(m_pSteamMatchmaking,eLobbyDistanceFilter);
+}
+public override void AddRequestLobbyListResultCountFilter(int cMaxResults)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(m_pSteamMatchmaking,cMaxResults);
+}
+public override void AddRequestLobbyListCompatibleMembersFilter(ulong steamIDLobby)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(m_pSteamMatchmaking,steamIDLobby);
+}
+public override ulong GetLobbyByIndex(int iLobby)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyByIndex(m_pSteamMatchmaking,iLobby);
+ return result;
+}
+public override ulong CreateLobby(uint eLobbyType,int cMaxMembers)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_CreateLobby(m_pSteamMatchmaking,eLobbyType,cMaxMembers);
+ return result;
+}
+public override ulong JoinLobby(ulong steamIDLobby)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_JoinLobby(m_pSteamMatchmaking,steamIDLobby);
+ return result;
+}
+public override void LeaveLobby(ulong steamIDLobby)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_LeaveLobby(m_pSteamMatchmaking,steamIDLobby);
+}
+public override bool InviteUserToLobby(ulong steamIDLobby,ulong steamIDInvitee)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_InviteUserToLobby(m_pSteamMatchmaking,steamIDLobby,steamIDInvitee);
+ return result;
+}
+public override int GetNumLobbyMembers(ulong steamIDLobby)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(m_pSteamMatchmaking,steamIDLobby);
+ return result;
+}
+public override ulong GetLobbyMemberByIndex(ulong steamIDLobby,int iMember)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(m_pSteamMatchmaking,steamIDLobby,iMember);
+ return result;
+}
+public override string GetLobbyData(ulong steamIDLobby,string pchKey)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyData(m_pSteamMatchmaking,steamIDLobby,pchKey);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override bool SetLobbyData(ulong steamIDLobby,string pchKey,string pchValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_SetLobbyData(m_pSteamMatchmaking,steamIDLobby,pchKey,pchValue);
+ return result;
+}
+public override int GetLobbyDataCount(ulong steamIDLobby)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyDataCount(m_pSteamMatchmaking,steamIDLobby);
+ return result;
+}
+public override bool GetLobbyDataByIndex(ulong steamIDLobby,int iLobbyData,string pchKey,int cchKeyBufferSize,string pchValue,int cchValueBufferSize)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(m_pSteamMatchmaking,steamIDLobby,iLobbyData,pchKey,cchKeyBufferSize,pchValue,cchValueBufferSize);
+ return result;
+}
+public override bool DeleteLobbyData(ulong steamIDLobby,string pchKey)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_DeleteLobbyData(m_pSteamMatchmaking,steamIDLobby,pchKey);
+ return result;
+}
+public override string GetLobbyMemberData(ulong steamIDLobby,ulong steamIDUser,string pchKey)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyMemberData(m_pSteamMatchmaking,steamIDLobby,steamIDUser,pchKey);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override void SetLobbyMemberData(ulong steamIDLobby,string pchKey,string pchValue)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_SetLobbyMemberData(m_pSteamMatchmaking,steamIDLobby,pchKey,pchValue);
+}
+public override bool SendLobbyChatMsg(ulong steamIDLobby,IntPtr pvMsgBody,int cubMsgBody)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(m_pSteamMatchmaking,steamIDLobby,pvMsgBody,cubMsgBody);
+ return result;
+}
+public override int GetLobbyChatEntry(ulong steamIDLobby,int iChatID,out CSteamID pSteamIDUser,IntPtr pvData,int cubData,ref uint peChatEntryType)
+{
+ CheckIfUsable();
+ pSteamIDUser = new CSteamID();
+ peChatEntryType = 0;
+ int result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(m_pSteamMatchmaking,steamIDLobby,iChatID,ref pSteamIDUser,pvData,cubData,ref peChatEntryType);
+ return result;
+}
+public override bool RequestLobbyData(ulong steamIDLobby)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_RequestLobbyData(m_pSteamMatchmaking,steamIDLobby);
+ return result;
+}
+public override void SetLobbyGameServer(ulong steamIDLobby,uint unGameServerIP,char unGameServerPort,ulong steamIDGameServer)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmaking_SetLobbyGameServer(m_pSteamMatchmaking,steamIDLobby,unGameServerIP,unGameServerPort,steamIDGameServer);
+}
+public override bool GetLobbyGameServer(ulong steamIDLobby,ref uint punGameServerIP,ref char punGameServerPort,out CSteamID psteamIDGameServer)
+{
+ CheckIfUsable();
+ punGameServerIP = 0;
+ punGameServerPort = (char) 0;
+ psteamIDGameServer = new CSteamID();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyGameServer(m_pSteamMatchmaking,steamIDLobby,ref punGameServerIP,ref punGameServerPort,ref psteamIDGameServer);
+ return result;
+}
+public override bool SetLobbyMemberLimit(ulong steamIDLobby,int cMaxMembers)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(m_pSteamMatchmaking,steamIDLobby,cMaxMembers);
+ return result;
+}
+public override int GetLobbyMemberLimit(ulong steamIDLobby)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(m_pSteamMatchmaking,steamIDLobby);
+ return result;
+}
+public override bool SetLobbyType(ulong steamIDLobby,uint eLobbyType)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_SetLobbyType(m_pSteamMatchmaking,steamIDLobby,eLobbyType);
+ return result;
+}
+public override bool SetLobbyJoinable(ulong steamIDLobby,bool bLobbyJoinable)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_SetLobbyJoinable(m_pSteamMatchmaking,steamIDLobby,bLobbyJoinable);
+ return result;
+}
+public override ulong GetLobbyOwner(ulong steamIDLobby)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_GetLobbyOwner(m_pSteamMatchmaking,steamIDLobby);
+ return result;
+}
+public override bool SetLobbyOwner(ulong steamIDLobby,ulong steamIDNewOwner)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_SetLobbyOwner(m_pSteamMatchmaking,steamIDLobby,steamIDNewOwner);
+ return result;
+}
+public override bool SetLinkedLobby(ulong steamIDLobby,ulong steamIDLobbyDependent)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmaking_SetLinkedLobby(m_pSteamMatchmaking,steamIDLobby,steamIDLobbyDependent);
+ return result;
+}
+}
+
+
+public class CSteamMatchmakingServerListResponse : ISteamMatchmakingServerListResponse
+{
+public CSteamMatchmakingServerListResponse(IntPtr SteamMatchmakingServerListResponse)
+{
+ m_pSteamMatchmakingServerListResponse = SteamMatchmakingServerListResponse;
+}
+IntPtr m_pSteamMatchmakingServerListResponse;
+
+public override IntPtr GetIntPtr() { return m_pSteamMatchmakingServerListResponse; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamMatchmakingServerListResponse == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override void ServerResponded(uint hRequest,int iServer)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(m_pSteamMatchmakingServerListResponse,hRequest,iServer);
+}
+public override void ServerFailedToRespond(uint hRequest,int iServer)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(m_pSteamMatchmakingServerListResponse,hRequest,iServer);
+}
+public override void RefreshComplete(uint hRequest,uint response)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(m_pSteamMatchmakingServerListResponse,hRequest,response);
+}
+}
+
+
+public class CSteamMatchmakingPingResponse : ISteamMatchmakingPingResponse
+{
+public CSteamMatchmakingPingResponse(IntPtr SteamMatchmakingPingResponse)
+{
+ m_pSteamMatchmakingPingResponse = SteamMatchmakingPingResponse;
+}
+IntPtr m_pSteamMatchmakingPingResponse;
+
+public override IntPtr GetIntPtr() { return m_pSteamMatchmakingPingResponse; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamMatchmakingPingResponse == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override void ServerResponded(IntPtr server)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(m_pSteamMatchmakingPingResponse,server);
+}
+public override void ServerFailedToRespond()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(m_pSteamMatchmakingPingResponse);
+}
+}
+
+
+public class CSteamMatchmakingPlayersResponse : ISteamMatchmakingPlayersResponse
+{
+public CSteamMatchmakingPlayersResponse(IntPtr SteamMatchmakingPlayersResponse)
+{
+ m_pSteamMatchmakingPlayersResponse = SteamMatchmakingPlayersResponse;
+}
+IntPtr m_pSteamMatchmakingPlayersResponse;
+
+public override IntPtr GetIntPtr() { return m_pSteamMatchmakingPlayersResponse; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamMatchmakingPlayersResponse == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override void AddPlayerToList(string pchName,int nScore,float flTimePlayed)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(m_pSteamMatchmakingPlayersResponse,pchName,nScore,flTimePlayed);
+}
+public override void PlayersFailedToRespond()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(m_pSteamMatchmakingPlayersResponse);
+}
+public override void PlayersRefreshComplete()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(m_pSteamMatchmakingPlayersResponse);
+}
+}
+
+
+public class CSteamMatchmakingRulesResponse : ISteamMatchmakingRulesResponse
+{
+public CSteamMatchmakingRulesResponse(IntPtr SteamMatchmakingRulesResponse)
+{
+ m_pSteamMatchmakingRulesResponse = SteamMatchmakingRulesResponse;
+}
+IntPtr m_pSteamMatchmakingRulesResponse;
+
+public override IntPtr GetIntPtr() { return m_pSteamMatchmakingRulesResponse; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamMatchmakingRulesResponse == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override void RulesResponded(string pchRule,string pchValue)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(m_pSteamMatchmakingRulesResponse,pchRule,pchValue);
+}
+public override void RulesFailedToRespond()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(m_pSteamMatchmakingRulesResponse);
+}
+public override void RulesRefreshComplete()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(m_pSteamMatchmakingRulesResponse);
+}
+}
+
+
+public class CSteamMatchmakingServers : ISteamMatchmakingServers
+{
+public CSteamMatchmakingServers(IntPtr SteamMatchmakingServers)
+{
+ m_pSteamMatchmakingServers = SteamMatchmakingServers;
+}
+IntPtr m_pSteamMatchmakingServers;
+
+public override IntPtr GetIntPtr() { return m_pSteamMatchmakingServers; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamMatchmakingServers == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override uint RequestInternetServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(m_pSteamMatchmakingServers,iApp,ppchFilters,(uint) ppchFilters.Length,pRequestServersResponse.GetIntPtr());
+ return result;
+}
+public override uint RequestLANServerList(uint iApp,ISteamMatchmakingServerListResponse pRequestServersResponse)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_RequestLANServerList(m_pSteamMatchmakingServers,iApp,pRequestServersResponse.GetIntPtr());
+ return result;
+}
+public override uint RequestFriendsServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(m_pSteamMatchmakingServers,iApp,ppchFilters,(uint) ppchFilters.Length,pRequestServersResponse.GetIntPtr());
+ return result;
+}
+public override uint RequestFavoritesServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(m_pSteamMatchmakingServers,iApp,ppchFilters,(uint) ppchFilters.Length,pRequestServersResponse.GetIntPtr());
+ return result;
+}
+public override uint RequestHistoryServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(m_pSteamMatchmakingServers,iApp,ppchFilters,(uint) ppchFilters.Length,pRequestServersResponse.GetIntPtr());
+ return result;
+}
+public override uint RequestSpectatorServerList(uint iApp,IntPtr [] ppchFilters,ISteamMatchmakingServerListResponse pRequestServersResponse)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(m_pSteamMatchmakingServers,iApp,ppchFilters,(uint) ppchFilters.Length,pRequestServersResponse.GetIntPtr());
+ return result;
+}
+public override void ReleaseRequest(uint hServerListRequest)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_ReleaseRequest(m_pSteamMatchmakingServers,hServerListRequest);
+}
+public override gameserveritem_t GetServerDetails(uint hRequest,int iServer)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_GetServerDetails(m_pSteamMatchmakingServers,hRequest,iServer);
+ return (gameserveritem_t) Marshal.PtrToStructure(result, typeof(gameserveritem_t));
+}
+public override void CancelQuery(uint hRequest)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_CancelQuery(m_pSteamMatchmakingServers,hRequest);
+}
+public override void RefreshQuery(uint hRequest)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_RefreshQuery(m_pSteamMatchmakingServers,hRequest);
+}
+public override bool IsRefreshing(uint hRequest)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_IsRefreshing(m_pSteamMatchmakingServers,hRequest);
+ return result;
+}
+public override int GetServerCount(uint hRequest)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_GetServerCount(m_pSteamMatchmakingServers,hRequest);
+ return result;
+}
+public override void RefreshServer(uint hRequest,int iServer)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_RefreshServer(m_pSteamMatchmakingServers,hRequest,iServer);
+}
+public override uint PingServer(uint unIP,char usPort,ISteamMatchmakingPingResponse pRequestServersResponse)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_PingServer(m_pSteamMatchmakingServers,unIP,usPort,pRequestServersResponse.GetIntPtr());
+ return result;
+}
+public override uint PlayerDetails(uint unIP,char usPort,ISteamMatchmakingPlayersResponse pRequestServersResponse)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_PlayerDetails(m_pSteamMatchmakingServers,unIP,usPort,pRequestServersResponse.GetIntPtr());
+ return result;
+}
+public override uint ServerRules(uint unIP,char usPort,ISteamMatchmakingRulesResponse pRequestServersResponse)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_ServerRules(m_pSteamMatchmakingServers,unIP,usPort,pRequestServersResponse.GetIntPtr());
+ return result;
+}
+public override void CancelServerQuery(uint hServerQuery)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMatchmakingServers_CancelServerQuery(m_pSteamMatchmakingServers,hServerQuery);
+}
+}
+
+
+public class CSteamRemoteStorage : ISteamRemoteStorage
+{
+public CSteamRemoteStorage(IntPtr SteamRemoteStorage)
+{
+ m_pSteamRemoteStorage = SteamRemoteStorage;
+}
+IntPtr m_pSteamRemoteStorage;
+
+public override IntPtr GetIntPtr() { return m_pSteamRemoteStorage; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamRemoteStorage == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override bool FileWrite(string pchFile,IntPtr pvData,int cubData)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileWrite(m_pSteamRemoteStorage,pchFile,pvData,cubData);
+ return result;
+}
+public override int FileRead(string pchFile,IntPtr pvData,int cubDataToRead)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileRead(m_pSteamRemoteStorage,pchFile,pvData,cubDataToRead);
+ return result;
+}
+public override ulong FileWriteAsync(string pchFile,IntPtr pvData,uint cubData)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileWriteAsync(m_pSteamRemoteStorage,pchFile,pvData,cubData);
+ return result;
+}
+public override ulong FileReadAsync(string pchFile,uint nOffset,uint cubToRead)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileReadAsync(m_pSteamRemoteStorage,pchFile,nOffset,cubToRead);
+ return result;
+}
+public override bool FileReadAsyncComplete(ulong hReadCall,IntPtr pvBuffer,uint cubToRead)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileReadAsyncComplete(m_pSteamRemoteStorage,hReadCall,pvBuffer,cubToRead);
+ return result;
+}
+public override bool FileForget(string pchFile)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileForget(m_pSteamRemoteStorage,pchFile);
+ return result;
+}
+public override bool FileDelete(string pchFile)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileDelete(m_pSteamRemoteStorage,pchFile);
+ return result;
+}
+public override ulong FileShare(string pchFile)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileShare(m_pSteamRemoteStorage,pchFile);
+ return result;
+}
+public override bool SetSyncPlatforms(string pchFile,uint eRemoteStoragePlatform)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(m_pSteamRemoteStorage,pchFile,eRemoteStoragePlatform);
+ return result;
+}
+public override ulong FileWriteStreamOpen(string pchFile)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(m_pSteamRemoteStorage,pchFile);
+ return result;
+}
+public override bool FileWriteStreamWriteChunk(ulong writeHandle,IntPtr pvData,int cubData)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(m_pSteamRemoteStorage,writeHandle,pvData,cubData);
+ return result;
+}
+public override bool FileWriteStreamClose(ulong writeHandle)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(m_pSteamRemoteStorage,writeHandle);
+ return result;
+}
+public override bool FileWriteStreamCancel(ulong writeHandle)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(m_pSteamRemoteStorage,writeHandle);
+ return result;
+}
+public override bool FileExists(string pchFile)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FileExists(m_pSteamRemoteStorage,pchFile);
+ return result;
+}
+public override bool FilePersisted(string pchFile)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_FilePersisted(m_pSteamRemoteStorage,pchFile);
+ return result;
+}
+public override int GetFileSize(string pchFile)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetFileSize(m_pSteamRemoteStorage,pchFile);
+ return result;
+}
+public override long GetFileTimestamp(string pchFile)
+{
+ CheckIfUsable();
+ long result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetFileTimestamp(m_pSteamRemoteStorage,pchFile);
+ return result;
+}
+public override uint GetSyncPlatforms(string pchFile)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(m_pSteamRemoteStorage,pchFile);
+ return result;
+}
+public override int GetFileCount()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetFileCount(m_pSteamRemoteStorage);
+ return result;
+}
+public override string GetFileNameAndSize(int iFile,ref int pnFileSizeInBytes)
+{
+ CheckIfUsable();
+ pnFileSizeInBytes = 0;
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(m_pSteamRemoteStorage,iFile,ref pnFileSizeInBytes);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override bool GetQuota(ref ulong pnTotalBytes,ref ulong puAvailableBytes)
+{
+ CheckIfUsable();
+ pnTotalBytes = 0;
+ puAvailableBytes = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetQuota(m_pSteamRemoteStorage,ref pnTotalBytes,ref puAvailableBytes);
+ return result;
+}
+public override bool IsCloudEnabledForAccount()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(m_pSteamRemoteStorage);
+ return result;
+}
+public override bool IsCloudEnabledForApp()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(m_pSteamRemoteStorage);
+ return result;
+}
+public override void SetCloudEnabledForApp(bool bEnabled)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(m_pSteamRemoteStorage,bEnabled);
+}
+public override ulong UGCDownload(ulong hContent,uint unPriority)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UGCDownload(m_pSteamRemoteStorage,hContent,unPriority);
+ return result;
+}
+public override bool GetUGCDownloadProgress(ulong hContent,ref int pnBytesDownloaded,ref int pnBytesExpected)
+{
+ CheckIfUsable();
+ pnBytesDownloaded = 0;
+ pnBytesExpected = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(m_pSteamRemoteStorage,hContent,ref pnBytesDownloaded,ref pnBytesExpected);
+ return result;
+}
+public override bool GetUGCDetails(ulong hContent,ref uint pnAppID,System.Text.StringBuilder ppchName,ref int pnFileSizeInBytes,out CSteamID pSteamIDOwner)
+{
+ CheckIfUsable();
+ pnAppID = 0;
+ pnFileSizeInBytes = 0;
+ pSteamIDOwner = new CSteamID();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetUGCDetails(m_pSteamRemoteStorage,hContent,ref pnAppID,ppchName,ref pnFileSizeInBytes,ref pSteamIDOwner);
+ return result;
+}
+public override int UGCRead(ulong hContent,IntPtr pvData,int cubDataToRead,uint cOffset,uint eAction)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UGCRead(m_pSteamRemoteStorage,hContent,pvData,cubDataToRead,cOffset,eAction);
+ return result;
+}
+public override int GetCachedUGCCount()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(m_pSteamRemoteStorage);
+ return result;
+}
+public override ulong GetCachedUGCHandle(int iCachedContent)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(m_pSteamRemoteStorage,iCachedContent);
+ return result;
+}
+public override ulong PublishWorkshopFile(string pchFile,string pchPreviewFile,uint nConsumerAppId,string pchTitle,string pchDescription,uint eVisibility,ref SteamParamStringArray_t pTags,uint eWorkshopFileType)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(m_pSteamRemoteStorage,pchFile,pchPreviewFile,nConsumerAppId,pchTitle,pchDescription,eVisibility,ref pTags,eWorkshopFileType);
+ return result;
+}
+public override ulong CreatePublishedFileUpdateRequest(ulong unPublishedFileId)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(m_pSteamRemoteStorage,unPublishedFileId);
+ return result;
+}
+public override bool UpdatePublishedFileFile(ulong updateHandle,string pchFile)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(m_pSteamRemoteStorage,updateHandle,pchFile);
+ return result;
+}
+public override bool UpdatePublishedFilePreviewFile(ulong updateHandle,string pchPreviewFile)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(m_pSteamRemoteStorage,updateHandle,pchPreviewFile);
+ return result;
+}
+public override bool UpdatePublishedFileTitle(ulong updateHandle,string pchTitle)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(m_pSteamRemoteStorage,updateHandle,pchTitle);
+ return result;
+}
+public override bool UpdatePublishedFileDescription(ulong updateHandle,string pchDescription)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(m_pSteamRemoteStorage,updateHandle,pchDescription);
+ return result;
+}
+public override bool UpdatePublishedFileVisibility(ulong updateHandle,uint eVisibility)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(m_pSteamRemoteStorage,updateHandle,eVisibility);
+ return result;
+}
+public override bool UpdatePublishedFileTags(ulong updateHandle,ref SteamParamStringArray_t pTags)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(m_pSteamRemoteStorage,updateHandle,ref pTags);
+ return result;
+}
+public override ulong CommitPublishedFileUpdate(ulong updateHandle)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(m_pSteamRemoteStorage,updateHandle);
+ return result;
+}
+public override ulong GetPublishedFileDetails(ulong unPublishedFileId,uint unMaxSecondsOld)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(m_pSteamRemoteStorage,unPublishedFileId,unMaxSecondsOld);
+ return result;
+}
+public override ulong DeletePublishedFile(ulong unPublishedFileId)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_DeletePublishedFile(m_pSteamRemoteStorage,unPublishedFileId);
+ return result;
+}
+public override ulong EnumerateUserPublishedFiles(uint unStartIndex)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(m_pSteamRemoteStorage,unStartIndex);
+ return result;
+}
+public override ulong SubscribePublishedFile(ulong unPublishedFileId)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(m_pSteamRemoteStorage,unPublishedFileId);
+ return result;
+}
+public override ulong EnumerateUserSubscribedFiles(uint unStartIndex)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(m_pSteamRemoteStorage,unStartIndex);
+ return result;
+}
+public override ulong UnsubscribePublishedFile(ulong unPublishedFileId)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(m_pSteamRemoteStorage,unPublishedFileId);
+ return result;
+}
+public override bool UpdatePublishedFileSetChangeDescription(ulong updateHandle,string pchChangeDescription)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(m_pSteamRemoteStorage,updateHandle,pchChangeDescription);
+ return result;
+}
+public override ulong GetPublishedItemVoteDetails(ulong unPublishedFileId)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(m_pSteamRemoteStorage,unPublishedFileId);
+ return result;
+}
+public override ulong UpdateUserPublishedItemVote(ulong unPublishedFileId,bool bVoteUp)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(m_pSteamRemoteStorage,unPublishedFileId,bVoteUp);
+ return result;
+}
+public override ulong GetUserPublishedItemVoteDetails(ulong unPublishedFileId)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(m_pSteamRemoteStorage,unPublishedFileId);
+ return result;
+}
+public override ulong EnumerateUserSharedWorkshopFiles(ulong steamId,uint unStartIndex,ref SteamParamStringArray_t pRequiredTags,ref SteamParamStringArray_t pExcludedTags)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(m_pSteamRemoteStorage,steamId,unStartIndex,ref pRequiredTags,ref pExcludedTags);
+ return result;
+}
+public override ulong PublishVideo(uint eVideoProvider,string pchVideoAccount,string pchVideoIdentifier,string pchPreviewFile,uint nConsumerAppId,string pchTitle,string pchDescription,uint eVisibility,ref SteamParamStringArray_t pTags)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_PublishVideo(m_pSteamRemoteStorage,eVideoProvider,pchVideoAccount,pchVideoIdentifier,pchPreviewFile,nConsumerAppId,pchTitle,pchDescription,eVisibility,ref pTags);
+ return result;
+}
+public override ulong SetUserPublishedFileAction(ulong unPublishedFileId,uint eAction)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(m_pSteamRemoteStorage,unPublishedFileId,eAction);
+ return result;
+}
+public override ulong EnumeratePublishedFilesByUserAction(uint eAction,uint unStartIndex)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(m_pSteamRemoteStorage,eAction,unStartIndex);
+ return result;
+}
+public override ulong EnumeratePublishedWorkshopFiles(uint eEnumerationType,uint unStartIndex,uint unCount,uint unDays,ref SteamParamStringArray_t pTags,ref SteamParamStringArray_t pUserTags)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(m_pSteamRemoteStorage,eEnumerationType,unStartIndex,unCount,unDays,ref pTags,ref pUserTags);
+ return result;
+}
+public override ulong UGCDownloadToLocation(ulong hContent,string pchLocation,uint unPriority)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(m_pSteamRemoteStorage,hContent,pchLocation,unPriority);
+ return result;
+}
+}
+
+
+public class CSteamUserStats : ISteamUserStats
+{
+public CSteamUserStats(IntPtr SteamUserStats)
+{
+ m_pSteamUserStats = SteamUserStats;
+}
+IntPtr m_pSteamUserStats;
+
+public override IntPtr GetIntPtr() { return m_pSteamUserStats; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamUserStats == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override bool RequestCurrentStats()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_RequestCurrentStats(m_pSteamUserStats);
+ return result;
+}
+public override bool GetStat(string pchName,ref int pData)
+{
+ CheckIfUsable();
+ pData = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetStat(m_pSteamUserStats,pchName,ref pData);
+ return result;
+}
+public override bool GetStat0(string pchName,ref float pData)
+{
+ CheckIfUsable();
+ pData = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetStat0(m_pSteamUserStats,pchName,ref pData);
+ return result;
+}
+public override bool SetStat(string pchName,int nData)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_SetStat(m_pSteamUserStats,pchName,nData);
+ return result;
+}
+public override bool SetStat0(string pchName,float fData)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_SetStat0(m_pSteamUserStats,pchName,fData);
+ return result;
+}
+public override bool UpdateAvgRateStat(string pchName,float flCountThisSession,double dSessionLength)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_UpdateAvgRateStat(m_pSteamUserStats,pchName,flCountThisSession,dSessionLength);
+ return result;
+}
+public override bool GetAchievement(string pchName,ref bool pbAchieved)
+{
+ CheckIfUsable();
+ pbAchieved = false;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetAchievement(m_pSteamUserStats,pchName,ref pbAchieved);
+ return result;
+}
+public override bool SetAchievement(string pchName)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_SetAchievement(m_pSteamUserStats,pchName);
+ return result;
+}
+public override bool ClearAchievement(string pchName)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_ClearAchievement(m_pSteamUserStats,pchName);
+ return result;
+}
+public override bool GetAchievementAndUnlockTime(string pchName,ref bool pbAchieved,ref uint punUnlockTime)
+{
+ CheckIfUsable();
+ pbAchieved = false;
+ punUnlockTime = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(m_pSteamUserStats,pchName,ref pbAchieved,ref punUnlockTime);
+ return result;
+}
+public override bool StoreStats()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_StoreStats(m_pSteamUserStats);
+ return result;
+}
+public override int GetAchievementIcon(string pchName)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetAchievementIcon(m_pSteamUserStats,pchName);
+ return result;
+}
+public override string GetAchievementDisplayAttribute(string pchName,string pchKey)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(m_pSteamUserStats,pchName,pchKey);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override bool IndicateAchievementProgress(string pchName,uint nCurProgress,uint nMaxProgress)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_IndicateAchievementProgress(m_pSteamUserStats,pchName,nCurProgress,nMaxProgress);
+ return result;
+}
+public override uint GetNumAchievements()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetNumAchievements(m_pSteamUserStats);
+ return result;
+}
+public override string GetAchievementName(uint iAchievement)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetAchievementName(m_pSteamUserStats,iAchievement);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override ulong RequestUserStats(ulong steamIDUser)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_RequestUserStats(m_pSteamUserStats,steamIDUser);
+ return result;
+}
+public override bool GetUserStat(ulong steamIDUser,string pchName,ref int pData)
+{
+ CheckIfUsable();
+ pData = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetUserStat(m_pSteamUserStats,steamIDUser,pchName,ref pData);
+ return result;
+}
+public override bool GetUserStat0(ulong steamIDUser,string pchName,ref float pData)
+{
+ CheckIfUsable();
+ pData = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetUserStat0(m_pSteamUserStats,steamIDUser,pchName,ref pData);
+ return result;
+}
+public override bool GetUserAchievement(ulong steamIDUser,string pchName,ref bool pbAchieved)
+{
+ CheckIfUsable();
+ pbAchieved = false;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetUserAchievement(m_pSteamUserStats,steamIDUser,pchName,ref pbAchieved);
+ return result;
+}
+public override bool GetUserAchievementAndUnlockTime(ulong steamIDUser,string pchName,ref bool pbAchieved,ref uint punUnlockTime)
+{
+ CheckIfUsable();
+ pbAchieved = false;
+ punUnlockTime = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(m_pSteamUserStats,steamIDUser,pchName,ref pbAchieved,ref punUnlockTime);
+ return result;
+}
+public override bool ResetAllStats(bool bAchievementsToo)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_ResetAllStats(m_pSteamUserStats,bAchievementsToo);
+ return result;
+}
+public override ulong FindOrCreateLeaderboard(string pchLeaderboardName,uint eLeaderboardSortMethod,uint eLeaderboardDisplayType)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(m_pSteamUserStats,pchLeaderboardName,eLeaderboardSortMethod,eLeaderboardDisplayType);
+ return result;
+}
+public override ulong FindLeaderboard(string pchLeaderboardName)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_FindLeaderboard(m_pSteamUserStats,pchLeaderboardName);
+ return result;
+}
+public override string GetLeaderboardName(ulong hSteamLeaderboard)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetLeaderboardName(m_pSteamUserStats,hSteamLeaderboard);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override int GetLeaderboardEntryCount(ulong hSteamLeaderboard)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(m_pSteamUserStats,hSteamLeaderboard);
+ return result;
+}
+public override uint GetLeaderboardSortMethod(ulong hSteamLeaderboard)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(m_pSteamUserStats,hSteamLeaderboard);
+ return result;
+}
+public override uint GetLeaderboardDisplayType(ulong hSteamLeaderboard)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(m_pSteamUserStats,hSteamLeaderboard);
+ return result;
+}
+public override ulong DownloadLeaderboardEntries(ulong hSteamLeaderboard,uint eLeaderboardDataRequest,int nRangeStart,int nRangeEnd)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(m_pSteamUserStats,hSteamLeaderboard,eLeaderboardDataRequest,nRangeStart,nRangeEnd);
+ return result;
+}
+public override ulong DownloadLeaderboardEntriesForUsers(ulong hSteamLeaderboard,CSteamID [] prgUsers)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(m_pSteamUserStats,hSteamLeaderboard,prgUsers,(int) prgUsers.Length);
+ return result;
+}
+public override bool GetDownloadedLeaderboardEntry(ulong hSteamLeaderboardEntries,int index,ref LeaderboardEntry_t pLeaderboardEntry,ref int pDetails,int cDetailsMax)
+{
+ CheckIfUsable();
+ pDetails = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(m_pSteamUserStats,hSteamLeaderboardEntries,index,ref pLeaderboardEntry,ref pDetails,cDetailsMax);
+ return result;
+}
+public override ulong UploadLeaderboardScore(ulong hSteamLeaderboard,uint eLeaderboardUploadScoreMethod,int nScore,ref int pScoreDetails,int cScoreDetailsCount)
+{
+ CheckIfUsable();
+ pScoreDetails = 0;
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_UploadLeaderboardScore(m_pSteamUserStats,hSteamLeaderboard,eLeaderboardUploadScoreMethod,nScore,ref pScoreDetails,cScoreDetailsCount);
+ return result;
+}
+public override ulong AttachLeaderboardUGC(ulong hSteamLeaderboard,ulong hUGC)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_AttachLeaderboardUGC(m_pSteamUserStats,hSteamLeaderboard,hUGC);
+ return result;
+}
+public override ulong GetNumberOfCurrentPlayers()
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(m_pSteamUserStats);
+ return result;
+}
+public override ulong RequestGlobalAchievementPercentages()
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(m_pSteamUserStats);
+ return result;
+}
+public override int GetMostAchievedAchievementInfo(string pchName,uint unNameBufLen,ref float pflPercent,ref bool pbAchieved)
+{
+ CheckIfUsable();
+ pflPercent = 0;
+ pbAchieved = false;
+ int result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(m_pSteamUserStats,pchName,unNameBufLen,ref pflPercent,ref pbAchieved);
+ return result;
+}
+public override int GetNextMostAchievedAchievementInfo(int iIteratorPrevious,string pchName,uint unNameBufLen,ref float pflPercent,ref bool pbAchieved)
+{
+ CheckIfUsable();
+ pflPercent = 0;
+ pbAchieved = false;
+ int result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(m_pSteamUserStats,iIteratorPrevious,pchName,unNameBufLen,ref pflPercent,ref pbAchieved);
+ return result;
+}
+public override bool GetAchievementAchievedPercent(string pchName,ref float pflPercent)
+{
+ CheckIfUsable();
+ pflPercent = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(m_pSteamUserStats,pchName,ref pflPercent);
+ return result;
+}
+public override ulong RequestGlobalStats(int nHistoryDays)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUserStats_RequestGlobalStats(m_pSteamUserStats,nHistoryDays);
+ return result;
+}
+public override bool GetGlobalStat(string pchStatName,ref long pData)
+{
+ CheckIfUsable();
+ pData = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetGlobalStat(m_pSteamUserStats,pchStatName,ref pData);
+ return result;
+}
+public override bool GetGlobalStat0(string pchStatName,ref double pData)
+{
+ CheckIfUsable();
+ pData = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetGlobalStat0(m_pSteamUserStats,pchStatName,ref pData);
+ return result;
+}
+public override int GetGlobalStatHistory(string pchStatName,long [] pData)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetGlobalStatHistory(m_pSteamUserStats,pchStatName,pData,(uint) pData.Length);
+ return result;
+}
+public override int GetGlobalStatHistory0(string pchStatName,double [] pData)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamUserStats_GetGlobalStatHistory0(m_pSteamUserStats,pchStatName,pData,(uint) pData.Length);
+ return result;
+}
+}
+
+
+public class CSteamApps : ISteamApps
+{
+public CSteamApps(IntPtr SteamApps)
+{
+ m_pSteamApps = SteamApps;
+}
+IntPtr m_pSteamApps;
+
+public override IntPtr GetIntPtr() { return m_pSteamApps; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamApps == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override bool BIsSubscribed()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_BIsSubscribed(m_pSteamApps);
+ return result;
+}
+public override bool BIsLowViolence()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_BIsLowViolence(m_pSteamApps);
+ return result;
+}
+public override bool BIsCybercafe()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_BIsCybercafe(m_pSteamApps);
+ return result;
+}
+public override bool BIsVACBanned()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_BIsVACBanned(m_pSteamApps);
+ return result;
+}
+public override string GetCurrentGameLanguage()
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamApps_GetCurrentGameLanguage(m_pSteamApps);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override string GetAvailableGameLanguages()
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamApps_GetAvailableGameLanguages(m_pSteamApps);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override bool BIsSubscribedApp(uint appID)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_BIsSubscribedApp(m_pSteamApps,appID);
+ return result;
+}
+public override bool BIsDlcInstalled(uint appID)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_BIsDlcInstalled(m_pSteamApps,appID);
+ return result;
+}
+public override uint GetEarliestPurchaseUnixTime(uint nAppID)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(m_pSteamApps,nAppID);
+ return result;
+}
+public override bool BIsSubscribedFromFreeWeekend()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(m_pSteamApps);
+ return result;
+}
+public override int GetDLCCount()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamApps_GetDLCCount(m_pSteamApps);
+ return result;
+}
+public override bool BGetDLCDataByIndex(int iDLC,ref uint pAppID,ref bool pbAvailable,string pchName,int cchNameBufferSize)
+{
+ CheckIfUsable();
+ pAppID = 0;
+ pbAvailable = false;
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_BGetDLCDataByIndex(m_pSteamApps,iDLC,ref pAppID,ref pbAvailable,pchName,cchNameBufferSize);
+ return result;
+}
+public override void InstallDLC(uint nAppID)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamApps_InstallDLC(m_pSteamApps,nAppID);
+}
+public override void UninstallDLC(uint nAppID)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamApps_UninstallDLC(m_pSteamApps,nAppID);
+}
+public override void RequestAppProofOfPurchaseKey(uint nAppID)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(m_pSteamApps,nAppID);
+}
+public override bool GetCurrentBetaName(string pchName,int cchNameBufferSize)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_GetCurrentBetaName(m_pSteamApps,pchName,cchNameBufferSize);
+ return result;
+}
+public override bool MarkContentCorrupt(bool bMissingFilesOnly)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_MarkContentCorrupt(m_pSteamApps,bMissingFilesOnly);
+ return result;
+}
+public override uint GetInstalledDepots(uint appID,ref uint pvecDepots,uint cMaxDepots)
+{
+ CheckIfUsable();
+ pvecDepots = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamApps_GetInstalledDepots(m_pSteamApps,appID,ref pvecDepots,cMaxDepots);
+ return result;
+}
+public override uint GetAppInstallDir(uint appID,string pchFolder,uint cchFolderBufferSize)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamApps_GetAppInstallDir(m_pSteamApps,appID,pchFolder,cchFolderBufferSize);
+ return result;
+}
+public override bool BIsAppInstalled(uint appID)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_BIsAppInstalled(m_pSteamApps,appID);
+ return result;
+}
+public override ulong GetAppOwner()
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamApps_GetAppOwner(m_pSteamApps);
+ return result;
+}
+public override string GetLaunchQueryParam(string pchKey)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamApps_GetLaunchQueryParam(m_pSteamApps,pchKey);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override bool GetDlcDownloadProgress(uint nAppID,ref ulong punBytesDownloaded,ref ulong punBytesTotal)
+{
+ CheckIfUsable();
+ punBytesDownloaded = 0;
+ punBytesTotal = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamApps_GetDlcDownloadProgress(m_pSteamApps,nAppID,ref punBytesDownloaded,ref punBytesTotal);
+ return result;
+}
+public override int GetAppBuildId()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamApps_GetAppBuildId(m_pSteamApps);
+ return result;
+}
+public override void RequestAllProofOfPurchaseKeys()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamApps_RequestAllProofOfPurchaseKeys(m_pSteamApps);
+}
+public override ulong GetFileDetails(string pszFileName)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamApps_GetFileDetails(m_pSteamApps,pszFileName);
+ return result;
+}
+}
+
+
+public class CSteamNetworking : ISteamNetworking
+{
+public CSteamNetworking(IntPtr SteamNetworking)
+{
+ m_pSteamNetworking = SteamNetworking;
+}
+IntPtr m_pSteamNetworking;
+
+public override IntPtr GetIntPtr() { return m_pSteamNetworking; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamNetworking == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override bool SendP2PPacket(ulong steamIDRemote,IntPtr pubData,uint cubData,uint eP2PSendType,int nChannel)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_SendP2PPacket(m_pSteamNetworking,steamIDRemote,pubData,cubData,eP2PSendType,nChannel);
+ return result;
+}
+public override bool IsP2PPacketAvailable(ref uint pcubMsgSize,int nChannel)
+{
+ CheckIfUsable();
+ pcubMsgSize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_IsP2PPacketAvailable(m_pSteamNetworking,ref pcubMsgSize,nChannel);
+ return result;
+}
+public override bool ReadP2PPacket(IntPtr pubDest,uint cubDest,ref uint pcubMsgSize,ref CSteamID psteamIDRemote,int nChannel)
+{
+ CheckIfUsable();
+ pcubMsgSize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_ReadP2PPacket(m_pSteamNetworking,pubDest,cubDest,ref pcubMsgSize,ref psteamIDRemote,nChannel);
+ return result;
+}
+public override bool AcceptP2PSessionWithUser(ulong steamIDRemote)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(m_pSteamNetworking,steamIDRemote);
+ return result;
+}
+public override bool CloseP2PSessionWithUser(ulong steamIDRemote)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(m_pSteamNetworking,steamIDRemote);
+ return result;
+}
+public override bool CloseP2PChannelWithUser(ulong steamIDRemote,int nChannel)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(m_pSteamNetworking,steamIDRemote,nChannel);
+ return result;
+}
+public override bool GetP2PSessionState(ulong steamIDRemote,ref P2PSessionState_t pConnectionState)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_GetP2PSessionState(m_pSteamNetworking,steamIDRemote,ref pConnectionState);
+ return result;
+}
+public override bool AllowP2PPacketRelay(bool bAllow)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_AllowP2PPacketRelay(m_pSteamNetworking,bAllow);
+ return result;
+}
+public override uint CreateListenSocket(int nVirtualP2PPort,uint nIP,char nPort,bool bAllowUseOfPacketRelay)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamNetworking_CreateListenSocket(m_pSteamNetworking,nVirtualP2PPort,nIP,nPort,bAllowUseOfPacketRelay);
+ return result;
+}
+public override uint CreateP2PConnectionSocket(ulong steamIDTarget,int nVirtualPort,int nTimeoutSec,bool bAllowUseOfPacketRelay)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(m_pSteamNetworking,steamIDTarget,nVirtualPort,nTimeoutSec,bAllowUseOfPacketRelay);
+ return result;
+}
+public override uint CreateConnectionSocket(uint nIP,char nPort,int nTimeoutSec)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamNetworking_CreateConnectionSocket(m_pSteamNetworking,nIP,nPort,nTimeoutSec);
+ return result;
+}
+public override bool DestroySocket(uint hSocket,bool bNotifyRemoteEnd)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_DestroySocket(m_pSteamNetworking,hSocket,bNotifyRemoteEnd);
+ return result;
+}
+public override bool DestroyListenSocket(uint hSocket,bool bNotifyRemoteEnd)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_DestroyListenSocket(m_pSteamNetworking,hSocket,bNotifyRemoteEnd);
+ return result;
+}
+public override bool SendDataOnSocket(uint hSocket,IntPtr pubData,uint cubData,bool bReliable)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_SendDataOnSocket(m_pSteamNetworking,hSocket,pubData,cubData,bReliable);
+ return result;
+}
+public override bool IsDataAvailableOnSocket(uint hSocket,ref uint pcubMsgSize)
+{
+ CheckIfUsable();
+ pcubMsgSize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(m_pSteamNetworking,hSocket,ref pcubMsgSize);
+ return result;
+}
+public override bool RetrieveDataFromSocket(uint hSocket,IntPtr pubDest,uint cubDest,ref uint pcubMsgSize)
+{
+ CheckIfUsable();
+ pcubMsgSize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_RetrieveDataFromSocket(m_pSteamNetworking,hSocket,pubDest,cubDest,ref pcubMsgSize);
+ return result;
+}
+public override bool IsDataAvailable(uint hListenSocket,ref uint pcubMsgSize,ref uint phSocket)
+{
+ CheckIfUsable();
+ pcubMsgSize = 0;
+ phSocket = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_IsDataAvailable(m_pSteamNetworking,hListenSocket,ref pcubMsgSize,ref phSocket);
+ return result;
+}
+public override bool RetrieveData(uint hListenSocket,IntPtr pubDest,uint cubDest,ref uint pcubMsgSize,ref uint phSocket)
+{
+ CheckIfUsable();
+ pcubMsgSize = 0;
+ phSocket = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_RetrieveData(m_pSteamNetworking,hListenSocket,pubDest,cubDest,ref pcubMsgSize,ref phSocket);
+ return result;
+}
+public override bool GetSocketInfo(uint hSocket,ref CSteamID pSteamIDRemote,ref int peSocketStatus,ref uint punIPRemote,ref char punPortRemote)
+{
+ CheckIfUsable();
+ peSocketStatus = 0;
+ punIPRemote = 0;
+ punPortRemote = (char) 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_GetSocketInfo(m_pSteamNetworking,hSocket,ref pSteamIDRemote,ref peSocketStatus,ref punIPRemote,ref punPortRemote);
+ return result;
+}
+public override bool GetListenSocketInfo(uint hListenSocket,ref uint pnIP,ref char pnPort)
+{
+ CheckIfUsable();
+ pnIP = 0;
+ pnPort = (char) 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamNetworking_GetListenSocketInfo(m_pSteamNetworking,hListenSocket,ref pnIP,ref pnPort);
+ return result;
+}
+public override uint GetSocketConnectionType(uint hSocket)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamNetworking_GetSocketConnectionType(m_pSteamNetworking,hSocket);
+ return result;
+}
+public override int GetMaxPacketSize(uint hSocket)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamNetworking_GetMaxPacketSize(m_pSteamNetworking,hSocket);
+ return result;
+}
+}
+
+
+public class CSteamScreenshots : ISteamScreenshots
+{
+public CSteamScreenshots(IntPtr SteamScreenshots)
+{
+ m_pSteamScreenshots = SteamScreenshots;
+}
+IntPtr m_pSteamScreenshots;
+
+public override IntPtr GetIntPtr() { return m_pSteamScreenshots; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamScreenshots == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override uint WriteScreenshot(IntPtr pubRGB,uint cubRGB,int nWidth,int nHeight)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamScreenshots_WriteScreenshot(m_pSteamScreenshots,pubRGB,cubRGB,nWidth,nHeight);
+ return result;
+}
+public override uint AddScreenshotToLibrary(string pchFilename,string pchThumbnailFilename,int nWidth,int nHeight)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(m_pSteamScreenshots,pchFilename,pchThumbnailFilename,nWidth,nHeight);
+ return result;
+}
+public override void TriggerScreenshot()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamScreenshots_TriggerScreenshot(m_pSteamScreenshots);
+}
+public override void HookScreenshots(bool bHook)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamScreenshots_HookScreenshots(m_pSteamScreenshots,bHook);
+}
+public override bool SetLocation(uint hScreenshot,string pchLocation)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamScreenshots_SetLocation(m_pSteamScreenshots,hScreenshot,pchLocation);
+ return result;
+}
+public override bool TagUser(uint hScreenshot,ulong steamID)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamScreenshots_TagUser(m_pSteamScreenshots,hScreenshot,steamID);
+ return result;
+}
+public override bool TagPublishedFile(uint hScreenshot,ulong unPublishedFileID)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamScreenshots_TagPublishedFile(m_pSteamScreenshots,hScreenshot,unPublishedFileID);
+ return result;
+}
+public override bool IsScreenshotsHooked()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamScreenshots_IsScreenshotsHooked(m_pSteamScreenshots);
+ return result;
+}
+public override uint AddVRScreenshotToLibrary(uint eType,string pchFilename,string pchVRFilename)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamScreenshots_AddVRScreenshotToLibrary(m_pSteamScreenshots,eType,pchFilename,pchVRFilename);
+ return result;
+}
+}
+
+
+public class CSteamMusic : ISteamMusic
+{
+public CSteamMusic(IntPtr SteamMusic)
+{
+ m_pSteamMusic = SteamMusic;
+}
+IntPtr m_pSteamMusic;
+
+public override IntPtr GetIntPtr() { return m_pSteamMusic; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamMusic == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override bool BIsEnabled()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusic_BIsEnabled(m_pSteamMusic);
+ return result;
+}
+public override bool BIsPlaying()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusic_BIsPlaying(m_pSteamMusic);
+ return result;
+}
+public override int GetPlaybackStatus()
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamMusic_GetPlaybackStatus(m_pSteamMusic);
+ return result;
+}
+public override void Play()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMusic_Play(m_pSteamMusic);
+}
+public override void Pause()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMusic_Pause(m_pSteamMusic);
+}
+public override void PlayPrevious()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMusic_PlayPrevious(m_pSteamMusic);
+}
+public override void PlayNext()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMusic_PlayNext(m_pSteamMusic);
+}
+public override void SetVolume(float flVolume)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamMusic_SetVolume(m_pSteamMusic,flVolume);
+}
+public override float GetVolume()
+{
+ CheckIfUsable();
+ float result = NativeEntrypoints.SteamAPI_ISteamMusic_GetVolume(m_pSteamMusic);
+ return result;
+}
+}
+
+
+public class CSteamMusicRemote : ISteamMusicRemote
+{
+public CSteamMusicRemote(IntPtr SteamMusicRemote)
+{
+ m_pSteamMusicRemote = SteamMusicRemote;
+}
+IntPtr m_pSteamMusicRemote;
+
+public override IntPtr GetIntPtr() { return m_pSteamMusicRemote; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamMusicRemote == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override bool RegisterSteamMusicRemote(string pchName)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(m_pSteamMusicRemote,pchName);
+ return result;
+}
+public override bool DeregisterSteamMusicRemote()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(m_pSteamMusicRemote);
+ return result;
+}
+public override bool BIsCurrentMusicRemote()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(m_pSteamMusicRemote);
+ return result;
+}
+public override bool BActivationSuccess(bool bValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_BActivationSuccess(m_pSteamMusicRemote,bValue);
+ return result;
+}
+public override bool SetDisplayName(string pchDisplayName)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_SetDisplayName(m_pSteamMusicRemote,pchDisplayName);
+ return result;
+}
+public override bool SetPNGIcon_64x64(IntPtr pvBuffer,uint cbBufferLength)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(m_pSteamMusicRemote,pvBuffer,cbBufferLength);
+ return result;
+}
+public override bool EnablePlayPrevious(bool bValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_EnablePlayPrevious(m_pSteamMusicRemote,bValue);
+ return result;
+}
+public override bool EnablePlayNext(bool bValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_EnablePlayNext(m_pSteamMusicRemote,bValue);
+ return result;
+}
+public override bool EnableShuffled(bool bValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_EnableShuffled(m_pSteamMusicRemote,bValue);
+ return result;
+}
+public override bool EnableLooped(bool bValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_EnableLooped(m_pSteamMusicRemote,bValue);
+ return result;
+}
+public override bool EnableQueue(bool bValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_EnableQueue(m_pSteamMusicRemote,bValue);
+ return result;
+}
+public override bool EnablePlaylists(bool bValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_EnablePlaylists(m_pSteamMusicRemote,bValue);
+ return result;
+}
+public override bool UpdatePlaybackStatus(int nStatus)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(m_pSteamMusicRemote,nStatus);
+ return result;
+}
+public override bool UpdateShuffled(bool bValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_UpdateShuffled(m_pSteamMusicRemote,bValue);
+ return result;
+}
+public override bool UpdateLooped(bool bValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_UpdateLooped(m_pSteamMusicRemote,bValue);
+ return result;
+}
+public override bool UpdateVolume(float flValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_UpdateVolume(m_pSteamMusicRemote,flValue);
+ return result;
+}
+public override bool CurrentEntryWillChange()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(m_pSteamMusicRemote);
+ return result;
+}
+public override bool CurrentEntryIsAvailable(bool bAvailable)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(m_pSteamMusicRemote,bAvailable);
+ return result;
+}
+public override bool UpdateCurrentEntryText(string pchText)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(m_pSteamMusicRemote,pchText);
+ return result;
+}
+public override bool UpdateCurrentEntryElapsedSeconds(int nValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(m_pSteamMusicRemote,nValue);
+ return result;
+}
+public override bool UpdateCurrentEntryCoverArt(IntPtr pvBuffer,uint cbBufferLength)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(m_pSteamMusicRemote,pvBuffer,cbBufferLength);
+ return result;
+}
+public override bool CurrentEntryDidChange()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(m_pSteamMusicRemote);
+ return result;
+}
+public override bool QueueWillChange()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_QueueWillChange(m_pSteamMusicRemote);
+ return result;
+}
+public override bool ResetQueueEntries()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_ResetQueueEntries(m_pSteamMusicRemote);
+ return result;
+}
+public override bool SetQueueEntry(int nID,int nPosition,string pchEntryText)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_SetQueueEntry(m_pSteamMusicRemote,nID,nPosition,pchEntryText);
+ return result;
+}
+public override bool SetCurrentQueueEntry(int nID)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(m_pSteamMusicRemote,nID);
+ return result;
+}
+public override bool QueueDidChange()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_QueueDidChange(m_pSteamMusicRemote);
+ return result;
+}
+public override bool PlaylistWillChange()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_PlaylistWillChange(m_pSteamMusicRemote);
+ return result;
+}
+public override bool ResetPlaylistEntries()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(m_pSteamMusicRemote);
+ return result;
+}
+public override bool SetPlaylistEntry(int nID,int nPosition,string pchEntryText)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_SetPlaylistEntry(m_pSteamMusicRemote,nID,nPosition,pchEntryText);
+ return result;
+}
+public override bool SetCurrentPlaylistEntry(int nID)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(m_pSteamMusicRemote,nID);
+ return result;
+}
+public override bool PlaylistDidChange()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamMusicRemote_PlaylistDidChange(m_pSteamMusicRemote);
+ return result;
+}
+}
+
+
+public class CSteamHTTP : ISteamHTTP
+{
+public CSteamHTTP(IntPtr SteamHTTP)
+{
+ m_pSteamHTTP = SteamHTTP;
+}
+IntPtr m_pSteamHTTP;
+
+public override IntPtr GetIntPtr() { return m_pSteamHTTP; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamHTTP == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override uint CreateHTTPRequest(uint eHTTPRequestMethod,string pchAbsoluteURL)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamHTTP_CreateHTTPRequest(m_pSteamHTTP,eHTTPRequestMethod,pchAbsoluteURL);
+ return result;
+}
+public override bool SetHTTPRequestContextValue(uint hRequest,ulong ulContextValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(m_pSteamHTTP,hRequest,ulContextValue);
+ return result;
+}
+public override bool SetHTTPRequestNetworkActivityTimeout(uint hRequest,uint unTimeoutSeconds)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(m_pSteamHTTP,hRequest,unTimeoutSeconds);
+ return result;
+}
+public override bool SetHTTPRequestHeaderValue(uint hRequest,string pchHeaderName,string pchHeaderValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(m_pSteamHTTP,hRequest,pchHeaderName,pchHeaderValue);
+ return result;
+}
+public override bool SetHTTPRequestGetOrPostParameter(uint hRequest,string pchParamName,string pchParamValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(m_pSteamHTTP,hRequest,pchParamName,pchParamValue);
+ return result;
+}
+public override bool SendHTTPRequest(uint hRequest,ref ulong pCallHandle)
+{
+ CheckIfUsable();
+ pCallHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SendHTTPRequest(m_pSteamHTTP,hRequest,ref pCallHandle);
+ return result;
+}
+public override bool SendHTTPRequestAndStreamResponse(uint hRequest,ref ulong pCallHandle)
+{
+ CheckIfUsable();
+ pCallHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(m_pSteamHTTP,hRequest,ref pCallHandle);
+ return result;
+}
+public override bool DeferHTTPRequest(uint hRequest)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_DeferHTTPRequest(m_pSteamHTTP,hRequest);
+ return result;
+}
+public override bool PrioritizeHTTPRequest(uint hRequest)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(m_pSteamHTTP,hRequest);
+ return result;
+}
+public override bool GetHTTPResponseHeaderSize(uint hRequest,string pchHeaderName,ref uint unResponseHeaderSize)
+{
+ CheckIfUsable();
+ unResponseHeaderSize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(m_pSteamHTTP,hRequest,pchHeaderName,ref unResponseHeaderSize);
+ return result;
+}
+public override bool GetHTTPResponseHeaderValue(uint hRequest,string pchHeaderName,IntPtr pHeaderValueBuffer,uint unBufferSize)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(m_pSteamHTTP,hRequest,pchHeaderName,pHeaderValueBuffer,unBufferSize);
+ return result;
+}
+public override bool GetHTTPResponseBodySize(uint hRequest,ref uint unBodySize)
+{
+ CheckIfUsable();
+ unBodySize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(m_pSteamHTTP,hRequest,ref unBodySize);
+ return result;
+}
+public override bool GetHTTPResponseBodyData(uint hRequest,IntPtr pBodyDataBuffer,uint unBufferSize)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(m_pSteamHTTP,hRequest,pBodyDataBuffer,unBufferSize);
+ return result;
+}
+public override bool GetHTTPStreamingResponseBodyData(uint hRequest,uint cOffset,IntPtr pBodyDataBuffer,uint unBufferSize)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(m_pSteamHTTP,hRequest,cOffset,pBodyDataBuffer,unBufferSize);
+ return result;
+}
+public override bool ReleaseHTTPRequest(uint hRequest)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_ReleaseHTTPRequest(m_pSteamHTTP,hRequest);
+ return result;
+}
+public override bool GetHTTPDownloadProgressPct(uint hRequest,ref float pflPercentOut)
+{
+ CheckIfUsable();
+ pflPercentOut = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(m_pSteamHTTP,hRequest,ref pflPercentOut);
+ return result;
+}
+public override bool SetHTTPRequestRawPostBody(uint hRequest,string pchContentType,IntPtr pubBody,uint unBodyLen)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(m_pSteamHTTP,hRequest,pchContentType,pubBody,unBodyLen);
+ return result;
+}
+public override uint CreateCookieContainer(bool bAllowResponsesToModify)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamHTTP_CreateCookieContainer(m_pSteamHTTP,bAllowResponsesToModify);
+ return result;
+}
+public override bool ReleaseCookieContainer(uint hCookieContainer)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_ReleaseCookieContainer(m_pSteamHTTP,hCookieContainer);
+ return result;
+}
+public override bool SetCookie(uint hCookieContainer,string pchHost,string pchUrl,string pchCookie)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetCookie(m_pSteamHTTP,hCookieContainer,pchHost,pchUrl,pchCookie);
+ return result;
+}
+public override bool SetHTTPRequestCookieContainer(uint hRequest,uint hCookieContainer)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(m_pSteamHTTP,hRequest,hCookieContainer);
+ return result;
+}
+public override bool SetHTTPRequestUserAgentInfo(uint hRequest,string pchUserAgentInfo)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(m_pSteamHTTP,hRequest,pchUserAgentInfo);
+ return result;
+}
+public override bool SetHTTPRequestRequiresVerifiedCertificate(uint hRequest,bool bRequireVerifiedCertificate)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(m_pSteamHTTP,hRequest,bRequireVerifiedCertificate);
+ return result;
+}
+public override bool SetHTTPRequestAbsoluteTimeoutMS(uint hRequest,uint unMilliseconds)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(m_pSteamHTTP,hRequest,unMilliseconds);
+ return result;
+}
+public override bool GetHTTPRequestWasTimedOut(uint hRequest,ref bool pbWasTimedOut)
+{
+ CheckIfUsable();
+ pbWasTimedOut = false;
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(m_pSteamHTTP,hRequest,ref pbWasTimedOut);
+ return result;
+}
+}
+
+
+public class CSteamUnifiedMessages : ISteamUnifiedMessages
+{
+public CSteamUnifiedMessages(IntPtr SteamUnifiedMessages)
+{
+ m_pSteamUnifiedMessages = SteamUnifiedMessages;
+}
+IntPtr m_pSteamUnifiedMessages;
+
+public override IntPtr GetIntPtr() { return m_pSteamUnifiedMessages; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamUnifiedMessages == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override ulong SendMethod(string pchServiceMethod,IntPtr pRequestBuffer,uint unRequestBufferSize,ulong unContext)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUnifiedMessages_SendMethod(m_pSteamUnifiedMessages,pchServiceMethod,pRequestBuffer,unRequestBufferSize,unContext);
+ return result;
+}
+public override bool GetMethodResponseInfo(ulong hHandle,ref uint punResponseSize,ref uint peResult)
+{
+ CheckIfUsable();
+ punResponseSize = 0;
+ peResult = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo(m_pSteamUnifiedMessages,hHandle,ref punResponseSize,ref peResult);
+ return result;
+}
+public override bool GetMethodResponseData(ulong hHandle,IntPtr pResponseBuffer,uint unResponseBufferSize,bool bAutoRelease)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUnifiedMessages_GetMethodResponseData(m_pSteamUnifiedMessages,hHandle,pResponseBuffer,unResponseBufferSize,bAutoRelease);
+ return result;
+}
+public override bool ReleaseMethod(ulong hHandle)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUnifiedMessages_ReleaseMethod(m_pSteamUnifiedMessages,hHandle);
+ return result;
+}
+public override bool SendNotification(string pchServiceNotification,IntPtr pNotificationBuffer,uint unNotificationBufferSize)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUnifiedMessages_SendNotification(m_pSteamUnifiedMessages,pchServiceNotification,pNotificationBuffer,unNotificationBufferSize);
+ return result;
+}
+}
+
+
+public class CSteamController : ISteamController
+{
+public CSteamController(IntPtr SteamController)
+{
+ m_pSteamController = SteamController;
+}
+IntPtr m_pSteamController;
+
+public override IntPtr GetIntPtr() { return m_pSteamController; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamController == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override bool Init()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamController_Init(m_pSteamController);
+ return result;
+}
+public override bool Shutdown()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamController_Shutdown(m_pSteamController);
+ return result;
+}
+public override void RunFrame()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamController_RunFrame(m_pSteamController);
+}
+public override int GetConnectedControllers(ref ulong handlesOut)
+{
+ CheckIfUsable();
+ handlesOut = 0;
+ int result = NativeEntrypoints.SteamAPI_ISteamController_GetConnectedControllers(m_pSteamController,ref handlesOut);
+ return result;
+}
+public override bool ShowBindingPanel(ulong controllerHandle)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamController_ShowBindingPanel(m_pSteamController,controllerHandle);
+ return result;
+}
+public override ulong GetActionSetHandle(string pszActionSetName)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamController_GetActionSetHandle(m_pSteamController,pszActionSetName);
+ return result;
+}
+public override void ActivateActionSet(ulong controllerHandle,ulong actionSetHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamController_ActivateActionSet(m_pSteamController,controllerHandle,actionSetHandle);
+}
+public override ulong GetCurrentActionSet(ulong controllerHandle)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamController_GetCurrentActionSet(m_pSteamController,controllerHandle);
+ return result;
+}
+public override ulong GetDigitalActionHandle(string pszActionName)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamController_GetDigitalActionHandle(m_pSteamController,pszActionName);
+ return result;
+}
+public override ControllerDigitalActionData_t GetDigitalActionData(ulong controllerHandle,ulong digitalActionHandle)
+{
+ CheckIfUsable();
+ ControllerDigitalActionData_t result = NativeEntrypoints.SteamAPI_ISteamController_GetDigitalActionData(m_pSteamController,controllerHandle,digitalActionHandle);
+ return result;
+}
+public override int GetDigitalActionOrigins(ulong controllerHandle,ulong actionSetHandle,ulong digitalActionHandle,ref uint originsOut)
+{
+ CheckIfUsable();
+ originsOut = 0;
+ int result = NativeEntrypoints.SteamAPI_ISteamController_GetDigitalActionOrigins(m_pSteamController,controllerHandle,actionSetHandle,digitalActionHandle,ref originsOut);
+ return result;
+}
+public override ulong GetAnalogActionHandle(string pszActionName)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamController_GetAnalogActionHandle(m_pSteamController,pszActionName);
+ return result;
+}
+public override ControllerAnalogActionData_t GetAnalogActionData(ulong controllerHandle,ulong analogActionHandle)
+{
+ CheckIfUsable();
+ ControllerAnalogActionData_t result = NativeEntrypoints.SteamAPI_ISteamController_GetAnalogActionData(m_pSteamController,controllerHandle,analogActionHandle);
+ return result;
+}
+public override int GetAnalogActionOrigins(ulong controllerHandle,ulong actionSetHandle,ulong analogActionHandle,ref uint originsOut)
+{
+ CheckIfUsable();
+ originsOut = 0;
+ int result = NativeEntrypoints.SteamAPI_ISteamController_GetAnalogActionOrigins(m_pSteamController,controllerHandle,actionSetHandle,analogActionHandle,ref originsOut);
+ return result;
+}
+public override void StopAnalogActionMomentum(ulong controllerHandle,ulong eAction)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamController_StopAnalogActionMomentum(m_pSteamController,controllerHandle,eAction);
+}
+public override void TriggerHapticPulse(ulong controllerHandle,uint eTargetPad,char usDurationMicroSec)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamController_TriggerHapticPulse(m_pSteamController,controllerHandle,eTargetPad,usDurationMicroSec);
+}
+public override void TriggerRepeatedHapticPulse(ulong controllerHandle,uint eTargetPad,char usDurationMicroSec,char usOffMicroSec,char unRepeat,uint nFlags)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamController_TriggerRepeatedHapticPulse(m_pSteamController,controllerHandle,eTargetPad,usDurationMicroSec,usOffMicroSec,unRepeat,nFlags);
+}
+public override void TriggerVibration(ulong controllerHandle,char usLeftSpeed,char usRightSpeed)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamController_TriggerVibration(m_pSteamController,controllerHandle,usLeftSpeed,usRightSpeed);
+}
+public override void SetLEDColor(ulong controllerHandle,byte nColorR,byte nColorG,byte nColorB,uint nFlags)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamController_SetLEDColor(m_pSteamController,controllerHandle,nColorR,nColorG,nColorB,nFlags);
+}
+public override int GetGamepadIndexForController(ulong ulControllerHandle)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamController_GetGamepadIndexForController(m_pSteamController,ulControllerHandle);
+ return result;
+}
+public override ulong GetControllerForGamepadIndex(int nIndex)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamController_GetControllerForGamepadIndex(m_pSteamController,nIndex);
+ return result;
+}
+public override ControllerMotionData_t GetMotionData(ulong controllerHandle)
+{
+ CheckIfUsable();
+ ControllerMotionData_t result = NativeEntrypoints.SteamAPI_ISteamController_GetMotionData(m_pSteamController,controllerHandle);
+ return result;
+}
+public override bool ShowDigitalActionOrigins(ulong controllerHandle,ulong digitalActionHandle,float flScale,float flXPosition,float flYPosition)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamController_ShowDigitalActionOrigins(m_pSteamController,controllerHandle,digitalActionHandle,flScale,flXPosition,flYPosition);
+ return result;
+}
+public override bool ShowAnalogActionOrigins(ulong controllerHandle,ulong analogActionHandle,float flScale,float flXPosition,float flYPosition)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamController_ShowAnalogActionOrigins(m_pSteamController,controllerHandle,analogActionHandle,flScale,flXPosition,flYPosition);
+ return result;
+}
+public override string GetStringForActionOrigin(uint eOrigin)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamController_GetStringForActionOrigin(m_pSteamController,eOrigin);
+ return Marshal.PtrToStringAnsi(result);
+}
+public override string GetGlyphForActionOrigin(uint eOrigin)
+{
+ CheckIfUsable();
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamController_GetGlyphForActionOrigin(m_pSteamController,eOrigin);
+ return Marshal.PtrToStringAnsi(result);
+}
+}
+
+
+public class CSteamUGC : ISteamUGC
+{
+public CSteamUGC(IntPtr SteamUGC)
+{
+ m_pSteamUGC = SteamUGC;
+}
+IntPtr m_pSteamUGC;
+
+public override IntPtr GetIntPtr() { return m_pSteamUGC; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamUGC == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override ulong CreateQueryUserUGCRequest(uint unAccountID,uint eListType,uint eMatchingUGCType,uint eSortOrder,uint nCreatorAppID,uint nConsumerAppID,uint unPage)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(m_pSteamUGC,unAccountID,eListType,eMatchingUGCType,eSortOrder,nCreatorAppID,nConsumerAppID,unPage);
+ return result;
+}
+public override ulong CreateQueryAllUGCRequest(uint eQueryType,uint eMatchingeMatchingUGCTypeFileType,uint nCreatorAppID,uint nConsumerAppID,uint unPage)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(m_pSteamUGC,eQueryType,eMatchingeMatchingUGCTypeFileType,nCreatorAppID,nConsumerAppID,unPage);
+ return result;
+}
+public override ulong CreateQueryUGCDetailsRequest(ref ulong pvecPublishedFileID,uint unNumPublishedFileIDs)
+{
+ CheckIfUsable();
+ pvecPublishedFileID = 0;
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest(m_pSteamUGC,ref pvecPublishedFileID,unNumPublishedFileIDs);
+ return result;
+}
+public override ulong SendQueryUGCRequest(ulong handle)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_SendQueryUGCRequest(m_pSteamUGC,handle);
+ return result;
+}
+public override bool GetQueryUGCResult(ulong handle,uint index,ref SteamUGCDetails_t pDetails)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_GetQueryUGCResult(m_pSteamUGC,handle,index,ref pDetails);
+ return result;
+}
+public override bool GetQueryUGCPreviewURL(ulong handle,uint index,out string pchURL)
+{
+ CheckIfUsable();
+ System.Text.StringBuilder pStrBuffer1 = new System.Text.StringBuilder(2048);
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_GetQueryUGCPreviewURL(m_pSteamUGC,handle,index,pStrBuffer1,2048);
+ pchURL = pStrBuffer1.ToString();
+ return result;
+}
+public override bool GetQueryUGCMetadata(ulong handle,uint index,out string pchMetadata)
+{
+ CheckIfUsable();
+ System.Text.StringBuilder pStrBuffer1 = new System.Text.StringBuilder(2048);
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_GetQueryUGCMetadata(m_pSteamUGC,handle,index,pStrBuffer1,2048);
+ pchMetadata = pStrBuffer1.ToString();
+ return result;
+}
+public override bool GetQueryUGCChildren(ulong handle,uint index,ref ulong pvecPublishedFileID,uint cMaxEntries)
+{
+ CheckIfUsable();
+ pvecPublishedFileID = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_GetQueryUGCChildren(m_pSteamUGC,handle,index,ref pvecPublishedFileID,cMaxEntries);
+ return result;
+}
+public override bool GetQueryUGCStatistic(ulong handle,uint index,uint eStatType,ref ulong pStatValue)
+{
+ CheckIfUsable();
+ pStatValue = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_GetQueryUGCStatistic(m_pSteamUGC,handle,index,eStatType,ref pStatValue);
+ return result;
+}
+public override uint GetQueryUGCNumAdditionalPreviews(ulong handle,uint index)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews(m_pSteamUGC,handle,index);
+ return result;
+}
+public override bool GetQueryUGCAdditionalPreview(ulong handle,uint index,uint previewIndex,out string pchURLOrVideoID,out string pchOriginalFileName,uint cchOriginalFileNameSize,ref uint pPreviewType)
+{
+ CheckIfUsable();
+ pPreviewType = 0;
+ System.Text.StringBuilder pStrBuffer1 = new System.Text.StringBuilder(2048);
+ System.Text.StringBuilder pStrBuffer2 = new System.Text.StringBuilder(2048);
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview(m_pSteamUGC,handle,index,previewIndex,pStrBuffer1,2048,pStrBuffer2,cchOriginalFileNameSize,ref pPreviewType);
+ pchURLOrVideoID = pStrBuffer1.ToString();
+ pchOriginalFileName = pStrBuffer2.ToString();
+ return result;
+}
+public override uint GetQueryUGCNumKeyValueTags(ulong handle,uint index)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUGC_GetQueryUGCNumKeyValueTags(m_pSteamUGC,handle,index);
+ return result;
+}
+public override bool GetQueryUGCKeyValueTag(ulong handle,uint index,uint keyValueTagIndex,out string pchKey,out string pchValue)
+{
+ CheckIfUsable();
+ System.Text.StringBuilder pStrBuffer1 = new System.Text.StringBuilder(2048);
+ System.Text.StringBuilder pStrBuffer2 = new System.Text.StringBuilder(2048);
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_GetQueryUGCKeyValueTag(m_pSteamUGC,handle,index,keyValueTagIndex,pStrBuffer1,2048,pStrBuffer2,2048);
+ pchKey = pStrBuffer1.ToString();
+ pchValue = pStrBuffer2.ToString();
+ return result;
+}
+public override bool ReleaseQueryUGCRequest(ulong handle)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(m_pSteamUGC,handle);
+ return result;
+}
+public override bool AddRequiredTag(ulong handle,string pTagName)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_AddRequiredTag(m_pSteamUGC,handle,pTagName);
+ return result;
+}
+public override bool AddExcludedTag(ulong handle,string pTagName)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_AddExcludedTag(m_pSteamUGC,handle,pTagName);
+ return result;
+}
+public override bool SetReturnOnlyIDs(ulong handle,bool bReturnOnlyIDs)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetReturnOnlyIDs(m_pSteamUGC,handle,bReturnOnlyIDs);
+ return result;
+}
+public override bool SetReturnKeyValueTags(ulong handle,bool bReturnKeyValueTags)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetReturnKeyValueTags(m_pSteamUGC,handle,bReturnKeyValueTags);
+ return result;
+}
+public override bool SetReturnLongDescription(ulong handle,bool bReturnLongDescription)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetReturnLongDescription(m_pSteamUGC,handle,bReturnLongDescription);
+ return result;
+}
+public override bool SetReturnMetadata(ulong handle,bool bReturnMetadata)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetReturnMetadata(m_pSteamUGC,handle,bReturnMetadata);
+ return result;
+}
+public override bool SetReturnChildren(ulong handle,bool bReturnChildren)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetReturnChildren(m_pSteamUGC,handle,bReturnChildren);
+ return result;
+}
+public override bool SetReturnAdditionalPreviews(ulong handle,bool bReturnAdditionalPreviews)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetReturnAdditionalPreviews(m_pSteamUGC,handle,bReturnAdditionalPreviews);
+ return result;
+}
+public override bool SetReturnTotalOnly(ulong handle,bool bReturnTotalOnly)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetReturnTotalOnly(m_pSteamUGC,handle,bReturnTotalOnly);
+ return result;
+}
+public override bool SetReturnPlaytimeStats(ulong handle,uint unDays)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetReturnPlaytimeStats(m_pSteamUGC,handle,unDays);
+ return result;
+}
+public override bool SetLanguage(ulong handle,string pchLanguage)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetLanguage(m_pSteamUGC,handle,pchLanguage);
+ return result;
+}
+public override bool SetAllowCachedResponse(ulong handle,uint unMaxAgeSeconds)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetAllowCachedResponse(m_pSteamUGC,handle,unMaxAgeSeconds);
+ return result;
+}
+public override bool SetCloudFileNameFilter(ulong handle,string pMatchCloudFileName)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetCloudFileNameFilter(m_pSteamUGC,handle,pMatchCloudFileName);
+ return result;
+}
+public override bool SetMatchAnyTag(ulong handle,bool bMatchAnyTag)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetMatchAnyTag(m_pSteamUGC,handle,bMatchAnyTag);
+ return result;
+}
+public override bool SetSearchText(ulong handle,string pSearchText)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetSearchText(m_pSteamUGC,handle,pSearchText);
+ return result;
+}
+public override bool SetRankedByTrendDays(ulong handle,uint unDays)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetRankedByTrendDays(m_pSteamUGC,handle,unDays);
+ return result;
+}
+public override bool AddRequiredKeyValueTag(ulong handle,string pKey,string pValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_AddRequiredKeyValueTag(m_pSteamUGC,handle,pKey,pValue);
+ return result;
+}
+public override ulong RequestUGCDetails(ulong nPublishedFileID,uint unMaxAgeSeconds)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_RequestUGCDetails(m_pSteamUGC,nPublishedFileID,unMaxAgeSeconds);
+ return result;
+}
+public override ulong CreateItem(uint nConsumerAppId,uint eFileType)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_CreateItem(m_pSteamUGC,nConsumerAppId,eFileType);
+ return result;
+}
+public override ulong StartItemUpdate(uint nConsumerAppId,ulong nPublishedFileID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_StartItemUpdate(m_pSteamUGC,nConsumerAppId,nPublishedFileID);
+ return result;
+}
+public override bool SetItemTitle(ulong handle,string pchTitle)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemTitle(m_pSteamUGC,handle,pchTitle);
+ return result;
+}
+public override bool SetItemDescription(ulong handle,string pchDescription)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemDescription(m_pSteamUGC,handle,pchDescription);
+ return result;
+}
+public override bool SetItemUpdateLanguage(ulong handle,string pchLanguage)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemUpdateLanguage(m_pSteamUGC,handle,pchLanguage);
+ return result;
+}
+public override bool SetItemMetadata(ulong handle,string pchMetaData)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemMetadata(m_pSteamUGC,handle,pchMetaData);
+ return result;
+}
+public override bool SetItemVisibility(ulong handle,uint eVisibility)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemVisibility(m_pSteamUGC,handle,eVisibility);
+ return result;
+}
+public override bool SetItemTags(ulong updateHandle,ref SteamParamStringArray_t pTags)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemTags(m_pSteamUGC,updateHandle,ref pTags);
+ return result;
+}
+public override bool SetItemContent(ulong handle,string pszContentFolder)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemContent(m_pSteamUGC,handle,pszContentFolder);
+ return result;
+}
+public override bool SetItemPreview(ulong handle,string pszPreviewFile)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemPreview(m_pSteamUGC,handle,pszPreviewFile);
+ return result;
+}
+public override bool RemoveItemKeyValueTags(ulong handle,string pchKey)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_RemoveItemKeyValueTags(m_pSteamUGC,handle,pchKey);
+ return result;
+}
+public override bool AddItemKeyValueTag(ulong handle,string pchKey,string pchValue)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_AddItemKeyValueTag(m_pSteamUGC,handle,pchKey,pchValue);
+ return result;
+}
+public override bool AddItemPreviewFile(ulong handle,string pszPreviewFile,uint type)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_AddItemPreviewFile(m_pSteamUGC,handle,pszPreviewFile,type);
+ return result;
+}
+public override bool AddItemPreviewVideo(ulong handle,string pszVideoID)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_AddItemPreviewVideo(m_pSteamUGC,handle,pszVideoID);
+ return result;
+}
+public override bool UpdateItemPreviewFile(ulong handle,uint index,string pszPreviewFile)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_UpdateItemPreviewFile(m_pSteamUGC,handle,index,pszPreviewFile);
+ return result;
+}
+public override bool UpdateItemPreviewVideo(ulong handle,uint index,string pszVideoID)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_UpdateItemPreviewVideo(m_pSteamUGC,handle,index,pszVideoID);
+ return result;
+}
+public override bool RemoveItemPreview(ulong handle,uint index)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_RemoveItemPreview(m_pSteamUGC,handle,index);
+ return result;
+}
+public override ulong SubmitItemUpdate(ulong handle,string pchChangeNote)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_SubmitItemUpdate(m_pSteamUGC,handle,pchChangeNote);
+ return result;
+}
+public override uint GetItemUpdateProgress(ulong handle,ref ulong punBytesProcessed,ref ulong punBytesTotal)
+{
+ CheckIfUsable();
+ punBytesProcessed = 0;
+ punBytesTotal = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamUGC_GetItemUpdateProgress(m_pSteamUGC,handle,ref punBytesProcessed,ref punBytesTotal);
+ return result;
+}
+public override ulong SetUserItemVote(ulong nPublishedFileID,bool bVoteUp)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_SetUserItemVote(m_pSteamUGC,nPublishedFileID,bVoteUp);
+ return result;
+}
+public override ulong GetUserItemVote(ulong nPublishedFileID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_GetUserItemVote(m_pSteamUGC,nPublishedFileID);
+ return result;
+}
+public override ulong AddItemToFavorites(uint nAppId,ulong nPublishedFileID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_AddItemToFavorites(m_pSteamUGC,nAppId,nPublishedFileID);
+ return result;
+}
+public override ulong RemoveItemFromFavorites(uint nAppId,ulong nPublishedFileID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_RemoveItemFromFavorites(m_pSteamUGC,nAppId,nPublishedFileID);
+ return result;
+}
+public override ulong SubscribeItem(ulong nPublishedFileID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_SubscribeItem(m_pSteamUGC,nPublishedFileID);
+ return result;
+}
+public override ulong UnsubscribeItem(ulong nPublishedFileID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_UnsubscribeItem(m_pSteamUGC,nPublishedFileID);
+ return result;
+}
+public override uint GetNumSubscribedItems()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUGC_GetNumSubscribedItems(m_pSteamUGC);
+ return result;
+}
+public override uint GetSubscribedItems(ref ulong pvecPublishedFileID,uint cMaxEntries)
+{
+ CheckIfUsable();
+ pvecPublishedFileID = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamUGC_GetSubscribedItems(m_pSteamUGC,ref pvecPublishedFileID,cMaxEntries);
+ return result;
+}
+public override uint GetItemState(ulong nPublishedFileID)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamUGC_GetItemState(m_pSteamUGC,nPublishedFileID);
+ return result;
+}
+public override bool GetItemInstallInfo(ulong nPublishedFileID,ref ulong punSizeOnDisk,out string pchFolder,ref uint punTimeStamp)
+{
+ CheckIfUsable();
+ punSizeOnDisk = 0;
+ punTimeStamp = 0;
+ System.Text.StringBuilder pStrBuffer1 = new System.Text.StringBuilder(2048);
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_GetItemInstallInfo(m_pSteamUGC,nPublishedFileID,ref punSizeOnDisk,pStrBuffer1,2048,ref punTimeStamp);
+ pchFolder = pStrBuffer1.ToString();
+ return result;
+}
+public override bool GetItemDownloadInfo(ulong nPublishedFileID,ref ulong punBytesDownloaded,ref ulong punBytesTotal)
+{
+ CheckIfUsable();
+ punBytesDownloaded = 0;
+ punBytesTotal = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_GetItemDownloadInfo(m_pSteamUGC,nPublishedFileID,ref punBytesDownloaded,ref punBytesTotal);
+ return result;
+}
+public override bool DownloadItem(ulong nPublishedFileID,bool bHighPriority)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_DownloadItem(m_pSteamUGC,nPublishedFileID,bHighPriority);
+ return result;
+}
+public override bool BInitWorkshopForGameServer(uint unWorkshopDepotID,string pszFolder)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamUGC_BInitWorkshopForGameServer(m_pSteamUGC,unWorkshopDepotID,pszFolder);
+ return result;
+}
+public override void SuspendDownloads(bool bSuspend)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamUGC_SuspendDownloads(m_pSteamUGC,bSuspend);
+}
+public override ulong StartPlaytimeTracking(ref ulong pvecPublishedFileID,uint unNumPublishedFileIDs)
+{
+ CheckIfUsable();
+ pvecPublishedFileID = 0;
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_StartPlaytimeTracking(m_pSteamUGC,ref pvecPublishedFileID,unNumPublishedFileIDs);
+ return result;
+}
+public override ulong StopPlaytimeTracking(ref ulong pvecPublishedFileID,uint unNumPublishedFileIDs)
+{
+ CheckIfUsable();
+ pvecPublishedFileID = 0;
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_StopPlaytimeTracking(m_pSteamUGC,ref pvecPublishedFileID,unNumPublishedFileIDs);
+ return result;
+}
+public override ulong StopPlaytimeTrackingForAllItems()
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_StopPlaytimeTrackingForAllItems(m_pSteamUGC);
+ return result;
+}
+public override ulong AddDependency(ulong nParentPublishedFileID,ulong nChildPublishedFileID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_AddDependency(m_pSteamUGC,nParentPublishedFileID,nChildPublishedFileID);
+ return result;
+}
+public override ulong RemoveDependency(ulong nParentPublishedFileID,ulong nChildPublishedFileID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamUGC_RemoveDependency(m_pSteamUGC,nParentPublishedFileID,nChildPublishedFileID);
+ return result;
+}
+}
+
+
+public class CSteamAppList : ISteamAppList
+{
+public CSteamAppList(IntPtr SteamAppList)
+{
+ m_pSteamAppList = SteamAppList;
+}
+IntPtr m_pSteamAppList;
+
+public override IntPtr GetIntPtr() { return m_pSteamAppList; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamAppList == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override uint GetNumInstalledApps()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamAppList_GetNumInstalledApps(m_pSteamAppList);
+ return result;
+}
+public override uint GetInstalledApps(ref uint pvecAppID,uint unMaxAppIDs)
+{
+ CheckIfUsable();
+ pvecAppID = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamAppList_GetInstalledApps(m_pSteamAppList,ref pvecAppID,unMaxAppIDs);
+ return result;
+}
+public override int GetAppName(uint nAppID,System.Text.StringBuilder pchName,int cchNameMax)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamAppList_GetAppName(m_pSteamAppList,nAppID,pchName,cchNameMax);
+ return result;
+}
+public override int GetAppInstallDir(uint nAppID,string pchDirectory,int cchNameMax)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamAppList_GetAppInstallDir(m_pSteamAppList,nAppID,pchDirectory,cchNameMax);
+ return result;
+}
+public override int GetAppBuildId(uint nAppID)
+{
+ CheckIfUsable();
+ int result = NativeEntrypoints.SteamAPI_ISteamAppList_GetAppBuildId(m_pSteamAppList,nAppID);
+ return result;
+}
+}
+
+
+public class CSteamHTMLSurface : ISteamHTMLSurface
+{
+public CSteamHTMLSurface(IntPtr SteamHTMLSurface)
+{
+ m_pSteamHTMLSurface = SteamHTMLSurface;
+}
+IntPtr m_pSteamHTMLSurface;
+
+public override IntPtr GetIntPtr() { return m_pSteamHTMLSurface; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamHTMLSurface == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override void DestructISteamHTMLSurface()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(m_pSteamHTMLSurface);
+}
+public override bool Init()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTMLSurface_Init(m_pSteamHTMLSurface);
+ return result;
+}
+public override bool Shutdown()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamHTMLSurface_Shutdown(m_pSteamHTMLSurface);
+ return result;
+}
+public override ulong CreateBrowser(string pchUserAgent,string pchUserCSS)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamHTMLSurface_CreateBrowser(m_pSteamHTMLSurface,pchUserAgent,pchUserCSS);
+ return result;
+}
+public override void RemoveBrowser(uint unBrowserHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_RemoveBrowser(m_pSteamHTMLSurface,unBrowserHandle);
+}
+public override void LoadURL(uint unBrowserHandle,string pchURL,string pchPostData)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_LoadURL(m_pSteamHTMLSurface,unBrowserHandle,pchURL,pchPostData);
+}
+public override void SetSize(uint unBrowserHandle,uint unWidth,uint unHeight)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_SetSize(m_pSteamHTMLSurface,unBrowserHandle,unWidth,unHeight);
+}
+public override void StopLoad(uint unBrowserHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_StopLoad(m_pSteamHTMLSurface,unBrowserHandle);
+}
+public override void Reload(uint unBrowserHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_Reload(m_pSteamHTMLSurface,unBrowserHandle);
+}
+public override void GoBack(uint unBrowserHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_GoBack(m_pSteamHTMLSurface,unBrowserHandle);
+}
+public override void GoForward(uint unBrowserHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_GoForward(m_pSteamHTMLSurface,unBrowserHandle);
+}
+public override void AddHeader(uint unBrowserHandle,string pchKey,string pchValue)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_AddHeader(m_pSteamHTMLSurface,unBrowserHandle,pchKey,pchValue);
+}
+public override void ExecuteJavascript(uint unBrowserHandle,string pchScript)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_ExecuteJavascript(m_pSteamHTMLSurface,unBrowserHandle,pchScript);
+}
+public override void MouseUp(uint unBrowserHandle,uint eMouseButton)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_MouseUp(m_pSteamHTMLSurface,unBrowserHandle,eMouseButton);
+}
+public override void MouseDown(uint unBrowserHandle,uint eMouseButton)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_MouseDown(m_pSteamHTMLSurface,unBrowserHandle,eMouseButton);
+}
+public override void MouseDoubleClick(uint unBrowserHandle,uint eMouseButton)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_MouseDoubleClick(m_pSteamHTMLSurface,unBrowserHandle,eMouseButton);
+}
+public override void MouseMove(uint unBrowserHandle,int x,int y)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_MouseMove(m_pSteamHTMLSurface,unBrowserHandle,x,y);
+}
+public override void MouseWheel(uint unBrowserHandle,int nDelta)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_MouseWheel(m_pSteamHTMLSurface,unBrowserHandle,nDelta);
+}
+public override void KeyDown(uint unBrowserHandle,uint nNativeKeyCode,uint eHTMLKeyModifiers)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_KeyDown(m_pSteamHTMLSurface,unBrowserHandle,nNativeKeyCode,eHTMLKeyModifiers);
+}
+public override void KeyUp(uint unBrowserHandle,uint nNativeKeyCode,uint eHTMLKeyModifiers)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_KeyUp(m_pSteamHTMLSurface,unBrowserHandle,nNativeKeyCode,eHTMLKeyModifiers);
+}
+public override void KeyChar(uint unBrowserHandle,uint cUnicodeChar,uint eHTMLKeyModifiers)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_KeyChar(m_pSteamHTMLSurface,unBrowserHandle,cUnicodeChar,eHTMLKeyModifiers);
+}
+public override void SetHorizontalScroll(uint unBrowserHandle,uint nAbsolutePixelScroll)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(m_pSteamHTMLSurface,unBrowserHandle,nAbsolutePixelScroll);
+}
+public override void SetVerticalScroll(uint unBrowserHandle,uint nAbsolutePixelScroll)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_SetVerticalScroll(m_pSteamHTMLSurface,unBrowserHandle,nAbsolutePixelScroll);
+}
+public override void SetKeyFocus(uint unBrowserHandle,bool bHasKeyFocus)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_SetKeyFocus(m_pSteamHTMLSurface,unBrowserHandle,bHasKeyFocus);
+}
+public override void ViewSource(uint unBrowserHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_ViewSource(m_pSteamHTMLSurface,unBrowserHandle);
+}
+public override void CopyToClipboard(uint unBrowserHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_CopyToClipboard(m_pSteamHTMLSurface,unBrowserHandle);
+}
+public override void PasteFromClipboard(uint unBrowserHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_PasteFromClipboard(m_pSteamHTMLSurface,unBrowserHandle);
+}
+public override void Find(uint unBrowserHandle,string pchSearchStr,bool bCurrentlyInFind,bool bReverse)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_Find(m_pSteamHTMLSurface,unBrowserHandle,pchSearchStr,bCurrentlyInFind,bReverse);
+}
+public override void StopFind(uint unBrowserHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_StopFind(m_pSteamHTMLSurface,unBrowserHandle);
+}
+public override void GetLinkAtPosition(uint unBrowserHandle,int x,int y)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(m_pSteamHTMLSurface,unBrowserHandle,x,y);
+}
+public override void SetCookie(string pchHostname,string pchKey,string pchValue,string pchPath,ulong nExpires,bool bSecure,bool bHTTPOnly)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_SetCookie(m_pSteamHTMLSurface,pchHostname,pchKey,pchValue,pchPath,nExpires,bSecure,bHTTPOnly);
+}
+public override void SetPageScaleFactor(uint unBrowserHandle,float flZoom,int nPointX,int nPointY)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(m_pSteamHTMLSurface,unBrowserHandle,flZoom,nPointX,nPointY);
+}
+public override void SetBackgroundMode(uint unBrowserHandle,bool bBackgroundMode)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_SetBackgroundMode(m_pSteamHTMLSurface,unBrowserHandle,bBackgroundMode);
+}
+public override void AllowStartRequest(uint unBrowserHandle,bool bAllowed)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_AllowStartRequest(m_pSteamHTMLSurface,unBrowserHandle,bAllowed);
+}
+public override void JSDialogResponse(uint unBrowserHandle,bool bResult)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamHTMLSurface_JSDialogResponse(m_pSteamHTMLSurface,unBrowserHandle,bResult);
+}
+}
+
+
+public class CSteamInventory : ISteamInventory
+{
+public CSteamInventory(IntPtr SteamInventory)
+{
+ m_pSteamInventory = SteamInventory;
+}
+IntPtr m_pSteamInventory;
+
+public override IntPtr GetIntPtr() { return m_pSteamInventory; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamInventory == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override uint GetResultStatus(int resultHandle)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamInventory_GetResultStatus(m_pSteamInventory,resultHandle);
+ return result;
+}
+public override bool GetResultItems(int resultHandle,out SteamItemDetails_t [] pOutItemsArray)
+{
+ CheckIfUsable();
+ uint punOutItemsArraySize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GetResultItems(m_pSteamInventory,resultHandle,null,ref punOutItemsArraySize);
+ pOutItemsArray= new SteamItemDetails_t[punOutItemsArraySize];
+ result = NativeEntrypoints.SteamAPI_ISteamInventory_GetResultItems(m_pSteamInventory,resultHandle,pOutItemsArray,ref punOutItemsArraySize);
+ return result;
+}
+public override bool GetResultItemProperty(int resultHandle,uint unItemIndex,string pchPropertyName,out string pchValueBuffer)
+{
+ CheckIfUsable();
+ uint punValueBufferSizeOut = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GetResultItemProperty(m_pSteamInventory,resultHandle,unItemIndex,pchPropertyName,null,ref punValueBufferSizeOut);
+ System.Text.StringBuilder pStrBuffer1 = new System.Text.StringBuilder((int)punValueBufferSizeOut);
+ result = NativeEntrypoints.SteamAPI_ISteamInventory_GetResultItemProperty(m_pSteamInventory,resultHandle,unItemIndex,pchPropertyName,pStrBuffer1,ref punValueBufferSizeOut);
+ pchValueBuffer = pStrBuffer1.ToString();
+ return result;
+}
+public override uint GetResultTimestamp(int resultHandle)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamInventory_GetResultTimestamp(m_pSteamInventory,resultHandle);
+ return result;
+}
+public override bool CheckResultSteamID(int resultHandle,ulong steamIDExpected)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_CheckResultSteamID(m_pSteamInventory,resultHandle,steamIDExpected);
+ return result;
+}
+public override void DestroyResult(int resultHandle)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamInventory_DestroyResult(m_pSteamInventory,resultHandle);
+}
+public override bool GetAllItems(ref int pResultHandle)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GetAllItems(m_pSteamInventory,ref pResultHandle);
+ return result;
+}
+public override bool GetItemsByID(ref int pResultHandle,ulong [] pInstanceIDs)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GetItemsByID(m_pSteamInventory,ref pResultHandle,pInstanceIDs,(uint) pInstanceIDs.Length);
+ return result;
+}
+public override bool SerializeResult(int resultHandle,IntPtr pOutBuffer,ref uint punOutBufferSize)
+{
+ CheckIfUsable();
+ punOutBufferSize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_SerializeResult(m_pSteamInventory,resultHandle,pOutBuffer,ref punOutBufferSize);
+ return result;
+}
+public override bool DeserializeResult(ref int pOutResultHandle,IntPtr pBuffer,uint unBufferSize,bool bRESERVED_MUST_BE_FALSE)
+{
+ CheckIfUsable();
+ pOutResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_DeserializeResult(m_pSteamInventory,ref pOutResultHandle,pBuffer,unBufferSize,bRESERVED_MUST_BE_FALSE);
+ return result;
+}
+public override bool GenerateItems(ref int pResultHandle,int [] pArrayItemDefs,uint [] punArrayQuantity)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GenerateItems(m_pSteamInventory,ref pResultHandle,pArrayItemDefs,punArrayQuantity,(uint) punArrayQuantity.Length);
+ return result;
+}
+public override bool GrantPromoItems(ref int pResultHandle)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GrantPromoItems(m_pSteamInventory,ref pResultHandle);
+ return result;
+}
+public override bool AddPromoItem(ref int pResultHandle,int itemDef)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_AddPromoItem(m_pSteamInventory,ref pResultHandle,itemDef);
+ return result;
+}
+public override bool AddPromoItems(ref int pResultHandle,int [] pArrayItemDefs)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_AddPromoItems(m_pSteamInventory,ref pResultHandle,pArrayItemDefs,(uint) pArrayItemDefs.Length);
+ return result;
+}
+public override bool ConsumeItem(ref int pResultHandle,ulong itemConsume,uint unQuantity)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_ConsumeItem(m_pSteamInventory,ref pResultHandle,itemConsume,unQuantity);
+ return result;
+}
+public override bool ExchangeItems(ref int pResultHandle,int [] pArrayGenerate,uint [] punArrayGenerateQuantity,ulong [] pArrayDestroy,uint [] punArrayDestroyQuantity)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_ExchangeItems(m_pSteamInventory,ref pResultHandle,pArrayGenerate,punArrayGenerateQuantity,(uint) punArrayGenerateQuantity.Length,pArrayDestroy,punArrayDestroyQuantity,(uint) punArrayDestroyQuantity.Length);
+ return result;
+}
+public override bool TransferItemQuantity(ref int pResultHandle,ulong itemIdSource,uint unQuantity,ulong itemIdDest)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_TransferItemQuantity(m_pSteamInventory,ref pResultHandle,itemIdSource,unQuantity,itemIdDest);
+ return result;
+}
+public override void SendItemDropHeartbeat()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamInventory_SendItemDropHeartbeat(m_pSteamInventory);
+}
+public override bool TriggerItemDrop(ref int pResultHandle,int dropListDefinition)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_TriggerItemDrop(m_pSteamInventory,ref pResultHandle,dropListDefinition);
+ return result;
+}
+public override bool TradeItems(ref int pResultHandle,ulong steamIDTradePartner,ulong [] pArrayGive,uint [] pArrayGiveQuantity,ulong [] pArrayGet,uint [] pArrayGetQuantity)
+{
+ CheckIfUsable();
+ pResultHandle = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_TradeItems(m_pSteamInventory,ref pResultHandle,steamIDTradePartner,pArrayGive,pArrayGiveQuantity,(uint) pArrayGiveQuantity.Length,pArrayGet,pArrayGetQuantity,(uint) pArrayGetQuantity.Length);
+ return result;
+}
+public override bool LoadItemDefinitions()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_LoadItemDefinitions(m_pSteamInventory);
+ return result;
+}
+public override bool GetItemDefinitionIDs(out int [] pItemDefIDs)
+{
+ CheckIfUsable();
+ uint punItemDefIDsArraySize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GetItemDefinitionIDs(m_pSteamInventory,null,ref punItemDefIDsArraySize);
+ pItemDefIDs= new int[punItemDefIDsArraySize];
+ result = NativeEntrypoints.SteamAPI_ISteamInventory_GetItemDefinitionIDs(m_pSteamInventory,pItemDefIDs,ref punItemDefIDsArraySize);
+ return result;
+}
+public override bool GetItemDefinitionProperty(int iDefinition,string pchPropertyName,out string pchValueBuffer)
+{
+ CheckIfUsable();
+ uint punValueBufferSizeOut = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GetItemDefinitionProperty(m_pSteamInventory,iDefinition,pchPropertyName,null,ref punValueBufferSizeOut);
+ System.Text.StringBuilder pStrBuffer1 = new System.Text.StringBuilder((int)punValueBufferSizeOut);
+ result = NativeEntrypoints.SteamAPI_ISteamInventory_GetItemDefinitionProperty(m_pSteamInventory,iDefinition,pchPropertyName,pStrBuffer1,ref punValueBufferSizeOut);
+ pchValueBuffer = pStrBuffer1.ToString();
+ return result;
+}
+public override ulong RequestEligiblePromoItemDefinitionsIDs(ulong steamID)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamInventory_RequestEligiblePromoItemDefinitionsIDs(m_pSteamInventory,steamID);
+ return result;
+}
+public override bool GetEligiblePromoItemDefinitionIDs(ulong steamID,out int [] pItemDefIDs)
+{
+ CheckIfUsable();
+ uint punItemDefIDsArraySize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GetEligiblePromoItemDefinitionIDs(m_pSteamInventory,steamID,null,ref punItemDefIDsArraySize);
+ pItemDefIDs= new int[punItemDefIDsArraySize];
+ result = NativeEntrypoints.SteamAPI_ISteamInventory_GetEligiblePromoItemDefinitionIDs(m_pSteamInventory,steamID,pItemDefIDs,ref punItemDefIDsArraySize);
+ return result;
+}
+}
+
+
+public class CSteamVideo : ISteamVideo
+{
+public CSteamVideo(IntPtr SteamVideo)
+{
+ m_pSteamVideo = SteamVideo;
+}
+IntPtr m_pSteamVideo;
+
+public override IntPtr GetIntPtr() { return m_pSteamVideo; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamVideo == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override void GetVideoURL(uint unVideoAppID)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamVideo_GetVideoURL(m_pSteamVideo,unVideoAppID);
+}
+public override bool IsBroadcasting(ref int pnNumViewers)
+{
+ CheckIfUsable();
+ pnNumViewers = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamVideo_IsBroadcasting(m_pSteamVideo,ref pnNumViewers);
+ return result;
+}
+public override void GetOPFSettings(uint unVideoAppID)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamVideo_GetOPFSettings(m_pSteamVideo,unVideoAppID);
+}
+public override bool GetOPFStringForApp(uint unVideoAppID,string pchBuffer,ref int pnBufferSize)
+{
+ CheckIfUsable();
+ pnBufferSize = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamVideo_GetOPFStringForApp(m_pSteamVideo,unVideoAppID,pchBuffer,ref pnBufferSize);
+ return result;
+}
+}
+
+
+public class CSteamGameServer : ISteamGameServer
+{
+public CSteamGameServer(IntPtr SteamGameServer)
+{
+ m_pSteamGameServer = SteamGameServer;
+}
+IntPtr m_pSteamGameServer;
+
+public override IntPtr GetIntPtr() { return m_pSteamGameServer; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamGameServer == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override bool InitGameServer(uint unIP,char usGamePort,char usQueryPort,uint unFlags,uint nGameAppId,string pchVersionString)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServer_InitGameServer(m_pSteamGameServer,unIP,usGamePort,usQueryPort,unFlags,nGameAppId,pchVersionString);
+ return result;
+}
+public override void SetProduct(string pszProduct)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetProduct(m_pSteamGameServer,pszProduct);
+}
+public override void SetGameDescription(string pszGameDescription)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetGameDescription(m_pSteamGameServer,pszGameDescription);
+}
+public override void SetModDir(string pszModDir)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetModDir(m_pSteamGameServer,pszModDir);
+}
+public override void SetDedicatedServer(bool bDedicated)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetDedicatedServer(m_pSteamGameServer,bDedicated);
+}
+public override void LogOn(string pszToken)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_LogOn(m_pSteamGameServer,pszToken);
+}
+public override void LogOnAnonymous()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_LogOnAnonymous(m_pSteamGameServer);
+}
+public override void LogOff()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_LogOff(m_pSteamGameServer);
+}
+public override bool BLoggedOn()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServer_BLoggedOn(m_pSteamGameServer);
+ return result;
+}
+public override bool BSecure()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServer_BSecure(m_pSteamGameServer);
+ return result;
+}
+public override ulong GetSteamID()
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamGameServer_GetSteamID(m_pSteamGameServer);
+ return result;
+}
+public override bool WasRestartRequested()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServer_WasRestartRequested(m_pSteamGameServer);
+ return result;
+}
+public override void SetMaxPlayerCount(int cPlayersMax)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetMaxPlayerCount(m_pSteamGameServer,cPlayersMax);
+}
+public override void SetBotPlayerCount(int cBotplayers)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetBotPlayerCount(m_pSteamGameServer,cBotplayers);
+}
+public override void SetServerName(string pszServerName)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetServerName(m_pSteamGameServer,pszServerName);
+}
+public override void SetMapName(string pszMapName)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetMapName(m_pSteamGameServer,pszMapName);
+}
+public override void SetPasswordProtected(bool bPasswordProtected)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetPasswordProtected(m_pSteamGameServer,bPasswordProtected);
+}
+public override void SetSpectatorPort(char unSpectatorPort)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetSpectatorPort(m_pSteamGameServer,unSpectatorPort);
+}
+public override void SetSpectatorServerName(string pszSpectatorServerName)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetSpectatorServerName(m_pSteamGameServer,pszSpectatorServerName);
+}
+public override void ClearAllKeyValues()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_ClearAllKeyValues(m_pSteamGameServer);
+}
+public override void SetKeyValue(string pKey,string pValue)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetKeyValue(m_pSteamGameServer,pKey,pValue);
+}
+public override void SetGameTags(string pchGameTags)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetGameTags(m_pSteamGameServer,pchGameTags);
+}
+public override void SetGameData(string pchGameData)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetGameData(m_pSteamGameServer,pchGameData);
+}
+public override void SetRegion(string pszRegion)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetRegion(m_pSteamGameServer,pszRegion);
+}
+public override bool SendUserConnectAndAuthenticate(uint unIPClient,IntPtr pvAuthBlob,uint cubAuthBlobSize,ref CSteamID pSteamIDUser)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(m_pSteamGameServer,unIPClient,pvAuthBlob,cubAuthBlobSize,ref pSteamIDUser);
+ return result;
+}
+public override ulong CreateUnauthenticatedUserConnection()
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(m_pSteamGameServer);
+ return result;
+}
+public override void SendUserDisconnect(ulong steamIDUser)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SendUserDisconnect(m_pSteamGameServer,steamIDUser);
+}
+public override bool BUpdateUserData(ulong steamIDUser,string pchPlayerName,uint uScore)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServer_BUpdateUserData(m_pSteamGameServer,steamIDUser,pchPlayerName,uScore);
+ return result;
+}
+public override uint GetAuthSessionTicket(IntPtr pTicket,int cbMaxTicket,ref uint pcbTicket)
+{
+ CheckIfUsable();
+ pcbTicket = 0;
+ uint result = NativeEntrypoints.SteamAPI_ISteamGameServer_GetAuthSessionTicket(m_pSteamGameServer,pTicket,cbMaxTicket,ref pcbTicket);
+ return result;
+}
+public override uint BeginAuthSession(IntPtr pAuthTicket,int cbAuthTicket,ulong steamID)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamGameServer_BeginAuthSession(m_pSteamGameServer,pAuthTicket,cbAuthTicket,steamID);
+ return result;
+}
+public override void EndAuthSession(ulong steamID)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_EndAuthSession(m_pSteamGameServer,steamID);
+}
+public override void CancelAuthTicket(uint hAuthTicket)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_CancelAuthTicket(m_pSteamGameServer,hAuthTicket);
+}
+public override uint UserHasLicenseForApp(ulong steamID,uint appID)
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamGameServer_UserHasLicenseForApp(m_pSteamGameServer,steamID,appID);
+ return result;
+}
+public override bool RequestUserGroupStatus(ulong steamIDUser,ulong steamIDGroup)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServer_RequestUserGroupStatus(m_pSteamGameServer,steamIDUser,steamIDGroup);
+ return result;
+}
+public override void GetGameplayStats()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_GetGameplayStats(m_pSteamGameServer);
+}
+public override ulong GetServerReputation()
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamGameServer_GetServerReputation(m_pSteamGameServer);
+ return result;
+}
+public override uint GetPublicIP()
+{
+ CheckIfUsable();
+ uint result = NativeEntrypoints.SteamAPI_ISteamGameServer_GetPublicIP(m_pSteamGameServer);
+ return result;
+}
+public override bool HandleIncomingPacket(IntPtr pData,int cbData,uint srcIP,char srcPort)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServer_HandleIncomingPacket(m_pSteamGameServer,pData,cbData,srcIP,srcPort);
+ return result;
+}
+public override int GetNextOutgoingPacket(IntPtr pOut,int cbMaxOut,ref uint pNetAdr,ref char pPort)
+{
+ CheckIfUsable();
+ pNetAdr = 0;
+ pPort = (char) 0;
+ int result = NativeEntrypoints.SteamAPI_ISteamGameServer_GetNextOutgoingPacket(m_pSteamGameServer,pOut,cbMaxOut,ref pNetAdr,ref pPort);
+ return result;
+}
+public override void EnableHeartbeats(bool bActive)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_EnableHeartbeats(m_pSteamGameServer,bActive);
+}
+public override void SetHeartbeatInterval(int iHeartbeatInterval)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_SetHeartbeatInterval(m_pSteamGameServer,iHeartbeatInterval);
+}
+public override void ForceHeartbeat()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_ISteamGameServer_ForceHeartbeat(m_pSteamGameServer);
+}
+public override ulong AssociateWithClan(ulong steamIDClan)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamGameServer_AssociateWithClan(m_pSteamGameServer,steamIDClan);
+ return result;
+}
+public override ulong ComputeNewPlayerCompatibility(ulong steamIDNewPlayer)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(m_pSteamGameServer,steamIDNewPlayer);
+ return result;
+}
+}
+
+
+public class CSteamGameServerStats : ISteamGameServerStats
+{
+public CSteamGameServerStats(IntPtr SteamGameServerStats)
+{
+ m_pSteamGameServerStats = SteamGameServerStats;
+}
+IntPtr m_pSteamGameServerStats;
+
+public override IntPtr GetIntPtr() { return m_pSteamGameServerStats; }
+
+private void CheckIfUsable()
+{
+ if (m_pSteamGameServerStats == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override ulong RequestUserStats(ulong steamIDUser)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_RequestUserStats(m_pSteamGameServerStats,steamIDUser);
+ return result;
+}
+public override bool GetUserStat(ulong steamIDUser,string pchName,ref int pData)
+{
+ CheckIfUsable();
+ pData = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_GetUserStat(m_pSteamGameServerStats,steamIDUser,pchName,ref pData);
+ return result;
+}
+public override bool GetUserStat0(ulong steamIDUser,string pchName,ref float pData)
+{
+ CheckIfUsable();
+ pData = 0;
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_GetUserStat0(m_pSteamGameServerStats,steamIDUser,pchName,ref pData);
+ return result;
+}
+public override bool GetUserAchievement(ulong steamIDUser,string pchName,ref bool pbAchieved)
+{
+ CheckIfUsable();
+ pbAchieved = false;
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_GetUserAchievement(m_pSteamGameServerStats,steamIDUser,pchName,ref pbAchieved);
+ return result;
+}
+public override bool SetUserStat(ulong steamIDUser,string pchName,int nData)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_SetUserStat(m_pSteamGameServerStats,steamIDUser,pchName,nData);
+ return result;
+}
+public override bool SetUserStat0(ulong steamIDUser,string pchName,float fData)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_SetUserStat0(m_pSteamGameServerStats,steamIDUser,pchName,fData);
+ return result;
+}
+public override bool UpdateUserAvgRateStat(ulong steamIDUser,string pchName,float flCountThisSession,double dSessionLength)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(m_pSteamGameServerStats,steamIDUser,pchName,flCountThisSession,dSessionLength);
+ return result;
+}
+public override bool SetUserAchievement(ulong steamIDUser,string pchName)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_SetUserAchievement(m_pSteamGameServerStats,steamIDUser,pchName);
+ return result;
+}
+public override bool ClearUserAchievement(ulong steamIDUser,string pchName)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_ClearUserAchievement(m_pSteamGameServerStats,steamIDUser,pchName);
+ return result;
+}
+public override ulong StoreUserStats(ulong steamIDUser)
+{
+ CheckIfUsable();
+ ulong result = NativeEntrypoints.SteamAPI_ISteamGameServerStats_StoreUserStats(m_pSteamGameServerStats,steamIDUser);
+ return result;
+}
+}
+
+
+public class CUserStatsReceived_t_Callback
+{
+ public CUserStatsReceived_t_Callback() { }
+ ~CUserStatsReceived_t_Callback()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CUserStatsReceived_t_RemoveCallback(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(Valve.Interop.NativeEntrypoints.SteamAPI_UserStatsReceived_t_Callback func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CUserStatsReceived_t_RemoveCallback(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CUserStatsReceived_t_SetCallback(func);
+ }
+}
+public class CGetOPFSettingsResult_t_Callback
+{
+ public CGetOPFSettingsResult_t_Callback() { }
+ ~CGetOPFSettingsResult_t_Callback()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGetOPFSettingsResult_t_RemoveCallback(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(Valve.Interop.NativeEntrypoints.SteamAPI_GetOPFSettingsResult_t_Callback func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGetOPFSettingsResult_t_RemoveCallback(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CGetOPFSettingsResult_t_SetCallback(func);
+ }
+}
+public class CRemoteStorageFileReadAsyncComplete_t_CallResult
+{
+ public CRemoteStorageFileReadAsyncComplete_t_CallResult() { }
+ ~CRemoteStorageFileReadAsyncComplete_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageFileReadAsyncComplete_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageFileReadAsyncComplete_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageFileReadAsyncComplete_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageFileReadAsyncComplete_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageGetPublishedItemVoteDetailsResult_t_CallResult
+{
+ public CRemoteStorageGetPublishedItemVoteDetailsResult_t_CallResult() { }
+ ~CRemoteStorageGetPublishedItemVoteDetailsResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageGetPublishedItemVoteDetailsResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageGetPublishedItemVoteDetailsResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageGetPublishedItemVoteDetailsResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageGetPublishedItemVoteDetailsResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CFileDetailsResult_t_CallResult
+{
+ public CFileDetailsResult_t_CallResult() { }
+ ~CFileDetailsResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CFileDetailsResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_FileDetailsResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CFileDetailsResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CFileDetailsResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CGSStatsStored_t_CallResult
+{
+ public CGSStatsStored_t_CallResult() { }
+ ~CGSStatsStored_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGSStatsStored_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_GSStatsStored_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGSStatsStored_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CGSStatsStored_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CStartPlaytimeTrackingResult_t_CallResult
+{
+ public CStartPlaytimeTrackingResult_t_CallResult() { }
+ ~CStartPlaytimeTrackingResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CStartPlaytimeTrackingResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_StartPlaytimeTrackingResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CStartPlaytimeTrackingResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CStartPlaytimeTrackingResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CFriendsGetFollowerCount_t_CallResult
+{
+ public CFriendsGetFollowerCount_t_CallResult() { }
+ ~CFriendsGetFollowerCount_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CFriendsGetFollowerCount_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_FriendsGetFollowerCount_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CFriendsGetFollowerCount_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CFriendsGetFollowerCount_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CFriendsIsFollowing_t_CallResult
+{
+ public CFriendsIsFollowing_t_CallResult() { }
+ ~CFriendsIsFollowing_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CFriendsIsFollowing_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_FriendsIsFollowing_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CFriendsIsFollowing_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CFriendsIsFollowing_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CLobbyMatchList_t_CallResult
+{
+ public CLobbyMatchList_t_CallResult() { }
+ ~CLobbyMatchList_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLobbyMatchList_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_LobbyMatchList_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLobbyMatchList_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CLobbyMatchList_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageUpdatePublishedFileResult_t_CallResult
+{
+ public CRemoteStorageUpdatePublishedFileResult_t_CallResult() { }
+ ~CRemoteStorageUpdatePublishedFileResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageUpdatePublishedFileResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageUpdatePublishedFileResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageUpdatePublishedFileResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageUpdatePublishedFileResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CStoreAuthURLResponse_t_CallResult
+{
+ public CStoreAuthURLResponse_t_CallResult() { }
+ ~CStoreAuthURLResponse_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CStoreAuthURLResponse_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_StoreAuthURLResponse_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CStoreAuthURLResponse_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CStoreAuthURLResponse_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CLobbyCreated_t_CallResult
+{
+ public CLobbyCreated_t_CallResult() { }
+ ~CLobbyCreated_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLobbyCreated_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_LobbyCreated_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLobbyCreated_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CLobbyCreated_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageFileWriteAsyncComplete_t_CallResult
+{
+ public CRemoteStorageFileWriteAsyncComplete_t_CallResult() { }
+ ~CRemoteStorageFileWriteAsyncComplete_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageFileWriteAsyncComplete_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageFileWriteAsyncComplete_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageFileWriteAsyncComplete_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageFileWriteAsyncComplete_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageDeletePublishedFileResult_t_CallResult
+{
+ public CRemoteStorageDeletePublishedFileResult_t_CallResult() { }
+ ~CRemoteStorageDeletePublishedFileResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageDeletePublishedFileResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageDeletePublishedFileResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageDeletePublishedFileResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageDeletePublishedFileResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageGetPublishedFileDetailsResult_t_CallResult
+{
+ public CRemoteStorageGetPublishedFileDetailsResult_t_CallResult() { }
+ ~CRemoteStorageGetPublishedFileDetailsResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageGetPublishedFileDetailsResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageGetPublishedFileDetailsResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageGetPublishedFileDetailsResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageGetPublishedFileDetailsResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CAddUGCDependencyResult_t_CallResult
+{
+ public CAddUGCDependencyResult_t_CallResult() { }
+ ~CAddUGCDependencyResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CAddUGCDependencyResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_AddUGCDependencyResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CAddUGCDependencyResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CAddUGCDependencyResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageDownloadUGCResult_t_CallResult
+{
+ public CRemoteStorageDownloadUGCResult_t_CallResult() { }
+ ~CRemoteStorageDownloadUGCResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageDownloadUGCResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageDownloadUGCResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageDownloadUGCResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageDownloadUGCResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CSteamUGCQueryCompleted_t_CallResult
+{
+ public CSteamUGCQueryCompleted_t_CallResult() { }
+ ~CSteamUGCQueryCompleted_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSteamUGCQueryCompleted_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_SteamUGCQueryCompleted_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSteamUGCQueryCompleted_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CSteamUGCQueryCompleted_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageFileShareResult_t_CallResult
+{
+ public CRemoteStorageFileShareResult_t_CallResult() { }
+ ~CRemoteStorageFileShareResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageFileShareResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageFileShareResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageFileShareResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageFileShareResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CLobbyEnter_t_CallResult
+{
+ public CLobbyEnter_t_CallResult() { }
+ ~CLobbyEnter_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLobbyEnter_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_LobbyEnter_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLobbyEnter_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CLobbyEnter_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CSubmitItemUpdateResult_t_CallResult
+{
+ public CSubmitItemUpdateResult_t_CallResult() { }
+ ~CSubmitItemUpdateResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSubmitItemUpdateResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_SubmitItemUpdateResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSubmitItemUpdateResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CSubmitItemUpdateResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CNumberOfCurrentPlayers_t_CallResult
+{
+ public CNumberOfCurrentPlayers_t_CallResult() { }
+ ~CNumberOfCurrentPlayers_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CNumberOfCurrentPlayers_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_NumberOfCurrentPlayers_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CNumberOfCurrentPlayers_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CNumberOfCurrentPlayers_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CGSStatsReceived_t_CallResult
+{
+ public CGSStatsReceived_t_CallResult() { }
+ ~CGSStatsReceived_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGSStatsReceived_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_GSStatsReceived_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGSStatsReceived_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CGSStatsReceived_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CHTML_BrowserReady_t_CallResult
+{
+ public CHTML_BrowserReady_t_CallResult() { }
+ ~CHTML_BrowserReady_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CHTML_BrowserReady_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_HTML_BrowserReady_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CHTML_BrowserReady_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CHTML_BrowserReady_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CLeaderboardScoresDownloaded_t_CallResult
+{
+ public CLeaderboardScoresDownloaded_t_CallResult() { }
+ ~CLeaderboardScoresDownloaded_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLeaderboardScoresDownloaded_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_LeaderboardScoresDownloaded_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLeaderboardScoresDownloaded_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CLeaderboardScoresDownloaded_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageUpdateUserPublishedItemVoteResult_t_CallResult
+{
+ public CRemoteStorageUpdateUserPublishedItemVoteResult_t_CallResult() { }
+ ~CRemoteStorageUpdateUserPublishedItemVoteResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageUpdateUserPublishedItemVoteResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageUpdateUserPublishedItemVoteResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageUpdateUserPublishedItemVoteResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageUpdateUserPublishedItemVoteResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageEnumerateUserSubscribedFilesResult_t_CallResult
+{
+ public CRemoteStorageEnumerateUserSubscribedFilesResult_t_CallResult() { }
+ ~CRemoteStorageEnumerateUserSubscribedFilesResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageEnumerateUserSubscribedFilesResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageEnumerateUserSubscribedFilesResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageEnumerateUserSubscribedFilesResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageEnumerateUserSubscribedFilesResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CCreateItemResult_t_CallResult
+{
+ public CCreateItemResult_t_CallResult() { }
+ ~CCreateItemResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CCreateItemResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_CreateItemResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CCreateItemResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CCreateItemResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CSetUserItemVoteResult_t_CallResult
+{
+ public CSetUserItemVoteResult_t_CallResult() { }
+ ~CSetUserItemVoteResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSetUserItemVoteResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_SetUserItemVoteResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSetUserItemVoteResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CSetUserItemVoteResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CComputeNewPlayerCompatibilityResult_t_CallResult
+{
+ public CComputeNewPlayerCompatibilityResult_t_CallResult() { }
+ ~CComputeNewPlayerCompatibilityResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CComputeNewPlayerCompatibilityResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_ComputeNewPlayerCompatibilityResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CComputeNewPlayerCompatibilityResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CComputeNewPlayerCompatibilityResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CLeaderboardScoreUploaded_t_CallResult
+{
+ public CLeaderboardScoreUploaded_t_CallResult() { }
+ ~CLeaderboardScoreUploaded_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLeaderboardScoreUploaded_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_LeaderboardScoreUploaded_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLeaderboardScoreUploaded_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CLeaderboardScoreUploaded_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CGlobalAchievementPercentagesReady_t_CallResult
+{
+ public CGlobalAchievementPercentagesReady_t_CallResult() { }
+ ~CGlobalAchievementPercentagesReady_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGlobalAchievementPercentagesReady_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_GlobalAchievementPercentagesReady_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGlobalAchievementPercentagesReady_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CGlobalAchievementPercentagesReady_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CGlobalStatsReceived_t_CallResult
+{
+ public CGlobalStatsReceived_t_CallResult() { }
+ ~CGlobalStatsReceived_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGlobalStatsReceived_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_GlobalStatsReceived_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGlobalStatsReceived_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CGlobalStatsReceived_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_CallResult
+{
+ public CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_CallResult() { }
+ ~CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageEnumeratePublishedFilesByUserActionResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageEnumeratePublishedFilesByUserActionResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CClanOfficerListResponse_t_CallResult
+{
+ public CClanOfficerListResponse_t_CallResult() { }
+ ~CClanOfficerListResponse_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CClanOfficerListResponse_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_ClanOfficerListResponse_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CClanOfficerListResponse_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CClanOfficerListResponse_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStoragePublishFileProgress_t_CallResult
+{
+ public CRemoteStoragePublishFileProgress_t_CallResult() { }
+ ~CRemoteStoragePublishFileProgress_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStoragePublishFileProgress_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStoragePublishFileProgress_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStoragePublishFileProgress_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStoragePublishFileProgress_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageEnumerateWorkshopFilesResult_t_CallResult
+{
+ public CRemoteStorageEnumerateWorkshopFilesResult_t_CallResult() { }
+ ~CRemoteStorageEnumerateWorkshopFilesResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageEnumerateWorkshopFilesResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageEnumerateWorkshopFilesResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageEnumerateWorkshopFilesResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageEnumerateWorkshopFilesResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoveUGCDependencyResult_t_CallResult
+{
+ public CRemoveUGCDependencyResult_t_CallResult() { }
+ ~CRemoveUGCDependencyResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoveUGCDependencyResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoveUGCDependencyResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoveUGCDependencyResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoveUGCDependencyResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CGSReputation_t_CallResult
+{
+ public CGSReputation_t_CallResult() { }
+ ~CGSReputation_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGSReputation_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_GSReputation_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGSReputation_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CGSReputation_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CUserFavoriteItemsListChanged_t_CallResult
+{
+ public CUserFavoriteItemsListChanged_t_CallResult() { }
+ ~CUserFavoriteItemsListChanged_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CUserFavoriteItemsListChanged_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_UserFavoriteItemsListChanged_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CUserFavoriteItemsListChanged_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CUserFavoriteItemsListChanged_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CEncryptedAppTicketResponse_t_CallResult
+{
+ public CEncryptedAppTicketResponse_t_CallResult() { }
+ ~CEncryptedAppTicketResponse_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CEncryptedAppTicketResponse_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_EncryptedAppTicketResponse_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CEncryptedAppTicketResponse_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CEncryptedAppTicketResponse_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageSetUserPublishedFileActionResult_t_CallResult
+{
+ public CRemoteStorageSetUserPublishedFileActionResult_t_CallResult() { }
+ ~CRemoteStorageSetUserPublishedFileActionResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageSetUserPublishedFileActionResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageSetUserPublishedFileActionResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageSetUserPublishedFileActionResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageSetUserPublishedFileActionResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CStopPlaytimeTrackingResult_t_CallResult
+{
+ public CStopPlaytimeTrackingResult_t_CallResult() { }
+ ~CStopPlaytimeTrackingResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CStopPlaytimeTrackingResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_StopPlaytimeTrackingResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CStopPlaytimeTrackingResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CStopPlaytimeTrackingResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageEnumerateUserPublishedFilesResult_t_CallResult
+{
+ public CRemoteStorageEnumerateUserPublishedFilesResult_t_CallResult() { }
+ ~CRemoteStorageEnumerateUserPublishedFilesResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageEnumerateUserPublishedFilesResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageEnumerateUserPublishedFilesResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageEnumerateUserPublishedFilesResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageEnumerateUserPublishedFilesResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CFriendsEnumerateFollowingList_t_CallResult
+{
+ public CFriendsEnumerateFollowingList_t_CallResult() { }
+ ~CFriendsEnumerateFollowingList_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CFriendsEnumerateFollowingList_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_FriendsEnumerateFollowingList_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CFriendsEnumerateFollowingList_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CFriendsEnumerateFollowingList_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageSubscribePublishedFileResult_t_CallResult
+{
+ public CRemoteStorageSubscribePublishedFileResult_t_CallResult() { }
+ ~CRemoteStorageSubscribePublishedFileResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageSubscribePublishedFileResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageSubscribePublishedFileResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageSubscribePublishedFileResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageSubscribePublishedFileResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CGetUserItemVoteResult_t_CallResult
+{
+ public CGetUserItemVoteResult_t_CallResult() { }
+ ~CGetUserItemVoteResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGetUserItemVoteResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_GetUserItemVoteResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CGetUserItemVoteResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CGetUserItemVoteResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CAssociateWithClanResult_t_CallResult
+{
+ public CAssociateWithClanResult_t_CallResult() { }
+ ~CAssociateWithClanResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CAssociateWithClanResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_AssociateWithClanResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CAssociateWithClanResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CAssociateWithClanResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CLeaderboardUGCSet_t_CallResult
+{
+ public CLeaderboardUGCSet_t_CallResult() { }
+ ~CLeaderboardUGCSet_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLeaderboardUGCSet_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_LeaderboardUGCSet_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLeaderboardUGCSet_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CLeaderboardUGCSet_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CCheckFileSignature_t_CallResult
+{
+ public CCheckFileSignature_t_CallResult() { }
+ ~CCheckFileSignature_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CCheckFileSignature_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_CheckFileSignature_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CCheckFileSignature_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CCheckFileSignature_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CRemoteStorageUnsubscribePublishedFileResult_t_CallResult
+{
+ public CRemoteStorageUnsubscribePublishedFileResult_t_CallResult() { }
+ ~CRemoteStorageUnsubscribePublishedFileResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageUnsubscribePublishedFileResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_RemoteStorageUnsubscribePublishedFileResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CRemoteStorageUnsubscribePublishedFileResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CRemoteStorageUnsubscribePublishedFileResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CSetPersonaNameResponse_t_CallResult
+{
+ public CSetPersonaNameResponse_t_CallResult() { }
+ ~CSetPersonaNameResponse_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSetPersonaNameResponse_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_SetPersonaNameResponse_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSetPersonaNameResponse_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CSetPersonaNameResponse_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CUserStatsReceived_t_CallResult
+{
+ public CUserStatsReceived_t_CallResult() { }
+ ~CUserStatsReceived_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CUserStatsReceived_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_UserStatsReceived_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CUserStatsReceived_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CUserStatsReceived_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CSteamInventoryEligiblePromoItemDefIDs_t_CallResult
+{
+ public CSteamInventoryEligiblePromoItemDefIDs_t_CallResult() { }
+ ~CSteamInventoryEligiblePromoItemDefIDs_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSteamInventoryEligiblePromoItemDefIDs_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_SteamInventoryEligiblePromoItemDefIDs_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CSteamInventoryEligiblePromoItemDefIDs_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CSteamInventoryEligiblePromoItemDefIDs_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CJoinClanChatRoomCompletionResult_t_CallResult
+{
+ public CJoinClanChatRoomCompletionResult_t_CallResult() { }
+ ~CJoinClanChatRoomCompletionResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CJoinClanChatRoomCompletionResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_JoinClanChatRoomCompletionResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CJoinClanChatRoomCompletionResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CJoinClanChatRoomCompletionResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class CLeaderboardFindResult_t_CallResult
+{
+ public CLeaderboardFindResult_t_CallResult() { }
+ ~CLeaderboardFindResult_t_CallResult()
+ {
+ if(m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLeaderboardFindResult_t_RemoveCallResult(m_Handle);
+ }
+ }
+ ulong m_Handle = 0;
+ public void Set(ulong hAPICall, Valve.Interop.NativeEntrypoints.SteamAPI_LeaderboardFindResult_t_CallResult func)
+ {
+ if (m_Handle != 0)
+ {
+ Valve.Interop.NativeEntrypoints.CLeaderboardFindResult_t_RemoveCallResult(m_Handle);
+ }
+ m_Handle = Valve.Interop.NativeEntrypoints.CLeaderboardFindResult_t_SetCallResult(hAPICall, func);
+ }
+}
+public class SteamAPIInterop
+{
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_RestartAppIfNecessary")]
+internal static extern void SteamAPI_RestartAppIfNecessary(uint unOwnAppID );
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_Init")]
+internal static extern void SteamAPI_Init();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_RunCallbacks")]
+internal static extern void SteamAPI_RunCallbacks();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_RegisterCallback")]
+internal static extern void SteamAPI_RegisterCallback(IntPtr pCallback, int iCallback);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_UnregisterCallback")]
+internal static extern void SteamAPI_UnregisterCallback(IntPtr pCallback);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamClient")]
+internal static extern IntPtr SteamClient();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamUser")]
+internal static extern IntPtr SteamUser();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamFriends")]
+internal static extern IntPtr SteamFriends();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamUtils")]
+internal static extern IntPtr SteamUtils();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamMatchmaking")]
+internal static extern IntPtr SteamMatchmaking();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamMatchmakingServerListResponse")]
+internal static extern IntPtr SteamMatchmakingServerListResponse();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamMatchmakingPingResponse")]
+internal static extern IntPtr SteamMatchmakingPingResponse();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamMatchmakingPlayersResponse")]
+internal static extern IntPtr SteamMatchmakingPlayersResponse();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamMatchmakingRulesResponse")]
+internal static extern IntPtr SteamMatchmakingRulesResponse();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamMatchmakingServers")]
+internal static extern IntPtr SteamMatchmakingServers();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamRemoteStorage")]
+internal static extern IntPtr SteamRemoteStorage();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamUserStats")]
+internal static extern IntPtr SteamUserStats();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamApps")]
+internal static extern IntPtr SteamApps();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamNetworking")]
+internal static extern IntPtr SteamNetworking();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamScreenshots")]
+internal static extern IntPtr SteamScreenshots();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamMusic")]
+internal static extern IntPtr SteamMusic();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamMusicRemote")]
+internal static extern IntPtr SteamMusicRemote();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamHTTP")]
+internal static extern IntPtr SteamHTTP();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamUnifiedMessages")]
+internal static extern IntPtr SteamUnifiedMessages();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamController")]
+internal static extern IntPtr SteamController();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamUGC")]
+internal static extern IntPtr SteamUGC();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAppList")]
+internal static extern IntPtr SteamAppList();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamHTMLSurface")]
+internal static extern IntPtr SteamHTMLSurface();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamInventory")]
+internal static extern IntPtr SteamInventory();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamVideo")]
+internal static extern IntPtr SteamVideo();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamGameServer")]
+internal static extern IntPtr SteamGameServer();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamGameServerStats")]
+internal static extern IntPtr SteamGameServerStats();
+}
+
+
+public enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ k_EUniverseMax = 5,
+}
+public enum EResult
+{
+ k_EResultOK = 1,
+ k_EResultFail = 2,
+ k_EResultNoConnection = 3,
+ k_EResultInvalidPassword = 5,
+ k_EResultLoggedInElsewhere = 6,
+ k_EResultInvalidProtocolVer = 7,
+ k_EResultInvalidParam = 8,
+ k_EResultFileNotFound = 9,
+ k_EResultBusy = 10,
+ k_EResultInvalidState = 11,
+ k_EResultInvalidName = 12,
+ k_EResultInvalidEmail = 13,
+ k_EResultDuplicateName = 14,
+ k_EResultAccessDenied = 15,
+ k_EResultTimeout = 16,
+ k_EResultBanned = 17,
+ k_EResultAccountNotFound = 18,
+ k_EResultInvalidSteamID = 19,
+ k_EResultServiceUnavailable = 20,
+ k_EResultNotLoggedOn = 21,
+ k_EResultPending = 22,
+ k_EResultEncryptionFailure = 23,
+ k_EResultInsufficientPrivilege = 24,
+ k_EResultLimitExceeded = 25,
+ k_EResultRevoked = 26,
+ k_EResultExpired = 27,
+ k_EResultAlreadyRedeemed = 28,
+ k_EResultDuplicateRequest = 29,
+ k_EResultAlreadyOwned = 30,
+ k_EResultIPNotFound = 31,
+ k_EResultPersistFailed = 32,
+ k_EResultLockingFailed = 33,
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39,
+ k_EResultBlocked = 40,
+ k_EResultIgnored = 41,
+ k_EResultNoMatch = 42,
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44,
+ k_EResultAccountNotFeatured = 45,
+ k_EResultAdministratorOK = 46,
+ k_EResultContentVersion = 47,
+ k_EResultTryAnotherCM = 48,
+ k_EResultPasswordRequiredToKickSession = 49,
+ k_EResultAlreadyLoggedInElsewhere = 50,
+ k_EResultSuspended = 51,
+ k_EResultCancelled = 52,
+ k_EResultDataCorruption = 53,
+ k_EResultDiskFull = 54,
+ k_EResultRemoteCallFailed = 55,
+ k_EResultPasswordUnset = 56,
+ k_EResultExternalAccountUnlinked = 57,
+ k_EResultPSNTicketInvalid = 58,
+ k_EResultExternalAccountAlreadyLinked = 59,
+ k_EResultRemoteFileConflict = 60,
+ k_EResultIllegalPassword = 61,
+ k_EResultSameAsPreviousValue = 62,
+ k_EResultAccountLogonDenied = 63,
+ k_EResultCannotUseOldPassword = 64,
+ k_EResultInvalidLoginAuthCode = 65,
+ k_EResultAccountLogonDeniedNoMail = 66,
+ k_EResultHardwareNotCapableOfIPT = 67,
+ k_EResultIPTInitError = 68,
+ k_EResultParentalControlRestricted = 69,
+ k_EResultFacebookQueryError = 70,
+ k_EResultExpiredLoginAuthCode = 71,
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76,
+ k_EResultRequirePasswordReEntry = 77,
+ k_EResultValueOutOfRange = 78,
+ k_EResultUnexpectedError = 79,
+ k_EResultDisabled = 80,
+ k_EResultInvalidCEGSubmission = 81,
+ k_EResultRestrictedDevice = 82,
+ k_EResultRegionLocked = 83,
+ k_EResultRateLimitExceeded = 84,
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85,
+ k_EResultItemDeleted = 86,
+ k_EResultAccountLoginDeniedThrottle = 87,
+ k_EResultTwoFactorCodeMismatch = 88,
+ k_EResultTwoFactorActivationCodeMismatch = 89,
+ k_EResultAccountAssociatedToMultiplePartners = 90,
+ k_EResultNotModified = 91,
+ k_EResultNoMobileDevice = 92,
+ k_EResultTimeNotSynced = 93,
+ k_EResultSmsCodeFailed = 94,
+ k_EResultAccountLimitExceeded = 95,
+ k_EResultAccountActivityLimitExceeded = 96,
+ k_EResultPhoneActivityLimitExceeded = 97,
+ k_EResultRefundToWallet = 98,
+ k_EResultEmailSendFailure = 99,
+ k_EResultNotSettled = 100,
+ k_EResultNeedCaptcha = 101,
+ k_EResultGSLTDenied = 102,
+ k_EResultGSOwnerDenied = 103,
+ k_EResultInvalidItemType = 104,
+ k_EResultIPBanned = 105,
+ k_EResultGSLTExpired = 106,
+ k_EResultInsufficientFunds = 107,
+ k_EResultTooManyPending = 108,
+}
+public enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+ k_EVoiceResultReceiverOutOfDate = 8,
+ k_EVoiceResultReceiverDidNotAnswer = 9,
+}
+public enum EDenyReason
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+}
+public enum EBeginAuthSessionResult
+{
+ k_EBeginAuthSessionResultOK = 0,
+ k_EBeginAuthSessionResultInvalidTicket = 1,
+ k_EBeginAuthSessionResultDuplicateRequest = 2,
+ k_EBeginAuthSessionResultInvalidVersion = 3,
+ k_EBeginAuthSessionResultGameMismatch = 4,
+ k_EBeginAuthSessionResultExpiredTicket = 5,
+}
+public enum EAuthSessionResponse
+{
+ k_EAuthSessionResponseOK = 0,
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1,
+ k_EAuthSessionResponseNoLicenseOrExpired = 2,
+ k_EAuthSessionResponseVACBanned = 3,
+ k_EAuthSessionResponseLoggedInElseWhere = 4,
+ k_EAuthSessionResponseVACCheckTimedOut = 5,
+ k_EAuthSessionResponseAuthTicketCanceled = 6,
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7,
+ k_EAuthSessionResponseAuthTicketInvalid = 8,
+ k_EAuthSessionResponsePublisherIssuedBan = 9,
+}
+public enum EUserHasLicenseForAppResult
+{
+ k_EUserHasLicenseResultHasLicense = 0,
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1,
+ k_EUserHasLicenseResultNoAuth = 2,
+}
+public enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1,
+ k_EAccountTypeMultiseat = 2,
+ k_EAccountTypeGameServer = 3,
+ k_EAccountTypeAnonGameServer = 4,
+ k_EAccountTypePending = 5,
+ k_EAccountTypeContentServer = 6,
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9,
+ k_EAccountTypeAnonUser = 10,
+ k_EAccountTypeMax = 11,
+}
+public enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0,
+ k_EAppReleaseState_Unavailable = 1,
+ k_EAppReleaseState_Prerelease = 2,
+ k_EAppReleaseState_PreloadOnly = 3,
+ k_EAppReleaseState_Released = 4,
+}
+public enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0,
+ k_EAppOwnershipFlags_OwnsLicense = 1,
+ k_EAppOwnershipFlags_FreeLicense = 2,
+ k_EAppOwnershipFlags_RegionRestricted = 4,
+ k_EAppOwnershipFlags_LowViolence = 8,
+ k_EAppOwnershipFlags_InvalidPlatform = 16,
+ k_EAppOwnershipFlags_SharedLicense = 32,
+ k_EAppOwnershipFlags_FreeWeekend = 64,
+ k_EAppOwnershipFlags_RetailLicense = 128,
+ k_EAppOwnershipFlags_LicenseLocked = 256,
+ k_EAppOwnershipFlags_LicensePending = 512,
+ k_EAppOwnershipFlags_LicenseExpired = 1024,
+ k_EAppOwnershipFlags_LicensePermanent = 2048,
+ k_EAppOwnershipFlags_LicenseRecurring = 4096,
+ k_EAppOwnershipFlags_LicenseCanceled = 8192,
+ k_EAppOwnershipFlags_AutoGrant = 16384,
+ k_EAppOwnershipFlags_PendingGift = 32768,
+ k_EAppOwnershipFlags_RentalNotActivated = 65536,
+ k_EAppOwnershipFlags_Rental = 131072,
+ k_EAppOwnershipFlags_SiteLicense = 262144,
+}
+public enum EAppType
+{
+ k_EAppType_Invalid = 0,
+ k_EAppType_Game = 1,
+ k_EAppType_Application = 2,
+ k_EAppType_Tool = 4,
+ k_EAppType_Demo = 8,
+ k_EAppType_Media_DEPRECATED = 16,
+ k_EAppType_DLC = 32,
+ k_EAppType_Guide = 64,
+ k_EAppType_Driver = 128,
+ k_EAppType_Config = 256,
+ k_EAppType_Hardware = 512,
+ k_EAppType_Franchise = 1024,
+ k_EAppType_Video = 2048,
+ k_EAppType_Plugin = 4096,
+ k_EAppType_Music = 8192,
+ k_EAppType_Series = 16384,
+ k_EAppType_Shortcut = 1073741824,
+ k_EAppType_DepotOnly = -2147483648,
+}
+public enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+ k_ESteamUserStatTypeMAX = 6,
+}
+public enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1,
+ k_EChatEntryTypeTyping = 2,
+ k_EChatEntryTypeInviteGame = 3,
+ k_EChatEntryTypeEmote = 4,
+ k_EChatEntryTypeLeftConversation = 6,
+ k_EChatEntryTypeEntered = 7,
+ k_EChatEntryTypeWasKicked = 8,
+ k_EChatEntryTypeWasBanned = 9,
+ k_EChatEntryTypeDisconnected = 10,
+ k_EChatEntryTypeHistoricalChat = 11,
+ k_EChatEntryTypeLinkBlocked = 14,
+}
+public enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1,
+ k_EChatRoomEnterResponseDoesntExist = 2,
+ k_EChatRoomEnterResponseNotAllowed = 3,
+ k_EChatRoomEnterResponseFull = 4,
+ k_EChatRoomEnterResponseError = 5,
+ k_EChatRoomEnterResponseBanned = 6,
+ k_EChatRoomEnterResponseLimited = 7,
+ k_EChatRoomEnterResponseClanDisabled = 8,
+ k_EChatRoomEnterResponseCommunityBan = 9,
+ k_EChatRoomEnterResponseMemberBlockedYou = 10,
+ k_EChatRoomEnterResponseYouBlockedMember = 11,
+}
+public enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 4095,
+ k_EChatInstanceFlagClan = 524288,
+ k_EChatInstanceFlagLobby = 262144,
+ k_EChatInstanceFlagMMSLobby = 131072,
+}
+public enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1,
+ k_EMarketingMessageFlagsPlatformWindows = 2,
+ k_EMarketingMessageFlagsPlatformMac = 4,
+ k_EMarketingMessageFlagsPlatformLinux = 8,
+ k_EMarketingMessageFlagsPlatformRestrictions = 14,
+}
+public enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+}
+public enum EBroadcastUploadResult
+{
+ k_EBroadcastUploadResultNone = 0,
+ k_EBroadcastUploadResultOK = 1,
+ k_EBroadcastUploadResultInitFailed = 2,
+ k_EBroadcastUploadResultFrameFailed = 3,
+ k_EBroadcastUploadResultTimeout = 4,
+ k_EBroadcastUploadResultBandwidthExceeded = 5,
+ k_EBroadcastUploadResultLowFPS = 6,
+ k_EBroadcastUploadResultMissingKeyFrames = 7,
+ k_EBroadcastUploadResultNoConnection = 8,
+ k_EBroadcastUploadResultRelayFailed = 9,
+ k_EBroadcastUploadResultSettingsChanged = 10,
+ k_EBroadcastUploadResultMissingAudio = 11,
+ k_EBroadcastUploadResultTooFarBehind = 12,
+ k_EBroadcastUploadResultTranscodeBehind = 13,
+}
+public enum ELaunchOptionType
+{
+ k_ELaunchOptionType_None = 0,
+ k_ELaunchOptionType_Default = 1,
+ k_ELaunchOptionType_SafeMode = 2,
+ k_ELaunchOptionType_Multiplayer = 3,
+ k_ELaunchOptionType_Config = 4,
+ k_ELaunchOptionType_OpenVR = 5,
+ k_ELaunchOptionType_Server = 6,
+ k_ELaunchOptionType_Editor = 7,
+ k_ELaunchOptionType_Manual = 8,
+ k_ELaunchOptionType_Benchmark = 9,
+ k_ELaunchOptionType_Option1 = 10,
+ k_ELaunchOptionType_Option2 = 11,
+ k_ELaunchOptionType_Option3 = 12,
+ k_ELaunchOptionType_OculusVR = 13,
+ k_ELaunchOptionType_OpenVROverlay = 14,
+ k_ELaunchOptionType_OSVR = 15,
+ k_ELaunchOptionType_Dialog = 1000,
+}
+public enum EVRHMDType
+{
+ k_eEVRHMDType_None = -1,
+ k_eEVRHMDType_Unknown = 0,
+ k_eEVRHMDType_HTC_Dev = 1,
+ k_eEVRHMDType_HTC_VivePre = 2,
+ k_eEVRHMDType_HTC_Vive = 3,
+ k_eEVRHMDType_HTC_Unknown = 20,
+ k_eEVRHMDType_Oculus_DK1 = 21,
+ k_eEVRHMDType_Oculus_DK2 = 22,
+ k_eEVRHMDType_Oculus_Rift = 23,
+ k_eEVRHMDType_Oculus_Unknown = 40,
+}
+public enum EFailureType
+{
+ k_EFailureFlushedCallbackQueue = 0,
+ k_EFailurePipeFail = 1,
+}
+public enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1,
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5,
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested_DEPRECATED = 7,
+ k_EFriendRelationshipMax = 8,
+}
+public enum EPersonaState
+{
+ k_EPersonaStateOffline = 0,
+ k_EPersonaStateOnline = 1,
+ k_EPersonaStateBusy = 2,
+ k_EPersonaStateAway = 3,
+ k_EPersonaStateSnooze = 4,
+ k_EPersonaStateLookingToTrade = 5,
+ k_EPersonaStateLookingToPlay = 6,
+ k_EPersonaStateMax = 7,
+}
+public enum EFriendFlags
+{
+ k_EFriendFlagNone = 0,
+ k_EFriendFlagBlocked = 1,
+ k_EFriendFlagFriendshipRequested = 2,
+ k_EFriendFlagImmediate = 4,
+ k_EFriendFlagClanMember = 8,
+ k_EFriendFlagOnGameServer = 16,
+ k_EFriendFlagRequestingFriendship = 128,
+ k_EFriendFlagRequestingInfo = 256,
+ k_EFriendFlagIgnored = 512,
+ k_EFriendFlagIgnoredFriend = 1024,
+ k_EFriendFlagChatMember = 4096,
+ k_EFriendFlagAll = 65535,
+}
+public enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0,
+ k_nUserRestrictionUnknown = 1,
+ k_nUserRestrictionAnyChat = 2,
+ k_nUserRestrictionVoiceChat = 4,
+ k_nUserRestrictionGroupChat = 8,
+ k_nUserRestrictionRating = 16,
+ k_nUserRestrictionGameInvites = 32,
+ k_nUserRestrictionTrading = 64,
+}
+public enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+}
+public enum EPersonaChange
+{
+ k_EPersonaChangeName = 1,
+ k_EPersonaChangeStatus = 2,
+ k_EPersonaChangeComeOnline = 4,
+ k_EPersonaChangeGoneOffline = 8,
+ k_EPersonaChangeGamePlayed = 16,
+ k_EPersonaChangeGameServer = 32,
+ k_EPersonaChangeAvatar = 64,
+ k_EPersonaChangeJoinedSource = 128,
+ k_EPersonaChangeLeftSource = 256,
+ k_EPersonaChangeRelationshipChanged = 512,
+ k_EPersonaChangeNameFirstSet = 1024,
+ k_EPersonaChangeFacebookInfo = 2048,
+ k_EPersonaChangeNickname = 4096,
+ k_EPersonaChangeSteamLevel = 8192,
+}
+public enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1,
+ k_ESteamAPICallFailureSteamGone = 0,
+ k_ESteamAPICallFailureNetworkFailure = 1,
+ k_ESteamAPICallFailureInvalidHandle = 2,
+ k_ESteamAPICallFailureMismatchedCallback = 3,
+}
+public enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1,
+}
+public enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1,
+}
+public enum ECheckFileSignature
+{
+ k_ECheckFileSignatureInvalidSignature = 0,
+ k_ECheckFileSignatureValidSignature = 1,
+ k_ECheckFileSignatureFileNotFound = 2,
+ k_ECheckFileSignatureNoSignaturesFoundForThisApp = 3,
+ k_ECheckFileSignatureNoSignaturesFoundForThisFile = 4,
+}
+public enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond = 1,
+ eNoServersListedOnMasterServer = 2,
+}
+public enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0,
+ k_ELobbyTypeFriendsOnly = 1,
+ k_ELobbyTypePublic = 2,
+ k_ELobbyTypeInvisible = 3,
+}
+public enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+}
+public enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose = 0,
+ k_ELobbyDistanceFilterDefault = 1,
+ k_ELobbyDistanceFilterFar = 2,
+ k_ELobbyDistanceFilterWorldwide = 3,
+}
+public enum EChatMemberStateChange
+{
+ k_EChatMemberStateChangeEntered = 1,
+ k_EChatMemberStateChangeLeft = 2,
+ k_EChatMemberStateChangeDisconnected = 4,
+ k_EChatMemberStateChangeKicked = 8,
+ k_EChatMemberStateChangeBanned = 16,
+}
+public enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = 1,
+ k_ERemoteStoragePlatformOSX = 2,
+ k_ERemoteStoragePlatformPS3 = 4,
+ k_ERemoteStoragePlatformLinux = 8,
+ k_ERemoteStoragePlatformReserved2 = 16,
+ k_ERemoteStoragePlatformAll = -1,
+}
+public enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+}
+public enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+ k_EWorkshopFileTypeCommunity = 0,
+ k_EWorkshopFileTypeMicrotransaction = 1,
+ k_EWorkshopFileTypeCollection = 2,
+ k_EWorkshopFileTypeArt = 3,
+ k_EWorkshopFileTypeVideo = 4,
+ k_EWorkshopFileTypeScreenshot = 5,
+ k_EWorkshopFileTypeGame = 6,
+ k_EWorkshopFileTypeSoftware = 7,
+ k_EWorkshopFileTypeConcept = 8,
+ k_EWorkshopFileTypeWebGuide = 9,
+ k_EWorkshopFileTypeIntegratedGuide = 10,
+ k_EWorkshopFileTypeMerch = 11,
+ k_EWorkshopFileTypeControllerBinding = 12,
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13,
+ k_EWorkshopFileTypeSteamVideo = 14,
+ k_EWorkshopFileTypeGameManagedItem = 15,
+ k_EWorkshopFileTypeMax = 16,
+}
+public enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+ k_EWorkshopVoteLater = 3,
+}
+public enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+}
+public enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+}
+public enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1,
+}
+public enum EUGCReadAction
+{
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+ k_EUGCRead_ContinueReading = 1,
+ k_EUGCRead_Close = 2,
+}
+public enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3,
+}
+public enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1,
+ k_ELeaderboardSortMethodDescending = 2,
+}
+public enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1,
+ k_ELeaderboardDisplayTypeTimeSeconds = 2,
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3,
+}
+public enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1,
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2,
+}
+public enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+}
+public enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1,
+ k_EP2PSessionErrorNoRightsToApp = 2,
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3,
+ k_EP2PSessionErrorTimeout = 4,
+ k_EP2PSessionErrorMax = 5,
+}
+public enum EP2PSend
+{
+ k_EP2PSendUnreliable = 0,
+ k_EP2PSendUnreliableNoDelay = 1,
+ k_EP2PSendReliable = 2,
+ k_EP2PSendReliableWithBuffering = 3,
+}
+public enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+ k_ESNetSocketStateConnected = 1,
+ k_ESNetSocketStateInitiated = 10,
+ k_ESNetSocketStateLocalCandidatesFound = 11,
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,
+ k_ESNetSocketStateChallengeHandshake = 15,
+ k_ESNetSocketStateDisconnecting = 21,
+ k_ESNetSocketStateLocalDisconnect = 22,
+ k_ESNetSocketStateTimeoutDuringConnect = 23,
+ k_ESNetSocketStateRemoteEndDisconnected = 24,
+ k_ESNetSocketStateConnectionBroken = 25,
+}
+public enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+}
+public enum EVRScreenshotType
+{
+ k_EVRScreenshotType_None = 0,
+ k_EVRScreenshotType_Mono = 1,
+ k_EVRScreenshotType_Stereo = 2,
+ k_EVRScreenshotType_MonoCubemap = 3,
+ k_EVRScreenshotType_MonoPanorama = 4,
+ k_EVRScreenshotType_StereoPanorama = 5,
+}
+public enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3,
+}
+public enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET = 1,
+ k_EHTTPMethodHEAD = 2,
+ k_EHTTPMethodPOST = 3,
+ k_EHTTPMethodPUT = 4,
+ k_EHTTPMethodDELETE = 5,
+ k_EHTTPMethodOPTIONS = 6,
+ k_EHTTPMethodPATCH = 7,
+}
+public enum EHTTPStatusCode
+{
+ k_EHTTPStatusCodeInvalid = 0,
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401,
+ k_EHTTPStatusCode402PaymentRequired = 402,
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+ k_EHTTPStatusCode4xxUnknown = 418,
+ k_EHTTPStatusCode429TooManyRequests = 429,
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+ k_EHTTPStatusCode5xxUnknown = 599,
+}
+public enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left = 0,
+ k_ESteamControllerPad_Right = 1,
+}
+public enum EControllerSource
+{
+ k_EControllerSource_None = 0,
+ k_EControllerSource_LeftTrackpad = 1,
+ k_EControllerSource_RightTrackpad = 2,
+ k_EControllerSource_Joystick = 3,
+ k_EControllerSource_ABXY = 4,
+ k_EControllerSource_Switch = 5,
+ k_EControllerSource_LeftTrigger = 6,
+ k_EControllerSource_RightTrigger = 7,
+ k_EControllerSource_Gyro = 8,
+ k_EControllerSource_CenterTrackpad = 9,
+ k_EControllerSource_RightJoystick = 10,
+ k_EControllerSource_DPad = 11,
+ k_EControllerSource_Count = 12,
+}
+public enum EControllerSourceMode
+{
+ k_EControllerSourceMode_None = 0,
+ k_EControllerSourceMode_Dpad = 1,
+ k_EControllerSourceMode_Buttons = 2,
+ k_EControllerSourceMode_FourButtons = 3,
+ k_EControllerSourceMode_AbsoluteMouse = 4,
+ k_EControllerSourceMode_RelativeMouse = 5,
+ k_EControllerSourceMode_JoystickMove = 6,
+ k_EControllerSourceMode_JoystickMouse = 7,
+ k_EControllerSourceMode_JoystickCamera = 8,
+ k_EControllerSourceMode_ScrollWheel = 9,
+ k_EControllerSourceMode_Trigger = 10,
+ k_EControllerSourceMode_TouchMenu = 11,
+ k_EControllerSourceMode_MouseJoystick = 12,
+ k_EControllerSourceMode_MouseRegion = 13,
+ k_EControllerSourceMode_RadialMenu = 14,
+ k_EControllerSourceMode_SingleButton = 15,
+ k_EControllerSourceMode_Switches = 16,
+}
+public enum EControllerActionOrigin
+{
+ k_EControllerActionOrigin_None = 0,
+ k_EControllerActionOrigin_A = 1,
+ k_EControllerActionOrigin_B = 2,
+ k_EControllerActionOrigin_X = 3,
+ k_EControllerActionOrigin_Y = 4,
+ k_EControllerActionOrigin_LeftBumper = 5,
+ k_EControllerActionOrigin_RightBumper = 6,
+ k_EControllerActionOrigin_LeftGrip = 7,
+ k_EControllerActionOrigin_RightGrip = 8,
+ k_EControllerActionOrigin_Start = 9,
+ k_EControllerActionOrigin_Back = 10,
+ k_EControllerActionOrigin_LeftPad_Touch = 11,
+ k_EControllerActionOrigin_LeftPad_Swipe = 12,
+ k_EControllerActionOrigin_LeftPad_Click = 13,
+ k_EControllerActionOrigin_LeftPad_DPadNorth = 14,
+ k_EControllerActionOrigin_LeftPad_DPadSouth = 15,
+ k_EControllerActionOrigin_LeftPad_DPadWest = 16,
+ k_EControllerActionOrigin_LeftPad_DPadEast = 17,
+ k_EControllerActionOrigin_RightPad_Touch = 18,
+ k_EControllerActionOrigin_RightPad_Swipe = 19,
+ k_EControllerActionOrigin_RightPad_Click = 20,
+ k_EControllerActionOrigin_RightPad_DPadNorth = 21,
+ k_EControllerActionOrigin_RightPad_DPadSouth = 22,
+ k_EControllerActionOrigin_RightPad_DPadWest = 23,
+ k_EControllerActionOrigin_RightPad_DPadEast = 24,
+ k_EControllerActionOrigin_LeftTrigger_Pull = 25,
+ k_EControllerActionOrigin_LeftTrigger_Click = 26,
+ k_EControllerActionOrigin_RightTrigger_Pull = 27,
+ k_EControllerActionOrigin_RightTrigger_Click = 28,
+ k_EControllerActionOrigin_LeftStick_Move = 29,
+ k_EControllerActionOrigin_LeftStick_Click = 30,
+ k_EControllerActionOrigin_LeftStick_DPadNorth = 31,
+ k_EControllerActionOrigin_LeftStick_DPadSouth = 32,
+ k_EControllerActionOrigin_LeftStick_DPadWest = 33,
+ k_EControllerActionOrigin_LeftStick_DPadEast = 34,
+ k_EControllerActionOrigin_Gyro_Move = 35,
+ k_EControllerActionOrigin_Gyro_Pitch = 36,
+ k_EControllerActionOrigin_Gyro_Yaw = 37,
+ k_EControllerActionOrigin_Gyro_Roll = 38,
+ k_EControllerActionOrigin_PS4_X = 39,
+ k_EControllerActionOrigin_PS4_Circle = 40,
+ k_EControllerActionOrigin_PS4_Triangle = 41,
+ k_EControllerActionOrigin_PS4_Square = 42,
+ k_EControllerActionOrigin_PS4_LeftBumper = 43,
+ k_EControllerActionOrigin_PS4_RightBumper = 44,
+ k_EControllerActionOrigin_PS4_Options = 45,
+ k_EControllerActionOrigin_PS4_Share = 46,
+ k_EControllerActionOrigin_PS4_LeftPad_Touch = 47,
+ k_EControllerActionOrigin_PS4_LeftPad_Swipe = 48,
+ k_EControllerActionOrigin_PS4_LeftPad_Click = 49,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadNorth = 50,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadSouth = 51,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadWest = 52,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadEast = 53,
+ k_EControllerActionOrigin_PS4_RightPad_Touch = 54,
+ k_EControllerActionOrigin_PS4_RightPad_Swipe = 55,
+ k_EControllerActionOrigin_PS4_RightPad_Click = 56,
+ k_EControllerActionOrigin_PS4_RightPad_DPadNorth = 57,
+ k_EControllerActionOrigin_PS4_RightPad_DPadSouth = 58,
+ k_EControllerActionOrigin_PS4_RightPad_DPadWest = 59,
+ k_EControllerActionOrigin_PS4_RightPad_DPadEast = 60,
+ k_EControllerActionOrigin_PS4_CenterPad_Touch = 61,
+ k_EControllerActionOrigin_PS4_CenterPad_Swipe = 62,
+ k_EControllerActionOrigin_PS4_CenterPad_Click = 63,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadNorth = 64,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadSouth = 65,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadWest = 66,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadEast = 67,
+ k_EControllerActionOrigin_PS4_LeftTrigger_Pull = 68,
+ k_EControllerActionOrigin_PS4_LeftTrigger_Click = 69,
+ k_EControllerActionOrigin_PS4_RightTrigger_Pull = 70,
+ k_EControllerActionOrigin_PS4_RightTrigger_Click = 71,
+ k_EControllerActionOrigin_PS4_LeftStick_Move = 72,
+ k_EControllerActionOrigin_PS4_LeftStick_Click = 73,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadNorth = 74,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadSouth = 75,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadWest = 76,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadEast = 77,
+ k_EControllerActionOrigin_PS4_RightStick_Move = 78,
+ k_EControllerActionOrigin_PS4_RightStick_Click = 79,
+ k_EControllerActionOrigin_PS4_RightStick_DPadNorth = 80,
+ k_EControllerActionOrigin_PS4_RightStick_DPadSouth = 81,
+ k_EControllerActionOrigin_PS4_RightStick_DPadWest = 82,
+ k_EControllerActionOrigin_PS4_RightStick_DPadEast = 83,
+ k_EControllerActionOrigin_PS4_DPad_North = 84,
+ k_EControllerActionOrigin_PS4_DPad_South = 85,
+ k_EControllerActionOrigin_PS4_DPad_West = 86,
+ k_EControllerActionOrigin_PS4_DPad_East = 87,
+ k_EControllerActionOrigin_PS4_Gyro_Move = 88,
+ k_EControllerActionOrigin_PS4_Gyro_Pitch = 89,
+ k_EControllerActionOrigin_PS4_Gyro_Yaw = 90,
+ k_EControllerActionOrigin_PS4_Gyro_Roll = 91,
+ k_EControllerActionOrigin_XBoxOne_A = 92,
+ k_EControllerActionOrigin_XBoxOne_B = 93,
+ k_EControllerActionOrigin_XBoxOne_X = 94,
+ k_EControllerActionOrigin_XBoxOne_Y = 95,
+ k_EControllerActionOrigin_XBoxOne_LeftBumper = 96,
+ k_EControllerActionOrigin_XBoxOne_RightBumper = 97,
+ k_EControllerActionOrigin_XBoxOne_Menu = 98,
+ k_EControllerActionOrigin_XBoxOne_View = 99,
+ k_EControllerActionOrigin_XBoxOne_LeftTrigger_Pull = 100,
+ k_EControllerActionOrigin_XBoxOne_LeftTrigger_Click = 101,
+ k_EControllerActionOrigin_XBoxOne_RightTrigger_Pull = 102,
+ k_EControllerActionOrigin_XBoxOne_RightTrigger_Click = 103,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_Move = 104,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_Click = 105,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadNorth = 106,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadSouth = 107,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadWest = 108,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadEast = 109,
+ k_EControllerActionOrigin_XBoxOne_RightStick_Move = 110,
+ k_EControllerActionOrigin_XBoxOne_RightStick_Click = 111,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadNorth = 112,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadSouth = 113,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadWest = 114,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadEast = 115,
+ k_EControllerActionOrigin_XBoxOne_DPad_North = 116,
+ k_EControllerActionOrigin_XBoxOne_DPad_South = 117,
+ k_EControllerActionOrigin_XBoxOne_DPad_West = 118,
+ k_EControllerActionOrigin_XBoxOne_DPad_East = 119,
+ k_EControllerActionOrigin_XBox360_A = 120,
+ k_EControllerActionOrigin_XBox360_B = 121,
+ k_EControllerActionOrigin_XBox360_X = 122,
+ k_EControllerActionOrigin_XBox360_Y = 123,
+ k_EControllerActionOrigin_XBox360_LeftBumper = 124,
+ k_EControllerActionOrigin_XBox360_RightBumper = 125,
+ k_EControllerActionOrigin_XBox360_Start = 126,
+ k_EControllerActionOrigin_XBox360_Back = 127,
+ k_EControllerActionOrigin_XBox360_LeftTrigger_Pull = 128,
+ k_EControllerActionOrigin_XBox360_LeftTrigger_Click = 129,
+ k_EControllerActionOrigin_XBox360_RightTrigger_Pull = 130,
+ k_EControllerActionOrigin_XBox360_RightTrigger_Click = 131,
+ k_EControllerActionOrigin_XBox360_LeftStick_Move = 132,
+ k_EControllerActionOrigin_XBox360_LeftStick_Click = 133,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadNorth = 134,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadSouth = 135,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadWest = 136,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadEast = 137,
+ k_EControllerActionOrigin_XBox360_RightStick_Move = 138,
+ k_EControllerActionOrigin_XBox360_RightStick_Click = 139,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadNorth = 140,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadSouth = 141,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadWest = 142,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadEast = 143,
+ k_EControllerActionOrigin_XBox360_DPad_North = 144,
+ k_EControllerActionOrigin_XBox360_DPad_South = 145,
+ k_EControllerActionOrigin_XBox360_DPad_West = 146,
+ k_EControllerActionOrigin_XBox360_DPad_East = 147,
+ k_EControllerActionOrigin_SteamV2_A = 148,
+ k_EControllerActionOrigin_SteamV2_B = 149,
+ k_EControllerActionOrigin_SteamV2_X = 150,
+ k_EControllerActionOrigin_SteamV2_Y = 151,
+ k_EControllerActionOrigin_SteamV2_LeftBumper = 152,
+ k_EControllerActionOrigin_SteamV2_RightBumper = 153,
+ k_EControllerActionOrigin_SteamV2_LeftGrip = 154,
+ k_EControllerActionOrigin_SteamV2_RightGrip = 155,
+ k_EControllerActionOrigin_SteamV2_LeftGrip_Upper = 156,
+ k_EControllerActionOrigin_SteamV2_RightGrip_Upper = 157,
+ k_EControllerActionOrigin_SteamV2_LeftBumper_Pressure = 158,
+ k_EControllerActionOrigin_SteamV2_RightBumper_Pressure = 159,
+ k_EControllerActionOrigin_SteamV2_LeftGrip_Pressure = 160,
+ k_EControllerActionOrigin_SteamV2_RightGrip_Pressure = 161,
+ k_EControllerActionOrigin_SteamV2_LeftGrip_Upper_Pressure = 162,
+ k_EControllerActionOrigin_SteamV2_RightGrip_Upper_Pressure = 163,
+ k_EControllerActionOrigin_SteamV2_Start = 164,
+ k_EControllerActionOrigin_SteamV2_Back = 165,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Touch = 166,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Swipe = 167,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Click = 168,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Pressure = 169,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadNorth = 170,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadSouth = 171,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadWest = 172,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadEast = 173,
+ k_EControllerActionOrigin_SteamV2_RightPad_Touch = 174,
+ k_EControllerActionOrigin_SteamV2_RightPad_Swipe = 175,
+ k_EControllerActionOrigin_SteamV2_RightPad_Click = 176,
+ k_EControllerActionOrigin_SteamV2_RightPad_Pressure = 177,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadNorth = 178,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadSouth = 179,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadWest = 180,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadEast = 181,
+ k_EControllerActionOrigin_SteamV2_LeftTrigger_Pull = 182,
+ k_EControllerActionOrigin_SteamV2_LeftTrigger_Click = 183,
+ k_EControllerActionOrigin_SteamV2_RightTrigger_Pull = 184,
+ k_EControllerActionOrigin_SteamV2_RightTrigger_Click = 185,
+ k_EControllerActionOrigin_SteamV2_LeftStick_Move = 186,
+ k_EControllerActionOrigin_SteamV2_LeftStick_Click = 187,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadNorth = 188,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadSouth = 189,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadWest = 190,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadEast = 191,
+ k_EControllerActionOrigin_SteamV2_Gyro_Move = 192,
+ k_EControllerActionOrigin_SteamV2_Gyro_Pitch = 193,
+ k_EControllerActionOrigin_SteamV2_Gyro_Yaw = 194,
+ k_EControllerActionOrigin_SteamV2_Gyro_Roll = 195,
+ k_EControllerActionOrigin_Count = 196,
+}
+public enum ESteamControllerLEDFlag
+{
+ k_ESteamControllerLEDFlag_SetColor = 0,
+ k_ESteamControllerLEDFlag_RestoreUserDefault = 1,
+}
+public enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0,
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7,
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10,
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+ k_EUGCMatchingUGCType_GameManagedItems = 12,
+ k_EUGCMatchingUGCType_All = -1,
+}
+public enum EUserUGCList
+{
+ k_EUserUGCList_Published = 0,
+ k_EUserUGCList_VotedOn = 1,
+ k_EUserUGCList_VotedUp = 2,
+ k_EUserUGCList_VotedDown = 3,
+ k_EUserUGCList_WillVoteLater = 4,
+ k_EUserUGCList_Favorited = 5,
+ k_EUserUGCList_Subscribed = 6,
+ k_EUserUGCList_UsedOrPlayed = 7,
+ k_EUserUGCList_Followed = 8,
+}
+public enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc = 0,
+ k_EUserUGCListSortOrder_CreationOrderAsc = 1,
+ k_EUserUGCListSortOrder_TitleAsc = 2,
+ k_EUserUGCListSortOrder_LastUpdatedDesc = 3,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc = 4,
+ k_EUserUGCListSortOrder_VoteScoreDesc = 5,
+ k_EUserUGCListSortOrder_ForModeration = 6,
+}
+public enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+ k_EUGCQuery_RankedByTotalUniqueSubscriptions = 12,
+ k_EUGCQuery_RankedByPlaytimeTrend = 13,
+ k_EUGCQuery_RankedByTotalPlaytime = 14,
+ k_EUGCQuery_RankedByAveragePlaytimeTrend = 15,
+ k_EUGCQuery_RankedByLifetimeAveragePlaytime = 16,
+ k_EUGCQuery_RankedByPlaytimeSessionsTrend = 17,
+ k_EUGCQuery_RankedByLifetimePlaytimeSessions = 18,
+}
+public enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0,
+ k_EItemUpdateStatusPreparingConfig = 1,
+ k_EItemUpdateStatusPreparingContent = 2,
+ k_EItemUpdateStatusUploadingContent = 3,
+ k_EItemUpdateStatusUploadingPreviewFile = 4,
+ k_EItemUpdateStatusCommittingChanges = 5,
+}
+public enum EItemState
+{
+ k_EItemStateNone = 0,
+ k_EItemStateSubscribed = 1,
+ k_EItemStateLegacyItem = 2,
+ k_EItemStateInstalled = 4,
+ k_EItemStateNeedsUpdate = 8,
+ k_EItemStateDownloading = 16,
+ k_EItemStateDownloadPending = 32,
+}
+public enum EItemStatistic
+{
+ k_EItemStatistic_NumSubscriptions = 0,
+ k_EItemStatistic_NumFavorites = 1,
+ k_EItemStatistic_NumFollowers = 2,
+ k_EItemStatistic_NumUniqueSubscriptions = 3,
+ k_EItemStatistic_NumUniqueFavorites = 4,
+ k_EItemStatistic_NumUniqueFollowers = 5,
+ k_EItemStatistic_NumUniqueWebsiteViews = 6,
+ k_EItemStatistic_ReportScore = 7,
+ k_EItemStatistic_NumSecondsPlayed = 8,
+ k_EItemStatistic_NumPlaytimeSessions = 9,
+ k_EItemStatistic_NumComments = 10,
+ k_EItemStatistic_NumSecondsPlayedDuringTimePeriod = 11,
+ k_EItemStatistic_NumPlaytimeSessionsDuringTimePeriod = 12,
+}
+public enum EItemPreviewType
+{
+ k_EItemPreviewType_Image = 0,
+ k_EItemPreviewType_YouTubeVideo = 1,
+ k_EItemPreviewType_Sketchfab = 2,
+ k_EItemPreviewType_EnvironmentMap_HorizontalCross = 3,
+ k_EItemPreviewType_EnvironmentMap_LatLong = 4,
+ k_EItemPreviewType_ReservedMax = 255,
+}
+public enum EHTMLMouseButton
+{
+ eHTMLMouseButton_Left = 0,
+ eHTMLMouseButton_Right = 1,
+ eHTMLMouseButton_Middle = 2,
+}
+public enum EMouseCursor
+{
+ dc_user = 0,
+ dc_none = 1,
+ dc_arrow = 2,
+ dc_ibeam = 3,
+ dc_hourglass = 4,
+ dc_waitarrow = 5,
+ dc_crosshair = 6,
+ dc_up = 7,
+ dc_sizenw = 8,
+ dc_sizese = 9,
+ dc_sizene = 10,
+ dc_sizesw = 11,
+ dc_sizew = 12,
+ dc_sizee = 13,
+ dc_sizen = 14,
+ dc_sizes = 15,
+ dc_sizewe = 16,
+ dc_sizens = 17,
+ dc_sizeall = 18,
+ dc_no = 19,
+ dc_hand = 20,
+ dc_blank = 21,
+ dc_middle_pan = 22,
+ dc_north_pan = 23,
+ dc_north_east_pan = 24,
+ dc_east_pan = 25,
+ dc_south_east_pan = 26,
+ dc_south_pan = 27,
+ dc_south_west_pan = 28,
+ dc_west_pan = 29,
+ dc_north_west_pan = 30,
+ dc_alias = 31,
+ dc_cell = 32,
+ dc_colresize = 33,
+ dc_copycur = 34,
+ dc_verticaltext = 35,
+ dc_rowresize = 36,
+ dc_zoomin = 37,
+ dc_zoomout = 38,
+ dc_help = 39,
+ dc_custom = 40,
+ dc_last = 41,
+}
+public enum EHTMLKeyModifiers
+{
+ k_eHTMLKeyModifier_None = 0,
+ k_eHTMLKeyModifier_AltDown = 1,
+ k_eHTMLKeyModifier_CtrlDown = 2,
+ k_eHTMLKeyModifier_ShiftDown = 4,
+}
+public enum ESteamItemFlags
+{
+ k_ESteamItemNoTrade = 1,
+ k_ESteamItemRemoved = 256,
+ k_ESteamItemConsumed = 512,
+}
+[StructLayout(LayoutKind.Sequential)] public struct CSteamID
+{
+ public SteamID_t m_steamid;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamID_t
+{
+ public SteamIDComponent_t m_comp;
+ public ulong m_unAll64Bits;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamIDComponent_t
+{
+ public uint m_unAccountID;
+ public uint m_unAccountInstance;
+ public uint m_EAccountType;
+ public EUniverse m_EUniverse;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameID_t
+{
+ public uint m_nAppID;
+ public uint m_nType;
+ public uint m_nModID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ValvePackingSentinel_t
+{
+ public uint m_u32;
+ public ulong m_u64;
+ public char m_u16;
+ public double m_d;
+}
+[StructLayout(LayoutKind.Sequential)] public struct CallbackMsg_t
+{
+ public uint m_hSteamUser;
+ public int m_iCallback;
+ public IntPtr m_pubParam; // uint8 *
+ public int m_cubParam;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamServerConnectFailure_t
+{
+ public EResult m_eResult;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bStillRetrying;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamServersDisconnected_t
+{
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ClientGameServerDeny_t
+{
+ public uint m_uAppID;
+ public uint m_unGameServerIP;
+ public char m_usGameServerPort;
+ public char m_bSecure;
+ public uint m_uReason;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ValidateAuthTicketResponse_t
+{
+ public ulong m_SteamID;
+ public EAuthSessionResponse m_eAuthSessionResponse;
+ public ulong m_OwnerSteamID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct MicroTxnAuthorizationResponse_t
+{
+ public uint m_unAppID;
+ public ulong m_ulOrderID;
+ public byte m_bAuthorized;
+}
+[StructLayout(LayoutKind.Sequential)] public struct EncryptedAppTicketResponse_t
+{
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GetAuthSessionTicketResponse_t
+{
+ public uint m_hAuthTicket;
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameWebCallback_t
+{
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
+ public string m_szURL; //char[256]
+}
+[StructLayout(LayoutKind.Sequential)] public struct StoreAuthURLResponse_t
+{
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
+ public string m_szURL; //char[512]
+}
+[StructLayout(LayoutKind.Sequential)] public struct FriendGameInfo_t
+{
+ public ulong m_gameID;
+ public uint m_unGameIP;
+ public char m_usGamePort;
+ public char m_usQueryPort;
+ public ulong m_steamIDLobby;
+}
+[StructLayout(LayoutKind.Sequential)] public struct FriendSessionStateInfo_t
+{
+ public uint m_uiOnlineSessionInstances;
+ public byte m_uiPublishedToFriendsSessionInstance;
+}
+[StructLayout(LayoutKind.Sequential)] public struct PersonaStateChange_t
+{
+ public ulong m_ulSteamID;
+ public int m_nChangeFlags;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameOverlayActivated_t
+{
+ public byte m_bActive;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameServerChangeRequested_t
+{
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
+ public string m_rgchServer; //char[64]
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
+ public string m_rgchPassword; //char[64]
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameLobbyJoinRequested_t
+{
+ public ulong m_steamIDLobby;
+ public ulong m_steamIDFriend;
+}
+[StructLayout(LayoutKind.Sequential)] public struct AvatarImageLoaded_t
+{
+ public ulong m_steamID;
+ public int m_iImage;
+ public int m_iWide;
+ public int m_iTall;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ClanOfficerListResponse_t
+{
+ public ulong m_steamIDClan;
+ public int m_cOfficers;
+ public byte m_bSuccess;
+}
+[StructLayout(LayoutKind.Sequential)] public struct FriendRichPresenceUpdate_t
+{
+ public ulong m_steamIDFriend;
+ public uint m_nAppID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameRichPresenceJoinRequested_t
+{
+ public ulong m_steamIDFriend;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
+ public string m_rgchConnect; //char[256]
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameConnectedClanChatMsg_t
+{
+ public ulong m_steamIDClanChat;
+ public ulong m_steamIDUser;
+ public int m_iMessageID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameConnectedChatJoin_t
+{
+ public ulong m_steamIDClanChat;
+ public ulong m_steamIDUser;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameConnectedChatLeave_t
+{
+ public ulong m_steamIDClanChat;
+ public ulong m_steamIDUser;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bKicked;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bDropped;
+}
+[StructLayout(LayoutKind.Sequential)] public struct DownloadClanActivityCountsResult_t
+{
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bSuccess;
+}
+[StructLayout(LayoutKind.Sequential)] public struct JoinClanChatRoomCompletionResult_t
+{
+ public ulong m_steamIDClanChat;
+ public EChatRoomEnterResponse m_eChatRoomEnterResponse;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GameConnectedFriendChatMsg_t
+{
+ public ulong m_steamIDUser;
+ public int m_iMessageID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct FriendsGetFollowerCount_t
+{
+ public EResult m_eResult;
+ public ulong m_steamID;
+ public int m_nCount;
+}
+[StructLayout(LayoutKind.Sequential)] public struct FriendsIsFollowing_t
+{
+ public EResult m_eResult;
+ public ulong m_steamID;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bIsFollowing;
+}
+[StructLayout(LayoutKind.Sequential)] public struct FriendsEnumerateFollowingList_t
+{
+ public EResult m_eResult;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50, ArraySubType = UnmanagedType.U8)]
+ public CSteamID[] m_rgSteamID; //CSteamID[50]
+ public int m_nResultsReturned;
+ public int m_nTotalResultCount;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SetPersonaNameResponse_t
+{
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bSuccess;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bLocalSuccess;
+ public EResult m_result;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LowBatteryPower_t
+{
+ public byte m_nMinutesBatteryLeft;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamAPICallCompleted_t
+{
+ public ulong m_hAsyncCall;
+ public int m_iCallback;
+ public uint m_cubParam;
+}
+[StructLayout(LayoutKind.Sequential)] public struct CheckFileSignature_t
+{
+ public ECheckFileSignature m_eCheckFileSignature;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GamepadTextInputDismissed_t
+{
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bSubmitted;
+ public uint m_unSubmittedText;
+}
+[StructLayout(LayoutKind.Sequential)] public struct MatchMakingKeyValuePair_t
+{
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
+ public string m_szKey; //char[256]
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
+ public string m_szValue; //char[256]
+}
+[StructLayout(LayoutKind.Sequential)] public struct servernetadr_t
+{
+ public char m_usConnectionPort;
+ public char m_usQueryPort;
+ public uint m_unIP;
+}
+[StructLayout(LayoutKind.Sequential)] public struct gameserveritem_t
+{
+ public servernetadr_t m_NetAdr;
+ public int m_nPing;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bHadSuccessfulResponse;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bDoNotRefresh;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
+ public string m_szGameDir; //char[32]
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
+ public string m_szMap; //char[32]
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
+ public string m_szGameDescription; //char[64]
+ public uint m_nAppID;
+ public int m_nPlayers;
+ public int m_nMaxPlayers;
+ public int m_nBotPlayers;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bPassword;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bSecure;
+ public uint m_ulTimeLastPlayed;
+ public int m_nServerVersion;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
+ public string m_szServerName; //char[64]
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
+ public string m_szGameTags; //char[128]
+ public ulong m_steamID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct FavoritesListChanged_t
+{
+ public uint m_nIP;
+ public uint m_nQueryPort;
+ public uint m_nConnPort;
+ public uint m_nAppID;
+ public uint m_nFlags;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bAdd;
+ public uint m_unAccountId;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LobbyInvite_t
+{
+ public ulong m_ulSteamIDUser;
+ public ulong m_ulSteamIDLobby;
+ public ulong m_ulGameID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LobbyEnter_t
+{
+ public ulong m_ulSteamIDLobby;
+ public uint m_rgfChatPermissions;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bLocked;
+ public uint m_EChatRoomEnterResponse;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LobbyDataUpdate_t
+{
+ public ulong m_ulSteamIDLobby;
+ public ulong m_ulSteamIDMember;
+ public byte m_bSuccess;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LobbyChatUpdate_t
+{
+ public ulong m_ulSteamIDLobby;
+ public ulong m_ulSteamIDUserChanged;
+ public ulong m_ulSteamIDMakingChange;
+ public uint m_rgfChatMemberStateChange;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LobbyChatMsg_t
+{
+ public ulong m_ulSteamIDLobby;
+ public ulong m_ulSteamIDUser;
+ public byte m_eChatEntryType;
+ public uint m_iChatID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LobbyGameCreated_t
+{
+ public ulong m_ulSteamIDLobby;
+ public ulong m_ulSteamIDGameServer;
+ public uint m_unIP;
+ public char m_usPort;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LobbyMatchList_t
+{
+ public uint m_nLobbiesMatching;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LobbyKicked_t
+{
+ public ulong m_ulSteamIDLobby;
+ public ulong m_ulSteamIDAdmin;
+ public byte m_bKickedDueToDisconnect;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LobbyCreated_t
+{
+ public EResult m_eResult;
+ public ulong m_ulSteamIDLobby;
+}
+[StructLayout(LayoutKind.Sequential)] public struct PSNGameBootInviteResult_t
+{
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bGameBootInviteExists;
+ public ulong m_steamIDLobby;
+}
+[StructLayout(LayoutKind.Sequential)] public struct FavoritesListAccountsUpdated_t
+{
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamParamStringArray_t
+{
+ public IntPtr m_ppStrings; // const char **
+ public int m_nNumStrings;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageAppSyncedClient_t
+{
+ public uint m_nAppID;
+ public EResult m_eResult;
+ public int m_unNumDownloads;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageAppSyncedServer_t
+{
+ public uint m_nAppID;
+ public EResult m_eResult;
+ public int m_unNumUploads;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageAppSyncProgress_t
+{
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
+ public string m_rgchCurrentFile; //char[260]
+ public uint m_nAppID;
+ public uint m_uBytesTransferredThisChunk;
+ public double m_dAppPercentComplete;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bUploading;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageAppSyncStatusCheck_t
+{
+ public uint m_nAppID;
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageFileShareResult_t
+{
+ public EResult m_eResult;
+ public ulong m_hFile;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
+ public string m_rgchFilename; //char[260]
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStoragePublishFileResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageDeletePublishedFileResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ public EResult m_eResult;
+ public int m_nResultsReturned;
+ public int m_nTotalResultCount;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50, ArraySubType = UnmanagedType.U8)]
+ public ulong[] m_rgPublishedFileId; //ulong[50]
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageSubscribePublishedFileResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ public EResult m_eResult;
+ public int m_nResultsReturned;
+ public int m_nTotalResultCount;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50, ArraySubType = UnmanagedType.U8)]
+ public ulong[] m_rgPublishedFileId; //ulong[50]
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50, ArraySubType = UnmanagedType.U4)]
+ public uint[] m_rgRTimeSubscribed; //uint[50]
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageUpdatePublishedFileResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageDownloadUGCResult_t
+{
+ public EResult m_eResult;
+ public ulong m_hFile;
+ public uint m_nAppID;
+ public int m_nSizeInBytes;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
+ public string m_pchFileName; //char[260]
+ public ulong m_ulSteamIDOwner;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+ public uint m_nCreatorAppID;
+ public uint m_nConsumerAppID;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 129)]
+ public string m_rgchTitle; //char[129]
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8000)]
+ public string m_rgchDescription; //char[8000]
+ public ulong m_hFile;
+ public ulong m_hPreviewFile;
+ public ulong m_ulSteamIDOwner;
+ public uint m_rtimeCreated;
+ public uint m_rtimeUpdated;
+ public ERemoteStoragePublishedFileVisibility m_eVisibility;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bBanned;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1025)]
+ public string m_rgchTags; //char[1025]
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bTagsTruncated;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
+ public string m_pchFileName; //char[260]
+ public int m_nFileSize;
+ public int m_nPreviewFileSize;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
+ public string m_rgchURL; //char[256]
+ public EWorkshopFileType m_eFileType;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bAcceptedForUse;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ public EResult m_eResult;
+ public int m_nResultsReturned;
+ public int m_nTotalResultCount;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50, ArraySubType = UnmanagedType.U8)]
+ public ulong[] m_rgPublishedFileId; //ulong[50]
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50, ArraySubType = UnmanagedType.R4)]
+ public float[] m_rgScore; //float[50]
+ public uint m_nAppId;
+ public uint m_unStartIndex;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ public EResult m_eResult;
+ public ulong m_unPublishedFileId;
+ public int m_nVotesFor;
+ public int m_nVotesAgainst;
+ public int m_nReports;
+ public float m_fScore;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStoragePublishedFileSubscribed_t
+{
+ public ulong m_nPublishedFileId;
+ public uint m_nAppID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ public ulong m_nPublishedFileId;
+ public uint m_nAppID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStoragePublishedFileDeleted_t
+{
+ public ulong m_nPublishedFileId;
+ public uint m_nAppID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageUserVoteDetails_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+ public EWorkshopVote m_eVote;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ public EResult m_eResult;
+ public int m_nResultsReturned;
+ public int m_nTotalResultCount;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50, ArraySubType = UnmanagedType.U8)]
+ public ulong[] m_rgPublishedFileId; //ulong[50]
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+ public EWorkshopFileAction m_eAction;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ public EResult m_eResult;
+ public EWorkshopFileAction m_eAction;
+ public int m_nResultsReturned;
+ public int m_nTotalResultCount;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50, ArraySubType = UnmanagedType.U8)]
+ public ulong[] m_rgPublishedFileId; //ulong[50]
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50, ArraySubType = UnmanagedType.U4)]
+ public uint[] m_rgRTimeUpdated; //uint[50]
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStoragePublishFileProgress_t
+{
+ public double m_dPercentFile;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bPreview;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStoragePublishedFileUpdated_t
+{
+ public ulong m_nPublishedFileId;
+ public uint m_nAppID;
+ public ulong m_ulUnused;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageFileWriteAsyncComplete_t
+{
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoteStorageFileReadAsyncComplete_t
+{
+ public ulong m_hFileReadAsync;
+ public EResult m_eResult;
+ public uint m_nOffset;
+ public uint m_cubRead;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LeaderboardEntry_t
+{
+ public ulong m_steamIDUser;
+ public int m_nGlobalRank;
+ public int m_nScore;
+ public int m_cDetails;
+ public ulong m_hUGC;
+}
+[StructLayout(LayoutKind.Sequential)] public struct UserStatsReceived_t
+{
+ public ulong m_nGameID;
+ public EResult m_eResult;
+ public ulong m_steamIDUser;
+}
+[StructLayout(LayoutKind.Sequential)] public struct UserStatsStored_t
+{
+ public ulong m_nGameID;
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct UserAchievementStored_t
+{
+ public ulong m_nGameID;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bGroupAchievement;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
+ public string m_rgchAchievementName; //char[128]
+ public uint m_nCurProgress;
+ public uint m_nMaxProgress;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LeaderboardFindResult_t
+{
+ public ulong m_hSteamLeaderboard;
+ public byte m_bLeaderboardFound;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LeaderboardScoresDownloaded_t
+{
+ public ulong m_hSteamLeaderboard;
+ public ulong m_hSteamLeaderboardEntries;
+ public int m_cEntryCount;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LeaderboardScoreUploaded_t
+{
+ public byte m_bSuccess;
+ public ulong m_hSteamLeaderboard;
+ public int m_nScore;
+ public byte m_bScoreChanged;
+ public int m_nGlobalRankNew;
+ public int m_nGlobalRankPrevious;
+}
+[StructLayout(LayoutKind.Sequential)] public struct NumberOfCurrentPlayers_t
+{
+ public byte m_bSuccess;
+ public int m_cPlayers;
+}
+[StructLayout(LayoutKind.Sequential)] public struct UserStatsUnloaded_t
+{
+ public ulong m_steamIDUser;
+}
+[StructLayout(LayoutKind.Sequential)] public struct UserAchievementIconFetched_t
+{
+ public ulong m_nGameID;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
+ public string m_rgchAchievementName; //char[128]
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bAchieved;
+ public int m_nIconHandle;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GlobalAchievementPercentagesReady_t
+{
+ public ulong m_nGameID;
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct LeaderboardUGCSet_t
+{
+ public EResult m_eResult;
+ public ulong m_hSteamLeaderboard;
+}
+[StructLayout(LayoutKind.Sequential)] public struct PS3TrophiesInstalled_t
+{
+ public ulong m_nGameID;
+ public EResult m_eResult;
+ public ulong m_ulRequiredDiskSpace;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GlobalStatsReceived_t
+{
+ public ulong m_nGameID;
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct DlcInstalled_t
+{
+ public uint m_nAppID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RegisterActivationCodeResponse_t
+{
+ public ERegisterActivationCodeResult m_eResult;
+ public uint m_unPackageRegistered;
+}
+[StructLayout(LayoutKind.Sequential)] public struct AppProofOfPurchaseKeyResponse_t
+{
+ public EResult m_eResult;
+ public uint m_nAppID;
+ public uint m_cchKeyLength;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 240)]
+ public string m_rgchKey; //char[240]
+}
+[StructLayout(LayoutKind.Sequential)] public struct FileDetailsResult_t
+{
+ public EResult m_eResult;
+ public ulong m_ulFileSize;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20, ArraySubType = UnmanagedType.U1)]
+ public byte[] m_FileSHA; //byte[20]
+ public uint m_unFlags;
+}
+[StructLayout(LayoutKind.Sequential)] public struct P2PSessionState_t
+{
+ public byte m_bConnectionActive;
+ public byte m_bConnecting;
+ public byte m_eP2PSessionError;
+ public byte m_bUsingRelay;
+ public int m_nBytesQueuedForSend;
+ public int m_nPacketsQueuedForSend;
+ public uint m_nRemoteIP;
+ public char m_nRemotePort;
+}
+[StructLayout(LayoutKind.Sequential)] public struct P2PSessionRequest_t
+{
+ public ulong m_steamIDRemote;
+}
+[StructLayout(LayoutKind.Sequential)] public struct P2PSessionConnectFail_t
+{
+ public ulong m_steamIDRemote;
+ public byte m_eP2PSessionError;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SocketStatusCallback_t
+{
+ public uint m_hSocket;
+ public uint m_hListenSocket;
+ public ulong m_steamIDRemote;
+ public int m_eSNetSocketState;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ScreenshotReady_t
+{
+ public uint m_hLocal;
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public float m_flNewVolume;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bShuffled;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bLooped;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public float m_flNewVolume;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public int nID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public int nID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public int m_nPlayingRepeatStatus;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTTPRequestCompleted_t
+{
+ public uint m_hRequest;
+ public ulong m_ulContextValue;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bRequestSuccessful;
+ public EHTTPStatusCode m_eStatusCode;
+ public uint m_unBodySize;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTTPRequestHeadersReceived_t
+{
+ public uint m_hRequest;
+ public ulong m_ulContextValue;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTTPRequestDataReceived_t
+{
+ public uint m_hRequest;
+ public ulong m_ulContextValue;
+ public uint m_cOffset;
+ public uint m_cBytesReceived;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamUnifiedMessagesSendMethodResult_t
+{
+ public ulong m_hHandle;
+ public ulong m_unContext;
+ public EResult m_eResult;
+ public uint m_unResponseSize;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ControllerAnalogActionData_t
+{
+ public EControllerSourceMode eMode;
+ public float x;
+ public float y;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bActive;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ControllerDigitalActionData_t
+{
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bState;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bActive;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ControllerMotionData_t
+{
+ public float rotQuatX;
+ public float rotQuatY;
+ public float rotQuatZ;
+ public float rotQuatW;
+ public float posAccelX;
+ public float posAccelY;
+ public float posAccelZ;
+ public float rotVelX;
+ public float rotVelY;
+ public float rotVelZ;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamUGCDetails_t
+{
+ public ulong m_nPublishedFileId;
+ public EResult m_eResult;
+ public EWorkshopFileType m_eFileType;
+ public uint m_nCreatorAppID;
+ public uint m_nConsumerAppID;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 129)]
+ public string m_rgchTitle; //char[129]
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8000)]
+ public string m_rgchDescription; //char[8000]
+ public ulong m_ulSteamIDOwner;
+ public uint m_rtimeCreated;
+ public uint m_rtimeUpdated;
+ public uint m_rtimeAddedToUserList;
+ public ERemoteStoragePublishedFileVisibility m_eVisibility;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bBanned;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bAcceptedForUse;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bTagsTruncated;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1025)]
+ public string m_rgchTags; //char[1025]
+ public ulong m_hFile;
+ public ulong m_hPreviewFile;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
+ public string m_pchFileName; //char[260]
+ public int m_nFileSize;
+ public int m_nPreviewFileSize;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
+ public string m_rgchURL; //char[256]
+ public uint m_unVotesUp;
+ public uint m_unVotesDown;
+ public float m_flScore;
+ public uint m_unNumChildren;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamUGCQueryCompleted_t
+{
+ public ulong m_handle;
+ public EResult m_eResult;
+ public uint m_unNumResultsReturned;
+ public uint m_unTotalMatchingResults;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bCachedData;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamUGCRequestUGCDetailsResult_t
+{
+ public SteamUGCDetails_t m_details;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bCachedData;
+}
+[StructLayout(LayoutKind.Sequential)] public struct CreateItemResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SubmitItemUpdateResult_t
+{
+ public EResult m_eResult;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+}
+[StructLayout(LayoutKind.Sequential)] public struct DownloadItemResult_t
+{
+ public uint m_unAppID;
+ public ulong m_nPublishedFileId;
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct UserFavoriteItemsListChanged_t
+{
+ public ulong m_nPublishedFileId;
+ public EResult m_eResult;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bWasAddRequest;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SetUserItemVoteResult_t
+{
+ public ulong m_nPublishedFileId;
+ public EResult m_eResult;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bVoteUp;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GetUserItemVoteResult_t
+{
+ public ulong m_nPublishedFileId;
+ public EResult m_eResult;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bVotedUp;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bVotedDown;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bVoteSkipped;
+}
+[StructLayout(LayoutKind.Sequential)] public struct StartPlaytimeTrackingResult_t
+{
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct StopPlaytimeTrackingResult_t
+{
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct AddUGCDependencyResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+ public ulong m_nChildPublishedFileId;
+}
+[StructLayout(LayoutKind.Sequential)] public struct RemoveUGCDependencyResult_t
+{
+ public EResult m_eResult;
+ public ulong m_nPublishedFileId;
+ public ulong m_nChildPublishedFileId;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public uint m_nAppID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public uint m_nAppID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_BrowserReady_t
+{
+ public uint unBrowserHandle;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_NeedsPaint_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pBGRA; // const char *
+ public uint unWide;
+ public uint unTall;
+ public uint unUpdateX;
+ public uint unUpdateY;
+ public uint unUpdateWide;
+ public uint unUpdateTall;
+ public uint unScrollX;
+ public uint unScrollY;
+ public float flPageScale;
+ public uint unPageSerial;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_StartRequest_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchURL; // const char *
+ public IntPtr pchTarget; // const char *
+ public IntPtr pchPostData; // const char *
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bIsRedirect;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_CloseBrowser_t
+{
+ public uint unBrowserHandle;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_URLChanged_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchURL; // const char *
+ public IntPtr pchPostData; // const char *
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bIsRedirect;
+ public IntPtr pchPageTitle; // const char *
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bNewNavigation;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_FinishedRequest_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchURL; // const char *
+ public IntPtr pchPageTitle; // const char *
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_OpenLinkInNewTab_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchURL; // const char *
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_ChangedTitle_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchTitle; // const char *
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_SearchResults_t
+{
+ public uint unBrowserHandle;
+ public uint unResults;
+ public uint unCurrentMatch;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_CanGoBackAndForward_t
+{
+ public uint unBrowserHandle;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bCanGoBack;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bCanGoForward;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_HorizontalScroll_t
+{
+ public uint unBrowserHandle;
+ public uint unScrollMax;
+ public uint unScrollCurrent;
+ public float flPageScale;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bVisible;
+ public uint unPageSize;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_VerticalScroll_t
+{
+ public uint unBrowserHandle;
+ public uint unScrollMax;
+ public uint unScrollCurrent;
+ public float flPageScale;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bVisible;
+ public uint unPageSize;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_LinkAtPosition_t
+{
+ public uint unBrowserHandle;
+ public uint x;
+ public uint y;
+ public IntPtr pchURL; // const char *
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bInput;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool bLiveLink;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_JSAlert_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchMessage; // const char *
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_JSConfirm_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchMessage; // const char *
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_FileOpenDialog_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchTitle; // const char *
+ public IntPtr pchInitialFile; // const char *
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_NewWindow_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchURL; // const char *
+ public uint unX;
+ public uint unY;
+ public uint unWide;
+ public uint unTall;
+ public uint unNewWindow_BrowserHandle;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_SetCursor_t
+{
+ public uint unBrowserHandle;
+ public uint eMouseCursor;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_StatusText_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchMsg; // const char *
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_ShowToolTip_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchMsg; // const char *
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_UpdateToolTip_t
+{
+ public uint unBrowserHandle;
+ public IntPtr pchMsg; // const char *
+}
+[StructLayout(LayoutKind.Sequential)] public struct HTML_HideToolTip_t
+{
+ public uint unBrowserHandle;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamItemDetails_t
+{
+ public ulong m_itemId;
+ public int m_iDefinition;
+ public char m_unQuantity;
+ public char m_unFlags;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamInventoryResultReady_t
+{
+ public int m_handle;
+ public EResult m_result;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamInventoryFullUpdate_t
+{
+ public int m_handle;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamInventoryEligiblePromoItemDefIDs_t
+{
+ public EResult m_result;
+ public ulong m_steamID;
+ public int m_numEligiblePromoItemDefs;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bCachedData;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public EBroadcastUploadResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public EResult m_eResult;
+ public uint m_unVideoAppID;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
+ public string m_rgchURL; //char[256]
+}
+[StructLayout(LayoutKind.Sequential)] public struct SteamCallback_t
+{
+ public EResult m_eResult;
+ public uint m_unVideoAppID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct CSteamAPIContext
+{
+ public IntPtr m_pSteamClient; // class ISteamClient *
+ public IntPtr m_pSteamUser; // class ISteamUser *
+ public IntPtr m_pSteamFriends; // class ISteamFriends *
+ public IntPtr m_pSteamUtils; // class ISteamUtils *
+ public IntPtr m_pSteamMatchmaking; // class ISteamMatchmaking *
+ public IntPtr m_pSteamUserStats; // class ISteamUserStats *
+ public IntPtr m_pSteamApps; // class ISteamApps *
+ public IntPtr m_pSteamMatchmakingServers; // class ISteamMatchmakingServers *
+ public IntPtr m_pSteamNetworking; // class ISteamNetworking *
+ public IntPtr m_pSteamRemoteStorage; // class ISteamRemoteStorage *
+ public IntPtr m_pSteamScreenshots; // class ISteamScreenshots *
+ public IntPtr m_pSteamHTTP; // class ISteamHTTP *
+ public IntPtr m_pSteamUnifiedMessages; // class ISteamUnifiedMessages *
+ public IntPtr m_pController; // class ISteamController *
+ public IntPtr m_pSteamUGC; // class ISteamUGC *
+ public IntPtr m_pSteamAppList; // class ISteamAppList *
+ public IntPtr m_pSteamMusic; // class ISteamMusic *
+ public IntPtr m_pSteamMusicRemote; // class ISteamMusicRemote *
+ public IntPtr m_pSteamHTMLSurface; // class ISteamHTMLSurface *
+ public IntPtr m_pSteamInventory; // class ISteamInventory *
+ public IntPtr m_pSteamVideo; // class ISteamVideo *
+}
+[StructLayout(LayoutKind.Sequential)] public struct CCallbackBase
+{
+ public byte m_nCallbackFlags;
+ public int m_iCallback;
+}
+[StructLayout(LayoutKind.Sequential)] public struct CCallResult
+{
+ public ulong m_hAPICall;
+ public IntPtr m_pObj; // T *
+ public IntPtr m_Func;
+}
+[StructLayout(LayoutKind.Sequential)] public struct CCallback
+{
+ public IntPtr m_pObj; // T *
+ public IntPtr m_Func;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSClientApprove_t
+{
+ public ulong m_SteamID;
+ public ulong m_OwnerSteamID;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSClientDeny_t
+{
+ public ulong m_SteamID;
+ public EDenyReason m_eDenyReason;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
+ public string m_rgchOptionalText; //char[128]
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSClientKick_t
+{
+ public ulong m_SteamID;
+ public EDenyReason m_eDenyReason;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSClientAchievementStatus_t
+{
+ public ulong m_SteamID;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
+ public string m_pchAchievement; //char[128]
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bUnlocked;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSPolicyResponse_t
+{
+ public byte m_bSecure;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSGameplayStats_t
+{
+ public EResult m_eResult;
+ public int m_nRank;
+ public uint m_unTotalConnects;
+ public uint m_unTotalMinutesPlayed;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSClientGroupStatus_t
+{
+ public ulong m_SteamIDUser;
+ public ulong m_SteamIDGroup;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bMember;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bOfficer;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSReputation_t
+{
+ public EResult m_eResult;
+ public uint m_unReputationScore;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool m_bBanned;
+ public uint m_unBannedIP;
+ public char m_usBannedPort;
+ public ulong m_ulBannedGameID;
+ public uint m_unBanExpires;
+}
+[StructLayout(LayoutKind.Sequential)] public struct AssociateWithClanResult_t
+{
+ public EResult m_eResult;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ComputeNewPlayerCompatibilityResult_t
+{
+ public EResult m_eResult;
+ public int m_cPlayersThatDontLikeCandidate;
+ public int m_cPlayersThatCandidateDoesntLike;
+ public int m_cClanPlayersThatDontLikeCandidate;
+ public ulong m_SteamIDCandidate;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSStatsReceived_t
+{
+ public EResult m_eResult;
+ public ulong m_steamIDUser;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSStatsStored_t
+{
+ public EResult m_eResult;
+ public ulong m_steamIDUser;
+}
+[StructLayout(LayoutKind.Sequential)] public struct GSStatsUnloaded_t
+{
+ public ulong m_steamIDUser;
+}
+
+public class SteamAPI
+{
+public static void Init(uint appId)
+{
+SteamAPIInterop.SteamAPI_RestartAppIfNecessary (appId);
+SteamAPIInterop.SteamAPI_Init ();
+}
+
+public static void RunCallbacks()
+{
+SteamAPIInterop.SteamAPI_RunCallbacks ();
+}
+
+public static void RegisterCallback(IntPtr pCallback, int iCallback)
+{
+SteamAPIInterop.SteamAPI_RegisterCallback (pCallback, iCallback);
+}
+
+public static void UnregisterCallback(IntPtr pCallback)
+{
+SteamAPIInterop.SteamAPI_UnregisterCallback (pCallback);
+}
+
+public const int k_iSteamUserCallbacks = 100;
+public const int k_iSteamGameServerCallbacks = 200;
+public const int k_iSteamFriendsCallbacks = 300;
+public const int k_iSteamBillingCallbacks = 400;
+public const int k_iSteamMatchmakingCallbacks = 500;
+public const int k_iSteamContentServerCallbacks = 600;
+public const int k_iSteamUtilsCallbacks = 700;
+public const int k_iClientFriendsCallbacks = 800;
+public const int k_iClientUserCallbacks = 900;
+public const int k_iSteamAppsCallbacks = 1000;
+public const int k_iSteamUserStatsCallbacks = 1100;
+public const int k_iSteamNetworkingCallbacks = 1200;
+public const int k_iClientRemoteStorageCallbacks = 1300;
+public const int k_iClientDepotBuilderCallbacks = 1400;
+public const int k_iSteamGameServerItemsCallbacks = 1500;
+public const int k_iClientUtilsCallbacks = 1600;
+public const int k_iSteamGameCoordinatorCallbacks = 1700;
+public const int k_iSteamGameServerStatsCallbacks = 1800;
+public const int k_iSteam2AsyncCallbacks = 1900;
+public const int k_iSteamGameStatsCallbacks = 2000;
+public const int k_iClientHTTPCallbacks = 2100;
+public const int k_iClientScreenshotsCallbacks = 2200;
+public const int k_iSteamScreenshotsCallbacks = 2300;
+public const int k_iClientAudioCallbacks = 2400;
+public const int k_iClientUnifiedMessagesCallbacks = 2500;
+public const int k_iSteamStreamLauncherCallbacks = 2600;
+public const int k_iClientControllerCallbacks = 2700;
+public const int k_iSteamControllerCallbacks = 2800;
+public const int k_iClientParentalSettingsCallbacks = 2900;
+public const int k_iClientDeviceAuthCallbacks = 3000;
+public const int k_iClientNetworkDeviceManagerCallbacks = 3100;
+public const int k_iClientMusicCallbacks = 3200;
+public const int k_iClientRemoteClientManagerCallbacks = 3300;
+public const int k_iClientUGCCallbacks = 3400;
+public const int k_iSteamStreamClientCallbacks = 3500;
+public const int k_IClientProductBuilderCallbacks = 3600;
+public const int k_iClientShortcutsCallbacks = 3700;
+public const int k_iClientRemoteControlManagerCallbacks = 3800;
+public const int k_iSteamAppListCallbacks = 3900;
+public const int k_iSteamMusicCallbacks = 4000;
+public const int k_iSteamMusicRemoteCallbacks = 4100;
+public const int k_iClientVRCallbacks = 4200;
+public const int k_iClientGameNotificationCallbacks = 4300;
+public const int k_iSteamGameNotificationCallbacks = 4400;
+public const int k_iSteamHTMLSurfaceCallbacks = 4500;
+public const int k_iClientVideoCallbacks = 4600;
+public const int k_iClientInventoryCallbacks = 4700;
+public const int k_iClientBluetoothManagerCallbacks = 4800;
+public const int k_cchPersonaNameMax = 128;
+public const int k_cwchPersonaNameMax = 32;
+public const int k_cchMaxRichPresenceKeys = 20;
+public const int k_cchMaxRichPresenceKeyLength = 64;
+public const int k_cchMaxRichPresenceValueLength = 256;
+public const int k_cchStatNameMax = 128;
+public const int k_cchLeaderboardNameMax = 128;
+public const int k_cLeaderboardDetailsMax = 64;
+public const ulong k_InvalidUnifiedMessageHandle = 0;
+public const ulong k_SteamItemInstanceIDInvalid = 0xffffffffffffffff;
+public const int k_SteamInventoryResultInvalid = -1;
+public static ISteamClient SteamClient()
+{
+return new CSteamClient(SteamAPIInterop.SteamClient());
+}
+
+public static ISteamUser SteamUser()
+{
+return new CSteamUser(SteamAPIInterop.SteamUser());
+}
+
+public static ISteamFriends SteamFriends()
+{
+return new CSteamFriends(SteamAPIInterop.SteamFriends());
+}
+
+public static ISteamUtils SteamUtils()
+{
+return new CSteamUtils(SteamAPIInterop.SteamUtils());
+}
+
+public static ISteamMatchmaking SteamMatchmaking()
+{
+return new CSteamMatchmaking(SteamAPIInterop.SteamMatchmaking());
+}
+
+public static ISteamMatchmakingServerListResponse SteamMatchmakingServerListResponse()
+{
+return new CSteamMatchmakingServerListResponse(SteamAPIInterop.SteamMatchmakingServerListResponse());
+}
+
+public static ISteamMatchmakingPingResponse SteamMatchmakingPingResponse()
+{
+return new CSteamMatchmakingPingResponse(SteamAPIInterop.SteamMatchmakingPingResponse());
+}
+
+public static ISteamMatchmakingPlayersResponse SteamMatchmakingPlayersResponse()
+{
+return new CSteamMatchmakingPlayersResponse(SteamAPIInterop.SteamMatchmakingPlayersResponse());
+}
+
+public static ISteamMatchmakingRulesResponse SteamMatchmakingRulesResponse()
+{
+return new CSteamMatchmakingRulesResponse(SteamAPIInterop.SteamMatchmakingRulesResponse());
+}
+
+public static ISteamMatchmakingServers SteamMatchmakingServers()
+{
+return new CSteamMatchmakingServers(SteamAPIInterop.SteamMatchmakingServers());
+}
+
+public static ISteamRemoteStorage SteamRemoteStorage()
+{
+return new CSteamRemoteStorage(SteamAPIInterop.SteamRemoteStorage());
+}
+
+public static ISteamUserStats SteamUserStats()
+{
+return new CSteamUserStats(SteamAPIInterop.SteamUserStats());
+}
+
+public static ISteamApps SteamApps()
+{
+return new CSteamApps(SteamAPIInterop.SteamApps());
+}
+
+public static ISteamNetworking SteamNetworking()
+{
+return new CSteamNetworking(SteamAPIInterop.SteamNetworking());
+}
+
+public static ISteamScreenshots SteamScreenshots()
+{
+return new CSteamScreenshots(SteamAPIInterop.SteamScreenshots());
+}
+
+public static ISteamMusic SteamMusic()
+{
+return new CSteamMusic(SteamAPIInterop.SteamMusic());
+}
+
+public static ISteamMusicRemote SteamMusicRemote()
+{
+return new CSteamMusicRemote(SteamAPIInterop.SteamMusicRemote());
+}
+
+public static ISteamHTTP SteamHTTP()
+{
+return new CSteamHTTP(SteamAPIInterop.SteamHTTP());
+}
+
+public static ISteamUnifiedMessages SteamUnifiedMessages()
+{
+return new CSteamUnifiedMessages(SteamAPIInterop.SteamUnifiedMessages());
+}
+
+public static ISteamController SteamController()
+{
+return new CSteamController(SteamAPIInterop.SteamController());
+}
+
+public static ISteamUGC SteamUGC()
+{
+return new CSteamUGC(SteamAPIInterop.SteamUGC());
+}
+
+public static ISteamAppList SteamAppList()
+{
+return new CSteamAppList(SteamAPIInterop.SteamAppList());
+}
+
+public static ISteamHTMLSurface SteamHTMLSurface()
+{
+return new CSteamHTMLSurface(SteamAPIInterop.SteamHTMLSurface());
+}
+
+public static ISteamInventory SteamInventory()
+{
+return new CSteamInventory(SteamAPIInterop.SteamInventory());
+}
+
+public static ISteamVideo SteamVideo()
+{
+return new CSteamVideo(SteamAPIInterop.SteamVideo());
+}
+
+public static ISteamGameServer SteamGameServer()
+{
+return new CSteamGameServer(SteamAPIInterop.SteamGameServer());
+}
+
+public static ISteamGameServerStats SteamGameServerStats()
+{
+return new CSteamGameServerStats(SteamAPIInterop.SteamGameServerStats());
+}
+
+}
+
+
+
+}
+
diff --git a/lsteamclient/steamworks_sdk_140/steam_gameserver.h b/lsteamclient/steamworks_sdk_140/steam_gameserver.h
new file mode 100644
index 00000000..eadebdb6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/steam_gameserver.h
@@ -0,0 +1,243 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+
+inline bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+// Most Steam API functions allocate some amount of thread-local memory for
+// parameter storage. Calling SteamGameServer_ReleaseCurrentThreadMemory()
+// will free all API-related memory associated with the calling thread.
+// This memory is released automatically by SteamGameServer_RunCallbacks(),
+// so single-threaded servers do not need to explicitly call this function.
+inline void SteamGameServer_ReleaseCurrentThreadMemory();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Global accessors for game server C++ APIs. See individual isteam*.h files for details.
+// You should not cache the results of these accessors or pass the result pointers across
+// modules! Different modules may be compiled against different SDK header versions, and
+// the interface pointers could therefore be different across modules. Every line of code
+// which calls into a Steamworks API should retrieve the interface from a global accessor.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#if !defined( STEAM_API_EXPORTS )
+inline ISteamClient *SteamGameServerClient();
+inline ISteamGameServer *SteamGameServer();
+inline ISteamUtils *SteamGameServerUtils();
+inline ISteamNetworking *SteamGameServerNetworking();
+inline ISteamGameServerStats *SteamGameServerStats();
+inline ISteamHTTP *SteamGameServerHTTP();
+inline ISteamInventory *SteamGameServerInventory();
+inline ISteamUGC *SteamGameServerUGC();
+inline ISteamApps *SteamGameServerApps();
+#endif
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext() { Clear(); }
+ inline void Clear();
+ inline bool Init();
+
+ ISteamClient *SteamClient() const { return m_pSteamClient; }
+ ISteamGameServer *SteamGameServer() const { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() const { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() const { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() const { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() const { return m_pSteamHTTP; }
+ ISteamInventory *SteamInventory() const { return m_pSteamInventory; }
+ ISteamUGC *SteamUGC() const { return m_pSteamUGC; }
+ ISteamApps *SteamApps() const { return m_pSteamApps; }
+
+private:
+ ISteamClient *m_pSteamClient;
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamInventory *m_pSteamInventory;
+ ISteamUGC *m_pSteamUGC;
+ ISteamApps *m_pSteamApps;
+};
+
+
+// Older SDKs exported this global pointer, but it is no longer supported.
+// You should use SteamGameServerClient() or CSteamGameServerAPIContext to
+// safely access the ISteamClient APIs from your game server application.
+//S_API ISteamClient *g_pSteamClientGameServer;
+
+// SteamGameServer_InitSafe has been replaced with SteamGameServer_Init and
+// is no longer supported. Use SteamGameServer_Init instead.
+//S_API void S_CALLTYPE SteamGameServer_InitSafe();
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// These macros are similar to the STEAM_CALLBACK_* macros in steam_api.h, but only trigger for gameserver callbacks
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, /*callback_type, [deprecated] var*/... ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, GS, 3 ), ( this->SetGameserverFlag();, thisclass, func, __VA_ARGS__ ) )
+
+#define STEAM_GAMESERVER_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type, true > var; void func( callback_type *pParam )
+
+
+#define _STEAM_CALLBACK_GS( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param, true > var; void func( param *pParam )
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe S_CALLTYPE SteamGameServer_GetHSteamPipe();
+S_API HSteamUser S_CALLTYPE SteamGameServer_GetHSteamUser();
+S_API bool S_CALLTYPE SteamInternal_GameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+
+
+#if !defined( STEAM_API_EXPORTS )
+inline void S_CALLTYPE SteamGameServerInternal_OnContextInit( void* p )
+{
+ ((CSteamGameServerAPIContext*)p)->Clear();
+ if ( SteamGameServer_GetHSteamPipe() )
+ ((CSteamGameServerAPIContext*)p)->Init();
+}
+inline CSteamGameServerAPIContext& SteamGameServerInternal_ModuleContext()
+{
+ // SteamInternal_ContextInit takes a base pointer for the equivalent of
+ // struct { void (*pFn)(void* pCtx); uintp counter; CSteamAPIContext ctx; }
+ // Do not change layout of 2 + sizeof... or add non-pointer aligned data!
+ // NOTE: declaring "static CSteamAPIConext" creates a large function
+ // which queries the initialization status of the object. We know that
+ // it is pointer-aligned and fully memset with zeros, so just alias a
+ // static buffer of the appropriate size and call it a CSteamAPIContext.
+ static void* s_CallbackCounterAndContext[2 + sizeof( CSteamGameServerAPIContext ) / sizeof( void* )] = { (void*)&SteamGameServerInternal_OnContextInit, 0 };
+ return *(CSteamGameServerAPIContext*)SteamInternal_ContextInit( s_CallbackCounterAndContext );
+}
+inline ISteamClient *SteamGameServerClient() { return SteamGameServerInternal_ModuleContext().SteamClient(); }
+inline ISteamGameServer *SteamGameServer() { return SteamGameServerInternal_ModuleContext().SteamGameServer(); }
+inline ISteamUtils *SteamGameServerUtils() { return SteamGameServerInternal_ModuleContext().SteamGameServerUtils(); }
+inline ISteamNetworking *SteamGameServerNetworking() { return SteamGameServerInternal_ModuleContext().SteamGameServerNetworking(); }
+inline ISteamGameServerStats *SteamGameServerStats() { return SteamGameServerInternal_ModuleContext().SteamGameServerStats(); }
+inline ISteamHTTP *SteamGameServerHTTP() { return SteamGameServerInternal_ModuleContext().SteamHTTP(); }
+inline ISteamInventory *SteamGameServerInventory() { return SteamGameServerInternal_ModuleContext().SteamInventory(); }
+inline ISteamUGC *SteamGameServerUGC() { return SteamGameServerInternal_ModuleContext().SteamUGC(); }
+inline ISteamApps *SteamGameServerApps() { return SteamGameServerInternal_ModuleContext().SteamApps(); }
+#endif // !defined( STEAM_API_EXPORTS )
+
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamClient = NULL;
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamInventory = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamApps = NULL;
+}
+
+// This function must be declared inline in the header so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+ if ( !hSteamPipe )
+ return false;
+
+ m_pSteamClient = (ISteamClient*) SteamInternal_CreateInterface( STEAMCLIENT_INTERFACE_VERSION );
+ if ( !m_pSteamClient )
+ return false;
+
+ m_pSteamGameServer = m_pSteamClient->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = m_pSteamClient->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = m_pSteamClient->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = m_pSteamClient->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = m_pSteamClient->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamInventory = m_pSteamClient->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_pSteamUGC = m_pSteamClient->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamApps = m_pSteamClient->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ return true;
+}
+
+
+inline bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString )
+{
+ if ( !SteamInternal_GameServer_Init( unIP, usSteamPort, usGamePort, usQueryPort, eServerMode, pchVersionString ) )
+ return false;
+
+ return true;
+}
+
+
+inline void SteamGameServer_ReleaseCurrentThreadMemory()
+{
+ SteamAPI_ReleaseCurrentThreadMemory();
+}
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_140/steamclientpublic.h b/lsteamclient/steamworks_sdk_140/steamclientpublic.h
new file mode 100644
index 00000000..0a744e4e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/steamclientpublic.h
@@ -0,0 +1,1235 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to login
+ k_EResultItemDeleted = 86, // The thing we're trying to access has been deleted
+ k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to throttle response to possible attacker
+ k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch
+ k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for two-factor didn't match
+ k_EResultAccountAssociatedToMultiplePartners = 90, // account has been associated with multiple partners
+ k_EResultNotModified = 91, // data not modified
+ k_EResultNoMobileDevice = 92, // the account does not have a mobile device associated with it
+ k_EResultTimeNotSynced = 93, // the time presented is out of range or tolerance
+ k_EResultSmsCodeFailed = 94, // SMS code failure (no match, none pending, etc.)
+ k_EResultAccountLimitExceeded = 95, // Too many accounts access this resource
+ k_EResultAccountActivityLimitExceeded = 96, // Too many changes to this account
+ k_EResultPhoneActivityLimitExceeded = 97, // Too many changes to this phone
+ k_EResultRefundToWallet = 98, // Cannot refund to payment method, must use wallet
+ k_EResultEmailSendFailure = 99, // Cannot send an email
+ k_EResultNotSettled = 100, // Can't perform operation till payment has settled
+ k_EResultNeedCaptcha = 101, // Needs to provide a valid captcha
+ k_EResultGSLTDenied = 102, // a game server login token owned by this token's owner has been banned
+ k_EResultGSOwnerDenied = 103, // game server owner is denied for other reason (account lock, community ban, vac ban, missing phone)
+ k_EResultInvalidItemType = 104, // the type of thing we were requested to act on is invalid
+ k_EResultIPBanned = 105, // the ip address has been banned from taking this action
+ k_EResultGSLTExpired = 106, // this token has expired from disuse; can be reset for use
+ k_EResultInsufficientFunds = 107, // user doesn't have enough wallet funds to complete the action
+ k_EResultTooManyPending = 108, // There are too many of this thing pending already
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+ k_EVoiceResultReceiverOutOfDate = 8,
+ k_EVoiceResultReceiverDidNotAnswer = 9,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+enum EDenyReason
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+};
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+enum EBeginAuthSessionResult
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+};
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+enum EAuthSessionResponse
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+ k_EAuthSessionResponsePublisherIssuedBan = 9, // The user is banned for this game. The ban came via the web api and not VAC
+};
+
+// results from UserHasLicenseForApp
+enum EUserHasLicenseForAppResult
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+};
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x0000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x0001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x0002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x0004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x0008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x0010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x0020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x0040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_RetailLicense = 0x0080, // has a retail license for game, (CD-Key etc)
+ k_EAppOwnershipFlags_LicenseLocked = 0x0100, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x0200, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x0400, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x0800, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x1000, // Recurring license, user is charged periodically
+ k_EAppOwnershipFlags_LicenseCanceled = 0x2000, // Mark as canceled, but might be still active if recurring
+ k_EAppOwnershipFlags_AutoGrant = 0x4000, // Ownership is based on any kind of autogrant license
+ k_EAppOwnershipFlags_PendingGift = 0x8000, // user has pending gift to redeem
+ k_EAppOwnershipFlags_RentalNotActivated = 0x10000, // Rental hasn't been activated yet
+ k_EAppOwnershipFlags_Rental = 0x20000, // Is a rental
+ k_EAppOwnershipFlags_SiteLicense = 0x40000, // Is from a site license
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media_DEPRECATED = 0x010, // legacy - was used for game trailers, which are now just videos on the web
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+ k_EAppType_Hardware = 0x200, // a hardware device (Steam Machine, Steam Controller, Steam Link, etc.)
+ k_EAppType_Franchise = 0x400, // A hub for collections of multiple apps, eg films, series, games
+ k_EAppType_Video = 0x800, // A video component of either a Film or TVSeries (may be the feature, an episode, preview, making-of, etc)
+ k_EAppType_Plugin = 0x1000, // Plug-in types for other Apps
+ k_EAppType_Music = 0x2000, // Music files
+ k_EAppType_Series = 0x4000, // Container app for video series
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+ //k_EChatEntryTypeReserved1 = 12, // No longer used
+ //k_EChatEntryTypeReserved2 = 13, // No longer used
+ k_EChatEntryTypeLinkBlocked = 14, // a link was removed by the chat filter.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Broadcast upload result details
+//-----------------------------------------------------------------------------
+enum EBroadcastUploadResult
+{
+ k_EBroadcastUploadResultNone = 0, // broadcast state unknown
+ k_EBroadcastUploadResultOK = 1, // broadcast was good, no problems
+ k_EBroadcastUploadResultInitFailed = 2, // broadcast init failed
+ k_EBroadcastUploadResultFrameFailed = 3, // broadcast frame upload failed
+ k_EBroadcastUploadResultTimeout = 4, // broadcast upload timed out
+ k_EBroadcastUploadResultBandwidthExceeded = 5, // broadcast send too much data
+ k_EBroadcastUploadResultLowFPS = 6, // broadcast FPS too low
+ k_EBroadcastUploadResultMissingKeyFrames = 7, // broadcast sending not enough key frames
+ k_EBroadcastUploadResultNoConnection = 8, // broadcast client failed to connect to relay
+ k_EBroadcastUploadResultRelayFailed = 9, // relay dropped the upload
+ k_EBroadcastUploadResultSettingsChanged = 10, // the client changed broadcast settings
+ k_EBroadcastUploadResultMissingAudio = 11, // client failed to send audio data
+ k_EBroadcastUploadResultTooFarBehind = 12, // clients was too slow uploading
+ k_EBroadcastUploadResultTranscodeBehind = 13, // server failed to keep up with transcode
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: codes for well defined launch options
+//-----------------------------------------------------------------------------
+enum ELaunchOptionType
+{
+ k_ELaunchOptionType_None = 0, // unknown what launch option does
+ k_ELaunchOptionType_Default = 1, // runs the game, app, whatever in default mode
+ k_ELaunchOptionType_SafeMode = 2, // runs the game in safe mode
+ k_ELaunchOptionType_Multiplayer = 3, // runs the game in multiplayer mode
+ k_ELaunchOptionType_Config = 4, // runs config tool for this game
+ k_ELaunchOptionType_OpenVR = 5, // runs game in VR mode using OpenVR
+ k_ELaunchOptionType_Server = 6, // runs dedicated server for this game
+ k_ELaunchOptionType_Editor = 7, // runs game editor
+ k_ELaunchOptionType_Manual = 8, // shows game manual
+ k_ELaunchOptionType_Benchmark = 9, // runs game benchmark
+ k_ELaunchOptionType_Option1 = 10, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option2 = 11, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option3 = 12, // generic run option, uses description field for game name
+ k_ELaunchOptionType_OculusVR = 13, // runs game in VR mode using the Oculus SDK
+ k_ELaunchOptionType_OpenVROverlay = 14, // runs an OpenVR dashboard overlay
+ k_ELaunchOptionType_OSVR = 15, // runs game in VR mode using the OSVR SDK
+
+
+ k_ELaunchOptionType_Dialog = 1000, // show launch options dialog
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this launch option is any of the vr launching types
+//-----------------------------------------------------------------------------
+static inline bool BIsVRLaunchOptionType( const ELaunchOptionType eType )
+{
+ return eType == k_ELaunchOptionType_OpenVR
+ || eType == k_ELaunchOptionType_OpenVROverlay
+ || eType == k_ELaunchOptionType_OculusVR
+ || eType == k_ELaunchOptionType_OSVR;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: code points for VR HMD vendors and models
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN A DATABASE
+//-----------------------------------------------------------------------------
+enum EVRHMDType
+{
+ k_eEVRHMDType_None = -1, // unknown vendor and model
+
+ k_eEVRHMDType_Unknown = 0, // unknown vendor and model
+
+ k_eEVRHMDType_HTC_Dev = 1, // original HTC dev kits
+ k_eEVRHMDType_HTC_VivePre = 2, // htc vive pre
+ k_eEVRHMDType_HTC_Vive = 3, // htc vive consumer release
+
+ k_eEVRHMDType_HTC_Unknown = 20, // unknown htc hmd
+
+ k_eEVRHMDType_Oculus_DK1 = 21, // Oculus DK1
+ k_eEVRHMDType_Oculus_DK2 = 22, // Oculus DK2
+ k_eEVRHMDType_Oculus_Rift = 23, // Oculus rift
+
+ k_eEVRHMDType_Oculus_Unknown = 40, // // Oculus unknown HMD
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this is from an Oculus HMD
+//-----------------------------------------------------------------------------
+static inline bool BIsOculusHMD( EVRHMDType eType )
+{
+ return eType == k_eEVRHMDType_Oculus_DK1 || eType == k_eEVRHMDType_Oculus_DK2 || eType == k_eEVRHMDType_Oculus_Rift || eType == k_eEVRHMDType_Oculus_Unknown;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this is from an Vive HMD
+//-----------------------------------------------------------------------------
+static inline bool BIsViveHMD( EVRHMDType eType )
+{
+ return eType == k_eEVRHMDType_HTC_Dev || eType == k_eEVRHMDType_HTC_VivePre || eType == k_eEVRHMDType_HTC_Vive || eType == k_eEVRHMDType_HTC_Unknown;
+}
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM2_USERID_STRUCTS )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ V_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, V_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ if ( pchExePath )
+ CRC32_ProcessBuffer( &crc32, pchExePath, V_strlen( pchExePath ) );
+ if ( pchAppName )
+ CRC32_ProcessBuffer( &crc32, pchAppName, V_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, V_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_140/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_140/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_140/steamhttpenums.h b/lsteamclient/steamworks_sdk_140/steamhttpenums.h
new file mode 100644
index 00000000..b2f05d94
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/steamhttpenums.h
@@ -0,0 +1,98 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+ k_EHTTPMethodPATCH,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401, // You probably want 403 or something else. 401 implies you're sending a WWW-Authenticate header and the client can sent an Authorization header in response.
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+ k_EHTTPStatusCode4xxUnknown = 418, // 418 is reserved, so we'll use it to mean unknown
+ k_EHTTPStatusCode429TooManyRequests = 429,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+ k_EHTTPStatusCode5xxUnknown = 599,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_140/steamps3params.h b/lsteamclient/steamworks_sdk_140/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_140/steamtypes.h b/lsteamclient/steamworks_sdk_140/steamtypes.h
new file mode 100644
index 00000000..2b805ce7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/steamtypes.h
@@ -0,0 +1,181 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+#ifdef API_GEN
+# define CLANG_ATTR(ATTR) __attribute__((annotate( ATTR )))
+#else
+# define CLANG_ATTR(ATTR)
+#endif
+
+#define METHOD_DESC(DESC) CLANG_ATTR( "desc:" #DESC ";" )
+#define IGNOREATTR() CLANG_ATTR( "ignore" )
+#define OUT_STRUCT() CLANG_ATTR( "out_struct: ;" )
+#define OUT_STRING() CLANG_ATTR( "out_string: ;" )
+#define OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" )
+#define OUT_ARRAY_COUNT(COUNTER, DESC) CLANG_ATTR( "out_array_count:" #COUNTER ";desc:" #DESC )
+#define ARRAY_COUNT(COUNTER) CLANG_ATTR( "array_count:" #COUNTER ";" )
+#define ARRAY_COUNT_D(COUNTER, DESC) CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC )
+#define BUFFER_COUNT(COUNTER) CLANG_ATTR( "buffer_count:" #COUNTER ";" )
+#define OUT_BUFFER_COUNT(COUNTER) CLANG_ATTR( "out_buffer_count:" #COUNTER ";" )
+#define OUT_STRING_COUNT(COUNTER) CLANG_ATTR( "out_string_count:" #COUNTER ";" )
+#define DESC(DESC) CLANG_ATTR("desc:" #DESC ";")
+#define CALL_RESULT(RESULT_TYPE) CLANG_ATTR("callresult:" #RESULT_TYPE ";")
+#define CALL_BACK(RESULT_TYPE) CLANG_ATTR("callback:" #RESULT_TYPE ";")
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef uint64 JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+const JobID_t k_JobIDNil = 0xffffffffffffffffull;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+typedef uint32 BundleId_t;
+const BundleId_t k_uBundleIdInvalid = 0;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+// ID for a depot content manifest
+typedef uint64 ManifestId_t;
+const ManifestId_t k_uManifestIdInvalid = 0;
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_140/steamuniverse.h b/lsteamclient/steamworks_sdk_140/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_140/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_141/isteamapplist.h b/lsteamclient/steamworks_sdk_141/isteamapplist.h
new file mode 100644
index 00000000..d0d7e7e7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, OUT_STRING() char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_141/isteamapps.h b/lsteamclient/steamworks_sdk_141/isteamapps.h
new file mode 100644
index 00000000..89c0aaf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamapps.h
@@ -0,0 +1,176 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 240; // max supported length of a legacy cd key
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request legacy cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+ // get download progress for optional DLC
+ virtual bool GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // return the buildid of this app, may change at any time based on backend updates to the game
+ virtual int GetAppBuildId() = 0;
+
+ // Request all proof of purchase keys for the calling appid and asociated DLC.
+ // A series of AppProofOfPurchaseKeyResponse_t callbacks will be sent with
+ // appropriate appid values, ending with a final callback where the m_nAppId
+ // member is k_uAppIdInvalid (zero).
+ virtual void RequestAllProofOfPurchaseKeys() = 0;
+
+ CALL_RESULT( FileDetailsResult_t )
+ virtual SteamAPICall_t GetFileDetails( const char* pszFileName ) = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION008"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RequestAppProofOfPurchaseKey/RequestAllProofOfPurchaseKeys
+// for supporting third-party CD keys, or other proof-of-purchase systems.
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 21 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ uint32 m_cchKeyLength;
+ char m_rgchKey[k_cubAppProofOfPurchaseKeyMax];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetFileDetails
+//-----------------------------------------------------------------------------
+struct FileDetailsResult_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 23 };
+ EResult m_eResult;
+ uint64 m_ulFileSize; // original file size in bytes
+ uint8 m_FileSHA[20]; // original file SHA1 hash
+ uint32 m_unFlags; //
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_141/isteamappticket.h b/lsteamclient/steamworks_sdk_141/isteamappticket.h
new file mode 100644
index 00000000..082e263b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamappticket.h
@@ -0,0 +1,29 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_141/isteamclient.h b/lsteamclient/steamworks_sdk_141/isteamclient.h
new file mode 100644
index 00000000..14b5dc8a
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamclient.h
@@ -0,0 +1,526 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#if ( defined(STEAM_API_EXPORTS) || defined(STEAM_API_NODLL) ) && !defined(API_GEN)
+#define STEAM_PRIVATE_API( ... ) __VA_ARGS__
+#elif defined(STEAM_API_EXPORTS) && defined(API_GEN)
+#define STEAM_PRIVATE_API( ... )
+#else
+#define STEAM_PRIVATE_API( ... ) protected: __VA_ARGS__ public:
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct ValvePackingSentinel_t
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+extern "C" typedef uint32 ( *SteamAPI_CheckCallbackRegistered_t )( int iCallbackNum );
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamMusicRemote;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamUnifiedMessages;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+class ISteamHTMLSurface;
+class ISteamInventory;
+class ISteamVideo;
+class ISteamParentalSettings;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need these APIs if you have a more complex versioning scheme,
+// or if you want to implement a multiplexed gameserver where a single process
+// is handling multiple games at once with independent gameserver SteamIDs.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client.
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Deprecated. Applications should use SteamAPI_RunCallbacks() or SteamGameServer_RunCallbacks() instead.
+ STEAM_PRIVATE_API( virtual void RunFrame() = 0; )
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message.
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUnifiedMessages interface
+ virtual ISteamUnifiedMessages *GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player Remote
+ virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // html page display
+ virtual ISteamHTMLSurface *GetISteamHTMLSurface(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // Helper functions for internal Steam usage
+ STEAM_PRIVATE_API( virtual void DEPRECATED_Set_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; )
+ STEAM_PRIVATE_API( virtual void DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; )
+ STEAM_PRIVATE_API( virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0; )
+
+ // inventory
+ virtual ISteamInventory *GetISteamInventory( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Video
+ virtual ISteamVideo *GetISteamVideo( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Parental controls
+ virtual ISteamParentalSettings *GetISteamParentalSettings( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient017"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iClientDepotBuilderCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+enum { k_iSteamMusicRemoteCallbacks = 4100 };
+enum { k_iClientVRCallbacks = 4200 };
+enum { k_iClientGameNotificationCallbacks = 4300 };
+enum { k_iSteamGameNotificationCallbacks = 4400 };
+enum { k_iSteamHTMLSurfaceCallbacks = 4500 };
+enum { k_iClientVideoCallbacks = 4600 };
+enum { k_iClientInventoryCallbacks = 4700 };
+enum { k_iClientBluetoothManagerCallbacks = 4800 };
+enum { k_iClientSharedConnectionCallbacks = 4900 };
+enum { k_ISteamParentalSettingsCallbacks = 5000 };
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+#ifdef STEAM_CALLBACK_INSPECTION_ENABLED
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname { \
+ typedef callbackname SteamCallback_t; \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+#else
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) struct callbackname { typedef callbackname SteamCallback_t; enum { k_iCallback = callbackid };
+#define CALLBACK_MEMBER( varidx, vartype, varname ) public: vartype varname ;
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) public: vartype varname [ varcount ];
+#define END_CALLBACK_INTERNAL_BEGIN( numvars )
+#define END_CALLBACK_INTERNAL_SWITCH( varidx )
+#define END_CALLBACK_INTERNAL_END() };
+#define END_DEFINE_CALLBACK_0() };
+
+#endif
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_10() \
+ END_CALLBACK_INTERNAL_BEGIN( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_11() \
+ END_CALLBACK_INTERNAL_BEGIN( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_12() \
+ END_CALLBACK_INTERNAL_BEGIN( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_13() \
+ END_CALLBACK_INTERNAL_BEGIN( 13 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_14() \
+ END_CALLBACK_INTERNAL_BEGIN( 14 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 13 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_141/isteamcontroller.h b/lsteamclient/steamworks_sdk_141/isteamcontroller.h
new file mode 100644
index 00000000..36948b77
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamcontroller.h
@@ -0,0 +1,440 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define STEAM_CONTROLLER_MAX_COUNT 16
+
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTIONS 16
+
+#define STEAM_CONTROLLER_MAX_DIGITAL_ACTIONS 128
+
+#define STEAM_CONTROLLER_MAX_ORIGINS 8
+
+// When sending an option to a specific controller handle, you can send to all controllers via this command
+#define STEAM_CONTROLLER_HANDLE_ALL_CONTROLLERS UINT64_MAX
+
+#define STEAM_CONTROLLER_MIN_ANALOG_ACTION_DATA -1.0f
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTION_DATA 1.0f
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+enum EControllerSource
+{
+ k_EControllerSource_None,
+ k_EControllerSource_LeftTrackpad,
+ k_EControllerSource_RightTrackpad,
+ k_EControllerSource_Joystick,
+ k_EControllerSource_ABXY,
+ k_EControllerSource_Switch,
+ k_EControllerSource_LeftTrigger,
+ k_EControllerSource_RightTrigger,
+ k_EControllerSource_Gyro,
+ k_EControllerSource_CenterTrackpad, // PS4
+ k_EControllerSource_RightJoystick, // Traditional Controllers
+ k_EControllerSource_DPad, // Traditional Controllers
+ k_EControllerSource_Count
+};
+
+enum EControllerSourceMode
+{
+ k_EControllerSourceMode_None,
+ k_EControllerSourceMode_Dpad,
+ k_EControllerSourceMode_Buttons,
+ k_EControllerSourceMode_FourButtons,
+ k_EControllerSourceMode_AbsoluteMouse,
+ k_EControllerSourceMode_RelativeMouse,
+ k_EControllerSourceMode_JoystickMove,
+ k_EControllerSourceMode_JoystickMouse,
+ k_EControllerSourceMode_JoystickCamera,
+ k_EControllerSourceMode_ScrollWheel,
+ k_EControllerSourceMode_Trigger,
+ k_EControllerSourceMode_TouchMenu,
+ k_EControllerSourceMode_MouseJoystick,
+ k_EControllerSourceMode_MouseRegion,
+ k_EControllerSourceMode_RadialMenu,
+ k_EControllerSourceMode_SingleButton,
+ k_EControllerSourceMode_Switches
+};
+
+enum EControllerActionOrigin
+{
+ // Steam Controller
+ k_EControllerActionOrigin_None,
+ k_EControllerActionOrigin_A,
+ k_EControllerActionOrigin_B,
+ k_EControllerActionOrigin_X,
+ k_EControllerActionOrigin_Y,
+ k_EControllerActionOrigin_LeftBumper,
+ k_EControllerActionOrigin_RightBumper,
+ k_EControllerActionOrigin_LeftGrip,
+ k_EControllerActionOrigin_RightGrip,
+ k_EControllerActionOrigin_Start,
+ k_EControllerActionOrigin_Back,
+ k_EControllerActionOrigin_LeftPad_Touch,
+ k_EControllerActionOrigin_LeftPad_Swipe,
+ k_EControllerActionOrigin_LeftPad_Click,
+ k_EControllerActionOrigin_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_LeftPad_DPadWest,
+ k_EControllerActionOrigin_LeftPad_DPadEast,
+ k_EControllerActionOrigin_RightPad_Touch,
+ k_EControllerActionOrigin_RightPad_Swipe,
+ k_EControllerActionOrigin_RightPad_Click,
+ k_EControllerActionOrigin_RightPad_DPadNorth,
+ k_EControllerActionOrigin_RightPad_DPadSouth,
+ k_EControllerActionOrigin_RightPad_DPadWest,
+ k_EControllerActionOrigin_RightPad_DPadEast,
+ k_EControllerActionOrigin_LeftTrigger_Pull,
+ k_EControllerActionOrigin_LeftTrigger_Click,
+ k_EControllerActionOrigin_RightTrigger_Pull,
+ k_EControllerActionOrigin_RightTrigger_Click,
+ k_EControllerActionOrigin_LeftStick_Move,
+ k_EControllerActionOrigin_LeftStick_Click,
+ k_EControllerActionOrigin_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_LeftStick_DPadWest,
+ k_EControllerActionOrigin_LeftStick_DPadEast,
+ k_EControllerActionOrigin_Gyro_Move,
+ k_EControllerActionOrigin_Gyro_Pitch,
+ k_EControllerActionOrigin_Gyro_Yaw,
+ k_EControllerActionOrigin_Gyro_Roll,
+
+ // PS4 Dual Shock
+ k_EControllerActionOrigin_PS4_X,
+ k_EControllerActionOrigin_PS4_Circle,
+ k_EControllerActionOrigin_PS4_Triangle,
+ k_EControllerActionOrigin_PS4_Square,
+ k_EControllerActionOrigin_PS4_LeftBumper,
+ k_EControllerActionOrigin_PS4_RightBumper,
+ k_EControllerActionOrigin_PS4_Options, //Start
+ k_EControllerActionOrigin_PS4_Share, //Back
+ k_EControllerActionOrigin_PS4_LeftPad_Touch,
+ k_EControllerActionOrigin_PS4_LeftPad_Swipe,
+ k_EControllerActionOrigin_PS4_LeftPad_Click,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadWest,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadEast,
+ k_EControllerActionOrigin_PS4_RightPad_Touch,
+ k_EControllerActionOrigin_PS4_RightPad_Swipe,
+ k_EControllerActionOrigin_PS4_RightPad_Click,
+ k_EControllerActionOrigin_PS4_RightPad_DPadNorth,
+ k_EControllerActionOrigin_PS4_RightPad_DPadSouth,
+ k_EControllerActionOrigin_PS4_RightPad_DPadWest,
+ k_EControllerActionOrigin_PS4_RightPad_DPadEast,
+ k_EControllerActionOrigin_PS4_CenterPad_Touch,
+ k_EControllerActionOrigin_PS4_CenterPad_Swipe,
+ k_EControllerActionOrigin_PS4_CenterPad_Click,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadNorth,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadSouth,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadWest,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadEast,
+ k_EControllerActionOrigin_PS4_LeftTrigger_Pull,
+ k_EControllerActionOrigin_PS4_LeftTrigger_Click,
+ k_EControllerActionOrigin_PS4_RightTrigger_Pull,
+ k_EControllerActionOrigin_PS4_RightTrigger_Click,
+ k_EControllerActionOrigin_PS4_LeftStick_Move,
+ k_EControllerActionOrigin_PS4_LeftStick_Click,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadWest,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadEast,
+ k_EControllerActionOrigin_PS4_RightStick_Move,
+ k_EControllerActionOrigin_PS4_RightStick_Click,
+ k_EControllerActionOrigin_PS4_RightStick_DPadNorth,
+ k_EControllerActionOrigin_PS4_RightStick_DPadSouth,
+ k_EControllerActionOrigin_PS4_RightStick_DPadWest,
+ k_EControllerActionOrigin_PS4_RightStick_DPadEast,
+ k_EControllerActionOrigin_PS4_DPad_North,
+ k_EControllerActionOrigin_PS4_DPad_South,
+ k_EControllerActionOrigin_PS4_DPad_West,
+ k_EControllerActionOrigin_PS4_DPad_East,
+ k_EControllerActionOrigin_PS4_Gyro_Move,
+ k_EControllerActionOrigin_PS4_Gyro_Pitch,
+ k_EControllerActionOrigin_PS4_Gyro_Yaw,
+ k_EControllerActionOrigin_PS4_Gyro_Roll,
+
+ // XBox One
+ k_EControllerActionOrigin_XBoxOne_A,
+ k_EControllerActionOrigin_XBoxOne_B,
+ k_EControllerActionOrigin_XBoxOne_X,
+ k_EControllerActionOrigin_XBoxOne_Y,
+ k_EControllerActionOrigin_XBoxOne_LeftBumper,
+ k_EControllerActionOrigin_XBoxOne_RightBumper,
+ k_EControllerActionOrigin_XBoxOne_Menu, //Start
+ k_EControllerActionOrigin_XBoxOne_View, //Back
+ k_EControllerActionOrigin_XBoxOne_LeftTrigger_Pull,
+ k_EControllerActionOrigin_XBoxOne_LeftTrigger_Click,
+ k_EControllerActionOrigin_XBoxOne_RightTrigger_Pull,
+ k_EControllerActionOrigin_XBoxOne_RightTrigger_Click,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_Move,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_Click,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadWest,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadEast,
+ k_EControllerActionOrigin_XBoxOne_RightStick_Move,
+ k_EControllerActionOrigin_XBoxOne_RightStick_Click,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadNorth,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadSouth,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadWest,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadEast,
+ k_EControllerActionOrigin_XBoxOne_DPad_North,
+ k_EControllerActionOrigin_XBoxOne_DPad_South,
+ k_EControllerActionOrigin_XBoxOne_DPad_West,
+ k_EControllerActionOrigin_XBoxOne_DPad_East,
+
+ // XBox 360
+ k_EControllerActionOrigin_XBox360_A,
+ k_EControllerActionOrigin_XBox360_B,
+ k_EControllerActionOrigin_XBox360_X,
+ k_EControllerActionOrigin_XBox360_Y,
+ k_EControllerActionOrigin_XBox360_LeftBumper,
+ k_EControllerActionOrigin_XBox360_RightBumper,
+ k_EControllerActionOrigin_XBox360_Start, //Start
+ k_EControllerActionOrigin_XBox360_Back, //Back
+ k_EControllerActionOrigin_XBox360_LeftTrigger_Pull,
+ k_EControllerActionOrigin_XBox360_LeftTrigger_Click,
+ k_EControllerActionOrigin_XBox360_RightTrigger_Pull,
+ k_EControllerActionOrigin_XBox360_RightTrigger_Click,
+ k_EControllerActionOrigin_XBox360_LeftStick_Move,
+ k_EControllerActionOrigin_XBox360_LeftStick_Click,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadWest,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadEast,
+ k_EControllerActionOrigin_XBox360_RightStick_Move,
+ k_EControllerActionOrigin_XBox360_RightStick_Click,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadNorth,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadSouth,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadWest,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadEast,
+ k_EControllerActionOrigin_XBox360_DPad_North,
+ k_EControllerActionOrigin_XBox360_DPad_South,
+ k_EControllerActionOrigin_XBox360_DPad_West,
+ k_EControllerActionOrigin_XBox360_DPad_East,
+
+ // SteamController V2
+ k_EControllerActionOrigin_SteamV2_A,
+ k_EControllerActionOrigin_SteamV2_B,
+ k_EControllerActionOrigin_SteamV2_X,
+ k_EControllerActionOrigin_SteamV2_Y,
+ k_EControllerActionOrigin_SteamV2_LeftBumper,
+ k_EControllerActionOrigin_SteamV2_RightBumper,
+ k_EControllerActionOrigin_SteamV2_LeftGrip,
+ k_EControllerActionOrigin_SteamV2_RightGrip,
+ k_EControllerActionOrigin_SteamV2_LeftGrip_Upper,
+ k_EControllerActionOrigin_SteamV2_RightGrip_Upper,
+ k_EControllerActionOrigin_SteamV2_LeftBumper_Pressure,
+ k_EControllerActionOrigin_SteamV2_RightBumper_Pressure,
+ k_EControllerActionOrigin_SteamV2_LeftGrip_Pressure,
+ k_EControllerActionOrigin_SteamV2_RightGrip_Pressure,
+ k_EControllerActionOrigin_SteamV2_LeftGrip_Upper_Pressure,
+ k_EControllerActionOrigin_SteamV2_RightGrip_Upper_Pressure,
+ k_EControllerActionOrigin_SteamV2_Start,
+ k_EControllerActionOrigin_SteamV2_Back,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Touch,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Swipe,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Click,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Pressure,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadWest,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadEast,
+ k_EControllerActionOrigin_SteamV2_RightPad_Touch,
+ k_EControllerActionOrigin_SteamV2_RightPad_Swipe,
+ k_EControllerActionOrigin_SteamV2_RightPad_Click,
+ k_EControllerActionOrigin_SteamV2_RightPad_Pressure,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadNorth,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadSouth,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadWest,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadEast,
+ k_EControllerActionOrigin_SteamV2_LeftTrigger_Pull,
+ k_EControllerActionOrigin_SteamV2_LeftTrigger_Click,
+ k_EControllerActionOrigin_SteamV2_RightTrigger_Pull,
+ k_EControllerActionOrigin_SteamV2_RightTrigger_Click,
+ k_EControllerActionOrigin_SteamV2_LeftStick_Move,
+ k_EControllerActionOrigin_SteamV2_LeftStick_Click,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadWest,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadEast,
+ k_EControllerActionOrigin_SteamV2_Gyro_Move,
+ k_EControllerActionOrigin_SteamV2_Gyro_Pitch,
+ k_EControllerActionOrigin_SteamV2_Gyro_Yaw,
+ k_EControllerActionOrigin_SteamV2_Gyro_Roll,
+
+ k_EControllerActionOrigin_Count
+};
+
+enum ESteamControllerLEDFlag
+{
+ k_ESteamControllerLEDFlag_SetColor,
+ k_ESteamControllerLEDFlag_RestoreUserDefault
+};
+
+// ControllerHandle_t is used to refer to a specific controller.
+// This handle will consistently identify a controller, even if it is disconnected and re-connected
+typedef uint64 ControllerHandle_t;
+
+
+// These handles are used to refer to a specific in-game action or action set
+// All action handles should be queried during initialization for performance reasons
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+
+#pragma pack( push, 1 )
+
+struct ControllerAnalogActionData_t
+{
+ // Type of data coming from this action, this will match what got specified in the action set
+ EControllerSourceMode eMode;
+
+ // The current state of this action; will be delta updates for mouse actions
+ float x, y;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+struct ControllerDigitalActionData_t
+{
+ // The current state of this action; will be true if currently pressed
+ bool bState;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+struct ControllerMotionData_t
+{
+ // Sensor-fused absolute rotation; will drift in heading
+ float rotQuatX;
+ float rotQuatY;
+ float rotQuatZ;
+ float rotQuatW;
+
+ // Positional acceleration
+ float posAccelX;
+ float posAccelY;
+ float posAccelZ;
+
+ // Angular velocity
+ float rotVelX;
+ float rotVelY;
+ float rotVelZ;
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ // Init and Shutdown must be called when starting/ending use of this interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Synchronize API state with the latest Steam Controller inputs available. This
+ // is performed automatically by SteamAPI_RunCallbacks, but for the absolute lowest
+ // possible latency, you call this directly before reading controller state.
+ virtual void RunFrame() = 0;
+
+ // Enumerate currently connected controllers
+ // handlesOut should point to a STEAM_CONTROLLER_MAX_COUNT sized array of ControllerHandle_t handles
+ // Returns the number of handles written to handlesOut
+ virtual int GetConnectedControllers( ControllerHandle_t *handlesOut ) = 0;
+
+ // Invokes the Steam overlay and brings up the binding screen
+ // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
+ virtual bool ShowBindingPanel( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTION SETS
+ // Lookup the handle for an Action Set. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerActionSetHandle_t GetActionSetHandle( const char *pszActionSetName ) = 0;
+
+ // Reconfigure the controller to use the specified action set (ie 'Menu', 'Walk' or 'Drive')
+ // This is cheap, and can be safely called repeatedly. It's often easier to repeatedly call it in
+ // your state loops, instead of trying to place it in all of your state transitions.
+ virtual void ActivateActionSet( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle ) = 0;
+ virtual ControllerActionSetHandle_t GetCurrentActionSet( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTIONS
+ // Lookup the handle for a digital action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerDigitalActionHandle_t GetDigitalActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of the supplied digital game action
+ virtual ControllerDigitalActionData_t GetDigitalActionData( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle ) = 0;
+
+ // Get the origin(s) for a digital action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ // Lookup the handle for an analog action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerAnalogActionHandle_t GetAnalogActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of these supplied analog game action
+ virtual ControllerAnalogActionData_t GetAnalogActionData( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle ) = 0;
+
+ // Get the origin(s) for an analog action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ virtual void StopAnalogActionMomentum( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction ) = 0;
+
+ // Trigger a haptic pulse on a controller
+ virtual void TriggerHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ // Trigger a pulse with a duty cycle of usDurationMicroSec / usOffMicroSec, unRepeat times.
+ // nFlags is currently unused and reserved for future use.
+ virtual void TriggerRepeatedHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags ) = 0;
+
+ // Tigger a vibration event on supported controllers.
+ virtual void TriggerVibration( ControllerHandle_t controllerHandle, unsigned short usLeftSpeed, unsigned short usRightSpeed ) = 0;
+
+ // Set the controller LED color on supported controllers.
+ virtual void SetLEDColor( ControllerHandle_t controllerHandle, uint8 nColorR, uint8 nColorG, uint8 nColorB, unsigned int nFlags ) = 0;
+
+ // Returns the associated gamepad index for the specified controller, if emulating a gamepad
+ virtual int GetGamepadIndexForController( ControllerHandle_t ulControllerHandle ) = 0;
+
+ // Returns the associated controller handle for the specified emulated gamepad
+ virtual ControllerHandle_t GetControllerForGamepadIndex( int nIndex ) = 0;
+
+ // Returns raw motion data from the specified controller
+ virtual ControllerMotionData_t GetMotionData( ControllerHandle_t controllerHandle ) = 0;
+
+ // Attempt to display origins of given action in the controller HUD, for the currently active action set
+ // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
+ virtual bool ShowDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition ) = 0;
+ virtual bool ShowAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition ) = 0;
+
+ // Returns a localized string (from Steam's language setting) for the specified origin
+ virtual const char *GetStringForActionOrigin( EControllerActionOrigin eOrigin ) = 0;
+
+ // Get a local path to art for on-screen glyph for a particular origin
+ virtual const char *GetGlyphForActionOrigin( EControllerActionOrigin eOrigin ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "SteamController005"
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_141/isteamfriends.h b/lsteamclient/steamworks_sdk_141/isteamfriends.h
new file mode 100644
index 00000000..44f4682e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamfriends.h
@@ -0,0 +1,636 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1, // this doesn't get stored; the user has just done an Ignore on an friendship invite
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5, // this is stored; the user has explicit blocked this other user from comments/chat/etc
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested_DEPRECATED = 7, // was used by the original implementation of the facebook linking feature, but now unused.
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+// friends group identifier type
+typedef int16 FriendsGroupID_t;
+
+// invalid friends group identifier constant
+const FriendsGroupID_t k_FriendsGroupID_Invalid = -1;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ // k_EFriendFlagSuggested = 0x800, // not used
+ k_EFriendFlagChatMember = 0x1000,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ CALL_RESULT( SetPersonaNameResponse_t )
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, OUT_STRUCT() FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+ // friends steam level
+ virtual int GetFriendSteamLevel( CSteamID steamIDFriend ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // friend grouping (tag) apis
+ // returns the number of friends groups
+ virtual int GetFriendsGroupCount() = 0;
+ // returns the friends group ID for the given index (invalid indices return k_FriendsGroupID_Invalid)
+ virtual FriendsGroupID_t GetFriendsGroupIDByIndex( int iFG ) = 0;
+ // returns the name for the given friends group (NULL in the case of invalid friends group IDs)
+ virtual const char *GetFriendsGroupName( FriendsGroupID_t friendsGroupID ) = 0;
+ // returns the number of members in a given friends group
+ virtual int GetFriendsGroupMembersCount( FriendsGroupID_t friendsGroupID ) = 0;
+ // gets up to nMembersCount members of the given friends group, if fewer exist than requested those positions' SteamIDs will be invalid
+ virtual void GetFriendsGroupMembersList( FriendsGroupID_t friendsGroupID, OUT_ARRAY_CALL(nMembersCount, GetFriendsGroupMembersCount, friendsGroupID ) CSteamID *pOutSteamIDMembers, int nMembersCount ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( ARRAY_COUNT(cClansToRequest) CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ CALL_RESULT( ClanOfficerListResponse_t )
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Note the following limits: k_cchMaxRichPresenceKeys, k_cchMaxRichPresenceKeyLength, k_cchMaxRichPresenceValueLength
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ CALL_RESULT( JoinClanChatRoomCompletionResult_t )
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, OUT_STRUCT() CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ CALL_RESULT( FriendsGetFollowerCount_t )
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ CALL_RESULT( FriendsIsFollowing_t )
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ CALL_RESULT( FriendsEnumerateFollowingList_t )
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends015"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_141/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_141/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_141/isteamgameserver.h b/lsteamclient/steamworks_sdk_141/isteamgameserver.h
new file mode 100644
index 00000000..2004c830
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamgameserver.h
@@ -0,0 +1,387 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ CALL_RESULT( GSReputation_t )
+ virtual SteamAPICall_t GetServerReputation() = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ CALL_RESULT( AssociateWithClanResult_t )
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ CALL_RESULT( ComputeNewPlayerCompatibilityResult_t )
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_141/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_141/isteamgameserverstats.h
new file mode 100644
index 00000000..e4c7d648
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamgameserverstats.h
@@ -0,0 +1,101 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ CALL_RESULT( GSStatsReceived_t )
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ CALL_RESULT( GSStatsStored_t )
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_141/isteamhtmlsurface.h b/lsteamclient/steamworks_sdk_141/isteamhtmlsurface.h
new file mode 100644
index 00000000..936270ed
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamhtmlsurface.h
@@ -0,0 +1,457 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to display html pages in a texture
+//
+//=============================================================================
+
+#ifndef ISTEAMHTMLSURFACE_H
+#define ISTEAMHTMLSURFACE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+typedef uint32 HHTMLBrowser;
+const uint32 INVALID_HTMLBROWSER = 0;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for displaying HTML pages and interacting with them
+//-----------------------------------------------------------------------------
+class ISteamHTMLSurface
+{
+public:
+ virtual ~ISteamHTMLSurface() {}
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Create a browser object for display of a html page, when creation is complete the call handle
+ // will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser.
+ // The user agent string is a substring to be added to the general user agent string so you can
+ // identify your client on web servers.
+ // The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if
+ // you do not require this functionality.
+ //
+ // YOU MUST HAVE IMPLEMENTED HANDLERS FOR HTML_BrowserReady_t, HTML_StartRequest_t,
+ // HTML_JSAlert_t, HTML_JSConfirm_t, and HTML_FileOpenDialog_t! See the CALLBACKS
+ // section of this interface (AllowStartRequest, etc) for more details. If you do
+ // not implement these callback handlers, the browser may appear to hang instead of
+ // navigating to new pages or triggering javascript popups.
+ //
+ CALL_RESULT( HTML_BrowserReady_t )
+ virtual SteamAPICall_t CreateBrowser( const char *pchUserAgent, const char *pchUserCSS ) = 0;
+
+ // Call this when you are done with a html surface, this lets us free the resources being used by it
+ virtual void RemoveBrowser( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // Navigate to this URL, results in a HTML_StartRequest_t as the request commences
+ virtual void LoadURL( HHTMLBrowser unBrowserHandle, const char *pchURL, const char *pchPostData ) = 0;
+
+ // Tells the surface the size in pixels to display the surface
+ virtual void SetSize( HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight ) = 0;
+
+ // Stop the load of the current html page
+ virtual void StopLoad( HHTMLBrowser unBrowserHandle ) = 0;
+ // Reload (most likely from local cache) the current page
+ virtual void Reload( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate back in the page history
+ virtual void GoBack( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate forward in the page history
+ virtual void GoForward( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // add this header to any url requests from this browser
+ virtual void AddHeader( HHTMLBrowser unBrowserHandle, const char *pchKey, const char *pchValue ) = 0;
+ // run this javascript script in the currently loaded page
+ virtual void ExecuteJavascript( HHTMLBrowser unBrowserHandle, const char *pchScript ) = 0;
+
+ enum EHTMLMouseButton
+ {
+ eHTMLMouseButton_Left = 0,
+ eHTMLMouseButton_Right = 1,
+ eHTMLMouseButton_Middle = 2,
+ };
+
+ // Mouse click and mouse movement commands
+ virtual void MouseUp( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDown( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDoubleClick( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ // x and y are relative to the HTML bounds
+ virtual void MouseMove( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+ // nDelta is pixels of scroll
+ virtual void MouseWheel( HHTMLBrowser unBrowserHandle, int32 nDelta ) = 0;
+
+ enum EMouseCursor
+ {
+ dc_user = 0,
+ dc_none,
+ dc_arrow,
+ dc_ibeam,
+ dc_hourglass,
+ dc_waitarrow,
+ dc_crosshair,
+ dc_up,
+ dc_sizenw,
+ dc_sizese,
+ dc_sizene,
+ dc_sizesw,
+ dc_sizew,
+ dc_sizee,
+ dc_sizen,
+ dc_sizes,
+ dc_sizewe,
+ dc_sizens,
+ dc_sizeall,
+ dc_no,
+ dc_hand,
+ dc_blank, // don't show any custom cursor, just use your default
+ dc_middle_pan,
+ dc_north_pan,
+ dc_north_east_pan,
+ dc_east_pan,
+ dc_south_east_pan,
+ dc_south_pan,
+ dc_south_west_pan,
+ dc_west_pan,
+ dc_north_west_pan,
+ dc_alias,
+ dc_cell,
+ dc_colresize,
+ dc_copycur,
+ dc_verticaltext,
+ dc_rowresize,
+ dc_zoomin,
+ dc_zoomout,
+ dc_help,
+ dc_custom,
+
+ dc_last, // custom cursors start from this value and up
+ };
+
+ enum EHTMLKeyModifiers
+ {
+ k_eHTMLKeyModifier_None = 0,
+ k_eHTMLKeyModifier_AltDown = 1 << 0,
+ k_eHTMLKeyModifier_CtrlDown = 1 << 1,
+ k_eHTMLKeyModifier_ShiftDown = 1 << 2,
+ };
+
+ // keyboard interactions, native keycode is the virtual key code value from your OS
+ virtual void KeyDown( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ virtual void KeyUp( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ // cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press)
+ virtual void KeyChar( HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+
+ // programmatically scroll this many pixels on the page
+ virtual void SetHorizontalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+ virtual void SetVerticalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+
+ // tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things
+ virtual void SetKeyFocus( HHTMLBrowser unBrowserHandle, bool bHasKeyFocus ) = 0;
+
+ // open the current pages html code in the local editor of choice, used for debugging
+ virtual void ViewSource( HHTMLBrowser unBrowserHandle ) = 0;
+ // copy the currently selected text on the html page to the local clipboard
+ virtual void CopyToClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+ // paste from the local clipboard to the current html page
+ virtual void PasteFromClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element
+ virtual void Find( HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse ) = 0;
+ // cancel a currently running find
+ virtual void StopFind( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // return details about the link at position x,y on the current page
+ virtual void GetLinkAtPosition( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+
+ // set a webcookie for the hostname in question
+ virtual void SetCookie( const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath = "/", RTime32 nExpires = 0, bool bSecure = false, bool bHTTPOnly = false ) = 0;
+
+ // Zoom the current page by flZoom ( from 0.0 to 2.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care)
+ virtual void SetPageScaleFactor( HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY ) = 0;
+
+ // Enable/disable low-resource background mode, where javascript and repaint timers are throttled, resources are
+ // more aggressively purged from memory, and audio/video elements are paused. When background mode is enabled,
+ // all HTML5 video and audio objects will execute ".pause()" and gain the property "._steam_background_paused = 1".
+ // When background mode is disabled, any video or audio objects with that property will resume with ".play()".
+ virtual void SetBackgroundMode( HHTMLBrowser unBrowserHandle, bool bBackgroundMode ) = 0;
+
+ // Scale the output display space by this factor, this is useful when displaying content on high dpi devices.
+ // Specifies the ratio between physical and logical pixels.
+ virtual void SetDPIScalingFactor( HHTMLBrowser unBrowserHandle, float flDPIScaling ) = 0;
+
+ // CALLBACKS
+ //
+ // These set of functions are used as responses to callback requests
+ //
+
+ // You MUST call this in response to a HTML_StartRequest_t callback
+ // Set bAllowed to true to allow this navigation, false to cancel it and stay
+ // on the current page. You can use this feature to limit the valid pages
+ // allowed in your HTML surface.
+ virtual void AllowStartRequest( HHTMLBrowser unBrowserHandle, bool bAllowed ) = 0;
+
+ // You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback
+ // Set bResult to true for the OK option of a confirm, use false otherwise
+ virtual void JSDialogResponse( HHTMLBrowser unBrowserHandle, bool bResult ) = 0;
+
+ // You MUST call this in response to a HTML_FileOpenDialog_t callback
+ IGNOREATTR()
+ virtual void FileLoadDialogResponse( HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles ) = 0;
+};
+
+#define STEAMHTMLSURFACE_INTERFACE_VERSION "STEAMHTMLSURFACE_INTERFACE_VERSION_004"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser is ready for use
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_BrowserReady_t, k_iSteamHTMLSurfaceCallbacks + 1 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this browser is now fully created and ready to navigate to pages
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser has a pending paint
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_NeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 2)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint
+CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called
+CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture
+CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture
+CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update
+CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update
+CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update
+CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update
+CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered
+CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages
+END_DEFINE_CALLBACK_12()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser wanted to navigate to a new page
+// NOTE - you MUST call AllowStartRequest in response to this callback
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_StartRequest_t, k_iSteamHTMLSurfaceCallbacks + 3)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface navigating
+CALLBACK_MEMBER(1, const char *, pchURL) // the url they wish to navigate to
+CALLBACK_MEMBER(2, const char *, pchTarget) // the html link target type (i.e _blank, _self, _parent, _top )
+CALLBACK_MEMBER(3, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER(4, bool, bIsRedirect) // true if this was a http/html redirect from the last load request
+END_DEFINE_CALLBACK_5()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser has been requested to close due to user interaction (usually from a javascript window.close() call)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_CloseBrowser_t, k_iSteamHTMLSurfaceCallbacks + 4)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser is navigating to a new url
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_URLChanged_t, k_iSteamHTMLSurfaceCallbacks + 5 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface navigating
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the url they wish to navigate to
+CALLBACK_MEMBER( 2, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER( 3, bool, bIsRedirect ) // true if this was a http/html redirect from the last load request
+CALLBACK_MEMBER( 4, const char *, pchPageTitle ) // the title of the page
+CALLBACK_MEMBER( 5, bool, bNewNavigation ) // true if this was from a fresh tab and not a click on an existing page
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A page is finished loading
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FinishedRequest_t, k_iSteamHTMLSurfaceCallbacks + 6 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+CALLBACK_MEMBER( 2, const char *, pchPageTitle ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a request to load this url in a new tab
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_OpenLinkInNewTab_t, k_iSteamHTMLSurfaceCallbacks + 7 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the page has a new title now
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ChangedTitle_t, k_iSteamHTMLSurfaceCallbacks + 8 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: results from a search
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SearchResults_t, k_iSteamHTMLSurfaceCallbacks + 9 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unResults ) //
+CALLBACK_MEMBER( 2, uint32, unCurrentMatch ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: page history status changed on the ability to go backwards and forward
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_CanGoBackAndForward_t, k_iSteamHTMLSurfaceCallbacks + 10 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, bool, bCanGoBack ) //
+CALLBACK_MEMBER( 2, bool, bCanGoForward ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the horizontal scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HorizontalScroll_t, k_iSteamHTMLSurfaceCallbacks + 11 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool , bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the vertical scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_VerticalScroll_t, k_iSteamHTMLSurfaceCallbacks + 12 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool, bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetLinkAtPosition call
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_LinkAtPosition_t, k_iSteamHTMLSurfaceCallbacks + 13 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, x ) // NOTE - Not currently set
+CALLBACK_MEMBER( 2, uint32, y ) // NOTE - Not currently set
+CALLBACK_MEMBER( 3, const char *, pchURL ) //
+CALLBACK_MEMBER( 4, bool, bInput ) //
+CALLBACK_MEMBER( 5, bool, bLiveLink ) //
+END_DEFINE_CALLBACK_6()
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript alert dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSAlert_t, k_iSteamHTMLSurfaceCallbacks + 14 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript confirmation dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSConfirm_t, k_iSteamHTMLSurfaceCallbacks + 15 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: when received show a file open dialog
+// then call FileLoadDialogResponse with the file(s) the user selected.
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FileOpenDialog_t, k_iSteamHTMLSurfaceCallbacks + 16 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+CALLBACK_MEMBER( 2, const char *, pchInitialFile ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new html window has been created
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_NewWindow_t, k_iSteamHTMLSurfaceCallbacks + 21 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the current surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the page to load
+CALLBACK_MEMBER( 2, uint32, unX ) // the x pos into the page to display the popup
+CALLBACK_MEMBER( 3, uint32, unY ) // the y pos into the page to display the popup
+CALLBACK_MEMBER( 4, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 5, uint32, unTall ) // the total height of the pBGRA texture
+CALLBACK_MEMBER( 6, HHTMLBrowser, unNewWindow_BrowserHandle ) // the handle of the new window surface
+END_DEFINE_CALLBACK_7()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: change the cursor to display
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SetCursor_t, k_iSteamHTMLSurfaceCallbacks + 22 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, eMouseCursor ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: informational message from the browser
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_StatusText_t, k_iSteamHTMLSurfaceCallbacks + 23 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ShowToolTip_t, k_iSteamHTMLSurfaceCallbacks + 24 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: update the text of an existing tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_UpdateToolTip_t, k_iSteamHTMLSurfaceCallbacks + 25 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: hide the tooltip you are showing
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HideToolTip_t, k_iSteamHTMLSurfaceCallbacks + 26 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMHTMLSURFACE_H
diff --git a/lsteamclient/steamworks_sdk_141/isteamhttp.h b/lsteamclient/steamworks_sdk_141/isteamhttp.h
new file mode 100644
index 00000000..d96a631f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamhttp.h
@@ -0,0 +1,210 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+typedef uint32 HTTPCookieContainerHandle;
+#define INVALID_HTTPCOOKIE_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Both http and https are supported,
+ // so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+
+ // Creates a cookie container handle which you must later free with ReleaseCookieContainer(). If bAllowResponsesToModify=true
+ // than any response to your requests using this cookie container may add new cookies which may be transmitted with
+ // future requests. If bAllowResponsesToModify=false than only cookies you explicitly set will be sent. This API is just for
+ // during process lifetime, after steam restarts no cookies are persisted and you have no way to access the cookie container across
+ // repeat executions of your process.
+ virtual HTTPCookieContainerHandle CreateCookieContainer( bool bAllowResponsesToModify ) = 0;
+
+ // Release a cookie container you are finished using, freeing it's memory
+ virtual bool ReleaseCookieContainer( HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Adds a cookie to the specified cookie container that will be used with future requests.
+ virtual bool SetCookie( HTTPCookieContainerHandle hCookieContainer, const char *pchHost, const char *pchUrl, const char *pchCookie ) = 0;
+
+ // Set the cookie container to use for a HTTP request
+ virtual bool SetHTTPRequestCookieContainer( HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Set the extra user agent info for a request, this doesn't clobber the normal user agent, it just adds the extra info on the end
+ virtual bool SetHTTPRequestUserAgentInfo( HTTPRequestHandle hRequest, const char *pchUserAgentInfo ) = 0;
+
+ // Set that https request should require verified SSL certificate via machines certificate trust store
+ virtual bool SetHTTPRequestRequiresVerifiedCertificate( HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate ) = 0;
+
+ // Set an absolute timeout on the HTTP request, this is just a total time timeout different than the network activity timeout
+ // which can bump everytime we get more data
+ virtual bool SetHTTPRequestAbsoluteTimeoutMS( HTTPRequestHandle hRequest, uint32 unMilliseconds ) = 0;
+
+ // Check if the reason the request failed was because we timed it out (rather than some harder failure)
+ virtual bool GetHTTPRequestWasTimedOut( HTTPRequestHandle hRequest, bool *pbWasTimedOut ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+
+ uint32 m_unBodySize; // Same as GetHTTPResponseBodySize()
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_141/isteaminventory.h b/lsteamclient/steamworks_sdk_141/isteaminventory.h
new file mode 100644
index 00000000..e788a255
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteaminventory.h
@@ -0,0 +1,382 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Inventory
+//
+//=============================================================================
+
+#ifndef ISTEAMINVENTORY_H
+#define ISTEAMINVENTORY_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// Every individual instance of an item has a globally-unique ItemInstanceID.
+// This ID is unique to the combination of (player, specific item instance)
+// and will not be transferred to another player or re-used for another item.
+typedef uint64 SteamItemInstanceID_t;
+
+static const SteamItemInstanceID_t k_SteamItemInstanceIDInvalid = (SteamItemInstanceID_t)~0;
+
+// Types of items in your game are identified by a 32-bit "item definition number".
+// Valid definition numbers are between 1 and 999999999; numbers less than or equal to
+// zero are invalid, and numbers greater than or equal to one billion (1x10^9) are
+// reserved for internal Steam use.
+typedef int32 SteamItemDef_t;
+
+
+enum ESteamItemFlags
+{
+ // Item status flags - these flags are permanently attached to specific item instances
+ k_ESteamItemNoTrade = 1 << 0, // This item is account-locked and cannot be traded or given away.
+
+ // Action confirmation flags - these flags are set one time only, as part of a result set
+ k_ESteamItemRemoved = 1 << 8, // The item has been destroyed, traded away, expired, or otherwise invalidated
+ k_ESteamItemConsumed = 1 << 9, // The item quantity has been decreased by 1 via ConsumeItem API.
+
+ // All other flag bits are currently reserved for internal Steam use at this time.
+ // Do not assume anything about the state of other flags which are not defined here.
+};
+
+struct SteamItemDetails_t
+{
+ SteamItemInstanceID_t m_itemId;
+ SteamItemDef_t m_iDefinition;
+ uint16 m_unQuantity;
+ uint16 m_unFlags; // see ESteamItemFlags
+};
+
+typedef int32 SteamInventoryResult_t;
+
+static const SteamInventoryResult_t k_SteamInventoryResultInvalid = -1;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Inventory query and manipulation API
+//-----------------------------------------------------------------------------
+class ISteamInventory
+{
+public:
+
+ // INVENTORY ASYNC RESULT MANAGEMENT
+ //
+ // Asynchronous inventory queries always output a result handle which can be used with
+ // GetResultStatus, GetResultItems, etc. A SteamInventoryResultReady_t callback will
+ // be triggered when the asynchronous result becomes ready (or fails).
+ //
+
+ // Find out the status of an asynchronous inventory result handle. Possible values:
+ // k_EResultPending - still in progress
+ // k_EResultOK - done, result ready
+ // k_EResultExpired - done, result ready, maybe out of date (see DeserializeResult)
+ // k_EResultInvalidParam - ERROR: invalid API call parameters
+ // k_EResultServiceUnavailable - ERROR: service temporarily down, you may retry later
+ // k_EResultLimitExceeded - ERROR: operation would exceed per-user inventory limits
+ // k_EResultFail - ERROR: unknown / generic error
+ METHOD_DESC(Find out the status of an asynchronous inventory result handle.)
+ virtual EResult GetResultStatus( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Copies the contents of a result set into a flat array. The specific
+ // contents of the result set depend on which query which was used.
+ METHOD_DESC(Copies the contents of a result set into a flat array. The specific contents of the result set depend on which query which was used.)
+ virtual bool GetResultItems( SteamInventoryResult_t resultHandle,
+ OUT_ARRAY_COUNT( punOutItemsArraySize,Output array) SteamItemDetails_t *pOutItemsArray,
+ uint32 *punOutItemsArraySize ) = 0;
+
+ // In combination with GetResultItems, you can use GetResultItemProperty to retrieve
+ // dynamic string properties for a given item returned in the result set.
+ //
+ // Property names are always composed of ASCII letters, numbers, and/or underscores.
+ //
+ // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available
+ // property names.
+ //
+ // If pchValueBuffer is NULL, *punValueBufferSize will contain the
+ // suggested buffer size. Otherwise it will be the number of bytes actually copied
+ // to pchValueBuffer. If the results do not fit in the given buffer, partial
+ // results may be copied.
+ virtual bool GetResultItemProperty( SteamInventoryResult_t resultHandle,
+ uint32 unItemIndex,
+ const char *pchPropertyName,
+ OUT_STRING_COUNT( punValueBufferSizeOut ) char *pchValueBuffer, uint32 *punValueBufferSizeOut ) = 0;
+
+ // Returns the server time at which the result was generated. Compare against
+ // the value of IClientUtils::GetServerRealTime() to determine age.
+ METHOD_DESC(Returns the server time at which the result was generated. Compare against the value of IClientUtils::GetServerRealTime() to determine age.)
+ virtual uint32 GetResultTimestamp( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Returns true if the result belongs to the target steam ID, false if the
+ // result does not. This is important when using DeserializeResult, to verify
+ // that a remote player is not pretending to have a different user's inventory.
+ METHOD_DESC(Returns true if the result belongs to the target steam ID or false if the result does not. This is important when using DeserializeResult to verify that a remote player is not pretending to have a different users inventory.)
+ virtual bool CheckResultSteamID( SteamInventoryResult_t resultHandle, CSteamID steamIDExpected ) = 0;
+
+ // Destroys a result handle and frees all associated memory.
+ METHOD_DESC(Destroys a result handle and frees all associated memory.)
+ virtual void DestroyResult( SteamInventoryResult_t resultHandle ) = 0;
+
+
+ // INVENTORY ASYNC QUERY
+ //
+
+ // Captures the entire state of the current user's Steam inventory.
+ // You must call DestroyResult on this handle when you are done with it.
+ // Returns false and sets *pResultHandle to zero if inventory is unavailable.
+ // Note: calls to this function are subject to rate limits and may return
+ // cached results if called too frequently. It is suggested that you call
+ // this function only when you are about to display the user's full inventory,
+ // or if you expect that the inventory may have changed.
+ METHOD_DESC(Captures the entire state of the current users Steam inventory.)
+ virtual bool GetAllItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+
+ // Captures the state of a subset of the current user's Steam inventory,
+ // identified by an array of item instance IDs. The results from this call
+ // can be serialized and passed to other players to "prove" that the current
+ // user owns specific items, without exposing the user's entire inventory.
+ // For example, you could call GetItemsByID with the IDs of the user's
+ // currently equipped cosmetic items and serialize this to a buffer, and
+ // then transmit this buffer to other players upon joining a game.
+ METHOD_DESC(Captures the state of a subset of the current users Steam inventory identified by an array of item instance IDs.)
+ virtual bool GetItemsByID( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT( unCountInstanceIDs ) const SteamItemInstanceID_t *pInstanceIDs, uint32 unCountInstanceIDs ) = 0;
+
+
+ // RESULT SERIALIZATION AND AUTHENTICATION
+ //
+ // Serialized result sets contain a short signature which can't be forged
+ // or replayed across different game sessions. A result set can be serialized
+ // on the local client, transmitted to other players via your game networking,
+ // and deserialized by the remote players. This is a secure way of preventing
+ // hackers from lying about posessing rare/high-value items.
+
+ // Serializes a result set with signature bytes to an output buffer. Pass
+ // NULL as an output buffer to get the required size via punOutBufferSize.
+ // The size of a serialized result depends on the number items which are being
+ // serialized. When securely transmitting items to other players, it is
+ // recommended to use "GetItemsByID" first to create a minimal result set.
+ // Results have a built-in timestamp which will be considered "expired" after
+ // an hour has elapsed. See DeserializeResult for expiration handling.
+ virtual bool SerializeResult( SteamInventoryResult_t resultHandle, OUT_BUFFER_COUNT(punOutBufferSize) void *pOutBuffer, uint32 *punOutBufferSize ) = 0;
+
+ // Deserializes a result set and verifies the signature bytes. Returns false
+ // if bRequireFullOnlineVerify is set but Steam is running in Offline mode.
+ // Otherwise returns true and then delivers error codes via GetResultStatus.
+ //
+ // The bRESERVED_MUST_BE_FALSE flag is reserved for future use and should not
+ // be set to true by your game at this time.
+ //
+ // DeserializeResult has a potential soft-failure mode where the handle status
+ // is set to k_EResultExpired. GetResultItems() still succeeds in this mode.
+ // The "expired" result could indicate that the data may be out of date - not
+ // just due to timed expiration (one hour), but also because one of the items
+ // in the result set may have been traded or consumed since the result set was
+ // generated. You could compare the timestamp from GetResultTimestamp() to
+ // ISteamUtils::GetServerRealTime() to determine how old the data is. You could
+ // simply ignore the "expired" result code and continue as normal, or you
+ // could challenge the player with expired data to send an updated result set.
+ virtual bool DeserializeResult( SteamInventoryResult_t *pOutResultHandle, BUFFER_COUNT(punOutBufferSize) const void *pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE = false ) = 0;
+
+
+ // INVENTORY ASYNC MODIFICATION
+ //
+
+ // GenerateItems() creates one or more items and then generates a SteamInventoryCallback_t
+ // notification with a matching nCallbackContext parameter. This API is only intended
+ // for prototyping - it is only usable by Steam accounts that belong to the publisher group
+ // for your game.
+ // If punArrayQuantity is not NULL, it should be the same length as pArrayItems and should
+ // describe the quantity of each item to generate.
+ virtual bool GenerateItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, ARRAY_COUNT(unArrayLength) const uint32 *punArrayQuantity, uint32 unArrayLength ) = 0;
+
+ // GrantPromoItems() checks the list of promotional items for which the user may be eligible
+ // and grants the items (one time only). On success, the result set will include items which
+ // were granted, if any. If no items were granted because the user isn't eligible for any
+ // promotions, this is still considered a success.
+ METHOD_DESC(GrantPromoItems() checks the list of promotional items for which the user may be eligible and grants the items (one time only).)
+ virtual bool GrantPromoItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+ // AddPromoItem() / AddPromoItems() are restricted versions of GrantPromoItems(). Instead of
+ // scanning for all eligible promotional items, the check is restricted to a single item
+ // definition or set of item definitions. This can be useful if your game has custom UI for
+ // showing a specific promo item to the user.
+ virtual bool AddPromoItem( SteamInventoryResult_t *pResultHandle, SteamItemDef_t itemDef ) = 0;
+ virtual bool AddPromoItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, uint32 unArrayLength ) = 0;
+
+ // ConsumeItem() removes items from the inventory, permanently. They cannot be recovered.
+ // Not for the faint of heart - if your game implements item removal at all, a high-friction
+ // UI confirmation process is highly recommended.
+ METHOD_DESC(ConsumeItem() removes items from the inventory permanently.)
+ virtual bool ConsumeItem( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity ) = 0;
+
+ // ExchangeItems() is an atomic combination of item generation and consumption.
+ // It can be used to implement crafting recipes or transmutations, or items which unpack
+ // themselves into other items (e.g., a chest).
+ // Exchange recipes are defined in the ItemDef, and explicitly list the required item
+ // types and resulting generated type.
+ // Exchange recipes are evaluated atomically by the Inventory Service; if the supplied
+ // components do not match the recipe, or do not contain sufficient quantity, the
+ // exchange will fail.
+ virtual bool ExchangeItems( SteamInventoryResult_t *pResultHandle,
+ ARRAY_COUNT(unArrayGenerateLength) const SteamItemDef_t *pArrayGenerate, ARRAY_COUNT(unArrayGenerateLength) const uint32 *punArrayGenerateQuantity, uint32 unArrayGenerateLength,
+ ARRAY_COUNT(unArrayDestroyLength) const SteamItemInstanceID_t *pArrayDestroy, ARRAY_COUNT(unArrayDestroyLength) const uint32 *punArrayDestroyQuantity, uint32 unArrayDestroyLength ) = 0;
+
+
+ // TransferItemQuantity() is intended for use with items which are "stackable" (can have
+ // quantity greater than one). It can be used to split a stack into two, or to transfer
+ // quantity from one stack into another stack of identical items. To split one stack into
+ // two, pass k_SteamItemInstanceIDInvalid for itemIdDest and a new item will be generated.
+ virtual bool TransferItemQuantity( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest ) = 0;
+
+
+ // TIMED DROPS AND PLAYTIME CREDIT
+ //
+
+ // Deprecated. Calling this method is not required for proper playtime accounting.
+ METHOD_DESC( Deprecated method. Playtime accounting is performed on the Steam servers. )
+ virtual void SendItemDropHeartbeat() = 0;
+
+ // Playtime credit must be consumed and turned into item drops by your game. Only item
+ // definitions which are marked as "playtime item generators" can be spawned. The call
+ // will return an empty result set if there is not enough playtime credit for a drop.
+ // Your game should call TriggerItemDrop at an appropriate time for the user to receive
+ // new items, such as between rounds or while the player is dead. Note that players who
+ // hack their clients could modify the value of "dropListDefinition", so do not use it
+ // to directly control rarity.
+ // See your Steamworks configuration to set playtime drop rates for individual itemdefs.
+ // The client library will suppress too-frequent calls to this method.
+ METHOD_DESC(Playtime credit must be consumed and turned into item drops by your game.)
+ virtual bool TriggerItemDrop( SteamInventoryResult_t *pResultHandle, SteamItemDef_t dropListDefinition ) = 0;
+
+
+ // IN-GAME TRADING
+ //
+ // TradeItems() implements limited in-game trading of items, if you prefer not to use
+ // the overlay or an in-game web browser to perform Steam Trading through the website.
+ // You should implement a UI where both players can see and agree to a trade, and then
+ // each client should call TradeItems simultaneously (+/- 5 seconds) with matching
+ // (but reversed) parameters. The result is the same as if both players performed a
+ // Steam Trading transaction through the web. Each player will get an inventory result
+ // confirming the removal or quantity changes of the items given away, and the new
+ // item instance id numbers and quantities of the received items.
+ // (Note: new item instance IDs are generated whenever an item changes ownership.)
+ virtual bool TradeItems( SteamInventoryResult_t *pResultHandle, CSteamID steamIDTradePartner,
+ ARRAY_COUNT(nArrayGiveLength) const SteamItemInstanceID_t *pArrayGive, ARRAY_COUNT(nArrayGiveLength) const uint32 *pArrayGiveQuantity, uint32 nArrayGiveLength,
+ ARRAY_COUNT(nArrayGetLength) const SteamItemInstanceID_t *pArrayGet, ARRAY_COUNT(nArrayGetLength) const uint32 *pArrayGetQuantity, uint32 nArrayGetLength ) = 0;
+
+
+ // ITEM DEFINITIONS
+ //
+ // Item definitions are a mapping of "definition IDs" (integers between 1 and 1000000)
+ // to a set of string properties. Some of these properties are required to display items
+ // on the Steam community web site. Other properties can be defined by applications.
+ // Use of these functions is optional; there is no reason to call LoadItemDefinitions
+ // if your game hardcodes the numeric definition IDs (eg, purple face mask = 20, blue
+ // weapon mod = 55) and does not allow for adding new item types without a client patch.
+ //
+
+ // LoadItemDefinitions triggers the automatic load and refresh of item definitions.
+ // Every time new item definitions are available (eg, from the dynamic addition of new
+ // item types while players are still in-game), a SteamInventoryDefinitionUpdate_t
+ // callback will be fired.
+ METHOD_DESC(LoadItemDefinitions triggers the automatic load and refresh of item definitions.)
+ virtual bool LoadItemDefinitions() = 0;
+
+ // GetItemDefinitionIDs returns the set of all defined item definition IDs (which are
+ // defined via Steamworks configuration, and not necessarily contiguous integers).
+ // If pItemDefIDs is null, the call will return true and *punItemDefIDsArraySize will
+ // contain the total size necessary for a subsequent call. Otherwise, the call will
+ // return false if and only if there is not enough space in the output array.
+ virtual bool GetItemDefinitionIDs(
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+
+ // GetItemDefinitionProperty returns a string property from a given item definition.
+ // Note that some properties (for example, "name") may be localized and will depend
+ // on the current Steam language settings (see ISteamApps::GetCurrentGameLanguage).
+ // Property names are always composed of ASCII letters, numbers, and/or underscores.
+ // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available
+ // property names. If pchValueBuffer is NULL, *punValueBufferSize will contain the
+ // suggested buffer size. Otherwise it will be the number of bytes actually copied
+ // to pchValueBuffer. If the results do not fit in the given buffer, partial
+ // results may be copied.
+ virtual bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPropertyName,
+ OUT_STRING_COUNT(punValueBufferSizeOut) char *pchValueBuffer, uint32 *punValueBufferSizeOut ) = 0;
+
+ // Request the list of "eligible" promo items that can be manually granted to the given
+ // user. These are promo items of type "manual" that won't be granted automatically.
+ // An example usage of this is an item that becomes available every week.
+ CALL_RESULT( SteamInventoryEligiblePromoItemDefIDs_t )
+ virtual SteamAPICall_t RequestEligiblePromoItemDefinitionsIDs( CSteamID steamID ) = 0;
+
+ // After handling a SteamInventoryEligiblePromoItemDefIDs_t call result, use this
+ // function to pull out the list of item definition ids that the user can be
+ // manually granted via the AddPromoItems() call.
+ virtual bool GetEligiblePromoItemDefinitionIDs(
+ CSteamID steamID,
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+};
+
+#define STEAMINVENTORY_INTERFACE_VERSION "STEAMINVENTORY_INTERFACE_V002"
+
+
+// SteamInventoryResultReady_t callbacks are fired whenever asynchronous
+// results transition from "Pending" to "OK" or an error state. There will
+// always be exactly one callback per handle.
+struct SteamInventoryResultReady_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 0 };
+ SteamInventoryResult_t m_handle;
+ EResult m_result;
+};
+
+
+// SteamInventoryFullUpdate_t callbacks are triggered when GetAllItems
+// successfully returns a result which is newer / fresher than the last
+// known result. (It will not trigger if the inventory hasn't changed,
+// or if results from two overlapping calls are reversed in flight and
+// the earlier result is already known to be stale/out-of-date.)
+// The normal ResultReady callback will still be triggered immediately
+// afterwards; this is an additional notification for your convenience.
+struct SteamInventoryFullUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 1 };
+ SteamInventoryResult_t m_handle;
+};
+
+
+// A SteamInventoryDefinitionUpdate_t callback is triggered whenever
+// item definitions have been updated, which could be in response to
+// LoadItemDefinitions() or any other async request which required
+// a definition update in order to process results from the server.
+struct SteamInventoryDefinitionUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 2 };
+};
+
+// Returned
+struct SteamInventoryEligiblePromoItemDefIDs_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 3 };
+ EResult m_result;
+ CSteamID m_steamID;
+ int m_numEligiblePromoItemDefs;
+ bool m_bCachedData; // indicates that the data was retrieved from the cache and not the server
+};
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_141/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_141/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_141/isteammatchmaking.h b/lsteamclient/steamworks_sdk_141/isteammatchmaking.h
new file mode 100644
index 00000000..5af69129
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteammatchmaking.h
@@ -0,0 +1,751 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) = 0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ CALL_RESULT( LobbyMatchList_t )
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ CALL_RESULT( LobbyCreated_t )
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ CALL_RESULT( LobbyEnter_t )
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, OUT_STRUCT() CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, OUT_STRUCT() CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+ CALL_BACK( LobbyChatUpdate_t )
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_141/isteammusic.h b/lsteamclient/steamworks_sdk_141/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_141/isteammusicremote.h b/lsteamclient/steamworks_sdk_141/isteammusicremote.h
new file mode 100644
index 00000000..5893ef4b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteammusicremote.h
@@ -0,0 +1,129 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSICREMOTE_H
+#define ISTEAMMUSICREMOTE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteammusic.h"
+
+#define k_SteamMusicNameMaxLength 255
+#define k_SteamMusicPNGMaxLength 65535
+
+
+class ISteamMusicRemote
+{
+public:
+ // Service Definition
+ virtual bool RegisterSteamMusicRemote( const char *pchName ) = 0;
+ virtual bool DeregisterSteamMusicRemote() = 0;
+ virtual bool BIsCurrentMusicRemote() = 0;
+ virtual bool BActivationSuccess( bool bValue ) = 0;
+
+ virtual bool SetDisplayName( const char *pchDisplayName ) = 0;
+ virtual bool SetPNGIcon_64x64( void *pvBuffer, uint32 cbBufferLength ) = 0;
+
+ // Abilities for the user interface
+ virtual bool EnablePlayPrevious(bool bValue) = 0;
+ virtual bool EnablePlayNext( bool bValue ) = 0;
+ virtual bool EnableShuffled( bool bValue ) = 0;
+ virtual bool EnableLooped( bool bValue ) = 0;
+ virtual bool EnableQueue( bool bValue ) = 0;
+ virtual bool EnablePlaylists( bool bValue ) = 0;
+
+ // Status
+ virtual bool UpdatePlaybackStatus( AudioPlayback_Status nStatus ) = 0;
+ virtual bool UpdateShuffled( bool bValue ) = 0;
+ virtual bool UpdateLooped( bool bValue ) = 0;
+ virtual bool UpdateVolume( float flValue ) = 0; // volume is between 0.0 and 1.0
+
+ // Current Entry
+ virtual bool CurrentEntryWillChange() = 0;
+ virtual bool CurrentEntryIsAvailable( bool bAvailable ) = 0;
+ virtual bool UpdateCurrentEntryText( const char *pchText ) = 0;
+ virtual bool UpdateCurrentEntryElapsedSeconds( int nValue ) = 0;
+ virtual bool UpdateCurrentEntryCoverArt( void *pvBuffer, uint32 cbBufferLength ) = 0;
+ virtual bool CurrentEntryDidChange() = 0;
+
+ // Queue
+ virtual bool QueueWillChange() = 0;
+ virtual bool ResetQueueEntries() = 0;
+ virtual bool SetQueueEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentQueueEntry( int nID ) = 0;
+ virtual bool QueueDidChange() = 0;
+
+ // Playlist
+ virtual bool PlaylistWillChange() = 0;
+ virtual bool ResetPlaylistEntries() = 0;
+ virtual bool SetPlaylistEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentPlaylistEntry( int nID ) = 0;
+ virtual bool PlaylistDidChange() = 0;
+};
+
+#define STEAMMUSICREMOTE_INTERFACE_VERSION "STEAMMUSICREMOTE_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillActivate_t, k_iSteamMusicRemoteCallbacks + 1)
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillDeactivate_t, k_iSteamMusicRemoteCallbacks + 2 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteToFront_t, k_iSteamMusicRemoteCallbacks + 3 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWillQuit_t, k_iSteamMusicRemoteCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlay_t, k_iSteamMusicRemoteCallbacks + 5 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPause_t, k_iSteamMusicRemoteCallbacks + 6 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayPrevious_t, k_iSteamMusicRemoteCallbacks + 7 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayNext_t, k_iSteamMusicRemoteCallbacks + 8 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsShuffled_t, k_iSteamMusicRemoteCallbacks + 9 )
+ CALLBACK_MEMBER( 0, bool, m_bShuffled )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsLooped_t, k_iSteamMusicRemoteCallbacks + 10 )
+ CALLBACK_MEMBER(0, bool, m_bLooped )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsVolume_t, k_iSteamMusicCallbacks + 11 )
+ CALLBACK_MEMBER(0, float, m_flNewVolume)
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsQueueEntry_t, k_iSteamMusicCallbacks + 12 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsPlaylistEntry_t, k_iSteamMusicCallbacks + 13 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayingRepeatStatus_t, k_iSteamMusicRemoteCallbacks + 14 )
+ CALLBACK_MEMBER(0, int, m_nPlayingRepeatStatus )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+
+#endif // #define ISTEAMMUSICREMOTE_H
diff --git a/lsteamclient/steamworks_sdk_141/isteamnetworking.h b/lsteamclient/steamworks_sdk_141/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_141/isteamparentalsettings.h b/lsteamclient/steamworks_sdk_141/isteamparentalsettings.h
new file mode 100644
index 00000000..0753e556
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamparentalsettings.h
@@ -0,0 +1,60 @@
+//====== Copyright � 2013-, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to Steam parental settings (Family View)
+//
+//=============================================================================
+
+#ifndef ISTEAMPARENTALSETTINGS_H
+#define ISTEAMPARENTALSETTINGS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "isteamclient.h"
+
+// Feature types for parental settings
+enum EParentalFeature
+{
+ k_EFeatureInvalid = 0,
+ k_EFeatureStore = 1,
+ k_EFeatureCommunity = 2,
+ k_EFeatureProfile = 3,
+ k_EFeatureFriends = 4,
+ k_EFeatureNews = 5,
+ k_EFeatureTrading = 6,
+ k_EFeatureSettings = 7,
+ k_EFeatureConsole = 8,
+ k_EFeatureBrowser = 9,
+ k_EFeatureParentalSetup = 10,
+ k_EFeatureLibrary = 11,
+ k_EFeatureTest = 12,
+ k_EFeatureMax
+};
+
+class ISteamParentalSettings
+{
+public:
+ virtual bool BIsParentalLockEnabled() = 0;
+ virtual bool BIsParentalLockLocked() = 0;
+
+ virtual bool BIsAppBlocked( AppId_t nAppID ) = 0;
+ virtual bool BIsAppInBlockList( AppId_t nAppID ) = 0;
+
+ virtual bool BIsFeatureBlocked( EParentalFeature eFeature ) = 0;
+ virtual bool BIsFeatureInBlockList( EParentalFeature eFeature ) = 0;
+};
+
+#define STEAMPARENTALSETTINGS_INTERFACE_VERSION "STEAMPARENTALSETTINGS_INTERFACE_VERSION001"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamParentalSettingsChanged_t
+{
+ enum { k_iCallback = k_ISteamParentalSettingsCallbacks + 1 };
+};
+
+
+#endif // ISTEAMPARENTALSETTINGS_H
diff --git a/lsteamclient/steamworks_sdk_141/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_141/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_141/isteamremotestorage.h b/lsteamclient/steamworks_sdk_141/isteamremotestorage.h
new file mode 100644
index 00000000..7ca558e2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamremotestorage.h
@@ -0,0 +1,681 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0, // normal Workshop item that can be subscribed to
+ k_EWorkshopFileTypeMicrotransaction = 1, // Workshop item that is meant to be voted on for the purpose of selling in-game
+ k_EWorkshopFileTypeCollection = 2, // a collection of Workshop or Greenlight items
+ k_EWorkshopFileTypeArt = 3, // artwork
+ k_EWorkshopFileTypeVideo = 4, // external video
+ k_EWorkshopFileTypeScreenshot = 5, // screenshot
+ k_EWorkshopFileTypeGame = 6, // Greenlight game entry
+ k_EWorkshopFileTypeSoftware = 7, // Greenlight software entry
+ k_EWorkshopFileTypeConcept = 8, // Greenlight concept
+ k_EWorkshopFileTypeWebGuide = 9, // Steam web guide
+ k_EWorkshopFileTypeIntegratedGuide = 10, // application integrated guide
+ k_EWorkshopFileTypeMerch = 11, // Workshop merchandise meant to be voted on for the purpose of being sold
+ k_EWorkshopFileTypeControllerBinding = 12, // Steam Controller bindings
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13, // internal
+ k_EWorkshopFileTypeSteamVideo = 14, // Steam video
+ k_EWorkshopFileTypeGameManagedItem = 15, // managed completely by the game, not the user, and not shown on the web
+
+ // Update k_EWorkshopFileTypeMax if you add values.
+ k_EWorkshopFileTypeMax = 16
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+ k_EWorkshopVoteLater = 3,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+
+ CALL_RESULT( RemoteStorageFileWriteAsyncComplete_t )
+ virtual SteamAPICall_t FileWriteAsync( const char *pchFile, const void *pvData, uint32 cubData ) = 0;
+
+ CALL_RESULT( RemoteStorageFileReadAsyncComplete_t )
+ virtual SteamAPICall_t FileReadAsync( const char *pchFile, uint32 nOffset, uint32 cubToRead ) = 0;
+ virtual bool FileReadAsyncComplete( SteamAPICall_t hReadCall, void *pvBuffer, uint32 cubToRead ) = 0;
+
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ CALL_RESULT( RemoteStorageFileShareResult_t )
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( uint64 *pnTotalBytes, uint64 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ CALL_RESULT( RemoteStorageDownloadUGCResult_t )
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, OUT_STRING() char **ppchName, int32 *pnFileSizeInBytes, OUT_STRUCT() CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ CALL_RESULT( RemoteStoragePublishFileProgress_t )
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ CALL_RESULT( RemoteStorageUpdatePublishedFileResult_t )
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ CALL_RESULT( RemoteStorageGetPublishedFileDetailsResult_t )
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ CALL_RESULT( RemoteStorageDeletePublishedFileResult_t )
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ CALL_RESULT( RemoteStorageEnumerateUserPublishedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ CALL_RESULT( RemoteStorageSubscribePublishedFileResult_t )
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageEnumerateUserSubscribedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ CALL_RESULT( RemoteStorageUnsubscribePublishedFileResult_t )
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ CALL_RESULT( RemoteStorageGetPublishedItemVoteDetailsResult_t )
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageUpdateUserPublishedItemVoteResult_t )
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ CALL_RESULT( RemoteStorageGetPublishedItemVoteDetailsResult_t )
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageEnumerateUserPublishedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ CALL_RESULT( RemoteStoragePublishFileProgress_t )
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ CALL_RESULT( RemoteStorageSetUserPublishedFileActionResult_t )
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ CALL_RESULT( RemoteStorageEnumeratePublishedFilesByUserActionResult_t )
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ CALL_RESULT( RemoteStorageEnumerateWorkshopFilesResult_t )
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ CALL_RESULT( RemoteStorageDownloadUGCResult_t )
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION014"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ uint64 m_ulUnused; // not used anymore
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileWriteAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileWriteAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 31 };
+ EResult m_eResult; // result
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileReadAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileReadAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 32 };
+ SteamAPICall_t m_hFileReadAsync; // call handle of the async read which was made
+ EResult m_eResult; // result
+ uint32 m_nOffset; // offset in the file this read was at
+ uint32 m_cubRead; // amount read - will the <= the amount requested
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_141/isteamscreenshots.h b/lsteamclient/steamworks_sdk_141/isteamscreenshots.h
new file mode 100644
index 00000000..653b28a4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamscreenshots.h
@@ -0,0 +1,116 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+enum EVRScreenshotType
+{
+ k_EVRScreenshotType_None = 0,
+ k_EVRScreenshotType_Mono = 1,
+ k_EVRScreenshotType_Stereo = 2,
+ k_EVRScreenshotType_MonoCubemap = 3,
+ k_EVRScreenshotType_MonoPanorama = 4,
+ k_EVRScreenshotType_StereoPanorama = 5
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+
+ // Returns true if the app has hooked the screenshot
+ virtual bool IsScreenshotsHooked() = 0;
+
+ // Adds a VR screenshot to the user's screenshot library from disk in the supported type.
+ // pchFilename should be the normal 2D image used in the library view
+ // pchVRFilename should contain the image that matches the correct type
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddVRScreenshotToLibrary( EVRScreenshotType eType, const char *pchFilename, const char *pchVRFilename ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION003"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMSCREENSHOTS_H
+
diff --git a/lsteamclient/steamworks_sdk_141/isteamugc.h b/lsteamclient/steamworks_sdk_141/isteamugc.h
new file mode 100644
index 00000000..fec311d7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamugc.h
@@ -0,0 +1,545 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+ k_EUGCMatchingUGCType_GameManagedItems = 12, // game managed items (not managed by users)
+ k_EUGCMatchingUGCType_All = ~0, // return everything
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+ k_EUGCQuery_RankedByTotalUniqueSubscriptions = 12,
+ k_EUGCQuery_RankedByPlaytimeTrend = 13,
+ k_EUGCQuery_RankedByTotalPlaytime = 14,
+ k_EUGCQuery_RankedByAveragePlaytimeTrend = 15,
+ k_EUGCQuery_RankedByLifetimeAveragePlaytime = 16,
+ k_EUGCQuery_RankedByPlaytimeSessionsTrend = 17,
+ k_EUGCQuery_RankedByLifetimePlaytimeSessions = 18,
+};
+
+enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0, // The item update handle was invalid, job might be finished, listen too SubmitItemUpdateResult_t
+ k_EItemUpdateStatusPreparingConfig = 1, // The item update is processing configuration data
+ k_EItemUpdateStatusPreparingContent = 2, // The item update is reading and processing content files
+ k_EItemUpdateStatusUploadingContent = 3, // The item update is uploading content changes to Steam
+ k_EItemUpdateStatusUploadingPreviewFile = 4, // The item update is uploading new preview file image
+ k_EItemUpdateStatusCommittingChanges = 5 // The item update is committing all changes
+};
+
+enum EItemState
+{
+ k_EItemStateNone = 0, // item not tracked on client
+ k_EItemStateSubscribed = 1, // current user is subscribed to this item. Not just cached.
+ k_EItemStateLegacyItem = 2, // item was created with ISteamRemoteStorage
+ k_EItemStateInstalled = 4, // item is installed and usable (but maybe out of date)
+ k_EItemStateNeedsUpdate = 8, // items needs an update. Either because it's not installed yet or creator updated content
+ k_EItemStateDownloading = 16, // item update is currently downloading
+ k_EItemStateDownloadPending = 32, // DownloadItem() was called for this item, content isn't available until DownloadItemResult_t is fired
+};
+
+enum EItemStatistic
+{
+ k_EItemStatistic_NumSubscriptions = 0,
+ k_EItemStatistic_NumFavorites = 1,
+ k_EItemStatistic_NumFollowers = 2,
+ k_EItemStatistic_NumUniqueSubscriptions = 3,
+ k_EItemStatistic_NumUniqueFavorites = 4,
+ k_EItemStatistic_NumUniqueFollowers = 5,
+ k_EItemStatistic_NumUniqueWebsiteViews = 6,
+ k_EItemStatistic_ReportScore = 7,
+ k_EItemStatistic_NumSecondsPlayed = 8,
+ k_EItemStatistic_NumPlaytimeSessions = 9,
+ k_EItemStatistic_NumComments = 10,
+ k_EItemStatistic_NumSecondsPlayedDuringTimePeriod = 11,
+ k_EItemStatistic_NumPlaytimeSessionsDuringTimePeriod = 12,
+};
+
+enum EItemPreviewType
+{
+ k_EItemPreviewType_Image = 0, // standard image file expected (e.g. jpg, png, gif, etc.)
+ k_EItemPreviewType_YouTubeVideo = 1, // video id is stored
+ k_EItemPreviewType_Sketchfab = 2, // model id is stored
+ k_EItemPreviewType_EnvironmentMap_HorizontalCross = 3, // standard image file expected - cube map in the layout
+ // +---+---+-------+
+ // | |Up | |
+ // +---+---+---+---+
+ // | L | F | R | B |
+ // +---+---+---+---+
+ // | |Dn | |
+ // +---+---+---+---+
+ k_EItemPreviewType_EnvironmentMap_LatLong = 4, // standard image file expected
+ k_EItemPreviewType_ReservedMax = 255, // you can specify your own types above this value
+};
+
+const uint32 kNumUGCResultsPerPage = 50;
+const uint32 k_cchDeveloperMetadataMax = 5000;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+ // collection details
+ uint32 m_unNumChildren;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for the details of the given published file ids (the RequestUGCDetails call is deprecated and replaced with this)
+ virtual UGCQueryHandle_t CreateQueryUGCDetailsRequest( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+
+ // Send the query to Steam
+ CALL_RESULT( SteamUGCQueryCompleted_t )
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+ virtual bool GetQueryUGCPreviewURL( UGCQueryHandle_t handle, uint32 index, OUT_STRING_COUNT(cchURLSize) char *pchURL, uint32 cchURLSize ) = 0;
+ virtual bool GetQueryUGCMetadata( UGCQueryHandle_t handle, uint32 index, OUT_STRING_COUNT(cchMetadatasize) char *pchMetadata, uint32 cchMetadatasize ) = 0;
+ virtual bool GetQueryUGCChildren( UGCQueryHandle_t handle, uint32 index, PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0;
+ virtual bool GetQueryUGCStatistic( UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint64 *pStatValue ) = 0;
+ virtual uint32 GetQueryUGCNumAdditionalPreviews( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCAdditionalPreview( UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, OUT_STRING_COUNT(cchURLSize) char *pchURLOrVideoID, uint32 cchURLSize, OUT_STRING_COUNT(cchURLSize) char *pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType *pPreviewType ) = 0;
+ virtual uint32 GetQueryUGCNumKeyValueTags( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCKeyValueTag( UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, OUT_STRING_COUNT(cchKeySize) char *pchKey, uint32 cchKeySize, OUT_STRING_COUNT(cchValueSize) char *pchValue, uint32 cchValueSize ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnOnlyIDs( UGCQueryHandle_t handle, bool bReturnOnlyIDs ) = 0;
+ virtual bool SetReturnKeyValueTags( UGCQueryHandle_t handle, bool bReturnKeyValueTags ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnMetadata( UGCQueryHandle_t handle, bool bReturnMetadata ) = 0;
+ virtual bool SetReturnChildren( UGCQueryHandle_t handle, bool bReturnChildren ) = 0;
+ virtual bool SetReturnAdditionalPreviews( UGCQueryHandle_t handle, bool bReturnAdditionalPreviews ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetReturnPlaytimeStats( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+ virtual bool SetLanguage( UGCQueryHandle_t handle, const char *pchLanguage ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+ virtual bool AddRequiredKeyValueTag( UGCQueryHandle_t handle, const char *pKey, const char *pValue ) = 0;
+
+ // DEPRECATED - Use CreateQueryUGCDetailsRequest call above instead!
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+ // Steam Workshop Creator API
+ CALL_RESULT( CreateItemResult_t )
+ virtual SteamAPICall_t CreateItem( AppId_t nConsumerAppId, EWorkshopFileType eFileType ) = 0; // create new item for this app with no content attached yet
+
+ virtual UGCUpdateHandle_t StartItemUpdate( AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID ) = 0; // start an UGC item update. Set changed properties before commiting update with CommitItemUpdate()
+
+ virtual bool SetItemTitle( UGCUpdateHandle_t handle, const char *pchTitle ) = 0; // change the title of an UGC item
+ virtual bool SetItemDescription( UGCUpdateHandle_t handle, const char *pchDescription ) = 0; // change the description of an UGC item
+ virtual bool SetItemUpdateLanguage( UGCUpdateHandle_t handle, const char *pchLanguage ) = 0; // specify the language of the title or description that will be set
+ virtual bool SetItemMetadata( UGCUpdateHandle_t handle, const char *pchMetaData ) = 0; // change the metadata of an UGC item (max = k_cchDeveloperMetadataMax)
+ virtual bool SetItemVisibility( UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item
+ virtual bool SetItemTags( UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item
+ virtual bool SetItemContent( UGCUpdateHandle_t handle, const char *pszContentFolder ) = 0; // update item content from this local folder
+ virtual bool SetItemPreview( UGCUpdateHandle_t handle, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file, which must be under 1MB in size
+ virtual bool RemoveItemKeyValueTags( UGCUpdateHandle_t handle, const char *pchKey ) = 0; // remove any existing key-value tags with the specified key
+ virtual bool AddItemKeyValueTag( UGCUpdateHandle_t handle, const char *pchKey, const char *pchValue ) = 0; // add new key-value tags for the item. Note that there can be multiple values for a tag.
+ virtual bool AddItemPreviewFile( UGCUpdateHandle_t handle, const char *pszPreviewFile, EItemPreviewType type ) = 0; // add preview file for this item. pszPreviewFile points to local file, which must be under 1MB in size
+ virtual bool AddItemPreviewVideo( UGCUpdateHandle_t handle, const char *pszVideoID ) = 0; // add preview video for this item
+ virtual bool UpdateItemPreviewFile( UGCUpdateHandle_t handle, uint32 index, const char *pszPreviewFile ) = 0; // updates an existing preview file for this item. pszPreviewFile points to local file, which must be under 1MB in size
+ virtual bool UpdateItemPreviewVideo( UGCUpdateHandle_t handle, uint32 index, const char *pszVideoID ) = 0; // updates an existing preview video for this item
+ virtual bool RemoveItemPreview( UGCUpdateHandle_t handle, uint32 index ) = 0; // remove a preview by index starting at 0 (previews are sorted)
+
+ CALL_RESULT( SubmitItemUpdateResult_t )
+ virtual SteamAPICall_t SubmitItemUpdate( UGCUpdateHandle_t handle, const char *pchChangeNote ) = 0; // commit update process started with StartItemUpdate()
+ virtual EItemUpdateStatus GetItemUpdateProgress( UGCUpdateHandle_t handle, uint64 *punBytesProcessed, uint64* punBytesTotal ) = 0;
+
+ // Steam Workshop Consumer API
+ CALL_RESULT( SetUserItemVoteResult_t )
+ virtual SteamAPICall_t SetUserItemVote( PublishedFileId_t nPublishedFileID, bool bVoteUp ) = 0;
+ CALL_RESULT( GetUserItemVoteResult_t )
+ virtual SteamAPICall_t GetUserItemVote( PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( UserFavoriteItemsListChanged_t )
+ virtual SteamAPICall_t AddItemToFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( UserFavoriteItemsListChanged_t )
+ virtual SteamAPICall_t RemoveItemFromFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( RemoteStorageSubscribePublishedFileResult_t )
+ virtual SteamAPICall_t SubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // subscribe to this item, will be installed ASAP
+ CALL_RESULT( RemoteStorageUnsubscribePublishedFileResult_t )
+ virtual SteamAPICall_t UnsubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // unsubscribe from this item, will be uninstalled after game quits
+ virtual uint32 GetNumSubscribedItems() = 0; // number of subscribed items
+ virtual uint32 GetSubscribedItems( PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; // all subscribed item PublishFileIDs
+
+ // get EItemState flags about item on this client
+ virtual uint32 GetItemState( PublishedFileId_t nPublishedFileID ) = 0;
+
+ // get info about currently installed content on disc for items that have k_EItemStateInstalled set
+ // if k_EItemStateLegacyItem is set, pchFolder contains the path to the legacy file itself (not a folder)
+ virtual bool GetItemInstallInfo( PublishedFileId_t nPublishedFileID, uint64 *punSizeOnDisk, OUT_STRING_COUNT( cchFolderSize ) char *pchFolder, uint32 cchFolderSize, uint32 *punTimeStamp ) = 0;
+
+ // get info about pending update for items that have k_EItemStateNeedsUpdate set. punBytesTotal will be valid after download started once
+ virtual bool GetItemDownloadInfo( PublishedFileId_t nPublishedFileID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // download new or update already installed item. If function returns true, wait for DownloadItemResult_t. If the item is already installed,
+ // then files on disk should not be used until callback received. If item is not subscribed to, it will be cached for some time.
+ // If bHighPriority is set, any other item download will be suspended and this item downloaded ASAP.
+ virtual bool DownloadItem( PublishedFileId_t nPublishedFileID, bool bHighPriority ) = 0;
+
+ // game servers can set a specific workshop folder before issuing any UGC commands.
+ // This is helpful if you want to support multiple game servers running out of the same install folder
+ virtual bool BInitWorkshopForGameServer( DepotId_t unWorkshopDepotID, const char *pszFolder ) = 0;
+
+ // SuspendDownloads( true ) will suspend all workshop downloads until SuspendDownloads( false ) is called or the game ends
+ virtual void SuspendDownloads( bool bSuspend ) = 0;
+
+ // usage tracking
+ CALL_RESULT( StartPlaytimeTrackingResult_t )
+ virtual SteamAPICall_t StartPlaytimeTracking( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+ CALL_RESULT( StopPlaytimeTrackingResult_t )
+ virtual SteamAPICall_t StopPlaytimeTracking( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+ CALL_RESULT( StopPlaytimeTrackingResult_t )
+ virtual SteamAPICall_t StopPlaytimeTrackingForAllItems() = 0;
+
+ // parent-child relationship or dependency management
+ CALL_RESULT( AddUGCDependencyResult_t )
+ virtual SteamAPICall_t AddDependency( PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID ) = 0;
+ CALL_RESULT( RemoveUGCDependencyResult_t )
+ virtual SteamAPICall_t RemoveDependency( PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID ) = 0;
+
+ // add/remove app dependence/requirements (usually DLC)
+ CALL_RESULT( AddAppDependencyResult_t )
+ virtual SteamAPICall_t AddAppDependency( PublishedFileId_t nPublishedFileID, AppId_t nAppID ) = 0;
+ CALL_RESULT( RemoveAppDependencyResult_t )
+ virtual SteamAPICall_t RemoveAppDependency( PublishedFileId_t nPublishedFileID, AppId_t nAppID ) = 0;
+ // request app dependencies. note that whatever callback you register for GetAppDependenciesResult_t may be called multiple times
+ // until all app dependencies have been returned
+ CALL_RESULT( GetAppDependenciesResult_t )
+ virtual SteamAPICall_t GetAppDependencies( PublishedFileId_t nPublishedFileID ) = 0;
+
+ // delete the item without prompting the user
+ CALL_RESULT( DeleteItemResult_t )
+ virtual SteamAPICall_t DeleteItem( PublishedFileId_t nPublishedFileID ) = 0;
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION010"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::CreateItem()
+//-----------------------------------------------------------------------------
+struct CreateItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 3 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId; // new item got this UGC PublishFileID
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::SubmitItemUpdate()
+//-----------------------------------------------------------------------------
+struct SubmitItemUpdateResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 4 };
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a Workshop item has been installed or updated
+//-----------------------------------------------------------------------------
+struct ItemInstalled_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 5 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of DownloadItem(), existing item files can be accessed again
+//-----------------------------------------------------------------------------
+struct DownloadItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 6 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: result of AddItemToFavorites() or RemoveItemFromFavorites()
+//-----------------------------------------------------------------------------
+struct UserFavoriteItemsListChanged_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 7 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bWasAddRequest;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SetUserItemVote()
+//-----------------------------------------------------------------------------
+struct SetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 8 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVoteUp;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserItemVote()
+//-----------------------------------------------------------------------------
+struct GetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 9 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVotedUp;
+ bool m_bVotedDown;
+ bool m_bVoteSkipped;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to StartPlaytimeTracking()
+//-----------------------------------------------------------------------------
+struct StartPlaytimeTrackingResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 10 };
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to StopPlaytimeTracking()
+//-----------------------------------------------------------------------------
+struct StopPlaytimeTrackingResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 11 };
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to AddDependency
+//-----------------------------------------------------------------------------
+struct AddUGCDependencyResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 12 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ PublishedFileId_t m_nChildPublishedFileId;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to RemoveDependency
+//-----------------------------------------------------------------------------
+struct RemoveUGCDependencyResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 13 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ PublishedFileId_t m_nChildPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to AddAppDependency
+//-----------------------------------------------------------------------------
+struct AddAppDependencyResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 14 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nAppID;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to RemoveAppDependency
+//-----------------------------------------------------------------------------
+struct RemoveAppDependencyResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 15 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nAppID;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetAppDependencies. Callback may be called
+// multiple times until all app dependencies have been returned.
+//-----------------------------------------------------------------------------
+struct GetAppDependenciesResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 16 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_rgAppIDs[32];
+ uint32 m_nNumAppDependencies; // number returned in this struct
+ uint32 m_nTotalNumAppDependencies; // total found
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeleteItem
+//-----------------------------------------------------------------------------
+struct DeleteItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 17 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_141/isteamunifiedmessages.h b/lsteamclient/steamworks_sdk_141/isteamunifiedmessages.h
new file mode 100644
index 00000000..493611d5
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamunifiedmessages.h
@@ -0,0 +1,63 @@
+//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to unified messages client
+//
+// You should not need to use this interface except if your product is using a language other than C++.
+// Contact your Steam Tech contact for more details.
+//
+//=============================================================================
+
+#ifndef ISTEAMUNIFIEDMESSAGES_H
+#define ISTEAMUNIFIEDMESSAGES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+typedef uint64 ClientUnifiedMessageHandle;
+
+class ISteamUnifiedMessages
+{
+public:
+ static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0;
+
+ // Sends a service method (in binary serialized form) using the Steam Client.
+ // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message).
+ virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0;
+
+ // Gets the size of the response and the EResult. Returns false if the response is not ready yet.
+ virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0;
+
+ // Gets a response in binary serialized form (and optionally release the corresponding allocated memory).
+ virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0;
+
+ // Releases the message and its corresponding allocated memory.
+ virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0;
+
+ // Sends a service notification (in binary serialized form) using the Steam Client.
+ // Returns true if the notification was sent successfully.
+ virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0;
+};
+
+#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct SteamUnifiedMessagesSendMethodResult_t
+{
+ enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 };
+ ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod().
+ uint64 m_unContext; // Context provided when calling SendMethod().
+ EResult m_eResult; // The result of the method call.
+ uint32 m_unResponseSize; // The size of the response.
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUNIFIEDMESSAGES_H
diff --git a/lsteamclient/steamworks_sdk_141/isteamuser.h b/lsteamclient/steamworks_sdk_141/isteamuser.h
new file mode 100644
index 00000000..6d1309b7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamuser.h
@@ -0,0 +1,369 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the size of captured audio data that is available from GetVoice.
+ // Most applications will only use compressed data and should ignore the other
+ // parameters, which exist primarily for backwards compatibility. See comments
+ // below for further explanation of "uncompressed" data.
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed_Deprecated = 0, uint32 nUncompressedVoiceDesiredSampleRate_Deprecated = 0 ) = 0;
+
+ // ---------------------------------------------------------------------------
+ // NOTE: "uncompressed" audio is a deprecated feature and should not be used
+ // by most applications. It is raw single-channel 16-bit PCM wave data which
+ // may have been run through preprocessing filters and/or had silence removed,
+ // so the uncompressed audio could have a shorter duration than you expect.
+ // There may be no data at all during long periods of silence. Also, fetching
+ // uncompressed audio will cause GetVoice to discard any leftover compressed
+ // audio, so you must fetch both types at once. Finally, GetAvailableVoice is
+ // not precisely accurate when the uncompressed size is requested. So if you
+ // really need to use uncompressed audio, you should call GetVoice frequently
+ // with two very large (20kb+) output buffers instead of trying to allocate
+ // perfectly-sized buffers. But most applications should ignore all of these
+ // details and simply leave the "uncompressed" parameters as NULL/zero.
+ // ---------------------------------------------------------------------------
+
+ // Read captured audio data from the microphone buffer. This should be called
+ // at least once per frame, and preferably every few milliseconds, to keep the
+ // microphone input delay as low as possible. Most applications will only use
+ // compressed data and should pass NULL/zero for the "uncompressed" parameters.
+ // Compressed data can be transmitted by your application and decoded into raw
+ // using the DecompressVoice function below.
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed_Deprecated = false, void *pUncompressedDestBuffer_Deprecated = 0, uint32 cbUncompressedDestBufferSize_Deprecated = 0, uint32 *nUncompressBytesWritten_Deprecated = 0, uint32 nUncompressedVoiceDesiredSampleRate_Deprecated = 0 ) = 0;
+
+ // Decodes the compressed voice data returned by GetVoice. The output data is
+ // raw single-channel 16-bit PCM audio. The decoder supports any sample rate
+ // from 11025 to 48000; see GetVoiceOptimalSampleRate() below for details.
+ // If the output buffer is not large enough, then *nBytesWritten will be set
+ // to the required buffer size, and k_EVoiceResultBufferTooSmall is returned.
+ // It is suggested to start with a 20kb buffer and reallocate as necessary.
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the native sample rate of the Steam voice decompressor; using
+ // this sample rate for DecompressVoice will perform the least CPU processing.
+ // However, the final audio quality will depend on how well the audio device
+ // (and/or your application's audio output SDK) deals with lower sample rates.
+ // You may find that you get the best audio output quality when you ignore
+ // this function and use the native sample rate of your audio output device,
+ // which is usually 48000 or 44100.
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ CALL_RESULT( EncryptedAppTicketResponse_t )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+ // Requests a URL which authenticates an in-game browser for store check-out,
+ // and then redirects to the specified URL. As long as the in-game browser
+ // accepts and handles session cookies, Steam microtransaction checkout pages
+ // will automatically recognize the user instead of presenting a login page.
+ // The result of this API call will be a StoreAuthURLResponse_t callback.
+ // NOTE: The URL has a very short lifetime to prevent history-snooping attacks,
+ // so you should only call this API when you are about to launch the browser,
+ // or else immediately navigate to the result URL using a hidden browser window.
+ // NOTE 2: The resulting authorization cookie has an expiration time of one day,
+ // so it would be a good idea to request and visit a new auth URL every 12 hours.
+ CALL_RESULT( StoreAuthURLResponse_t )
+ virtual SteamAPICall_t RequestStoreAuthURL( const char *pchRedirectURL ) = 0;
+
+ // gets whether the users phone number is verified
+ virtual bool BIsPhoneVerified() = 0;
+
+ // gets whether the user has two factor enabled on their account
+ virtual bool BIsTwoFactorEnabled() = 0;
+
+ // gets whether the users phone number is identifying
+ virtual bool BIsPhoneIdentifying() = 0;
+
+ // gets whether the users phone number is awaiting (re)verification
+ virtual bool BIsPhoneRequiringVerification() = 0;
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser019"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+ bool m_bStillRetrying;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Signaled whenever licenses change
+//-----------------------------------------------------------------------------
+struct LicensesUpdated_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 25 };
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to ISteamUser::RequestStoreAuthURL
+//-----------------------------------------------------------------------------
+struct StoreAuthURLResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 65 };
+ char m_szURL[512];
+};
+
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_141/isteamuserstats.h b/lsteamclient/steamworks_sdk_141/isteamuserstats.h
new file mode 100644
index 00000000..8bb42697
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamuserstats.h
@@ -0,0 +1,476 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ CALL_BACK( UserStatsReceived_t )
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ CALL_RESULT( UserStatsReceived_t )
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ CALL_RESULT(LeaderboardFindResult_t)
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ CALL_RESULT( LeaderboardFindResult_t )
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ CALL_RESULT( LeaderboardScoresDownloaded_t )
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ METHOD_DESC(Downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers)
+ CALL_RESULT( LeaderboardScoresDownloaded_t )
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard,
+ ARRAY_COUNT_D(cUsers, Array of users to retrieve) CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ CALL_RESULT( LeaderboardScoreUploaded_t )
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ CALL_RESULT( LeaderboardUGCSet_t )
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ CALL_RESULT( NumberOfCurrentPlayers_t )
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ CALL_RESULT( GlobalAchievementPercentagesReady_t )
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ CALL_RESULT( GlobalStatsReceived_t )
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_141/isteamutils.h b/lsteamclient/steamworks_sdk_141/isteamutils.h
new file mode 100644
index 00000000..ed79d2cb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamutils.h
@@ -0,0 +1,264 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time. Number of seconds since January 1, 1970, GMT (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // Deprecated. Applications should use SteamAPI_RunCallbacks() instead. Game servers do not need to call this function.
+ STEAM_PRIVATE_API( virtual void RunFrame() = 0; )
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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 an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ CALL_RESULT( CheckFileSignature_t )
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+
+ // Sets the inset of the overlay notification from the corner specified by SetOverlayNotificationPosition.
+ virtual void SetOverlayNotificationInset( int nHorizontalInset, int nVerticalInset ) = 0;
+
+ // returns true if Steam & the Steam Overlay are running in Big Picture mode
+ // Games much be launched through the Steam client to enable the Big Picture overlay. During development,
+ // a game can be added as a non-steam game to the developers library to test this feature
+ virtual bool IsSteamInBigPictureMode() = 0;
+
+ // ask SteamUI to create and render its OpenVR dashboard
+ virtual void StartVRDashboard() = 0;
+
+ // Returns true if the HMD content will be streamed via Steam In-Home Streaming
+ virtual bool IsVRHeadsetStreamingEnabled() = 0;
+
+ // Set whether the HMD content will be streamed via Steam In-Home Streaming
+ // If this is set to true, then the scene in the HMD headset will be streamed, and remote input will not be allowed.
+ // If this is set to false, then the application window will be streamed instead, and remote input will be allowed.
+ // The default is true unless "VRHeadsetStreaming" "0" is in the extended appinfo for a game.
+ // (this is useful for games that have asymmetric multiplayer gameplay)
+ virtual void SetVRHeadsetStreamingEnabled( bool bEnabled ) = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils009"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+ int m_iCallback;
+ uint32 m_cubParam;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_141/isteamvideo.h b/lsteamclient/steamworks_sdk_141/isteamvideo.h
new file mode 100644
index 00000000..83041caa
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/isteamvideo.h
@@ -0,0 +1,71 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Video
+//
+//=============================================================================
+
+#ifndef ISTEAMVIDEO_H
+#define ISTEAMVIDEO_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Video API
+//-----------------------------------------------------------------------------
+class ISteamVideo
+{
+public:
+
+ // Get a URL suitable for streaming the given Video app ID's video
+ virtual void GetVideoURL( AppId_t unVideoAppID ) = 0;
+
+ // returns true if user is uploading a live broadcast
+ virtual bool IsBroadcasting( int *pnNumViewers ) = 0;
+
+ // Get the OPF Details for 360 Video Playback
+ CALL_BACK( GetOPFSettingsResult_t )
+ virtual void GetOPFSettings( AppId_t unVideoAppID ) = 0;
+ virtual bool GetOPFStringForApp( AppId_t unVideoAppID, char *pchBuffer, int32 *pnBufferSize ) = 0;
+};
+
+#define STEAMVIDEO_INTERFACE_VERSION "STEAMVIDEO_INTERFACE_V002"
+
+DEFINE_CALLBACK( BroadcastUploadStart_t, k_iClientVideoCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( BroadcastUploadStop_t, k_iClientVideoCallbacks + 5 )
+ CALLBACK_MEMBER( 0, EBroadcastUploadResult, m_eResult )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( GetVideoURLResult_t, k_iClientVideoCallbacks + 11 )
+ CALLBACK_MEMBER( 0, EResult, m_eResult )
+ CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID )
+ CALLBACK_MEMBER( 2, char, m_rgchURL[256] )
+END_DEFINE_CALLBACK_3()
+
+
+DEFINE_CALLBACK( GetOPFSettingsResult_t, k_iClientVideoCallbacks + 24 )
+ CALLBACK_MEMBER( 0, EResult, m_eResult )
+ CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID )
+END_DEFINE_CALLBACK_2()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMVIDEO_H
diff --git a/lsteamclient/steamworks_sdk_141/matchmakingtypes.h b/lsteamclient/steamworks_sdk_141/matchmakingtypes.h
new file mode 100644
index 00000000..fcb61664
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/matchmakingtypes.h
@@ -0,0 +1,251 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ servernetadr_t() : m_usConnectionPort( 0 ), m_usQueryPort( 0 ), m_unIP( 0 ) {}
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_141/steam_api.h b/lsteamclient/steamworks_sdk_141/steam_api.h
new file mode 100644
index 00000000..e09b6780
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/steam_api.h
@@ -0,0 +1,398 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteammusicremote.h"
+#include "isteamhttp.h"
+#include "isteamunifiedmessages.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+#include "isteamhtmlsurface.h"
+#include "isteaminventory.h"
+#include "isteamvideo.h"
+#include "isteamparentalsettings.h"
+
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+
+// SteamAPI_Init must be called before using any other API functions. If it fails, an
+// error message will be output to the debugger (or stderr) with further information.
+S_API bool S_CALLTYPE SteamAPI_Init();
+
+// SteamAPI_Shutdown should be called during process shutdown if possible.
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// SteamAPI_RestartAppIfNecessary ensures that your executable was launched through Steam.
+//
+// Returns true if the current process should terminate. Steam is now re-launching your application.
+//
+// Returns false if no action needs to be taken. This means that your executable was started through
+// the Steam client, or a steam_appid.txt file is present in your game's directory (for development).
+// Your current process should continue if false is returned.
+//
+// NOTE: If you use the Steam DRM wrapper on your primary executable file, this check is unnecessary
+// since the DRM wrapper will ensure that your application was launched properly through Steam.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// Many Steam API functions allocate a small amount of thread-local memory for parameter storage.
+// SteamAPI_ReleaseCurrentThreadMemory() will free API memory associated with the calling thread.
+// This function is also called automatically by SteamAPI_RunCallbacks(), so a single-threaded
+// program never needs to explicitly call this function.
+S_API void S_CALLTYPE SteamAPI_ReleaseCurrentThreadMemory();
+
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Global accessors for Steamworks C++ APIs. See individual isteam*.h files for details.
+// You should not cache the results of these accessors or pass the result pointers across
+// modules! Different modules may be compiled against different SDK header versions, and
+// the interface pointers could therefore be different across modules. Every line of code
+// which calls into a Steamworks API should retrieve the interface from a global accessor.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#if !defined( STEAM_API_EXPORTS )
+inline ISteamClient *SteamClient();
+inline ISteamUser *SteamUser();
+inline ISteamFriends *SteamFriends();
+inline ISteamUtils *SteamUtils();
+inline ISteamMatchmaking *SteamMatchmaking();
+inline ISteamUserStats *SteamUserStats();
+inline ISteamApps *SteamApps();
+inline ISteamNetworking *SteamNetworking();
+inline ISteamMatchmakingServers *SteamMatchmakingServers();
+inline ISteamRemoteStorage *SteamRemoteStorage();
+inline ISteamScreenshots *SteamScreenshots();
+inline ISteamHTTP *SteamHTTP();
+inline ISteamUnifiedMessages *SteamUnifiedMessages();
+inline ISteamController *SteamController();
+inline ISteamUGC *SteamUGC();
+inline ISteamAppList *SteamAppList();
+inline ISteamMusic *SteamMusic();
+inline ISteamMusicRemote *SteamMusicRemote();
+inline ISteamHTMLSurface *SteamHTMLSurface();
+inline ISteamInventory *SteamInventory();
+inline ISteamVideo *SteamVideo();
+inline ISteamParentalSettings *SteamParentalSettings();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+// CSteamAPIContext encapsulates the Steamworks API global accessors into
+// a single object. This is DEPRECATED and only remains for compatibility.
+class CSteamAPIContext
+{
+public:
+ // DEPRECATED - there is no benefit to using this over the global accessors
+ CSteamAPIContext() { Clear(); }
+ void Clear();
+ bool Init();
+ ISteamClient* SteamClient() const { return m_pSteamClient; }
+ ISteamUser* SteamUser() const { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() const { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() const { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() const { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() const { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() const { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() const { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() const { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() const { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() const { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() const { return m_pSteamHTTP; }
+ ISteamUnifiedMessages* SteamUnifiedMessages() const { return m_pSteamUnifiedMessages; }
+ ISteamController* SteamController() const { return m_pController; }
+ ISteamUGC* SteamUGC() const { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() const { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() const { return m_pSteamMusic; }
+ ISteamMusicRemote* SteamMusicRemote() const { return m_pSteamMusicRemote; }
+ ISteamHTMLSurface* SteamHTMLSurface() const { return m_pSteamHTMLSurface; }
+ ISteamInventory* SteamInventory() const { return m_pSteamInventory; }
+ ISteamVideo* SteamVideo() const { return m_pSteamVideo; }
+ ISteamParentalSettings* SteamParentalSettings() const { return m_pSteamParentalSettings; }
+ // DEPRECATED - there is no benefit to using this over the global accessors
+private:
+ ISteamClient *m_pSteamClient;
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamUnifiedMessages *m_pSteamUnifiedMessages;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+ ISteamMusicRemote *m_pSteamMusicRemote;
+ ISteamHTMLSurface *m_pSteamHTMLSurface;
+ ISteamInventory *m_pSteamInventory;
+ ISteamVideo *m_pSteamVideo;
+ ISteamParentalSettings *m_pSteamParentalSettings;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback and call-result helpers
+//
+// The following macros and classes are used to register your application for
+// callbacks and call-results, which are delivered in a predictable manner.
+//
+// STEAM_CALLBACK macros are meant for use inside of a C++ class definition.
+// They map a Steam notification callback directly to a class member function
+// which is automatically prototyped as "void func( callback_type *pParam )".
+//
+// CCallResult is used with specific Steam APIs that return "result handles".
+// The handle can be passed to a CCallResult object's Set function, along with
+// an object pointer and member-function pointer. The member function will
+// be executed once the results of the Steam API call are available.
+//
+// CCallback and CCallbackManual classes can be used instead of STEAM_CALLBACK
+// macros if you require finer control over registration and unregistration.
+//
+// Callbacks and call-results are queued automatically and are only
+// delivered/executed when your application calls SteamAPI_RunCallbacks().
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// SteamAPI_RunCallbacks is safe to call from multiple threads simultaneously,
+// but if you choose to do this, callback code could be executed on any thread.
+// One alternative is to call SteamAPI_RunCallbacks from the main thread only,
+// and call SteamAPI_ReleaseCurrentThreadMemory regularly on other threads.
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+// Declares a callback member function plus a helper member variable which
+// registers the callback on object creation and unregisters on destruction.
+// The optional fourth 'var' param exists only for backwards-compatibility
+// and can be ignored.
+#define STEAM_CALLBACK( thisclass, func, .../*callback_type, [deprecated] var*/ ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, 4, 3 ), ( /**/, thisclass, func, __VA_ARGS__ ) )
+
+// Declares a callback function and a named CCallbackManual variable which
+// has Register and Unregister functions instead of automatic registration.
+#define STEAM_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type > var; void func( callback_type *pParam )
+
+
+// Internal functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// Internal functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks and call results - internal implementation detail
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+
+private:
+ CCallbackBase( const CCallbackBase& );
+ CCallbackBase& operator=( const CCallbackBase& );
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: templated base for callbacks - internal implementation detail
+//-----------------------------------------------------------------------------
+template< int sizeof_P >
+class CCallbackImpl : protected CCallbackBase
+{
+public:
+ ~CCallbackImpl() { if ( m_nCallbackFlags & k_ECallbackFlagsRegistered ) SteamAPI_UnregisterCallback( this ); }
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+
+protected:
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool /*bIOFailure*/, SteamAPICall_t /*hSteamAPICall*/ ) { Run( pvParam ); }
+ virtual int GetCallbackSizeBytes() { return sizeof_P; }
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult();
+ ~CCallResult();
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func );
+ bool IsActive() const;
+ void Cancel();
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam );
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall );
+ virtual int GetCallbackSizeBytes() { return sizeof( P ); }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct,
+// bGameserver = listen for gameserver callbacks instead of client callbacks
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameserver = false >
+class CCallback : public CCallbackImpl< sizeof( P ) >
+{
+public:
+ typedef void (T::*func_t)(P*);
+
+ // NOTE: If you can't provide the correct parameters at construction time, you should
+ // use the CCallbackManual callback object (STEAM_CALLBACK_MANUAL macro) instead.
+ CCallback( T *pObj, func_t func );
+
+ void Register( T *pObj, func_t func );
+ void Unregister();
+
+protected:
+ virtual void Run( void *pvParam );
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: subclass of CCallback which allows default-construction in
+// an unregistered state; you must call Register manually
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer = false >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+
+ // Inherits public Register and Unregister functions from base class
+};
+
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// SteamAPI_IsSteamRunning() returns true if Steam is currently running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Pumps out all the steam messages, calling registered callbacks.
+// NOT THREADSAFE - do not call from multiple threads simultaneously.
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name.
+// DEPRECATED - implementation is Windows only, and the path returned is a UTF-8 string which must be converted to UTF-16 for use with Win32 APIs
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+
+#if defined( VERSION_SAFE_STEAM_API_INTERFACES )
+// exists only for backwards compat with code written against older SDKs
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#endif
+
+#include "steam_api_internal.h"
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_141/steam_api_flat.h b/lsteamclient/steamworks_sdk_141/steam_api_flat.h
new file mode 100644
index 00000000..3daccc04
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/steam_api_flat.h
@@ -0,0 +1,830 @@
+//====== Copyright (c) 1996-2014, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Header for flatted SteamAPI. Use this for binding to other languages.
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+#ifndef STEAMAPIFLAT_H
+#define STEAMAPIFLAT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <stdint.h>
+
+
+typedef unsigned char uint8;
+typedef unsigned char uint8;
+typedef signed char int8;
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+typedef int64 lint64;
+typedef uint64 ulint64;
+typedef uint8 Salt_t[8];
+typedef uint64 GID_t;
+typedef uint64 JobID_t;
+typedef GID_t TxnID_t;
+typedef uint32 PackageId_t;
+typedef uint32 BundleId_t;
+typedef uint32 AppId_t;
+typedef uint64 AssetClassId_t;
+typedef uint32 PhysicalItemId_t;
+typedef uint32 DepotId_t;
+typedef uint32 RTime32;
+typedef uint32 CellID_t;
+typedef uint64 SteamAPICall_t;
+typedef uint32 AccountID_t;
+typedef uint32 PartnerId_t;
+typedef uint64 ManifestId_t;
+typedef uint32 HAuthTicket;
+typedef void * BREAKPAD_HANDLE;
+typedef char compile_time_assert_type[1];
+typedef int32 HSteamPipe;
+typedef int32 HSteamUser;
+typedef int16 FriendsGroupID_t;
+typedef void * HServerListRequest;
+typedef int HServerQuery;
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+typedef uint64 UGCFileWriteStreamHandle_t;
+typedef char compile_time_assert_type[1];
+typedef uint64 SteamLeaderboard_t;
+typedef uint64 SteamLeaderboardEntries_t;
+typedef uint32 SNetSocket_t;
+typedef uint32 SNetListenSocket_t;
+typedef uint32 ScreenshotHandle;
+typedef uint32 HTTPRequestHandle;
+typedef uint32 HTTPCookieContainerHandle;
+typedef uint64 ClientUnifiedMessageHandle;
+typedef uint64 ControllerHandle_t;
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+typedef uint32 HHTMLBrowser;
+typedef uint64 SteamItemInstanceID_t;
+typedef int32 SteamItemDef_t;
+typedef int32 SteamInventoryResult_t;
+// OpenVR Constants
+int const_k_iSteamUserCallbacks = 100;
+int const_k_iSteamGameServerCallbacks = 200;
+int const_k_iSteamFriendsCallbacks = 300;
+int const_k_iSteamBillingCallbacks = 400;
+int const_k_iSteamMatchmakingCallbacks = 500;
+int const_k_iSteamContentServerCallbacks = 600;
+int const_k_iSteamUtilsCallbacks = 700;
+int const_k_iClientFriendsCallbacks = 800;
+int const_k_iClientUserCallbacks = 900;
+int const_k_iSteamAppsCallbacks = 1000;
+int const_k_iSteamUserStatsCallbacks = 1100;
+int const_k_iSteamNetworkingCallbacks = 1200;
+int const_k_iClientRemoteStorageCallbacks = 1300;
+int const_k_iClientDepotBuilderCallbacks = 1400;
+int const_k_iSteamGameServerItemsCallbacks = 1500;
+int const_k_iClientUtilsCallbacks = 1600;
+int const_k_iSteamGameCoordinatorCallbacks = 1700;
+int const_k_iSteamGameServerStatsCallbacks = 1800;
+int const_k_iSteam2AsyncCallbacks = 1900;
+int const_k_iSteamGameStatsCallbacks = 2000;
+int const_k_iClientHTTPCallbacks = 2100;
+int const_k_iClientScreenshotsCallbacks = 2200;
+int const_k_iSteamScreenshotsCallbacks = 2300;
+int const_k_iClientAudioCallbacks = 2400;
+int const_k_iClientUnifiedMessagesCallbacks = 2500;
+int const_k_iSteamStreamLauncherCallbacks = 2600;
+int const_k_iClientControllerCallbacks = 2700;
+int const_k_iSteamControllerCallbacks = 2800;
+int const_k_iClientParentalSettingsCallbacks = 2900;
+int const_k_iClientDeviceAuthCallbacks = 3000;
+int const_k_iClientNetworkDeviceManagerCallbacks = 3100;
+int const_k_iClientMusicCallbacks = 3200;
+int const_k_iClientRemoteClientManagerCallbacks = 3300;
+int const_k_iClientUGCCallbacks = 3400;
+int const_k_iSteamStreamClientCallbacks = 3500;
+int const_k_IClientProductBuilderCallbacks = 3600;
+int const_k_iClientShortcutsCallbacks = 3700;
+int const_k_iClientRemoteControlManagerCallbacks = 3800;
+int const_k_iSteamAppListCallbacks = 3900;
+int const_k_iSteamMusicCallbacks = 4000;
+int const_k_iSteamMusicRemoteCallbacks = 4100;
+int const_k_iClientVRCallbacks = 4200;
+int const_k_iClientGameNotificationCallbacks = 4300;
+int const_k_iSteamGameNotificationCallbacks = 4400;
+int const_k_iSteamHTMLSurfaceCallbacks = 4500;
+int const_k_iClientVideoCallbacks = 4600;
+int const_k_iClientInventoryCallbacks = 4700;
+int const_k_iClientBluetoothManagerCallbacks = 4800;
+int const_k_iClientSharedConnectionCallbacks = 4900;
+int const_k_ISteamParentalSettingsCallbacks = 5000;
+int const_k_cchPersonaNameMax = 128;
+int const_k_cwchPersonaNameMax = 32;
+int const_k_cchMaxRichPresenceKeys = 20;
+int const_k_cchMaxRichPresenceKeyLength = 64;
+int const_k_cchMaxRichPresenceValueLength = 256;
+int const_k_cchStatNameMax = 128;
+int const_k_cchLeaderboardNameMax = 128;
+int const_k_cLeaderboardDetailsMax = 64;
+unsigned long const_k_InvalidUnifiedMessageHandle = 0;
+unsigned long const_k_SteamItemInstanceIDInvalid = 0xffffffff;
+int const_k_SteamInventoryResultInvalid = -1;
+
+
+
+// OpenVR Enums
+// OpenVR Structs
+
+
+
+S_API HSteamPipe SteamAPI_ISteamClient_CreateSteamPipe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamClient_BReleaseSteamPipe(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_ConnectToGlobalUser(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_CreateLocalUser(intptr_t instancePtr, HSteamPipe * phSteamPipe, EAccountType eAccountType);
+S_API void SteamAPI_ISteamClient_ReleaseUser(intptr_t instancePtr, HSteamPipe hSteamPipe, HSteamUser hUser);
+S_API class ISteamUser * SteamAPI_ISteamClient_GetISteamUser(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServer * SteamAPI_ISteamClient_GetISteamGameServer(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_SetLocalIPBinding(intptr_t instancePtr, uint32 unIP, uint16 usPort);
+S_API class ISteamFriends * SteamAPI_ISteamClient_GetISteamFriends(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUtils * SteamAPI_ISteamClient_GetISteamUtils(intptr_t instancePtr, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmaking * SteamAPI_ISteamClient_GetISteamMatchmaking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmakingServers * SteamAPI_ISteamClient_GetISteamMatchmakingServers(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void * SteamAPI_ISteamClient_GetISteamGenericInterface(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUserStats * SteamAPI_ISteamClient_GetISteamUserStats(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServerStats * SteamAPI_ISteamClient_GetISteamGameServerStats(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamApps * SteamAPI_ISteamClient_GetISteamApps(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamNetworking * SteamAPI_ISteamClient_GetISteamNetworking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamRemoteStorage * SteamAPI_ISteamClient_GetISteamRemoteStorage(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamScreenshots * SteamAPI_ISteamClient_GetISteamScreenshots(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API uint32 SteamAPI_ISteamClient_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamClient_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(intptr_t instancePtr);
+S_API class ISteamHTTP * SteamAPI_ISteamClient_GetISteamHTTP(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUnifiedMessages * SteamAPI_ISteamClient_GetISteamUnifiedMessages(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamController * SteamAPI_ISteamClient_GetISteamController(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUGC * SteamAPI_ISteamClient_GetISteamUGC(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamAppList * SteamAPI_ISteamClient_GetISteamAppList(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusic * SteamAPI_ISteamClient_GetISteamMusic(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusicRemote * SteamAPI_ISteamClient_GetISteamMusicRemote(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamHTMLSurface * SteamAPI_ISteamClient_GetISteamHTMLSurface(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamInventory * SteamAPI_ISteamClient_GetISteamInventory(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamVideo * SteamAPI_ISteamClient_GetISteamVideo(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamParentalSettings * SteamAPI_ISteamClient_GetISteamParentalSettings(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API HSteamUser SteamAPI_ISteamUser_GetHSteamUser(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BLoggedOn(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamUser_GetSteamID(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUser_InitiateGameConnection(intptr_t instancePtr, void * pAuthBlob, int cbMaxAuthBlob, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure);
+S_API void SteamAPI_ISteamUser_TerminateGameConnection(intptr_t instancePtr, uint32 unIPServer, uint16 usPortServer);
+S_API void SteamAPI_ISteamUser_TrackAppUsageEvent(intptr_t instancePtr, class CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo);
+S_API bool SteamAPI_ISteamUser_GetUserDataFolder(intptr_t instancePtr, char * pchBuffer, int cubBuffer);
+S_API void SteamAPI_ISteamUser_StartVoiceRecording(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_StopVoiceRecording(intptr_t instancePtr);
+S_API EVoiceResult SteamAPI_ISteamUser_GetAvailableVoice(intptr_t instancePtr, uint32 * pcbCompressed, uint32 * pcbUncompressed_Deprecated, uint32 nUncompressedVoiceDesiredSampleRate_Deprecated);
+S_API EVoiceResult SteamAPI_ISteamUser_GetVoice(intptr_t instancePtr, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed_Deprecated, void * pUncompressedDestBuffer_Deprecated, uint32 cbUncompressedDestBufferSize_Deprecated, uint32 * nUncompressBytesWritten_Deprecated, uint32 nUncompressedVoiceDesiredSampleRate_Deprecated);
+S_API EVoiceResult SteamAPI_ISteamUser_DecompressVoice(intptr_t instancePtr, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate);
+S_API uint32 SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(intptr_t instancePtr);
+S_API HAuthTicket SteamAPI_ISteamUser_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamUser_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamUser_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamUser_BIsBehindNAT(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_AdvertiseGame(intptr_t instancePtr, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestEncryptedAppTicket(intptr_t instancePtr, void * pDataToInclude, int cbDataToInclude);
+S_API bool SteamAPI_ISteamUser_GetEncryptedAppTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API int SteamAPI_ISteamUser_GetGameBadgeLevel(intptr_t instancePtr, int nSeries, bool bFoil);
+S_API int SteamAPI_ISteamUser_GetPlayerSteamLevel(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestStoreAuthURL(intptr_t instancePtr, const char * pchRedirectURL);
+S_API bool SteamAPI_ISteamUser_BIsPhoneVerified(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsTwoFactorEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsPhoneIdentifying(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsPhoneRequiringVerification(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetPersonaName(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_SetPersonaName(intptr_t instancePtr, const char * pchPersonaName);
+S_API EPersonaState SteamAPI_ISteamFriends_GetPersonaState(intptr_t instancePtr);
+S_API int SteamAPI_ISteamFriends_GetFriendCount(intptr_t instancePtr, int iFriendFlags);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendByIndex(intptr_t instancePtr, int iFriend, int iFriendFlags);
+S_API EFriendRelationship SteamAPI_ISteamFriends_GetFriendRelationship(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API EPersonaState SteamAPI_ISteamFriends_GetFriendPersonaState(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaName(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_GetFriendGamePlayed(intptr_t instancePtr, class CSteamID steamIDFriend, struct FriendGameInfo_t * pFriendGameInfo);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(intptr_t instancePtr, class CSteamID steamIDFriend, int iPersonaName);
+S_API int SteamAPI_ISteamFriends_GetFriendSteamLevel(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetPlayerNickname(intptr_t instancePtr, class CSteamID steamIDPlayer);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupCount(intptr_t instancePtr);
+S_API FriendsGroupID_t SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(intptr_t instancePtr, int iFG);
+S_API const char * SteamAPI_ISteamFriends_GetFriendsGroupName(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API void SteamAPI_ISteamFriends_GetFriendsGroupMembersList(intptr_t instancePtr, FriendsGroupID_t friendsGroupID, class CSteamID * pOutSteamIDMembers, int nMembersCount);
+S_API bool SteamAPI_ISteamFriends_HasFriend(intptr_t instancePtr, class CSteamID steamIDFriend, int iFriendFlags);
+S_API int SteamAPI_ISteamFriends_GetClanCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetClanByIndex(intptr_t instancePtr, int iClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanName(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanTag(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_GetClanActivityCounts(intptr_t instancePtr, class CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_DownloadClanActivityCounts(intptr_t instancePtr, class CSteamID * psteamIDClans, int cClansToRequest);
+S_API int SteamAPI_ISteamFriends_GetFriendCountFromSource(intptr_t instancePtr, class CSteamID steamIDSource);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(intptr_t instancePtr, class CSteamID steamIDSource, int iFriend);
+S_API bool SteamAPI_ISteamFriends_IsUserInSource(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDSource);
+S_API void SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(intptr_t instancePtr, class CSteamID steamIDUser, bool bSpeaking);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlay(intptr_t instancePtr, const char * pchDialog);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToUser(intptr_t instancePtr, const char * pchDialog, class CSteamID steamID);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(intptr_t instancePtr, const char * pchURL);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToStore(intptr_t instancePtr, AppId_t nAppID, EOverlayToStoreFlag eFlag);
+S_API void SteamAPI_ISteamFriends_SetPlayedWith(intptr_t instancePtr, class CSteamID steamIDUserPlayedWith);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API int SteamAPI_ISteamFriends_GetSmallFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetMediumFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetLargeFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_RequestUserInformation(intptr_t instancePtr, class CSteamID steamIDUser, bool bRequireNameOnly);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_RequestClanOfficerList(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOwner(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanOfficerCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOfficerByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iOfficer);
+S_API uint32 SteamAPI_ISteamFriends_GetUserRestrictions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamFriends_SetRichPresence(intptr_t instancePtr, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamFriends_ClearRichPresence(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchKey);
+S_API int SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(intptr_t instancePtr, class CSteamID steamIDFriend, int iKey);
+S_API void SteamAPI_ISteamFriends_RequestFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_InviteUserToGame(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchConnectString);
+S_API int SteamAPI_ISteamFriends_GetCoplayFriendCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetCoplayFriend(intptr_t instancePtr, int iCoplayFriend);
+S_API int SteamAPI_ISteamFriends_GetFriendCoplayTime(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API AppId_t SteamAPI_ISteamFriends_GetFriendCoplayGame(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_JoinClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_LeaveClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanChatMemberCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetChatMemberByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iUser);
+S_API bool SteamAPI_ISteamFriends_SendClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, const char * pchText);
+S_API int SteamAPI_ISteamFriends_GetClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, class CSteamID * psteamidChatter);
+S_API bool SteamAPI_ISteamFriends_IsClanChatAdmin(intptr_t instancePtr, class CSteamID steamIDClanChat, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_SetListenForFriendsMessages(intptr_t instancePtr, bool bInterceptEnabled);
+S_API bool SteamAPI_ISteamFriends_ReplyToFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchMsgToSend);
+S_API int SteamAPI_ISteamFriends_GetFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_GetFollowerCount(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_IsFollowing(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_EnumerateFollowingList(intptr_t instancePtr, uint32 unStartIndex);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceAppActive(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(intptr_t instancePtr);
+S_API EUniverse SteamAPI_ISteamUtils_GetConnectedUniverse(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetServerRealTime(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUtils_GetIPCountry(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetImageSize(intptr_t instancePtr, int iImage, uint32 * pnWidth, uint32 * pnHeight);
+S_API bool SteamAPI_ISteamUtils_GetImageRGBA(intptr_t instancePtr, int iImage, uint8 * pubDest, int nDestBufferSize);
+S_API bool SteamAPI_ISteamUtils_GetCSERIPPort(intptr_t instancePtr, uint32 * unIP, uint16 * usPort);
+S_API uint8 SteamAPI_ISteamUtils_GetCurrentBatteryPower(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetAppID(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationPosition(intptr_t instancePtr, ENotificationPosition eNotificationPosition);
+S_API bool SteamAPI_ISteamUtils_IsAPICallCompleted(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, bool * pbFailed);
+S_API ESteamAPICallFailure SteamAPI_ISteamUtils_GetAPICallFailureReason(intptr_t instancePtr, SteamAPICall_t hSteamAPICall);
+S_API bool SteamAPI_ISteamUtils_GetAPICallResult(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed);
+S_API uint32 SteamAPI_ISteamUtils_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamUtils_IsOverlayEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_BOverlayNeedsPresent(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUtils_CheckFileSignature(intptr_t instancePtr, const char * szFileName);
+S_API bool SteamAPI_ISteamUtils_ShowGamepadTextInput(intptr_t instancePtr, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText);
+S_API uint32 SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(intptr_t instancePtr, char * pchText, uint32 cchText);
+S_API const char * SteamAPI_ISteamUtils_GetSteamUILanguage(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_IsSteamRunningInVR(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationInset(intptr_t instancePtr, int nHorizontalInset, int nVerticalInset);
+S_API bool SteamAPI_ISteamUtils_IsSteamInBigPictureMode(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_StartVRDashboard(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_IsVRHeadsetStreamingEnabled(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetVRHeadsetStreamingEnabled(intptr_t instancePtr, bool bEnabled);
+S_API int SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMatchmaking_GetFavoriteGame(intptr_t instancePtr, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer);
+S_API int SteamAPI_ISteamMatchmaking_AddFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer);
+S_API bool SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_RequestLobbyList(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(intptr_t instancePtr, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToBeCloseTo);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(intptr_t instancePtr, int nSlotsAvailable);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(intptr_t instancePtr, ELobbyDistanceFilter eLobbyDistanceFilter);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(intptr_t instancePtr, int cMaxResults);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyByIndex(intptr_t instancePtr, int iLobby);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_CreateLobby(intptr_t instancePtr, ELobbyType eLobbyType, int cMaxMembers);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_JoinLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_LeaveLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_InviteUserToLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDInvitee);
+S_API int SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iMember);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyDataCount(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize);
+S_API bool SteamAPI_ISteamMatchmaking_DeleteLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDUser, const char * pchKey);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(intptr_t instancePtr, class CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(intptr_t instancePtr, class CSteamID steamIDLobby, int iChatID, class CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API bool SteamAPI_ISteamMatchmaking_RequestLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, class CSteamID steamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, class CSteamID * psteamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby, int cMaxMembers);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyType(intptr_t instancePtr, class CSteamID steamIDLobby, ELobbyType eLobbyType);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyJoinable(intptr_t instancePtr, class CSteamID steamIDLobby, bool bLobbyJoinable);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDNewOwner);
+S_API bool SteamAPI_ISteamMatchmaking_SetLinkedLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDLobbyDependent);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(intptr_t instancePtr, HServerListRequest hRequest, EMatchMakingServerResponse response);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(intptr_t instancePtr, class gameserveritem_t & server);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(intptr_t instancePtr, const char * pchName, int nScore, float flTimePlayed);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(intptr_t instancePtr, const char * pchRule, const char * pchValue);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(intptr_t instancePtr);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestLANServerList(intptr_t instancePtr, AppId_t iApp, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_ReleaseRequest(intptr_t instancePtr, HServerListRequest hServerListRequest);
+S_API class gameserveritem_t * SteamAPI_ISteamMatchmakingServers_GetServerDetails(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API bool SteamAPI_ISteamMatchmakingServers_IsRefreshing(intptr_t instancePtr, HServerListRequest hRequest);
+S_API int SteamAPI_ISteamMatchmakingServers_GetServerCount(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshServer(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PingServer(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPingResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PlayerDetails(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPlayersResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_ServerRules(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingRulesResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelServerQuery(intptr_t instancePtr, HServerQuery hServerQuery);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWrite(intptr_t instancePtr, const char * pchFile, const void * pvData, int32 cubData);
+S_API int32 SteamAPI_ISteamRemoteStorage_FileRead(intptr_t instancePtr, const char * pchFile, void * pvData, int32 cubDataToRead);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileWriteAsync(intptr_t instancePtr, const char * pchFile, const void * pvData, uint32 cubData);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileReadAsync(intptr_t instancePtr, const char * pchFile, uint32 nOffset, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileReadAsyncComplete(intptr_t instancePtr, SteamAPICall_t hReadCall, void * pvBuffer, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileForget(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileDelete(intptr_t instancePtr, const char * pchFile);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileShare(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(intptr_t instancePtr, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform);
+S_API UGCFileWriteStreamHandle_t SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileExists(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FilePersisted(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileSize(intptr_t instancePtr, const char * pchFile);
+S_API int64 SteamAPI_ISteamRemoteStorage_GetFileTimestamp(intptr_t instancePtr, const char * pchFile);
+S_API ERemoteStoragePlatform SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileCount(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(intptr_t instancePtr, int iFile, int32 * pnFileSizeInBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_GetQuota(intptr_t instancePtr, uint64 * pnTotalBytes, uint64 * puAvailableBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(intptr_t instancePtr);
+S_API void SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(intptr_t instancePtr, bool bEnabled);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownload(intptr_t instancePtr, UGCHandle_t hContent, uint32 unPriority);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(intptr_t instancePtr, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDetails(intptr_t instancePtr, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, class CSteamID * pSteamIDOwner);
+S_API int32 SteamAPI_ISteamRemoteStorage_UGCRead(intptr_t instancePtr, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(intptr_t instancePtr);
+S_API UGCHandle_t SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(intptr_t instancePtr, int32 iCachedContent);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(intptr_t instancePtr, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType);
+S_API PublishedFileUpdateHandle_t SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_DeletePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(intptr_t instancePtr, class CSteamID steamId, uint32 unStartIndex, struct SteamParamStringArray_t * pRequiredTags, struct SteamParamStringArray_t * pExcludedTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishVideo(intptr_t instancePtr, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(intptr_t instancePtr, EWorkshopFileAction eAction, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(intptr_t instancePtr, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, struct SteamParamStringArray_t * pTags, struct SteamParamStringArray_t * pUserTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(intptr_t instancePtr, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority);
+S_API bool SteamAPI_ISteamUserStats_RequestCurrentStats(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUserStats_GetStat(intptr_t instancePtr, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetStat0(intptr_t instancePtr, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_SetStat(intptr_t instancePtr, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamUserStats_SetStat0(intptr_t instancePtr, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamUserStats_UpdateAvgRateStat(intptr_t instancePtr, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamUserStats_GetAchievement(intptr_t instancePtr, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_SetAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_ClearAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(intptr_t instancePtr, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_StoreStats(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetAchievementIcon(intptr_t instancePtr, const char * pchName);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(intptr_t instancePtr, const char * pchName, const char * pchKey);
+S_API bool SteamAPI_ISteamUserStats_IndicateAchievementProgress(intptr_t instancePtr, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress);
+S_API uint32 SteamAPI_ISteamUserStats_GetNumAchievements(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementName(intptr_t instancePtr, uint32 iAchievement);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_ResetAllStats(intptr_t instancePtr, bool bAchievementsToo);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName);
+S_API const char * SteamAPI_ISteamUserStats_GetLeaderboardName(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API int SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardSortMethod SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardDisplayType SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, class CSteamID * prgUsers, int cUsers);
+S_API bool SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(intptr_t instancePtr, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, struct LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_UploadLeaderboardScore(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_AttachLeaderboardUGC(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(intptr_t instancePtr, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API int SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(intptr_t instancePtr, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(intptr_t instancePtr, const char * pchName, float * pflPercent);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalStats(intptr_t instancePtr, int nHistoryDays);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat(intptr_t instancePtr, const char * pchStatName, int64 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat0(intptr_t instancePtr, const char * pchStatName, double * pData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory(intptr_t instancePtr, const char * pchStatName, int64 * pData, uint32 cubData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory0(intptr_t instancePtr, const char * pchStatName, double * pData, uint32 cubData);
+S_API bool SteamAPI_ISteamApps_BIsSubscribed(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsLowViolence(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsCybercafe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsVACBanned(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetCurrentGameLanguage(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetAvailableGameLanguages(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedApp(intptr_t instancePtr, AppId_t appID);
+S_API bool SteamAPI_ISteamApps_BIsDlcInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint32 SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(intptr_t instancePtr);
+S_API int SteamAPI_ISteamApps_GetDLCCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BGetDLCDataByIndex(intptr_t instancePtr, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize);
+S_API void SteamAPI_ISteamApps_InstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_UninstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_GetCurrentBetaName(intptr_t instancePtr, char * pchName, int cchNameBufferSize);
+S_API bool SteamAPI_ISteamApps_MarkContentCorrupt(intptr_t instancePtr, bool bMissingFilesOnly);
+S_API uint32 SteamAPI_ISteamApps_GetInstalledDepots(intptr_t instancePtr, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots);
+S_API uint32 SteamAPI_ISteamApps_GetAppInstallDir(intptr_t instancePtr, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize);
+S_API bool SteamAPI_ISteamApps_BIsAppInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint64 SteamAPI_ISteamApps_GetAppOwner(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetLaunchQueryParam(intptr_t instancePtr, const char * pchKey);
+S_API bool SteamAPI_ISteamApps_GetDlcDownloadProgress(intptr_t instancePtr, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API int SteamAPI_ISteamApps_GetAppBuildId(intptr_t instancePtr);
+S_API void SteamAPI_ISteamApps_RequestAllProofOfPurchaseKeys(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamApps_GetFileDetails(intptr_t instancePtr, const char * pszFileName);
+S_API bool SteamAPI_ISteamNetworking_SendP2PPacket(intptr_t instancePtr, class CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_IsP2PPacketAvailable(intptr_t instancePtr, uint32 * pcubMsgSize, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_ReadP2PPacket(intptr_t instancePtr, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, class CSteamID * psteamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(intptr_t instancePtr, class CSteamID steamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_GetP2PSessionState(intptr_t instancePtr, class CSteamID steamIDRemote, struct P2PSessionState_t * pConnectionState);
+S_API bool SteamAPI_ISteamNetworking_AllowP2PPacketRelay(intptr_t instancePtr, bool bAllow);
+S_API SNetListenSocket_t SteamAPI_ISteamNetworking_CreateListenSocket(intptr_t instancePtr, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(intptr_t instancePtr, class CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateConnectionSocket(intptr_t instancePtr, uint32 nIP, uint16 nPort, int nTimeoutSec);
+S_API bool SteamAPI_ISteamNetworking_DestroySocket(intptr_t instancePtr, SNetSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_DestroyListenSocket(intptr_t instancePtr, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_SendDataOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_RetrieveDataFromSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailable(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_RetrieveData(intptr_t instancePtr, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_GetSocketInfo(intptr_t instancePtr, SNetSocket_t hSocket, class CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote);
+S_API bool SteamAPI_ISteamNetworking_GetListenSocketInfo(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort);
+S_API ESNetSocketConnectionType SteamAPI_ISteamNetworking_GetSocketConnectionType(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API int SteamAPI_ISteamNetworking_GetMaxPacketSize(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_WriteScreenshot(intptr_t instancePtr, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(intptr_t instancePtr, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight);
+S_API void SteamAPI_ISteamScreenshots_TriggerScreenshot(intptr_t instancePtr);
+S_API void SteamAPI_ISteamScreenshots_HookScreenshots(intptr_t instancePtr, bool bHook);
+S_API bool SteamAPI_ISteamScreenshots_SetLocation(intptr_t instancePtr, ScreenshotHandle hScreenshot, const char * pchLocation);
+S_API bool SteamAPI_ISteamScreenshots_TagUser(intptr_t instancePtr, ScreenshotHandle hScreenshot, class CSteamID steamID);
+S_API bool SteamAPI_ISteamScreenshots_TagPublishedFile(intptr_t instancePtr, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID);
+S_API bool SteamAPI_ISteamScreenshots_IsScreenshotsHooked(intptr_t instancePtr);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddVRScreenshotToLibrary(intptr_t instancePtr, EVRScreenshotType eType, const char * pchFilename, const char * pchVRFilename);
+S_API bool SteamAPI_ISteamMusic_BIsEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusic_BIsPlaying(intptr_t instancePtr);
+S_API AudioPlayback_Status SteamAPI_ISteamMusic_GetPlaybackStatus(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Play(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Pause(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayPrevious(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayNext(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_SetVolume(intptr_t instancePtr, float flVolume);
+S_API float SteamAPI_ISteamMusic_GetVolume(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BActivationSuccess(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_SetDisplayName(intptr_t instancePtr, const char * pchDisplayName);
+S_API bool SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayPrevious(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayNext(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableQueue(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlaylists(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(intptr_t instancePtr, AudioPlayback_Status nStatus);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateVolume(intptr_t instancePtr, float flValue);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(intptr_t instancePtr, bool bAvailable);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(intptr_t instancePtr, const char * pchText);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(intptr_t instancePtr, int nValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_QueueWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetQueueEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetQueueEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_QueueDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetPlaylistEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistDidChange(intptr_t instancePtr);
+S_API HTTPRequestHandle SteamAPI_ISteamHTTP_CreateHTTPRequest(intptr_t instancePtr, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(intptr_t instancePtr, HTTPRequestHandle hRequest, uint64 ulContextValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_DeferHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 * unBodySize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 cOffset, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_ReleaseHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(intptr_t instancePtr, HTTPRequestHandle hRequest, float * pflPercentOut);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen);
+S_API HTTPCookieContainerHandle SteamAPI_ISteamHTTP_CreateCookieContainer(intptr_t instancePtr, bool bAllowResponsesToModify);
+S_API bool SteamAPI_ISteamHTTP_ReleaseCookieContainer(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetCookie(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer, const char * pchHost, const char * pchUrl, const char * pchCookie);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(intptr_t instancePtr, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchUserAgentInfo);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(intptr_t instancePtr, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unMilliseconds);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(intptr_t instancePtr, HTTPRequestHandle hRequest, bool * pbWasTimedOut);
+S_API ClientUnifiedMessageHandle SteamAPI_ISteamUnifiedMessages_SendMethod(intptr_t instancePtr, const char * pchServiceMethod, const void * pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseInfo(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, uint32 * punResponseSize, EResult * peResult);
+S_API bool SteamAPI_ISteamUnifiedMessages_GetMethodResponseData(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle, void * pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease);
+S_API bool SteamAPI_ISteamUnifiedMessages_ReleaseMethod(intptr_t instancePtr, ClientUnifiedMessageHandle hHandle);
+S_API bool SteamAPI_ISteamUnifiedMessages_SendNotification(intptr_t instancePtr, const char * pchServiceNotification, const void * pNotificationBuffer, uint32 unNotificationBufferSize);
+S_API bool SteamAPI_ISteamController_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamController_Shutdown(intptr_t instancePtr);
+S_API void SteamAPI_ISteamController_RunFrame(intptr_t instancePtr);
+S_API int SteamAPI_ISteamController_GetConnectedControllers(intptr_t instancePtr, ControllerHandle_t * handlesOut);
+S_API bool SteamAPI_ISteamController_ShowBindingPanel(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetActionSetHandle(intptr_t instancePtr, const char * pszActionSetName);
+S_API void SteamAPI_ISteamController_ActivateActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetCurrentActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerDigitalActionHandle_t SteamAPI_ISteamController_GetDigitalActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerDigitalActionData_t SteamAPI_ISteamController_GetDigitalActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle);
+S_API int SteamAPI_ISteamController_GetDigitalActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin * originsOut);
+S_API ControllerAnalogActionHandle_t SteamAPI_ISteamController_GetAnalogActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerAnalogActionData_t SteamAPI_ISteamController_GetAnalogActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle);
+S_API int SteamAPI_ISteamController_GetAnalogActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin * originsOut);
+S_API void SteamAPI_ISteamController_StopAnalogActionMomentum(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction);
+S_API void SteamAPI_ISteamController_TriggerHapticPulse(intptr_t instancePtr, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec);
+S_API void SteamAPI_ISteamController_TriggerRepeatedHapticPulse(intptr_t instancePtr, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags);
+S_API void SteamAPI_ISteamController_TriggerVibration(intptr_t instancePtr, ControllerHandle_t controllerHandle, unsigned short usLeftSpeed, unsigned short usRightSpeed);
+S_API void SteamAPI_ISteamController_SetLEDColor(intptr_t instancePtr, ControllerHandle_t controllerHandle, uint8 nColorR, uint8 nColorG, uint8 nColorB, unsigned int nFlags);
+S_API int SteamAPI_ISteamController_GetGamepadIndexForController(intptr_t instancePtr, ControllerHandle_t ulControllerHandle);
+S_API ControllerHandle_t SteamAPI_ISteamController_GetControllerForGamepadIndex(intptr_t instancePtr, int nIndex);
+S_API struct ControllerMotionData_t SteamAPI_ISteamController_GetMotionData(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API bool SteamAPI_ISteamController_ShowDigitalActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition);
+S_API bool SteamAPI_ISteamController_ShowAnalogActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition);
+S_API const char * SteamAPI_ISteamController_GetStringForActionOrigin(intptr_t instancePtr, EControllerActionOrigin eOrigin);
+S_API const char * SteamAPI_ISteamController_GetGlyphForActionOrigin(intptr_t instancePtr, EControllerActionOrigin eOrigin);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(intptr_t instancePtr, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(intptr_t instancePtr, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SendQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCResult(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, struct SteamUGCDetails_t * pDetails);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCPreviewURL(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCChildren(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCStatistic(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint64 * pStatValue);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, char * pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType * pPreviewType);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize);
+S_API bool SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_AddRequiredTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_AddExcludedTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_SetReturnOnlyIDs(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnOnlyIDs);
+S_API bool SteamAPI_ISteamUGC_SetReturnKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnKeyValueTags);
+S_API bool SteamAPI_ISteamUGC_SetReturnLongDescription(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnLongDescription);
+S_API bool SteamAPI_ISteamUGC_SetReturnMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnMetadata);
+S_API bool SteamAPI_ISteamUGC_SetReturnChildren(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnChildren);
+S_API bool SteamAPI_ISteamUGC_SetReturnAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews);
+S_API bool SteamAPI_ISteamUGC_SetReturnTotalOnly(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnTotalOnly);
+S_API bool SteamAPI_ISteamUGC_SetReturnPlaytimeStats(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unDays);
+S_API bool SteamAPI_ISteamUGC_SetLanguage(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetAllowCachedResponse(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds);
+S_API bool SteamAPI_ISteamUGC_SetCloudFileNameFilter(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pMatchCloudFileName);
+S_API bool SteamAPI_ISteamUGC_SetMatchAnyTag(intptr_t instancePtr, UGCQueryHandle_t handle, bool bMatchAnyTag);
+S_API bool SteamAPI_ISteamUGC_SetSearchText(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pSearchText);
+S_API bool SteamAPI_ISteamUGC_SetRankedByTrendDays(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unDays);
+S_API bool SteamAPI_ISteamUGC_AddRequiredKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pKey, const char * pValue);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RequestUGCDetails(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_CreateItem(intptr_t instancePtr, AppId_t nConsumerAppId, EWorkshopFileType eFileType);
+S_API UGCUpdateHandle_t SteamAPI_ISteamUGC_StartItemUpdate(intptr_t instancePtr, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_SetItemTitle(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchTitle);
+S_API bool SteamAPI_ISteamUGC_SetItemDescription(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchDescription);
+S_API bool SteamAPI_ISteamUGC_SetItemUpdateLanguage(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetItemMetadata(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchMetaData);
+S_API bool SteamAPI_ISteamUGC_SetItemVisibility(intptr_t instancePtr, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamUGC_SetItemTags(intptr_t instancePtr, UGCUpdateHandle_t updateHandle, const struct SteamParamStringArray_t * pTags);
+S_API bool SteamAPI_ISteamUGC_SetItemContent(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszContentFolder);
+S_API bool SteamAPI_ISteamUGC_SetItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile);
+S_API bool SteamAPI_ISteamUGC_RemoveItemKeyValueTags(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey);
+S_API bool SteamAPI_ISteamUGC_AddItemKeyValueTag(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamUGC_AddItemPreviewFile(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile, EItemPreviewType type);
+S_API bool SteamAPI_ISteamUGC_AddItemPreviewVideo(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszVideoID);
+S_API bool SteamAPI_ISteamUGC_UpdateItemPreviewFile(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index, const char * pszPreviewFile);
+S_API bool SteamAPI_ISteamUGC_UpdateItemPreviewVideo(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index, const char * pszVideoID);
+S_API bool SteamAPI_ISteamUGC_RemoveItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubmitItemUpdate(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchChangeNote);
+S_API EItemUpdateStatus SteamAPI_ISteamUGC_GetItemUpdateProgress(intptr_t instancePtr, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_GetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddItemToFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveItemFromFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_UnsubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API uint32 SteamAPI_ISteamUGC_GetNumSubscribedItems(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUGC_GetSubscribedItems(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API uint32 SteamAPI_ISteamUGC_GetItemState(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_GetItemInstallInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp);
+S_API bool SteamAPI_ISteamUGC_GetItemDownloadInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API bool SteamAPI_ISteamUGC_DownloadItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bHighPriority);
+S_API bool SteamAPI_ISteamUGC_BInitWorkshopForGameServer(intptr_t instancePtr, DepotId_t unWorkshopDepotID, const char * pszFolder);
+S_API void SteamAPI_ISteamUGC_SuspendDownloads(intptr_t instancePtr, bool bSuspend);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_StartPlaytimeTracking(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_StopPlaytimeTracking(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_StopPlaytimeTrackingForAllItems(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddDependency(intptr_t instancePtr, PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveDependency(intptr_t instancePtr, PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddAppDependency(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, AppId_t nAppID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveAppDependency(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, AppId_t nAppID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_GetAppDependencies(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_DeleteItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API uint32 SteamAPI_ISteamAppList_GetNumInstalledApps(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamAppList_GetInstalledApps(intptr_t instancePtr, AppId_t * pvecAppID, uint32 unMaxAppIDs);
+S_API int SteamAPI_ISteamAppList_GetAppName(intptr_t instancePtr, AppId_t nAppID, char * pchName, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppInstallDir(intptr_t instancePtr, AppId_t nAppID, char * pchDirectory, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppBuildId(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Shutdown(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamHTMLSurface_CreateBrowser(intptr_t instancePtr, const char * pchUserAgent, const char * pchUserCSS);
+S_API void SteamAPI_ISteamHTMLSurface_RemoveBrowser(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_LoadURL(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData);
+S_API void SteamAPI_ISteamHTMLSurface_SetSize(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight);
+S_API void SteamAPI_ISteamHTMLSurface_StopLoad(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Reload(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoBack(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoForward(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_AddHeader(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamHTMLSurface_ExecuteJavascript(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchScript);
+S_API void SteamAPI_ISteamHTMLSurface_MouseUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDoubleClick(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseMove(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_MouseWheel(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int32 nDelta);
+S_API void SteamAPI_ISteamHTMLSurface_KeyDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyChar(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetVerticalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetKeyFocus(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus);
+S_API void SteamAPI_ISteamHTMLSurface_ViewSource(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_CopyToClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_PasteFromClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Find(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse);
+S_API void SteamAPI_ISteamHTMLSurface_StopFind(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_SetCookie(intptr_t instancePtr, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly);
+S_API void SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY);
+S_API void SteamAPI_ISteamHTMLSurface_SetBackgroundMode(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bBackgroundMode);
+S_API void SteamAPI_ISteamHTMLSurface_SetDPIScalingFactor(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, float flDPIScaling);
+S_API void SteamAPI_ISteamHTMLSurface_AllowStartRequest(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bAllowed);
+S_API void SteamAPI_ISteamHTMLSurface_JSDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bResult);
+S_API EResult SteamAPI_ISteamInventory_GetResultStatus(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetResultItems(intptr_t instancePtr, SteamInventoryResult_t resultHandle, struct SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize);
+S_API bool SteamAPI_ISteamInventory_GetResultItemProperty(intptr_t instancePtr, SteamInventoryResult_t resultHandle, uint32 unItemIndex, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSizeOut);
+S_API uint32 SteamAPI_ISteamInventory_GetResultTimestamp(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_CheckResultSteamID(intptr_t instancePtr, SteamInventoryResult_t resultHandle, class CSteamID steamIDExpected);
+S_API void SteamAPI_ISteamInventory_DestroyResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetAllItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_GetItemsByID(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs);
+S_API bool SteamAPI_ISteamInventory_SerializeResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize);
+S_API bool SteamAPI_ISteamInventory_DeserializeResult(intptr_t instancePtr, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE);
+S_API bool SteamAPI_ISteamInventory_GenerateItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_GrantPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_AddPromoItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef);
+S_API bool SteamAPI_ISteamInventory_AddPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_ConsumeItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity);
+S_API bool SteamAPI_ISteamInventory_ExchangeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength);
+S_API bool SteamAPI_ISteamInventory_TransferItemQuantity(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest);
+S_API void SteamAPI_ISteamInventory_SendItemDropHeartbeat(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_TriggerItemDrop(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition);
+S_API bool SteamAPI_ISteamInventory_TradeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, class CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength);
+S_API bool SteamAPI_ISteamInventory_LoadItemDefinitions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionIDs(intptr_t instancePtr, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionProperty(intptr_t instancePtr, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSizeOut);
+S_API SteamAPICall_t SteamAPI_ISteamInventory_RequestEligiblePromoItemDefinitionsIDs(intptr_t instancePtr, class CSteamID steamID);
+S_API bool SteamAPI_ISteamInventory_GetEligiblePromoItemDefinitionIDs(intptr_t instancePtr, class CSteamID steamID, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API void SteamAPI_ISteamVideo_GetVideoURL(intptr_t instancePtr, AppId_t unVideoAppID);
+S_API bool SteamAPI_ISteamVideo_IsBroadcasting(intptr_t instancePtr, int * pnNumViewers);
+S_API void SteamAPI_ISteamVideo_GetOPFSettings(intptr_t instancePtr, AppId_t unVideoAppID);
+S_API bool SteamAPI_ISteamVideo_GetOPFStringForApp(intptr_t instancePtr, AppId_t unVideoAppID, char * pchBuffer, int32 * pnBufferSize);
+S_API bool SteamAPI_ISteamParentalSettings_BIsParentalLockEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamParentalSettings_BIsParentalLockLocked(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamParentalSettings_BIsAppBlocked(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamParentalSettings_BIsAppInBlockList(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamParentalSettings_BIsFeatureBlocked(intptr_t instancePtr, EParentalFeature eFeature);
+S_API bool SteamAPI_ISteamParentalSettings_BIsFeatureInBlockList(intptr_t instancePtr, EParentalFeature eFeature);
+S_API bool SteamAPI_ISteamGameServer_InitGameServer(intptr_t instancePtr, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString);
+S_API void SteamAPI_ISteamGameServer_SetProduct(intptr_t instancePtr, const char * pszProduct);
+S_API void SteamAPI_ISteamGameServer_SetGameDescription(intptr_t instancePtr, const char * pszGameDescription);
+S_API void SteamAPI_ISteamGameServer_SetModDir(intptr_t instancePtr, const char * pszModDir);
+S_API void SteamAPI_ISteamGameServer_SetDedicatedServer(intptr_t instancePtr, bool bDedicated);
+S_API void SteamAPI_ISteamGameServer_LogOn(intptr_t instancePtr, const char * pszToken);
+S_API void SteamAPI_ISteamGameServer_LogOnAnonymous(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_LogOff(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BLoggedOn(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BSecure(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamGameServer_GetSteamID(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_WasRestartRequested(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetMaxPlayerCount(intptr_t instancePtr, int cPlayersMax);
+S_API void SteamAPI_ISteamGameServer_SetBotPlayerCount(intptr_t instancePtr, int cBotplayers);
+S_API void SteamAPI_ISteamGameServer_SetServerName(intptr_t instancePtr, const char * pszServerName);
+S_API void SteamAPI_ISteamGameServer_SetMapName(intptr_t instancePtr, const char * pszMapName);
+S_API void SteamAPI_ISteamGameServer_SetPasswordProtected(intptr_t instancePtr, bool bPasswordProtected);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorPort(intptr_t instancePtr, uint16 unSpectatorPort);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorServerName(intptr_t instancePtr, const char * pszSpectatorServerName);
+S_API void SteamAPI_ISteamGameServer_ClearAllKeyValues(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetKeyValue(intptr_t instancePtr, const char * pKey, const char * pValue);
+S_API void SteamAPI_ISteamGameServer_SetGameTags(intptr_t instancePtr, const char * pchGameTags);
+S_API void SteamAPI_ISteamGameServer_SetGameData(intptr_t instancePtr, const char * pchGameData);
+S_API void SteamAPI_ISteamGameServer_SetRegion(intptr_t instancePtr, const char * pszRegion);
+S_API bool SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(intptr_t instancePtr, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, class CSteamID * pSteamIDUser);
+S_API uint64 SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SendUserDisconnect(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServer_BUpdateUserData(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore);
+S_API HAuthTicket SteamAPI_ISteamGameServer_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamGameServer_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamGameServer_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamGameServer_RequestUserGroupStatus(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDGroup);
+S_API void SteamAPI_ISteamGameServer_GetGameplayStats(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_GetServerReputation(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamGameServer_GetPublicIP(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_HandleIncomingPacket(intptr_t instancePtr, const void * pData, int cbData, uint32 srcIP, uint16 srcPort);
+S_API int SteamAPI_ISteamGameServer_GetNextOutgoingPacket(intptr_t instancePtr, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort);
+S_API void SteamAPI_ISteamGameServer_EnableHeartbeats(intptr_t instancePtr, bool bActive);
+S_API void SteamAPI_ISteamGameServer_SetHeartbeatInterval(intptr_t instancePtr, int iHeartbeatInterval);
+S_API void SteamAPI_ISteamGameServer_ForceHeartbeat(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_AssociateWithClan(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(intptr_t instancePtr, class CSteamID steamIDNewPlayer);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API bool SteamAPI_ISteamGameServerStats_ClearUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_StoreUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+#endif // STEAMAPIFLAT_H
+
+
diff --git a/lsteamclient/steamworks_sdk_141/steam_api_internal.h b/lsteamclient/steamworks_sdk_141/steam_api_internal.h
new file mode 100644
index 00000000..5ecce0ba
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/steam_api_internal.h
@@ -0,0 +1,334 @@
+//====== Copyright 1996-2015, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Internal private Steamworks API declarations and definitions
+//
+//=============================================================================
+
+#ifndef STEAM_API_INTERNAL_H
+#define STEAM_API_INTERNAL_H
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+S_API void * S_CALLTYPE SteamInternal_ContextInit( void *pContextInitData );
+S_API void * S_CALLTYPE SteamInternal_CreateInterface( const char *ver );
+
+#if !defined( STEAM_API_EXPORTS )
+
+inline void S_CALLTYPE SteamInternal_OnContextInit( void* p )
+{
+ ((CSteamAPIContext*)p)->Clear();
+ if ( SteamAPI_GetHSteamPipe() )
+ ((CSteamAPIContext*)p)->Init();
+}
+inline CSteamAPIContext& SteamInternal_ModuleContext()
+{
+ // SteamInternal_ContextInit takes a base pointer for the equivalent of
+ // struct { void (*pFn)(void* pCtx); uintp counter; CSteamAPIContext ctx; }
+ // Do not change layout of 2 + sizeof... or add non-pointer aligned data!
+ // NOTE: declaring "static CSteamAPIConext" creates a large function
+ // which queries the initialization status of the object. We know that
+ // it is pointer-aligned and fully memset with zeros, so just alias a
+ // static buffer of the appropriate size and call it a CSteamAPIContext.
+ static void* s_CallbackCounterAndContext[ 2 + sizeof(CSteamAPIContext)/sizeof(void*) ] = { (void*)&SteamInternal_OnContextInit, 0 };
+ return *(CSteamAPIContext*)SteamInternal_ContextInit( s_CallbackCounterAndContext );
+}
+
+inline ISteamClient *SteamClient() { return SteamInternal_ModuleContext().SteamClient(); }
+inline ISteamUser *SteamUser() { return SteamInternal_ModuleContext().SteamUser(); }
+inline ISteamFriends *SteamFriends() { return SteamInternal_ModuleContext().SteamFriends(); }
+inline ISteamUtils *SteamUtils() { return SteamInternal_ModuleContext().SteamUtils(); }
+inline ISteamMatchmaking *SteamMatchmaking() { return SteamInternal_ModuleContext().SteamMatchmaking(); }
+inline ISteamUserStats *SteamUserStats() { return SteamInternal_ModuleContext().SteamUserStats(); }
+inline ISteamApps *SteamApps() { return SteamInternal_ModuleContext().SteamApps(); }
+inline ISteamMatchmakingServers *SteamMatchmakingServers() { return SteamInternal_ModuleContext().SteamMatchmakingServers(); }
+inline ISteamNetworking *SteamNetworking() { return SteamInternal_ModuleContext().SteamNetworking(); }
+inline ISteamRemoteStorage *SteamRemoteStorage() { return SteamInternal_ModuleContext().SteamRemoteStorage(); }
+inline ISteamScreenshots *SteamScreenshots() { return SteamInternal_ModuleContext().SteamScreenshots(); }
+inline ISteamHTTP *SteamHTTP() { return SteamInternal_ModuleContext().SteamHTTP(); }
+inline ISteamUnifiedMessages *SteamUnifiedMessages() { return SteamInternal_ModuleContext().SteamUnifiedMessages(); }
+inline ISteamController *SteamController() { return SteamInternal_ModuleContext().SteamController(); }
+inline ISteamUGC *SteamUGC() { return SteamInternal_ModuleContext().SteamUGC(); }
+inline ISteamAppList *SteamAppList() { return SteamInternal_ModuleContext().SteamAppList(); }
+inline ISteamMusic *SteamMusic() { return SteamInternal_ModuleContext().SteamMusic(); }
+inline ISteamMusicRemote *SteamMusicRemote() { return SteamInternal_ModuleContext().SteamMusicRemote(); }
+inline ISteamHTMLSurface *SteamHTMLSurface() { return SteamInternal_ModuleContext().SteamHTMLSurface(); }
+inline ISteamInventory *SteamInventory() { return SteamInternal_ModuleContext().SteamInventory(); }
+inline ISteamVideo *SteamVideo() { return SteamInternal_ModuleContext().SteamVideo(); }
+inline ISteamParentalSettings *SteamParentalSettings() { return SteamInternal_ModuleContext().SteamParentalSettings(); }
+
+#endif // !defined( STEAM_API_EXPORTS )
+
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamClient = NULL;
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamUnifiedMessages = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamMusicRemote = NULL;
+ m_pSteamHTMLSurface = NULL;
+ m_pSteamInventory = NULL;
+ m_pSteamVideo = NULL;
+ m_pSteamParentalSettings = NULL;
+}
+
+
+// This function must be declared inline in the header so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+ if ( !hSteamPipe )
+ return false;
+
+ m_pSteamClient = (ISteamClient*) SteamInternal_CreateInterface( STEAMCLIENT_INTERFACE_VERSION );
+ if ( !m_pSteamClient )
+ return false;
+
+ m_pSteamUser = m_pSteamClient->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = m_pSteamClient->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = m_pSteamClient->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = m_pSteamClient->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = m_pSteamClient->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = m_pSteamClient->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = m_pSteamClient->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = m_pSteamClient->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = m_pSteamClient->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = m_pSteamClient->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = m_pSteamClient->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamUnifiedMessages = m_pSteamClient->GetISteamUnifiedMessages( hSteamUser, hSteamPipe, STEAMUNIFIEDMESSAGES_INTERFACE_VERSION );
+ if ( !m_pSteamUnifiedMessages )
+ return false;
+
+ m_pController = m_pSteamClient->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = m_pSteamClient->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = m_pSteamClient->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = m_pSteamClient->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ return false;
+
+ m_pSteamMusicRemote = m_pSteamClient->GetISteamMusicRemote( hSteamUser, hSteamPipe, STEAMMUSICREMOTE_INTERFACE_VERSION );
+ if ( !m_pSteamMusicRemote )
+ return false;
+
+ m_pSteamHTMLSurface = m_pSteamClient->GetISteamHTMLSurface( hSteamUser, hSteamPipe, STEAMHTMLSURFACE_INTERFACE_VERSION );
+ if ( !m_pSteamHTMLSurface )
+ return false;
+
+ m_pSteamInventory = m_pSteamClient->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_pSteamVideo = m_pSteamClient->GetISteamVideo( hSteamUser, hSteamPipe, STEAMVIDEO_INTERFACE_VERSION );
+ if ( !m_pSteamVideo )
+ return false;
+
+ m_pSteamParentalSettings = m_pSteamClient->GetISteamParentalSettings( hSteamUser, hSteamPipe, STEAMPARENTALSETTINGS_INTERFACE_VERSION );
+ if ( !m_pSteamParentalSettings )
+ return false;
+
+ return true;
+}
+
+
+//-----------------------------------------------------------------------------
+// The following macros are implementation details, not intended for public use
+//-----------------------------------------------------------------------------
+#define _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param )
+#define _STEAM_CALLBACK_HELPER( _1, _2, SELECTED, ... ) _STEAM_CALLBACK_##SELECTED
+#define _STEAM_CALLBACK_SELECT( X, Y ) _STEAM_CALLBACK_HELPER X Y
+#define _STEAM_CALLBACK_3( extra_code, thisclass, func, param ) \
+ struct CCallbackInternal_ ## func : private CCallbackImpl< sizeof( param ) > { \
+ CCallbackInternal_ ## func () { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func ( const CCallbackInternal_ ## func & ) { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func & operator=( const CCallbackInternal_ ## func & ) { return *this; } \
+ private: virtual void Run( void *pvParam ) { _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param ) \
+ thisclass *pOuter = reinterpret_cast<thisclass*>( reinterpret_cast<char*>(this) - offsetof( thisclass, m_steamcallback_ ## func ) ); \
+ pOuter->func( reinterpret_cast<param*>( pvParam ) ); \
+ } \
+ } m_steamcallback_ ## func ; void func( param *pParam )
+#define _STEAM_CALLBACK_4( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param > var; void func( param *pParam )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+inline CCallResult<T, P>::CCallResult()
+{
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Set( SteamAPICall_t hAPICall, T *p, func_t func )
+{
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+}
+
+template< class T, class P >
+inline bool CCallResult<T, P>::IsActive() const
+{
+ return (m_hAPICall != k_uAPICallInvalid);
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Cancel()
+{
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+}
+
+template< class T, class P >
+inline CCallResult<T, P>::~CCallResult()
+{
+ Cancel();
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Run( void *pvParam )
+{
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)((P *)pvParam, false);
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+{
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)((P *)pvParam, bIOFailure);
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct,
+// bGameserver = listen for gameserver callbacks instead of client callbacks
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameserver >
+inline CCallback< T, P, bGameserver >::CCallback( T *pObj, func_t func )
+ : m_pObj( NULL ), m_Func( NULL )
+{
+ if ( bGameserver )
+ {
+ this->SetGameserverFlag();
+ }
+ Register( pObj, func );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Register( T *pObj, func_t func )
+{
+ if ( !pObj || !func )
+ return;
+
+ if ( this->m_nCallbackFlags & CCallbackBase::k_ECallbackFlagsRegistered )
+ Unregister();
+
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Unregister()
+{
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Run( void *pvParam )
+{
+ (m_pObj->*m_Func)((P *)pvParam);
+}
+
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+
+#endif // STEAM_API_INTERNAL_H
diff --git a/lsteamclient/steamworks_sdk_141/steam_gameserver.h b/lsteamclient/steamworks_sdk_141/steam_gameserver.h
new file mode 100644
index 00000000..eadebdb6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/steam_gameserver.h
@@ -0,0 +1,243 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+
+inline bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+// Most Steam API functions allocate some amount of thread-local memory for
+// parameter storage. Calling SteamGameServer_ReleaseCurrentThreadMemory()
+// will free all API-related memory associated with the calling thread.
+// This memory is released automatically by SteamGameServer_RunCallbacks(),
+// so single-threaded servers do not need to explicitly call this function.
+inline void SteamGameServer_ReleaseCurrentThreadMemory();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Global accessors for game server C++ APIs. See individual isteam*.h files for details.
+// You should not cache the results of these accessors or pass the result pointers across
+// modules! Different modules may be compiled against different SDK header versions, and
+// the interface pointers could therefore be different across modules. Every line of code
+// which calls into a Steamworks API should retrieve the interface from a global accessor.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#if !defined( STEAM_API_EXPORTS )
+inline ISteamClient *SteamGameServerClient();
+inline ISteamGameServer *SteamGameServer();
+inline ISteamUtils *SteamGameServerUtils();
+inline ISteamNetworking *SteamGameServerNetworking();
+inline ISteamGameServerStats *SteamGameServerStats();
+inline ISteamHTTP *SteamGameServerHTTP();
+inline ISteamInventory *SteamGameServerInventory();
+inline ISteamUGC *SteamGameServerUGC();
+inline ISteamApps *SteamGameServerApps();
+#endif
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext() { Clear(); }
+ inline void Clear();
+ inline bool Init();
+
+ ISteamClient *SteamClient() const { return m_pSteamClient; }
+ ISteamGameServer *SteamGameServer() const { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() const { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() const { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() const { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() const { return m_pSteamHTTP; }
+ ISteamInventory *SteamInventory() const { return m_pSteamInventory; }
+ ISteamUGC *SteamUGC() const { return m_pSteamUGC; }
+ ISteamApps *SteamApps() const { return m_pSteamApps; }
+
+private:
+ ISteamClient *m_pSteamClient;
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamInventory *m_pSteamInventory;
+ ISteamUGC *m_pSteamUGC;
+ ISteamApps *m_pSteamApps;
+};
+
+
+// Older SDKs exported this global pointer, but it is no longer supported.
+// You should use SteamGameServerClient() or CSteamGameServerAPIContext to
+// safely access the ISteamClient APIs from your game server application.
+//S_API ISteamClient *g_pSteamClientGameServer;
+
+// SteamGameServer_InitSafe has been replaced with SteamGameServer_Init and
+// is no longer supported. Use SteamGameServer_Init instead.
+//S_API void S_CALLTYPE SteamGameServer_InitSafe();
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// These macros are similar to the STEAM_CALLBACK_* macros in steam_api.h, but only trigger for gameserver callbacks
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, /*callback_type, [deprecated] var*/... ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, GS, 3 ), ( this->SetGameserverFlag();, thisclass, func, __VA_ARGS__ ) )
+
+#define STEAM_GAMESERVER_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type, true > var; void func( callback_type *pParam )
+
+
+#define _STEAM_CALLBACK_GS( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param, true > var; void func( param *pParam )
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe S_CALLTYPE SteamGameServer_GetHSteamPipe();
+S_API HSteamUser S_CALLTYPE SteamGameServer_GetHSteamUser();
+S_API bool S_CALLTYPE SteamInternal_GameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+
+
+#if !defined( STEAM_API_EXPORTS )
+inline void S_CALLTYPE SteamGameServerInternal_OnContextInit( void* p )
+{
+ ((CSteamGameServerAPIContext*)p)->Clear();
+ if ( SteamGameServer_GetHSteamPipe() )
+ ((CSteamGameServerAPIContext*)p)->Init();
+}
+inline CSteamGameServerAPIContext& SteamGameServerInternal_ModuleContext()
+{
+ // SteamInternal_ContextInit takes a base pointer for the equivalent of
+ // struct { void (*pFn)(void* pCtx); uintp counter; CSteamAPIContext ctx; }
+ // Do not change layout of 2 + sizeof... or add non-pointer aligned data!
+ // NOTE: declaring "static CSteamAPIConext" creates a large function
+ // which queries the initialization status of the object. We know that
+ // it is pointer-aligned and fully memset with zeros, so just alias a
+ // static buffer of the appropriate size and call it a CSteamAPIContext.
+ static void* s_CallbackCounterAndContext[2 + sizeof( CSteamGameServerAPIContext ) / sizeof( void* )] = { (void*)&SteamGameServerInternal_OnContextInit, 0 };
+ return *(CSteamGameServerAPIContext*)SteamInternal_ContextInit( s_CallbackCounterAndContext );
+}
+inline ISteamClient *SteamGameServerClient() { return SteamGameServerInternal_ModuleContext().SteamClient(); }
+inline ISteamGameServer *SteamGameServer() { return SteamGameServerInternal_ModuleContext().SteamGameServer(); }
+inline ISteamUtils *SteamGameServerUtils() { return SteamGameServerInternal_ModuleContext().SteamGameServerUtils(); }
+inline ISteamNetworking *SteamGameServerNetworking() { return SteamGameServerInternal_ModuleContext().SteamGameServerNetworking(); }
+inline ISteamGameServerStats *SteamGameServerStats() { return SteamGameServerInternal_ModuleContext().SteamGameServerStats(); }
+inline ISteamHTTP *SteamGameServerHTTP() { return SteamGameServerInternal_ModuleContext().SteamHTTP(); }
+inline ISteamInventory *SteamGameServerInventory() { return SteamGameServerInternal_ModuleContext().SteamInventory(); }
+inline ISteamUGC *SteamGameServerUGC() { return SteamGameServerInternal_ModuleContext().SteamUGC(); }
+inline ISteamApps *SteamGameServerApps() { return SteamGameServerInternal_ModuleContext().SteamApps(); }
+#endif // !defined( STEAM_API_EXPORTS )
+
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamClient = NULL;
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamInventory = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamApps = NULL;
+}
+
+// This function must be declared inline in the header so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+ if ( !hSteamPipe )
+ return false;
+
+ m_pSteamClient = (ISteamClient*) SteamInternal_CreateInterface( STEAMCLIENT_INTERFACE_VERSION );
+ if ( !m_pSteamClient )
+ return false;
+
+ m_pSteamGameServer = m_pSteamClient->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = m_pSteamClient->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = m_pSteamClient->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = m_pSteamClient->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = m_pSteamClient->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamInventory = m_pSteamClient->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_pSteamUGC = m_pSteamClient->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamApps = m_pSteamClient->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ return true;
+}
+
+
+inline bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString )
+{
+ if ( !SteamInternal_GameServer_Init( unIP, usSteamPort, usGamePort, usQueryPort, eServerMode, pchVersionString ) )
+ return false;
+
+ return true;
+}
+
+
+inline void SteamGameServer_ReleaseCurrentThreadMemory()
+{
+ SteamAPI_ReleaseCurrentThreadMemory();
+}
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_141/steamclientpublic.h b/lsteamclient/steamworks_sdk_141/steamclientpublic.h
new file mode 100644
index 00000000..b3dc34be
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/steamclientpublic.h
@@ -0,0 +1,1239 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to login
+ k_EResultItemDeleted = 86, // The thing we're trying to access has been deleted
+ k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to throttle response to possible attacker
+ k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch
+ k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for two-factor didn't match
+ k_EResultAccountAssociatedToMultiplePartners = 90, // account has been associated with multiple partners
+ k_EResultNotModified = 91, // data not modified
+ k_EResultNoMobileDevice = 92, // the account does not have a mobile device associated with it
+ k_EResultTimeNotSynced = 93, // the time presented is out of range or tolerance
+ k_EResultSmsCodeFailed = 94, // SMS code failure (no match, none pending, etc.)
+ k_EResultAccountLimitExceeded = 95, // Too many accounts access this resource
+ k_EResultAccountActivityLimitExceeded = 96, // Too many changes to this account
+ k_EResultPhoneActivityLimitExceeded = 97, // Too many changes to this phone
+ k_EResultRefundToWallet = 98, // Cannot refund to payment method, must use wallet
+ k_EResultEmailSendFailure = 99, // Cannot send an email
+ k_EResultNotSettled = 100, // Can't perform operation till payment has settled
+ k_EResultNeedCaptcha = 101, // Needs to provide a valid captcha
+ k_EResultGSLTDenied = 102, // a game server login token owned by this token's owner has been banned
+ k_EResultGSOwnerDenied = 103, // game server owner is denied for other reason (account lock, community ban, vac ban, missing phone)
+ k_EResultInvalidItemType = 104, // the type of thing we were requested to act on is invalid
+ k_EResultIPBanned = 105, // the ip address has been banned from taking this action
+ k_EResultGSLTExpired = 106, // this token has expired from disuse; can be reset for use
+ k_EResultInsufficientFunds = 107, // user doesn't have enough wallet funds to complete the action
+ k_EResultTooManyPending = 108, // There are too many of this thing pending already
+ k_EResultNoSiteLicensesFound = 109, // No site licenses found
+ k_EResultWGNetworkSendExceeded = 110, // the WG couldn't send a response because we exceeded max network send size
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+ k_EVoiceResultReceiverOutOfDate = 8,
+ k_EVoiceResultReceiverDidNotAnswer = 9,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+enum EDenyReason
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+};
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+enum EBeginAuthSessionResult
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+};
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+enum EAuthSessionResponse
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+ k_EAuthSessionResponsePublisherIssuedBan = 9, // The user is banned for this game. The ban came via the web api and not VAC
+};
+
+// results from UserHasLicenseForApp
+enum EUserHasLicenseForAppResult
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+};
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x0000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x0001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x0002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x0004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x0008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x0010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x0020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x0040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_RetailLicense = 0x0080, // has a retail license for game, (CD-Key etc)
+ k_EAppOwnershipFlags_LicenseLocked = 0x0100, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x0200, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x0400, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x0800, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x1000, // Recurring license, user is charged periodically
+ k_EAppOwnershipFlags_LicenseCanceled = 0x2000, // Mark as canceled, but might be still active if recurring
+ k_EAppOwnershipFlags_AutoGrant = 0x4000, // Ownership is based on any kind of autogrant license
+ k_EAppOwnershipFlags_PendingGift = 0x8000, // user has pending gift to redeem
+ k_EAppOwnershipFlags_RentalNotActivated = 0x10000, // Rental hasn't been activated yet
+ k_EAppOwnershipFlags_Rental = 0x20000, // Is a rental
+ k_EAppOwnershipFlags_SiteLicense = 0x40000, // Is from a site license
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media_DEPRECATED = 0x010, // legacy - was used for game trailers, which are now just videos on the web
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+ k_EAppType_Hardware = 0x200, // a hardware device (Steam Machine, Steam Controller, Steam Link, etc.)
+ k_EAppType_Franchise = 0x400, // A hub for collections of multiple apps, eg films, series, games
+ k_EAppType_Video = 0x800, // A video component of either a Film or TVSeries (may be the feature, an episode, preview, making-of, etc)
+ k_EAppType_Plugin = 0x1000, // Plug-in types for other Apps
+ k_EAppType_Music = 0x2000, // Music files
+ k_EAppType_Series = 0x4000, // Container app for video series
+ k_EAppType_Comic = 0x8000, // Comic Book
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+ //k_EChatEntryTypeReserved1 = 12, // No longer used
+ //k_EChatEntryTypeReserved2 = 13, // No longer used
+ k_EChatEntryTypeLinkBlocked = 14, // a link was removed by the chat filter.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+ k_EChatRoomEnterResponseRatelimitExceeded = 15, // Join failed - to many join attempts in a very short period of time
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Broadcast upload result details
+//-----------------------------------------------------------------------------
+enum EBroadcastUploadResult
+{
+ k_EBroadcastUploadResultNone = 0, // broadcast state unknown
+ k_EBroadcastUploadResultOK = 1, // broadcast was good, no problems
+ k_EBroadcastUploadResultInitFailed = 2, // broadcast init failed
+ k_EBroadcastUploadResultFrameFailed = 3, // broadcast frame upload failed
+ k_EBroadcastUploadResultTimeout = 4, // broadcast upload timed out
+ k_EBroadcastUploadResultBandwidthExceeded = 5, // broadcast send too much data
+ k_EBroadcastUploadResultLowFPS = 6, // broadcast FPS too low
+ k_EBroadcastUploadResultMissingKeyFrames = 7, // broadcast sending not enough key frames
+ k_EBroadcastUploadResultNoConnection = 8, // broadcast client failed to connect to relay
+ k_EBroadcastUploadResultRelayFailed = 9, // relay dropped the upload
+ k_EBroadcastUploadResultSettingsChanged = 10, // the client changed broadcast settings
+ k_EBroadcastUploadResultMissingAudio = 11, // client failed to send audio data
+ k_EBroadcastUploadResultTooFarBehind = 12, // clients was too slow uploading
+ k_EBroadcastUploadResultTranscodeBehind = 13, // server failed to keep up with transcode
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: codes for well defined launch options
+//-----------------------------------------------------------------------------
+enum ELaunchOptionType
+{
+ k_ELaunchOptionType_None = 0, // unknown what launch option does
+ k_ELaunchOptionType_Default = 1, // runs the game, app, whatever in default mode
+ k_ELaunchOptionType_SafeMode = 2, // runs the game in safe mode
+ k_ELaunchOptionType_Multiplayer = 3, // runs the game in multiplayer mode
+ k_ELaunchOptionType_Config = 4, // runs config tool for this game
+ k_ELaunchOptionType_OpenVR = 5, // runs game in VR mode using OpenVR
+ k_ELaunchOptionType_Server = 6, // runs dedicated server for this game
+ k_ELaunchOptionType_Editor = 7, // runs game editor
+ k_ELaunchOptionType_Manual = 8, // shows game manual
+ k_ELaunchOptionType_Benchmark = 9, // runs game benchmark
+ k_ELaunchOptionType_Option1 = 10, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option2 = 11, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option3 = 12, // generic run option, uses description field for game name
+ k_ELaunchOptionType_OculusVR = 13, // runs game in VR mode using the Oculus SDK
+ k_ELaunchOptionType_OpenVROverlay = 14, // runs an OpenVR dashboard overlay
+ k_ELaunchOptionType_OSVR = 15, // runs game in VR mode using the OSVR SDK
+
+
+ k_ELaunchOptionType_Dialog = 1000, // show launch options dialog
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this launch option is any of the vr launching types
+//-----------------------------------------------------------------------------
+static inline bool BIsVRLaunchOptionType( const ELaunchOptionType eType )
+{
+ return eType == k_ELaunchOptionType_OpenVR
+ || eType == k_ELaunchOptionType_OpenVROverlay
+ || eType == k_ELaunchOptionType_OculusVR
+ || eType == k_ELaunchOptionType_OSVR;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: code points for VR HMD vendors and models
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN A DATABASE
+//-----------------------------------------------------------------------------
+enum EVRHMDType
+{
+ k_eEVRHMDType_None = -1, // unknown vendor and model
+
+ k_eEVRHMDType_Unknown = 0, // unknown vendor and model
+
+ k_eEVRHMDType_HTC_Dev = 1, // original HTC dev kits
+ k_eEVRHMDType_HTC_VivePre = 2, // htc vive pre
+ k_eEVRHMDType_HTC_Vive = 3, // htc vive consumer release
+
+ k_eEVRHMDType_HTC_Unknown = 20, // unknown htc hmd
+
+ k_eEVRHMDType_Oculus_DK1 = 21, // Oculus DK1
+ k_eEVRHMDType_Oculus_DK2 = 22, // Oculus DK2
+ k_eEVRHMDType_Oculus_Rift = 23, // Oculus rift
+
+ k_eEVRHMDType_Oculus_Unknown = 40, // // Oculus unknown HMD
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this is from an Oculus HMD
+//-----------------------------------------------------------------------------
+static inline bool BIsOculusHMD( EVRHMDType eType )
+{
+ return eType == k_eEVRHMDType_Oculus_DK1 || eType == k_eEVRHMDType_Oculus_DK2 || eType == k_eEVRHMDType_Oculus_Rift || eType == k_eEVRHMDType_Oculus_Unknown;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this is from an Vive HMD
+//-----------------------------------------------------------------------------
+static inline bool BIsViveHMD( EVRHMDType eType )
+{
+ return eType == k_eEVRHMDType_HTC_Dev || eType == k_eEVRHMDType_HTC_VivePre || eType == k_eEVRHMDType_HTC_Vive || eType == k_eEVRHMDType_HTC_Unknown;
+}
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM2_USERID_STRUCTS )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ V_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, V_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ if ( pchExePath )
+ CRC32_ProcessBuffer( &crc32, pchExePath, V_strlen( pchExePath ) );
+ if ( pchAppName )
+ CRC32_ProcessBuffer( &crc32, pchAppName, V_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, V_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_141/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_141/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_141/steamhttpenums.h b/lsteamclient/steamworks_sdk_141/steamhttpenums.h
new file mode 100644
index 00000000..b2f05d94
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/steamhttpenums.h
@@ -0,0 +1,98 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+ k_EHTTPMethodPATCH,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401, // You probably want 403 or something else. 401 implies you're sending a WWW-Authenticate header and the client can sent an Authorization header in response.
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+ k_EHTTPStatusCode4xxUnknown = 418, // 418 is reserved, so we'll use it to mean unknown
+ k_EHTTPStatusCode429TooManyRequests = 429,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+ k_EHTTPStatusCode5xxUnknown = 599,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_141/steamps3params.h b/lsteamclient/steamworks_sdk_141/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_141/steamtypes.h b/lsteamclient/steamworks_sdk_141/steamtypes.h
new file mode 100644
index 00000000..160e4d28
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/steamtypes.h
@@ -0,0 +1,181 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64) || defined(__aarch64__)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+#ifdef API_GEN
+# define CLANG_ATTR(ATTR) __attribute__((annotate( ATTR )))
+#else
+# define CLANG_ATTR(ATTR)
+#endif
+
+#define METHOD_DESC(DESC) CLANG_ATTR( "desc:" #DESC ";" )
+#define IGNOREATTR() CLANG_ATTR( "ignore" )
+#define OUT_STRUCT() CLANG_ATTR( "out_struct: ;" )
+#define OUT_STRING() CLANG_ATTR( "out_string: ;" )
+#define OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" )
+#define OUT_ARRAY_COUNT(COUNTER, DESC) CLANG_ATTR( "out_array_count:" #COUNTER ";desc:" #DESC )
+#define ARRAY_COUNT(COUNTER) CLANG_ATTR( "array_count:" #COUNTER ";" )
+#define ARRAY_COUNT_D(COUNTER, DESC) CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC )
+#define BUFFER_COUNT(COUNTER) CLANG_ATTR( "buffer_count:" #COUNTER ";" )
+#define OUT_BUFFER_COUNT(COUNTER) CLANG_ATTR( "out_buffer_count:" #COUNTER ";" )
+#define OUT_STRING_COUNT(COUNTER) CLANG_ATTR( "out_string_count:" #COUNTER ";" )
+#define DESC(DESC) CLANG_ATTR("desc:" #DESC ";")
+#define CALL_RESULT(RESULT_TYPE) CLANG_ATTR("callresult:" #RESULT_TYPE ";")
+#define CALL_BACK(RESULT_TYPE) CLANG_ATTR("callback:" #RESULT_TYPE ";")
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef uint64 JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+const JobID_t k_JobIDNil = 0xffffffffffffffffull;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+typedef uint32 BundleId_t;
+const BundleId_t k_uBundleIdInvalid = 0;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+// ID for a depot content manifest
+typedef uint64 ManifestId_t;
+const ManifestId_t k_uManifestIdInvalid = 0;
+
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_141/steamuniverse.h b/lsteamclient/steamworks_sdk_141/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_141/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/steamworks_sdk_142/isteamapplist.h b/lsteamclient/steamworks_sdk_142/isteamapplist.h
new file mode 100644
index 00000000..d0d7e7e7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamapplist.h
@@ -0,0 +1,63 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPLIST_H
+#define ISTEAMAPPLIST_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: This is a restricted interface that can only be used by previously approved apps,
+// contact your Steam Account Manager if you believe you need access to this API.
+// This interface lets you detect installed apps for the local Steam client, useful for debugging tools
+// to offer lists of apps to debug via Steam.
+//-----------------------------------------------------------------------------
+class ISteamAppList
+{
+public:
+ virtual uint32 GetNumInstalledApps() = 0;
+ virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0;
+
+ virtual int GetAppName( AppId_t nAppID, OUT_STRING() char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found
+ virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found
+
+ virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game
+};
+
+#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when a new app is installed
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+//---------------------------------------------------------------------------------
+// Purpose: Sent when an app is uninstalled
+//---------------------------------------------------------------------------------
+DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 );
+ CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs
+END_DEFINE_CALLBACK_1()
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPLIST_H
diff --git a/lsteamclient/steamworks_sdk_142/isteamapps.h b/lsteamclient/steamworks_sdk_142/isteamapps.h
new file mode 100644
index 00000000..89c0aaf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamapps.h
@@ -0,0 +1,176 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to app data in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPS_H
+#define ISTEAMAPPS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+const int k_cubAppProofOfPurchaseKeyMax = 240; // max supported length of a legacy cd key
+
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to app data
+//-----------------------------------------------------------------------------
+class ISteamApps
+{
+public:
+ virtual bool BIsSubscribed() = 0;
+ virtual bool BIsLowViolence() = 0;
+ virtual bool BIsCybercafe() = 0;
+ virtual bool BIsVACBanned() = 0;
+ virtual const char *GetCurrentGameLanguage() = 0;
+ virtual const char *GetAvailableGameLanguages() = 0;
+
+ // only use this member if you need to check ownership of another game related to yours, a demo for example
+ virtual bool BIsSubscribedApp( AppId_t appID ) = 0;
+
+ // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed
+ virtual bool BIsDlcInstalled( AppId_t appID ) = 0;
+
+ // returns the Unix time of the purchase of the app
+ virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0;
+
+ // Checks if the user is subscribed to the current app through a free weekend
+ // This function will return false for users who have a retail or other type of license
+ // Before using, please ask your Valve technical contact how to package and secure your free weekened
+ virtual bool BIsSubscribedFromFreeWeekend() = 0;
+
+ // Returns the number of DLC pieces for the running app
+ virtual int GetDLCCount() = 0;
+
+ // Returns metadata for DLC by index, of range [0, GetDLCCount()]
+ virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0;
+
+ // Install/Uninstall control for optional DLC
+ virtual void InstallDLC( AppId_t nAppID ) = 0;
+ virtual void UninstallDLC( AppId_t nAppID ) = 0;
+
+ // Request legacy cd-key for yourself or owned DLC. If you are interested in this
+ // data then make sure you provide us with a list of valid keys to be distributed
+ // to users when they purchase the game, before the game ships.
+ // You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+ // the key is available (which may be immediately).
+ virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
+
+ virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch
+ virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing
+ virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order
+
+ // returns current app install folder for AppID, returns folder name length
+ virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0;
+ virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned)
+
+ virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed
+
+ // Returns the associated launch param if the game is run via steam://run/<appid>//?param1=value1;param2=value2;param3=value3 etc.
+ // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string.
+ // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game,
+ // but it is advised that you not param names beginning with an underscore for your own features.
+ virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0;
+
+ // get download progress for optional DLC
+ virtual bool GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // return the buildid of this app, may change at any time based on backend updates to the game
+ virtual int GetAppBuildId() = 0;
+
+ // Request all proof of purchase keys for the calling appid and asociated DLC.
+ // A series of AppProofOfPurchaseKeyResponse_t callbacks will be sent with
+ // appropriate appid values, ending with a final callback where the m_nAppId
+ // member is k_uAppIdInvalid (zero).
+ virtual void RequestAllProofOfPurchaseKeys() = 0;
+
+ CALL_RESULT( FileDetailsResult_t )
+ virtual SteamAPICall_t GetFileDetails( const char* pszFileName ) = 0;
+};
+
+#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION008"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: posted after the user gains ownership of DLC & that DLC is installed
+//-----------------------------------------------------------------------------
+struct DlcInstalled_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 5 };
+ AppId_t m_nAppID; // AppID of the DLC
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: possible results when registering an activation code
+//-----------------------------------------------------------------------------
+enum ERegisterActivationCodeResult
+{
+ k_ERegisterActivationCodeResultOK = 0,
+ k_ERegisterActivationCodeResultFail = 1,
+ k_ERegisterActivationCodeResultAlreadyRegistered = 2,
+ k_ERegisterActivationCodeResultTimeout = 3,
+ k_ERegisterActivationCodeAlreadyOwned = 4,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RegisterActivationCode()
+//-----------------------------------------------------------------------------
+struct RegisterActivationCodeResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 8 };
+ ERegisterActivationCodeResult m_eResult;
+ uint32 m_unPackageRegistered; // package that was registered. Only set on success
+};
+
+
+//---------------------------------------------------------------------------------
+// Purpose: posted after the user gains executes a steam url with query parameters
+// such as steam://run/<appid>//?param1=value1;param2=value2;param3=value3; etc
+// while the game is already running. The new params can be queried
+// with GetLaunchQueryParam.
+//---------------------------------------------------------------------------------
+struct NewLaunchQueryParameters_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 14 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to RequestAppProofOfPurchaseKey/RequestAllProofOfPurchaseKeys
+// for supporting third-party CD keys, or other proof-of-purchase systems.
+//-----------------------------------------------------------------------------
+struct AppProofOfPurchaseKeyResponse_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 21 };
+ EResult m_eResult;
+ uint32 m_nAppID;
+ uint32 m_cchKeyLength;
+ char m_rgchKey[k_cubAppProofOfPurchaseKeyMax];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetFileDetails
+//-----------------------------------------------------------------------------
+struct FileDetailsResult_t
+{
+ enum { k_iCallback = k_iSteamAppsCallbacks + 23 };
+ EResult m_eResult;
+ uint64 m_ulFileSize; // original file size in bytes
+ uint8 m_FileSHA[20]; // original file SHA1 hash
+ uint32 m_unFlags; //
+};
+
+
+#pragma pack( pop )
+#endif // ISTEAMAPPS_H
diff --git a/lsteamclient/steamworks_sdk_142/isteamappticket.h b/lsteamclient/steamworks_sdk_142/isteamappticket.h
new file mode 100644
index 00000000..082e263b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamappticket.h
@@ -0,0 +1,29 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: a private, but well versioned, interface to get at critical bits
+// of a steam3 appticket - consumed by the simple drm wrapper to let it
+// ask about ownership with greater confidence.
+//
+//=============================================================================
+
+#ifndef ISTEAMAPPTICKET_H
+#define ISTEAMAPPTICKET_H
+
+#include "steamtypes.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: hand out a reasonable "future proof" view of an app ownership ticket
+// the raw (signed) buffer, and indices into that buffer where the appid and
+// steamid are located. the sizes of the appid and steamid are implicit in
+// (each version of) the interface - currently uin32 appid and uint64 steamid
+//-----------------------------------------------------------------------------
+class ISteamAppTicket
+{
+public:
+ virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0;
+};
+
+#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001"
+
+
+#endif // ISTEAMAPPTICKET_H
diff --git a/lsteamclient/steamworks_sdk_142/isteamclient.h b/lsteamclient/steamworks_sdk_142/isteamclient.h
new file mode 100644
index 00000000..333203f9
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamclient.h
@@ -0,0 +1,526 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Main interface for loading and accessing Steamworks API's from the
+// Steam client.
+// For most uses, this code is wrapped inside of SteamAPI_Init()
+//=============================================================================
+
+#ifndef ISTEAMCLIENT_H
+#define ISTEAMCLIENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+// Define compile time assert macros to let us validate the structure sizes.
+#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1];
+
+#ifndef REFERENCE
+#define REFERENCE(arg) ((void)arg)
+#endif
+
+#if ( defined(STEAM_API_EXPORTS) || defined(STEAM_API_NODLL) ) && !defined(API_GEN)
+#define STEAM_PRIVATE_API( ... ) __VA_ARGS__
+#elif defined(STEAM_API_EXPORTS) && defined(API_GEN)
+#define STEAM_PRIVATE_API( ... )
+#else
+#define STEAM_PRIVATE_API( ... ) protected: __VA_ARGS__ public:
+#endif
+
+#if defined(__linux__) || defined(__APPLE__)
+// The 32-bit version of gcc has the alignment requirement for uint64 and double set to
+// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned.
+// The 64-bit version of gcc has the alignment requirement for these types set to
+// 8 meaning that unless we use #pragma pack(4) our structures will get bigger.
+// The 64-bit structure packing has to match the 32-bit structure packing for each platform.
+#define VALVE_CALLBACK_PACK_SMALL
+#else
+#define VALVE_CALLBACK_PACK_LARGE
+#endif
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error ???
+#endif
+
+typedef struct ValvePackingSentinel_t
+{
+ uint32 m_u32;
+ uint64 m_u64;
+ uint16 m_u16;
+ double m_d;
+} ValvePackingSentinel_t;
+
+#pragma pack( pop )
+
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 )
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 )
+#else
+#error ???
+#endif
+
+
+// handle to a communication pipe to the Steam client
+typedef int32 HSteamPipe;
+// handle to single instance of a steam user
+typedef int32 HSteamUser;
+// function prototype
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+extern "C" typedef uint32 ( *SteamAPI_CheckCallbackRegistered_t )( int iCallbackNum );
+#if defined( __SNC__ )
+ #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor
+#endif
+
+// interface predec
+class ISteamUser;
+class ISteamGameServer;
+class ISteamFriends;
+class ISteamUtils;
+class ISteamMatchmaking;
+class ISteamContentServer;
+class ISteamMatchmakingServers;
+class ISteamUserStats;
+class ISteamApps;
+class ISteamNetworking;
+class ISteamRemoteStorage;
+class ISteamScreenshots;
+class ISteamMusic;
+class ISteamMusicRemote;
+class ISteamGameServerStats;
+class ISteamPS3OverlayRender;
+class ISteamHTTP;
+class ISteamController;
+class ISteamUGC;
+class ISteamAppList;
+class ISteamHTMLSurface;
+class ISteamInventory;
+class ISteamVideo;
+class ISteamParentalSettings;
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface to creating a new steam instance, or to
+// connect to an existing steam instance, whether it's in a
+// different process or is local.
+//
+// For most scenarios this is all handled automatically via SteamAPI_Init().
+// You'll only need these APIs if you have a more complex versioning scheme,
+// or if you want to implement a multiplexed gameserver where a single process
+// is handling multiple games at once with independent gameserver SteamIDs.
+//-----------------------------------------------------------------------------
+class ISteamClient
+{
+public:
+ // Creates a communication pipe to the Steam client.
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamPipe CreateSteamPipe() = 0;
+
+ // Releases a previously created communications pipe
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;
+
+ // connects to an existing global user, failing if none exists
+ // used by the game to coordinate with the steamUI
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;
+
+ // used by game servers, create a steam user that won't be shared with anyone else
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;
+
+ // removes an allocated user
+ // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
+ virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;
+
+ // retrieves the ISteamUser interface associated with the handle
+ virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // retrieves the ISteamGameServer interface associated with the handle
+ virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // set the local IP and Port to bind to
+ // this must be set before CreateLocalUser()
+ virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0;
+
+ // returns the ISteamFriends interface
+ virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUtils interface
+ virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmaking interface
+ virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamMatchmakingServers interface
+ virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the a generic interface
+ virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamUserStats interface
+ virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns the ISteamGameServerStats interface
+ virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns apps interface
+ virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // networking
+ virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // remote storage
+ virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // user screenshots
+ virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Deprecated. Applications should use SteamAPI_RunCallbacks() or SteamGameServer_RunCallbacks() instead.
+ STEAM_PRIVATE_API( virtual void RunFrame() = 0; )
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message.
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Trigger global shutdown for the DLL
+ virtual bool BShutdownIfAllPipesClosed() = 0;
+
+ // Expose HTTP interface
+ virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Deprecated - the ISteamUnifiedMessages interface is no longer intended for public consumption.
+ STEAM_PRIVATE_API( virtual void *DEPRECATED_GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0 ; )
+
+ // Exposes the ISteamController interface
+ virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Exposes the ISteamUGC interface
+ virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // returns app list interface, only available on specially registered apps
+ virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player
+ virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Music Player Remote
+ virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // html page display
+ virtual ISteamHTMLSurface *GetISteamHTMLSurface(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;
+
+ // Helper functions for internal Steam usage
+ STEAM_PRIVATE_API( virtual void DEPRECATED_Set_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; )
+ STEAM_PRIVATE_API( virtual void DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; )
+ STEAM_PRIVATE_API( virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0; )
+
+ // inventory
+ virtual ISteamInventory *GetISteamInventory( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Video
+ virtual ISteamVideo *GetISteamVideo( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+
+ // Parental controls
+ virtual ISteamParentalSettings *GetISteamParentalSettings( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
+};
+
+
+#define STEAMCLIENT_INTERFACE_VERSION "SteamClient017"
+
+//-----------------------------------------------------------------------------
+// Purpose: Base values for callback identifiers, each callback must
+// have a unique ID.
+//-----------------------------------------------------------------------------
+enum { k_iSteamUserCallbacks = 100 };
+enum { k_iSteamGameServerCallbacks = 200 };
+enum { k_iSteamFriendsCallbacks = 300 };
+enum { k_iSteamBillingCallbacks = 400 };
+enum { k_iSteamMatchmakingCallbacks = 500 };
+enum { k_iSteamContentServerCallbacks = 600 };
+enum { k_iSteamUtilsCallbacks = 700 };
+enum { k_iClientFriendsCallbacks = 800 };
+enum { k_iClientUserCallbacks = 900 };
+enum { k_iSteamAppsCallbacks = 1000 };
+enum { k_iSteamUserStatsCallbacks = 1100 };
+enum { k_iSteamNetworkingCallbacks = 1200 };
+enum { k_iClientRemoteStorageCallbacks = 1300 };
+enum { k_iClientDepotBuilderCallbacks = 1400 };
+enum { k_iSteamGameServerItemsCallbacks = 1500 };
+enum { k_iClientUtilsCallbacks = 1600 };
+enum { k_iSteamGameCoordinatorCallbacks = 1700 };
+enum { k_iSteamGameServerStatsCallbacks = 1800 };
+enum { k_iSteam2AsyncCallbacks = 1900 };
+enum { k_iSteamGameStatsCallbacks = 2000 };
+enum { k_iClientHTTPCallbacks = 2100 };
+enum { k_iClientScreenshotsCallbacks = 2200 };
+enum { k_iSteamScreenshotsCallbacks = 2300 };
+enum { k_iClientAudioCallbacks = 2400 };
+enum { k_iClientUnifiedMessagesCallbacks = 2500 };
+enum { k_iSteamStreamLauncherCallbacks = 2600 };
+enum { k_iClientControllerCallbacks = 2700 };
+enum { k_iSteamControllerCallbacks = 2800 };
+enum { k_iClientParentalSettingsCallbacks = 2900 };
+enum { k_iClientDeviceAuthCallbacks = 3000 };
+enum { k_iClientNetworkDeviceManagerCallbacks = 3100 };
+enum { k_iClientMusicCallbacks = 3200 };
+enum { k_iClientRemoteClientManagerCallbacks = 3300 };
+enum { k_iClientUGCCallbacks = 3400 };
+enum { k_iSteamStreamClientCallbacks = 3500 };
+enum { k_IClientProductBuilderCallbacks = 3600 };
+enum { k_iClientShortcutsCallbacks = 3700 };
+enum { k_iClientRemoteControlManagerCallbacks = 3800 };
+enum { k_iSteamAppListCallbacks = 3900 };
+enum { k_iSteamMusicCallbacks = 4000 };
+enum { k_iSteamMusicRemoteCallbacks = 4100 };
+enum { k_iClientVRCallbacks = 4200 };
+enum { k_iClientGameNotificationCallbacks = 4300 };
+enum { k_iSteamGameNotificationCallbacks = 4400 };
+enum { k_iSteamHTMLSurfaceCallbacks = 4500 };
+enum { k_iClientVideoCallbacks = 4600 };
+enum { k_iClientInventoryCallbacks = 4700 };
+enum { k_iClientBluetoothManagerCallbacks = 4800 };
+enum { k_iClientSharedConnectionCallbacks = 4900 };
+enum { k_ISteamParentalSettingsCallbacks = 5000 };
+enum { k_iClientShaderCallbacks = 5100 };
+
+//-----------------------------------------------------------------------------
+// The CALLBACK macros are for client side callback logging enabled with
+// log_callback <first callnbackID> <last callbackID>
+// Do not change any of these.
+//-----------------------------------------------------------------------------
+
+#ifdef STEAM_CALLBACK_INSPECTION_ENABLED
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) \
+struct callbackname { \
+ typedef callbackname SteamCallback_t; \
+ enum { k_iCallback = callbackid }; \
+ static callbackname *GetNullPointer() { return 0; } \
+ static const char *GetCallbackName() { return #callbackname; } \
+ static uint32 GetCallbackID() { return callbackname::k_iCallback; }
+
+#define CALLBACK_MEMBER( varidx, vartype, varname ) \
+ public: vartype varname ; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \
+ varSize = sizeof( vartype ); \
+ varCount = 1; \
+ *pszName = #varname; *pszType = #vartype; }
+
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \
+ public: vartype varname [ varcount ]; \
+ static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \
+ varSize = sizeof( vartype ); \
+ varCount = varcount; \
+ *pszName = #varname; *pszType = #vartype; }
+
+
+#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \
+ static uint32 GetNumMemberVariables() { return numvars; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \
+ switch ( index ) { default : return false;
+
+
+#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true;
+
+#define END_CALLBACK_INTERNAL_END() }; } };
+
+#define END_DEFINE_CALLBACK_0() \
+ static uint32 GetNumMemberVariables() { return 0; } \
+ static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \
+ };
+
+#else
+
+#define DEFINE_CALLBACK( callbackname, callbackid ) struct callbackname { typedef callbackname SteamCallback_t; enum { k_iCallback = callbackid };
+#define CALLBACK_MEMBER( varidx, vartype, varname ) public: vartype varname ;
+#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) public: vartype varname [ varcount ];
+#define END_CALLBACK_INTERNAL_BEGIN( numvars )
+#define END_CALLBACK_INTERNAL_SWITCH( varidx )
+#define END_CALLBACK_INTERNAL_END() };
+#define END_DEFINE_CALLBACK_0() };
+
+#endif
+
+#define END_DEFINE_CALLBACK_1() \
+ END_CALLBACK_INTERNAL_BEGIN( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_2() \
+ END_CALLBACK_INTERNAL_BEGIN( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_3() \
+ END_CALLBACK_INTERNAL_BEGIN( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_4() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_5() \
+ END_CALLBACK_INTERNAL_BEGIN( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_END()
+
+
+#define END_DEFINE_CALLBACK_6() \
+ END_CALLBACK_INTERNAL_BEGIN( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_7() \
+ END_CALLBACK_INTERNAL_BEGIN( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_8() \
+ END_CALLBACK_INTERNAL_BEGIN( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_9() \
+ END_CALLBACK_INTERNAL_BEGIN( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_10() \
+ END_CALLBACK_INTERNAL_BEGIN( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_11() \
+ END_CALLBACK_INTERNAL_BEGIN( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_12() \
+ END_CALLBACK_INTERNAL_BEGIN( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_13() \
+ END_CALLBACK_INTERNAL_BEGIN( 13 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#define END_DEFINE_CALLBACK_14() \
+ END_CALLBACK_INTERNAL_BEGIN( 14 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 0 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 1 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 2 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 3 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 4 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 5 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 6 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 7 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 8 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 9 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 10 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 11 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 12 ) \
+ END_CALLBACK_INTERNAL_SWITCH( 13 ) \
+ END_CALLBACK_INTERNAL_END()
+
+#endif // ISTEAMCLIENT_H
diff --git a/lsteamclient/steamworks_sdk_142/isteamcontroller.h b/lsteamclient/steamworks_sdk_142/isteamcontroller.h
new file mode 100644
index 00000000..3da10f94
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamcontroller.h
@@ -0,0 +1,461 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define STEAM_CONTROLLER_MAX_COUNT 16
+
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTIONS 16
+
+#define STEAM_CONTROLLER_MAX_DIGITAL_ACTIONS 128
+
+#define STEAM_CONTROLLER_MAX_ORIGINS 8
+
+// When sending an option to a specific controller handle, you can send to all controllers via this command
+#define STEAM_CONTROLLER_HANDLE_ALL_CONTROLLERS UINT64_MAX
+
+#define STEAM_CONTROLLER_MIN_ANALOG_ACTION_DATA -1.0f
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTION_DATA 1.0f
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+enum EControllerSource
+{
+ k_EControllerSource_None,
+ k_EControllerSource_LeftTrackpad,
+ k_EControllerSource_RightTrackpad,
+ k_EControllerSource_Joystick,
+ k_EControllerSource_ABXY,
+ k_EControllerSource_Switch,
+ k_EControllerSource_LeftTrigger,
+ k_EControllerSource_RightTrigger,
+ k_EControllerSource_Gyro,
+ k_EControllerSource_CenterTrackpad, // PS4
+ k_EControllerSource_RightJoystick, // Traditional Controllers
+ k_EControllerSource_DPad, // Traditional Controllers
+ k_EControllerSource_Key, // Keyboards with scan codes
+ k_EControllerSource_Mouse, // Traditional mouse
+ k_EControllerSource_Count
+};
+
+enum EControllerSourceMode
+{
+ k_EControllerSourceMode_None,
+ k_EControllerSourceMode_Dpad,
+ k_EControllerSourceMode_Buttons,
+ k_EControllerSourceMode_FourButtons,
+ k_EControllerSourceMode_AbsoluteMouse,
+ k_EControllerSourceMode_RelativeMouse,
+ k_EControllerSourceMode_JoystickMove,
+ k_EControllerSourceMode_JoystickMouse,
+ k_EControllerSourceMode_JoystickCamera,
+ k_EControllerSourceMode_ScrollWheel,
+ k_EControllerSourceMode_Trigger,
+ k_EControllerSourceMode_TouchMenu,
+ k_EControllerSourceMode_MouseJoystick,
+ k_EControllerSourceMode_MouseRegion,
+ k_EControllerSourceMode_RadialMenu,
+ k_EControllerSourceMode_SingleButton,
+ k_EControllerSourceMode_Switches
+};
+
+enum EControllerActionOrigin
+{
+ // Steam Controller
+ k_EControllerActionOrigin_None,
+ k_EControllerActionOrigin_A,
+ k_EControllerActionOrigin_B,
+ k_EControllerActionOrigin_X,
+ k_EControllerActionOrigin_Y,
+ k_EControllerActionOrigin_LeftBumper,
+ k_EControllerActionOrigin_RightBumper,
+ k_EControllerActionOrigin_LeftGrip,
+ k_EControllerActionOrigin_RightGrip,
+ k_EControllerActionOrigin_Start,
+ k_EControllerActionOrigin_Back,
+ k_EControllerActionOrigin_LeftPad_Touch,
+ k_EControllerActionOrigin_LeftPad_Swipe,
+ k_EControllerActionOrigin_LeftPad_Click,
+ k_EControllerActionOrigin_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_LeftPad_DPadWest,
+ k_EControllerActionOrigin_LeftPad_DPadEast,
+ k_EControllerActionOrigin_RightPad_Touch,
+ k_EControllerActionOrigin_RightPad_Swipe,
+ k_EControllerActionOrigin_RightPad_Click,
+ k_EControllerActionOrigin_RightPad_DPadNorth,
+ k_EControllerActionOrigin_RightPad_DPadSouth,
+ k_EControllerActionOrigin_RightPad_DPadWest,
+ k_EControllerActionOrigin_RightPad_DPadEast,
+ k_EControllerActionOrigin_LeftTrigger_Pull,
+ k_EControllerActionOrigin_LeftTrigger_Click,
+ k_EControllerActionOrigin_RightTrigger_Pull,
+ k_EControllerActionOrigin_RightTrigger_Click,
+ k_EControllerActionOrigin_LeftStick_Move,
+ k_EControllerActionOrigin_LeftStick_Click,
+ k_EControllerActionOrigin_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_LeftStick_DPadWest,
+ k_EControllerActionOrigin_LeftStick_DPadEast,
+ k_EControllerActionOrigin_Gyro_Move,
+ k_EControllerActionOrigin_Gyro_Pitch,
+ k_EControllerActionOrigin_Gyro_Yaw,
+ k_EControllerActionOrigin_Gyro_Roll,
+
+ // PS4 Dual Shock
+ k_EControllerActionOrigin_PS4_X,
+ k_EControllerActionOrigin_PS4_Circle,
+ k_EControllerActionOrigin_PS4_Triangle,
+ k_EControllerActionOrigin_PS4_Square,
+ k_EControllerActionOrigin_PS4_LeftBumper,
+ k_EControllerActionOrigin_PS4_RightBumper,
+ k_EControllerActionOrigin_PS4_Options, //Start
+ k_EControllerActionOrigin_PS4_Share, //Back
+ k_EControllerActionOrigin_PS4_LeftPad_Touch,
+ k_EControllerActionOrigin_PS4_LeftPad_Swipe,
+ k_EControllerActionOrigin_PS4_LeftPad_Click,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadWest,
+ k_EControllerActionOrigin_PS4_LeftPad_DPadEast,
+ k_EControllerActionOrigin_PS4_RightPad_Touch,
+ k_EControllerActionOrigin_PS4_RightPad_Swipe,
+ k_EControllerActionOrigin_PS4_RightPad_Click,
+ k_EControllerActionOrigin_PS4_RightPad_DPadNorth,
+ k_EControllerActionOrigin_PS4_RightPad_DPadSouth,
+ k_EControllerActionOrigin_PS4_RightPad_DPadWest,
+ k_EControllerActionOrigin_PS4_RightPad_DPadEast,
+ k_EControllerActionOrigin_PS4_CenterPad_Touch,
+ k_EControllerActionOrigin_PS4_CenterPad_Swipe,
+ k_EControllerActionOrigin_PS4_CenterPad_Click,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadNorth,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadSouth,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadWest,
+ k_EControllerActionOrigin_PS4_CenterPad_DPadEast,
+ k_EControllerActionOrigin_PS4_LeftTrigger_Pull,
+ k_EControllerActionOrigin_PS4_LeftTrigger_Click,
+ k_EControllerActionOrigin_PS4_RightTrigger_Pull,
+ k_EControllerActionOrigin_PS4_RightTrigger_Click,
+ k_EControllerActionOrigin_PS4_LeftStick_Move,
+ k_EControllerActionOrigin_PS4_LeftStick_Click,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadWest,
+ k_EControllerActionOrigin_PS4_LeftStick_DPadEast,
+ k_EControllerActionOrigin_PS4_RightStick_Move,
+ k_EControllerActionOrigin_PS4_RightStick_Click,
+ k_EControllerActionOrigin_PS4_RightStick_DPadNorth,
+ k_EControllerActionOrigin_PS4_RightStick_DPadSouth,
+ k_EControllerActionOrigin_PS4_RightStick_DPadWest,
+ k_EControllerActionOrigin_PS4_RightStick_DPadEast,
+ k_EControllerActionOrigin_PS4_DPad_North,
+ k_EControllerActionOrigin_PS4_DPad_South,
+ k_EControllerActionOrigin_PS4_DPad_West,
+ k_EControllerActionOrigin_PS4_DPad_East,
+ k_EControllerActionOrigin_PS4_Gyro_Move,
+ k_EControllerActionOrigin_PS4_Gyro_Pitch,
+ k_EControllerActionOrigin_PS4_Gyro_Yaw,
+ k_EControllerActionOrigin_PS4_Gyro_Roll,
+
+ // XBox One
+ k_EControllerActionOrigin_XBoxOne_A,
+ k_EControllerActionOrigin_XBoxOne_B,
+ k_EControllerActionOrigin_XBoxOne_X,
+ k_EControllerActionOrigin_XBoxOne_Y,
+ k_EControllerActionOrigin_XBoxOne_LeftBumper,
+ k_EControllerActionOrigin_XBoxOne_RightBumper,
+ k_EControllerActionOrigin_XBoxOne_Menu, //Start
+ k_EControllerActionOrigin_XBoxOne_View, //Back
+ k_EControllerActionOrigin_XBoxOne_LeftTrigger_Pull,
+ k_EControllerActionOrigin_XBoxOne_LeftTrigger_Click,
+ k_EControllerActionOrigin_XBoxOne_RightTrigger_Pull,
+ k_EControllerActionOrigin_XBoxOne_RightTrigger_Click,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_Move,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_Click,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadWest,
+ k_EControllerActionOrigin_XBoxOne_LeftStick_DPadEast,
+ k_EControllerActionOrigin_XBoxOne_RightStick_Move,
+ k_EControllerActionOrigin_XBoxOne_RightStick_Click,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadNorth,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadSouth,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadWest,
+ k_EControllerActionOrigin_XBoxOne_RightStick_DPadEast,
+ k_EControllerActionOrigin_XBoxOne_DPad_North,
+ k_EControllerActionOrigin_XBoxOne_DPad_South,
+ k_EControllerActionOrigin_XBoxOne_DPad_West,
+ k_EControllerActionOrigin_XBoxOne_DPad_East,
+
+ // XBox 360
+ k_EControllerActionOrigin_XBox360_A,
+ k_EControllerActionOrigin_XBox360_B,
+ k_EControllerActionOrigin_XBox360_X,
+ k_EControllerActionOrigin_XBox360_Y,
+ k_EControllerActionOrigin_XBox360_LeftBumper,
+ k_EControllerActionOrigin_XBox360_RightBumper,
+ k_EControllerActionOrigin_XBox360_Start, //Start
+ k_EControllerActionOrigin_XBox360_Back, //Back
+ k_EControllerActionOrigin_XBox360_LeftTrigger_Pull,
+ k_EControllerActionOrigin_XBox360_LeftTrigger_Click,
+ k_EControllerActionOrigin_XBox360_RightTrigger_Pull,
+ k_EControllerActionOrigin_XBox360_RightTrigger_Click,
+ k_EControllerActionOrigin_XBox360_LeftStick_Move,
+ k_EControllerActionOrigin_XBox360_LeftStick_Click,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadWest,
+ k_EControllerActionOrigin_XBox360_LeftStick_DPadEast,
+ k_EControllerActionOrigin_XBox360_RightStick_Move,
+ k_EControllerActionOrigin_XBox360_RightStick_Click,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadNorth,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadSouth,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadWest,
+ k_EControllerActionOrigin_XBox360_RightStick_DPadEast,
+ k_EControllerActionOrigin_XBox360_DPad_North,
+ k_EControllerActionOrigin_XBox360_DPad_South,
+ k_EControllerActionOrigin_XBox360_DPad_West,
+ k_EControllerActionOrigin_XBox360_DPad_East,
+
+ // SteamController V2
+ k_EControllerActionOrigin_SteamV2_A,
+ k_EControllerActionOrigin_SteamV2_B,
+ k_EControllerActionOrigin_SteamV2_X,
+ k_EControllerActionOrigin_SteamV2_Y,
+ k_EControllerActionOrigin_SteamV2_LeftBumper,
+ k_EControllerActionOrigin_SteamV2_RightBumper,
+ k_EControllerActionOrigin_SteamV2_LeftGrip,
+ k_EControllerActionOrigin_SteamV2_RightGrip,
+ k_EControllerActionOrigin_SteamV2_LeftGrip_Upper,
+ k_EControllerActionOrigin_SteamV2_RightGrip_Upper,
+ k_EControllerActionOrigin_SteamV2_LeftBumper_Pressure,
+ k_EControllerActionOrigin_SteamV2_RightBumper_Pressure,
+ k_EControllerActionOrigin_SteamV2_LeftGrip_Pressure,
+ k_EControllerActionOrigin_SteamV2_RightGrip_Pressure,
+ k_EControllerActionOrigin_SteamV2_LeftGrip_Upper_Pressure,
+ k_EControllerActionOrigin_SteamV2_RightGrip_Upper_Pressure,
+ k_EControllerActionOrigin_SteamV2_Start,
+ k_EControllerActionOrigin_SteamV2_Back,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Touch,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Swipe,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Click,
+ k_EControllerActionOrigin_SteamV2_LeftPad_Pressure,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadWest,
+ k_EControllerActionOrigin_SteamV2_LeftPad_DPadEast,
+ k_EControllerActionOrigin_SteamV2_RightPad_Touch,
+ k_EControllerActionOrigin_SteamV2_RightPad_Swipe,
+ k_EControllerActionOrigin_SteamV2_RightPad_Click,
+ k_EControllerActionOrigin_SteamV2_RightPad_Pressure,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadNorth,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadSouth,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadWest,
+ k_EControllerActionOrigin_SteamV2_RightPad_DPadEast,
+ k_EControllerActionOrigin_SteamV2_LeftTrigger_Pull,
+ k_EControllerActionOrigin_SteamV2_LeftTrigger_Click,
+ k_EControllerActionOrigin_SteamV2_RightTrigger_Pull,
+ k_EControllerActionOrigin_SteamV2_RightTrigger_Click,
+ k_EControllerActionOrigin_SteamV2_LeftStick_Move,
+ k_EControllerActionOrigin_SteamV2_LeftStick_Click,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadWest,
+ k_EControllerActionOrigin_SteamV2_LeftStick_DPadEast,
+ k_EControllerActionOrigin_SteamV2_Gyro_Move,
+ k_EControllerActionOrigin_SteamV2_Gyro_Pitch,
+ k_EControllerActionOrigin_SteamV2_Gyro_Yaw,
+ k_EControllerActionOrigin_SteamV2_Gyro_Roll,
+
+ k_EControllerActionOrigin_Count
+};
+
+enum ESteamControllerLEDFlag
+{
+ k_ESteamControllerLEDFlag_SetColor,
+ k_ESteamControllerLEDFlag_RestoreUserDefault
+};
+
+enum ESteamInputType
+{
+ k_ESteamInputType_Unknown,
+ k_ESteamInputType_SteamController,
+ k_ESteamInputType_XBox360Controller,
+ k_ESteamInputType_XBoxOneController,
+ k_ESteamInputType_GenericXInput,
+ k_ESteamInputType_PS4Controller,
+};
+
+// ControllerHandle_t is used to refer to a specific controller.
+// This handle will consistently identify a controller, even if it is disconnected and re-connected
+typedef uint64 ControllerHandle_t;
+
+
+// These handles are used to refer to a specific in-game action or action set
+// All action handles should be queried during initialization for performance reasons
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+
+#pragma pack( push, 1 )
+
+struct ControllerAnalogActionData_t
+{
+ // Type of data coming from this action, this will match what got specified in the action set
+ EControllerSourceMode eMode;
+
+ // The current state of this action; will be delta updates for mouse actions
+ float x, y;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+struct ControllerDigitalActionData_t
+{
+ // The current state of this action; will be true if currently pressed
+ bool bState;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+struct ControllerMotionData_t
+{
+ // Sensor-fused absolute rotation; will drift in heading
+ float rotQuatX;
+ float rotQuatY;
+ float rotQuatZ;
+ float rotQuatW;
+
+ // Positional acceleration
+ float posAccelX;
+ float posAccelY;
+ float posAccelZ;
+
+ // Angular velocity
+ float rotVelX;
+ float rotVelY;
+ float rotVelZ;
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ // Init and Shutdown must be called when starting/ending use of this interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Synchronize API state with the latest Steam Controller inputs available. This
+ // is performed automatically by SteamAPI_RunCallbacks, but for the absolute lowest
+ // possible latency, you call this directly before reading controller state.
+ virtual void RunFrame() = 0;
+
+ // Enumerate currently connected controllers
+ // handlesOut should point to a STEAM_CONTROLLER_MAX_COUNT sized array of ControllerHandle_t handles
+ // Returns the number of handles written to handlesOut
+ virtual int GetConnectedControllers( ControllerHandle_t *handlesOut ) = 0;
+
+ // Invokes the Steam overlay and brings up the binding screen
+ // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
+ virtual bool ShowBindingPanel( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTION SETS
+ // Lookup the handle for an Action Set. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerActionSetHandle_t GetActionSetHandle( const char *pszActionSetName ) = 0;
+
+ // Reconfigure the controller to use the specified action set (ie 'Menu', 'Walk' or 'Drive')
+ // This is cheap, and can be safely called repeatedly. It's often easier to repeatedly call it in
+ // your state loops, instead of trying to place it in all of your state transitions.
+ virtual void ActivateActionSet( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle ) = 0;
+ virtual ControllerActionSetHandle_t GetCurrentActionSet( ControllerHandle_t controllerHandle ) = 0;
+
+ virtual void ActivateActionSetLayer( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetLayerHandle ) = 0;
+ virtual void DeactivateActionSetLayer( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetLayerHandle ) = 0;
+ virtual void DeactivateAllActionSetLayers( ControllerHandle_t controllerHandle ) = 0;
+ virtual int GetActiveActionSetLayers( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t *handlesOut ) = 0;
+
+
+ // ACTIONS
+ // Lookup the handle for a digital action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerDigitalActionHandle_t GetDigitalActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of the supplied digital game action
+ virtual ControllerDigitalActionData_t GetDigitalActionData( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle ) = 0;
+
+ // Get the origin(s) for a digital action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ // Lookup the handle for an analog action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerAnalogActionHandle_t GetAnalogActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of these supplied analog game action
+ virtual ControllerAnalogActionData_t GetAnalogActionData( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle ) = 0;
+
+ // Get the origin(s) for an analog action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ virtual void StopAnalogActionMomentum( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction ) = 0;
+
+ // Trigger a haptic pulse on a controller
+ virtual void TriggerHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+
+ // Trigger a pulse with a duty cycle of usDurationMicroSec / usOffMicroSec, unRepeat times.
+ // nFlags is currently unused and reserved for future use.
+ virtual void TriggerRepeatedHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags ) = 0;
+
+ // Tigger a vibration event on supported controllers.
+ virtual void TriggerVibration( ControllerHandle_t controllerHandle, unsigned short usLeftSpeed, unsigned short usRightSpeed ) = 0;
+
+ // Set the controller LED color on supported controllers.
+ virtual void SetLEDColor( ControllerHandle_t controllerHandle, uint8 nColorR, uint8 nColorG, uint8 nColorB, unsigned int nFlags ) = 0;
+
+ // Returns the associated gamepad index for the specified controller, if emulating a gamepad
+ virtual int GetGamepadIndexForController( ControllerHandle_t ulControllerHandle ) = 0;
+
+ // Returns the associated controller handle for the specified emulated gamepad
+ virtual ControllerHandle_t GetControllerForGamepadIndex( int nIndex ) = 0;
+
+ // Returns raw motion data from the specified controller
+ virtual ControllerMotionData_t GetMotionData( ControllerHandle_t controllerHandle ) = 0;
+
+ // Attempt to display origins of given action in the controller HUD, for the currently active action set
+ // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
+ virtual bool ShowDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition ) = 0;
+ virtual bool ShowAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition ) = 0;
+
+ // Returns a localized string (from Steam's language setting) for the specified origin
+ virtual const char *GetStringForActionOrigin( EControllerActionOrigin eOrigin ) = 0;
+
+ // Get a local path to art for on-screen glyph for a particular origin
+ virtual const char *GetGlyphForActionOrigin( EControllerActionOrigin eOrigin ) = 0;
+
+ // Returns the input type for a particular handle
+ virtual ESteamInputType GetInputTypeForHandle( ControllerHandle_t controllerHandle ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "SteamController006"
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_142/isteamfriends.h b/lsteamclient/steamworks_sdk_142/isteamfriends.h
new file mode 100644
index 00000000..b99478d1
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamfriends.h
@@ -0,0 +1,639 @@
+//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. =====
+//
+// Purpose: interface to both friends list data and general information about users
+//
+//=============================================================================
+
+#ifndef ISTEAMFRIENDS_H
+#define ISTEAMFRIENDS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamclientpublic.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: set of relationships to other users
+//-----------------------------------------------------------------------------
+enum EFriendRelationship
+{
+ k_EFriendRelationshipNone = 0,
+ k_EFriendRelationshipBlocked = 1, // this doesn't get stored; the user has just done an Ignore on an friendship invite
+ k_EFriendRelationshipRequestRecipient = 2,
+ k_EFriendRelationshipFriend = 3,
+ k_EFriendRelationshipRequestInitiator = 4,
+ k_EFriendRelationshipIgnored = 5, // this is stored; the user has explicit blocked this other user from comments/chat/etc
+ k_EFriendRelationshipIgnoredFriend = 6,
+ k_EFriendRelationshipSuggested_DEPRECATED = 7, // was used by the original implementation of the facebook linking feature, but now unused.
+
+ // keep this updated
+ k_EFriendRelationshipMax = 8,
+};
+
+// maximum length of friend group name (not including terminating nul!)
+const int k_cchMaxFriendsGroupName = 64;
+
+// maximum number of groups a single user is allowed
+const int k_cFriendsGroupLimit = 100;
+
+// friends group identifier type
+typedef int16 FriendsGroupID_t;
+
+// invalid friends group identifier constant
+const FriendsGroupID_t k_FriendsGroupID_Invalid = -1;
+
+const int k_cEnumerateFollowersMax = 50;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: list of states a friend can be in
+//-----------------------------------------------------------------------------
+enum EPersonaState
+{
+ k_EPersonaStateOffline = 0, // friend is not currently logged on
+ k_EPersonaStateOnline = 1, // friend is logged on
+ k_EPersonaStateBusy = 2, // user is on, but busy
+ k_EPersonaStateAway = 3, // auto-away feature
+ k_EPersonaStateSnooze = 4, // auto-away for a long time
+ k_EPersonaStateLookingToTrade = 5, // Online, trading
+ k_EPersonaStateLookingToPlay = 6, // Online, wanting to play
+ k_EPersonaStateMax,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users
+//-----------------------------------------------------------------------------
+enum EFriendFlags
+{
+ k_EFriendFlagNone = 0x00,
+ k_EFriendFlagBlocked = 0x01,
+ k_EFriendFlagFriendshipRequested = 0x02,
+ k_EFriendFlagImmediate = 0x04, // "regular" friend
+ k_EFriendFlagClanMember = 0x08,
+ k_EFriendFlagOnGameServer = 0x10,
+ // k_EFriendFlagHasPlayedWith = 0x20, // not currently used
+ // k_EFriendFlagFriendOfFriend = 0x40, // not currently used
+ k_EFriendFlagRequestingFriendship = 0x80,
+ k_EFriendFlagRequestingInfo = 0x100,
+ k_EFriendFlagIgnored = 0x200,
+ k_EFriendFlagIgnoredFriend = 0x400,
+ // k_EFriendFlagSuggested = 0x800, // not used
+ k_EFriendFlagChatMember = 0x1000,
+ k_EFriendFlagAll = 0xFFFF,
+};
+
+
+// friend game played information
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct FriendGameInfo_t
+{
+ CGameID m_gameID;
+ uint32 m_unGameIP;
+ uint16 m_usGamePort;
+ uint16 m_usQueryPort;
+ CSteamID m_steamIDLobby;
+};
+#pragma pack( pop )
+
+// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16.
+// The UTF-8 version has to be very generous to accomodate characters that get large when encoded
+// in UTF-8.
+enum
+{
+ k_cchPersonaNameMax = 128,
+ k_cwchPersonaNameMax = 32,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: user restriction flags
+//-----------------------------------------------------------------------------
+enum EUserRestriction
+{
+ k_nUserRestrictionNone = 0, // no known chat/content restriction
+ k_nUserRestrictionUnknown = 1, // we don't know yet (user offline)
+ k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat
+ k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat
+ k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat
+ k_nUserRestrictionRating = 16, // user is too young according to rating in current region
+ k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile)
+ k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
+struct FriendSessionStateInfo_t
+{
+ uint32 m_uiOnlineSessionInstances;
+ uint8 m_uiPublishedToFriendsSessionInstance;
+};
+
+
+
+// size limit on chat room or member metadata
+const uint32 k_cubChatMetadataMax = 8192;
+
+// size limits on Rich Presence data
+enum { k_cchMaxRichPresenceKeys = 20 };
+enum { k_cchMaxRichPresenceKeyLength = 64 };
+enum { k_cchMaxRichPresenceValueLength = 256 };
+
+// These values are passed as parameters to the store
+enum EOverlayToStoreFlag
+{
+ k_EOverlayToStoreFlag_None = 0,
+ k_EOverlayToStoreFlag_AddToCart = 1,
+ k_EOverlayToStoreFlag_AddToCartAndShow = 2,
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to accessing information about individual users,
+// that can be a friend, in a group, on a game server or in a lobby with the local user
+//-----------------------------------------------------------------------------
+class ISteamFriends
+{
+public:
+ // returns the local players name - guaranteed to not be NULL.
+ // this is the same name as on the users community profile page
+ // this is stored in UTF-8 format
+ // like all the other interface functions that return a char *, it's important that this pointer is not saved
+ // off; it will eventually be free'd or re-allocated
+ virtual const char *GetPersonaName() = 0;
+
+ // Sets the player name, stores it on the server and publishes the changes to all friends who are online.
+ // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success.
+ //
+ // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t.
+ //
+ // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted
+ // to change the name back, in addition to the SetPersonaNameResponse_t callback.
+ CALL_RESULT( SetPersonaNameResponse_t )
+ virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0;
+
+ // gets the status of the current user
+ virtual EPersonaState GetPersonaState() = 0;
+
+ // friend iteration
+ // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
+ // then GetFriendByIndex() can then be used to return the id's of each of those users
+ virtual int GetFriendCount( int iFriendFlags ) = 0;
+
+ // returns the steamID of a user
+ // iFriend is a index of range [0, GetFriendCount())
+ // iFriendsFlags must be the same value as used in GetFriendCount()
+ // the returned CSteamID can then be used by all the functions below to access details about the user
+ virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
+
+ // returns a relationship to a user
+ virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
+
+ // returns the current status of the specified user
+ // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
+ virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
+
+ // returns the name another user - guaranteed to not be NULL.
+ // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
+ // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
+ //
+ virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
+
+ // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details
+ virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, OUT_STRUCT() FriendGameInfo_t *pFriendGameInfo ) = 0;
+ // accesses old friends names - returns an empty string when their are no more items in the history
+ virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
+ // friends steam level
+ virtual int GetFriendSteamLevel( CSteamID steamIDFriend ) = 0;
+
+ // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player.
+ virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0;
+
+ // friend grouping (tag) apis
+ // returns the number of friends groups
+ virtual int GetFriendsGroupCount() = 0;
+ // returns the friends group ID for the given index (invalid indices return k_FriendsGroupID_Invalid)
+ virtual FriendsGroupID_t GetFriendsGroupIDByIndex( int iFG ) = 0;
+ // returns the name for the given friends group (NULL in the case of invalid friends group IDs)
+ virtual const char *GetFriendsGroupName( FriendsGroupID_t friendsGroupID ) = 0;
+ // returns the number of members in a given friends group
+ virtual int GetFriendsGroupMembersCount( FriendsGroupID_t friendsGroupID ) = 0;
+ // gets up to nMembersCount members of the given friends group, if fewer exist than requested those positions' SteamIDs will be invalid
+ virtual void GetFriendsGroupMembersList( FriendsGroupID_t friendsGroupID, OUT_ARRAY_CALL(nMembersCount, GetFriendsGroupMembersCount, friendsGroupID ) CSteamID *pOutSteamIDMembers, int nMembersCount ) = 0;
+
+ // returns true if the specified user meets any of the criteria specified in iFriendFlags
+ // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
+ virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
+
+ // clan (group) iteration and access functions
+ virtual int GetClanCount() = 0;
+ virtual CSteamID GetClanByIndex( int iClan ) = 0;
+ virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
+ virtual const char *GetClanTag( CSteamID steamIDClan ) = 0;
+ // returns the most recent information we have about what's happening in a clan
+ virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0;
+ // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest
+ virtual SteamAPICall_t DownloadClanActivityCounts( ARRAY_COUNT(cClansToRequest) CSteamID *psteamIDClans, int cClansToRequest ) = 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
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ // steamIDSource can be the steamID of a group, game server, lobby or chat room
+ virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
+ virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
+
+ // returns true if the local user can see that steamIDUser is a member or in steamIDSource
+ virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
+
+ // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
+ virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
+
+ // activates the game overlay, with an optional dialog to open
+ // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements"
+ virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
+
+ // activates game overlay to a specific place
+ // 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
+ // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API
+ // "stats" - opens the overlay web browser to the specified user's stats
+ // "achievements" - opens the overlay web browser to the specified user's achievements
+ // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend
+ // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend
+ // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite
+ // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite
+ virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0;
+
+ // activates game overlay web browser directly to the specified URL
+ // full address with protocol type is required, e.g. http://www.steamgames.com/
+ virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0;
+
+ // activates game overlay to store page for app
+ virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0;
+
+ // 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.
+ virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0;
+
+ // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
+ // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again
+ virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0;
+
+ // requests information about a user - persona name & avatar
+ // if bRequireNameOnly is set, then the avatar of a user isn't downloaded
+ // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
+ // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved
+ // if returns false, it means that we already have all the details about that user, and functions can be called immediately
+ virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0;
+
+ // requests information about a clan officer list
+ // when complete, data is returned in ClanOfficerListResponse_t call result
+ // this makes available the calls below
+ // you can only ask about clans that a user is a member of
+ // note that this won't download avatars automatically; if you get an officer,
+ // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar
+ CALL_RESULT( ClanOfficerListResponse_t )
+ virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0;
+
+ // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed
+
+ // returns the steamID of the clan owner
+ virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0;
+ // returns the number of officers in a clan (including the owner)
+ virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0;
+ // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount)
+ virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0;
+ // if current user is chat restricted, he can't send or receive any text/voice chat messages.
+ // the user can't see custom avatars. But the user can be online and send/recv game invites.
+ // a chat restricted user can't add friends or join any groups.
+ virtual uint32 GetUserRestrictions() = 0;
+
+ // Rich Presence data is automatically shared between friends who are in the same game
+ // Each user has a set of Key/Value pairs
+ // Note the following limits: k_cchMaxRichPresenceKeys, k_cchMaxRichPresenceKeyLength, k_cchMaxRichPresenceValueLength
+ // There are two magic keys:
+ // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list
+ // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game
+ // GetFriendRichPresence() returns an empty string "" if no value is set
+ // SetRichPresence() to a NULL or an empty string deletes the key
+ // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount()
+ // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging)
+ virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0;
+ virtual void ClearRichPresence() = 0;
+ virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0;
+ virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0;
+ virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0;
+ // Requests rich presence for a specific user.
+ virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0;
+
+ // rich invite support
+ // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game
+ // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string
+ // invites can only be sent to friends
+ virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0;
+
+ // recently-played-with friends iteration
+ // this iterates the entire list of users recently played with, across games
+ // GetFriendCoplayTime() returns as a unix time
+ virtual int GetCoplayFriendCount() = 0;
+ virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0;
+ virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0;
+ virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0;
+
+ // chat interface for games
+ // this allows in-game access to group (clan) chats from in the game
+ // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay
+ // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat
+ CALL_RESULT( JoinClanChatRoomCompletionResult_t )
+ virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0;
+ virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0;
+ virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0;
+ virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0;
+ virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, OUT_STRUCT() CSteamID *psteamidChatter ) = 0;
+ virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0;
+
+ // interact with the Steam (game overlay / desktop)
+ virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+ virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0;
+
+ // peer-to-peer chat interception
+ // this is so you can show P2P chats inline in the game
+ virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0;
+ virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
+ virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // following apis
+ CALL_RESULT( FriendsGetFollowerCount_t )
+ virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
+ CALL_RESULT( FriendsIsFollowing_t )
+ virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
+ CALL_RESULT( FriendsEnumerateFollowingList_t )
+ virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
+
+ virtual bool IsClanPublic( CSteamID steamIDClan ) = 0;
+ virtual bool IsClanOfficialGameGroup( CSteamID steamIDClan ) = 0;
+};
+
+#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends015"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a friends' status changes
+//-----------------------------------------------------------------------------
+struct PersonaStateChange_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 4 };
+
+ uint64 m_ulSteamID; // steamID of the friend who changed
+ int m_nChangeFlags; // what's changed
+};
+
+
+// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user
+// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend
+enum EPersonaChange
+{
+ k_EPersonaChangeName = 0x0001,
+ k_EPersonaChangeStatus = 0x0002,
+ k_EPersonaChangeComeOnline = 0x0004,
+ k_EPersonaChangeGoneOffline = 0x0008,
+ k_EPersonaChangeGamePlayed = 0x0010,
+ k_EPersonaChangeGameServer = 0x0020,
+ k_EPersonaChangeAvatar = 0x0040,
+ k_EPersonaChangeJoinedSource= 0x0080,
+ k_EPersonaChangeLeftSource = 0x0100,
+ k_EPersonaChangeRelationshipChanged = 0x0200,
+ k_EPersonaChangeNameFirstSet = 0x0400,
+ k_EPersonaChangeFacebookInfo = 0x0800,
+ k_EPersonaChangeNickname = 0x1000,
+ k_EPersonaChangeSteamLevel = 0x2000,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted when game overlay activates or deactivates
+// the game can use this to be pause or resume single player games
+//-----------------------------------------------------------------------------
+struct GameOverlayActivated_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 31 };
+ uint8 m_bActive; // true if it's just been activated, false otherwise
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a different game server from their friends list
+// game client should attempt to connect to specified server when this is received
+//-----------------------------------------------------------------------------
+struct GameServerChangeRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 32 };
+ char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com")
+ char m_rgchPassword[64]; // server password, if any
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a lobby from their friends list
+// game client should attempt to connect to specified lobby when this is received
+//-----------------------------------------------------------------------------
+struct GameLobbyJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 33 };
+ CSteamID m_steamIDLobby;
+
+ // The friend they did the join via (will be invalid if not directly via a friend)
+ //
+ // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but
+ // the account type will be console user so you can tell at least that this was from a PSN friend
+ // rather than a Steam friend.
+ CSteamID m_steamIDFriend;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call
+// if the image wasn't already available
+//-----------------------------------------------------------------------------
+struct AvatarImageLoaded_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 34 };
+ CSteamID m_steamID; // steamid the avatar has been loaded for
+ int m_iImage; // the image index of the now loaded image
+ int m_iWide; // width of the loaded image
+ int m_iTall; // height of the loaded image
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: marks the return of a request officer list call
+//-----------------------------------------------------------------------------
+struct ClanOfficerListResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 35 };
+ CSteamID m_steamIDClan;
+ int m_cOfficers;
+ uint8 m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating updated data about friends rich presence information
+//-----------------------------------------------------------------------------
+struct FriendRichPresenceUpdate_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 36 };
+ CSteamID m_steamIDFriend; // friend who's rich presence has changed
+ AppId_t m_nAppID; // the appID of the game (should always be the current game)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the user tries to join a game from their friends list
+// rich presence will have been set with the "connect" key which is set here
+//-----------------------------------------------------------------------------
+struct GameRichPresenceJoinRequested_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 37 };
+ CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend)
+ char m_rgchConnect[k_cchMaxRichPresenceValueLength];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received for a clan chat the game has joined
+//-----------------------------------------------------------------------------
+struct GameConnectedClanChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 38 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has joined a clan chat
+//-----------------------------------------------------------------------------
+struct GameConnectedChatJoin_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 39 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a user has left the chat we're in
+//-----------------------------------------------------------------------------
+struct GameConnectedChatLeave_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 40 };
+ CSteamID m_steamIDClanChat;
+ CSteamID m_steamIDUser;
+ bool m_bKicked; // true if admin kicked
+ bool m_bDropped; // true if Steam connection dropped
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a DownloadClanActivityCounts() call has finished
+//-----------------------------------------------------------------------------
+struct DownloadClanActivityCountsResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 41 };
+ bool m_bSuccess;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a JoinClanChatRoom() call has finished
+//-----------------------------------------------------------------------------
+struct JoinClanChatRoomCompletionResult_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 42 };
+ CSteamID m_steamIDClanChat;
+ EChatRoomEnterResponse m_eChatRoomEnterResponse;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: a chat message has been received from a user
+//-----------------------------------------------------------------------------
+struct GameConnectedFriendChatMsg_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 43 };
+ CSteamID m_steamIDUser;
+ int m_iMessageID;
+};
+
+
+struct FriendsGetFollowerCount_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 44 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ int m_nCount;
+};
+
+
+struct FriendsIsFollowing_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 45 };
+ EResult m_eResult;
+ CSteamID m_steamID;
+ bool m_bIsFollowing;
+};
+
+
+struct FriendsEnumerateFollowingList_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
+ EResult m_eResult;
+ CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ];
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: reports the result of an attempt to change the user's persona name
+//-----------------------------------------------------------------------------
+struct SetPersonaNameResponse_t
+{
+ enum { k_iCallback = k_iSteamFriendsCallbacks + 47 };
+
+ bool m_bSuccess; // true if name change succeeded completely.
+ bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam)
+ EResult m_result; // detailed result code
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMFRIENDS_H
diff --git a/lsteamclient/steamworks_sdk_142/isteamgamecoordinator.h b/lsteamclient/steamworks_sdk_142/isteamgamecoordinator.h
new file mode 100644
index 00000000..3a57f12d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamgamecoordinator.h
@@ -0,0 +1,76 @@
+//====== Copyright ©, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to the game coordinator for this application
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMECOORDINATOR
+#define ISTEAMGAMECOORDINATOR
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible return values from the ISteamGameCoordinator API
+enum EGCResults
+{
+ k_EGCResultOK = 0,
+ k_EGCResultNoMessage = 1, // There is no message in the queue
+ k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
+ k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
+ k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for sending and receiving messages from the Game Coordinator
+// for this application
+//-----------------------------------------------------------------------------
+class ISteamGameCoordinator
+{
+public:
+
+ // sends a message to the Game Coordinator
+ virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0;
+
+ // returns true if there is a message waiting from the game coordinator
+ virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0;
+
+ // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or
+ // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size.
+ // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned
+ // and the message remains at the head of the queue.
+ virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+};
+#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - A new message is available for reading from the message queue
+struct GCMessageAvailable_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 };
+ uint32 m_nMessageSize;
+};
+
+// callback notification - A message failed to make it to the GC. It may be down temporarily
+struct GCMessageFailed_t
+{
+ enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMECOORDINATOR
diff --git a/lsteamclient/steamworks_sdk_142/isteamgameserver.h b/lsteamclient/steamworks_sdk_142/isteamgameserver.h
new file mode 100644
index 00000000..2004c830
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamgameserver.h
@@ -0,0 +1,387 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam for game servers
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVER_H
+#define ISTEAMGAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1)
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServer
+{
+public:
+
+//
+// Basic server data. These properties, if set, must be set before before calling LogOn. They
+// may not be changed after logged in.
+//
+
+ /// This is called by SteamGameServer_Init, and you will usually not need to call it directly
+ virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0;
+
+ /// Game product identifier. This is currently used by the master server for version checking purposes.
+ /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose.
+ virtual void SetProduct( const char *pszProduct ) = 0;
+
+ /// Description of the game. This is a required field and is displayed in the steam server browser....for now.
+ /// This is a required field, but it will go away eventually, as the data should be determined from the AppID.
+ virtual void SetGameDescription( const char *pszGameDescription ) = 0;
+
+ /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning
+ /// this application is the original game, not a mod.
+ ///
+ /// @see k_cbMaxGameServerGameDir
+ virtual void SetModDir( const char *pszModDir ) = 0;
+
+ /// Is this is a dedicated server? The default value is false.
+ virtual void SetDedicatedServer( bool bDedicated ) = 0;
+
+//
+// Login
+//
+
+ /// Begin process to login to a persistent game server account
+ ///
+ /// You need to register for callbacks to determine the result of this operation.
+ /// @see SteamServersConnected_t
+ /// @see SteamServerConnectFailure_t
+ /// @see SteamServersDisconnected_t
+ virtual void LogOn( const char *pszToken ) = 0;
+
+ /// Login to a generic, anonymous account.
+ ///
+ /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init,
+ /// but this is no longer the case.
+ virtual void LogOnAnonymous() = 0;
+
+ /// Begin process of logging game server out of steam
+ virtual void LogOff() = 0;
+
+ // status functions
+ virtual bool BLoggedOn() = 0;
+ virtual bool BSecure() = 0;
+ virtual CSteamID GetSteamID() = 0;
+
+ /// Returns true if the master server has requested a restart.
+ /// Only returns true once per request.
+ virtual bool WasRestartRequested() = 0;
+
+//
+// Server state. These properties may be changed at any time.
+//
+
+ /// Max player count that will be reported to server browser and client queries
+ virtual void SetMaxPlayerCount( int cPlayersMax ) = 0;
+
+ /// Number of bots. Default value is zero
+ virtual void SetBotPlayerCount( int cBotplayers ) = 0;
+
+ /// Set the name of server as it will appear in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetServerName( const char *pszServerName ) = 0;
+
+ /// Set name of map to report in the server browser
+ ///
+ /// @see k_cbMaxGameServerName
+ virtual void SetMapName( const char *pszMapName ) = 0;
+
+ /// Let people know if your server will require a password
+ virtual void SetPasswordProtected( bool bPasswordProtected ) = 0;
+
+ /// Spectator server. The default value is zero, meaning the service
+ /// is not used.
+ virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0;
+
+ /// Name of the spectator server. (Only used if spectator port is nonzero.)
+ ///
+ /// @see k_cbMaxGameServerMapName
+ virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0;
+
+ /// Call this to clear the whole list of key/values that are sent in rules queries.
+ virtual void ClearAllKeyValues() = 0;
+
+ /// Call this to add/update a key/value pair.
+ virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0;
+
+ /// Sets a string defining the "gametags" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ ///
+ /// @see k_cbMaxGameServerTags
+ virtual void SetGameTags( const char *pchGameTags ) = 0;
+
+ /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set
+ /// it allows users to filter in the matchmaking/server-browser interfaces based on the value
+ /// don't set this unless it actually changes, its only uploaded to the master once (when
+ /// acknowledged)
+ ///
+ /// @see k_cbMaxGameServerGameData
+ virtual void SetGameData( const char *pchGameData ) = 0;
+
+ /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region
+ virtual void SetRegion( const char *pszRegion ) = 0;
+
+//
+// Player list management / authentication
+//
+
+ // Handles receiving a new connection from a Steam user. This call will ask the Steam
+ // servers to validate the users identity, app ownership, and VAC status. If the Steam servers
+ // are off-line, then it will validate the cached ticket itself which will validate app ownership
+ // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
+ // and must then be sent up to the game server for authentication.
+ //
+ // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL
+ // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
+ // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
+ virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0;
+
+ // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.
+ //
+ // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
+ // when this user leaves the server just like you would for a real user.
+ virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
+
+ // Should be called whenever a user leaves our game server, this lets Steam internally
+ // track which users are currently on which servers for the purposes of preventing a single
+ // account being logged into multiple servers, showing who is currently on a server, etc.
+ virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
+
+ // Update the data to be displayed in the server browser and matchmaking interfaces for a user
+ // currently connected to the server. For regular users you must call this after you receive a
+ // GSUserValidationSuccess callback.
+ //
+ // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
+ virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
+
+ // New auth system APIs - do not mix with the old auth system APIs.
+ // ----------------------------------------------------------------
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ).
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t
+ // returns false if we're not connected to the steam servers and thus cannot ask
+ virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0;
+
+
+ // these two functions s are deprecated, and will not return results
+ // they will be removed in a future version of the SDK
+ virtual void GetGameplayStats( ) = 0;
+ CALL_RESULT( GSReputation_t )
+ virtual SteamAPICall_t GetServerReputation() = 0;
+
+ // Returns the public IP of the server according to Steam, useful when the server is
+ // behind NAT and you want to advertise its IP in a lobby for other clients to directly
+ // connect to
+ virtual uint32 GetPublicIP() = 0;
+
+// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own
+// socket to talk to the master server on, it lets the game use its socket to forward messages
+// back and forth. This prevents us from requiring server ops to open up yet another port
+// in their firewalls.
+//
+// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001
+
+ // These are used when you've elected to multiplex the game server's UDP socket
+ // rather than having the master server updater use its own sockets.
+ //
+ // Source games use this to simplify the job of the server admins, so they
+ // don't have to open up more ports on their firewalls.
+
+ // Call this when a packet that starts with 0xFFFFFFFF comes in. That means
+ // it's for us.
+ virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0;
+
+ // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this.
+ // This gets a packet that the master server updater needs to send out on UDP.
+ // It returns the length of the packet it wants to send, or 0 if there are no more packets to send.
+ // Call this each frame until it returns 0.
+ virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0;
+
+//
+// Control heartbeats / advertisement with master server
+//
+
+ // Call this as often as you like to tell the master server updater whether or not
+ // you want it to be active (default: off).
+ virtual void EnableHeartbeats( bool bActive ) = 0;
+
+ // You usually don't need to modify this.
+ // Pass -1 to use the default value for iHeartbeatInterval.
+ // Some mods change this.
+ virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0;
+
+ // Force a heartbeat to steam at the next opportunity
+ virtual void ForceHeartbeat() = 0;
+
+ // associate this game server with this clan for the purposes of computing player compat
+ CALL_RESULT( AssociateWithClanResult_t )
+ virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0;
+
+ // ask if any of the current players dont want to play with this new player - or vice versa
+ CALL_RESULT( ComputeNewPlayerCompatibilityResult_t )
+ virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0;
+
+};
+
+#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012"
+
+// game server flags
+const uint32 k_unServerFlagNone = 0x00;
+const uint32 k_unServerFlagActive = 0x01; // server has users playing
+const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure
+const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated
+const uint32 k_unServerFlagLinux = 0x08; // linux build
+const uint32 k_unServerFlagPassworded = 0x10; // password protected
+const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and
+ // won't enforce authentication of users that connect to the server.
+ // Useful when you run a server where the clients may not
+ // be connected to the internet but you want them to play (i.e LANs)
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// client has been approved to connect to this game server
+struct GSClientApprove_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 1 };
+ CSteamID m_SteamID; // SteamID of approved player
+ CSteamID m_OwnerSteamID; // SteamID of original owner for game license
+};
+
+
+// client has been denied to connection to this game server
+struct GSClientDeny_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 2 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+ char m_rgchOptionalText[128];
+};
+
+
+// request the game server should kick the user
+struct GSClientKick_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 3 };
+ CSteamID m_SteamID;
+ EDenyReason m_eDenyReason;
+};
+
+// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks,
+// do not reuse them here.
+
+
+// client achievement info
+struct GSClientAchievementStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 6 };
+ uint64 m_SteamID;
+ char m_pchAchievement[128];
+ bool m_bUnlocked;
+};
+
+// received when the game server requests to be displayed as secure (VAC protected)
+// m_bSecure is true if the game server should display itself as secure to users, false otherwise
+struct GSPolicyResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 15 };
+ uint8 m_bSecure;
+};
+
+// GS gameplay stats info
+struct GSGameplayStats_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 7 };
+ EResult m_eResult; // Result of the call
+ int32 m_nRank; // Overall rank of the server (0-based)
+ uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server
+ uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server
+};
+
+// send as a reply to RequestUserGroupStatus()
+struct GSClientGroupStatus_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 8 };
+ CSteamID m_SteamIDUser;
+ CSteamID m_SteamIDGroup;
+ bool m_bMember;
+ bool m_bOfficer;
+};
+
+// Sent as a reply to GetServerReputation()
+struct GSReputation_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 9 };
+ EResult m_eResult; // Result of the call;
+ uint32 m_unReputationScore; // The reputation score for the game server
+ bool m_bBanned; // True if the server is banned from the Steam
+ // master servers
+
+ // The following members are only filled out if m_bBanned is true. They will all
+ // be set to zero otherwise. Master server bans are by IP so it is possible to be
+ // banned even when the score is good high if there is a bad server on another port.
+ // This information can be used to determine which server is bad.
+
+ uint32 m_unBannedIP; // The IP of the banned server
+ uint16 m_usBannedPort; // The port of the banned server
+ uint64 m_ulBannedGameID; // The game ID the banned server is serving
+ uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970)
+};
+
+// Sent as a reply to AssociateWithClan()
+struct AssociateWithClanResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 10 };
+ EResult m_eResult; // Result of the call;
+};
+
+// Sent as a reply to ComputeNewPlayerCompatibility()
+struct ComputeNewPlayerCompatibilityResult_t
+{
+ enum { k_iCallback = k_iSteamGameServerCallbacks + 11 };
+ EResult m_eResult; // Result of the call;
+ int m_cPlayersThatDontLikeCandidate;
+ int m_cPlayersThatCandidateDoesntLike;
+ int m_cClanPlayersThatDontLikeCandidate;
+ CSteamID m_SteamIDCandidate;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMGAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_142/isteamgameserverstats.h b/lsteamclient/steamworks_sdk_142/isteamgameserverstats.h
new file mode 100644
index 00000000..e4c7d648
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamgameserverstats.h
@@ -0,0 +1,101 @@
+//====== Copyright © Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface for game servers to steam stats and achievements
+//
+//=============================================================================
+
+#ifndef ISTEAMGAMESERVERSTATS_H
+#define ISTEAMGAMESERVERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for authenticating users via Steam to play on a game server
+//-----------------------------------------------------------------------------
+class ISteamGameServerStats
+{
+public:
+ // downloads stats for the user
+ // returns a GSStatsReceived_t callback when completed
+ // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats will only be auto-updated for clients playing on the server. For other
+ // users you'll need to call RequestUserStats() again to refresh any data
+ CALL_RESULT( GSStatsReceived_t )
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+
+ // Set / update stats and achievements.
+ // Note: These updates will work only on stats game servers are allowed to edit and only for
+ // game servers that have been declared as officially controlled by the game creators.
+ // Set the IP range of your official servers on the Steamworks page
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0;
+ virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0;
+ virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+ virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0;
+
+ // Store the current data on the server, will get a GSStatsStored_t callback when set.
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ CALL_RESULT( GSStatsStored_t )
+ virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0;
+};
+
+#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct GSStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks };
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct GSStatsStored_t
+{
+ enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 };
+ EResult m_eResult; // success / error
+ CSteamID m_steamIDUser; // The user for whom the stats were stored
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct GSStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMGAMESERVERSTATS_H
diff --git a/lsteamclient/steamworks_sdk_142/isteamhtmlsurface.h b/lsteamclient/steamworks_sdk_142/isteamhtmlsurface.h
new file mode 100644
index 00000000..11d85488
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamhtmlsurface.h
@@ -0,0 +1,466 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to display html pages in a texture
+//
+//=============================================================================
+
+#ifndef ISTEAMHTMLSURFACE_H
+#define ISTEAMHTMLSURFACE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+typedef uint32 HHTMLBrowser;
+const uint32 INVALID_HTMLBROWSER = 0;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for displaying HTML pages and interacting with them
+//-----------------------------------------------------------------------------
+class ISteamHTMLSurface
+{
+public:
+ virtual ~ISteamHTMLSurface() {}
+
+ // Must call init and shutdown when starting/ending use of the interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Create a browser object for display of a html page, when creation is complete the call handle
+ // will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser.
+ // The user agent string is a substring to be added to the general user agent string so you can
+ // identify your client on web servers.
+ // The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if
+ // you do not require this functionality.
+ //
+ // YOU MUST HAVE IMPLEMENTED HANDLERS FOR HTML_BrowserReady_t, HTML_StartRequest_t,
+ // HTML_JSAlert_t, HTML_JSConfirm_t, and HTML_FileOpenDialog_t! See the CALLBACKS
+ // section of this interface (AllowStartRequest, etc) for more details. If you do
+ // not implement these callback handlers, the browser may appear to hang instead of
+ // navigating to new pages or triggering javascript popups.
+ //
+ CALL_RESULT( HTML_BrowserReady_t )
+ virtual SteamAPICall_t CreateBrowser( const char *pchUserAgent, const char *pchUserCSS ) = 0;
+
+ // Call this when you are done with a html surface, this lets us free the resources being used by it
+ virtual void RemoveBrowser( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // Navigate to this URL, results in a HTML_StartRequest_t as the request commences
+ virtual void LoadURL( HHTMLBrowser unBrowserHandle, const char *pchURL, const char *pchPostData ) = 0;
+
+ // Tells the surface the size in pixels to display the surface
+ virtual void SetSize( HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight ) = 0;
+
+ // Stop the load of the current html page
+ virtual void StopLoad( HHTMLBrowser unBrowserHandle ) = 0;
+ // Reload (most likely from local cache) the current page
+ virtual void Reload( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate back in the page history
+ virtual void GoBack( HHTMLBrowser unBrowserHandle ) = 0;
+ // navigate forward in the page history
+ virtual void GoForward( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // add this header to any url requests from this browser
+ virtual void AddHeader( HHTMLBrowser unBrowserHandle, const char *pchKey, const char *pchValue ) = 0;
+ // run this javascript script in the currently loaded page
+ virtual void ExecuteJavascript( HHTMLBrowser unBrowserHandle, const char *pchScript ) = 0;
+
+ enum EHTMLMouseButton
+ {
+ eHTMLMouseButton_Left = 0,
+ eHTMLMouseButton_Right = 1,
+ eHTMLMouseButton_Middle = 2,
+ };
+
+ // Mouse click and mouse movement commands
+ virtual void MouseUp( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDown( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ virtual void MouseDoubleClick( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0;
+ // x and y are relative to the HTML bounds
+ virtual void MouseMove( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+ // nDelta is pixels of scroll
+ virtual void MouseWheel( HHTMLBrowser unBrowserHandle, int32 nDelta ) = 0;
+
+ enum EMouseCursor
+ {
+ dc_user = 0,
+ dc_none,
+ dc_arrow,
+ dc_ibeam,
+ dc_hourglass,
+ dc_waitarrow,
+ dc_crosshair,
+ dc_up,
+ dc_sizenw,
+ dc_sizese,
+ dc_sizene,
+ dc_sizesw,
+ dc_sizew,
+ dc_sizee,
+ dc_sizen,
+ dc_sizes,
+ dc_sizewe,
+ dc_sizens,
+ dc_sizeall,
+ dc_no,
+ dc_hand,
+ dc_blank, // don't show any custom cursor, just use your default
+ dc_middle_pan,
+ dc_north_pan,
+ dc_north_east_pan,
+ dc_east_pan,
+ dc_south_east_pan,
+ dc_south_pan,
+ dc_south_west_pan,
+ dc_west_pan,
+ dc_north_west_pan,
+ dc_alias,
+ dc_cell,
+ dc_colresize,
+ dc_copycur,
+ dc_verticaltext,
+ dc_rowresize,
+ dc_zoomin,
+ dc_zoomout,
+ dc_help,
+ dc_custom,
+
+ dc_last, // custom cursors start from this value and up
+ };
+
+ enum EHTMLKeyModifiers
+ {
+ k_eHTMLKeyModifier_None = 0,
+ k_eHTMLKeyModifier_AltDown = 1 << 0,
+ k_eHTMLKeyModifier_CtrlDown = 1 << 1,
+ k_eHTMLKeyModifier_ShiftDown = 1 << 2,
+ };
+
+ // keyboard interactions, native keycode is the virtual key code value from your OS
+ virtual void KeyDown( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ virtual void KeyUp( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+ // cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press)
+ virtual void KeyChar( HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0;
+
+ // programmatically scroll this many pixels on the page
+ virtual void SetHorizontalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+ virtual void SetVerticalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0;
+
+ // tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things
+ virtual void SetKeyFocus( HHTMLBrowser unBrowserHandle, bool bHasKeyFocus ) = 0;
+
+ // open the current pages html code in the local editor of choice, used for debugging
+ virtual void ViewSource( HHTMLBrowser unBrowserHandle ) = 0;
+ // copy the currently selected text on the html page to the local clipboard
+ virtual void CopyToClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+ // paste from the local clipboard to the current html page
+ virtual void PasteFromClipboard( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element
+ virtual void Find( HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse ) = 0;
+ // cancel a currently running find
+ virtual void StopFind( HHTMLBrowser unBrowserHandle ) = 0;
+
+ // return details about the link at position x,y on the current page
+ virtual void GetLinkAtPosition( HHTMLBrowser unBrowserHandle, int x, int y ) = 0;
+
+ // set a webcookie for the hostname in question
+ virtual void SetCookie( const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath = "/", RTime32 nExpires = 0, bool bSecure = false, bool bHTTPOnly = false ) = 0;
+
+ // Zoom the current page by flZoom ( from 0.0 to 2.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care)
+ virtual void SetPageScaleFactor( HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY ) = 0;
+
+ // Enable/disable low-resource background mode, where javascript and repaint timers are throttled, resources are
+ // more aggressively purged from memory, and audio/video elements are paused. When background mode is enabled,
+ // all HTML5 video and audio objects will execute ".pause()" and gain the property "._steam_background_paused = 1".
+ // When background mode is disabled, any video or audio objects with that property will resume with ".play()".
+ virtual void SetBackgroundMode( HHTMLBrowser unBrowserHandle, bool bBackgroundMode ) = 0;
+
+ // Scale the output display space by this factor, this is useful when displaying content on high dpi devices.
+ // Specifies the ratio between physical and logical pixels.
+ virtual void SetDPIScalingFactor( HHTMLBrowser unBrowserHandle, float flDPIScaling ) = 0;
+
+ // CALLBACKS
+ //
+ // These set of functions are used as responses to callback requests
+ //
+
+ // You MUST call this in response to a HTML_StartRequest_t callback
+ // Set bAllowed to true to allow this navigation, false to cancel it and stay
+ // on the current page. You can use this feature to limit the valid pages
+ // allowed in your HTML surface.
+ virtual void AllowStartRequest( HHTMLBrowser unBrowserHandle, bool bAllowed ) = 0;
+
+ // You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback
+ // Set bResult to true for the OK option of a confirm, use false otherwise
+ virtual void JSDialogResponse( HHTMLBrowser unBrowserHandle, bool bResult ) = 0;
+
+ // You MUST call this in response to a HTML_FileOpenDialog_t callback
+ IGNOREATTR()
+ virtual void FileLoadDialogResponse( HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles ) = 0;
+};
+
+#define STEAMHTMLSURFACE_INTERFACE_VERSION "STEAMHTMLSURFACE_INTERFACE_VERSION_004"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser is ready for use
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_BrowserReady_t, k_iSteamHTMLSurfaceCallbacks + 1 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this browser is now fully created and ready to navigate to pages
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser has a pending paint
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_NeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 2)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint
+CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called
+CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture
+CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture
+CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update
+CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update
+CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update
+CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update
+CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered
+CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered
+CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages
+END_DEFINE_CALLBACK_12()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser wanted to navigate to a new page
+// NOTE - you MUST call AllowStartRequest in response to this callback
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_StartRequest_t, k_iSteamHTMLSurfaceCallbacks + 3)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface navigating
+CALLBACK_MEMBER(1, const char *, pchURL) // the url they wish to navigate to
+CALLBACK_MEMBER(2, const char *, pchTarget) // the html link target type (i.e _blank, _self, _parent, _top )
+CALLBACK_MEMBER(3, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER(4, bool, bIsRedirect) // true if this was a http/html redirect from the last load request
+END_DEFINE_CALLBACK_5()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser has been requested to close due to user interaction (usually from a javascript window.close() call)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK(HTML_CloseBrowser_t, k_iSteamHTMLSurfaceCallbacks + 4)
+CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the browser is navigating to a new url
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_URLChanged_t, k_iSteamHTMLSurfaceCallbacks + 5 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface navigating
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the url they wish to navigate to
+CALLBACK_MEMBER( 2, const char *, pchPostData ) // any posted data for the request
+CALLBACK_MEMBER( 3, bool, bIsRedirect ) // true if this was a http/html redirect from the last load request
+CALLBACK_MEMBER( 4, const char *, pchPageTitle ) // the title of the page
+CALLBACK_MEMBER( 5, bool, bNewNavigation ) // true if this was from a fresh tab and not a click on an existing page
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A page is finished loading
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FinishedRequest_t, k_iSteamHTMLSurfaceCallbacks + 6 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+CALLBACK_MEMBER( 2, const char *, pchPageTitle ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a request to load this url in a new tab
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_OpenLinkInNewTab_t, k_iSteamHTMLSurfaceCallbacks + 7 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: the page has a new title now
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ChangedTitle_t, k_iSteamHTMLSurfaceCallbacks + 8 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: results from a search
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SearchResults_t, k_iSteamHTMLSurfaceCallbacks + 9 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unResults ) //
+CALLBACK_MEMBER( 2, uint32, unCurrentMatch ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: page history status changed on the ability to go backwards and forward
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_CanGoBackAndForward_t, k_iSteamHTMLSurfaceCallbacks + 10 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, bool, bCanGoBack ) //
+CALLBACK_MEMBER( 2, bool, bCanGoForward ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the horizontal scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HorizontalScroll_t, k_iSteamHTMLSurfaceCallbacks + 11 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool , bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: details on the visibility and size of the vertical scrollbar
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_VerticalScroll_t, k_iSteamHTMLSurfaceCallbacks + 12 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, unScrollMax ) //
+CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) //
+CALLBACK_MEMBER( 3, float, flPageScale ) //
+CALLBACK_MEMBER( 4, bool, bVisible ) //
+CALLBACK_MEMBER( 5, uint32, unPageSize ) //
+END_DEFINE_CALLBACK_6()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: response to GetLinkAtPosition call
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_LinkAtPosition_t, k_iSteamHTMLSurfaceCallbacks + 13 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, x ) // NOTE - Not currently set
+CALLBACK_MEMBER( 2, uint32, y ) // NOTE - Not currently set
+CALLBACK_MEMBER( 3, const char *, pchURL ) //
+CALLBACK_MEMBER( 4, bool, bInput ) //
+CALLBACK_MEMBER( 5, bool, bLiveLink ) //
+END_DEFINE_CALLBACK_6()
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript alert dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSAlert_t, k_iSteamHTMLSurfaceCallbacks + 14 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a Javascript confirmation dialog, call JSDialogResponse
+// when the user dismisses this dialog (or right away to ignore it)
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_JSConfirm_t, k_iSteamHTMLSurfaceCallbacks + 15 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMessage ) //
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: when received show a file open dialog
+// then call FileLoadDialogResponse with the file(s) the user selected.
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_FileOpenDialog_t, k_iSteamHTMLSurfaceCallbacks + 16 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchTitle ) //
+CALLBACK_MEMBER( 2, const char *, pchInitialFile ) //
+END_DEFINE_CALLBACK_3()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a new html window has been created
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_NewWindow_t, k_iSteamHTMLSurfaceCallbacks + 21 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the current surface
+CALLBACK_MEMBER( 1, const char *, pchURL ) // the page to load
+CALLBACK_MEMBER( 2, uint32, unX ) // the x pos into the page to display the popup
+CALLBACK_MEMBER( 3, uint32, unY ) // the y pos into the page to display the popup
+CALLBACK_MEMBER( 4, uint32, unWide ) // the total width of the pBGRA texture
+CALLBACK_MEMBER( 5, uint32, unTall ) // the total height of the pBGRA texture
+CALLBACK_MEMBER( 6, HHTMLBrowser, unNewWindow_BrowserHandle ) // the handle of the new window surface
+END_DEFINE_CALLBACK_7()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: change the cursor to display
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_SetCursor_t, k_iSteamHTMLSurfaceCallbacks + 22 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, uint32, eMouseCursor ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: informational message from the browser
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_StatusText_t, k_iSteamHTMLSurfaceCallbacks + 23 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: show a tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_ShowToolTip_t, k_iSteamHTMLSurfaceCallbacks + 24 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: update the text of an existing tooltip
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_UpdateToolTip_t, k_iSteamHTMLSurfaceCallbacks + 25 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display
+END_DEFINE_CALLBACK_2()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: hide the tooltip you are showing
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_HideToolTip_t, k_iSteamHTMLSurfaceCallbacks + 26 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface
+END_DEFINE_CALLBACK_1()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The browser has restarted due to an internal failure, use this new handle value
+//-----------------------------------------------------------------------------
+DEFINE_CALLBACK( HTML_BrowserRestarted_t, k_iSteamHTMLSurfaceCallbacks + 27 )
+CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this is the new browser handle after the restart
+CALLBACK_MEMBER( 1, HHTMLBrowser, unOldBrowserHandle ) // the handle for the browser before the restart, if your handle was this then switch to using unBrowserHandle for API calls
+END_DEFINE_CALLBACK_2()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMHTMLSURFACE_H
diff --git a/lsteamclient/steamworks_sdk_142/isteamhttp.h b/lsteamclient/steamworks_sdk_142/isteamhttp.h
new file mode 100644
index 00000000..d96a631f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamhttp.h
@@ -0,0 +1,210 @@
+//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to http client
+//
+//=============================================================================
+
+#ifndef ISTEAMHTTP_H
+#define ISTEAMHTTP_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamhttpenums.h"
+
+// Handle to a HTTP Request handle
+typedef uint32 HTTPRequestHandle;
+#define INVALID_HTTPREQUEST_HANDLE 0
+
+typedef uint32 HTTPCookieContainerHandle;
+#define INVALID_HTTPCOOKIE_HANDLE 0
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to http client
+//-----------------------------------------------------------------------------
+class ISteamHTTP
+{
+public:
+
+ // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires
+ // the method (GET or POST) and the absolute URL for the request. Both http and https are supported,
+ // so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/
+ // or such.
+ virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0;
+
+ // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after
+ // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data.
+ virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0;
+
+ // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default
+ // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request
+ // has already been sent.
+ virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0;
+
+ // Set a request header value for the request, must be called prior to sending the request. Will
+ // return false if the handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0;
+
+ // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified
+ // when creating the request. Must be called prior to sending the request. Will return false if the
+ // handle is invalid or the request is already sent.
+ virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback.
+ //
+ // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control
+ // header and only do a local cache lookup rather than sending any actual remote request.
+ virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on
+ // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and
+ // HTTPRequestDataReceived_t callbacks while streaming.
+ virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0;
+
+ // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move
+ // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent.
+ virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also
+ // returns the size of the header value if present so the caller and allocate a correctly sized buffer for
+ // GetHTTPResponseHeaderValue.
+ virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0;
+
+ // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // header is not present or if your buffer is too small to contain it's value. You should first call
+ // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed.
+ virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid.
+ virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0;
+
+ // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the
+ // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out
+ // the correct buffer size to use.
+ virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the
+ // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset
+ // do not match the size and offset sent in HTTPRequestDataReceived_t.
+ virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0;
+
+ // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t
+ // callback and finishing using the response.
+ virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0;
+
+ // Gets progress on downloading the body for the request. This will be zero unless a response header has already been
+ // received which included a content-length field. For responses that contain no content-length it will report
+ // zero for the duration of the request as the size is unknown until the connection closes.
+ virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0;
+
+ // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params
+ // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType
+ // parameter will set the content-type header for the request so the server may know how to interpret the body.
+ virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0;
+
+ // Creates a cookie container handle which you must later free with ReleaseCookieContainer(). If bAllowResponsesToModify=true
+ // than any response to your requests using this cookie container may add new cookies which may be transmitted with
+ // future requests. If bAllowResponsesToModify=false than only cookies you explicitly set will be sent. This API is just for
+ // during process lifetime, after steam restarts no cookies are persisted and you have no way to access the cookie container across
+ // repeat executions of your process.
+ virtual HTTPCookieContainerHandle CreateCookieContainer( bool bAllowResponsesToModify ) = 0;
+
+ // Release a cookie container you are finished using, freeing it's memory
+ virtual bool ReleaseCookieContainer( HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Adds a cookie to the specified cookie container that will be used with future requests.
+ virtual bool SetCookie( HTTPCookieContainerHandle hCookieContainer, const char *pchHost, const char *pchUrl, const char *pchCookie ) = 0;
+
+ // Set the cookie container to use for a HTTP request
+ virtual bool SetHTTPRequestCookieContainer( HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer ) = 0;
+
+ // Set the extra user agent info for a request, this doesn't clobber the normal user agent, it just adds the extra info on the end
+ virtual bool SetHTTPRequestUserAgentInfo( HTTPRequestHandle hRequest, const char *pchUserAgentInfo ) = 0;
+
+ // Set that https request should require verified SSL certificate via machines certificate trust store
+ virtual bool SetHTTPRequestRequiresVerifiedCertificate( HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate ) = 0;
+
+ // Set an absolute timeout on the HTTP request, this is just a total time timeout different than the network activity timeout
+ // which can bump everytime we get more data
+ virtual bool SetHTTPRequestAbsoluteTimeoutMS( HTTPRequestHandle hRequest, uint32 unMilliseconds ) = 0;
+
+ // Check if the reason the request failed was because we timed it out (rather than some harder failure)
+ virtual bool GetHTTPRequestWasTimedOut( HTTPRequestHandle hRequest, bool *pbWasTimedOut ) = 0;
+};
+
+#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct HTTPRequestCompleted_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 1 };
+
+ // Handle value for the request that has completed.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+ // This will be true if we actually got any sort of response from the server (even an error).
+ // It will be false if we failed due to an internal error or client side network failure.
+ bool m_bRequestSuccessful;
+
+ // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal
+ // OK response, if you get something else you probably need to treat it as a failure.
+ EHTTPStatusCode m_eStatusCode;
+
+ uint32 m_unBodySize; // Same as GetHTTPResponseBodySize()
+};
+
+
+struct HTTPRequestHeadersReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 2 };
+
+ // Handle value for the request that has received headers.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+};
+
+struct HTTPRequestDataReceived_t
+{
+ enum { k_iCallback = k_iClientHTTPCallbacks + 3 };
+
+ // Handle value for the request that has received data.
+ HTTPRequestHandle m_hRequest;
+
+ // Context value that the user defined on the request that this callback is associated with, 0 if
+ // no context value was set.
+ uint64 m_ulContextValue;
+
+
+ // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cOffset;
+
+ // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data
+ uint32 m_cBytesReceived;
+};
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMHTTP_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_142/isteaminventory.h b/lsteamclient/steamworks_sdk_142/isteaminventory.h
new file mode 100644
index 00000000..e300f542
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteaminventory.h
@@ -0,0 +1,429 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Inventory
+//
+//=============================================================================
+
+#ifndef ISTEAMINVENTORY_H
+#define ISTEAMINVENTORY_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+// Every individual instance of an item has a globally-unique ItemInstanceID.
+// This ID is unique to the combination of (player, specific item instance)
+// and will not be transferred to another player or re-used for another item.
+typedef uint64 SteamItemInstanceID_t;
+
+static const SteamItemInstanceID_t k_SteamItemInstanceIDInvalid = (SteamItemInstanceID_t)~0;
+
+// Types of items in your game are identified by a 32-bit "item definition number".
+// Valid definition numbers are between 1 and 999999999; numbers less than or equal to
+// zero are invalid, and numbers greater than or equal to one billion (1x10^9) are
+// reserved for internal Steam use.
+typedef int32 SteamItemDef_t;
+
+
+enum ESteamItemFlags
+{
+ // Item status flags - these flags are permanently attached to specific item instances
+ k_ESteamItemNoTrade = 1 << 0, // This item is account-locked and cannot be traded or given away.
+
+ // Action confirmation flags - these flags are set one time only, as part of a result set
+ k_ESteamItemRemoved = 1 << 8, // The item has been destroyed, traded away, expired, or otherwise invalidated
+ k_ESteamItemConsumed = 1 << 9, // The item quantity has been decreased by 1 via ConsumeItem API.
+
+ // All other flag bits are currently reserved for internal Steam use at this time.
+ // Do not assume anything about the state of other flags which are not defined here.
+};
+
+struct SteamItemDetails_t
+{
+ SteamItemInstanceID_t m_itemId;
+ SteamItemDef_t m_iDefinition;
+ uint16 m_unQuantity;
+ uint16 m_unFlags; // see ESteamItemFlags
+};
+
+typedef int32 SteamInventoryResult_t;
+
+static const SteamInventoryResult_t k_SteamInventoryResultInvalid = -1;
+
+typedef uint64 SteamInventoryUpdateHandle_t;
+const SteamInventoryUpdateHandle_t k_SteamInventoryUpdateHandleInvalid = 0xffffffffffffffffull;
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Inventory query and manipulation API
+//-----------------------------------------------------------------------------
+class ISteamInventory
+{
+public:
+
+ // INVENTORY ASYNC RESULT MANAGEMENT
+ //
+ // Asynchronous inventory queries always output a result handle which can be used with
+ // GetResultStatus, GetResultItems, etc. A SteamInventoryResultReady_t callback will
+ // be triggered when the asynchronous result becomes ready (or fails).
+ //
+
+ // Find out the status of an asynchronous inventory result handle. Possible values:
+ // k_EResultPending - still in progress
+ // k_EResultOK - done, result ready
+ // k_EResultExpired - done, result ready, maybe out of date (see DeserializeResult)
+ // k_EResultInvalidParam - ERROR: invalid API call parameters
+ // k_EResultServiceUnavailable - ERROR: service temporarily down, you may retry later
+ // k_EResultLimitExceeded - ERROR: operation would exceed per-user inventory limits
+ // k_EResultFail - ERROR: unknown / generic error
+ METHOD_DESC(Find out the status of an asynchronous inventory result handle.)
+ virtual EResult GetResultStatus( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Copies the contents of a result set into a flat array. The specific
+ // contents of the result set depend on which query which was used.
+ METHOD_DESC(Copies the contents of a result set into a flat array. The specific contents of the result set depend on which query which was used.)
+ virtual bool GetResultItems( SteamInventoryResult_t resultHandle,
+ OUT_ARRAY_COUNT( punOutItemsArraySize,Output array) SteamItemDetails_t *pOutItemsArray,
+ uint32 *punOutItemsArraySize ) = 0;
+
+ // In combination with GetResultItems, you can use GetResultItemProperty to retrieve
+ // dynamic string properties for a given item returned in the result set.
+ //
+ // Property names are always composed of ASCII letters, numbers, and/or underscores.
+ //
+ // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available
+ // property names.
+ //
+ // If pchValueBuffer is NULL, *punValueBufferSize will contain the
+ // suggested buffer size. Otherwise it will be the number of bytes actually copied
+ // to pchValueBuffer. If the results do not fit in the given buffer, partial
+ // results may be copied.
+ virtual bool GetResultItemProperty( SteamInventoryResult_t resultHandle,
+ uint32 unItemIndex,
+ const char *pchPropertyName,
+ OUT_STRING_COUNT( punValueBufferSizeOut ) char *pchValueBuffer, uint32 *punValueBufferSizeOut ) = 0;
+
+ // Returns the server time at which the result was generated. Compare against
+ // the value of IClientUtils::GetServerRealTime() to determine age.
+ METHOD_DESC(Returns the server time at which the result was generated. Compare against the value of IClientUtils::GetServerRealTime() to determine age.)
+ virtual uint32 GetResultTimestamp( SteamInventoryResult_t resultHandle ) = 0;
+
+ // Returns true if the result belongs to the target steam ID, false if the
+ // result does not. This is important when using DeserializeResult, to verify
+ // that a remote player is not pretending to have a different user's inventory.
+ METHOD_DESC(Returns true if the result belongs to the target steam ID or false if the result does not. This is important when using DeserializeResult to verify that a remote player is not pretending to have a different users inventory.)
+ virtual bool CheckResultSteamID( SteamInventoryResult_t resultHandle, CSteamID steamIDExpected ) = 0;
+
+ // Destroys a result handle and frees all associated memory.
+ METHOD_DESC(Destroys a result handle and frees all associated memory.)
+ virtual void DestroyResult( SteamInventoryResult_t resultHandle ) = 0;
+
+
+ // INVENTORY ASYNC QUERY
+ //
+
+ // Captures the entire state of the current user's Steam inventory.
+ // You must call DestroyResult on this handle when you are done with it.
+ // Returns false and sets *pResultHandle to zero if inventory is unavailable.
+ // Note: calls to this function are subject to rate limits and may return
+ // cached results if called too frequently. It is suggested that you call
+ // this function only when you are about to display the user's full inventory,
+ // or if you expect that the inventory may have changed.
+ METHOD_DESC(Captures the entire state of the current users Steam inventory.)
+ virtual bool GetAllItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+
+ // Captures the state of a subset of the current user's Steam inventory,
+ // identified by an array of item instance IDs. The results from this call
+ // can be serialized and passed to other players to "prove" that the current
+ // user owns specific items, without exposing the user's entire inventory.
+ // For example, you could call GetItemsByID with the IDs of the user's
+ // currently equipped cosmetic items and serialize this to a buffer, and
+ // then transmit this buffer to other players upon joining a game.
+ METHOD_DESC(Captures the state of a subset of the current users Steam inventory identified by an array of item instance IDs.)
+ virtual bool GetItemsByID( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT( unCountInstanceIDs ) const SteamItemInstanceID_t *pInstanceIDs, uint32 unCountInstanceIDs ) = 0;
+
+
+ // RESULT SERIALIZATION AND AUTHENTICATION
+ //
+ // Serialized result sets contain a short signature which can't be forged
+ // or replayed across different game sessions. A result set can be serialized
+ // on the local client, transmitted to other players via your game networking,
+ // and deserialized by the remote players. This is a secure way of preventing
+ // hackers from lying about posessing rare/high-value items.
+
+ // Serializes a result set with signature bytes to an output buffer. Pass
+ // NULL as an output buffer to get the required size via punOutBufferSize.
+ // The size of a serialized result depends on the number items which are being
+ // serialized. When securely transmitting items to other players, it is
+ // recommended to use "GetItemsByID" first to create a minimal result set.
+ // Results have a built-in timestamp which will be considered "expired" after
+ // an hour has elapsed. See DeserializeResult for expiration handling.
+ virtual bool SerializeResult( SteamInventoryResult_t resultHandle, OUT_BUFFER_COUNT(punOutBufferSize) void *pOutBuffer, uint32 *punOutBufferSize ) = 0;
+
+ // Deserializes a result set and verifies the signature bytes. Returns false
+ // if bRequireFullOnlineVerify is set but Steam is running in Offline mode.
+ // Otherwise returns true and then delivers error codes via GetResultStatus.
+ //
+ // The bRESERVED_MUST_BE_FALSE flag is reserved for future use and should not
+ // be set to true by your game at this time.
+ //
+ // DeserializeResult has a potential soft-failure mode where the handle status
+ // is set to k_EResultExpired. GetResultItems() still succeeds in this mode.
+ // The "expired" result could indicate that the data may be out of date - not
+ // just due to timed expiration (one hour), but also because one of the items
+ // in the result set may have been traded or consumed since the result set was
+ // generated. You could compare the timestamp from GetResultTimestamp() to
+ // ISteamUtils::GetServerRealTime() to determine how old the data is. You could
+ // simply ignore the "expired" result code and continue as normal, or you
+ // could challenge the player with expired data to send an updated result set.
+ virtual bool DeserializeResult( SteamInventoryResult_t *pOutResultHandle, BUFFER_COUNT(punOutBufferSize) const void *pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE = false ) = 0;
+
+
+ // INVENTORY ASYNC MODIFICATION
+ //
+
+ // GenerateItems() creates one or more items and then generates a SteamInventoryCallback_t
+ // notification with a matching nCallbackContext parameter. This API is only intended
+ // for prototyping - it is only usable by Steam accounts that belong to the publisher group
+ // for your game.
+ // If punArrayQuantity is not NULL, it should be the same length as pArrayItems and should
+ // describe the quantity of each item to generate.
+ virtual bool GenerateItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, ARRAY_COUNT(unArrayLength) const uint32 *punArrayQuantity, uint32 unArrayLength ) = 0;
+
+ // GrantPromoItems() checks the list of promotional items for which the user may be eligible
+ // and grants the items (one time only). On success, the result set will include items which
+ // were granted, if any. If no items were granted because the user isn't eligible for any
+ // promotions, this is still considered a success.
+ METHOD_DESC(GrantPromoItems() checks the list of promotional items for which the user may be eligible and grants the items (one time only).)
+ virtual bool GrantPromoItems( SteamInventoryResult_t *pResultHandle ) = 0;
+
+ // AddPromoItem() / AddPromoItems() are restricted versions of GrantPromoItems(). Instead of
+ // scanning for all eligible promotional items, the check is restricted to a single item
+ // definition or set of item definitions. This can be useful if your game has custom UI for
+ // showing a specific promo item to the user.
+ virtual bool AddPromoItem( SteamInventoryResult_t *pResultHandle, SteamItemDef_t itemDef ) = 0;
+ virtual bool AddPromoItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, uint32 unArrayLength ) = 0;
+
+ // ConsumeItem() removes items from the inventory, permanently. They cannot be recovered.
+ // Not for the faint of heart - if your game implements item removal at all, a high-friction
+ // UI confirmation process is highly recommended.
+ METHOD_DESC(ConsumeItem() removes items from the inventory permanently.)
+ virtual bool ConsumeItem( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity ) = 0;
+
+ // ExchangeItems() is an atomic combination of item generation and consumption.
+ // It can be used to implement crafting recipes or transmutations, or items which unpack
+ // themselves into other items (e.g., a chest).
+ // Exchange recipes are defined in the ItemDef, and explicitly list the required item
+ // types and resulting generated type.
+ // Exchange recipes are evaluated atomically by the Inventory Service; if the supplied
+ // components do not match the recipe, or do not contain sufficient quantity, the
+ // exchange will fail.
+ virtual bool ExchangeItems( SteamInventoryResult_t *pResultHandle,
+ ARRAY_COUNT(unArrayGenerateLength) const SteamItemDef_t *pArrayGenerate, ARRAY_COUNT(unArrayGenerateLength) const uint32 *punArrayGenerateQuantity, uint32 unArrayGenerateLength,
+ ARRAY_COUNT(unArrayDestroyLength) const SteamItemInstanceID_t *pArrayDestroy, ARRAY_COUNT(unArrayDestroyLength) const uint32 *punArrayDestroyQuantity, uint32 unArrayDestroyLength ) = 0;
+
+
+ // TransferItemQuantity() is intended for use with items which are "stackable" (can have
+ // quantity greater than one). It can be used to split a stack into two, or to transfer
+ // quantity from one stack into another stack of identical items. To split one stack into
+ // two, pass k_SteamItemInstanceIDInvalid for itemIdDest and a new item will be generated.
+ virtual bool TransferItemQuantity( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest ) = 0;
+
+
+ // TIMED DROPS AND PLAYTIME CREDIT
+ //
+
+ // Deprecated. Calling this method is not required for proper playtime accounting.
+ METHOD_DESC( Deprecated method. Playtime accounting is performed on the Steam servers. )
+ virtual void SendItemDropHeartbeat() = 0;
+
+ // Playtime credit must be consumed and turned into item drops by your game. Only item
+ // definitions which are marked as "playtime item generators" can be spawned. The call
+ // will return an empty result set if there is not enough playtime credit for a drop.
+ // Your game should call TriggerItemDrop at an appropriate time for the user to receive
+ // new items, such as between rounds or while the player is dead. Note that players who
+ // hack their clients could modify the value of "dropListDefinition", so do not use it
+ // to directly control rarity.
+ // See your Steamworks configuration to set playtime drop rates for individual itemdefs.
+ // The client library will suppress too-frequent calls to this method.
+ METHOD_DESC(Playtime credit must be consumed and turned into item drops by your game.)
+ virtual bool TriggerItemDrop( SteamInventoryResult_t *pResultHandle, SteamItemDef_t dropListDefinition ) = 0;
+
+
+ // Deprecated. This method is not supported.
+ virtual bool TradeItems( SteamInventoryResult_t *pResultHandle, CSteamID steamIDTradePartner,
+ ARRAY_COUNT(nArrayGiveLength) const SteamItemInstanceID_t *pArrayGive, ARRAY_COUNT(nArrayGiveLength) const uint32 *pArrayGiveQuantity, uint32 nArrayGiveLength,
+ ARRAY_COUNT(nArrayGetLength) const SteamItemInstanceID_t *pArrayGet, ARRAY_COUNT(nArrayGetLength) const uint32 *pArrayGetQuantity, uint32 nArrayGetLength ) = 0;
+
+
+ // ITEM DEFINITIONS
+ //
+ // Item definitions are a mapping of "definition IDs" (integers between 1 and 1000000)
+ // to a set of string properties. Some of these properties are required to display items
+ // on the Steam community web site. Other properties can be defined by applications.
+ // Use of these functions is optional; there is no reason to call LoadItemDefinitions
+ // if your game hardcodes the numeric definition IDs (eg, purple face mask = 20, blue
+ // weapon mod = 55) and does not allow for adding new item types without a client patch.
+ //
+
+ // LoadItemDefinitions triggers the automatic load and refresh of item definitions.
+ // Every time new item definitions are available (eg, from the dynamic addition of new
+ // item types while players are still in-game), a SteamInventoryDefinitionUpdate_t
+ // callback will be fired.
+ METHOD_DESC(LoadItemDefinitions triggers the automatic load and refresh of item definitions.)
+ virtual bool LoadItemDefinitions() = 0;
+
+ // GetItemDefinitionIDs returns the set of all defined item definition IDs (which are
+ // defined via Steamworks configuration, and not necessarily contiguous integers).
+ // If pItemDefIDs is null, the call will return true and *punItemDefIDsArraySize will
+ // contain the total size necessary for a subsequent call. Otherwise, the call will
+ // return false if and only if there is not enough space in the output array.
+ virtual bool GetItemDefinitionIDs(
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+
+ // GetItemDefinitionProperty returns a string property from a given item definition.
+ // Note that some properties (for example, "name") may be localized and will depend
+ // on the current Steam language settings (see ISteamApps::GetCurrentGameLanguage).
+ // Property names are always composed of ASCII letters, numbers, and/or underscores.
+ // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available
+ // property names. If pchValueBuffer is NULL, *punValueBufferSize will contain the
+ // suggested buffer size. Otherwise it will be the number of bytes actually copied
+ // to pchValueBuffer. If the results do not fit in the given buffer, partial
+ // results may be copied.
+ virtual bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPropertyName,
+ OUT_STRING_COUNT(punValueBufferSizeOut) char *pchValueBuffer, uint32 *punValueBufferSizeOut ) = 0;
+
+ // Request the list of "eligible" promo items that can be manually granted to the given
+ // user. These are promo items of type "manual" that won't be granted automatically.
+ // An example usage of this is an item that becomes available every week.
+ CALL_RESULT( SteamInventoryEligiblePromoItemDefIDs_t )
+ virtual SteamAPICall_t RequestEligiblePromoItemDefinitionsIDs( CSteamID steamID ) = 0;
+
+ // After handling a SteamInventoryEligiblePromoItemDefIDs_t call result, use this
+ // function to pull out the list of item definition ids that the user can be
+ // manually granted via the AddPromoItems() call.
+ virtual bool GetEligiblePromoItemDefinitionIDs(
+ CSteamID steamID,
+ OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs,
+ DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0;
+
+ // Starts the purchase process for the given item definitions. The callback SteamInventoryStartPurchaseResult_t
+ // will be posted if Steam was able to initialize the transaction.
+ //
+ // Once the purchase has been authorized and completed by the user, the callback SteamInventoryResultReady_t
+ // will be posted.
+ CALL_RESULT( SteamInventoryStartPurchaseResult_t )
+ virtual SteamAPICall_t StartPurchase( ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, ARRAY_COUNT(unArrayLength) const uint32 *punArrayQuantity, uint32 unArrayLength ) = 0;
+
+ // Request current prices for all applicable item definitions
+ CALL_RESULT( SteamInventoryRequestPricesResult_t )
+ virtual SteamAPICall_t RequestPrices() = 0;
+
+ // Returns the number of items with prices. Need to call RequestPrices() first.
+ virtual uint32 GetNumItemsWithPrices() = 0;
+
+ // Returns item definition ids and their prices in the user's local currency.
+ // Need to call RequestPrices() first.
+ virtual bool GetItemsWithPrices( ARRAY_COUNT(unArrayLength) OUT_ARRAY_COUNT(pArrayItemDefs, Items with prices) SteamItemDef_t *pArrayItemDefs,
+ ARRAY_COUNT(unArrayLength) OUT_ARRAY_COUNT(pPrices, List of prices for the given item defs) uint64 *pPrices,
+ uint32 unArrayLength ) = 0;
+
+ // Retrieves the price for the item definition id
+ // Returns false if there is no price stored for the item definition.
+ virtual bool GetItemPrice( SteamItemDef_t iDefinition, uint64 *pPrice ) = 0;
+
+ // Create a request to update properties on items
+ virtual SteamInventoryUpdateHandle_t StartUpdateProperties() = 0;
+ // Remove the property on the item
+ virtual bool RemoveProperty( SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char *pchPropertyName ) = 0;
+ // Accessor methods to set properties on items
+ virtual bool SetProperty( SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char *pchPropertyName, const char *pchPropertyValue ) = 0;
+ virtual bool SetProperty( SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char *pchPropertyName, bool bValue ) = 0;
+ virtual bool SetProperty( SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char *pchPropertyName, int64 nValue ) = 0;
+ virtual bool SetProperty( SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char *pchPropertyName, float flValue ) = 0;
+ // Submit the update request by handle
+ virtual bool SubmitUpdateProperties( SteamInventoryUpdateHandle_t handle, SteamInventoryResult_t * pResultHandle ) = 0;
+
+};
+
+#define STEAMINVENTORY_INTERFACE_VERSION "STEAMINVENTORY_INTERFACE_V002"
+
+
+// SteamInventoryResultReady_t callbacks are fired whenever asynchronous
+// results transition from "Pending" to "OK" or an error state. There will
+// always be exactly one callback per handle.
+struct SteamInventoryResultReady_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 0 };
+ SteamInventoryResult_t m_handle;
+ EResult m_result;
+};
+
+
+// SteamInventoryFullUpdate_t callbacks are triggered when GetAllItems
+// successfully returns a result which is newer / fresher than the last
+// known result. (It will not trigger if the inventory hasn't changed,
+// or if results from two overlapping calls are reversed in flight and
+// the earlier result is already known to be stale/out-of-date.)
+// The normal ResultReady callback will still be triggered immediately
+// afterwards; this is an additional notification for your convenience.
+struct SteamInventoryFullUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 1 };
+ SteamInventoryResult_t m_handle;
+};
+
+
+// A SteamInventoryDefinitionUpdate_t callback is triggered whenever
+// item definitions have been updated, which could be in response to
+// LoadItemDefinitions() or any other async request which required
+// a definition update in order to process results from the server.
+struct SteamInventoryDefinitionUpdate_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 2 };
+};
+
+// Returned
+struct SteamInventoryEligiblePromoItemDefIDs_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 3 };
+ EResult m_result;
+ CSteamID m_steamID;
+ int m_numEligiblePromoItemDefs;
+ bool m_bCachedData; // indicates that the data was retrieved from the cache and not the server
+};
+
+// Triggered from StartPurchase call
+struct SteamInventoryStartPurchaseResult_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 4 };
+ EResult m_result;
+ uint64 m_ulOrderID;
+ uint64 m_ulTransID;
+};
+
+
+// Triggered from RequestPrices
+struct SteamInventoryRequestPricesResult_t
+{
+ enum { k_iCallback = k_iClientInventoryCallbacks + 5 };
+ EResult m_result;
+ char m_rgchCurrency[4];
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMCONTROLLER_H
diff --git a/lsteamclient/steamworks_sdk_142/isteammasterserverupdater.h b/lsteamclient/steamworks_sdk_142/isteammasterserverupdater.h
new file mode 100644
index 00000000..19590019
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteammasterserverupdater.h
@@ -0,0 +1 @@
+#error "This file isn't used any more"
diff --git a/lsteamclient/steamworks_sdk_142/isteammatchmaking.h b/lsteamclient/steamworks_sdk_142/isteammatchmaking.h
new file mode 100644
index 00000000..5af69129
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteammatchmaking.h
@@ -0,0 +1,751 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing game server/client match making
+//
+//=============================================================================
+
+#ifndef ISTEAMMATCHMAKING
+#define ISTEAMMATCHMAKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+#include "matchmakingtypes.h"
+#include "isteamclient.h"
+#include "isteamfriends.h"
+
+// lobby type description
+enum ELobbyType
+{
+ k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else
+ k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list
+ k_ELobbyTypePublic = 2, // visible for friends and in lobby list
+ k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends
+ // useful if you want a user in two lobbies, for example matching groups together
+ // a user can be in only one regular lobby, and up to two invisible lobbies
+};
+
+// lobby search filter tools
+enum ELobbyComparison
+{
+ k_ELobbyComparisonEqualToOrLessThan = -2,
+ k_ELobbyComparisonLessThan = -1,
+ k_ELobbyComparisonEqual = 0,
+ k_ELobbyComparisonGreaterThan = 1,
+ k_ELobbyComparisonEqualToOrGreaterThan = 2,
+ k_ELobbyComparisonNotEqual = 3,
+};
+
+// lobby search distance. Lobby results are sorted from closest to farthest.
+enum ELobbyDistanceFilter
+{
+ k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned
+ k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions
+ k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe
+ k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients)
+};
+
+// maximum number of characters a lobby metadata key can be
+#define k_nMaxLobbyKeyLength 255
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to favorites
+// and to operate on game lobbies.
+//-----------------------------------------------------------------------------
+class ISteamMatchmaking
+{
+public:
+ // game server favorites storage
+ // saves basic details about a multiplayer game server locally
+
+ // returns the number of favorites servers the user has stored
+ virtual int GetFavoriteGameCount() = 0;
+
+ // returns the details of the game server
+ // iGame is of range [0,GetFavoriteGameCount())
+ // *pnIP, *pnConnPort are filled in the with IP:port of the game server
+ // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
+ // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
+ virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
+
+ // adds the game server to the local list; updates the time played of the server if it already exists in the list
+ virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) = 0;
+
+ // removes the game server from the local storage; returns true if one was removed
+ virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
+
+ ///////
+ // Game lobby functions
+
+ // Get a list of relevant lobbies
+ // this is an asynchronous request
+ // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
+ // this will never return lobbies that are full
+ // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
+ // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
+ /*
+ class CMyLobbyListManager
+ {
+ CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
+ void FindLobbies()
+ {
+ // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
+ SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
+ m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
+ }
+
+ void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
+ {
+ // lobby list has be retrieved from Steam back-end, use results
+ }
+ }
+ */
+ //
+ CALL_RESULT( LobbyMatchList_t )
+ virtual SteamAPICall_t RequestLobbyList() = 0;
+ // filters for lobbies
+ // this needs to be called before RequestLobbyList() to take effect
+ // these are cleared on each call to RequestLobbyList()
+ virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // numerical comparison
+ virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0;
+ // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
+ virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
+ // returns only lobbies with the specified number of slots available
+ virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0;
+ // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed)
+ virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0;
+ // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client
+ virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0;
+
+ virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0;
+
+ // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
+ // should only be called after a LobbyMatchList_t callback is received
+ // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
+ // the returned CSteamID::IsValid() will be false if iLobby is out of range
+ virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
+
+ // Create a lobby on the Steam servers.
+ // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
+ // of the lobby will need to be communicated via game channels or via InviteUserToLobby()
+ // this is an asynchronous request
+ // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point
+ // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+ CALL_RESULT( LobbyCreated_t )
+ virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0;
+
+ // Joins an existing lobby
+ // this is an asynchronous request
+ // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
+ // lobby metadata is available to use immediately on this call completing
+ CALL_RESULT( LobbyEnter_t )
+ virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0;
+
+ // Leave a lobby; this will take effect immediately on the client side
+ // other users in the lobby will be notified by a LobbyChatUpdate_t callback
+ virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
+
+ // Invite another user to the lobby
+ // the target user will receive a LobbyInvite_t callback
+ // will return true if the invite is successfully sent, whether or not the target responds
+ // returns false if the local user is not connected to the Steam servers
+ // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game,
+ // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id>
+ virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
+
+ // Lobby iteration, for viewing details of users in a lobby
+ // only accessible if the lobby user is a member of the specified lobby
+ // persona information for other lobby members (name, avatar, etc.) will be asynchronously received
+ // and accessible via ISteamFriends interface
+
+ // returns the number of users in the specified lobby
+ virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
+ // returns the CSteamID of a user in the lobby
+ // iMember is of range [0,GetNumLobbyMembers())
+ // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby
+ virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
+
+ // Get data associated with this lobby
+ // takes a simple key, and returns the string associated with it
+ // "" will be returned if no value is set, or if steamIDLobby is invalid
+ virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+ // Sets a key/value pair in the lobby metadata
+ // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
+ // this can be used to set lobby names, map, etc.
+ // to reset a key, just set it to ""
+ // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
+ virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // returns the number of metadata keys set on the specified lobby
+ virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0;
+
+ // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount())
+ virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0;
+
+ // removes a metadata key from the lobby
+ virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
+
+ // Gets per-user metadata for someone in this lobby
+ virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
+ // Sets per-user metadata (for the local user implicitly)
+ virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
+
+ // Broadcasts a chat message to the all the users in the lobby
+ // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
+ // returns true if the message is successfully sent
+ // pvMsgBody can be binary or text data, up to 4k
+ // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
+ virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
+ // Get a chat message as specified in a LobbyChatMsg_t callback
+ // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
+ // *pSteamIDUser is filled in with the CSteamID of the member
+ // *pvData is filled in with the message itself
+ // return value is the number of bytes written into the buffer
+ virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, OUT_STRUCT() CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
+
+ // Refreshes metadata for a lobby you're not necessarily in right now
+ // you never do this for lobbies you're a member of, only if your
+ // this will send down all the metadata associated with a lobby
+ // this is an asynchronous call
+ // returns false if the local user is not connected to the Steam servers
+ // results will be returned by a LobbyDataUpdate_t callback
+ // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false
+ virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
+
+ // sets the game server associated with the lobby
+ // usually at this point, the users will join the specified game server
+ // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
+ virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
+ // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
+ virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, OUT_STRUCT() CSteamID *psteamIDGameServer ) = 0;
+
+ // set the limit on the # of users who can join the lobby
+ virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
+ // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
+ virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
+
+ // updates which type of lobby it is
+ // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
+ virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
+
+ // sets whether or not a lobby is joinable - defaults to true for a new lobby
+ // if set to false, no user can join, even if they are a friend or have been invited
+ virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0;
+
+ // returns the current lobby owner
+ // you must be a member of the lobby to access this
+ // there always one lobby owner - if the current owner leaves, another user will become the owner
+ // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
+ virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
+
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
+
+ // link two lobbies for the purposes of checking player compatibility
+ // you must be the lobby owner of both lobbies
+ virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0;
+
+#ifdef _PS3
+ // changes who the lobby owner is
+ // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
+ // after completion, the local user will no longer be the owner
+ virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0;
+#endif
+ CALL_BACK( LobbyChatUpdate_t )
+};
+#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009"
+
+
+//-----------------------------------------------------------------------------
+// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
+//
+// The idea here is that your game code implements objects that implement these
+// interfaces to receive callback notifications after calling asynchronous functions
+// inside the ISteamMatchmakingServers() interface below.
+//
+// This is different than normal Steam callback handling due to the potentially
+// large size of server lists.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when requesting server list.
+//-----------------------------------------------------------------------------
+typedef void* HServerListRequest;
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after a server list refresh
+// or an individual server update.
+//
+// Since you get these callbacks after requesting full list refreshes you will
+// usually implement this interface inside an object like CServerBrowser. If that
+// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
+// to cancel any in-progress queries so you don't get a callback into the destructed
+// object and crash.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServerListResponse
+{
+public:
+ // Server has responded ok with updated data
+ virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Server has failed to respond
+ virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0;
+
+ // A list refresh you had initiated is now 100% completed
+ virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after pinging an individual server
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PingServer() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPingResponse
+{
+public:
+ // Server has responded successfully and has updated data
+ virtual void ServerResponded( gameserveritem_t &server ) = 0;
+
+ // Server failed to respond to the ping request
+ virtual void ServerFailedToRespond() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting details on
+// who is playing on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingPlayersResponse
+{
+public:
+ // Got data on a new player on the server -- you'll get this callback once per player
+ // on the server which you have requested player data on.
+ virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0;
+
+ // The server failed to respond to the request for player details
+ virtual void PlayersFailedToRespond() = 0;
+
+ // The server has finished responding to the player details request
+ // (ie, you won't get anymore AddPlayerToList callbacks)
+ virtual void PlayersRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback interface for receiving responses after requesting rules
+// details on a particular server.
+//
+// These callbacks all occur in response to querying an individual server
+// via the ISteamMatchmakingServers()->ServerRules() call below. If you are
+// destructing an object that implements this interface then you should call
+// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
+// which is in progress. Failure to cancel in progress queries when destructing
+// a callback handler may result in a crash when a callback later occurs.
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingRulesResponse
+{
+public:
+ // Got data on a rule on the server -- you'll get one of these per rule defined on
+ // the server you are querying
+ virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0;
+
+ // The server failed to respond to the request for rule details
+ virtual void RulesFailedToRespond() = 0;
+
+ // The server has finished responding to the rule details request
+ // (ie, you won't get anymore RulesResponded callbacks)
+ virtual void RulesRefreshComplete() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Typedef for handle type you will receive when querying details on an individual server.
+//-----------------------------------------------------------------------------
+typedef int HServerQuery;
+const int HSERVERQUERY_INVALID = 0xffffffff;
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for match making services for clients to get to game lists and details
+//-----------------------------------------------------------------------------
+class ISteamMatchmakingServers
+{
+public:
+ // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values.
+ // Each call allocates a new asynchronous request object.
+ // Request object must be released by calling ReleaseRequest( hServerListRequest )
+ virtual HServerListRequest RequestInternetServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+ virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0;
+
+ // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
+ // RefreshComplete callback is not posted when request is released.
+ virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0;
+
+ /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these:
+
+ "map"
+ - Server passes the filter if the server is playing the specified map.
+ "gamedataand"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedataor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the
+ specified strings. The value field is a comma-delimited list of strings to match.
+ "gamedatanor"
+ - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsand"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "gametagsnor"
+ - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any
+ of the specified strings. The value field is a comma-delimited list of strings to check.
+ "and" (x1 && x2 && ... && xn)
+ "or" (x1 || x2 || ... || xn)
+ "nand" !(x1 && x2 && ... && xn)
+ "nor" !(x1 || x2 || ... || xn)
+ - Performs Boolean operation on the following filters. The operand to this filter specifies
+ the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue
+ pairs must immediately follow, i.e. this is a prefix logical operator notation.)
+ In the simplest case where Boolean expressions are not nested, this is simply
+ the number of operands.
+
+ For example, to match servers on a particular map or with a particular tag, would would
+ use these filters.
+
+ ( server.map == "cp_dustbowl" || server.gametags.contains("payload") )
+ "or", "2"
+ "map", "cp_dustbowl"
+ "gametagsand", "payload"
+
+ If logical inputs are nested, then the operand specifies the size of the entire
+ "length" of its operands, not the number of immediate children.
+
+ ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) )
+ "or", "4"
+ "map", "cp_dustbowl"
+ "and", "2"
+ "gametagsand", "payload"
+ "gametagsnor", "payloadrace"
+
+ Unary NOT can be achieved using either "nand" or "nor" with a single operand.
+
+ "addr"
+ - Server passes the filter if the server's query address matches the specified IP or IP:port.
+ "gameaddr"
+ - Server passes the filter if the server's game address matches the specified IP or IP:port.
+
+ The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t
+
+ "dedicated"
+ - Server passes the filter if it passed true to SetDedicatedServer.
+ "secure"
+ - Server passes the filter if the server is VAC-enabled.
+ "notfull"
+ - Server passes the filter if the player count is less than the reported max player count.
+ "hasplayers"
+ - Server passes the filter if the player count is greater than zero.
+ "noplayers"
+ - Server passes the filter if it doesn't have any players.
+ "linux"
+ - Server passes the filter if it's a linux server
+ */
+
+ // Get details on a given server in the list, you can get the valid range of index
+ // values by calling GetServerCount(). You will also receive index values in
+ // ISteamMatchmakingServerListResponse::ServerResponded() callbacks
+ virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0;
+
+ // Cancel an request which is operation on the given list type. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above list request calls. Not doing so may result in a crash when a callback
+ // occurs on the destructed object.
+ // Canceling a query does not release the allocated request handle.
+ // The request handle must be released using ReleaseRequest( hRequest )
+ virtual void CancelQuery( HServerListRequest hRequest ) = 0;
+
+ // Ping every server in your list again but don't update the list of servers
+ // Query callback installed when the server list was requested will be used
+ // again to post notifications and RefreshComplete, so the callback must remain
+ // valid until another RefreshComplete is called on it or the request
+ // is released with ReleaseRequest( hRequest )
+ virtual void RefreshQuery( HServerListRequest hRequest ) = 0;
+
+ // Returns true if the list is currently refreshing its server list
+ virtual bool IsRefreshing( HServerListRequest hRequest ) = 0;
+
+ // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
+ virtual int GetServerCount( HServerListRequest hRequest ) = 0;
+
+ // Refresh a single server inside of a query (rather than all the servers )
+ virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0;
+
+
+ //-----------------------------------------------------------------------------
+ // Queries to individual servers directly via IP/Port
+ //-----------------------------------------------------------------------------
+
+ // Request updated ping time and other details from a single server
+ virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of players currently playing on a server
+ virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
+
+ // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side)
+ virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0;
+
+ // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel
+ // any in-progress requests before destructing a callback object that may have been passed
+ // to one of the above calls to avoid crashing when callbacks occur.
+ virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0;
+};
+#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002"
+
+// game server flags
+const uint32 k_unFavoriteFlagNone = 0x00;
+const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list
+const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32
+//-----------------------------------------------------------------------------
+enum EChatMemberStateChange
+{
+ // Specific to joining / leaving the chatroom
+ k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room
+ k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room
+ k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first
+ k_EChatMemberStateChangeKicked = 0x0008, // User kicked
+ k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned
+};
+
+// returns true of the flags indicate that a user has been removed from the chat
+#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) )
+
+
+//-----------------------------------------------------------------------------
+// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system)
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: a server was added/removed from the favorites list, you should refresh now
+//-----------------------------------------------------------------------------
+struct FavoritesListChanged_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 };
+ uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server
+ uint32 m_nQueryPort;
+ uint32 m_nConnPort;
+ uint32 m_nAppID;
+ uint32 m_nFlags;
+ bool m_bAdd; // true if this is adding the entry, otherwise it is a remove
+ AccountID_t m_unAccountId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Someone has invited you to join a Lobby
+// normally you don't need to do anything with this, since
+// the Steam UI will also display a '<user> has invited you to the lobby, join?' dialog
+//
+// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>",
+// or with the callback GameLobbyJoinRequested_t if they're already in-game
+//-----------------------------------------------------------------------------
+struct LobbyInvite_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 };
+
+ uint64 m_ulSteamIDUser; // Steam ID of the person making the invite
+ uint64 m_ulSteamIDLobby; // Steam ID of the Lobby
+ uint64 m_ulGameID; // GameID of the Lobby
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent on entering a lobby, or on failing to enter
+// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success,
+// or a higher value on failure (see enum EChatRoomEnterResponse)
+//-----------------------------------------------------------------------------
+struct LobbyEnter_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 };
+
+ uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered
+ uint32 m_rgfChatPermissions; // Permissions of the current user
+ bool m_bLocked; // If true, then only invited users may join
+ uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby metadata has changed
+// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details
+// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata
+//-----------------------------------------------------------------------------
+struct LobbyDataUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 };
+
+ uint64 m_ulSteamIDLobby; // steamID of the Lobby
+ uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself
+ uint8 m_bSuccess; // true if we lobby data was successfully changed;
+ // will only be false if RequestLobbyData() was called on a lobby that no longer exists
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The lobby chat room state has changed
+// this is usually sent when a user has joined or left the lobby
+//-----------------------------------------------------------------------------
+struct LobbyChatUpdate_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 };
+
+ uint64 m_ulSteamIDLobby; // Lobby ID
+ uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient
+ uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.)
+ // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick
+ uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A chat message for this lobby has been sent
+// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message
+//-----------------------------------------------------------------------------
+struct LobbyChatMsg_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 };
+
+ uint64 m_ulSteamIDLobby; // the lobby id this is in
+ uint64 m_ulSteamIDUser; // steamID of the user who has sent this message
+ uint8 m_eChatEntryType; // type of message
+ uint32 m_iChatID; // index of the chat entry to lookup
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A game created a game for all the members of the lobby to join,
+// as triggered by a SetLobbyGameServer()
+// it's up to the individual clients to take action on this; the usual
+// game behavior is to leave the lobby and connect to the specified game server
+//-----------------------------------------------------------------------------
+struct LobbyGameCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 };
+
+ uint64 m_ulSteamIDLobby; // the lobby we were in
+ uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members
+ uint32 m_unIP; // IP & Port of the game server (if any)
+ uint16 m_usPort;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Number of matching lobbies found
+// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
+//-----------------------------------------------------------------------------
+struct LobbyMatchList_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 };
+ uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: posted if a user is forcefully removed from a lobby
+// can occur if a user loses connection to Steam
+//-----------------------------------------------------------------------------
+struct LobbyKicked_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 };
+ uint64 m_ulSteamIDLobby; // Lobby
+ uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself
+ uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true)
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct LobbyCreated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 };
+
+ EResult m_eResult; // k_EResultOK - the lobby was successfully created
+ // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end
+ // k_EResultTimeout - you the message to the Steam servers, but it didn't respond
+ // k_EResultFail - the server responded, but with an unknown internal error
+ // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game
+ // k_EResultLimitExceeded - your game client has created too many lobbies
+
+ uint64 m_ulSteamIDLobby; // chat room, zero if failed
+};
+
+// used by now obsolete RequestFriendsLobbiesResponse_t
+// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of CheckForPSNGameBootInvite
+// m_eResult == k_EResultOK on success
+// at this point, the local user may not have finishing joining this lobby;
+// game code should wait until the subsequent LobbyEnter_t callback is received
+//-----------------------------------------------------------------------------
+struct PSNGameBootInviteResult_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 };
+
+ bool m_bGameBootInviteExists;
+ CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result of our request to create a Lobby
+// m_eResult == k_EResultOK on success
+// at this point, the lobby has been joined and is ready for use
+// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
+//-----------------------------------------------------------------------------
+struct FavoritesListAccountsUpdated_t
+{
+ enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 };
+
+ EResult m_eResult;
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMMATCHMAKING
diff --git a/lsteamclient/steamworks_sdk_142/isteammusic.h b/lsteamclient/steamworks_sdk_142/isteammusic.h
new file mode 100644
index 00000000..0d956bf6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteammusic.h
@@ -0,0 +1,67 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSIC_H
+#define ISTEAMMUSIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum AudioPlayback_Status
+{
+ AudioPlayback_Undefined = 0,
+ AudioPlayback_Playing = 1,
+ AudioPlayback_Paused = 2,
+ AudioPlayback_Idle = 3
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions to control music playback in the steam client
+//-----------------------------------------------------------------------------
+class ISteamMusic
+{
+public:
+ virtual bool BIsEnabled() = 0;
+ virtual bool BIsPlaying() = 0;
+
+ virtual AudioPlayback_Status GetPlaybackStatus() = 0;
+
+ virtual void Play() = 0;
+ virtual void Pause() = 0;
+ virtual void PlayPrevious() = 0;
+ virtual void PlayNext() = 0;
+
+ // volume is between 0.0 and 1.0
+ virtual void SetVolume( float flVolume ) = 0;
+ virtual float GetVolume() = 0;
+
+};
+
+#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 )
+ CALLBACK_MEMBER( 0, float, m_flNewVolume )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+#endif // #define ISTEAMMUSIC_H
diff --git a/lsteamclient/steamworks_sdk_142/isteammusicremote.h b/lsteamclient/steamworks_sdk_142/isteammusicremote.h
new file mode 100644
index 00000000..5893ef4b
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteammusicremote.h
@@ -0,0 +1,129 @@
+//============ Copyright (c) Valve Corporation, All rights reserved. ============
+
+#ifndef ISTEAMMUSICREMOTE_H
+#define ISTEAMMUSICREMOTE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteammusic.h"
+
+#define k_SteamMusicNameMaxLength 255
+#define k_SteamMusicPNGMaxLength 65535
+
+
+class ISteamMusicRemote
+{
+public:
+ // Service Definition
+ virtual bool RegisterSteamMusicRemote( const char *pchName ) = 0;
+ virtual bool DeregisterSteamMusicRemote() = 0;
+ virtual bool BIsCurrentMusicRemote() = 0;
+ virtual bool BActivationSuccess( bool bValue ) = 0;
+
+ virtual bool SetDisplayName( const char *pchDisplayName ) = 0;
+ virtual bool SetPNGIcon_64x64( void *pvBuffer, uint32 cbBufferLength ) = 0;
+
+ // Abilities for the user interface
+ virtual bool EnablePlayPrevious(bool bValue) = 0;
+ virtual bool EnablePlayNext( bool bValue ) = 0;
+ virtual bool EnableShuffled( bool bValue ) = 0;
+ virtual bool EnableLooped( bool bValue ) = 0;
+ virtual bool EnableQueue( bool bValue ) = 0;
+ virtual bool EnablePlaylists( bool bValue ) = 0;
+
+ // Status
+ virtual bool UpdatePlaybackStatus( AudioPlayback_Status nStatus ) = 0;
+ virtual bool UpdateShuffled( bool bValue ) = 0;
+ virtual bool UpdateLooped( bool bValue ) = 0;
+ virtual bool UpdateVolume( float flValue ) = 0; // volume is between 0.0 and 1.0
+
+ // Current Entry
+ virtual bool CurrentEntryWillChange() = 0;
+ virtual bool CurrentEntryIsAvailable( bool bAvailable ) = 0;
+ virtual bool UpdateCurrentEntryText( const char *pchText ) = 0;
+ virtual bool UpdateCurrentEntryElapsedSeconds( int nValue ) = 0;
+ virtual bool UpdateCurrentEntryCoverArt( void *pvBuffer, uint32 cbBufferLength ) = 0;
+ virtual bool CurrentEntryDidChange() = 0;
+
+ // Queue
+ virtual bool QueueWillChange() = 0;
+ virtual bool ResetQueueEntries() = 0;
+ virtual bool SetQueueEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentQueueEntry( int nID ) = 0;
+ virtual bool QueueDidChange() = 0;
+
+ // Playlist
+ virtual bool PlaylistWillChange() = 0;
+ virtual bool ResetPlaylistEntries() = 0;
+ virtual bool SetPlaylistEntry( int nID, int nPosition, const char *pchEntryText ) = 0;
+ virtual bool SetCurrentPlaylistEntry( int nID ) = 0;
+ virtual bool PlaylistDidChange() = 0;
+};
+
+#define STEAMMUSICREMOTE_INTERFACE_VERSION "STEAMMUSICREMOTE_INTERFACE_VERSION001"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillActivate_t, k_iSteamMusicRemoteCallbacks + 1)
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteWillDeactivate_t, k_iSteamMusicRemoteCallbacks + 2 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerRemoteToFront_t, k_iSteamMusicRemoteCallbacks + 3 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWillQuit_t, k_iSteamMusicRemoteCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlay_t, k_iSteamMusicRemoteCallbacks + 5 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPause_t, k_iSteamMusicRemoteCallbacks + 6 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayPrevious_t, k_iSteamMusicRemoteCallbacks + 7 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayNext_t, k_iSteamMusicRemoteCallbacks + 8 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( MusicPlayerWantsShuffled_t, k_iSteamMusicRemoteCallbacks + 9 )
+ CALLBACK_MEMBER( 0, bool, m_bShuffled )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsLooped_t, k_iSteamMusicRemoteCallbacks + 10 )
+ CALLBACK_MEMBER(0, bool, m_bLooped )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsVolume_t, k_iSteamMusicCallbacks + 11 )
+ CALLBACK_MEMBER(0, float, m_flNewVolume)
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsQueueEntry_t, k_iSteamMusicCallbacks + 12 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerSelectsPlaylistEntry_t, k_iSteamMusicCallbacks + 13 )
+ CALLBACK_MEMBER(0, int, nID )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( MusicPlayerWantsPlayingRepeatStatus_t, k_iSteamMusicRemoteCallbacks + 14 )
+ CALLBACK_MEMBER(0, int, m_nPlayingRepeatStatus )
+END_DEFINE_CALLBACK_1()
+
+#pragma pack( pop )
+
+
+
+#endif // #define ISTEAMMUSICREMOTE_H
diff --git a/lsteamclient/steamworks_sdk_142/isteamnetworking.h b/lsteamclient/steamworks_sdk_142/isteamnetworking.h
new file mode 100644
index 00000000..f733cc88
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamnetworking.h
@@ -0,0 +1,306 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam managing network connections between game clients & servers
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKING
+#define ISTEAMNETWORKING
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamtypes.h"
+#include "steamclientpublic.h"
+
+
+// list of possible errors returned by SendP2PPacket() API
+// these will be posted in the P2PSessionConnectFail_t callback
+enum EP2PSessionError
+{
+ k_EP2PSessionErrorNone = 0,
+ k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game
+ k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running
+ k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam
+ k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser()
+ // corporate firewalls can also block this (NAT traversal is not firewall traversal)
+ // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction
+ k_EP2PSessionErrorMax = 5
+};
+
+// SendP2PPacket() send types
+// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets
+enum EP2PSend
+{
+ // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
+ // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
+ // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
+ k_EP2PSendUnreliable = 0,
+
+ // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
+ // packet sent to a remote host almost guarantees the packet will be dropped.
+ // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
+ k_EP2PSendUnreliableNoDelay = 1,
+
+ // Reliable message send. Can send up to 1MB of data in a single message.
+ // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data.
+ k_EP2PSendReliable = 2,
+
+ // As above, but applies the Nagle algorithm to the send - sends will accumulate
+ // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
+ // Useful if you want to send a set of smaller messages but have the coalesced into a single packet
+ // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
+ // do a normal k_EP2PSendReliable to force all the buffered data to be sent.
+ k_EP2PSendReliableWithBuffering = 3,
+
+};
+
+
+// connection state to a specified user, returned by GetP2PSessionState()
+// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct P2PSessionState_t
+{
+ uint8 m_bConnectionActive; // true if we've got an active open connection
+ uint8 m_bConnecting; // true if we're currently trying to establish a connection
+ uint8 m_eP2PSessionError; // last error recorded (see enum above)
+ uint8 m_bUsingRelay; // true if it's going through a relay server (TURN)
+ int32 m_nBytesQueuedForSend;
+ int32 m_nPacketsQueuedForSend;
+ uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
+ uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's
+};
+#pragma pack( pop )
+
+
+// handle to a socket
+typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket()
+typedef uint32 SNetListenSocket_t; // CreateListenSocket()
+
+// connection progress indicators, used by CreateP2PConnectionSocket()
+enum ESNetSocketState
+{
+ k_ESNetSocketStateInvalid = 0,
+
+ // communication is valid
+ k_ESNetSocketStateConnected = 1,
+
+ // states while establishing a connection
+ k_ESNetSocketStateInitiated = 10, // the connection state machine has started
+
+ // p2p connections
+ k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info
+ k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info
+
+ // direct connections
+ k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server
+
+ // failure states
+ k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end
+ k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown
+ k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection
+ k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us
+ k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke
+
+};
+
+// describes how the socket is currently connected
+enum ESNetSocketConnectionType
+{
+ k_ESNetSocketConnectionTypeNotConnected = 0,
+ k_ESNetSocketConnectionTypeUDP = 1,
+ k_ESNetSocketConnectionTypeUDPRelay = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for making connections and sending data between clients,
+// traversing NAT's where possible
+//-----------------------------------------------------------------------------
+class ISteamNetworking
+{
+public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // Session-less connection functions
+ // automatically establishes NAT-traversing or Relay server connections
+
+ // Sends a P2P packet to the specified user
+ // UDP-like, unreliable and a max packet size of 1200 bytes
+ // the first packet send may be delayed as the NAT-traversal code runs
+ // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t
+ // see EP2PSend enum above for the descriptions of the different ways of sending packets
+ //
+ // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket()
+ // with the same channel number in order to retrieve the data on the other end
+ // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources
+ virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0;
+
+ // returns true if any data is available for read, and the amount of data that will need to be read
+ virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0;
+
+ // reads in a packet that has been sent from another user via SendP2PPacket()
+ // returns the size of the message and the steamID of the user who sent it in the last two parameters
+ // if the buffer passed in is too small, the message will be truncated
+ // this call is not blocking, and will return false if no data is available
+ virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0;
+
+ // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback
+ // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet
+ // if you don't want to talk to the user, just ignore the request
+ // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically
+ // this may be called multiple times for a single user
+ // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request)
+ virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood
+ // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted
+ virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0;
+
+ // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels
+ // open channels to a user have been closed, the open session to the user will be closed and new data from this
+ // user will trigger a P2PSessionRequest_t callback
+ virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0;
+
+ // fills out P2PSessionState_t structure with details about the underlying connection to the user
+ // should only needed for debugging purposes
+ // returns false if no connection exists to the specified user
+ virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0;
+
+ // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection
+ // or NAT-traversal cannot be established. Only applies to connections created after setting this value,
+ // or to existing connections that need to automatically reconnect after this value is set.
+ //
+ // P2P packet relay is allowed by default
+ virtual bool AllowP2PPacketRelay( bool bAllow ) = 0;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // LISTEN / CONNECT style interface functions
+ //
+ // This is an older set of functions designed around the Berkeley TCP sockets model
+ // it's preferential that you use the above P2P functions, they're more robust
+ // and these older functions will be removed eventually
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // creates a socket and listens others to connect
+ // will trigger a SocketStatusCallback_t callback on another client connecting
+ // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports
+ // this can usually just be 0 unless you want multiple sets of connections
+ // unIP is the local IP address to bind to
+ // pass in 0 if you just want the default local IP
+ // unPort is the port to use
+ // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only
+ virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0;
+
+ // creates a socket and begin connection to a remote destination
+ // can connect via a known steamID (client or game server), or directly to an IP
+ // on success will trigger a SocketStatusCallback_t callback
+ // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState
+ virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0;
+ virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0;
+
+ // disconnects the connection to the socket, if any, and invalidates the handle
+ // any unread data on the socket will be thrown away
+ // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect
+ virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+ // destroying a listen socket will automatically kill all the regular sockets generated from it
+ virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0;
+
+ // sending data
+ // must be a handle to a connected socket
+ // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
+ // use the reliable flag with caution; although the resend rate is pretty aggressive,
+ // it can still cause stalls in receiving data (like TCP)
+ virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
+
+ // receiving data
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
+
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
+
+ // checks for data from any socket that has been connected off this listen socket
+ // returns false if there is no data remaining
+ // fills out *pcubMsgSize with the size of the next message, in bytes
+ // fills out *phSocket with the socket that data is available on
+ virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // retrieves data from any socket that has been connected off this listen socket
+ // fills in pubDest with the contents of the message
+ // messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
+ // if *pcubMsgSize < cubDest, only partial data is written
+ // returns false if no data is available
+ // fills out *phSocket with the socket that data is available on
+ virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0;
+
+ // returns information about the specified socket, filling out the contents of the pointers
+ virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0;
+
+ // returns which local port the listen socket is bound to
+ // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only
+ virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0;
+
+ // returns true to describe how the socket ended up connecting
+ virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0;
+
+ // max packet size, in bytes
+ virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0;
+};
+#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API
+// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them
+struct P2PSessionRequest_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 };
+ CSteamID m_steamIDRemote; // user who wants to talk to us
+};
+
+
+// callback notification - packets can't get through to the specified user via the SendP2PPacket() API
+// all packets queued packets unsent at this point will be dropped
+// further attempts to send will retry making the connection (but will be dropped if we fail again)
+struct P2PSessionConnectFail_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 };
+ CSteamID m_steamIDRemote; // user we were sending packets to
+ uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble
+};
+
+
+// callback notification - status of a socket has changed
+// used as part of the CreateListenSocket() / CreateP2PConnectionSocket()
+struct SocketStatusCallback_t
+{
+ enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 };
+ SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host
+ SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection
+ CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one
+ int m_eSNetSocketState; // socket state, ESNetSocketState
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMNETWORKING
diff --git a/lsteamclient/steamworks_sdk_142/isteamparentalsettings.h b/lsteamclient/steamworks_sdk_142/isteamparentalsettings.h
new file mode 100644
index 00000000..8348d629
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamparentalsettings.h
@@ -0,0 +1,60 @@
+//====== Copyright � 2013-, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Interface to Steam parental settings (Family View)
+//
+//=============================================================================
+
+#ifndef ISTEAMPARENTALSETTINGS_H
+#define ISTEAMPARENTALSETTINGS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "steamtypes.h"
+
+// Feature types for parental settings
+enum EParentalFeature
+{
+ k_EFeatureInvalid = 0,
+ k_EFeatureStore = 1,
+ k_EFeatureCommunity = 2,
+ k_EFeatureProfile = 3,
+ k_EFeatureFriends = 4,
+ k_EFeatureNews = 5,
+ k_EFeatureTrading = 6,
+ k_EFeatureSettings = 7,
+ k_EFeatureConsole = 8,
+ k_EFeatureBrowser = 9,
+ k_EFeatureParentalSetup = 10,
+ k_EFeatureLibrary = 11,
+ k_EFeatureTest = 12,
+ k_EFeatureMax
+};
+
+class ISteamParentalSettings
+{
+public:
+ virtual bool BIsParentalLockEnabled() = 0;
+ virtual bool BIsParentalLockLocked() = 0;
+
+ virtual bool BIsAppBlocked( AppId_t nAppID ) = 0;
+ virtual bool BIsAppInBlockList( AppId_t nAppID ) = 0;
+
+ virtual bool BIsFeatureBlocked( EParentalFeature eFeature ) = 0;
+ virtual bool BIsFeatureInBlockList( EParentalFeature eFeature ) = 0;
+};
+
+#define STEAMPARENTALSETTINGS_INTERFACE_VERSION "STEAMPARENTALSETTINGS_INTERFACE_VERSION001"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamParentalSettingsChanged_t
+{
+ enum { k_iCallback = k_ISteamParentalSettingsCallbacks + 1 };
+};
+
+
+#endif // ISTEAMPARENTALSETTINGS_H
diff --git a/lsteamclient/steamworks_sdk_142/isteamps3overlayrenderer.h b/lsteamclient/steamworks_sdk_142/isteamps3overlayrenderer.h
new file mode 100644
index 00000000..2cbb757d
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamps3overlayrenderer.h
@@ -0,0 +1,91 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface the game must provide Steam with on PS3 in order for the
+// Steam overlay to render.
+//
+//=============================================================================
+
+#ifndef ISTEAMPS3OVERLAYRENDERER_H
+#define ISTEAMPS3OVERLAYRENDERER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cell/pad.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Enum for supported gradient directions
+//-----------------------------------------------------------------------------
+enum EOverlayGradientDirection
+{
+ k_EOverlayGradientHorizontal = 1,
+ k_EOverlayGradientVertical = 2,
+ k_EOverlayGradientNone = 3,
+};
+
+// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses.
+#define STEAM_COLOR_RED( color ) \
+ (int)(((color)>>16)&0xff)
+
+#define STEAM_COLOR_GREEN( color ) \
+ (int)(((color)>>8)&0xff)
+
+#define STEAM_COLOR_BLUE( color ) \
+ (int)((color)&0xff)
+
+#define STEAM_COLOR_ALPHA( color ) \
+ (int)(((color)>>24)&0xff)
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface the game must expose to Steam for rendering
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRenderHost
+{
+public:
+
+ // Interface for game engine to implement which Steam requires to render.
+
+ // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes.
+ virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0;
+
+ // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it.
+ virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0;
+
+ // Delete a texture Steam previously uploaded
+ virtual void DeleteTexture( int32 iTextureID ) = 0;
+
+ // Delete all previously uploaded textures
+ virtual void DeleteAllTextures() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Interface Steam exposes for the game to tell it when to render, etc.
+//-----------------------------------------------------------------------------
+class ISteamPS3OverlayRender
+{
+public:
+
+ // Call once at startup to initialize the Steam overlay and pass it your host interface ptr
+ virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0;
+
+ // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering)
+ virtual void Render() = 0;
+
+ // Call this everytime you read input on PS3.
+ //
+ // If this returns true, then the overlay is active and has consumed the input, your game
+ // should then ignore all the input until BHandleCellPadData once again returns false, which
+ // will mean the overlay is deactivated.
+ virtual bool BHandleCellPadData( const CellPadData &padData ) = 0;
+
+ // Call this if you detect no controllers connected or that the XMB is intercepting input
+ //
+ // This is important to clear input state for the overlay, so keys left down during XMB activation
+ // are not continued to be processed.
+ virtual bool BResetInputState() = 0;
+};
+
+
+#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_142/isteamremotestorage.h b/lsteamclient/steamworks_sdk_142/isteamremotestorage.h
new file mode 100644
index 00000000..7ca558e2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamremotestorage.h
@@ -0,0 +1,681 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE_H
+#define ISTEAMREMOTESTORAGE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines the largest allowed file size. Cloud files cannot be written
+// in a single chunk over 100MB (and cannot be over 200MB total.)
+//-----------------------------------------------------------------------------
+const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Structure that contains an array of const char * strings and the number of those strings
+//-----------------------------------------------------------------------------
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct SteamParamStringArray_t
+{
+ const char ** m_ppStrings;
+ int32 m_nNumStrings;
+};
+#pragma pack( pop )
+
+// A handle to a piece of user generated content
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+const PublishedFileId_t k_PublishedFileIdInvalid = 0;
+const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
+
+// Handle for writing to Steam Cloud
+typedef uint64 UGCFileWriteStreamHandle_t;
+const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull;
+
+const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
+const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000;
+const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
+const uint32 k_cchTagListMax = 1024 + 1;
+const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
+
+
+enum ERemoteStoragePlatform
+{
+ k_ERemoteStoragePlatformNone = 0,
+ k_ERemoteStoragePlatformWindows = (1 << 0),
+ k_ERemoteStoragePlatformOSX = (1 << 1),
+ k_ERemoteStoragePlatformPS3 = (1 << 2),
+ k_ERemoteStoragePlatformLinux = (1 << 3),
+ k_ERemoteStoragePlatformReserved2 = (1 << 4),
+
+ k_ERemoteStoragePlatformAll = 0xffffffff
+};
+
+enum ERemoteStoragePublishedFileVisibility
+{
+ k_ERemoteStoragePublishedFileVisibilityPublic = 0,
+ k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1,
+ k_ERemoteStoragePublishedFileVisibilityPrivate = 2,
+};
+
+
+enum EWorkshopFileType
+{
+ k_EWorkshopFileTypeFirst = 0,
+
+ k_EWorkshopFileTypeCommunity = 0, // normal Workshop item that can be subscribed to
+ k_EWorkshopFileTypeMicrotransaction = 1, // Workshop item that is meant to be voted on for the purpose of selling in-game
+ k_EWorkshopFileTypeCollection = 2, // a collection of Workshop or Greenlight items
+ k_EWorkshopFileTypeArt = 3, // artwork
+ k_EWorkshopFileTypeVideo = 4, // external video
+ k_EWorkshopFileTypeScreenshot = 5, // screenshot
+ k_EWorkshopFileTypeGame = 6, // Greenlight game entry
+ k_EWorkshopFileTypeSoftware = 7, // Greenlight software entry
+ k_EWorkshopFileTypeConcept = 8, // Greenlight concept
+ k_EWorkshopFileTypeWebGuide = 9, // Steam web guide
+ k_EWorkshopFileTypeIntegratedGuide = 10, // application integrated guide
+ k_EWorkshopFileTypeMerch = 11, // Workshop merchandise meant to be voted on for the purpose of being sold
+ k_EWorkshopFileTypeControllerBinding = 12, // Steam Controller bindings
+ k_EWorkshopFileTypeSteamworksAccessInvite = 13, // internal
+ k_EWorkshopFileTypeSteamVideo = 14, // Steam video
+ k_EWorkshopFileTypeGameManagedItem = 15, // managed completely by the game, not the user, and not shown on the web
+
+ // Update k_EWorkshopFileTypeMax if you add values.
+ k_EWorkshopFileTypeMax = 16
+
+};
+
+enum EWorkshopVote
+{
+ k_EWorkshopVoteUnvoted = 0,
+ k_EWorkshopVoteFor = 1,
+ k_EWorkshopVoteAgainst = 2,
+ k_EWorkshopVoteLater = 3,
+};
+
+enum EWorkshopFileAction
+{
+ k_EWorkshopFileActionPlayed = 0,
+ k_EWorkshopFileActionCompleted = 1,
+};
+
+enum EWorkshopEnumerationType
+{
+ k_EWorkshopEnumerationTypeRankedByVote = 0,
+ k_EWorkshopEnumerationTypeRecent = 1,
+ k_EWorkshopEnumerationTypeTrending = 2,
+ k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
+ k_EWorkshopEnumerationTypeVotedByFriends = 4,
+ k_EWorkshopEnumerationTypeContentByFriends = 5,
+ k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
+};
+
+enum EWorkshopVideoProvider
+{
+ k_EWorkshopVideoProviderNone = 0,
+ k_EWorkshopVideoProviderYoutube = 1
+};
+
+
+enum EUGCReadAction
+{
+ // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks.
+ // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading.
+ // This value maintains the same behavior as before the EUGCReadAction parameter was introduced.
+ k_EUGCRead_ContinueReadingUntilFinished = 0,
+
+ // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file.
+ // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it.
+ k_EUGCRead_ContinueReading = 1,
+
+ // Frees the file handle. Use this when you're done reading the content.
+ // To read the file from Steam again you will need to call UGCDownload again.
+ k_EUGCRead_Close = 2,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely
+// and cached locally
+//-----------------------------------------------------------------------------
+class ISteamRemoteStorage
+{
+ public:
+ // NOTE
+ //
+ // Filenames are case-insensitive, and will be converted to lowercase automatically.
+ // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+ // iterate the files, the filename returned will be "foo.bar".
+ //
+
+ // file operations
+ virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+ virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+
+ CALL_RESULT( RemoteStorageFileWriteAsyncComplete_t )
+ virtual SteamAPICall_t FileWriteAsync( const char *pchFile, const void *pvData, uint32 cubData ) = 0;
+
+ CALL_RESULT( RemoteStorageFileReadAsyncComplete_t )
+ virtual SteamAPICall_t FileReadAsync( const char *pchFile, uint32 nOffset, uint32 cubToRead ) = 0;
+ virtual bool FileReadAsyncComplete( SteamAPICall_t hReadCall, void *pvBuffer, uint32 cubToRead ) = 0;
+
+ virtual bool FileForget( const char *pchFile ) = 0;
+ virtual bool FileDelete( const char *pchFile ) = 0;
+ CALL_RESULT( RemoteStorageFileShareResult_t )
+ virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+ virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+ // file operations that cause network IO
+ virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0;
+ virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0;
+ virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+ virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0;
+
+ // file information
+ virtual bool FileExists( const char *pchFile ) = 0;
+ virtual bool FilePersisted( const char *pchFile ) = 0;
+ virtual int32 GetFileSize( const char *pchFile ) = 0;
+ virtual int64 GetFileTimestamp( const char *pchFile ) = 0;
+ virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+ // iteration
+ virtual int32 GetFileCount() = 0;
+ virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+ // configuration management
+ virtual bool GetQuota( uint64 *pnTotalBytes, uint64 *puAvailableBytes ) = 0;
+ virtual bool IsCloudEnabledForAccount() = 0;
+ virtual bool IsCloudEnabledForApp() = 0;
+ virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+ // user generated content
+
+ // Downloads a UGC file. A priority value of 0 will download the file immediately,
+ // otherwise it will wait to download the file until all downloads with a lower priority
+ // value are completed. Downloads with equal priority will occur simultaneously.
+ CALL_RESULT( RemoteStorageDownloadUGCResult_t )
+ virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0;
+
+ // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false
+ // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage
+ virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0;
+
+ // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result
+ virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, OUT_STRING() char **ppchName, int32 *pnFileSizeInBytes, OUT_STRUCT() CSteamID *pSteamIDOwner ) = 0;
+
+ // After download, gets the content of the file.
+ // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file.
+ // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate
+ // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail
+ // unless UGCDownload is called again.
+ // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks.
+ virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0;
+
+ // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead()
+ virtual int32 GetCachedUGCCount() = 0;
+ virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+ // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you
+ // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget.
+
+#if defined(_PS3) || defined(_SERVER)
+ // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback
+ virtual void GetFileListFromServer() = 0;
+ // Indicate this file should be downloaded in the next sync
+ virtual bool FileFetch( const char *pchFile ) = 0;
+ // Indicate this file should be persisted in the next sync
+ virtual bool FilePersist( const char *pchFile ) = 0;
+ // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback
+ virtual bool SynchronizeToClient() = 0;
+ // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback
+ virtual bool SynchronizeToServer() = 0;
+ // Reset any fetch/persist/etc requests
+ virtual bool ResetFileRequestState() = 0;
+#endif
+
+ // publishing UGC
+ CALL_RESULT( RemoteStoragePublishFileProgress_t )
+ virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+ virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0;
+ virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0;
+ virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0;
+ virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0;
+ virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+ virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0;
+ CALL_RESULT( RemoteStorageUpdatePublishedFileResult_t )
+ virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0;
+ // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0,
+ // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh.
+ // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is.
+ CALL_RESULT( RemoteStorageGetPublishedFileDetailsResult_t )
+ virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0;
+ CALL_RESULT( RemoteStorageDeletePublishedFileResult_t )
+ virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ // enumerate the files that the current user published with this app
+ CALL_RESULT( RemoteStorageEnumerateUserPublishedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0;
+ CALL_RESULT( RemoteStorageSubscribePublishedFileResult_t )
+ virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageEnumerateUserSubscribedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0;
+ CALL_RESULT( RemoteStorageUnsubscribePublishedFileResult_t )
+ virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+ virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0;
+ CALL_RESULT( RemoteStorageGetPublishedItemVoteDetailsResult_t )
+ virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageUpdateUserPublishedItemVoteResult_t )
+ virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+ CALL_RESULT( RemoteStorageGetPublishedItemVoteDetailsResult_t )
+ virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+ CALL_RESULT( RemoteStorageEnumerateUserPublishedFilesResult_t )
+ virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0;
+ CALL_RESULT( RemoteStoragePublishFileProgress_t )
+ virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+ CALL_RESULT( RemoteStorageSetUserPublishedFileActionResult_t )
+ virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+ CALL_RESULT( RemoteStorageEnumeratePublishedFilesByUserActionResult_t )
+ virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0;
+ // this method enumerates the public view of workshop files
+ CALL_RESULT( RemoteStorageEnumerateWorkshopFilesResult_t )
+ virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+
+ CALL_RESULT( RemoteStorageDownloadUGCResult_t )
+ virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0;
+};
+
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION014"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the local file cache is fully synced with the server for an app
+// That means that an application can be started and has all latest files
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedClient_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumDownloads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent when the server is fully synced with the local file cache for an app
+// That means that we can shutdown Steam and our data is stored on the server
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncedServer_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+ int m_unNumUploads;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Status of up and downloads during a sync session
+//
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 };
+ char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred
+ AppId_t m_nAppID; // App this info relates to
+ uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk
+ double m_dAppPercentComplete; // Percent complete that this app's transfers are
+ bool m_bUploading; // if false, downloading
+};
+
+//
+// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h
+//
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent after we've determined the list of files that are out of sync
+// with the server.
+//-----------------------------------------------------------------------------
+struct RemoteStorageAppSyncStatusCheck_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 };
+ AppId_t m_nAppID;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to FileShare()
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileShareResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 };
+ EResult m_eResult; // The result of the operation
+ UGCHandle_t m_hFile; // The handle that can be shared with users and features
+ char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared
+};
+
+
+// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to PublishFile()
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeletePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDeletePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateUserPublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserPublishedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageSubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to EnumerateSubscribePublishedFiles()
+//-----------------------------------------------------------------------------
+struct RemoteStorageEnumerateUserSubscribedFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+#if defined(VALVE_CALLBACK_PACK_SMALL)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 );
+#elif defined(VALVE_CALLBACK_PACK_LARGE)
+ VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 );
+#else
+#warning You must first include isteamclient.h
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UnsubscribePublishedFile()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUnsubscribePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to CommitPublishedFileUpdate()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdatePublishedFileResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UGCDownload()
+//-----------------------------------------------------------------------------
+struct RemoteStorageDownloadUGCResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 };
+ EResult m_eResult; // The result of the operation.
+ UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded.
+ AppId_t m_nAppID; // ID of the app that created this file.
+ int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes.
+ char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded.
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetPublishedFileDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedFileDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ ERemoteStoragePublishedFileVisibility m_eVisibility;
+ bool m_bBanned;
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_pchFileName[k_cchFilenameMax]; // The name of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ EWorkshopFileType m_eFileType; // Type of the file
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+};
+
+
+struct RemoteStorageEnumerateWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 };
+ EResult m_eResult;
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ];
+ AppId_t m_nAppId;
+ uint32 m_unStartIndex;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of GetPublishedItemVoteDetails
+//-----------------------------------------------------------------------------
+struct RemoteStorageGetPublishedItemVoteDetailsResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 };
+ EResult m_eResult;
+ PublishedFileId_t m_unPublishedFileId;
+ int32 m_nVotesFor;
+ int32 m_nVotesAgainst;
+ int32 m_nReports;
+ float m_fScore;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: User subscribed to a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileSubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: User unsubscribed from a file for the app (from within the app or on the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUnsubscribed_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Published file that a user owns was deleted (from within the app or the web)
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileDeleted_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to UpdateUserPublishedItemVote()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUpdateUserPublishedItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserPublishedItemVoteDetails()
+//-----------------------------------------------------------------------------
+struct RemoteStorageUserVoteDetails_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopVote m_eVote; // what the user voted
+};
+
+struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 };
+ EResult m_eResult; // The result of the operation.
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+struct RemoteStorageSetUserPublishedFileActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 };
+ EResult m_eResult; // The result of the operation.
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ EWorkshopFileAction m_eAction; // the action that was attempted
+};
+
+struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 };
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileAction m_eAction; // the action that was filtered on
+ int32 m_nResultsReturned;
+ int32 m_nTotalResultCount;
+ PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ];
+ uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ];
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called periodically while a PublishWorkshopFile is in progress
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishFileProgress_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 };
+ double m_dPercentFile;
+ bool m_bPreview;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when the content for a published file is updated
+//-----------------------------------------------------------------------------
+struct RemoteStoragePublishedFileUpdated_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 };
+ PublishedFileId_t m_nPublishedFileId; // The published file id
+ AppId_t m_nAppID; // ID of the app that will consume this file.
+ uint64 m_ulUnused; // not used anymore
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileWriteAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileWriteAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 31 };
+ EResult m_eResult; // result
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Called when a FileReadAsync completes
+//-----------------------------------------------------------------------------
+struct RemoteStorageFileReadAsyncComplete_t
+{
+ enum { k_iCallback = k_iClientRemoteStorageCallbacks + 32 };
+ SteamAPICall_t m_hFileReadAsync; // call handle of the async read which was made
+ EResult m_eResult; // result
+ uint32 m_nOffset; // offset in the file this read was at
+ uint32 m_cubRead; // amount read - will the <= the amount requested
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMREMOTESTORAGE_H
diff --git a/lsteamclient/steamworks_sdk_142/isteamscreenshots.h b/lsteamclient/steamworks_sdk_142/isteamscreenshots.h
new file mode 100644
index 00000000..653b28a4
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamscreenshots.h
@@ -0,0 +1,116 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: public interface to user remote file storage in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMSCREENSHOTS_H
+#define ISTEAMSCREENSHOTS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+const uint32 k_nScreenshotMaxTaggedUsers = 32;
+const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32;
+const int k_cubUFSTagTypeMax = 255;
+const int k_cubUFSTagValueMax = 255;
+
+// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail
+// one will be generated.
+const int k_ScreenshotThumbWidth = 200;
+
+// Handle is valid for the lifetime of your process and no longer
+typedef uint32 ScreenshotHandle;
+#define INVALID_SCREENSHOT_HANDLE 0
+
+enum EVRScreenshotType
+{
+ k_EVRScreenshotType_None = 0,
+ k_EVRScreenshotType_Mono = 1,
+ k_EVRScreenshotType_Stereo = 2,
+ k_EVRScreenshotType_MonoCubemap = 3,
+ k_EVRScreenshotType_MonoPanorama = 4,
+ k_EVRScreenshotType_StereoPanorama = 5
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for adding screenshots to the user's screenshot library
+//-----------------------------------------------------------------------------
+class ISteamScreenshots
+{
+public:
+ // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0;
+
+ // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio
+ // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format.
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0;
+
+ // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead.
+ virtual void TriggerScreenshot() = 0;
+
+ // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots,
+ // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary
+ // in response.
+ virtual void HookScreenshots( bool bHook ) = 0;
+
+ // Sets metadata about a screenshot's location (for example, the name of the map)
+ virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0;
+
+ // Tags a user as being visible in the screenshot
+ virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0;
+
+ // Tags a published file as being visible in the screenshot
+ virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0;
+
+ // Returns true if the app has hooked the screenshot
+ virtual bool IsScreenshotsHooked() = 0;
+
+ // Adds a VR screenshot to the user's screenshot library from disk in the supported type.
+ // pchFilename should be the normal 2D image used in the library view
+ // pchVRFilename should contain the image that matches the correct type
+ // The return value is a handle that is valid for the duration of the game process and can be used to apply tags.
+ // JPEG, TGA, and PNG formats are supported.
+ virtual ScreenshotHandle AddVRScreenshotToLibrary( EVRScreenshotType eType, const char *pchFilename, const char *pchVRFilename ) = 0;
+};
+
+#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION003"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot successfully written or otherwise added to the library
+// and can now be tagged
+//-----------------------------------------------------------------------------
+struct ScreenshotReady_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 };
+ ScreenshotHandle m_hLocal;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Screenshot has been requested by the user. Only sent if
+// HookScreenshots() has been called, in which case Steam will not take
+// the screenshot itself.
+//-----------------------------------------------------------------------------
+struct ScreenshotRequested_t
+{
+ enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 };
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMSCREENSHOTS_H
+
diff --git a/lsteamclient/steamworks_sdk_142/isteamugc.h b/lsteamclient/steamworks_sdk_142/isteamugc.h
new file mode 100644
index 00000000..fec311d7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamugc.h
@@ -0,0 +1,545 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to steam ugc
+//
+//=============================================================================
+
+#ifndef ISTEAMUGC_H
+#define ISTEAMUGC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+
+
+const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull;
+const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull;
+
+
+// Matching UGC types for queries
+enum EUGCMatchingUGCType
+{
+ k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items
+ k_EUGCMatchingUGCType_Items_Mtx = 1,
+ k_EUGCMatchingUGCType_Items_ReadyToUse = 2,
+ k_EUGCMatchingUGCType_Collections = 3,
+ k_EUGCMatchingUGCType_Artwork = 4,
+ k_EUGCMatchingUGCType_Videos = 5,
+ k_EUGCMatchingUGCType_Screenshots = 6,
+ k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides
+ k_EUGCMatchingUGCType_WebGuides = 8,
+ k_EUGCMatchingUGCType_IntegratedGuides = 9,
+ k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides
+ k_EUGCMatchingUGCType_ControllerBindings = 11,
+ k_EUGCMatchingUGCType_GameManagedItems = 12, // game managed items (not managed by users)
+ k_EUGCMatchingUGCType_All = ~0, // return everything
+};
+
+// Different lists of published UGC for a user.
+// If the current logged in user is different than the specified user, then some options may not be allowed.
+enum EUserUGCList
+{
+ k_EUserUGCList_Published,
+ k_EUserUGCList_VotedOn,
+ k_EUserUGCList_VotedUp,
+ k_EUserUGCList_VotedDown,
+ k_EUserUGCList_WillVoteLater,
+ k_EUserUGCList_Favorited,
+ k_EUserUGCList_Subscribed,
+ k_EUserUGCList_UsedOrPlayed,
+ k_EUserUGCList_Followed,
+};
+
+// Sort order for user published UGC lists (defaults to creation order descending)
+enum EUserUGCListSortOrder
+{
+ k_EUserUGCListSortOrder_CreationOrderDesc,
+ k_EUserUGCListSortOrder_CreationOrderAsc,
+ k_EUserUGCListSortOrder_TitleAsc,
+ k_EUserUGCListSortOrder_LastUpdatedDesc,
+ k_EUserUGCListSortOrder_SubscriptionDateDesc,
+ k_EUserUGCListSortOrder_VoteScoreDesc,
+ k_EUserUGCListSortOrder_ForModeration,
+};
+
+// Combination of sorting and filtering for queries across all UGC
+enum EUGCQuery
+{
+ k_EUGCQuery_RankedByVote = 0,
+ k_EUGCQuery_RankedByPublicationDate = 1,
+ k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2,
+ k_EUGCQuery_RankedByTrend = 3,
+ k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4,
+ k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5,
+ k_EUGCQuery_RankedByNumTimesReported = 6,
+ k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7,
+ k_EUGCQuery_NotYetRated = 8,
+ k_EUGCQuery_RankedByTotalVotesAsc = 9,
+ k_EUGCQuery_RankedByVotesUp = 10,
+ k_EUGCQuery_RankedByTextSearch = 11,
+ k_EUGCQuery_RankedByTotalUniqueSubscriptions = 12,
+ k_EUGCQuery_RankedByPlaytimeTrend = 13,
+ k_EUGCQuery_RankedByTotalPlaytime = 14,
+ k_EUGCQuery_RankedByAveragePlaytimeTrend = 15,
+ k_EUGCQuery_RankedByLifetimeAveragePlaytime = 16,
+ k_EUGCQuery_RankedByPlaytimeSessionsTrend = 17,
+ k_EUGCQuery_RankedByLifetimePlaytimeSessions = 18,
+};
+
+enum EItemUpdateStatus
+{
+ k_EItemUpdateStatusInvalid = 0, // The item update handle was invalid, job might be finished, listen too SubmitItemUpdateResult_t
+ k_EItemUpdateStatusPreparingConfig = 1, // The item update is processing configuration data
+ k_EItemUpdateStatusPreparingContent = 2, // The item update is reading and processing content files
+ k_EItemUpdateStatusUploadingContent = 3, // The item update is uploading content changes to Steam
+ k_EItemUpdateStatusUploadingPreviewFile = 4, // The item update is uploading new preview file image
+ k_EItemUpdateStatusCommittingChanges = 5 // The item update is committing all changes
+};
+
+enum EItemState
+{
+ k_EItemStateNone = 0, // item not tracked on client
+ k_EItemStateSubscribed = 1, // current user is subscribed to this item. Not just cached.
+ k_EItemStateLegacyItem = 2, // item was created with ISteamRemoteStorage
+ k_EItemStateInstalled = 4, // item is installed and usable (but maybe out of date)
+ k_EItemStateNeedsUpdate = 8, // items needs an update. Either because it's not installed yet or creator updated content
+ k_EItemStateDownloading = 16, // item update is currently downloading
+ k_EItemStateDownloadPending = 32, // DownloadItem() was called for this item, content isn't available until DownloadItemResult_t is fired
+};
+
+enum EItemStatistic
+{
+ k_EItemStatistic_NumSubscriptions = 0,
+ k_EItemStatistic_NumFavorites = 1,
+ k_EItemStatistic_NumFollowers = 2,
+ k_EItemStatistic_NumUniqueSubscriptions = 3,
+ k_EItemStatistic_NumUniqueFavorites = 4,
+ k_EItemStatistic_NumUniqueFollowers = 5,
+ k_EItemStatistic_NumUniqueWebsiteViews = 6,
+ k_EItemStatistic_ReportScore = 7,
+ k_EItemStatistic_NumSecondsPlayed = 8,
+ k_EItemStatistic_NumPlaytimeSessions = 9,
+ k_EItemStatistic_NumComments = 10,
+ k_EItemStatistic_NumSecondsPlayedDuringTimePeriod = 11,
+ k_EItemStatistic_NumPlaytimeSessionsDuringTimePeriod = 12,
+};
+
+enum EItemPreviewType
+{
+ k_EItemPreviewType_Image = 0, // standard image file expected (e.g. jpg, png, gif, etc.)
+ k_EItemPreviewType_YouTubeVideo = 1, // video id is stored
+ k_EItemPreviewType_Sketchfab = 2, // model id is stored
+ k_EItemPreviewType_EnvironmentMap_HorizontalCross = 3, // standard image file expected - cube map in the layout
+ // +---+---+-------+
+ // | |Up | |
+ // +---+---+---+---+
+ // | L | F | R | B |
+ // +---+---+---+---+
+ // | |Dn | |
+ // +---+---+---+---+
+ k_EItemPreviewType_EnvironmentMap_LatLong = 4, // standard image file expected
+ k_EItemPreviewType_ReservedMax = 255, // you can specify your own types above this value
+};
+
+const uint32 kNumUGCResultsPerPage = 50;
+const uint32 k_cchDeveloperMetadataMax = 5000;
+
+// Details for a single published file/UGC
+struct SteamUGCDetails_t
+{
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult; // The result of the operation.
+ EWorkshopFileType m_eFileType; // Type of the file
+ AppId_t m_nCreatorAppID; // ID of the app that created this file.
+ AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
+ char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document
+ char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document
+ uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content.
+ uint32 m_rtimeCreated; // time when the published file was created
+ uint32 m_rtimeUpdated; // time when the published file was last updated
+ uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
+ ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
+ bool m_bBanned; // whether the file was banned
+ bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
+ bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
+ char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file
+ // file/url information
+ UGCHandle_t m_hFile; // The handle of the primary file
+ UGCHandle_t m_hPreviewFile; // The handle of the preview file
+ char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file
+ int32 m_nFileSize; // Size of the primary file
+ int32 m_nPreviewFileSize; // Size of the preview file
+ char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website)
+ // voting information
+ uint32 m_unVotesUp; // number of votes up
+ uint32 m_unVotesDown; // number of votes down
+ float m_flScore; // calculated score
+ // collection details
+ uint32 m_unNumChildren;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam UGC support API
+//-----------------------------------------------------------------------------
+class ISteamUGC
+{
+public:
+
+ // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1.
+ virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0;
+
+ // Query for the details of the given published file ids (the RequestUGCDetails call is deprecated and replaced with this)
+ virtual UGCQueryHandle_t CreateQueryUGCDetailsRequest( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+
+ // Send the query to Steam
+ CALL_RESULT( SteamUGCQueryCompleted_t )
+ virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Retrieve an individual result after receiving the callback for querying UGC
+ virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0;
+ virtual bool GetQueryUGCPreviewURL( UGCQueryHandle_t handle, uint32 index, OUT_STRING_COUNT(cchURLSize) char *pchURL, uint32 cchURLSize ) = 0;
+ virtual bool GetQueryUGCMetadata( UGCQueryHandle_t handle, uint32 index, OUT_STRING_COUNT(cchMetadatasize) char *pchMetadata, uint32 cchMetadatasize ) = 0;
+ virtual bool GetQueryUGCChildren( UGCQueryHandle_t handle, uint32 index, PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0;
+ virtual bool GetQueryUGCStatistic( UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint64 *pStatValue ) = 0;
+ virtual uint32 GetQueryUGCNumAdditionalPreviews( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCAdditionalPreview( UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, OUT_STRING_COUNT(cchURLSize) char *pchURLOrVideoID, uint32 cchURLSize, OUT_STRING_COUNT(cchURLSize) char *pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType *pPreviewType ) = 0;
+ virtual uint32 GetQueryUGCNumKeyValueTags( UGCQueryHandle_t handle, uint32 index ) = 0;
+ virtual bool GetQueryUGCKeyValueTag( UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, OUT_STRING_COUNT(cchKeySize) char *pchKey, uint32 cchKeySize, OUT_STRING_COUNT(cchValueSize) char *pchValue, uint32 cchValueSize ) = 0;
+
+ // Release the request to free up memory, after retrieving results
+ virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0;
+
+ // Options to set for querying UGC
+ virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0;
+ virtual bool SetReturnOnlyIDs( UGCQueryHandle_t handle, bool bReturnOnlyIDs ) = 0;
+ virtual bool SetReturnKeyValueTags( UGCQueryHandle_t handle, bool bReturnKeyValueTags ) = 0;
+ virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0;
+ virtual bool SetReturnMetadata( UGCQueryHandle_t handle, bool bReturnMetadata ) = 0;
+ virtual bool SetReturnChildren( UGCQueryHandle_t handle, bool bReturnChildren ) = 0;
+ virtual bool SetReturnAdditionalPreviews( UGCQueryHandle_t handle, bool bReturnAdditionalPreviews ) = 0;
+ virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0;
+ virtual bool SetReturnPlaytimeStats( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+ virtual bool SetLanguage( UGCQueryHandle_t handle, const char *pchLanguage ) = 0;
+ virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0;
+
+ // Options only for querying user UGC
+ virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0;
+
+ // Options only for querying all UGC
+ virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0;
+ virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0;
+ virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0;
+ virtual bool AddRequiredKeyValueTag( UGCQueryHandle_t handle, const char *pKey, const char *pValue ) = 0;
+
+ // DEPRECATED - Use CreateQueryUGCDetailsRequest call above instead!
+ virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0;
+
+ // Steam Workshop Creator API
+ CALL_RESULT( CreateItemResult_t )
+ virtual SteamAPICall_t CreateItem( AppId_t nConsumerAppId, EWorkshopFileType eFileType ) = 0; // create new item for this app with no content attached yet
+
+ virtual UGCUpdateHandle_t StartItemUpdate( AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID ) = 0; // start an UGC item update. Set changed properties before commiting update with CommitItemUpdate()
+
+ virtual bool SetItemTitle( UGCUpdateHandle_t handle, const char *pchTitle ) = 0; // change the title of an UGC item
+ virtual bool SetItemDescription( UGCUpdateHandle_t handle, const char *pchDescription ) = 0; // change the description of an UGC item
+ virtual bool SetItemUpdateLanguage( UGCUpdateHandle_t handle, const char *pchLanguage ) = 0; // specify the language of the title or description that will be set
+ virtual bool SetItemMetadata( UGCUpdateHandle_t handle, const char *pchMetaData ) = 0; // change the metadata of an UGC item (max = k_cchDeveloperMetadataMax)
+ virtual bool SetItemVisibility( UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item
+ virtual bool SetItemTags( UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item
+ virtual bool SetItemContent( UGCUpdateHandle_t handle, const char *pszContentFolder ) = 0; // update item content from this local folder
+ virtual bool SetItemPreview( UGCUpdateHandle_t handle, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file, which must be under 1MB in size
+ virtual bool RemoveItemKeyValueTags( UGCUpdateHandle_t handle, const char *pchKey ) = 0; // remove any existing key-value tags with the specified key
+ virtual bool AddItemKeyValueTag( UGCUpdateHandle_t handle, const char *pchKey, const char *pchValue ) = 0; // add new key-value tags for the item. Note that there can be multiple values for a tag.
+ virtual bool AddItemPreviewFile( UGCUpdateHandle_t handle, const char *pszPreviewFile, EItemPreviewType type ) = 0; // add preview file for this item. pszPreviewFile points to local file, which must be under 1MB in size
+ virtual bool AddItemPreviewVideo( UGCUpdateHandle_t handle, const char *pszVideoID ) = 0; // add preview video for this item
+ virtual bool UpdateItemPreviewFile( UGCUpdateHandle_t handle, uint32 index, const char *pszPreviewFile ) = 0; // updates an existing preview file for this item. pszPreviewFile points to local file, which must be under 1MB in size
+ virtual bool UpdateItemPreviewVideo( UGCUpdateHandle_t handle, uint32 index, const char *pszVideoID ) = 0; // updates an existing preview video for this item
+ virtual bool RemoveItemPreview( UGCUpdateHandle_t handle, uint32 index ) = 0; // remove a preview by index starting at 0 (previews are sorted)
+
+ CALL_RESULT( SubmitItemUpdateResult_t )
+ virtual SteamAPICall_t SubmitItemUpdate( UGCUpdateHandle_t handle, const char *pchChangeNote ) = 0; // commit update process started with StartItemUpdate()
+ virtual EItemUpdateStatus GetItemUpdateProgress( UGCUpdateHandle_t handle, uint64 *punBytesProcessed, uint64* punBytesTotal ) = 0;
+
+ // Steam Workshop Consumer API
+ CALL_RESULT( SetUserItemVoteResult_t )
+ virtual SteamAPICall_t SetUserItemVote( PublishedFileId_t nPublishedFileID, bool bVoteUp ) = 0;
+ CALL_RESULT( GetUserItemVoteResult_t )
+ virtual SteamAPICall_t GetUserItemVote( PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( UserFavoriteItemsListChanged_t )
+ virtual SteamAPICall_t AddItemToFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( UserFavoriteItemsListChanged_t )
+ virtual SteamAPICall_t RemoveItemFromFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0;
+ CALL_RESULT( RemoteStorageSubscribePublishedFileResult_t )
+ virtual SteamAPICall_t SubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // subscribe to this item, will be installed ASAP
+ CALL_RESULT( RemoteStorageUnsubscribePublishedFileResult_t )
+ virtual SteamAPICall_t UnsubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // unsubscribe from this item, will be uninstalled after game quits
+ virtual uint32 GetNumSubscribedItems() = 0; // number of subscribed items
+ virtual uint32 GetSubscribedItems( PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; // all subscribed item PublishFileIDs
+
+ // get EItemState flags about item on this client
+ virtual uint32 GetItemState( PublishedFileId_t nPublishedFileID ) = 0;
+
+ // get info about currently installed content on disc for items that have k_EItemStateInstalled set
+ // if k_EItemStateLegacyItem is set, pchFolder contains the path to the legacy file itself (not a folder)
+ virtual bool GetItemInstallInfo( PublishedFileId_t nPublishedFileID, uint64 *punSizeOnDisk, OUT_STRING_COUNT( cchFolderSize ) char *pchFolder, uint32 cchFolderSize, uint32 *punTimeStamp ) = 0;
+
+ // get info about pending update for items that have k_EItemStateNeedsUpdate set. punBytesTotal will be valid after download started once
+ virtual bool GetItemDownloadInfo( PublishedFileId_t nPublishedFileID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0;
+
+ // download new or update already installed item. If function returns true, wait for DownloadItemResult_t. If the item is already installed,
+ // then files on disk should not be used until callback received. If item is not subscribed to, it will be cached for some time.
+ // If bHighPriority is set, any other item download will be suspended and this item downloaded ASAP.
+ virtual bool DownloadItem( PublishedFileId_t nPublishedFileID, bool bHighPriority ) = 0;
+
+ // game servers can set a specific workshop folder before issuing any UGC commands.
+ // This is helpful if you want to support multiple game servers running out of the same install folder
+ virtual bool BInitWorkshopForGameServer( DepotId_t unWorkshopDepotID, const char *pszFolder ) = 0;
+
+ // SuspendDownloads( true ) will suspend all workshop downloads until SuspendDownloads( false ) is called or the game ends
+ virtual void SuspendDownloads( bool bSuspend ) = 0;
+
+ // usage tracking
+ CALL_RESULT( StartPlaytimeTrackingResult_t )
+ virtual SteamAPICall_t StartPlaytimeTracking( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+ CALL_RESULT( StopPlaytimeTrackingResult_t )
+ virtual SteamAPICall_t StopPlaytimeTracking( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0;
+ CALL_RESULT( StopPlaytimeTrackingResult_t )
+ virtual SteamAPICall_t StopPlaytimeTrackingForAllItems() = 0;
+
+ // parent-child relationship or dependency management
+ CALL_RESULT( AddUGCDependencyResult_t )
+ virtual SteamAPICall_t AddDependency( PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID ) = 0;
+ CALL_RESULT( RemoveUGCDependencyResult_t )
+ virtual SteamAPICall_t RemoveDependency( PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID ) = 0;
+
+ // add/remove app dependence/requirements (usually DLC)
+ CALL_RESULT( AddAppDependencyResult_t )
+ virtual SteamAPICall_t AddAppDependency( PublishedFileId_t nPublishedFileID, AppId_t nAppID ) = 0;
+ CALL_RESULT( RemoveAppDependencyResult_t )
+ virtual SteamAPICall_t RemoveAppDependency( PublishedFileId_t nPublishedFileID, AppId_t nAppID ) = 0;
+ // request app dependencies. note that whatever callback you register for GetAppDependenciesResult_t may be called multiple times
+ // until all app dependencies have been returned
+ CALL_RESULT( GetAppDependenciesResult_t )
+ virtual SteamAPICall_t GetAppDependencies( PublishedFileId_t nPublishedFileID ) = 0;
+
+ // delete the item without prompting the user
+ CALL_RESULT( DeleteItemResult_t )
+ virtual SteamAPICall_t DeleteItem( PublishedFileId_t nPublishedFileID ) = 0;
+};
+
+#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION010"
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for querying UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCQueryCompleted_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 1 };
+ UGCQueryHandle_t m_handle;
+ EResult m_eResult;
+ uint32 m_unNumResultsReturned;
+ uint32 m_unTotalMatchingResults;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback for requesting details on one piece of UGC
+//-----------------------------------------------------------------------------
+struct SteamUGCRequestUGCDetailsResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 2 };
+ SteamUGCDetails_t m_details;
+ bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::CreateItem()
+//-----------------------------------------------------------------------------
+struct CreateItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 3 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId; // new item got this UGC PublishFileID
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result for ISteamUGC::SubmitItemUpdate()
+//-----------------------------------------------------------------------------
+struct SubmitItemUpdateResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 4 };
+ EResult m_eResult;
+ bool m_bUserNeedsToAcceptWorkshopLegalAgreement;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: a Workshop item has been installed or updated
+//-----------------------------------------------------------------------------
+struct ItemInstalled_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 5 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of DownloadItem(), existing item files can be accessed again
+//-----------------------------------------------------------------------------
+struct DownloadItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 6 };
+ AppId_t m_unAppID;
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: result of AddItemToFavorites() or RemoveItemFromFavorites()
+//-----------------------------------------------------------------------------
+struct UserFavoriteItemsListChanged_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 7 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bWasAddRequest;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to SetUserItemVote()
+//-----------------------------------------------------------------------------
+struct SetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 8 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVoteUp;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetUserItemVote()
+//-----------------------------------------------------------------------------
+struct GetUserItemVoteResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 9 };
+ PublishedFileId_t m_nPublishedFileId;
+ EResult m_eResult;
+ bool m_bVotedUp;
+ bool m_bVotedDown;
+ bool m_bVoteSkipped;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to StartPlaytimeTracking()
+//-----------------------------------------------------------------------------
+struct StartPlaytimeTrackingResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 10 };
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to StopPlaytimeTracking()
+//-----------------------------------------------------------------------------
+struct StopPlaytimeTrackingResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 11 };
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to AddDependency
+//-----------------------------------------------------------------------------
+struct AddUGCDependencyResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 12 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ PublishedFileId_t m_nChildPublishedFileId;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to RemoveDependency
+//-----------------------------------------------------------------------------
+struct RemoveUGCDependencyResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 13 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ PublishedFileId_t m_nChildPublishedFileId;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to AddAppDependency
+//-----------------------------------------------------------------------------
+struct AddAppDependencyResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 14 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nAppID;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to RemoveAppDependency
+//-----------------------------------------------------------------------------
+struct RemoveAppDependencyResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 15 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_nAppID;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to GetAppDependencies. Callback may be called
+// multiple times until all app dependencies have been returned.
+//-----------------------------------------------------------------------------
+struct GetAppDependenciesResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 16 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+ AppId_t m_rgAppIDs[32];
+ uint32 m_nNumAppDependencies; // number returned in this struct
+ uint32 m_nTotalNumAppDependencies; // total found
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The result of a call to DeleteItem
+//-----------------------------------------------------------------------------
+struct DeleteItemResult_t
+{
+ enum { k_iCallback = k_iClientUGCCallbacks + 17 };
+ EResult m_eResult;
+ PublishedFileId_t m_nPublishedFileId;
+};
+
+#pragma pack( pop )
+
+#endif // ISTEAMUGC_H
diff --git a/lsteamclient/steamworks_sdk_142/isteamuser.h b/lsteamclient/steamworks_sdk_142/isteamuser.h
new file mode 100644
index 00000000..6d1309b7
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamuser.h
@@ -0,0 +1,369 @@
+//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to user account information in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUSER_H
+#define ISTEAMUSER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// structure that contains client callback data
+// see callbacks documentation for more details
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+struct CallbackMsg_t
+{
+ HSteamUser m_hSteamUser;
+ int m_iCallback;
+ uint8 *m_pubParam;
+ int m_cubParam;
+};
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing and manipulating a steam account
+// associated with one client instance
+//-----------------------------------------------------------------------------
+class ISteamUser
+{
+public:
+ // returns the HSteamUser this interface represents
+ // this is only used internally by the API, and by a few select interfaces that support multi-user
+ virtual HSteamUser GetHSteamUser() = 0;
+
+ // returns true if the Steam client current has a live connection to the Steam servers.
+ // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy.
+ // The Steam client will automatically be trying to recreate the connection as often as possible.
+ virtual bool BLoggedOn() = 0;
+
+ // returns the CSteamID of the account currently logged into the Steam client
+ // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API
+ virtual CSteamID GetSteamID() = 0;
+
+ // Multiplayer Authentication functions
+
+ // InitiateGameConnection() starts the state machine for authenticating the game client with the game server
+ // It is the client portion of a three-way handshake between the client, the game server, and the steam servers
+ //
+ // Parameters:
+ // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token.
+ // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes.
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( <appID> )
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running)
+ //
+ // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed
+ // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process.
+ virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0;
+
+ // notify of disconnect
+ // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call
+ virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Legacy functions
+
+ // used by only a few games to track usage events
+ virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0;
+
+ // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc.
+ // this will usually be something like "C:\Progam Files\Steam\userdata\<SteamID>\<AppID>\local"
+ virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0;
+
+ // Starts voice recording. Once started, use GetVoice() to get the data
+ virtual void StartVoiceRecording( ) = 0;
+
+ // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for
+ // a little bit after this function is called. GetVoice() should continue to be called until it returns
+ // k_eVoiceResultNotRecording
+ virtual void StopVoiceRecording( ) = 0;
+
+ // Determine the size of captured audio data that is available from GetVoice.
+ // Most applications will only use compressed data and should ignore the other
+ // parameters, which exist primarily for backwards compatibility. See comments
+ // below for further explanation of "uncompressed" data.
+ virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed_Deprecated = 0, uint32 nUncompressedVoiceDesiredSampleRate_Deprecated = 0 ) = 0;
+
+ // ---------------------------------------------------------------------------
+ // NOTE: "uncompressed" audio is a deprecated feature and should not be used
+ // by most applications. It is raw single-channel 16-bit PCM wave data which
+ // may have been run through preprocessing filters and/or had silence removed,
+ // so the uncompressed audio could have a shorter duration than you expect.
+ // There may be no data at all during long periods of silence. Also, fetching
+ // uncompressed audio will cause GetVoice to discard any leftover compressed
+ // audio, so you must fetch both types at once. Finally, GetAvailableVoice is
+ // not precisely accurate when the uncompressed size is requested. So if you
+ // really need to use uncompressed audio, you should call GetVoice frequently
+ // with two very large (20kb+) output buffers instead of trying to allocate
+ // perfectly-sized buffers. But most applications should ignore all of these
+ // details and simply leave the "uncompressed" parameters as NULL/zero.
+ // ---------------------------------------------------------------------------
+
+ // Read captured audio data from the microphone buffer. This should be called
+ // at least once per frame, and preferably every few milliseconds, to keep the
+ // microphone input delay as low as possible. Most applications will only use
+ // compressed data and should pass NULL/zero for the "uncompressed" parameters.
+ // Compressed data can be transmitted by your application and decoded into raw
+ // using the DecompressVoice function below.
+ virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed_Deprecated = false, void *pUncompressedDestBuffer_Deprecated = 0, uint32 cbUncompressedDestBufferSize_Deprecated = 0, uint32 *nUncompressBytesWritten_Deprecated = 0, uint32 nUncompressedVoiceDesiredSampleRate_Deprecated = 0 ) = 0;
+
+ // Decodes the compressed voice data returned by GetVoice. The output data is
+ // raw single-channel 16-bit PCM audio. The decoder supports any sample rate
+ // from 11025 to 48000; see GetVoiceOptimalSampleRate() below for details.
+ // If the output buffer is not large enough, then *nBytesWritten will be set
+ // to the required buffer size, and k_EVoiceResultBufferTooSmall is returned.
+ // It is suggested to start with a 20kb buffer and reallocate as necessary.
+ virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0;
+
+ // This returns the native sample rate of the Steam voice decompressor; using
+ // this sample rate for DecompressVoice will perform the least CPU processing.
+ // However, the final audio quality will depend on how well the audio device
+ // (and/or your application's audio output SDK) deals with lower sample rates.
+ // You may find that you get the best audio output quality when you ignore
+ // this function and use the native sample rate of your audio output device,
+ // which is usually 48000 or 44100.
+ virtual uint32 GetVoiceOptimalSampleRate() = 0;
+
+ // Retrieve ticket to be sent to the entity who wishes to authenticate you.
+ // pcbTicket retrieves the length of the actual ticket.
+ virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Authenticate ticket from entity steamID to be sure it is valid and isnt reused
+ // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse )
+ virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0;
+
+ // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity
+ virtual void EndAuthSession( CSteamID steamID ) = 0;
+
+ // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to
+ virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0;
+
+ // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function
+ // to determine if the user owns downloadable content specified by the provided AppID.
+ virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0;
+
+ // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam
+ // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT.
+ virtual bool BIsBehindNAT() = 0;
+
+ // set data to be replicated to friends so that they can join your game
+ // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client
+ // uint32 unIPServer, uint16 usPortServer - the IP address of the game server
+ virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0;
+
+ // Requests a ticket encrypted with an app specific shared key
+ // pDataToInclude, cbDataToInclude will be encrypted into the ticket
+ // ( This is asynchronous, you must wait for the ticket to be completed by the server )
+ CALL_RESULT( EncryptedAppTicketResponse_t )
+ virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0;
+
+ // retrieve a finished ticket
+ virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0;
+
+ // Trading Card badges data access
+ // if you only have one set of cards, the series will be 1
+ // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1)
+ virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0;
+
+ // gets the Steam Level of the user, as shown on their profile
+ virtual int GetPlayerSteamLevel() = 0;
+
+ // Requests a URL which authenticates an in-game browser for store check-out,
+ // and then redirects to the specified URL. As long as the in-game browser
+ // accepts and handles session cookies, Steam microtransaction checkout pages
+ // will automatically recognize the user instead of presenting a login page.
+ // The result of this API call will be a StoreAuthURLResponse_t callback.
+ // NOTE: The URL has a very short lifetime to prevent history-snooping attacks,
+ // so you should only call this API when you are about to launch the browser,
+ // or else immediately navigate to the result URL using a hidden browser window.
+ // NOTE 2: The resulting authorization cookie has an expiration time of one day,
+ // so it would be a good idea to request and visit a new auth URL every 12 hours.
+ CALL_RESULT( StoreAuthURLResponse_t )
+ virtual SteamAPICall_t RequestStoreAuthURL( const char *pchRedirectURL ) = 0;
+
+ // gets whether the users phone number is verified
+ virtual bool BIsPhoneVerified() = 0;
+
+ // gets whether the user has two factor enabled on their account
+ virtual bool BIsTwoFactorEnabled() = 0;
+
+ // gets whether the users phone number is identifying
+ virtual bool BIsPhoneIdentifying() = 0;
+
+ // gets whether the users phone number is awaiting (re)verification
+ virtual bool BIsPhoneRequiringVerification() = 0;
+
+};
+
+#define STEAMUSER_INTERFACE_VERSION "SteamUser019"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connections to the Steam back-end has been established
+// this means the Steam client now has a working connection to the Steam servers
+// usually this will have occurred before the game has launched, and should
+// only be seen if the user has dropped connection due to a networking issue
+// or a Steam server update
+//-----------------------------------------------------------------------------
+struct SteamServersConnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 1 };
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a connection attempt has failed
+// this will occur periodically if the Steam client is not connected,
+// and has failed in it's retry to establish a connection
+//-----------------------------------------------------------------------------
+struct SteamServerConnectFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 2 };
+ EResult m_eResult;
+ bool m_bStillRetrying;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called if the client has lost connection to the Steam servers
+// real-time services will be disabled until a matching SteamServersConnected_t has been posted
+//-----------------------------------------------------------------------------
+struct SteamServersDisconnected_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 3 };
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server,
+// which it may be in the process of or already connected to.
+// The game client should immediately disconnect upon receiving this message.
+// This can usually occur if the user doesn't have rights to play on the game server.
+//-----------------------------------------------------------------------------
+struct ClientGameServerDeny_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 13 };
+
+ uint32 m_uAppID;
+ uint32 m_unGameServerIP;
+ uint16 m_usGameServerPort;
+ uint16 m_bSecure;
+ uint32 m_uReason;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks)
+// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect.
+// This usually occurs in the rare event the Steam client has some kind of fatal error.
+//-----------------------------------------------------------------------------
+struct IPCFailure_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 17 };
+ enum EFailureType
+ {
+ k_EFailureFlushedCallbackQueue,
+ k_EFailurePipeFail,
+ };
+ uint8 m_eFailureType;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Signaled whenever licenses change
+//-----------------------------------------------------------------------------
+struct LicensesUpdated_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 25 };
+};
+
+
+//-----------------------------------------------------------------------------
+// callback for BeginAuthSession
+//-----------------------------------------------------------------------------
+struct ValidateAuthTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 43 };
+ CSteamID m_SteamID;
+ EAuthSessionResponse m_eAuthSessionResponse;
+ CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a user has responded to a microtransaction authorization request
+//-----------------------------------------------------------------------------
+struct MicroTxnAuthorizationResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 52 };
+
+ uint32 m_unAppID; // AppID for this microtransaction
+ uint64 m_ulOrderID; // OrderID provided for the microtransaction
+ uint8 m_bAuthorized; // if user authorized transaction
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Result from RequestEncryptedAppTicket
+//-----------------------------------------------------------------------------
+struct EncryptedAppTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 54 };
+
+ EResult m_eResult;
+};
+
+//-----------------------------------------------------------------------------
+// callback for GetAuthSessionTicket
+//-----------------------------------------------------------------------------
+struct GetAuthSessionTicketResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 63 };
+ HAuthTicket m_hAuthTicket;
+ EResult m_eResult;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to a steam://gamewebcallback/ command
+//-----------------------------------------------------------------------------
+struct GameWebCallback_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 64 };
+ char m_szURL[256];
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: sent to your game in response to ISteamUser::RequestStoreAuthURL
+//-----------------------------------------------------------------------------
+struct StoreAuthURLResponse_t
+{
+ enum { k_iCallback = k_iSteamUserCallbacks + 65 };
+ char m_szURL[512];
+};
+
+
+
+#pragma pack( pop )
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_142/isteamuserstats.h b/lsteamclient/steamworks_sdk_142/isteamuserstats.h
new file mode 100644
index 00000000..8bb42697
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamuserstats.h
@@ -0,0 +1,476 @@
+//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to stats, achievements, and leaderboards
+//
+//=============================================================================
+
+#ifndef ISTEAMUSERSTATS_H
+#define ISTEAMUSERSTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamremotestorage.h"
+
+// size limit on stat or achievement name (UTF-8 encoded)
+enum { k_cchStatNameMax = 128 };
+
+// maximum number of bytes for a leaderboard name (UTF-8 encoded)
+enum { k_cchLeaderboardNameMax = 128 };
+
+// maximum number of details int32's storable for a single leaderboard entry
+enum { k_cLeaderboardDetailsMax = 64 };
+
+// handle to a single leaderboard
+typedef uint64 SteamLeaderboard_t;
+
+// handle to a set of downloaded entries in a leaderboard
+typedef uint64 SteamLeaderboardEntries_t;
+
+// type of data request, when downloading leaderboard entries
+enum ELeaderboardDataRequest
+{
+ k_ELeaderboardDataRequestGlobal = 0,
+ k_ELeaderboardDataRequestGlobalAroundUser = 1,
+ k_ELeaderboardDataRequestFriends = 2,
+ k_ELeaderboardDataRequestUsers = 3
+};
+
+// the sort order of a leaderboard
+enum ELeaderboardSortMethod
+{
+ k_ELeaderboardSortMethodNone = 0,
+ k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number
+ k_ELeaderboardSortMethodDescending = 2, // top-score is highest number
+};
+
+// the display type (used by the Steam Community web site) for a leaderboard
+enum ELeaderboardDisplayType
+{
+ k_ELeaderboardDisplayTypeNone = 0,
+ k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score
+ k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds
+ k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds
+};
+
+enum ELeaderboardUploadScoreMethod
+{
+ k_ELeaderboardUploadScoreMethodNone = 0,
+ k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score
+ k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified
+};
+
+// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+struct LeaderboardEntry_t
+{
+ CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
+ int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
+ int32 m_nScore; // score as set in the leaderboard
+ int32 m_cDetails; // number of int32 details available for this entry
+ UGCHandle_t m_hUGC; // handle for UGC attached to the entry
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing stats, achievements, and leaderboard information
+//-----------------------------------------------------------------------------
+class ISteamUserStats
+{
+public:
+ // Ask the server to send down this user's data and achievements for this game
+ CALL_BACK( UserStatsReceived_t )
+ virtual bool RequestCurrentStats() = 0;
+
+ // Data accessors
+ virtual bool GetStat( const char *pchName, int32 *pData ) = 0;
+ virtual bool GetStat( const char *pchName, float *pData ) = 0;
+
+ // Set / update data
+ virtual bool SetStat( const char *pchName, int32 nData ) = 0;
+ virtual bool SetStat( const char *pchName, float fData ) = 0;
+ virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0;
+
+ // Achievement flag accessors
+ virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0;
+ virtual bool SetAchievement( const char *pchName ) = 0;
+ virtual bool ClearAchievement( const char *pchName ) = 0;
+
+ // Get the achievement status, and the time it was unlocked if unlocked.
+ // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam
+ // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970.
+ virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Store the current data on the server, will get a callback when set
+ // And one callback for every new achievement
+ //
+ // If the callback has a result of k_EResultInvalidParam, one or more stats
+ // uploaded has been rejected, either because they broke constraints
+ // or were out of date. In this case the server sends back updated values.
+ // The stats should be re-iterated to keep in sync.
+ virtual bool StoreStats() = 0;
+
+ // Achievement / GroupAchievement metadata
+
+ // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set.
+ // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback
+ // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the
+ // specified achievement.
+ virtual int GetAchievementIcon( const char *pchName ) = 0;
+
+ // Get general attributes for an achievement. Accepts the following keys:
+ // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8)
+ // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden)
+ virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0;
+
+ // Achievement progress - triggers an AchievementProgress callback, that is all.
+ // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that.
+ virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0;
+
+ // Used for iterating achievements. In general games should not need these functions because they should have a
+ // list of existing achievements compiled into them
+ virtual uint32 GetNumAchievements() = 0;
+ // Get achievement name iAchievement in [0,GetNumAchievements)
+ virtual const char *GetAchievementName( uint32 iAchievement ) = 0;
+
+ // Friends stats & achievements
+
+ // downloads stats for the user
+ // returns a UserStatsReceived_t received when completed
+ // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail
+ // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data
+ CALL_RESULT( UserStatsReceived_t )
+ virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0;
+
+ // requests stat information for a user, usable after a successful call to RequestUserStats()
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0;
+ virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0;
+ virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0;
+ // See notes for GetAchievementAndUnlockTime above
+ virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0;
+
+ // Reset stats
+ virtual bool ResetAllStats( bool bAchievementsToo ) = 0;
+
+ // Leaderboard functions
+
+ // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ CALL_RESULT(LeaderboardFindResult_t)
+ virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0;
+
+ // as above, but won't create the leaderboard if it's not found
+ // This call is asynchronous, with the result returned in LeaderboardFindResult_t
+ CALL_RESULT( LeaderboardFindResult_t )
+ virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0;
+
+ // returns the name of a leaderboard
+ virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the total number of entries in a leaderboard, as of the last request
+ virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the sort method of the leaderboard
+ virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // returns the display type of the leaderboard
+ virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0;
+
+ // Asks the Steam back-end for a set of rows in the leaderboard.
+ // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t
+ // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below)
+ // You can ask for more entries than exist, and it will return as many as do exist.
+ // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries]
+ // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate
+ // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after
+ // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user
+ CALL_RESULT( LeaderboardScoresDownloaded_t )
+ virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0;
+ // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers
+ // if a user doesn't have a leaderboard entry, they won't be included in the result
+ // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
+ METHOD_DESC(Downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers)
+ CALL_RESULT( LeaderboardScoresDownloaded_t )
+ virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard,
+ ARRAY_COUNT_D(cUsers, Array of users to retrieve) CSteamID *prgUsers, int cUsers ) = 0;
+
+ // Returns data about a single leaderboard entry
+ // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries
+ // e.g.
+ // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded )
+ // {
+ // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ )
+ // {
+ // LeaderboardEntry_t leaderboardEntry;
+ // int32 details[3]; // we know this is how many we've stored previously
+ // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 );
+ // assert( leaderboardEntry.m_cDetails == 3 );
+ // ...
+ // }
+ // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid
+ virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0;
+
+ // Uploads a user score to the Steam back-end.
+ // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t
+ // Details are extra game-defined information regarding how the user got that score
+ // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list
+ CALL_RESULT( LeaderboardScoreUploaded_t )
+ virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0;
+
+ // Attaches a piece of user generated content the user's entry on a leaderboard.
+ // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare().
+ // This call is asynchronous, with the result returned in LeaderboardUGCSet_t.
+ CALL_RESULT( LeaderboardUGCSet_t )
+ virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0;
+
+ // Retrieves the number of players currently playing your game (online + offline)
+ // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
+ CALL_RESULT( NumberOfCurrentPlayers_t )
+ virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0;
+
+ // Requests that Steam fetch data on the percentage of players who have received each achievement
+ // for the game globally.
+ // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
+ CALL_RESULT( GlobalAchievementPercentagesReady_t )
+ virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0;
+
+ // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch
+ // the next most achieved afterwards. Will return -1 if there is no data on achievement
+ // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback).
+ virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another
+ // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last
+ // achievement has been iterated.
+ virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0;
+
+ // Returns the percentage of users who have achieved the specified achievement.
+ virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0;
+
+ // Requests global stats data, which is available for stats marked as "aggregated".
+ // This call is asynchronous, with the results returned in GlobalStatsReceived_t.
+ // nHistoryDays specifies how many days of day-by-day history to retrieve in addition
+ // to the overall totals. The limit is 60.
+ CALL_RESULT( GlobalStatsReceived_t )
+ virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0;
+
+ // Gets the lifetime totals for an aggregated stat
+ virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0;
+ virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0;
+
+ // Gets history for an aggregated stat. pData will be filled with daily values, starting with today.
+ // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago,
+ // etc. cubData is the size in bytes of the pubData buffer. Returns the number of
+ // elements actually set.
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) int64 *pData, uint32 cubData ) = 0;
+ virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) double *pData, uint32 cubData ) = 0;
+
+#ifdef _PS3
+ // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
+ // callback.
+ virtual bool InstallPS3Trophies() = 0;
+
+ // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
+ // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
+ virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
+
+ // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
+ // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
+ // If you do not have any user data, call this function with pvData = NULL and cubData = 0
+ virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
+
+ // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
+ // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
+ // buffer size.
+ virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
+#endif
+};
+
+#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: called when the latests stats and achievements have been received
+// from the server
+//-----------------------------------------------------------------------------
+struct UserStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // Success / error fetching the stats
+ CSteamID m_steamIDUser; // The user for whom the stats are retrieved for
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the user stats for a game
+//-----------------------------------------------------------------------------
+struct UserStatsStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // success / error
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: result of a request to store the achievements for a game, or an
+// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress
+// are zero, that means the achievement has been fully unlocked.
+//-----------------------------------------------------------------------------
+struct UserAchievementStored_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 };
+
+ uint64 m_nGameID; // Game this is for
+ bool m_bGroupAchievement; // if this is a "group" achievement
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ uint32 m_nCurProgress; // current progress towards the achievement
+ uint32 m_nMaxProgress; // "out of" this many
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardFindResult_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 };
+ SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found
+ uint8 m_bLeaderboardFound; // 0 if no leaderboard found
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoresDownloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 };
+ SteamLeaderboard_t m_hSteamLeaderboard;
+ SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries()
+ int m_cEntryCount; // the number of entries downloaded
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore()
+// use CCallResult<> to map this async result to a member function
+//-----------------------------------------------------------------------------
+struct LeaderboardScoreUploaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+ int32 m_nScore; // the score that was attempted to set
+ uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better
+ int m_nGlobalRankNew; // the new global rank of the user in this leaderboard
+ int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard
+};
+
+struct NumberOfCurrentPlayers_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 };
+ uint8 m_bSuccess; // 1 if the call was successful
+ int32 m_cPlayers; // Number of players currently playing
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that a user's stats have been unloaded.
+// Call RequestUserStats again to access stats for this user
+//-----------------------------------------------------------------------------
+struct UserStatsUnloaded_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 };
+ CSteamID m_steamIDUser; // User whose stats have been unloaded
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that an achievement icon has been fetched
+//-----------------------------------------------------------------------------
+struct UserAchievementIconFetched_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 };
+
+ CGameID m_nGameID; // Game this is for
+ char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement
+ bool m_bAchieved; // Is the icon for the achieved or not achieved version?
+ int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Callback indicating that global achievement percentages are fetched
+//-----------------------------------------------------------------------------
+struct GlobalAchievementPercentagesReady_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 };
+
+ uint64 m_nGameID; // Game this is for
+ EResult m_eResult; // Result of the operation
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC()
+//-----------------------------------------------------------------------------
+struct LeaderboardUGCSet_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 };
+ EResult m_eResult; // The result of the operation
+ SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating that PS3 trophies have been installed
+//-----------------------------------------------------------------------------
+struct PS3TrophiesInstalled_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game these stats are for
+ EResult m_eResult; // The result of the operation
+ uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: callback indicating global stats have been received.
+// Returned as a result of RequestGlobalStats()
+//-----------------------------------------------------------------------------
+struct GlobalStatsReceived_t
+{
+ enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 };
+ uint64 m_nGameID; // Game global stats were requested for
+ EResult m_eResult; // The result of the request
+};
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMUSER_H
diff --git a/lsteamclient/steamworks_sdk_142/isteamutils.h b/lsteamclient/steamworks_sdk_142/isteamutils.h
new file mode 100644
index 00000000..ed79d2cb
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamutils.h
@@ -0,0 +1,264 @@
+//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to utility functions in Steam
+//
+//=============================================================================
+
+#ifndef ISTEAMUTILS_H
+#define ISTEAMUTILS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+
+// Steam API call failure results
+enum ESteamAPICallFailure
+{
+ k_ESteamAPICallFailureNone = -1, // no failure
+ k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away
+ k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken
+ // SteamServersDisconnected_t callback will be sent around the same time
+ // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again
+ k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists
+ k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call
+};
+
+
+// Input modes for the Big Picture gamepad text entry
+enum EGamepadTextInputMode
+{
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1
+};
+
+
+// Controls number of allowed lines for the Big Picture gamepad text entry
+enum EGamepadTextInputLineMode
+{
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+};
+
+
+// function prototype for warning message hook
+#if defined( POSIX )
+#define __cdecl
+#endif
+extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *);
+
+//-----------------------------------------------------------------------------
+// Purpose: interface to user independent utility functions
+//-----------------------------------------------------------------------------
+class ISteamUtils
+{
+public:
+ // return the number of seconds since the user
+ virtual uint32 GetSecondsSinceAppActive() = 0;
+ virtual uint32 GetSecondsSinceComputerActive() = 0;
+
+ // the universe this client is connecting to
+ virtual EUniverse GetConnectedUniverse() = 0;
+
+ // Steam server time. Number of seconds since January 1, 1970, GMT (i.e unix time)
+ virtual uint32 GetServerRealTime() = 0;
+
+ // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database)
+ // e.g "US" or "UK".
+ virtual const char *GetIPCountry() = 0;
+
+ // returns true if the image exists, and valid sizes were filled out
+ virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0;
+
+ // returns true if the image exists, and the buffer was successfully filled out
+ // results are returned in RGBA format
+ // the destination buffer size should be 4 * height * width * sizeof(char)
+ virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0;
+
+ // returns the IP of the reporting server for valve - currently only used in Source engine games
+ virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0;
+
+ // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power
+ virtual uint8 GetCurrentBatteryPower() = 0;
+
+ // returns the appID of the current process
+ virtual uint32 GetAppID() = 0;
+
+ // Sets the position where the overlay instance for the currently calling game should show notifications.
+ // This position is per-game and if this function is called from outside of a game context it will do nothing.
+ virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0;
+
+ // API asynchronous call results
+ // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h)
+ virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0;
+ virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0;
+ virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0;
+
+ // Deprecated. Applications should use SteamAPI_RunCallbacks() instead. Game servers do not need to call this function.
+ STEAM_PRIVATE_API( virtual void RunFrame() = 0; )
+
+ // returns the number of IPC calls made since the last time this function was called
+ // Used for perf debugging so you can understand how many IPC calls your game makes per frame
+ // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
+ // control how often you do them.
+ virtual uint32 GetIPCCallCount() = 0;
+
+ // API warning handling
+ // 'int' is the severity; 0 for msg, 1 for warning
+ // 'const char *' is the text of the message
+ // callbacks will occur directly after the API function is called that generated the warning or message
+ virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;
+
+ // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to
+ // start & hook the game process, so this function will initially return false while the overlay is loading.
+ virtual bool IsOverlayEnabled() = 0;
+
+ // Normally this call is unneeded if your game has a constantly running frame loop that calls the
+ // D3D Present API, or OGL SwapBuffers API every frame.
+ //
+ // However, if you have a game that only refreshes the screen on an event driven basis then that can break
+ // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also
+ // need to Present() to the screen any time an even needing a notification happens or when the overlay is
+ // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present
+ // 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 an executable file has been signed using the public key set on the signing tab
+ // of the partner site, for example to refuse to load modified executable files.
+ // The result is returned in CheckFileSignature_t.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function.
+ // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site.
+ // k_ECheckFileSignatureFileNotFound - The file does not exist on disk.
+ // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match.
+ // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid.
+ CALL_RESULT( CheckFileSignature_t )
+ virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0;
+
+ // Activates the Big Picture text input dialog which only supports gamepad input
+ virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0;
+
+ // Returns previously entered text & length
+ virtual uint32 GetEnteredGamepadTextLength() = 0;
+ virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0;
+
+ // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases
+ virtual const char *GetSteamUILanguage() = 0;
+
+ // returns true if Steam itself is running in VR mode
+ virtual bool IsSteamRunningInVR() = 0;
+
+ // Sets the inset of the overlay notification from the corner specified by SetOverlayNotificationPosition.
+ virtual void SetOverlayNotificationInset( int nHorizontalInset, int nVerticalInset ) = 0;
+
+ // returns true if Steam & the Steam Overlay are running in Big Picture mode
+ // Games much be launched through the Steam client to enable the Big Picture overlay. During development,
+ // a game can be added as a non-steam game to the developers library to test this feature
+ virtual bool IsSteamInBigPictureMode() = 0;
+
+ // ask SteamUI to create and render its OpenVR dashboard
+ virtual void StartVRDashboard() = 0;
+
+ // Returns true if the HMD content will be streamed via Steam In-Home Streaming
+ virtual bool IsVRHeadsetStreamingEnabled() = 0;
+
+ // Set whether the HMD content will be streamed via Steam In-Home Streaming
+ // If this is set to true, then the scene in the HMD headset will be streamed, and remote input will not be allowed.
+ // If this is set to false, then the application window will be streamed instead, and remote input will be allowed.
+ // The default is true unless "VRHeadsetStreaming" "0" is in the extended appinfo for a game.
+ // (this is useful for games that have asymmetric multiplayer gameplay)
+ virtual void SetVRHeadsetStreamingEnabled( bool bEnabled ) = 0;
+};
+
+#define STEAMUTILS_INTERFACE_VERSION "SteamUtils009"
+
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: The country of the user changed
+//-----------------------------------------------------------------------------
+struct IPCountry_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 1 };
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute
+//-----------------------------------------------------------------------------
+struct LowBatteryPower_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 2 };
+ uint8 m_nMinutesBatteryLeft;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: called when a SteamAsyncCall_t has completed (or failed)
+//-----------------------------------------------------------------------------
+struct SteamAPICallCompleted_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 3 };
+ SteamAPICall_t m_hAsyncCall;
+ int m_iCallback;
+ uint32 m_cubParam;
+};
+
+
+//-----------------------------------------------------------------------------
+// called when Steam wants to shutdown
+//-----------------------------------------------------------------------------
+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;
+};
+
+
+// k_iSteamUtilsCallbacks + 13 is taken
+
+
+//-----------------------------------------------------------------------------
+// Big Picture gamepad text input has been closed
+//-----------------------------------------------------------------------------
+struct GamepadTextInputDismissed_t
+{
+ enum { k_iCallback = k_iSteamUtilsCallbacks + 14 };
+ bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input
+ uint32 m_unSubmittedText;
+};
+
+// k_iSteamUtilsCallbacks + 15 is taken
+
+#pragma pack( pop )
+
+#endif // ISTEAMUTILS_H
diff --git a/lsteamclient/steamworks_sdk_142/isteamvideo.h b/lsteamclient/steamworks_sdk_142/isteamvideo.h
new file mode 100644
index 00000000..83041caa
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/isteamvideo.h
@@ -0,0 +1,71 @@
+//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to Steam Video
+//
+//=============================================================================
+
+#ifndef ISTEAMVIDEO_H
+#define ISTEAMVIDEO_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+// callbacks
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+#pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+#pragma pack( push, 8 )
+#else
+#error isteamclient.h must be included
+#endif
+
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Steam Video API
+//-----------------------------------------------------------------------------
+class ISteamVideo
+{
+public:
+
+ // Get a URL suitable for streaming the given Video app ID's video
+ virtual void GetVideoURL( AppId_t unVideoAppID ) = 0;
+
+ // returns true if user is uploading a live broadcast
+ virtual bool IsBroadcasting( int *pnNumViewers ) = 0;
+
+ // Get the OPF Details for 360 Video Playback
+ CALL_BACK( GetOPFSettingsResult_t )
+ virtual void GetOPFSettings( AppId_t unVideoAppID ) = 0;
+ virtual bool GetOPFStringForApp( AppId_t unVideoAppID, char *pchBuffer, int32 *pnBufferSize ) = 0;
+};
+
+#define STEAMVIDEO_INTERFACE_VERSION "STEAMVIDEO_INTERFACE_V002"
+
+DEFINE_CALLBACK( BroadcastUploadStart_t, k_iClientVideoCallbacks + 4 )
+END_DEFINE_CALLBACK_0()
+
+DEFINE_CALLBACK( BroadcastUploadStop_t, k_iClientVideoCallbacks + 5 )
+ CALLBACK_MEMBER( 0, EBroadcastUploadResult, m_eResult )
+END_DEFINE_CALLBACK_1()
+
+DEFINE_CALLBACK( GetVideoURLResult_t, k_iClientVideoCallbacks + 11 )
+ CALLBACK_MEMBER( 0, EResult, m_eResult )
+ CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID )
+ CALLBACK_MEMBER( 2, char, m_rgchURL[256] )
+END_DEFINE_CALLBACK_3()
+
+
+DEFINE_CALLBACK( GetOPFSettingsResult_t, k_iClientVideoCallbacks + 24 )
+ CALLBACK_MEMBER( 0, EResult, m_eResult )
+ CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID )
+END_DEFINE_CALLBACK_2()
+
+
+#pragma pack( pop )
+
+
+#endif // ISTEAMVIDEO_H
diff --git a/lsteamclient/steamworks_sdk_142/matchmakingtypes.h b/lsteamclient/steamworks_sdk_142/matchmakingtypes.h
new file mode 100644
index 00000000..fcb61664
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/matchmakingtypes.h
@@ -0,0 +1,251 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef MATCHMAKINGTYPES_H
+#define MATCHMAKINGTYPES_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#ifdef POSIX
+#ifndef _snprintf
+#define _snprintf snprintf
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+//
+// Max size (in bytes of UTF-8 data, not in characters) of server fields, including null terminator.
+// WARNING: These cannot be changed easily, without breaking clients using old interfaces.
+//
+const int k_cbMaxGameServerGameDir = 32;
+const int k_cbMaxGameServerMapName = 32;
+const int k_cbMaxGameServerGameDescription = 64;
+const int k_cbMaxGameServerName = 64;
+const int k_cbMaxGameServerTags = 128;
+const int k_cbMaxGameServerGameData = 2048;
+
+/// Store key/value pair used in matchmaking queries.
+///
+/// Actually, the name Key/Value is a bit misleading. The "key" is better
+/// understood as "filter operation code" and the "value" is the operand to this
+/// filter operation. The meaning of the operand depends upon the filter.
+struct MatchMakingKeyValuePair_t
+{
+ MatchMakingKeyValuePair_t() { m_szKey[0] = m_szValue[0] = 0; }
+ MatchMakingKeyValuePair_t( const char *pchKey, const char *pchValue )
+ {
+ strncpy( m_szKey, pchKey, sizeof(m_szKey) ); // this is a public header, use basic c library string funcs only!
+ m_szKey[ sizeof( m_szKey ) - 1 ] = '\0';
+ strncpy( m_szValue, pchValue, sizeof(m_szValue) );
+ m_szValue[ sizeof( m_szValue ) - 1 ] = '\0';
+ }
+ char m_szKey[ 256 ];
+ char m_szValue[ 256 ];
+};
+
+
+enum EMatchMakingServerResponse
+{
+ eServerResponded = 0,
+ eServerFailedToRespond,
+ eNoServersListedOnMasterServer // for the Internet query type, returned in response callback if no servers of this type match
+};
+
+// servernetadr_t is all the addressing info the serverbrowser needs to know about a game server,
+// namely: its IP, its connection port, and its query port.
+class servernetadr_t
+{
+public:
+
+ servernetadr_t() : m_usConnectionPort( 0 ), m_usQueryPort( 0 ), m_unIP( 0 ) {}
+
+ void Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort );
+#ifdef NETADR_H
+ netadr_t GetIPAndQueryPort();
+#endif
+
+ // Access the query port.
+ uint16 GetQueryPort() const;
+ void SetQueryPort( uint16 usPort );
+
+ // Access the connection port.
+ uint16 GetConnectionPort() const;
+ void SetConnectionPort( uint16 usPort );
+
+ // Access the IP
+ uint32 GetIP() const;
+ void SetIP( uint32 );
+
+ // This gets the 'a.b.c.d:port' string with the connection port (instead of the query port).
+ const char *GetConnectionAddressString() const;
+ const char *GetQueryAddressString() const;
+
+ // Comparison operators and functions.
+ bool operator<(const servernetadr_t &netadr) const;
+ void operator=( const servernetadr_t &that )
+ {
+ m_usConnectionPort = that.m_usConnectionPort;
+ m_usQueryPort = that.m_usQueryPort;
+ m_unIP = that.m_unIP;
+ }
+
+
+private:
+ const char *ToString( uint32 unIP, uint16 usPort ) const;
+ uint16 m_usConnectionPort; // (in HOST byte order)
+ uint16 m_usQueryPort;
+ uint32 m_unIP;
+};
+
+
+inline void servernetadr_t::Init( unsigned int ip, uint16 usQueryPort, uint16 usConnectionPort )
+{
+ m_unIP = ip;
+ m_usQueryPort = usQueryPort;
+ m_usConnectionPort = usConnectionPort;
+}
+
+#ifdef NETADR_H
+inline netadr_t servernetadr_t::GetIPAndQueryPort()
+{
+ return netadr_t( m_unIP, m_usQueryPort );
+}
+#endif
+
+inline uint16 servernetadr_t::GetQueryPort() const
+{
+ return m_usQueryPort;
+}
+
+inline void servernetadr_t::SetQueryPort( uint16 usPort )
+{
+ m_usQueryPort = usPort;
+}
+
+inline uint16 servernetadr_t::GetConnectionPort() const
+{
+ return m_usConnectionPort;
+}
+
+inline void servernetadr_t::SetConnectionPort( uint16 usPort )
+{
+ m_usConnectionPort = usPort;
+}
+
+inline uint32 servernetadr_t::GetIP() const
+{
+ return m_unIP;
+}
+
+inline void servernetadr_t::SetIP( uint32 unIP )
+{
+ m_unIP = unIP;
+}
+
+inline const char *servernetadr_t::ToString( uint32 unIP, uint16 usPort ) const
+{
+ static char s[4][64];
+ static int nBuf = 0;
+ unsigned char *ipByte = (unsigned char *)&unIP;
+#ifdef VALVE_BIG_ENDIAN
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[0]), (int)(ipByte[1]), (int)(ipByte[2]), (int)(ipByte[3]), usPort );
+#else
+ _snprintf (s[nBuf], sizeof( s[nBuf] ), "%u.%u.%u.%u:%i", (int)(ipByte[3]), (int)(ipByte[2]), (int)(ipByte[1]), (int)(ipByte[0]), usPort );
+#endif
+ const char *pchRet = s[nBuf];
+ ++nBuf;
+ nBuf %= ( (sizeof(s)/sizeof(s[0])) );
+ return pchRet;
+}
+
+inline const char* servernetadr_t::GetConnectionAddressString() const
+{
+ return ToString( m_unIP, m_usConnectionPort );
+}
+
+inline const char* servernetadr_t::GetQueryAddressString() const
+{
+ return ToString( m_unIP, m_usQueryPort );
+}
+
+inline bool servernetadr_t::operator<(const servernetadr_t &netadr) const
+{
+ return ( m_unIP < netadr.m_unIP ) || ( m_unIP == netadr.m_unIP && m_usQueryPort < netadr.m_usQueryPort );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Data describing a single server
+//-----------------------------------------------------------------------------
+class gameserveritem_t
+{
+public:
+ gameserveritem_t();
+
+ const char* GetName() const;
+ void SetName( const char *pName );
+
+public:
+ servernetadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server
+ int m_nPing; ///< current ping time in milliseconds
+ bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past
+ bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed
+ char m_szGameDir[k_cbMaxGameServerGameDir]; ///< current game directory
+ char m_szMap[k_cbMaxGameServerMapName]; ///< current map
+ char m_szGameDescription[k_cbMaxGameServerGameDescription]; ///< game description
+ uint32 m_nAppID; ///< Steam App ID of this server
+ int m_nPlayers; ///< total number of players currently on the server. INCLUDES BOTS!!
+ int m_nMaxPlayers; ///< Maximum players that can join this server
+ int m_nBotPlayers; ///< Number of bots (i.e simulated players) on this server
+ bool m_bPassword; ///< true if this server needs a password to join
+ bool m_bSecure; ///< Is this server protected by VAC
+ uint32 m_ulTimeLastPlayed; ///< time (in unix time) when this server was last played on (for favorite/history servers)
+ int m_nServerVersion; ///< server version as reported to Steam
+
+private:
+
+ /// Game server name
+ char m_szServerName[k_cbMaxGameServerName];
+
+ // For data added after SteamMatchMaking001 add it here
+public:
+ /// the tags this server exposes
+ char m_szGameTags[k_cbMaxGameServerTags];
+
+ /// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam)
+ CSteamID m_steamID;
+};
+
+
+inline gameserveritem_t::gameserveritem_t()
+{
+ m_szGameDir[0] = m_szMap[0] = m_szGameDescription[0] = m_szServerName[0] = 0;
+ m_bHadSuccessfulResponse = m_bDoNotRefresh = m_bPassword = m_bSecure = false;
+ m_nPing = m_nAppID = m_nPlayers = m_nMaxPlayers = m_nBotPlayers = m_ulTimeLastPlayed = m_nServerVersion = 0;
+ m_szGameTags[0] = 0;
+}
+
+inline const char* gameserveritem_t::GetName() const
+{
+ // Use the IP address as the name if nothing is set yet.
+ if ( m_szServerName[0] == 0 )
+ return m_NetAdr.GetConnectionAddressString();
+ else
+ return m_szServerName;
+}
+
+inline void gameserveritem_t::SetName( const char *pName )
+{
+ strncpy( m_szServerName, pName, sizeof( m_szServerName ) );
+ m_szServerName[ sizeof( m_szServerName ) - 1 ] = '\0';
+}
+
+
+#endif // MATCHMAKINGTYPES_H
diff --git a/lsteamclient/steamworks_sdk_142/steam_api.h b/lsteamclient/steamworks_sdk_142/steam_api.h
new file mode 100644
index 00000000..7134d202
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/steam_api.h
@@ -0,0 +1,394 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_API_H
+#define STEAM_API_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+#include "isteamuser.h"
+#include "isteamfriends.h"
+#include "isteamutils.h"
+#include "isteammatchmaking.h"
+#include "isteamuserstats.h"
+#include "isteamapps.h"
+#include "isteamnetworking.h"
+#include "isteamremotestorage.h"
+#include "isteamscreenshots.h"
+#include "isteammusic.h"
+#include "isteammusicremote.h"
+#include "isteamhttp.h"
+#include "isteamcontroller.h"
+#include "isteamugc.h"
+#include "isteamapplist.h"
+#include "isteamhtmlsurface.h"
+#include "isteaminventory.h"
+#include "isteamvideo.h"
+#include "isteamparentalsettings.h"
+
+
+// Steam API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __declspec( dllexport )
+ #elif defined( STEAM_API_NODLL )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // STEAM_API_EXPORTS
+#elif defined( GNUC )
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C" __attribute__ ((visibility("default")))
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#else // !WIN32
+ #if defined( STEAM_API_EXPORTS )
+ #define S_API extern "C"
+ #else
+ #define S_API extern "C"
+ #endif // STEAM_API_EXPORTS
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Steam API setup & shutdown
+//
+// These functions manage loading, initializing and shutdown of the steamclient.dll
+//
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+
+// SteamAPI_Init must be called before using any other API functions. If it fails, an
+// error message will be output to the debugger (or stderr) with further information.
+S_API bool S_CALLTYPE SteamAPI_Init();
+
+// SteamAPI_Shutdown should be called during process shutdown if possible.
+S_API void S_CALLTYPE SteamAPI_Shutdown();
+
+// SteamAPI_RestartAppIfNecessary ensures that your executable was launched through Steam.
+//
+// Returns true if the current process should terminate. Steam is now re-launching your application.
+//
+// Returns false if no action needs to be taken. This means that your executable was started through
+// the Steam client, or a steam_appid.txt file is present in your game's directory (for development).
+// Your current process should continue if false is returned.
+//
+// NOTE: If you use the Steam DRM wrapper on your primary executable file, this check is unnecessary
+// since the DRM wrapper will ensure that your application was launched properly through Steam.
+S_API bool S_CALLTYPE SteamAPI_RestartAppIfNecessary( uint32 unOwnAppID );
+
+// Many Steam API functions allocate a small amount of thread-local memory for parameter storage.
+// SteamAPI_ReleaseCurrentThreadMemory() will free API memory associated with the calling thread.
+// This function is also called automatically by SteamAPI_RunCallbacks(), so a single-threaded
+// program never needs to explicitly call this function.
+S_API void S_CALLTYPE SteamAPI_ReleaseCurrentThreadMemory();
+
+
+// crash dump recording functions
+S_API void S_CALLTYPE SteamAPI_WriteMiniDump( uint32 uStructuredExceptionCode, void* pvExceptionInfo, uint32 uBuildID );
+S_API void S_CALLTYPE SteamAPI_SetMiniDumpComment( const char *pchMsg );
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Global accessors for Steamworks C++ APIs. See individual isteam*.h files for details.
+// You should not cache the results of these accessors or pass the result pointers across
+// modules! Different modules may be compiled against different SDK header versions, and
+// the interface pointers could therefore be different across modules. Every line of code
+// which calls into a Steamworks API should retrieve the interface from a global accessor.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#if !defined( STEAM_API_EXPORTS )
+inline ISteamClient *SteamClient();
+inline ISteamUser *SteamUser();
+inline ISteamFriends *SteamFriends();
+inline ISteamUtils *SteamUtils();
+inline ISteamMatchmaking *SteamMatchmaking();
+inline ISteamUserStats *SteamUserStats();
+inline ISteamApps *SteamApps();
+inline ISteamNetworking *SteamNetworking();
+inline ISteamMatchmakingServers *SteamMatchmakingServers();
+inline ISteamRemoteStorage *SteamRemoteStorage();
+inline ISteamScreenshots *SteamScreenshots();
+inline ISteamHTTP *SteamHTTP();
+inline ISteamController *SteamController();
+inline ISteamUGC *SteamUGC();
+inline ISteamAppList *SteamAppList();
+inline ISteamMusic *SteamMusic();
+inline ISteamMusicRemote *SteamMusicRemote();
+inline ISteamHTMLSurface *SteamHTMLSurface();
+inline ISteamInventory *SteamInventory();
+inline ISteamVideo *SteamVideo();
+inline ISteamParentalSettings *SteamParentalSettings();
+#endif // VERSION_SAFE_STEAM_API_INTERFACES
+
+
+// CSteamAPIContext encapsulates the Steamworks API global accessors into
+// a single object. This is DEPRECATED and only remains for compatibility.
+class CSteamAPIContext
+{
+public:
+ // DEPRECATED - there is no benefit to using this over the global accessors
+ CSteamAPIContext() { Clear(); }
+ void Clear();
+ bool Init();
+ ISteamClient* SteamClient() const { return m_pSteamClient; }
+ ISteamUser* SteamUser() const { return m_pSteamUser; }
+ ISteamFriends* SteamFriends() const { return m_pSteamFriends; }
+ ISteamUtils* SteamUtils() const { return m_pSteamUtils; }
+ ISteamMatchmaking* SteamMatchmaking() const { return m_pSteamMatchmaking; }
+ ISteamUserStats* SteamUserStats() const { return m_pSteamUserStats; }
+ ISteamApps* SteamApps() const { return m_pSteamApps; }
+ ISteamMatchmakingServers* SteamMatchmakingServers() const { return m_pSteamMatchmakingServers; }
+ ISteamNetworking* SteamNetworking() const { return m_pSteamNetworking; }
+ ISteamRemoteStorage* SteamRemoteStorage() const { return m_pSteamRemoteStorage; }
+ ISteamScreenshots* SteamScreenshots() const { return m_pSteamScreenshots; }
+ ISteamHTTP* SteamHTTP() const { return m_pSteamHTTP; }
+ ISteamController* SteamController() const { return m_pController; }
+ ISteamUGC* SteamUGC() const { return m_pSteamUGC; }
+ ISteamAppList* SteamAppList() const { return m_pSteamAppList; }
+ ISteamMusic* SteamMusic() const { return m_pSteamMusic; }
+ ISteamMusicRemote* SteamMusicRemote() const { return m_pSteamMusicRemote; }
+ ISteamHTMLSurface* SteamHTMLSurface() const { return m_pSteamHTMLSurface; }
+ ISteamInventory* SteamInventory() const { return m_pSteamInventory; }
+ ISteamVideo* SteamVideo() const { return m_pSteamVideo; }
+ ISteamParentalSettings* SteamParentalSettings() const { return m_pSteamParentalSettings; }
+ // DEPRECATED - there is no benefit to using this over the global accessors
+private:
+ ISteamClient *m_pSteamClient;
+ ISteamUser *m_pSteamUser;
+ ISteamFriends *m_pSteamFriends;
+ ISteamUtils *m_pSteamUtils;
+ ISteamMatchmaking *m_pSteamMatchmaking;
+ ISteamUserStats *m_pSteamUserStats;
+ ISteamApps *m_pSteamApps;
+ ISteamMatchmakingServers *m_pSteamMatchmakingServers;
+ ISteamNetworking *m_pSteamNetworking;
+ ISteamRemoteStorage *m_pSteamRemoteStorage;
+ ISteamScreenshots *m_pSteamScreenshots;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamController *m_pController;
+ ISteamUGC *m_pSteamUGC;
+ ISteamAppList *m_pSteamAppList;
+ ISteamMusic *m_pSteamMusic;
+ ISteamMusicRemote *m_pSteamMusicRemote;
+ ISteamHTMLSurface *m_pSteamHTMLSurface;
+ ISteamInventory *m_pSteamInventory;
+ ISteamVideo *m_pSteamVideo;
+ ISteamParentalSettings *m_pSteamParentalSettings;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steam callback and call-result helpers
+//
+// The following macros and classes are used to register your application for
+// callbacks and call-results, which are delivered in a predictable manner.
+//
+// STEAM_CALLBACK macros are meant for use inside of a C++ class definition.
+// They map a Steam notification callback directly to a class member function
+// which is automatically prototyped as "void func( callback_type *pParam )".
+//
+// CCallResult is used with specific Steam APIs that return "result handles".
+// The handle can be passed to a CCallResult object's Set function, along with
+// an object pointer and member-function pointer. The member function will
+// be executed once the results of the Steam API call are available.
+//
+// CCallback and CCallbackManual classes can be used instead of STEAM_CALLBACK
+// macros if you require finer control over registration and unregistration.
+//
+// Callbacks and call-results are queued automatically and are only
+// delivered/executed when your application calls SteamAPI_RunCallbacks().
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// SteamAPI_RunCallbacks is safe to call from multiple threads simultaneously,
+// but if you choose to do this, callback code could be executed on any thread.
+// One alternative is to call SteamAPI_RunCallbacks from the main thread only,
+// and call SteamAPI_ReleaseCurrentThreadMemory regularly on other threads.
+S_API void S_CALLTYPE SteamAPI_RunCallbacks();
+
+
+// Declares a callback member function plus a helper member variable which
+// registers the callback on object creation and unregisters on destruction.
+// The optional fourth 'var' param exists only for backwards-compatibility
+// and can be ignored.
+#define STEAM_CALLBACK( thisclass, func, .../*callback_type, [deprecated] var*/ ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, 4, 3 ), ( /**/, thisclass, func, __VA_ARGS__ ) )
+
+// Declares a callback function and a named CCallbackManual variable which
+// has Register and Unregister functions instead of automatic registration.
+#define STEAM_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type > var; void func( callback_type *pParam )
+
+
+// Internal functions used by the utility CCallback objects to receive callbacks
+S_API void S_CALLTYPE SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
+// Internal functions used by the utility CCallResult objects to receive async call results
+S_API void S_CALLTYPE SteamAPI_RegisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+S_API void S_CALLTYPE SteamAPI_UnregisterCallResult( class CCallbackBase *pCallback, SteamAPICall_t hAPICall );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: base for callbacks and call results - internal implementation detail
+//-----------------------------------------------------------------------------
+class CCallbackBase
+{
+public:
+ CCallbackBase() { m_nCallbackFlags = 0; m_iCallback = 0; }
+ // don't add a virtual destructor because we export this binary interface across dll's
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall ) = 0;
+ int GetICallback() { return m_iCallback; }
+ virtual int GetCallbackSizeBytes() = 0;
+
+protected:
+ enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
+ uint8 m_nCallbackFlags;
+ int m_iCallback;
+ friend class CCallbackMgr;
+
+private:
+ CCallbackBase( const CCallbackBase& );
+ CCallbackBase& operator=( const CCallbackBase& );
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: templated base for callbacks - internal implementation detail
+//-----------------------------------------------------------------------------
+template< int sizeof_P >
+class CCallbackImpl : protected CCallbackBase
+{
+public:
+ ~CCallbackImpl() { if ( m_nCallbackFlags & k_ECallbackFlagsRegistered ) SteamAPI_UnregisterCallback( this ); }
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+
+protected:
+ virtual void Run( void *pvParam ) = 0;
+ virtual void Run( void *pvParam, bool /*bIOFailure*/, SteamAPICall_t /*hSteamAPICall*/ ) { Run( pvParam ); }
+ virtual int GetCallbackSizeBytes() { return sizeof_P; }
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+class CCallResult : private CCallbackBase
+{
+public:
+ typedef void (T::*func_t)( P*, bool );
+
+ CCallResult();
+ ~CCallResult();
+
+ void Set( SteamAPICall_t hAPICall, T *p, func_t func );
+ bool IsActive() const;
+ void Cancel();
+
+ void SetGameserverFlag() { m_nCallbackFlags |= k_ECallbackFlagsGameServer; }
+private:
+ virtual void Run( void *pvParam );
+ virtual void Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall );
+ virtual int GetCallbackSizeBytes() { return sizeof( P ); }
+
+ SteamAPICall_t m_hAPICall;
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct,
+// bGameserver = listen for gameserver callbacks instead of client callbacks
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameserver = false >
+class CCallback : public CCallbackImpl< sizeof( P ) >
+{
+public:
+ typedef void (T::*func_t)(P*);
+
+ // NOTE: If you can't provide the correct parameters at construction time, you should
+ // use the CCallbackManual callback object (STEAM_CALLBACK_MANUAL macro) instead.
+ CCallback( T *pObj, func_t func );
+
+ void Register( T *pObj, func_t func );
+ void Unregister();
+
+protected:
+ virtual void Run( void *pvParam );
+
+ T *m_pObj;
+ func_t m_Func;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: subclass of CCallback which allows default-construction in
+// an unregistered state; you must call Register manually
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameServer = false >
+class CCallbackManual : public CCallback< T, P, bGameServer >
+{
+public:
+ CCallbackManual() : CCallback< T, P, bGameServer >( NULL, NULL ) {}
+
+ // Inherits public Register and Unregister functions from base class
+};
+
+
+
+#ifdef _WIN32
+// disable this warning; this pattern need for steam callback registration
+#pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
+#endif
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+
+// SteamAPI_IsSteamRunning() returns true if Steam is currently running
+S_API bool S_CALLTYPE SteamAPI_IsSteamRunning();
+
+// Pumps out all the steam messages, calling registered callbacks.
+// NOT THREADSAFE - do not call from multiple threads simultaneously.
+S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
+
+// register the callback funcs to use to interact with the steam dll
+S_API void Steam_RegisterInterfaceFuncs( void *hModule );
+
+// returns the HSteamUser of the last user to dispatch a callback
+S_API HSteamUser Steam_GetHSteamUserCurrent();
+
+// returns the filename path of the current running Steam process, used if you need to load an explicit steam dll by name.
+// DEPRECATED - implementation is Windows only, and the path returned is a UTF-8 string which must be converted to UTF-16 for use with Win32 APIs
+S_API const char *SteamAPI_GetSteamInstallPath();
+
+// returns the pipe we are communicating to Steam with
+S_API HSteamPipe SteamAPI_GetHSteamPipe();
+
+// sets whether or not Steam_RunCallbacks() should do a try {} catch (...) {} around calls to issuing callbacks
+S_API void SteamAPI_SetTryCatchCallbacks( bool bTryCatchCallbacks );
+
+// backwards compat export, passes through to SteamAPI_ variants
+S_API HSteamPipe GetHSteamPipe();
+S_API HSteamUser GetHSteamUser();
+
+
+#if defined( VERSION_SAFE_STEAM_API_INTERFACES )
+// exists only for backwards compat with code written against older SDKs
+S_API bool S_CALLTYPE SteamAPI_InitSafe();
+#endif
+
+#include "steam_api_internal.h"
+
+#endif // STEAM_API_H
diff --git a/lsteamclient/steamworks_sdk_142/steam_api_flat.h b/lsteamclient/steamworks_sdk_142/steam_api_flat.h
new file mode 100644
index 00000000..c40280cd
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/steam_api_flat.h
@@ -0,0 +1,844 @@
+//====== Copyright (c) 1996-2014, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Header for flatted SteamAPI. Use this for binding to other languages.
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+#ifndef STEAMAPIFLAT_H
+#define STEAMAPIFLAT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <stdint.h>
+
+
+typedef unsigned char uint8;
+typedef unsigned char uint8;
+typedef signed char int8;
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+typedef int64 lint64;
+typedef uint64 ulint64;
+typedef uint8 Salt_t[8];
+typedef uint64 GID_t;
+typedef uint64 JobID_t;
+typedef GID_t TxnID_t;
+typedef uint32 PackageId_t;
+typedef uint32 BundleId_t;
+typedef uint32 AppId_t;
+typedef uint64 AssetClassId_t;
+typedef uint32 PhysicalItemId_t;
+typedef uint32 DepotId_t;
+typedef uint32 RTime32;
+typedef uint32 CellID_t;
+typedef uint64 SteamAPICall_t;
+typedef uint32 AccountID_t;
+typedef uint32 PartnerId_t;
+typedef uint64 ManifestId_t;
+typedef uint64 SiteId_t;
+typedef uint32 HAuthTicket;
+typedef void * BREAKPAD_HANDLE;
+typedef char compile_time_assert_type[1];
+typedef int32 HSteamPipe;
+typedef int32 HSteamUser;
+typedef int16 FriendsGroupID_t;
+typedef void * HServerListRequest;
+typedef int HServerQuery;
+typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
+typedef uint64 PublishedFileId_t;
+typedef uint64 UGCFileWriteStreamHandle_t;
+typedef char compile_time_assert_type[1];
+typedef uint64 SteamLeaderboard_t;
+typedef uint64 SteamLeaderboardEntries_t;
+typedef uint32 SNetSocket_t;
+typedef uint32 SNetListenSocket_t;
+typedef uint32 ScreenshotHandle;
+typedef uint32 HTTPRequestHandle;
+typedef uint32 HTTPCookieContainerHandle;
+typedef uint64 ControllerHandle_t;
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+typedef uint64 UGCQueryHandle_t;
+typedef uint64 UGCUpdateHandle_t;
+typedef uint32 HHTMLBrowser;
+typedef uint64 SteamItemInstanceID_t;
+typedef int32 SteamItemDef_t;
+typedef int32 SteamInventoryResult_t;
+typedef uint64 SteamInventoryUpdateHandle_t;
+// OpenVR Constants
+int const_k_iSteamUserCallbacks = 100;
+int const_k_iSteamGameServerCallbacks = 200;
+int const_k_iSteamFriendsCallbacks = 300;
+int const_k_iSteamBillingCallbacks = 400;
+int const_k_iSteamMatchmakingCallbacks = 500;
+int const_k_iSteamContentServerCallbacks = 600;
+int const_k_iSteamUtilsCallbacks = 700;
+int const_k_iClientFriendsCallbacks = 800;
+int const_k_iClientUserCallbacks = 900;
+int const_k_iSteamAppsCallbacks = 1000;
+int const_k_iSteamUserStatsCallbacks = 1100;
+int const_k_iSteamNetworkingCallbacks = 1200;
+int const_k_iClientRemoteStorageCallbacks = 1300;
+int const_k_iClientDepotBuilderCallbacks = 1400;
+int const_k_iSteamGameServerItemsCallbacks = 1500;
+int const_k_iClientUtilsCallbacks = 1600;
+int const_k_iSteamGameCoordinatorCallbacks = 1700;
+int const_k_iSteamGameServerStatsCallbacks = 1800;
+int const_k_iSteam2AsyncCallbacks = 1900;
+int const_k_iSteamGameStatsCallbacks = 2000;
+int const_k_iClientHTTPCallbacks = 2100;
+int const_k_iClientScreenshotsCallbacks = 2200;
+int const_k_iSteamScreenshotsCallbacks = 2300;
+int const_k_iClientAudioCallbacks = 2400;
+int const_k_iClientUnifiedMessagesCallbacks = 2500;
+int const_k_iSteamStreamLauncherCallbacks = 2600;
+int const_k_iClientControllerCallbacks = 2700;
+int const_k_iSteamControllerCallbacks = 2800;
+int const_k_iClientParentalSettingsCallbacks = 2900;
+int const_k_iClientDeviceAuthCallbacks = 3000;
+int const_k_iClientNetworkDeviceManagerCallbacks = 3100;
+int const_k_iClientMusicCallbacks = 3200;
+int const_k_iClientRemoteClientManagerCallbacks = 3300;
+int const_k_iClientUGCCallbacks = 3400;
+int const_k_iSteamStreamClientCallbacks = 3500;
+int const_k_IClientProductBuilderCallbacks = 3600;
+int const_k_iClientShortcutsCallbacks = 3700;
+int const_k_iClientRemoteControlManagerCallbacks = 3800;
+int const_k_iSteamAppListCallbacks = 3900;
+int const_k_iSteamMusicCallbacks = 4000;
+int const_k_iSteamMusicRemoteCallbacks = 4100;
+int const_k_iClientVRCallbacks = 4200;
+int const_k_iClientGameNotificationCallbacks = 4300;
+int const_k_iSteamGameNotificationCallbacks = 4400;
+int const_k_iSteamHTMLSurfaceCallbacks = 4500;
+int const_k_iClientVideoCallbacks = 4600;
+int const_k_iClientInventoryCallbacks = 4700;
+int const_k_iClientBluetoothManagerCallbacks = 4800;
+int const_k_iClientSharedConnectionCallbacks = 4900;
+int const_k_ISteamParentalSettingsCallbacks = 5000;
+int const_k_iClientShaderCallbacks = 5100;
+int const_k_cchPersonaNameMax = 128;
+int const_k_cwchPersonaNameMax = 32;
+int const_k_cchMaxRichPresenceKeys = 20;
+int const_k_cchMaxRichPresenceKeyLength = 64;
+int const_k_cchMaxRichPresenceValueLength = 256;
+int const_k_cchStatNameMax = 128;
+int const_k_cchLeaderboardNameMax = 128;
+int const_k_cLeaderboardDetailsMax = 64;
+unsigned long const_k_SteamItemInstanceIDInvalid = 0xffffffff;
+int const_k_SteamInventoryResultInvalid = -1;
+
+
+
+// OpenVR Enums
+// OpenVR Structs
+
+
+
+S_API HSteamPipe SteamAPI_ISteamClient_CreateSteamPipe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamClient_BReleaseSteamPipe(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_ConnectToGlobalUser(intptr_t instancePtr, HSteamPipe hSteamPipe);
+S_API HSteamUser SteamAPI_ISteamClient_CreateLocalUser(intptr_t instancePtr, HSteamPipe * phSteamPipe, EAccountType eAccountType);
+S_API void SteamAPI_ISteamClient_ReleaseUser(intptr_t instancePtr, HSteamPipe hSteamPipe, HSteamUser hUser);
+S_API class ISteamUser * SteamAPI_ISteamClient_GetISteamUser(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServer * SteamAPI_ISteamClient_GetISteamGameServer(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void SteamAPI_ISteamClient_SetLocalIPBinding(intptr_t instancePtr, uint32 unIP, uint16 usPort);
+S_API class ISteamFriends * SteamAPI_ISteamClient_GetISteamFriends(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUtils * SteamAPI_ISteamClient_GetISteamUtils(intptr_t instancePtr, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmaking * SteamAPI_ISteamClient_GetISteamMatchmaking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMatchmakingServers * SteamAPI_ISteamClient_GetISteamMatchmakingServers(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API void * SteamAPI_ISteamClient_GetISteamGenericInterface(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUserStats * SteamAPI_ISteamClient_GetISteamUserStats(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamGameServerStats * SteamAPI_ISteamClient_GetISteamGameServerStats(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamApps * SteamAPI_ISteamClient_GetISteamApps(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamNetworking * SteamAPI_ISteamClient_GetISteamNetworking(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamRemoteStorage * SteamAPI_ISteamClient_GetISteamRemoteStorage(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamScreenshots * SteamAPI_ISteamClient_GetISteamScreenshots(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API uint32 SteamAPI_ISteamClient_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamClient_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(intptr_t instancePtr);
+S_API class ISteamHTTP * SteamAPI_ISteamClient_GetISteamHTTP(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamController * SteamAPI_ISteamClient_GetISteamController(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamUGC * SteamAPI_ISteamClient_GetISteamUGC(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamAppList * SteamAPI_ISteamClient_GetISteamAppList(intptr_t instancePtr, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusic * SteamAPI_ISteamClient_GetISteamMusic(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamMusicRemote * SteamAPI_ISteamClient_GetISteamMusicRemote(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamHTMLSurface * SteamAPI_ISteamClient_GetISteamHTMLSurface(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamInventory * SteamAPI_ISteamClient_GetISteamInventory(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamVideo * SteamAPI_ISteamClient_GetISteamVideo(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API class ISteamParentalSettings * SteamAPI_ISteamClient_GetISteamParentalSettings(intptr_t instancePtr, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion);
+S_API HSteamUser SteamAPI_ISteamUser_GetHSteamUser(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BLoggedOn(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamUser_GetSteamID(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUser_InitiateGameConnection(intptr_t instancePtr, void * pAuthBlob, int cbMaxAuthBlob, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure);
+S_API void SteamAPI_ISteamUser_TerminateGameConnection(intptr_t instancePtr, uint32 unIPServer, uint16 usPortServer);
+S_API void SteamAPI_ISteamUser_TrackAppUsageEvent(intptr_t instancePtr, class CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo);
+S_API bool SteamAPI_ISteamUser_GetUserDataFolder(intptr_t instancePtr, char * pchBuffer, int cubBuffer);
+S_API void SteamAPI_ISteamUser_StartVoiceRecording(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_StopVoiceRecording(intptr_t instancePtr);
+S_API EVoiceResult SteamAPI_ISteamUser_GetAvailableVoice(intptr_t instancePtr, uint32 * pcbCompressed, uint32 * pcbUncompressed_Deprecated, uint32 nUncompressedVoiceDesiredSampleRate_Deprecated);
+S_API EVoiceResult SteamAPI_ISteamUser_GetVoice(intptr_t instancePtr, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed_Deprecated, void * pUncompressedDestBuffer_Deprecated, uint32 cbUncompressedDestBufferSize_Deprecated, uint32 * nUncompressBytesWritten_Deprecated, uint32 nUncompressedVoiceDesiredSampleRate_Deprecated);
+S_API EVoiceResult SteamAPI_ISteamUser_DecompressVoice(intptr_t instancePtr, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate);
+S_API uint32 SteamAPI_ISteamUser_GetVoiceOptimalSampleRate(intptr_t instancePtr);
+S_API HAuthTicket SteamAPI_ISteamUser_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamUser_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamUser_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamUser_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamUser_BIsBehindNAT(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUser_AdvertiseGame(intptr_t instancePtr, class CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestEncryptedAppTicket(intptr_t instancePtr, void * pDataToInclude, int cbDataToInclude);
+S_API bool SteamAPI_ISteamUser_GetEncryptedAppTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API int SteamAPI_ISteamUser_GetGameBadgeLevel(intptr_t instancePtr, int nSeries, bool bFoil);
+S_API int SteamAPI_ISteamUser_GetPlayerSteamLevel(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUser_RequestStoreAuthURL(intptr_t instancePtr, const char * pchRedirectURL);
+S_API bool SteamAPI_ISteamUser_BIsPhoneVerified(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsTwoFactorEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsPhoneIdentifying(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUser_BIsPhoneRequiringVerification(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetPersonaName(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_SetPersonaName(intptr_t instancePtr, const char * pchPersonaName);
+S_API EPersonaState SteamAPI_ISteamFriends_GetPersonaState(intptr_t instancePtr);
+S_API int SteamAPI_ISteamFriends_GetFriendCount(intptr_t instancePtr, int iFriendFlags);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendByIndex(intptr_t instancePtr, int iFriend, int iFriendFlags);
+S_API EFriendRelationship SteamAPI_ISteamFriends_GetFriendRelationship(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API EPersonaState SteamAPI_ISteamFriends_GetFriendPersonaState(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaName(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_GetFriendGamePlayed(intptr_t instancePtr, class CSteamID steamIDFriend, struct FriendGameInfo_t * pFriendGameInfo);
+S_API const char * SteamAPI_ISteamFriends_GetFriendPersonaNameHistory(intptr_t instancePtr, class CSteamID steamIDFriend, int iPersonaName);
+S_API int SteamAPI_ISteamFriends_GetFriendSteamLevel(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetPlayerNickname(intptr_t instancePtr, class CSteamID steamIDPlayer);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupCount(intptr_t instancePtr);
+S_API FriendsGroupID_t SteamAPI_ISteamFriends_GetFriendsGroupIDByIndex(intptr_t instancePtr, int iFG);
+S_API const char * SteamAPI_ISteamFriends_GetFriendsGroupName(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API int SteamAPI_ISteamFriends_GetFriendsGroupMembersCount(intptr_t instancePtr, FriendsGroupID_t friendsGroupID);
+S_API void SteamAPI_ISteamFriends_GetFriendsGroupMembersList(intptr_t instancePtr, FriendsGroupID_t friendsGroupID, class CSteamID * pOutSteamIDMembers, int nMembersCount);
+S_API bool SteamAPI_ISteamFriends_HasFriend(intptr_t instancePtr, class CSteamID steamIDFriend, int iFriendFlags);
+S_API int SteamAPI_ISteamFriends_GetClanCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetClanByIndex(intptr_t instancePtr, int iClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanName(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API const char * SteamAPI_ISteamFriends_GetClanTag(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_GetClanActivityCounts(intptr_t instancePtr, class CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_DownloadClanActivityCounts(intptr_t instancePtr, class CSteamID * psteamIDClans, int cClansToRequest);
+S_API int SteamAPI_ISteamFriends_GetFriendCountFromSource(intptr_t instancePtr, class CSteamID steamIDSource);
+S_API uint64 SteamAPI_ISteamFriends_GetFriendFromSourceByIndex(intptr_t instancePtr, class CSteamID steamIDSource, int iFriend);
+S_API bool SteamAPI_ISteamFriends_IsUserInSource(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDSource);
+S_API void SteamAPI_ISteamFriends_SetInGameVoiceSpeaking(intptr_t instancePtr, class CSteamID steamIDUser, bool bSpeaking);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlay(intptr_t instancePtr, const char * pchDialog);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToUser(intptr_t instancePtr, const char * pchDialog, class CSteamID steamID);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage(intptr_t instancePtr, const char * pchURL);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayToStore(intptr_t instancePtr, AppId_t nAppID, EOverlayToStoreFlag eFlag);
+S_API void SteamAPI_ISteamFriends_SetPlayedWith(intptr_t instancePtr, class CSteamID steamIDUserPlayedWith);
+S_API void SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialog(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API int SteamAPI_ISteamFriends_GetSmallFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetMediumFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API int SteamAPI_ISteamFriends_GetLargeFriendAvatar(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_RequestUserInformation(intptr_t instancePtr, class CSteamID steamIDUser, bool bRequireNameOnly);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_RequestClanOfficerList(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOwner(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanOfficerCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetClanOfficerByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iOfficer);
+S_API uint32 SteamAPI_ISteamFriends_GetUserRestrictions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamFriends_SetRichPresence(intptr_t instancePtr, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamFriends_ClearRichPresence(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchKey);
+S_API int SteamAPI_ISteamFriends_GetFriendRichPresenceKeyCount(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API const char * SteamAPI_ISteamFriends_GetFriendRichPresenceKeyByIndex(intptr_t instancePtr, class CSteamID steamIDFriend, int iKey);
+S_API void SteamAPI_ISteamFriends_RequestFriendRichPresence(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API bool SteamAPI_ISteamFriends_InviteUserToGame(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchConnectString);
+S_API int SteamAPI_ISteamFriends_GetCoplayFriendCount(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamFriends_GetCoplayFriend(intptr_t instancePtr, int iCoplayFriend);
+S_API int SteamAPI_ISteamFriends_GetFriendCoplayTime(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API AppId_t SteamAPI_ISteamFriends_GetFriendCoplayGame(intptr_t instancePtr, class CSteamID steamIDFriend);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_JoinClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_LeaveClanChatRoom(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API int SteamAPI_ISteamFriends_GetClanChatMemberCount(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint64 SteamAPI_ISteamFriends_GetChatMemberByIndex(intptr_t instancePtr, class CSteamID steamIDClan, int iUser);
+S_API bool SteamAPI_ISteamFriends_SendClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, const char * pchText);
+S_API int SteamAPI_ISteamFriends_GetClanChatMessage(intptr_t instancePtr, class CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, class CSteamID * psteamidChatter);
+S_API bool SteamAPI_ISteamFriends_IsClanChatAdmin(intptr_t instancePtr, class CSteamID steamIDClanChat, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamFriends_IsClanChatWindowOpenInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_OpenClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_CloseClanChatWindowInSteam(intptr_t instancePtr, class CSteamID steamIDClanChat);
+S_API bool SteamAPI_ISteamFriends_SetListenForFriendsMessages(intptr_t instancePtr, bool bInterceptEnabled);
+S_API bool SteamAPI_ISteamFriends_ReplyToFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, const char * pchMsgToSend);
+S_API int SteamAPI_ISteamFriends_GetFriendMessage(intptr_t instancePtr, class CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_GetFollowerCount(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_IsFollowing(intptr_t instancePtr, class CSteamID steamID);
+S_API SteamAPICall_t SteamAPI_ISteamFriends_EnumerateFollowingList(intptr_t instancePtr, uint32 unStartIndex);
+S_API bool SteamAPI_ISteamFriends_IsClanPublic(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API bool SteamAPI_ISteamFriends_IsClanOfficialGameGroup(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceAppActive(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetSecondsSinceComputerActive(intptr_t instancePtr);
+S_API EUniverse SteamAPI_ISteamUtils_GetConnectedUniverse(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetServerRealTime(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUtils_GetIPCountry(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetImageSize(intptr_t instancePtr, int iImage, uint32 * pnWidth, uint32 * pnHeight);
+S_API bool SteamAPI_ISteamUtils_GetImageRGBA(intptr_t instancePtr, int iImage, uint8 * pubDest, int nDestBufferSize);
+S_API bool SteamAPI_ISteamUtils_GetCSERIPPort(intptr_t instancePtr, uint32 * unIP, uint16 * usPort);
+S_API uint8 SteamAPI_ISteamUtils_GetCurrentBatteryPower(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUtils_GetAppID(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationPosition(intptr_t instancePtr, ENotificationPosition eNotificationPosition);
+S_API bool SteamAPI_ISteamUtils_IsAPICallCompleted(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, bool * pbFailed);
+S_API ESteamAPICallFailure SteamAPI_ISteamUtils_GetAPICallFailureReason(intptr_t instancePtr, SteamAPICall_t hSteamAPICall);
+S_API bool SteamAPI_ISteamUtils_GetAPICallResult(intptr_t instancePtr, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed);
+S_API uint32 SteamAPI_ISteamUtils_GetIPCCallCount(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetWarningMessageHook(intptr_t instancePtr, SteamAPIWarningMessageHook_t pFunction);
+S_API bool SteamAPI_ISteamUtils_IsOverlayEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_BOverlayNeedsPresent(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUtils_CheckFileSignature(intptr_t instancePtr, const char * szFileName);
+S_API bool SteamAPI_ISteamUtils_ShowGamepadTextInput(intptr_t instancePtr, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText);
+S_API uint32 SteamAPI_ISteamUtils_GetEnteredGamepadTextLength(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_GetEnteredGamepadTextInput(intptr_t instancePtr, char * pchText, uint32 cchText);
+S_API const char * SteamAPI_ISteamUtils_GetSteamUILanguage(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_IsSteamRunningInVR(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetOverlayNotificationInset(intptr_t instancePtr, int nHorizontalInset, int nVerticalInset);
+S_API bool SteamAPI_ISteamUtils_IsSteamInBigPictureMode(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_StartVRDashboard(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUtils_IsVRHeadsetStreamingEnabled(intptr_t instancePtr);
+S_API void SteamAPI_ISteamUtils_SetVRHeadsetStreamingEnabled(intptr_t instancePtr, bool bEnabled);
+S_API int SteamAPI_ISteamMatchmaking_GetFavoriteGameCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMatchmaking_GetFavoriteGame(intptr_t instancePtr, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer);
+S_API int SteamAPI_ISteamMatchmaking_AddFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer);
+S_API bool SteamAPI_ISteamMatchmaking_RemoveFavoriteGame(intptr_t instancePtr, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_RequestLobbyList(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListStringFilter(intptr_t instancePtr, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(intptr_t instancePtr, const char * pchKeyToMatch, int nValueToBeCloseTo);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(intptr_t instancePtr, int nSlotsAvailable);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(intptr_t instancePtr, ELobbyDistanceFilter eLobbyDistanceFilter);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(intptr_t instancePtr, int cMaxResults);
+S_API void SteamAPI_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyByIndex(intptr_t instancePtr, int iLobby);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_CreateLobby(intptr_t instancePtr, ELobbyType eLobbyType, int cMaxMembers);
+S_API SteamAPICall_t SteamAPI_ISteamMatchmaking_JoinLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_LeaveLobby(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_InviteUserToLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDInvitee);
+S_API int SteamAPI_ISteamMatchmaking_GetNumLobbyMembers(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyMemberByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iMember);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyDataCount(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyDataByIndex(intptr_t instancePtr, class CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize);
+S_API bool SteamAPI_ISteamMatchmaking_DeleteLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey);
+S_API const char * SteamAPI_ISteamMatchmaking_GetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDUser, const char * pchKey);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyMemberData(intptr_t instancePtr, class CSteamID steamIDLobby, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamMatchmaking_SendLobbyChatMsg(intptr_t instancePtr, class CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyChatEntry(intptr_t instancePtr, class CSteamID steamIDLobby, int iChatID, class CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType);
+S_API bool SteamAPI_ISteamMatchmaking_RequestLobbyData(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API void SteamAPI_ISteamMatchmaking_SetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, class CSteamID steamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_GetLobbyGameServer(intptr_t instancePtr, class CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, class CSteamID * psteamIDGameServer);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby, int cMaxMembers);
+S_API int SteamAPI_ISteamMatchmaking_GetLobbyMemberLimit(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyType(intptr_t instancePtr, class CSteamID steamIDLobby, ELobbyType eLobbyType);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyJoinable(intptr_t instancePtr, class CSteamID steamIDLobby, bool bLobbyJoinable);
+S_API uint64 SteamAPI_ISteamMatchmaking_GetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby);
+S_API bool SteamAPI_ISteamMatchmaking_SetLobbyOwner(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDNewOwner);
+S_API bool SteamAPI_ISteamMatchmaking_SetLinkedLobby(intptr_t instancePtr, class CSteamID steamIDLobby, class CSteamID steamIDLobbyDependent);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerResponded(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_ServerFailedToRespond(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServerListResponse_RefreshComplete(intptr_t instancePtr, HServerListRequest hRequest, EMatchMakingServerResponse response);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerResponded(intptr_t instancePtr, class gameserveritem_t & server);
+S_API void SteamAPI_ISteamMatchmakingPingResponse_ServerFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_AddPlayerToList(intptr_t instancePtr, const char * pchName, int nScore, float flTimePlayed);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingPlayersResponse_PlayersRefreshComplete(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesResponded(intptr_t instancePtr, const char * pchRule, const char * pchValue);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesFailedToRespond(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMatchmakingRulesResponse_RulesRefreshComplete(intptr_t instancePtr);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestInternetServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestLANServerList(intptr_t instancePtr, AppId_t iApp, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFriendsServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestFavoritesServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestHistoryServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API HServerListRequest SteamAPI_ISteamMatchmakingServers_RequestSpectatorServerList(intptr_t instancePtr, AppId_t iApp, struct MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, class ISteamMatchmakingServerListResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_ReleaseRequest(intptr_t instancePtr, HServerListRequest hServerListRequest);
+S_API class gameserveritem_t * SteamAPI_ISteamMatchmakingServers_GetServerDetails(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshQuery(intptr_t instancePtr, HServerListRequest hRequest);
+S_API bool SteamAPI_ISteamMatchmakingServers_IsRefreshing(intptr_t instancePtr, HServerListRequest hRequest);
+S_API int SteamAPI_ISteamMatchmakingServers_GetServerCount(intptr_t instancePtr, HServerListRequest hRequest);
+S_API void SteamAPI_ISteamMatchmakingServers_RefreshServer(intptr_t instancePtr, HServerListRequest hRequest, int iServer);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PingServer(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPingResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_PlayerDetails(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingPlayersResponse * pRequestServersResponse);
+S_API HServerQuery SteamAPI_ISteamMatchmakingServers_ServerRules(intptr_t instancePtr, uint32 unIP, uint16 usPort, class ISteamMatchmakingRulesResponse * pRequestServersResponse);
+S_API void SteamAPI_ISteamMatchmakingServers_CancelServerQuery(intptr_t instancePtr, HServerQuery hServerQuery);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWrite(intptr_t instancePtr, const char * pchFile, const void * pvData, int32 cubData);
+S_API int32 SteamAPI_ISteamRemoteStorage_FileRead(intptr_t instancePtr, const char * pchFile, void * pvData, int32 cubDataToRead);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileWriteAsync(intptr_t instancePtr, const char * pchFile, const void * pvData, uint32 cubData);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileReadAsync(intptr_t instancePtr, const char * pchFile, uint32 nOffset, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileReadAsyncComplete(intptr_t instancePtr, SteamAPICall_t hReadCall, void * pvBuffer, uint32 cubToRead);
+S_API bool SteamAPI_ISteamRemoteStorage_FileForget(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileDelete(intptr_t instancePtr, const char * pchFile);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_FileShare(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_SetSyncPlatforms(intptr_t instancePtr, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform);
+S_API UGCFileWriteStreamHandle_t SteamAPI_ISteamRemoteStorage_FileWriteStreamOpen(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamWriteChunk(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamClose(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileWriteStreamCancel(intptr_t instancePtr, UGCFileWriteStreamHandle_t writeHandle);
+S_API bool SteamAPI_ISteamRemoteStorage_FileExists(intptr_t instancePtr, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_FilePersisted(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileSize(intptr_t instancePtr, const char * pchFile);
+S_API int64 SteamAPI_ISteamRemoteStorage_GetFileTimestamp(intptr_t instancePtr, const char * pchFile);
+S_API ERemoteStoragePlatform SteamAPI_ISteamRemoteStorage_GetSyncPlatforms(intptr_t instancePtr, const char * pchFile);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetFileCount(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamRemoteStorage_GetFileNameAndSize(intptr_t instancePtr, int iFile, int32 * pnFileSizeInBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_GetQuota(intptr_t instancePtr, uint64 * pnTotalBytes, uint64 * puAvailableBytes);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(intptr_t instancePtr);
+S_API void SteamAPI_ISteamRemoteStorage_SetCloudEnabledForApp(intptr_t instancePtr, bool bEnabled);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownload(intptr_t instancePtr, UGCHandle_t hContent, uint32 unPriority);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDownloadProgress(intptr_t instancePtr, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected);
+S_API bool SteamAPI_ISteamRemoteStorage_GetUGCDetails(intptr_t instancePtr, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, class CSteamID * pSteamIDOwner);
+S_API int32 SteamAPI_ISteamRemoteStorage_UGCRead(intptr_t instancePtr, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction);
+S_API int32 SteamAPI_ISteamRemoteStorage_GetCachedUGCCount(intptr_t instancePtr);
+S_API UGCHandle_t SteamAPI_ISteamRemoteStorage_GetCachedUGCHandle(intptr_t instancePtr, int32 iCachedContent);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishWorkshopFile(intptr_t instancePtr, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType);
+S_API PublishedFileUpdateHandle_t SteamAPI_ISteamRemoteStorage_CreatePublishedFileUpdateRequest(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFilePreviewFile(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTitle(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileVisibility(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileTags(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_CommitPublishedFileUpdate(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedFileDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_DeletePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserPublishedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSubscribedFiles(intptr_t instancePtr, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UnsubscribePublishedFile(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API bool SteamAPI_ISteamRemoteStorage_UpdatePublishedFileSetChangeDescription(intptr_t instancePtr, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UpdateUserPublishedItemVote(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_GetUserPublishedItemVoteDetails(intptr_t instancePtr, PublishedFileId_t unPublishedFileId);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(intptr_t instancePtr, class CSteamID steamId, uint32 unStartIndex, struct SteamParamStringArray_t * pRequiredTags, struct SteamParamStringArray_t * pExcludedTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_PublishVideo(intptr_t instancePtr, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, struct SteamParamStringArray_t * pTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_SetUserPublishedFileAction(intptr_t instancePtr, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(intptr_t instancePtr, EWorkshopFileAction eAction, uint32 unStartIndex);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(intptr_t instancePtr, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, struct SteamParamStringArray_t * pTags, struct SteamParamStringArray_t * pUserTags);
+S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation(intptr_t instancePtr, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority);
+S_API bool SteamAPI_ISteamUserStats_RequestCurrentStats(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamUserStats_GetStat(intptr_t instancePtr, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetStat0(intptr_t instancePtr, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_SetStat(intptr_t instancePtr, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamUserStats_SetStat0(intptr_t instancePtr, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamUserStats_UpdateAvgRateStat(intptr_t instancePtr, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamUserStats_GetAchievement(intptr_t instancePtr, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_SetAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_ClearAchievement(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAndUnlockTime(intptr_t instancePtr, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_StoreStats(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetAchievementIcon(intptr_t instancePtr, const char * pchName);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(intptr_t instancePtr, const char * pchName, const char * pchKey);
+S_API bool SteamAPI_ISteamUserStats_IndicateAchievementProgress(intptr_t instancePtr, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress);
+S_API uint32 SteamAPI_ISteamUserStats_GetNumAchievements(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamUserStats_GetAchievementName(intptr_t instancePtr, uint32 iAchievement);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetUserAchievementAndUnlockTime(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime);
+S_API bool SteamAPI_ISteamUserStats_ResetAllStats(intptr_t instancePtr, bool bAchievementsToo);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindOrCreateLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_FindLeaderboard(intptr_t instancePtr, const char * pchLeaderboardName);
+S_API const char * SteamAPI_ISteamUserStats_GetLeaderboardName(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API int SteamAPI_ISteamUserStats_GetLeaderboardEntryCount(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardSortMethod SteamAPI_ISteamUserStats_GetLeaderboardSortMethod(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API ELeaderboardDisplayType SteamAPI_ISteamUserStats_GetLeaderboardDisplayType(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntries(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_DownloadLeaderboardEntriesForUsers(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, class CSteamID * prgUsers, int cUsers);
+S_API bool SteamAPI_ISteamUserStats_GetDownloadedLeaderboardEntry(intptr_t instancePtr, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, struct LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_UploadLeaderboardScore(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_AttachLeaderboardUGC(intptr_t instancePtr, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_GetNumberOfCurrentPlayers(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalAchievementPercentages(intptr_t instancePtr);
+S_API int SteamAPI_ISteamUserStats_GetMostAchievedAchievementInfo(intptr_t instancePtr, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API int SteamAPI_ISteamUserStats_GetNextMostAchievedAchievementInfo(intptr_t instancePtr, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved);
+S_API bool SteamAPI_ISteamUserStats_GetAchievementAchievedPercent(intptr_t instancePtr, const char * pchName, float * pflPercent);
+S_API SteamAPICall_t SteamAPI_ISteamUserStats_RequestGlobalStats(intptr_t instancePtr, int nHistoryDays);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat(intptr_t instancePtr, const char * pchStatName, int64 * pData);
+S_API bool SteamAPI_ISteamUserStats_GetGlobalStat0(intptr_t instancePtr, const char * pchStatName, double * pData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory(intptr_t instancePtr, const char * pchStatName, int64 * pData, uint32 cubData);
+S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistory0(intptr_t instancePtr, const char * pchStatName, double * pData, uint32 cubData);
+S_API bool SteamAPI_ISteamApps_BIsSubscribed(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsLowViolence(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsCybercafe(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsVACBanned(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetCurrentGameLanguage(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetAvailableGameLanguages(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedApp(intptr_t instancePtr, AppId_t appID);
+S_API bool SteamAPI_ISteamApps_BIsDlcInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint32 SteamAPI_ISteamApps_GetEarliestPurchaseUnixTime(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_BIsSubscribedFromFreeWeekend(intptr_t instancePtr);
+S_API int SteamAPI_ISteamApps_GetDLCCount(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamApps_BGetDLCDataByIndex(intptr_t instancePtr, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize);
+S_API void SteamAPI_ISteamApps_InstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_UninstallDLC(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamApps_RequestAppProofOfPurchaseKey(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamApps_GetCurrentBetaName(intptr_t instancePtr, char * pchName, int cchNameBufferSize);
+S_API bool SteamAPI_ISteamApps_MarkContentCorrupt(intptr_t instancePtr, bool bMissingFilesOnly);
+S_API uint32 SteamAPI_ISteamApps_GetInstalledDepots(intptr_t instancePtr, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots);
+S_API uint32 SteamAPI_ISteamApps_GetAppInstallDir(intptr_t instancePtr, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize);
+S_API bool SteamAPI_ISteamApps_BIsAppInstalled(intptr_t instancePtr, AppId_t appID);
+S_API uint64 SteamAPI_ISteamApps_GetAppOwner(intptr_t instancePtr);
+S_API const char * SteamAPI_ISteamApps_GetLaunchQueryParam(intptr_t instancePtr, const char * pchKey);
+S_API bool SteamAPI_ISteamApps_GetDlcDownloadProgress(intptr_t instancePtr, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API int SteamAPI_ISteamApps_GetAppBuildId(intptr_t instancePtr);
+S_API void SteamAPI_ISteamApps_RequestAllProofOfPurchaseKeys(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamApps_GetFileDetails(intptr_t instancePtr, const char * pszFileName);
+S_API bool SteamAPI_ISteamNetworking_SendP2PPacket(intptr_t instancePtr, class CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_IsP2PPacketAvailable(intptr_t instancePtr, uint32 * pcubMsgSize, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_ReadP2PPacket(intptr_t instancePtr, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, class CSteamID * psteamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PSessionWithUser(intptr_t instancePtr, class CSteamID steamIDRemote);
+S_API bool SteamAPI_ISteamNetworking_CloseP2PChannelWithUser(intptr_t instancePtr, class CSteamID steamIDRemote, int nChannel);
+S_API bool SteamAPI_ISteamNetworking_GetP2PSessionState(intptr_t instancePtr, class CSteamID steamIDRemote, struct P2PSessionState_t * pConnectionState);
+S_API bool SteamAPI_ISteamNetworking_AllowP2PPacketRelay(intptr_t instancePtr, bool bAllow);
+S_API SNetListenSocket_t SteamAPI_ISteamNetworking_CreateListenSocket(intptr_t instancePtr, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateP2PConnectionSocket(intptr_t instancePtr, class CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay);
+S_API SNetSocket_t SteamAPI_ISteamNetworking_CreateConnectionSocket(intptr_t instancePtr, uint32 nIP, uint16 nPort, int nTimeoutSec);
+S_API bool SteamAPI_ISteamNetworking_DestroySocket(intptr_t instancePtr, SNetSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_DestroyListenSocket(intptr_t instancePtr, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd);
+S_API bool SteamAPI_ISteamNetworking_SendDataOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailableOnSocket(intptr_t instancePtr, SNetSocket_t hSocket, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_RetrieveDataFromSocket(intptr_t instancePtr, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize);
+S_API bool SteamAPI_ISteamNetworking_IsDataAvailable(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_RetrieveData(intptr_t instancePtr, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket);
+S_API bool SteamAPI_ISteamNetworking_GetSocketInfo(intptr_t instancePtr, SNetSocket_t hSocket, class CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote);
+S_API bool SteamAPI_ISteamNetworking_GetListenSocketInfo(intptr_t instancePtr, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort);
+S_API ESNetSocketConnectionType SteamAPI_ISteamNetworking_GetSocketConnectionType(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API int SteamAPI_ISteamNetworking_GetMaxPacketSize(intptr_t instancePtr, SNetSocket_t hSocket);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_WriteScreenshot(intptr_t instancePtr, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddScreenshotToLibrary(intptr_t instancePtr, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight);
+S_API void SteamAPI_ISteamScreenshots_TriggerScreenshot(intptr_t instancePtr);
+S_API void SteamAPI_ISteamScreenshots_HookScreenshots(intptr_t instancePtr, bool bHook);
+S_API bool SteamAPI_ISteamScreenshots_SetLocation(intptr_t instancePtr, ScreenshotHandle hScreenshot, const char * pchLocation);
+S_API bool SteamAPI_ISteamScreenshots_TagUser(intptr_t instancePtr, ScreenshotHandle hScreenshot, class CSteamID steamID);
+S_API bool SteamAPI_ISteamScreenshots_TagPublishedFile(intptr_t instancePtr, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID);
+S_API bool SteamAPI_ISteamScreenshots_IsScreenshotsHooked(intptr_t instancePtr);
+S_API ScreenshotHandle SteamAPI_ISteamScreenshots_AddVRScreenshotToLibrary(intptr_t instancePtr, EVRScreenshotType eType, const char * pchFilename, const char * pchVRFilename);
+S_API bool SteamAPI_ISteamMusic_BIsEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusic_BIsPlaying(intptr_t instancePtr);
+S_API AudioPlayback_Status SteamAPI_ISteamMusic_GetPlaybackStatus(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Play(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_Pause(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayPrevious(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_PlayNext(intptr_t instancePtr);
+S_API void SteamAPI_ISteamMusic_SetVolume(intptr_t instancePtr, float flVolume);
+S_API float SteamAPI_ISteamMusic_GetVolume(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_RegisterSteamMusicRemote(intptr_t instancePtr, const char * pchName);
+S_API bool SteamAPI_ISteamMusicRemote_DeregisterSteamMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BIsCurrentMusicRemote(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_BActivationSuccess(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_SetDisplayName(intptr_t instancePtr, const char * pchDisplayName);
+S_API bool SteamAPI_ISteamMusicRemote_SetPNGIcon_64x64(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayPrevious(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlayNext(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnableQueue(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_EnablePlaylists(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdatePlaybackStatus(intptr_t instancePtr, AudioPlayback_Status nStatus);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateShuffled(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateLooped(intptr_t instancePtr, bool bValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateVolume(intptr_t instancePtr, float flValue);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryIsAvailable(intptr_t instancePtr, bool bAvailable);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryText(intptr_t instancePtr, const char * pchText);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryElapsedSeconds(intptr_t instancePtr, int nValue);
+S_API bool SteamAPI_ISteamMusicRemote_UpdateCurrentEntryCoverArt(intptr_t instancePtr, void * pvBuffer, uint32 cbBufferLength);
+S_API bool SteamAPI_ISteamMusicRemote_CurrentEntryDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_QueueWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetQueueEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetQueueEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentQueueEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_QueueDidChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistWillChange(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_ResetPlaylistEntries(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamMusicRemote_SetPlaylistEntry(intptr_t instancePtr, int nID, int nPosition, const char * pchEntryText);
+S_API bool SteamAPI_ISteamMusicRemote_SetCurrentPlaylistEntry(intptr_t instancePtr, int nID);
+S_API bool SteamAPI_ISteamMusicRemote_PlaylistDidChange(intptr_t instancePtr);
+S_API HTTPRequestHandle SteamAPI_ISteamHTTP_CreateHTTPRequest(intptr_t instancePtr, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestContextValue(intptr_t instancePtr, HTTPRequestHandle hRequest, uint64 ulContextValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestNetworkActivityTimeout(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestGetOrPostParameter(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_SendHTTPRequestAndStreamResponse(intptr_t instancePtr, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle);
+S_API bool SteamAPI_ISteamHTTP_DeferHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_PrioritizeHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderSize(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseHeaderValue(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodySize(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 * unBodySize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPStreamingResponseBodyData(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 cOffset, uint8 * pBodyDataBuffer, uint32 unBufferSize);
+S_API bool SteamAPI_ISteamHTTP_ReleaseHTTPRequest(intptr_t instancePtr, HTTPRequestHandle hRequest);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPDownloadProgressPct(intptr_t instancePtr, HTTPRequestHandle hRequest, float * pflPercentOut);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRawPostBody(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen);
+S_API HTTPCookieContainerHandle SteamAPI_ISteamHTTP_CreateCookieContainer(intptr_t instancePtr, bool bAllowResponsesToModify);
+S_API bool SteamAPI_ISteamHTTP_ReleaseCookieContainer(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetCookie(intptr_t instancePtr, HTTPCookieContainerHandle hCookieContainer, const char * pchHost, const char * pchUrl, const char * pchCookie);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestCookieContainer(intptr_t instancePtr, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestUserAgentInfo(intptr_t instancePtr, HTTPRequestHandle hRequest, const char * pchUserAgentInfo);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(intptr_t instancePtr, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate);
+S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(intptr_t instancePtr, HTTPRequestHandle hRequest, uint32 unMilliseconds);
+S_API bool SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut(intptr_t instancePtr, HTTPRequestHandle hRequest, bool * pbWasTimedOut);
+S_API bool SteamAPI_ISteamController_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamController_Shutdown(intptr_t instancePtr);
+S_API void SteamAPI_ISteamController_RunFrame(intptr_t instancePtr);
+S_API int SteamAPI_ISteamController_GetConnectedControllers(intptr_t instancePtr, ControllerHandle_t * handlesOut);
+S_API bool SteamAPI_ISteamController_ShowBindingPanel(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetActionSetHandle(intptr_t instancePtr, const char * pszActionSetName);
+S_API void SteamAPI_ISteamController_ActivateActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle);
+S_API ControllerActionSetHandle_t SteamAPI_ISteamController_GetCurrentActionSet(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API void SteamAPI_ISteamController_ActivateActionSetLayer(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetLayerHandle);
+S_API void SteamAPI_ISteamController_DeactivateActionSetLayer(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetLayerHandle);
+S_API void SteamAPI_ISteamController_DeactivateAllActionSetLayers(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API int SteamAPI_ISteamController_GetActiveActionSetLayers(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t * handlesOut);
+S_API ControllerDigitalActionHandle_t SteamAPI_ISteamController_GetDigitalActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerDigitalActionData_t SteamAPI_ISteamController_GetDigitalActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle);
+S_API int SteamAPI_ISteamController_GetDigitalActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin * originsOut);
+S_API ControllerAnalogActionHandle_t SteamAPI_ISteamController_GetAnalogActionHandle(intptr_t instancePtr, const char * pszActionName);
+S_API struct ControllerAnalogActionData_t SteamAPI_ISteamController_GetAnalogActionData(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle);
+S_API int SteamAPI_ISteamController_GetAnalogActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin * originsOut);
+S_API void SteamAPI_ISteamController_StopAnalogActionMomentum(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction);
+S_API void SteamAPI_ISteamController_TriggerHapticPulse(intptr_t instancePtr, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec);
+S_API void SteamAPI_ISteamController_TriggerRepeatedHapticPulse(intptr_t instancePtr, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags);
+S_API void SteamAPI_ISteamController_TriggerVibration(intptr_t instancePtr, ControllerHandle_t controllerHandle, unsigned short usLeftSpeed, unsigned short usRightSpeed);
+S_API void SteamAPI_ISteamController_SetLEDColor(intptr_t instancePtr, ControllerHandle_t controllerHandle, uint8 nColorR, uint8 nColorG, uint8 nColorB, unsigned int nFlags);
+S_API int SteamAPI_ISteamController_GetGamepadIndexForController(intptr_t instancePtr, ControllerHandle_t ulControllerHandle);
+S_API ControllerHandle_t SteamAPI_ISteamController_GetControllerForGamepadIndex(intptr_t instancePtr, int nIndex);
+S_API struct ControllerMotionData_t SteamAPI_ISteamController_GetMotionData(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API bool SteamAPI_ISteamController_ShowDigitalActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition);
+S_API bool SteamAPI_ISteamController_ShowAnalogActionOrigins(intptr_t instancePtr, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition);
+S_API const char * SteamAPI_ISteamController_GetStringForActionOrigin(intptr_t instancePtr, EControllerActionOrigin eOrigin);
+S_API const char * SteamAPI_ISteamController_GetGlyphForActionOrigin(intptr_t instancePtr, EControllerActionOrigin eOrigin);
+S_API ESteamInputType SteamAPI_ISteamController_GetInputTypeForHandle(intptr_t instancePtr, ControllerHandle_t controllerHandle);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUserUGCRequest(intptr_t instancePtr, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequest(intptr_t instancePtr, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage);
+S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SendQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCResult(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, struct SteamUGCDetails_t * pDetails);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCPreviewURL(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCChildren(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCStatistic(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint64 * pStatValue);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCAdditionalPreview(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, char * pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType * pPreviewType);
+S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index);
+S_API bool SteamAPI_ISteamUGC_GetQueryUGCKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize);
+S_API bool SteamAPI_ISteamUGC_ReleaseQueryUGCRequest(intptr_t instancePtr, UGCQueryHandle_t handle);
+S_API bool SteamAPI_ISteamUGC_AddRequiredTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_AddExcludedTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pTagName);
+S_API bool SteamAPI_ISteamUGC_SetReturnOnlyIDs(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnOnlyIDs);
+S_API bool SteamAPI_ISteamUGC_SetReturnKeyValueTags(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnKeyValueTags);
+S_API bool SteamAPI_ISteamUGC_SetReturnLongDescription(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnLongDescription);
+S_API bool SteamAPI_ISteamUGC_SetReturnMetadata(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnMetadata);
+S_API bool SteamAPI_ISteamUGC_SetReturnChildren(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnChildren);
+S_API bool SteamAPI_ISteamUGC_SetReturnAdditionalPreviews(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews);
+S_API bool SteamAPI_ISteamUGC_SetReturnTotalOnly(intptr_t instancePtr, UGCQueryHandle_t handle, bool bReturnTotalOnly);
+S_API bool SteamAPI_ISteamUGC_SetReturnPlaytimeStats(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unDays);
+S_API bool SteamAPI_ISteamUGC_SetLanguage(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetAllowCachedResponse(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds);
+S_API bool SteamAPI_ISteamUGC_SetCloudFileNameFilter(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pMatchCloudFileName);
+S_API bool SteamAPI_ISteamUGC_SetMatchAnyTag(intptr_t instancePtr, UGCQueryHandle_t handle, bool bMatchAnyTag);
+S_API bool SteamAPI_ISteamUGC_SetSearchText(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pSearchText);
+S_API bool SteamAPI_ISteamUGC_SetRankedByTrendDays(intptr_t instancePtr, UGCQueryHandle_t handle, uint32 unDays);
+S_API bool SteamAPI_ISteamUGC_AddRequiredKeyValueTag(intptr_t instancePtr, UGCQueryHandle_t handle, const char * pKey, const char * pValue);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RequestUGCDetails(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_CreateItem(intptr_t instancePtr, AppId_t nConsumerAppId, EWorkshopFileType eFileType);
+S_API UGCUpdateHandle_t SteamAPI_ISteamUGC_StartItemUpdate(intptr_t instancePtr, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_SetItemTitle(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchTitle);
+S_API bool SteamAPI_ISteamUGC_SetItemDescription(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchDescription);
+S_API bool SteamAPI_ISteamUGC_SetItemUpdateLanguage(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchLanguage);
+S_API bool SteamAPI_ISteamUGC_SetItemMetadata(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchMetaData);
+S_API bool SteamAPI_ISteamUGC_SetItemVisibility(intptr_t instancePtr, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility);
+S_API bool SteamAPI_ISteamUGC_SetItemTags(intptr_t instancePtr, UGCUpdateHandle_t updateHandle, const struct SteamParamStringArray_t * pTags);
+S_API bool SteamAPI_ISteamUGC_SetItemContent(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszContentFolder);
+S_API bool SteamAPI_ISteamUGC_SetItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile);
+S_API bool SteamAPI_ISteamUGC_RemoveItemKeyValueTags(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey);
+S_API bool SteamAPI_ISteamUGC_AddItemKeyValueTag(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue);
+S_API bool SteamAPI_ISteamUGC_AddItemPreviewFile(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszPreviewFile, EItemPreviewType type);
+S_API bool SteamAPI_ISteamUGC_AddItemPreviewVideo(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pszVideoID);
+S_API bool SteamAPI_ISteamUGC_UpdateItemPreviewFile(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index, const char * pszPreviewFile);
+S_API bool SteamAPI_ISteamUGC_UpdateItemPreviewVideo(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index, const char * pszVideoID);
+S_API bool SteamAPI_ISteamUGC_RemoveItemPreview(intptr_t instancePtr, UGCUpdateHandle_t handle, uint32 index);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubmitItemUpdate(intptr_t instancePtr, UGCUpdateHandle_t handle, const char * pchChangeNote);
+S_API EItemUpdateStatus SteamAPI_ISteamUGC_GetItemUpdateProgress(intptr_t instancePtr, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bVoteUp);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_GetUserItemVote(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddItemToFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveItemFromFavorites(intptr_t instancePtr, AppId_t nAppId, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_SubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_UnsubscribeItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API uint32 SteamAPI_ISteamUGC_GetNumSubscribedItems(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamUGC_GetSubscribedItems(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries);
+S_API uint32 SteamAPI_ISteamUGC_GetItemState(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API bool SteamAPI_ISteamUGC_GetItemInstallInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp);
+S_API bool SteamAPI_ISteamUGC_GetItemDownloadInfo(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal);
+S_API bool SteamAPI_ISteamUGC_DownloadItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, bool bHighPriority);
+S_API bool SteamAPI_ISteamUGC_BInitWorkshopForGameServer(intptr_t instancePtr, DepotId_t unWorkshopDepotID, const char * pszFolder);
+S_API void SteamAPI_ISteamUGC_SuspendDownloads(intptr_t instancePtr, bool bSuspend);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_StartPlaytimeTracking(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_StopPlaytimeTracking(intptr_t instancePtr, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_StopPlaytimeTrackingForAllItems(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddDependency(intptr_t instancePtr, PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveDependency(intptr_t instancePtr, PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_AddAppDependency(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, AppId_t nAppID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_RemoveAppDependency(intptr_t instancePtr, PublishedFileId_t nPublishedFileID, AppId_t nAppID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_GetAppDependencies(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API SteamAPICall_t SteamAPI_ISteamUGC_DeleteItem(intptr_t instancePtr, PublishedFileId_t nPublishedFileID);
+S_API uint32 SteamAPI_ISteamAppList_GetNumInstalledApps(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamAppList_GetInstalledApps(intptr_t instancePtr, AppId_t * pvecAppID, uint32 unMaxAppIDs);
+S_API int SteamAPI_ISteamAppList_GetAppName(intptr_t instancePtr, AppId_t nAppID, char * pchName, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppInstallDir(intptr_t instancePtr, AppId_t nAppID, char * pchDirectory, int cchNameMax);
+S_API int SteamAPI_ISteamAppList_GetAppBuildId(intptr_t instancePtr, AppId_t nAppID);
+S_API void SteamAPI_ISteamHTMLSurface_DestructISteamHTMLSurface(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Init(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamHTMLSurface_Shutdown(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamHTMLSurface_CreateBrowser(intptr_t instancePtr, const char * pchUserAgent, const char * pchUserCSS);
+S_API void SteamAPI_ISteamHTMLSurface_RemoveBrowser(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_LoadURL(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData);
+S_API void SteamAPI_ISteamHTMLSurface_SetSize(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight);
+S_API void SteamAPI_ISteamHTMLSurface_StopLoad(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Reload(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoBack(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GoForward(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_AddHeader(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue);
+S_API void SteamAPI_ISteamHTMLSurface_ExecuteJavascript(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchScript);
+S_API void SteamAPI_ISteamHTMLSurface_MouseUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseDoubleClick(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton);
+S_API void SteamAPI_ISteamHTMLSurface_MouseMove(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_MouseWheel(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int32 nDelta);
+S_API void SteamAPI_ISteamHTMLSurface_KeyDown(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyUp(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_KeyChar(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers);
+S_API void SteamAPI_ISteamHTMLSurface_SetHorizontalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetVerticalScroll(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll);
+S_API void SteamAPI_ISteamHTMLSurface_SetKeyFocus(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus);
+S_API void SteamAPI_ISteamHTMLSurface_ViewSource(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_CopyToClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_PasteFromClipboard(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_Find(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse);
+S_API void SteamAPI_ISteamHTMLSurface_StopFind(intptr_t instancePtr, HHTMLBrowser unBrowserHandle);
+S_API void SteamAPI_ISteamHTMLSurface_GetLinkAtPosition(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, int x, int y);
+S_API void SteamAPI_ISteamHTMLSurface_SetCookie(intptr_t instancePtr, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly);
+S_API void SteamAPI_ISteamHTMLSurface_SetPageScaleFactor(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY);
+S_API void SteamAPI_ISteamHTMLSurface_SetBackgroundMode(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bBackgroundMode);
+S_API void SteamAPI_ISteamHTMLSurface_SetDPIScalingFactor(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, float flDPIScaling);
+S_API void SteamAPI_ISteamHTMLSurface_AllowStartRequest(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bAllowed);
+S_API void SteamAPI_ISteamHTMLSurface_JSDialogResponse(intptr_t instancePtr, HHTMLBrowser unBrowserHandle, bool bResult);
+S_API EResult SteamAPI_ISteamInventory_GetResultStatus(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetResultItems(intptr_t instancePtr, SteamInventoryResult_t resultHandle, struct SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize);
+S_API bool SteamAPI_ISteamInventory_GetResultItemProperty(intptr_t instancePtr, SteamInventoryResult_t resultHandle, uint32 unItemIndex, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSizeOut);
+S_API uint32 SteamAPI_ISteamInventory_GetResultTimestamp(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_CheckResultSteamID(intptr_t instancePtr, SteamInventoryResult_t resultHandle, class CSteamID steamIDExpected);
+S_API void SteamAPI_ISteamInventory_DestroyResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle);
+S_API bool SteamAPI_ISteamInventory_GetAllItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_GetItemsByID(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs);
+S_API bool SteamAPI_ISteamInventory_SerializeResult(intptr_t instancePtr, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize);
+S_API bool SteamAPI_ISteamInventory_DeserializeResult(intptr_t instancePtr, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE);
+S_API bool SteamAPI_ISteamInventory_GenerateItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_GrantPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle);
+S_API bool SteamAPI_ISteamInventory_AddPromoItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef);
+S_API bool SteamAPI_ISteamInventory_AddPromoItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_ConsumeItem(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity);
+S_API bool SteamAPI_ISteamInventory_ExchangeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength);
+S_API bool SteamAPI_ISteamInventory_TransferItemQuantity(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest);
+S_API void SteamAPI_ISteamInventory_SendItemDropHeartbeat(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_TriggerItemDrop(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition);
+S_API bool SteamAPI_ISteamInventory_TradeItems(intptr_t instancePtr, SteamInventoryResult_t * pResultHandle, class CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength);
+S_API bool SteamAPI_ISteamInventory_LoadItemDefinitions(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionIDs(intptr_t instancePtr, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API bool SteamAPI_ISteamInventory_GetItemDefinitionProperty(intptr_t instancePtr, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSizeOut);
+S_API SteamAPICall_t SteamAPI_ISteamInventory_RequestEligiblePromoItemDefinitionsIDs(intptr_t instancePtr, class CSteamID steamID);
+S_API bool SteamAPI_ISteamInventory_GetEligiblePromoItemDefinitionIDs(intptr_t instancePtr, class CSteamID steamID, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize);
+S_API SteamAPICall_t SteamAPI_ISteamInventory_StartPurchase(intptr_t instancePtr, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength);
+S_API SteamAPICall_t SteamAPI_ISteamInventory_RequestPrices(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamInventory_GetNumItemsWithPrices(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_GetItemsWithPrices(intptr_t instancePtr, SteamItemDef_t * pArrayItemDefs, uint64 * pPrices, uint32 unArrayLength);
+S_API bool SteamAPI_ISteamInventory_GetItemPrice(intptr_t instancePtr, SteamItemDef_t iDefinition, uint64 * pPrice);
+S_API SteamInventoryUpdateHandle_t SteamAPI_ISteamInventory_StartUpdateProperties(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamInventory_RemoveProperty(intptr_t instancePtr, SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char * pchPropertyName);
+S_API bool SteamAPI_ISteamInventory_SetProperty(intptr_t instancePtr, SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char * pchPropertyName, const char * pchPropertyValue);
+S_API bool SteamAPI_ISteamInventory_SetProperty0(intptr_t instancePtr, SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char * pchPropertyName, bool bValue);
+S_API bool SteamAPI_ISteamInventory_SetProperty1(intptr_t instancePtr, SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char * pchPropertyName, int64 nValue);
+S_API bool SteamAPI_ISteamInventory_SetProperty2(intptr_t instancePtr, SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char * pchPropertyName, float flValue);
+S_API bool SteamAPI_ISteamInventory_SubmitUpdateProperties(intptr_t instancePtr, SteamInventoryUpdateHandle_t handle, SteamInventoryResult_t * pResultHandle);
+S_API void SteamAPI_ISteamVideo_GetVideoURL(intptr_t instancePtr, AppId_t unVideoAppID);
+S_API bool SteamAPI_ISteamVideo_IsBroadcasting(intptr_t instancePtr, int * pnNumViewers);
+S_API void SteamAPI_ISteamVideo_GetOPFSettings(intptr_t instancePtr, AppId_t unVideoAppID);
+S_API bool SteamAPI_ISteamVideo_GetOPFStringForApp(intptr_t instancePtr, AppId_t unVideoAppID, char * pchBuffer, int32 * pnBufferSize);
+S_API bool SteamAPI_ISteamParentalSettings_BIsParentalLockEnabled(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamParentalSettings_BIsParentalLockLocked(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamParentalSettings_BIsAppBlocked(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamParentalSettings_BIsAppInBlockList(intptr_t instancePtr, AppId_t nAppID);
+S_API bool SteamAPI_ISteamParentalSettings_BIsFeatureBlocked(intptr_t instancePtr, EParentalFeature eFeature);
+S_API bool SteamAPI_ISteamParentalSettings_BIsFeatureInBlockList(intptr_t instancePtr, EParentalFeature eFeature);
+S_API bool SteamAPI_ISteamGameServer_InitGameServer(intptr_t instancePtr, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString);
+S_API void SteamAPI_ISteamGameServer_SetProduct(intptr_t instancePtr, const char * pszProduct);
+S_API void SteamAPI_ISteamGameServer_SetGameDescription(intptr_t instancePtr, const char * pszGameDescription);
+S_API void SteamAPI_ISteamGameServer_SetModDir(intptr_t instancePtr, const char * pszModDir);
+S_API void SteamAPI_ISteamGameServer_SetDedicatedServer(intptr_t instancePtr, bool bDedicated);
+S_API void SteamAPI_ISteamGameServer_LogOn(intptr_t instancePtr, const char * pszToken);
+S_API void SteamAPI_ISteamGameServer_LogOnAnonymous(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_LogOff(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BLoggedOn(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_BSecure(intptr_t instancePtr);
+S_API uint64 SteamAPI_ISteamGameServer_GetSteamID(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_WasRestartRequested(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetMaxPlayerCount(intptr_t instancePtr, int cPlayersMax);
+S_API void SteamAPI_ISteamGameServer_SetBotPlayerCount(intptr_t instancePtr, int cBotplayers);
+S_API void SteamAPI_ISteamGameServer_SetServerName(intptr_t instancePtr, const char * pszServerName);
+S_API void SteamAPI_ISteamGameServer_SetMapName(intptr_t instancePtr, const char * pszMapName);
+S_API void SteamAPI_ISteamGameServer_SetPasswordProtected(intptr_t instancePtr, bool bPasswordProtected);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorPort(intptr_t instancePtr, uint16 unSpectatorPort);
+S_API void SteamAPI_ISteamGameServer_SetSpectatorServerName(intptr_t instancePtr, const char * pszSpectatorServerName);
+S_API void SteamAPI_ISteamGameServer_ClearAllKeyValues(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SetKeyValue(intptr_t instancePtr, const char * pKey, const char * pValue);
+S_API void SteamAPI_ISteamGameServer_SetGameTags(intptr_t instancePtr, const char * pchGameTags);
+S_API void SteamAPI_ISteamGameServer_SetGameData(intptr_t instancePtr, const char * pchGameData);
+S_API void SteamAPI_ISteamGameServer_SetRegion(intptr_t instancePtr, const char * pszRegion);
+S_API bool SteamAPI_ISteamGameServer_SendUserConnectAndAuthenticate(intptr_t instancePtr, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, class CSteamID * pSteamIDUser);
+S_API uint64 SteamAPI_ISteamGameServer_CreateUnauthenticatedUserConnection(intptr_t instancePtr);
+S_API void SteamAPI_ISteamGameServer_SendUserDisconnect(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServer_BUpdateUserData(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore);
+S_API HAuthTicket SteamAPI_ISteamGameServer_GetAuthSessionTicket(intptr_t instancePtr, void * pTicket, int cbMaxTicket, uint32 * pcbTicket);
+S_API EBeginAuthSessionResult SteamAPI_ISteamGameServer_BeginAuthSession(intptr_t instancePtr, const void * pAuthTicket, int cbAuthTicket, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_EndAuthSession(intptr_t instancePtr, class CSteamID steamID);
+S_API void SteamAPI_ISteamGameServer_CancelAuthTicket(intptr_t instancePtr, HAuthTicket hAuthTicket);
+S_API EUserHasLicenseForAppResult SteamAPI_ISteamGameServer_UserHasLicenseForApp(intptr_t instancePtr, class CSteamID steamID, AppId_t appID);
+S_API bool SteamAPI_ISteamGameServer_RequestUserGroupStatus(intptr_t instancePtr, class CSteamID steamIDUser, class CSteamID steamIDGroup);
+S_API void SteamAPI_ISteamGameServer_GetGameplayStats(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_GetServerReputation(intptr_t instancePtr);
+S_API uint32 SteamAPI_ISteamGameServer_GetPublicIP(intptr_t instancePtr);
+S_API bool SteamAPI_ISteamGameServer_HandleIncomingPacket(intptr_t instancePtr, const void * pData, int cbData, uint32 srcIP, uint16 srcPort);
+S_API int SteamAPI_ISteamGameServer_GetNextOutgoingPacket(intptr_t instancePtr, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort);
+S_API void SteamAPI_ISteamGameServer_EnableHeartbeats(intptr_t instancePtr, bool bActive);
+S_API void SteamAPI_ISteamGameServer_SetHeartbeatInterval(intptr_t instancePtr, int iHeartbeatInterval);
+S_API void SteamAPI_ISteamGameServer_ForceHeartbeat(intptr_t instancePtr);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_AssociateWithClan(intptr_t instancePtr, class CSteamID steamIDClan);
+S_API SteamAPICall_t SteamAPI_ISteamGameServer_ComputeNewPlayerCompatibility(intptr_t instancePtr, class CSteamID steamIDNewPlayer);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_RequestUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float * pData);
+S_API bool SteamAPI_ISteamGameServerStats_GetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, bool * pbAchieved);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, int32 nData);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserStat0(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float fData);
+S_API bool SteamAPI_ISteamGameServerStats_UpdateUserAvgRateStat(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName, float flCountThisSession, double dSessionLength);
+S_API bool SteamAPI_ISteamGameServerStats_SetUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API bool SteamAPI_ISteamGameServerStats_ClearUserAchievement(intptr_t instancePtr, class CSteamID steamIDUser, const char * pchName);
+S_API SteamAPICall_t SteamAPI_ISteamGameServerStats_StoreUserStats(intptr_t instancePtr, class CSteamID steamIDUser);
+#endif // STEAMAPIFLAT_H
+
+
diff --git a/lsteamclient/steamworks_sdk_142/steam_api_internal.h b/lsteamclient/steamworks_sdk_142/steam_api_internal.h
new file mode 100644
index 00000000..b8864c5e
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/steam_api_internal.h
@@ -0,0 +1,328 @@
+//====== Copyright 1996-2015, Valve Corporation, All rights reserved. =======
+//
+// Purpose: Internal private Steamworks API declarations and definitions
+//
+//=============================================================================
+
+#ifndef STEAM_API_INTERNAL_H
+#define STEAM_API_INTERNAL_H
+
+S_API HSteamUser SteamAPI_GetHSteamUser();
+S_API void * S_CALLTYPE SteamInternal_ContextInit( void *pContextInitData );
+S_API void * S_CALLTYPE SteamInternal_CreateInterface( const char *ver );
+
+#if !defined( STEAM_API_EXPORTS )
+
+inline void S_CALLTYPE SteamInternal_OnContextInit( void* p )
+{
+ ((CSteamAPIContext*)p)->Clear();
+ if ( SteamAPI_GetHSteamPipe() )
+ ((CSteamAPIContext*)p)->Init();
+}
+inline CSteamAPIContext& SteamInternal_ModuleContext()
+{
+ // SteamInternal_ContextInit takes a base pointer for the equivalent of
+ // struct { void (*pFn)(void* pCtx); uintp counter; CSteamAPIContext ctx; }
+ // Do not change layout of 2 + sizeof... or add non-pointer aligned data!
+ // NOTE: declaring "static CSteamAPIConext" creates a large function
+ // which queries the initialization status of the object. We know that
+ // it is pointer-aligned and fully memset with zeros, so just alias a
+ // static buffer of the appropriate size and call it a CSteamAPIContext.
+ static void* s_CallbackCounterAndContext[ 2 + sizeof(CSteamAPIContext)/sizeof(void*) ] = { (void*)&SteamInternal_OnContextInit, 0 };
+ return *(CSteamAPIContext*)SteamInternal_ContextInit( s_CallbackCounterAndContext );
+}
+
+inline ISteamClient *SteamClient() { return SteamInternal_ModuleContext().SteamClient(); }
+inline ISteamUser *SteamUser() { return SteamInternal_ModuleContext().SteamUser(); }
+inline ISteamFriends *SteamFriends() { return SteamInternal_ModuleContext().SteamFriends(); }
+inline ISteamUtils *SteamUtils() { return SteamInternal_ModuleContext().SteamUtils(); }
+inline ISteamMatchmaking *SteamMatchmaking() { return SteamInternal_ModuleContext().SteamMatchmaking(); }
+inline ISteamUserStats *SteamUserStats() { return SteamInternal_ModuleContext().SteamUserStats(); }
+inline ISteamApps *SteamApps() { return SteamInternal_ModuleContext().SteamApps(); }
+inline ISteamMatchmakingServers *SteamMatchmakingServers() { return SteamInternal_ModuleContext().SteamMatchmakingServers(); }
+inline ISteamNetworking *SteamNetworking() { return SteamInternal_ModuleContext().SteamNetworking(); }
+inline ISteamRemoteStorage *SteamRemoteStorage() { return SteamInternal_ModuleContext().SteamRemoteStorage(); }
+inline ISteamScreenshots *SteamScreenshots() { return SteamInternal_ModuleContext().SteamScreenshots(); }
+inline ISteamHTTP *SteamHTTP() { return SteamInternal_ModuleContext().SteamHTTP(); }
+inline ISteamController *SteamController() { return SteamInternal_ModuleContext().SteamController(); }
+inline ISteamUGC *SteamUGC() { return SteamInternal_ModuleContext().SteamUGC(); }
+inline ISteamAppList *SteamAppList() { return SteamInternal_ModuleContext().SteamAppList(); }
+inline ISteamMusic *SteamMusic() { return SteamInternal_ModuleContext().SteamMusic(); }
+inline ISteamMusicRemote *SteamMusicRemote() { return SteamInternal_ModuleContext().SteamMusicRemote(); }
+inline ISteamHTMLSurface *SteamHTMLSurface() { return SteamInternal_ModuleContext().SteamHTMLSurface(); }
+inline ISteamInventory *SteamInventory() { return SteamInternal_ModuleContext().SteamInventory(); }
+inline ISteamVideo *SteamVideo() { return SteamInternal_ModuleContext().SteamVideo(); }
+inline ISteamParentalSettings *SteamParentalSettings() { return SteamInternal_ModuleContext().SteamParentalSettings(); }
+
+#endif // !defined( STEAM_API_EXPORTS )
+
+
+inline void CSteamAPIContext::Clear()
+{
+ m_pSteamClient = NULL;
+ m_pSteamUser = NULL;
+ m_pSteamFriends = NULL;
+ m_pSteamUtils = NULL;
+ m_pSteamMatchmaking = NULL;
+ m_pSteamUserStats = NULL;
+ m_pSteamApps = NULL;
+ m_pSteamMatchmakingServers = NULL;
+ m_pSteamNetworking = NULL;
+ m_pSteamRemoteStorage = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamScreenshots = NULL;
+ m_pSteamMusic = NULL;
+ m_pController = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamAppList = NULL;
+ m_pSteamMusic = NULL;
+ m_pSteamMusicRemote = NULL;
+ m_pSteamHTMLSurface = NULL;
+ m_pSteamInventory = NULL;
+ m_pSteamVideo = NULL;
+ m_pSteamParentalSettings = NULL;
+}
+
+
+// This function must be declared inline in the header so the module using steam_api.dll gets the version names they want.
+inline bool CSteamAPIContext::Init()
+{
+ HSteamUser hSteamUser = SteamAPI_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamAPI_GetHSteamPipe();
+ if ( !hSteamPipe )
+ return false;
+
+ m_pSteamClient = (ISteamClient*) SteamInternal_CreateInterface( STEAMCLIENT_INTERFACE_VERSION );
+ if ( !m_pSteamClient )
+ return false;
+
+ m_pSteamUser = m_pSteamClient->GetISteamUser( hSteamUser, hSteamPipe, STEAMUSER_INTERFACE_VERSION );
+ if ( !m_pSteamUser )
+ return false;
+
+ m_pSteamFriends = m_pSteamClient->GetISteamFriends( hSteamUser, hSteamPipe, STEAMFRIENDS_INTERFACE_VERSION );
+ if ( !m_pSteamFriends )
+ return false;
+
+ m_pSteamUtils = m_pSteamClient->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamUtils )
+ return false;
+
+ m_pSteamMatchmaking = m_pSteamClient->GetISteamMatchmaking( hSteamUser, hSteamPipe, STEAMMATCHMAKING_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmaking )
+ return false;
+
+ m_pSteamMatchmakingServers = m_pSteamClient->GetISteamMatchmakingServers( hSteamUser, hSteamPipe, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION );
+ if ( !m_pSteamMatchmakingServers )
+ return false;
+
+ m_pSteamUserStats = m_pSteamClient->GetISteamUserStats( hSteamUser, hSteamPipe, STEAMUSERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamUserStats )
+ return false;
+
+ m_pSteamApps = m_pSteamClient->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ m_pSteamNetworking = m_pSteamClient->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamNetworking )
+ return false;
+
+ m_pSteamRemoteStorage = m_pSteamClient->GetISteamRemoteStorage( hSteamUser, hSteamPipe, STEAMREMOTESTORAGE_INTERFACE_VERSION );
+ if ( !m_pSteamRemoteStorage )
+ return false;
+
+ m_pSteamScreenshots = m_pSteamClient->GetISteamScreenshots( hSteamUser, hSteamPipe, STEAMSCREENSHOTS_INTERFACE_VERSION );
+ if ( !m_pSteamScreenshots )
+ return false;
+
+ m_pSteamHTTP = m_pSteamClient->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pController = m_pSteamClient->GetISteamController( hSteamUser, hSteamPipe, STEAMCONTROLLER_INTERFACE_VERSION );
+ if ( !m_pController )
+ return false;
+
+ m_pSteamUGC = m_pSteamClient->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamAppList = m_pSteamClient->GetISteamAppList( hSteamUser, hSteamPipe, STEAMAPPLIST_INTERFACE_VERSION );
+ if ( !m_pSteamAppList )
+ return false;
+
+ m_pSteamMusic = m_pSteamClient->GetISteamMusic( hSteamUser, hSteamPipe, STEAMMUSIC_INTERFACE_VERSION );
+ if ( !m_pSteamMusic )
+ return false;
+
+ m_pSteamMusicRemote = m_pSteamClient->GetISteamMusicRemote( hSteamUser, hSteamPipe, STEAMMUSICREMOTE_INTERFACE_VERSION );
+ if ( !m_pSteamMusicRemote )
+ return false;
+
+ m_pSteamHTMLSurface = m_pSteamClient->GetISteamHTMLSurface( hSteamUser, hSteamPipe, STEAMHTMLSURFACE_INTERFACE_VERSION );
+ if ( !m_pSteamHTMLSurface )
+ return false;
+
+ m_pSteamInventory = m_pSteamClient->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_pSteamVideo = m_pSteamClient->GetISteamVideo( hSteamUser, hSteamPipe, STEAMVIDEO_INTERFACE_VERSION );
+ if ( !m_pSteamVideo )
+ return false;
+
+ m_pSteamParentalSettings = m_pSteamClient->GetISteamParentalSettings( hSteamUser, hSteamPipe, STEAMPARENTALSETTINGS_INTERFACE_VERSION );
+ if ( !m_pSteamParentalSettings )
+ return false;
+
+ return true;
+}
+
+
+//-----------------------------------------------------------------------------
+// The following macros are implementation details, not intended for public use
+//-----------------------------------------------------------------------------
+#define _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param )
+#define _STEAM_CALLBACK_HELPER( _1, _2, SELECTED, ... ) _STEAM_CALLBACK_##SELECTED
+#define _STEAM_CALLBACK_SELECT( X, Y ) _STEAM_CALLBACK_HELPER X Y
+#define _STEAM_CALLBACK_3( extra_code, thisclass, func, param ) \
+ struct CCallbackInternal_ ## func : private CCallbackImpl< sizeof( param ) > { \
+ CCallbackInternal_ ## func () { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func ( const CCallbackInternal_ ## func & ) { extra_code SteamAPI_RegisterCallback( this, param::k_iCallback ); } \
+ CCallbackInternal_ ## func & operator=( const CCallbackInternal_ ## func & ) { return *this; } \
+ private: virtual void Run( void *pvParam ) { _STEAM_CALLBACK_AUTO_HOOK( thisclass, func, param ) \
+ thisclass *pOuter = reinterpret_cast<thisclass*>( reinterpret_cast<char*>(this) - offsetof( thisclass, m_steamcallback_ ## func ) ); \
+ pOuter->func( reinterpret_cast<param*>( pvParam ) ); \
+ } \
+ } m_steamcallback_ ## func ; void func( param *pParam )
+#define _STEAM_CALLBACK_4( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param > var; void func( param *pParam )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam async call result to a class member function
+// template params: T = local class, P = parameter struct
+//-----------------------------------------------------------------------------
+template< class T, class P >
+inline CCallResult<T, P>::CCallResult()
+{
+ m_hAPICall = k_uAPICallInvalid;
+ m_pObj = NULL;
+ m_Func = NULL;
+ m_iCallback = P::k_iCallback;
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Set( SteamAPICall_t hAPICall, T *p, func_t func )
+{
+ if ( m_hAPICall )
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+
+ m_hAPICall = hAPICall;
+ m_pObj = p;
+ m_Func = func;
+
+ if ( hAPICall )
+ SteamAPI_RegisterCallResult( this, hAPICall );
+}
+
+template< class T, class P >
+inline bool CCallResult<T, P>::IsActive() const
+{
+ return (m_hAPICall != k_uAPICallInvalid);
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Cancel()
+{
+ if ( m_hAPICall != k_uAPICallInvalid )
+ {
+ SteamAPI_UnregisterCallResult( this, m_hAPICall );
+ m_hAPICall = k_uAPICallInvalid;
+ }
+
+}
+
+template< class T, class P >
+inline CCallResult<T, P>::~CCallResult()
+{
+ Cancel();
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Run( void *pvParam )
+{
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)((P *)pvParam, false);
+}
+
+template< class T, class P >
+inline void CCallResult<T, P>::Run( void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall )
+{
+ if ( hSteamAPICall == m_hAPICall )
+ {
+ m_hAPICall = k_uAPICallInvalid; // caller unregisters for us
+ (m_pObj->*m_Func)((P *)pvParam, bIOFailure);
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: maps a steam callback to a class member function
+// template params: T = local class, P = parameter struct,
+// bGameserver = listen for gameserver callbacks instead of client callbacks
+//-----------------------------------------------------------------------------
+template< class T, class P, bool bGameserver >
+inline CCallback< T, P, bGameserver >::CCallback( T *pObj, func_t func )
+ : m_pObj( NULL ), m_Func( NULL )
+{
+ if ( bGameserver )
+ {
+ this->SetGameserverFlag();
+ }
+ Register( pObj, func );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Register( T *pObj, func_t func )
+{
+ if ( !pObj || !func )
+ return;
+
+ if ( this->m_nCallbackFlags & CCallbackBase::k_ECallbackFlagsRegistered )
+ Unregister();
+
+ m_pObj = pObj;
+ m_Func = func;
+ // SteamAPI_RegisterCallback sets k_ECallbackFlagsRegistered
+ SteamAPI_RegisterCallback( this, P::k_iCallback );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Unregister()
+{
+ // SteamAPI_UnregisterCallback removes k_ECallbackFlagsRegistered
+ SteamAPI_UnregisterCallback( this );
+}
+
+template< class T, class P, bool bGameserver >
+inline void CCallback< T, P, bGameserver >::Run( void *pvParam )
+{
+ (m_pObj->*m_Func)((P *)pvParam);
+}
+
+
+#if defined(USE_BREAKPAD_HANDLER) || defined(STEAM_API_EXPORTS)
+// 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 )
+// 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 S_CALLTYPE SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback );
+S_API void S_CALLTYPE SteamAPI_SetBreakpadAppID( uint32 unAppID );
+#endif
+
+
+#endif // STEAM_API_INTERNAL_H
diff --git a/lsteamclient/steamworks_sdk_142/steam_gameserver.h b/lsteamclient/steamworks_sdk_142/steam_gameserver.h
new file mode 100644
index 00000000..eadebdb6
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/steam_gameserver.h
@@ -0,0 +1,243 @@
+//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAM_GAMESERVER_H
+#define STEAM_GAMESERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steam_api.h"
+#include "isteamgameserver.h"
+#include "isteamgameserverstats.h"
+
+enum EServerMode
+{
+ eServerModeInvalid = 0, // DO NOT USE
+ eServerModeNoAuthentication = 1, // Don't authenticate user logins and don't list on the server list
+ eServerModeAuthentication = 2, // Authenticate users, list on the server list, don't run VAC on clients that connect
+ eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients
+};
+
+// Initialize ISteamGameServer interface object, and set server properties which may not be changed.
+//
+// After calling this function, you should set any additional server parameters, and then
+// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn()
+//
+// - usSteamPort is the local port used to communicate with the steam servers.
+// - usGamePort is the port that clients will connect to for gameplay.
+// - usQueryPort is the port that will manage server browser related duties and info
+// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it
+// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving
+// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h.
+// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the
+// server is out of date. (Only servers with the latest version will be listed.)
+
+inline bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+
+S_API void SteamGameServer_Shutdown();
+S_API void SteamGameServer_RunCallbacks();
+
+// Most Steam API functions allocate some amount of thread-local memory for
+// parameter storage. Calling SteamGameServer_ReleaseCurrentThreadMemory()
+// will free all API-related memory associated with the calling thread.
+// This memory is released automatically by SteamGameServer_RunCallbacks(),
+// so single-threaded servers do not need to explicitly call this function.
+inline void SteamGameServer_ReleaseCurrentThreadMemory();
+
+S_API bool SteamGameServer_BSecure();
+S_API uint64 SteamGameServer_GetSteamID();
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// Global accessors for game server C++ APIs. See individual isteam*.h files for details.
+// You should not cache the results of these accessors or pass the result pointers across
+// modules! Different modules may be compiled against different SDK header versions, and
+// the interface pointers could therefore be different across modules. Every line of code
+// which calls into a Steamworks API should retrieve the interface from a global accessor.
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#if !defined( STEAM_API_EXPORTS )
+inline ISteamClient *SteamGameServerClient();
+inline ISteamGameServer *SteamGameServer();
+inline ISteamUtils *SteamGameServerUtils();
+inline ISteamNetworking *SteamGameServerNetworking();
+inline ISteamGameServerStats *SteamGameServerStats();
+inline ISteamHTTP *SteamGameServerHTTP();
+inline ISteamInventory *SteamGameServerInventory();
+inline ISteamUGC *SteamGameServerUGC();
+inline ISteamApps *SteamGameServerApps();
+#endif
+
+class CSteamGameServerAPIContext
+{
+public:
+ CSteamGameServerAPIContext() { Clear(); }
+ inline void Clear();
+ inline bool Init();
+
+ ISteamClient *SteamClient() const { return m_pSteamClient; }
+ ISteamGameServer *SteamGameServer() const { return m_pSteamGameServer; }
+ ISteamUtils *SteamGameServerUtils() const { return m_pSteamGameServerUtils; }
+ ISteamNetworking *SteamGameServerNetworking() const { return m_pSteamGameServerNetworking; }
+ ISteamGameServerStats *SteamGameServerStats() const { return m_pSteamGameServerStats; }
+ ISteamHTTP *SteamHTTP() const { return m_pSteamHTTP; }
+ ISteamInventory *SteamInventory() const { return m_pSteamInventory; }
+ ISteamUGC *SteamUGC() const { return m_pSteamUGC; }
+ ISteamApps *SteamApps() const { return m_pSteamApps; }
+
+private:
+ ISteamClient *m_pSteamClient;
+ ISteamGameServer *m_pSteamGameServer;
+ ISteamUtils *m_pSteamGameServerUtils;
+ ISteamNetworking *m_pSteamGameServerNetworking;
+ ISteamGameServerStats *m_pSteamGameServerStats;
+ ISteamHTTP *m_pSteamHTTP;
+ ISteamInventory *m_pSteamInventory;
+ ISteamUGC *m_pSteamUGC;
+ ISteamApps *m_pSteamApps;
+};
+
+
+// Older SDKs exported this global pointer, but it is no longer supported.
+// You should use SteamGameServerClient() or CSteamGameServerAPIContext to
+// safely access the ISteamClient APIs from your game server application.
+//S_API ISteamClient *g_pSteamClientGameServer;
+
+// SteamGameServer_InitSafe has been replaced with SteamGameServer_Init and
+// is no longer supported. Use SteamGameServer_Init instead.
+//S_API void S_CALLTYPE SteamGameServer_InitSafe();
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// These macros are similar to the STEAM_CALLBACK_* macros in steam_api.h, but only trigger for gameserver callbacks
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_GAMESERVER_CALLBACK( thisclass, func, /*callback_type, [deprecated] var*/... ) \
+ _STEAM_CALLBACK_SELECT( ( __VA_ARGS__, GS, 3 ), ( this->SetGameserverFlag();, thisclass, func, __VA_ARGS__ ) )
+
+#define STEAM_GAMESERVER_CALLBACK_MANUAL( thisclass, func, callback_type, var ) \
+ CCallbackManual< thisclass, callback_type, true > var; void func( callback_type *pParam )
+
+
+#define _STEAM_CALLBACK_GS( _, thisclass, func, param, var ) \
+ CCallback< thisclass, param, true > var; void func( param *pParam )
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// steamclient.dll private wrapper functions
+//
+// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+S_API HSteamPipe S_CALLTYPE SteamGameServer_GetHSteamPipe();
+S_API HSteamUser S_CALLTYPE SteamGameServer_GetHSteamUser();
+S_API bool S_CALLTYPE SteamInternal_GameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );
+
+
+#if !defined( STEAM_API_EXPORTS )
+inline void S_CALLTYPE SteamGameServerInternal_OnContextInit( void* p )
+{
+ ((CSteamGameServerAPIContext*)p)->Clear();
+ if ( SteamGameServer_GetHSteamPipe() )
+ ((CSteamGameServerAPIContext*)p)->Init();
+}
+inline CSteamGameServerAPIContext& SteamGameServerInternal_ModuleContext()
+{
+ // SteamInternal_ContextInit takes a base pointer for the equivalent of
+ // struct { void (*pFn)(void* pCtx); uintp counter; CSteamAPIContext ctx; }
+ // Do not change layout of 2 + sizeof... or add non-pointer aligned data!
+ // NOTE: declaring "static CSteamAPIConext" creates a large function
+ // which queries the initialization status of the object. We know that
+ // it is pointer-aligned and fully memset with zeros, so just alias a
+ // static buffer of the appropriate size and call it a CSteamAPIContext.
+ static void* s_CallbackCounterAndContext[2 + sizeof( CSteamGameServerAPIContext ) / sizeof( void* )] = { (void*)&SteamGameServerInternal_OnContextInit, 0 };
+ return *(CSteamGameServerAPIContext*)SteamInternal_ContextInit( s_CallbackCounterAndContext );
+}
+inline ISteamClient *SteamGameServerClient() { return SteamGameServerInternal_ModuleContext().SteamClient(); }
+inline ISteamGameServer *SteamGameServer() { return SteamGameServerInternal_ModuleContext().SteamGameServer(); }
+inline ISteamUtils *SteamGameServerUtils() { return SteamGameServerInternal_ModuleContext().SteamGameServerUtils(); }
+inline ISteamNetworking *SteamGameServerNetworking() { return SteamGameServerInternal_ModuleContext().SteamGameServerNetworking(); }
+inline ISteamGameServerStats *SteamGameServerStats() { return SteamGameServerInternal_ModuleContext().SteamGameServerStats(); }
+inline ISteamHTTP *SteamGameServerHTTP() { return SteamGameServerInternal_ModuleContext().SteamHTTP(); }
+inline ISteamInventory *SteamGameServerInventory() { return SteamGameServerInternal_ModuleContext().SteamInventory(); }
+inline ISteamUGC *SteamGameServerUGC() { return SteamGameServerInternal_ModuleContext().SteamUGC(); }
+inline ISteamApps *SteamGameServerApps() { return SteamGameServerInternal_ModuleContext().SteamApps(); }
+#endif // !defined( STEAM_API_EXPORTS )
+
+
+inline void CSteamGameServerAPIContext::Clear()
+{
+ m_pSteamClient = NULL;
+ m_pSteamGameServer = NULL;
+ m_pSteamGameServerUtils = NULL;
+ m_pSteamGameServerNetworking = NULL;
+ m_pSteamGameServerStats = NULL;
+ m_pSteamHTTP = NULL;
+ m_pSteamInventory = NULL;
+ m_pSteamUGC = NULL;
+ m_pSteamApps = NULL;
+}
+
+// This function must be declared inline in the header so the module using steam_api.dll gets the version names they want.
+inline bool CSteamGameServerAPIContext::Init()
+{
+ HSteamUser hSteamUser = SteamGameServer_GetHSteamUser();
+ HSteamPipe hSteamPipe = SteamGameServer_GetHSteamPipe();
+ if ( !hSteamPipe )
+ return false;
+
+ m_pSteamClient = (ISteamClient*) SteamInternal_CreateInterface( STEAMCLIENT_INTERFACE_VERSION );
+ if ( !m_pSteamClient )
+ return false;
+
+ m_pSteamGameServer = m_pSteamClient->GetISteamGameServer( hSteamUser, hSteamPipe, STEAMGAMESERVER_INTERFACE_VERSION );
+ if ( !m_pSteamGameServer )
+ return false;
+
+ m_pSteamGameServerUtils = m_pSteamClient->GetISteamUtils( hSteamPipe, STEAMUTILS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerUtils )
+ return false;
+
+ m_pSteamGameServerNetworking = m_pSteamClient->GetISteamNetworking( hSteamUser, hSteamPipe, STEAMNETWORKING_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerNetworking )
+ return false;
+
+ m_pSteamGameServerStats = m_pSteamClient->GetISteamGameServerStats( hSteamUser, hSteamPipe, STEAMGAMESERVERSTATS_INTERFACE_VERSION );
+ if ( !m_pSteamGameServerStats )
+ return false;
+
+ m_pSteamHTTP = m_pSteamClient->GetISteamHTTP( hSteamUser, hSteamPipe, STEAMHTTP_INTERFACE_VERSION );
+ if ( !m_pSteamHTTP )
+ return false;
+
+ m_pSteamInventory = m_pSteamClient->GetISteamInventory( hSteamUser, hSteamPipe, STEAMINVENTORY_INTERFACE_VERSION );
+ if ( !m_pSteamInventory )
+ return false;
+
+ m_pSteamUGC = m_pSteamClient->GetISteamUGC( hSteamUser, hSteamPipe, STEAMUGC_INTERFACE_VERSION );
+ if ( !m_pSteamUGC )
+ return false;
+
+ m_pSteamApps = m_pSteamClient->GetISteamApps( hSteamUser, hSteamPipe, STEAMAPPS_INTERFACE_VERSION );
+ if ( !m_pSteamApps )
+ return false;
+
+ return true;
+}
+
+
+inline bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString )
+{
+ if ( !SteamInternal_GameServer_Init( unIP, usSteamPort, usGamePort, usQueryPort, eServerMode, pchVersionString ) )
+ return false;
+
+ return true;
+}
+
+
+inline void SteamGameServer_ReleaseCurrentThreadMemory()
+{
+ SteamAPI_ReleaseCurrentThreadMemory();
+}
+
+#endif // STEAM_GAMESERVER_H
diff --git a/lsteamclient/steamworks_sdk_142/steamclientpublic.h b/lsteamclient/steamworks_sdk_142/steamclientpublic.h
new file mode 100644
index 00000000..d1da3c79
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/steamclientpublic.h
@@ -0,0 +1,1270 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMCLIENTPUBLIC_H
+#define STEAMCLIENTPUBLIC_H
+#ifdef _WIN32
+#pragma once
+#endif
+//lint -save -e1931 -e1927 -e1924 -e613 -e726
+
+// This header file defines the interface between the calling application and the code that
+// knows how to communicate with the connection manager (CM) from the Steam service
+
+// This header file is intended to be portable; ideally this 1 header file plus a lib or dll
+// is all you need to integrate the client library into some other tree. So please avoid
+// including or requiring other header files if possible. This header should only describe the
+// interface layer, no need to include anything about the implementation.
+
+#include "steamtypes.h"
+#include "steamuniverse.h"
+
+// General result codes
+enum EResult
+{
+ k_EResultOK = 1, // success
+ k_EResultFail = 2, // generic failure
+ k_EResultNoConnection = 3, // no/failed network connection
+// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
+ k_EResultInvalidPassword = 5, // password/ticket is invalid
+ k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
+ k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
+ k_EResultInvalidParam = 8, // a parameter is incorrect
+ k_EResultFileNotFound = 9, // file was not found
+ k_EResultBusy = 10, // called method busy - action not taken
+ k_EResultInvalidState = 11, // called object was in an invalid state
+ k_EResultInvalidName = 12, // name is invalid
+ k_EResultInvalidEmail = 13, // email is invalid
+ k_EResultDuplicateName = 14, // name is not unique
+ k_EResultAccessDenied = 15, // access is denied
+ k_EResultTimeout = 16, // operation timed out
+ k_EResultBanned = 17, // VAC2 banned
+ k_EResultAccountNotFound = 18, // account not found
+ k_EResultInvalidSteamID = 19, // steamID is invalid
+ k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
+ k_EResultNotLoggedOn = 21, // The user is not logged on
+ k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
+ k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
+ k_EResultInsufficientPrivilege = 24, // Insufficient privilege
+ k_EResultLimitExceeded = 25, // Too much of a good thing
+ k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
+ k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
+ k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
+ k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
+ k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
+ k_EResultIPNotFound = 31, // IP address not found
+ k_EResultPersistFailed = 32, // failed to write change to the data store
+ k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
+ k_EResultLogonSessionReplaced = 34,
+ k_EResultConnectFailed = 35,
+ k_EResultHandshakeFailed = 36,
+ k_EResultIOFailure = 37,
+ k_EResultRemoteDisconnect = 38,
+ k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
+ k_EResultBlocked = 40, // a user didn't allow it
+ k_EResultIgnored = 41, // target is ignoring sender
+ k_EResultNoMatch = 42, // nothing matching the request found
+ k_EResultAccountDisabled = 43,
+ k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
+ k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
+ k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
+ k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
+ k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
+ k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
+ k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
+ k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
+ k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
+ k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
+ k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
+ k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
+ k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
+ k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
+ k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
+ k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
+ k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
+ k_EResultIllegalPassword = 61, // The requested new password is not legal
+ k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
+ k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
+ k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
+ k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
+ k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
+ k_EResultHardwareNotCapableOfIPT = 67, //
+ k_EResultIPTInitError = 68, //
+ k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
+ k_EResultFacebookQueryError = 70, // Facebook query returned an error
+ k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
+ k_EResultIPLoginRestrictionFailed = 72,
+ k_EResultAccountLockedDown = 73,
+ k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
+ k_EResultNoMatchingURL = 75,
+ k_EResultBadResponse = 76, // parse failure, missing field, etc.
+ k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
+ k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
+ k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
+ k_EResultDisabled = 80, // The requested service has been configured to be unavailable
+ k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
+ k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
+ k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
+ k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
+ k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to login
+ k_EResultItemDeleted = 86, // The thing we're trying to access has been deleted
+ k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to throttle response to possible attacker
+ k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch
+ k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for two-factor didn't match
+ k_EResultAccountAssociatedToMultiplePartners = 90, // account has been associated with multiple partners
+ k_EResultNotModified = 91, // data not modified
+ k_EResultNoMobileDevice = 92, // the account does not have a mobile device associated with it
+ k_EResultTimeNotSynced = 93, // the time presented is out of range or tolerance
+ k_EResultSmsCodeFailed = 94, // SMS code failure (no match, none pending, etc.)
+ k_EResultAccountLimitExceeded = 95, // Too many accounts access this resource
+ k_EResultAccountActivityLimitExceeded = 96, // Too many changes to this account
+ k_EResultPhoneActivityLimitExceeded = 97, // Too many changes to this phone
+ k_EResultRefundToWallet = 98, // Cannot refund to payment method, must use wallet
+ k_EResultEmailSendFailure = 99, // Cannot send an email
+ k_EResultNotSettled = 100, // Can't perform operation till payment has settled
+ k_EResultNeedCaptcha = 101, // Needs to provide a valid captcha
+ k_EResultGSLTDenied = 102, // a game server login token owned by this token's owner has been banned
+ k_EResultGSOwnerDenied = 103, // game server owner is denied for other reason (account lock, community ban, vac ban, missing phone)
+ k_EResultInvalidItemType = 104, // the type of thing we were requested to act on is invalid
+ k_EResultIPBanned = 105, // the ip address has been banned from taking this action
+ k_EResultGSLTExpired = 106, // this token has expired from disuse; can be reset for use
+ k_EResultInsufficientFunds = 107, // user doesn't have enough wallet funds to complete the action
+ k_EResultTooManyPending = 108, // There are too many of this thing pending already
+ k_EResultNoSiteLicensesFound = 109, // No site licenses found
+ k_EResultWGNetworkSendExceeded = 110, // the WG couldn't send a response because we exceeded max network send size
+ k_EResultAccountNotFriends = 111, // the user is not mutually friends
+ k_EResultLimitedUserAccount = 112, // the user is limited
+};
+
+// Error codes for use with the voice functions
+enum EVoiceResult
+{
+ k_EVoiceResultOK = 0,
+ k_EVoiceResultNotInitialized = 1,
+ k_EVoiceResultNotRecording = 2,
+ k_EVoiceResultNoData = 3,
+ k_EVoiceResultBufferTooSmall = 4,
+ k_EVoiceResultDataCorrupted = 5,
+ k_EVoiceResultRestricted = 6,
+ k_EVoiceResultUnsupportedCodec = 7,
+ k_EVoiceResultReceiverOutOfDate = 8,
+ k_EVoiceResultReceiverDidNotAnswer = 9,
+
+};
+
+// Result codes to GSHandleClientDeny/Kick
+enum EDenyReason
+{
+ k_EDenyInvalid = 0,
+ k_EDenyInvalidVersion = 1,
+ k_EDenyGeneric = 2,
+ k_EDenyNotLoggedOn = 3,
+ k_EDenyNoLicense = 4,
+ k_EDenyCheater = 5,
+ k_EDenyLoggedInElseWhere = 6,
+ k_EDenyUnknownText = 7,
+ k_EDenyIncompatibleAnticheat = 8,
+ k_EDenyMemoryCorruption = 9,
+ k_EDenyIncompatibleSoftware = 10,
+ k_EDenySteamConnectionLost = 11,
+ k_EDenySteamConnectionError = 12,
+ k_EDenySteamResponseTimedOut = 13,
+ k_EDenySteamValidationStalled = 14,
+ k_EDenySteamOwnerLeftGuestUser = 15,
+};
+
+// return type of GetAuthSessionTicket
+typedef uint32 HAuthTicket;
+const HAuthTicket k_HAuthTicketInvalid = 0;
+
+// results from BeginAuthSession
+enum EBeginAuthSessionResult
+{
+ k_EBeginAuthSessionResultOK = 0, // Ticket is valid for this game and this steamID.
+ k_EBeginAuthSessionResultInvalidTicket = 1, // Ticket is not valid.
+ k_EBeginAuthSessionResultDuplicateRequest = 2, // A ticket has already been submitted for this steamID
+ k_EBeginAuthSessionResultInvalidVersion = 3, // Ticket is from an incompatible interface version
+ k_EBeginAuthSessionResultGameMismatch = 4, // Ticket is not for this game
+ k_EBeginAuthSessionResultExpiredTicket = 5, // Ticket has expired
+};
+
+// Callback values for callback ValidateAuthTicketResponse_t which is a response to BeginAuthSession
+enum EAuthSessionResponse
+{
+ k_EAuthSessionResponseOK = 0, // Steam has verified the user is online, the ticket is valid and ticket has not been reused.
+ k_EAuthSessionResponseUserNotConnectedToSteam = 1, // The user in question is not connected to steam
+ k_EAuthSessionResponseNoLicenseOrExpired = 2, // The license has expired.
+ k_EAuthSessionResponseVACBanned = 3, // The user is VAC banned for this game.
+ k_EAuthSessionResponseLoggedInElseWhere = 4, // The user account has logged in elsewhere and the session containing the game instance has been disconnected.
+ k_EAuthSessionResponseVACCheckTimedOut = 5, // VAC has been unable to perform anti-cheat checks on this user
+ k_EAuthSessionResponseAuthTicketCanceled = 6, // The ticket has been canceled by the issuer
+ k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed = 7, // This ticket has already been used, it is not valid.
+ k_EAuthSessionResponseAuthTicketInvalid = 8, // This ticket is not from a user instance currently connected to steam.
+ k_EAuthSessionResponsePublisherIssuedBan = 9, // The user is banned for this game. The ban came via the web api and not VAC
+};
+
+// results from UserHasLicenseForApp
+enum EUserHasLicenseForAppResult
+{
+ k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
+ k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
+ k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
+};
+
+
+// Steam account types
+enum EAccountType
+{
+ k_EAccountTypeInvalid = 0,
+ k_EAccountTypeIndividual = 1, // single user account
+ k_EAccountTypeMultiseat = 2, // multiseat (e.g. cybercafe) account
+ k_EAccountTypeGameServer = 3, // game server account
+ k_EAccountTypeAnonGameServer = 4, // anonymous game server account
+ k_EAccountTypePending = 5, // pending
+ k_EAccountTypeContentServer = 6, // content server
+ k_EAccountTypeClan = 7,
+ k_EAccountTypeChat = 8,
+ k_EAccountTypeConsoleUser = 9, // Fake SteamID for local PSN account on PS3 or Live account on 360, etc.
+ k_EAccountTypeAnonUser = 10,
+
+ // Max of 16 items in this field
+ k_EAccountTypeMax
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppReleaseState
+{
+ k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
+ k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
+ k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
+ k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
+ k_EAppReleaseState_Released = 4, // owners can download and play app.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+enum EAppOwnershipFlags
+{
+ k_EAppOwnershipFlags_None = 0x0000, // unknown
+ k_EAppOwnershipFlags_OwnsLicense = 0x0001, // owns license for this game
+ k_EAppOwnershipFlags_FreeLicense = 0x0002, // not paid for game
+ k_EAppOwnershipFlags_RegionRestricted = 0x0004, // owns app, but not allowed to play in current region
+ k_EAppOwnershipFlags_LowViolence = 0x0008, // only low violence version
+ k_EAppOwnershipFlags_InvalidPlatform = 0x0010, // app not supported on current platform
+ k_EAppOwnershipFlags_SharedLicense = 0x0020, // license was granted by authorized local device
+ k_EAppOwnershipFlags_FreeWeekend = 0x0040, // owned by a free weekend licenses
+ k_EAppOwnershipFlags_RetailLicense = 0x0080, // has a retail license for game, (CD-Key etc)
+ k_EAppOwnershipFlags_LicenseLocked = 0x0100, // shared license is locked (in use) by other user
+ k_EAppOwnershipFlags_LicensePending = 0x0200, // owns app, but transaction is still pending. Can't install or play
+ k_EAppOwnershipFlags_LicenseExpired = 0x0400, // doesn't own app anymore since license expired
+ k_EAppOwnershipFlags_LicensePermanent = 0x0800, // permanent license, not borrowed, or guest or freeweekend etc
+ k_EAppOwnershipFlags_LicenseRecurring = 0x1000, // Recurring license, user is charged periodically
+ k_EAppOwnershipFlags_LicenseCanceled = 0x2000, // Mark as canceled, but might be still active if recurring
+ k_EAppOwnershipFlags_AutoGrant = 0x4000, // Ownership is based on any kind of autogrant license
+ k_EAppOwnershipFlags_PendingGift = 0x8000, // user has pending gift to redeem
+ k_EAppOwnershipFlags_RentalNotActivated = 0x10000, // Rental hasn't been activated yet
+ k_EAppOwnershipFlags_Rental = 0x20000, // Is a rental
+ k_EAppOwnershipFlags_SiteLicense = 0x40000, // Is from a site license
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: designed as flags to allow filters masks
+// NOTE: If you add to this, please update PackageAppType (SteamConfig) as well as populatePackageAppType
+//-----------------------------------------------------------------------------
+enum EAppType
+{
+ k_EAppType_Invalid = 0x000, // unknown / invalid
+ k_EAppType_Game = 0x001, // playable game, default type
+ k_EAppType_Application = 0x002, // software application
+ k_EAppType_Tool = 0x004, // SDKs, editors & dedicated servers
+ k_EAppType_Demo = 0x008, // game demo
+ k_EAppType_Media_DEPRECATED = 0x010, // legacy - was used for game trailers, which are now just videos on the web
+ k_EAppType_DLC = 0x020, // down loadable content
+ k_EAppType_Guide = 0x040, // game guide, PDF etc
+ k_EAppType_Driver = 0x080, // hardware driver updater (ATI, Razor etc)
+ k_EAppType_Config = 0x100, // hidden app used to config Steam features (backpack, sales, etc)
+ k_EAppType_Hardware = 0x200, // a hardware device (Steam Machine, Steam Controller, Steam Link, etc.)
+ k_EAppType_Franchise = 0x400, // A hub for collections of multiple apps, eg films, series, games
+ k_EAppType_Video = 0x800, // A video component of either a Film or TVSeries (may be the feature, an episode, preview, making-of, etc)
+ k_EAppType_Plugin = 0x1000, // Plug-in types for other Apps
+ k_EAppType_Music = 0x2000, // Music files
+ k_EAppType_Series = 0x4000, // Container app for video series
+ k_EAppType_Comic = 0x8000, // Comic Book
+
+ k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only
+ k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace
+};
+
+
+
+//-----------------------------------------------------------------------------
+// types of user game stats fields
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
+//-----------------------------------------------------------------------------
+enum ESteamUserStatType
+{
+ k_ESteamUserStatTypeINVALID = 0,
+ k_ESteamUserStatTypeINT = 1,
+ k_ESteamUserStatTypeFLOAT = 2,
+ // Read as FLOAT, set with count / session length
+ k_ESteamUserStatTypeAVGRATE = 3,
+ k_ESteamUserStatTypeACHIEVEMENTS = 4,
+ k_ESteamUserStatTypeGROUPACHIEVEMENTS = 5,
+
+ // max, for sanity checks
+ k_ESteamUserStatTypeMAX
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Entry Types (previously was only friend-to-friend message types)
+//-----------------------------------------------------------------------------
+enum EChatEntryType
+{
+ k_EChatEntryTypeInvalid = 0,
+ k_EChatEntryTypeChatMsg = 1, // Normal text message from another user
+ k_EChatEntryTypeTyping = 2, // Another user is typing (not used in multi-user chat)
+ k_EChatEntryTypeInviteGame = 3, // Invite from other user into that users current game
+ k_EChatEntryTypeEmote = 4, // text emote message (deprecated, should be treated as ChatMsg)
+ //k_EChatEntryTypeLobbyGameStart = 5, // lobby game is starting (dead - listen for LobbyGameCreated_t callback instead)
+ k_EChatEntryTypeLeftConversation = 6, // user has left the conversation ( closed chat window )
+ // Above are previous FriendMsgType entries, now merged into more generic chat entry types
+ k_EChatEntryTypeEntered = 7, // user has entered the conversation (used in multi-user chat and group chat)
+ k_EChatEntryTypeWasKicked = 8, // user was kicked (data: 64-bit steamid of actor performing the kick)
+ k_EChatEntryTypeWasBanned = 9, // user was banned (data: 64-bit steamid of actor performing the ban)
+ k_EChatEntryTypeDisconnected = 10, // user disconnected
+ k_EChatEntryTypeHistoricalChat = 11, // a chat message from user's chat history or offilne message
+ //k_EChatEntryTypeReserved1 = 12, // No longer used
+ //k_EChatEntryTypeReserved2 = 13, // No longer used
+ k_EChatEntryTypeLinkBlocked = 14, // a link was removed by the chat filter.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Chat Room Enter Responses
+//-----------------------------------------------------------------------------
+enum EChatRoomEnterResponse
+{
+ k_EChatRoomEnterResponseSuccess = 1, // Success
+ k_EChatRoomEnterResponseDoesntExist = 2, // Chat doesn't exist (probably closed)
+ k_EChatRoomEnterResponseNotAllowed = 3, // General Denied - You don't have the permissions needed to join the chat
+ 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)
+ k_EChatRoomEnterResponseClanDisabled = 8, // Attempt to join a clan chat when the clan is locked or disabled
+ k_EChatRoomEnterResponseCommunityBan = 9, // Attempt to join a chat when the user has a community lock on their account
+ k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
+ k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
+ // k_EChatRoomEnterResponseNoRankingDataLobby = 12, // No longer used
+ // k_EChatRoomEnterResponseNoRankingDataUser = 13, // No longer used
+ // k_EChatRoomEnterResponseRankOutOfRange = 14, // No longer used
+ k_EChatRoomEnterResponseRatelimitExceeded = 15, // Join failed - to many join attempts in a very short period of time
+};
+
+
+typedef void (*PFNLegacyKeyRegistration)( const char *pchCDKey, const char *pchInstallPath );
+typedef bool (*PFNLegacyKeyInstalled)();
+
+const unsigned int k_unSteamAccountIDMask = 0xFFFFFFFF;
+const unsigned int k_unSteamAccountInstanceMask = 0x000FFFFF;
+// we allow 3 simultaneous user account instances right now, 1= desktop, 2 = console, 4 = web, 0 = all
+const unsigned int k_unSteamUserDesktopInstance = 1;
+const unsigned int k_unSteamUserConsoleInstance = 2;
+const unsigned int k_unSteamUserWebInstance = 4;
+
+// Special flags for Chat accounts - they go in the top 8 bits
+// of the steam ID's "instance", leaving 12 for the actual instances
+enum EChatSteamIDInstanceFlags
+{
+ k_EChatAccountInstanceMask = 0x00000FFF, // top 8 bits are flags
+
+ k_EChatInstanceFlagClan = ( k_unSteamAccountInstanceMask + 1 ) >> 1, // top bit
+ k_EChatInstanceFlagLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 2, // next one down, etc
+ k_EChatInstanceFlagMMSLobby = ( k_unSteamAccountInstanceMask + 1 ) >> 3, // next one down, etc
+
+ // Max of 8 flags
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Marketing message flags that change how a client should handle them
+//-----------------------------------------------------------------------------
+enum EMarketingMessageFlags
+{
+ k_EMarketingMessageFlagsNone = 0,
+ k_EMarketingMessageFlagsHighPriority = 1 << 0,
+ k_EMarketingMessageFlagsPlatformWindows = 1 << 1,
+ k_EMarketingMessageFlagsPlatformMac = 1 << 2,
+ k_EMarketingMessageFlagsPlatformLinux = 1 << 3,
+
+ //aggregate flags
+ k_EMarketingMessageFlagsPlatformRestrictions =
+ k_EMarketingMessageFlagsPlatformWindows |
+ k_EMarketingMessageFlagsPlatformMac |
+ k_EMarketingMessageFlagsPlatformLinux,
+};
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Possible positions to tell the overlay to show notifications in
+//-----------------------------------------------------------------------------
+enum ENotificationPosition
+{
+ k_EPositionTopLeft = 0,
+ k_EPositionTopRight = 1,
+ k_EPositionBottomLeft = 2,
+ k_EPositionBottomRight = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Broadcast upload result details
+//-----------------------------------------------------------------------------
+enum EBroadcastUploadResult
+{
+ k_EBroadcastUploadResultNone = 0, // broadcast state unknown
+ k_EBroadcastUploadResultOK = 1, // broadcast was good, no problems
+ k_EBroadcastUploadResultInitFailed = 2, // broadcast init failed
+ k_EBroadcastUploadResultFrameFailed = 3, // broadcast frame upload failed
+ k_EBroadcastUploadResultTimeout = 4, // broadcast upload timed out
+ k_EBroadcastUploadResultBandwidthExceeded = 5, // broadcast send too much data
+ k_EBroadcastUploadResultLowFPS = 6, // broadcast FPS too low
+ k_EBroadcastUploadResultMissingKeyFrames = 7, // broadcast sending not enough key frames
+ k_EBroadcastUploadResultNoConnection = 8, // broadcast client failed to connect to relay
+ k_EBroadcastUploadResultRelayFailed = 9, // relay dropped the upload
+ k_EBroadcastUploadResultSettingsChanged = 10, // the client changed broadcast settings
+ k_EBroadcastUploadResultMissingAudio = 11, // client failed to send audio data
+ k_EBroadcastUploadResultTooFarBehind = 12, // clients was too slow uploading
+ k_EBroadcastUploadResultTranscodeBehind = 13, // server failed to keep up with transcode
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: codes for well defined launch options
+//-----------------------------------------------------------------------------
+enum ELaunchOptionType
+{
+ k_ELaunchOptionType_None = 0, // unknown what launch option does
+ k_ELaunchOptionType_Default = 1, // runs the game, app, whatever in default mode
+ k_ELaunchOptionType_SafeMode = 2, // runs the game in safe mode
+ k_ELaunchOptionType_Multiplayer = 3, // runs the game in multiplayer mode
+ k_ELaunchOptionType_Config = 4, // runs config tool for this game
+ k_ELaunchOptionType_OpenVR = 5, // runs game in VR mode using OpenVR
+ k_ELaunchOptionType_Server = 6, // runs dedicated server for this game
+ k_ELaunchOptionType_Editor = 7, // runs game editor
+ k_ELaunchOptionType_Manual = 8, // shows game manual
+ k_ELaunchOptionType_Benchmark = 9, // runs game benchmark
+ k_ELaunchOptionType_Option1 = 10, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option2 = 11, // generic run option, uses description field for game name
+ k_ELaunchOptionType_Option3 = 12, // generic run option, uses description field for game name
+ k_ELaunchOptionType_OculusVR = 13, // runs game in VR mode using the Oculus SDK
+ k_ELaunchOptionType_OpenVROverlay = 14, // runs an OpenVR dashboard overlay
+ k_ELaunchOptionType_OSVR = 15, // runs game in VR mode using the OSVR SDK
+
+
+ k_ELaunchOptionType_Dialog = 1000, // show launch options dialog
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this launch option is any of the vr launching types
+//-----------------------------------------------------------------------------
+static inline bool BIsVRLaunchOptionType( const ELaunchOptionType eType )
+{
+ return eType == k_ELaunchOptionType_OpenVR
+ || eType == k_ELaunchOptionType_OpenVROverlay
+ || eType == k_ELaunchOptionType_OculusVR
+ || eType == k_ELaunchOptionType_OSVR;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: code points for VR HMD vendors and models
+// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN A DATABASE
+//-----------------------------------------------------------------------------
+enum EVRHMDType
+{
+ k_eEVRHMDType_None = -1, // unknown vendor and model
+
+ k_eEVRHMDType_Unknown = 0, // unknown vendor and model
+
+ k_eEVRHMDType_HTC_Dev = 1, // original HTC dev kits
+ k_eEVRHMDType_HTC_VivePre = 2, // htc vive pre
+ k_eEVRHMDType_HTC_Vive = 3, // htc vive consumer release
+
+ k_eEVRHMDType_HTC_Unknown = 20, // unknown htc hmd
+
+ k_eEVRHMDType_Oculus_DK1 = 21, // Oculus DK1
+ k_eEVRHMDType_Oculus_DK2 = 22, // Oculus DK2
+ k_eEVRHMDType_Oculus_Rift = 23, // Oculus rift
+
+ k_eEVRHMDType_Oculus_Unknown = 40, // // Oculus unknown HMD
+
+ k_eEVRHMDType_Acer_Unknown = 50, // Acer unknown HMD
+ k_eEVRHMDType_Acer_WindowsMR = 51, // Acer QHMD Windows MR headset
+
+ k_eEVRHMDType_Dell_Unknown = 60, // Dell unknown HMD
+ k_eEVRHMDType_Dell_Visor = 61, // Dell Visor Windows MR headset
+
+ k_eEVRHMDType_Lenovo_Unknown = 70, // Lenovo unknown HMD
+ k_eEVRHMDType_Lenovo_Explorer = 71, // Lenovo Explorer Windows MR headset
+
+ k_eEVRHMDType_HP_Unknown = 80, // HP unknown HMD
+ k_eEVRHMDType_HP_WindowsMR = 81, // HP Windows MR headset
+
+ k_eEVRHMDType_Samsung_Unknown = 90, // Samsung unknown HMD
+ k_eEVRHMDType_Samsung_Odyssey = 91, // Samsung Odyssey Windows MR headset
+
+ k_eEVRHMDType_Unannounced_Unknown = 100, // Unannounced unknown HMD
+ k_eEVRHMDType_Unannounced_WindowsMR = 101, // Unannounced Windows MR headset
+
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this is from an Oculus HMD
+//-----------------------------------------------------------------------------
+static inline bool BIsOculusHMD( EVRHMDType eType )
+{
+ return eType == k_eEVRHMDType_Oculus_DK1 || eType == k_eEVRHMDType_Oculus_DK2 || eType == k_eEVRHMDType_Oculus_Rift || eType == k_eEVRHMDType_Oculus_Unknown;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this is from a Windows MR HMD
+//-----------------------------------------------------------------------------
+static inline bool BIsWindowsMRHeadset( EVRHMDType eType )
+{
+ return eType >= k_eEVRHMDType_Acer_WindowsMR && eType <= k_eEVRHMDType_Unannounced_WindowsMR;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: true if this is from an Vive HMD
+//-----------------------------------------------------------------------------
+static inline bool BIsViveHMD( EVRHMDType eType )
+{
+ return eType == k_eEVRHMDType_HTC_Dev || eType == k_eEVRHMDType_HTC_VivePre || eType == k_eEVRHMDType_HTC_Vive || eType == k_eEVRHMDType_HTC_Unknown;
+}
+
+
+#pragma pack( push, 1 )
+
+#define CSTEAMID_DEFINED
+
+// Steam ID structure (64 bits total)
+class CSteamID
+{
+public:
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ //-----------------------------------------------------------------------------
+ CSteamID()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ Set( unAccountID, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : unAccountID - 32-bit account ID
+ // unAccountInstance - instance
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ CSteamID( uint32 unAccountID, unsigned int unAccountInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+#if defined(_SERVER) && defined(Assert)
+ Assert( ! ( ( k_EAccountTypeIndividual == eAccountType ) && ( unAccountInstance > k_unSteamUserWebInstance ) ) ); // enforce that for individual accounts, instance is always 1
+#endif // _SERVER
+ InstancedSet( unAccountID, unAccountInstance, eUniverse, eAccountType );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Constructor
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ // Note: Will not accept a uint32 or int32 as input, as that is a probable mistake.
+ // See the stubbed out overloads in the private: section for more info.
+ //-----------------------------------------------------------------------------
+ CSteamID( uint64 ulSteamID )
+ {
+ SetFromUint64( ulSteamID );
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CSteamID( uint64_t ulSteamID )
+ {
+ SetFromUint64( (uint64)ulSteamID );
+ }
+#endif
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void Set( uint32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+
+ if ( eAccountType == k_EAccountTypeClan || eAccountType == k_EAccountTypeGameServer )
+ {
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+ else
+ {
+ // by default we pick the desktop instance
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance;
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Sets parameters for steam ID
+ // Input : unAccountID - 32-bit account ID
+ // eUniverse - Universe this account belongs to
+ // eAccountType - Type of account
+ //-----------------------------------------------------------------------------
+ void InstancedSet( uint32 unAccountID, uint32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = unAccountID;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ m_steamid.m_comp.m_unAccountInstance = unInstance;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 52 bit parts and universe/type
+ // Input : ulIdentifier - 52 bits of goodness
+ //-----------------------------------------------------------------------------
+ void FullSet( uint64 ulIdentifier, EUniverse eUniverse, EAccountType eAccountType )
+ {
+ m_steamid.m_comp.m_unAccountID = ( ulIdentifier & k_unSteamAccountIDMask ); // account ID is low 32 bits
+ m_steamid.m_comp.m_unAccountInstance = ( ( ulIdentifier >> 32 ) & k_unSteamAccountInstanceMask ); // account instance is next 20 bits
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_EAccountType = eAccountType;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from its 64-bit representation
+ // Input : ulSteamID - 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ void SetFromUint64( uint64 ulSteamID )
+ {
+ m_steamid.m_unAll64Bits = ulSteamID;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Clear all fields, leaving an invalid ID.
+ //-----------------------------------------------------------------------------
+ void Clear()
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeInvalid;
+ m_steamid.m_comp.m_EUniverse = k_EUniverseInvalid;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+#if defined( INCLUDED_STEAM2_USERID_STRUCTS )
+ //-----------------------------------------------------------------------------
+ // Purpose: Initializes a steam ID from a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to convert
+ // eUniverse - universe this ID belongs to
+ //-----------------------------------------------------------------------------
+ void SetFromSteam2( TSteamGlobalUserID *pTSteamGlobalUserID, EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits * 2 +
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits;
+ m_steamid.m_comp.m_EUniverse = eUniverse; // set the universe
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeIndividual; // Steam 2 accounts always map to account type of individual
+ m_steamid.m_comp.m_unAccountInstance = k_unSteamUserDesktopInstance; // Steam2 only knew desktop instances
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Fills out a Steam2 ID structure
+ // Input: pTSteamGlobalUserID - Steam2 ID to write to
+ //-----------------------------------------------------------------------------
+ void ConvertToSteam2( TSteamGlobalUserID *pTSteamGlobalUserID ) const
+ {
+ // only individual accounts have any meaning in Steam 2, only they can be mapped
+ // Assert( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual );
+
+ pTSteamGlobalUserID->m_SteamInstanceID = 0;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.High32bits = m_steamid.m_comp.m_unAccountID % 2;
+ pTSteamGlobalUserID->m_SteamLocalUserID.Split.Low32bits = m_steamid.m_comp.m_unAccountID / 2;
+ }
+#endif // defined( INCLUDED_STEAM_COMMON_STEAMCOMMON_H )
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts steam ID to its 64-bit representation
+ // Output : 64-bit representation of a Steam ID
+ //-----------------------------------------------------------------------------
+ uint64 ConvertToUint64() const
+ {
+ return m_steamid.m_unAll64Bits;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Converts the static parts of a steam ID to a 64-bit representation.
+ // For multiseat accounts, all instances of that account will have the
+ // same static account key, so they can be grouped together by the static
+ // account key.
+ // Output : 64-bit static account key
+ //-----------------------------------------------------------------------------
+ uint64 GetStaticAccountKey() const
+ {
+ // note we do NOT include the account instance (which is a dynamic property) in the static account key
+ return (uint64) ( ( ( (uint64) m_steamid.m_comp.m_EUniverse ) << 56 ) + ((uint64) m_steamid.m_comp.m_EAccountType << 52 ) + m_steamid.m_comp.m_unAccountID );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonGameServer;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: create an anonymous game server login to be filled in by the AM
+ //-----------------------------------------------------------------------------
+ void CreateBlankAnonUserLogon( EUniverse eUniverse )
+ {
+ m_steamid.m_comp.m_unAccountID = 0;
+ m_steamid.m_comp.m_EAccountType = k_EAccountTypeAnonUser;
+ m_steamid.m_comp.m_EUniverse = eUniverse;
+ m_steamid.m_comp.m_unAccountInstance = 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server login that will be filled in?
+ //-----------------------------------------------------------------------------
+ bool BBlankAnonAccount() const
+ {
+ return m_steamid.m_comp.m_unAccountID == 0 && BAnonAccount() && m_steamid.m_comp.m_unAccountInstance == 0;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a game server account id? (Either persistent or anonymous)
+ //-----------------------------------------------------------------------------
+ bool BGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a persistent (not anonymous) game server account id?
+ //-----------------------------------------------------------------------------
+ bool BPersistentGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous game server account id?
+ //-----------------------------------------------------------------------------
+ bool BAnonGameServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a content server account id?
+ //-----------------------------------------------------------------------------
+ bool BContentServerAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeContentServer;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a clan account id?
+ //-----------------------------------------------------------------------------
+ bool BClanAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool BChatAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a chat account id?
+ //-----------------------------------------------------------------------------
+ bool IsLobby() const
+ {
+ return ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeChat )
+ && ( m_steamid.m_comp.m_unAccountInstance & k_EChatInstanceFlagLobby );
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an individual user account id?
+ //-----------------------------------------------------------------------------
+ bool BIndividualAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual || m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous account?
+ //-----------------------------------------------------------------------------
+ bool BAnonAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser || m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonGameServer;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this an anonymous user account? ( used to create an account or reset a password )
+ //-----------------------------------------------------------------------------
+ bool BAnonUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeAnonUser;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Is this a faked up Steam ID for a PSN friend account?
+ //-----------------------------------------------------------------------------
+ bool BConsoleUserAccount() const
+ {
+ return m_steamid.m_comp.m_EAccountType == k_EAccountTypeConsoleUser;
+ }
+
+ // simple accessors
+ void SetAccountID( uint32 unAccountID ) { m_steamid.m_comp.m_unAccountID = unAccountID; }
+ void SetAccountInstance( uint32 unInstance ){ m_steamid.m_comp.m_unAccountInstance = unInstance; }
+ void ClearIndividualInstance() { if ( BIndividualAccount() ) m_steamid.m_comp.m_unAccountInstance = 0; }
+ bool HasNoIndividualInstance() const { return BIndividualAccount() && (m_steamid.m_comp.m_unAccountInstance==0); }
+ AccountID_t GetAccountID() const { return m_steamid.m_comp.m_unAccountID; }
+ uint32 GetUnAccountInstance() const { return m_steamid.m_comp.m_unAccountInstance; }
+ EAccountType GetEAccountType() const { return ( EAccountType ) m_steamid.m_comp.m_EAccountType; }
+ EUniverse GetEUniverse() const { return m_steamid.m_comp.m_EUniverse; }
+ void SetEUniverse( EUniverse eUniverse ) { m_steamid.m_comp.m_EUniverse = eUniverse; }
+ bool IsValid() const;
+
+ // this set of functions is hidden, will be moved out of class
+ explicit CSteamID( const char *pchSteamID, EUniverse eDefaultUniverse = k_EUniverseInvalid );
+ const char * Render() const; // renders this steam ID to string
+ static const char * Render( uint64 ulSteamID ); // static method to render a uint64 representation of a steam ID to a string
+
+ void SetFromString( const char *pchSteamID, EUniverse eDefaultUniverse );
+ // SetFromString allows many partially-correct strings, constraining how
+ // we might be able to change things in the future.
+ // SetFromStringStrict requires the exact string forms that we support
+ // and is preferred when the caller knows it's safe to be strict.
+ // Returns whether the string parsed correctly.
+ bool SetFromStringStrict( const char *pchSteamID, EUniverse eDefaultUniverse );
+ bool SetFromSteam2String( const char *pchSteam2ID, EUniverse eUniverse );
+
+ inline bool operator==( const CSteamID &val ) const { return m_steamid.m_unAll64Bits == val.m_steamid.m_unAll64Bits; }
+ inline bool operator!=( const CSteamID &val ) const { return !operator==( val ); }
+ inline bool operator<( const CSteamID &val ) const { return m_steamid.m_unAll64Bits < val.m_steamid.m_unAll64Bits; }
+ inline bool operator>( const CSteamID &val ) const { return m_steamid.m_unAll64Bits > val.m_steamid.m_unAll64Bits; }
+
+ // DEBUG function
+ bool BValidExternalSteamID() const;
+
+private:
+ // These are defined here to prevent accidental implicit conversion of a u32AccountID to a CSteamID.
+ // If you get a compiler error about an ambiguous constructor/function then it may be because you're
+ // passing a 32-bit int to a function that takes a CSteamID. You should explicitly create the SteamID
+ // using the correct Universe and account Type/Instance values.
+ CSteamID( uint32 );
+ CSteamID( int32 );
+
+ // 64 bits total
+ union SteamID_t
+ {
+ struct SteamIDComponent_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ uint32 m_unAccountID : 32; // unique account identifier
+#else
+ uint32 m_unAccountID : 32; // unique account identifier
+ unsigned int m_unAccountInstance : 20; // dynamic instance ID
+ unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference
+ EUniverse m_EUniverse : 8; // universe this account belongs to
+#endif
+ } m_comp;
+
+ uint64 m_unAll64Bits;
+ } m_steamid;
+};
+
+inline bool CSteamID::IsValid() const
+{
+ if ( m_steamid.m_comp.m_EAccountType <= k_EAccountTypeInvalid || m_steamid.m_comp.m_EAccountType >= k_EAccountTypeMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EUniverse <= k_EUniverseInvalid || m_steamid.m_comp.m_EUniverse >= k_EUniverseMax )
+ return false;
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeIndividual )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance > k_unSteamUserWebInstance )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeClan )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 || m_steamid.m_comp.m_unAccountInstance != 0 )
+ return false;
+ }
+
+ if ( m_steamid.m_comp.m_EAccountType == k_EAccountTypeGameServer )
+ {
+ if ( m_steamid.m_comp.m_unAccountID == 0 )
+ return false;
+ // Any limit on instances? We use them for local users and bots
+ }
+ return true;
+}
+
+// generic invalid CSteamID
+#define k_steamIDNil CSteamID()
+
+// This steamID comes from a user game connection to an out of date GS that hasnt implemented the protocol
+// to provide its steamID
+#define k_steamIDOutofDateGS CSteamID( 0, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID comes from a user game connection to an sv_lan GS
+#define k_steamIDLanModeGS CSteamID( 0, 0, k_EUniversePublic, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that has just booted but hasnt yet even initialized
+// its steam3 component and started logging on.
+#define k_steamIDNotInitYetGS CSteamID( 1, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+// This steamID can come from a user game connection to a GS that isn't using the steam authentication system but still
+// wants to support the "Join Game" option in the friends list
+#define k_steamIDNonSteamGS CSteamID( 2, 0, k_EUniverseInvalid, k_EAccountTypeInvalid )
+
+
+#ifdef STEAM
+// Returns the matching chat steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeChat it will be returned with the same instance
+CSteamID ChatIDFromSteamID( const CSteamID &steamID );
+// Returns the matching clan steamID, with the default instance of 0
+// If the steamID passed in is already of type k_EAccountTypeClan it will be returned with the same instance
+CSteamID ClanIDFromSteamID( const CSteamID &steamID );
+// Asserts steamID type before conversion
+CSteamID ChatIDFromClanID( const CSteamID &steamIDClan );
+// Asserts steamID type before conversion
+CSteamID ClanIDFromChatID( const CSteamID &steamIDChat );
+
+#endif // _STEAM
+
+
+//-----------------------------------------------------------------------------
+// Purpose: encapsulates an appID/modID pair
+//-----------------------------------------------------------------------------
+class CGameID
+{
+public:
+
+ CGameID()
+ {
+ m_gameID.m_nType = k_EGameIDTypeApp;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nModID = 0;
+ }
+
+ explicit CGameID( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+#ifdef INT64_DIFFERENT_FROM_INT64_T
+ CGameID( uint64_t ulGameID )
+ {
+ m_ulGameID = (uint64)ulGameID;
+ }
+#endif
+
+ explicit CGameID( int32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ explicit CGameID( uint32 nAppID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ }
+
+ CGameID( uint32 nAppID, uint32 nModID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nModID = nModID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+ }
+
+ // Hidden functions used only by Steam
+ explicit CGameID( const char *pchGameID );
+ const char *Render() const; // render this Game ID to string
+ static const char *Render( uint64 ulGameID ); // static method to render a uint64 representation of a Game ID to a string
+
+ // must include checksum_crc.h first to get this functionality
+#if defined( CHECKSUM_CRC_H )
+ CGameID( uint32 nAppID, const char *pchModPath )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = nAppID;
+ m_gameID.m_nType = k_EGameIDTypeGameMod;
+
+ char rgchModDir[MAX_PATH];
+ V_FileBase( pchModPath, rgchModDir, sizeof( rgchModDir ) );
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ CRC32_ProcessBuffer( &crc32, rgchModDir, V_strlen( rgchModDir ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+ CGameID( const char *pchExePath, const char *pchAppName )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeShortcut;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ if ( pchExePath )
+ CRC32_ProcessBuffer( &crc32, pchExePath, V_strlen( pchExePath ) );
+ if ( pchAppName )
+ CRC32_ProcessBuffer( &crc32, pchAppName, V_strlen( pchAppName ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#if defined( VSTFILEID_H )
+
+ CGameID( VstFileID vstFileID )
+ {
+ m_ulGameID = 0;
+ m_gameID.m_nAppID = k_uAppIdInvalid;
+ m_gameID.m_nType = k_EGameIDTypeP2P;
+
+ CRC32_t crc32;
+ CRC32_Init( &crc32 );
+ const char *pchFileId = vstFileID.Render();
+ CRC32_ProcessBuffer( &crc32, pchFileId, V_strlen( pchFileId ) );
+ CRC32_Final( &crc32 );
+
+ // set the high-bit on the mod-id
+ // reduces crc32 to 31bits, but lets us use the modID as a guaranteed unique
+ // replacement for appID's
+ m_gameID.m_nModID = crc32 | (0x80000000);
+ }
+
+#endif /* VSTFILEID_H */
+
+#endif /* CHECKSUM_CRC_H */
+
+
+ uint64 ToUint64() const
+ {
+ return m_ulGameID;
+ }
+
+ uint64 *GetUint64Ptr()
+ {
+ return &m_ulGameID;
+ }
+
+ void Set( uint64 ulGameID )
+ {
+ m_ulGameID = ulGameID;
+ }
+
+ bool IsMod() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeGameMod );
+ }
+
+ bool IsShortcut() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeShortcut );
+ }
+
+ bool IsP2PFile() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeP2P );
+ }
+
+ bool IsSteamApp() const
+ {
+ return ( m_gameID.m_nType == k_EGameIDTypeApp );
+ }
+
+ uint32 ModID() const
+ {
+ return m_gameID.m_nModID;
+ }
+
+ uint32 AppID() const
+ {
+ return m_gameID.m_nAppID;
+ }
+
+ bool operator == ( const CGameID &rhs ) const
+ {
+ return m_ulGameID == rhs.m_ulGameID;
+ }
+
+ bool operator != ( const CGameID &rhs ) const
+ {
+ return !(*this == rhs);
+ }
+
+ bool operator < ( const CGameID &rhs ) const
+ {
+ return ( m_ulGameID < rhs.m_ulGameID );
+ }
+
+ bool IsValid() const
+ {
+ // each type has it's own invalid fixed point:
+ switch( m_gameID.m_nType )
+ {
+ case k_EGameIDTypeApp:
+ return m_gameID.m_nAppID != k_uAppIdInvalid;
+
+ case k_EGameIDTypeGameMod:
+ return m_gameID.m_nAppID != k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ case k_EGameIDTypeShortcut:
+ return (m_gameID.m_nModID & 0x80000000) != 0;
+
+ case k_EGameIDTypeP2P:
+ return m_gameID.m_nAppID == k_uAppIdInvalid && m_gameID.m_nModID & 0x80000000;
+
+ default:
+#if defined(Assert)
+ Assert(false);
+#endif
+ return false;
+ }
+
+ }
+
+ void Reset()
+ {
+ m_ulGameID = 0;
+ }
+
+
+
+private:
+
+ enum EGameIDType
+ {
+ k_EGameIDTypeApp = 0,
+ k_EGameIDTypeGameMod = 1,
+ k_EGameIDTypeShortcut = 2,
+ k_EGameIDTypeP2P = 3,
+ };
+
+ struct GameID_t
+ {
+#ifdef VALVE_BIG_ENDIAN
+ unsigned int m_nModID : 32;
+ unsigned int m_nType : 8;
+ unsigned int m_nAppID : 24;
+#else
+ unsigned int m_nAppID : 24;
+ unsigned int m_nType : 8;
+ unsigned int m_nModID : 32;
+#endif
+ };
+
+ union
+ {
+ uint64 m_ulGameID;
+ GameID_t m_gameID;
+ };
+};
+
+#pragma pack( pop )
+
+const int k_cchGameExtraInfoMax = 64;
+
+
+//-----------------------------------------------------------------------------
+// Constants used for query ports.
+//-----------------------------------------------------------------------------
+
+#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/lsteamclient/steamworks_sdk_142/steamencryptedappticket.h b/lsteamclient/steamworks_sdk_142/steamencryptedappticket.h
new file mode 100644
index 00000000..0331c139
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/steamencryptedappticket.h
@@ -0,0 +1,32 @@
+//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
+//
+// Purpose: utilities to decode/decrypt a ticket from the
+// ISteamUser::RequestEncryptedAppTicket, ISteamUser::GetEncryptedAppTicket API
+//
+// To use: declare CSteamEncryptedAppTicket, then call BDecryptTicket
+// if BDecryptTicket returns true, other accessors are valid
+//
+//=============================================================================
+
+#include "steam_api.h"
+
+static const int k_nSteamEncryptedAppTicketSymmetricKeyLen = 32;
+
+
+S_API bool SteamEncryptedAppTicket_BDecryptTicket( const uint8 *rgubTicketEncrypted, uint32 cubTicketEncrypted,
+ uint8 *rgubTicketDecrypted, uint32 *pcubTicketDecrypted,
+ const uint8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen], int cubKey );
+
+S_API bool SteamEncryptedAppTicket_BIsTicketForApp( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API void SteamEncryptedAppTicket_GetTicketSteamID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, CSteamID *psteamID );
+
+S_API AppId_t SteamEncryptedAppTicket_GetTicketAppID( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API bool SteamEncryptedAppTicket_BUserOwnsAppInTicket( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, AppId_t nAppID );
+
+S_API bool SteamEncryptedAppTicket_BUserIsVacBanned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+
+S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData ); \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_142/steamhttpenums.h b/lsteamclient/steamworks_sdk_142/steamhttpenums.h
new file mode 100644
index 00000000..b2f05d94
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/steamhttpenums.h
@@ -0,0 +1,98 @@
+//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. =======
+//
+// Purpose: HTTP related enums, stuff that is shared by both clients and servers, and our
+// UI projects goes here.
+//
+//=============================================================================
+
+#ifndef STEAMHTTPENUMS_H
+#define STEAMHTTPENUMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+// HTTP related types
+
+// This enum is used in client API methods, do not re-number existing values.
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+ k_EHTTPMethodPATCH,
+
+ // The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
+ // a compliant general purpose server. We'll likely add more as we find uses for them.
+
+ // k_EHTTPMethodTRACE,
+ // k_EHTTPMethodCONNECT
+};
+
+
+// HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
+// of each of these.
+enum EHTTPStatusCode
+{
+ // Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
+ k_EHTTPStatusCodeInvalid = 0,
+
+ // Informational codes
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ // Success codes
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ // Redirection codes
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+ //k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ // Error codes
+ k_EHTTPStatusCode400BadRequest = 400,
+ k_EHTTPStatusCode401Unauthorized = 401, // You probably want 403 or something else. 401 implies you're sending a WWW-Authenticate header and the client can sent an Authorization header in response.
+ k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge = 413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType = 415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+ k_EHTTPStatusCode4xxUnknown = 418, // 418 is reserved, so we'll use it to mean unknown
+ k_EHTTPStatusCode429TooManyRequests = 429,
+
+ // Server error codes
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+ k_EHTTPStatusCode5xxUnknown = 599,
+};
+
+#endif // STEAMHTTPENUMS_H \ No newline at end of file
diff --git a/lsteamclient/steamworks_sdk_142/steamps3params.h b/lsteamclient/steamworks_sdk_142/steamps3params.h
new file mode 100644
index 00000000..c7a659dc
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/steamps3params.h
@@ -0,0 +1,112 @@
+//====== Copyright 1996-2008, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMPS3PARAMS_H
+#define STEAMPS3PARAMS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 initialization parameters
+//
+// The following structure must be passed to when loading steam_api_ps3.prx
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAM_PS3_PATH_MAX 1055
+#define STEAM_PS3_SERVICE_ID_MAX 32
+#define STEAM_PS3_COMMUNICATION_ID_MAX 10
+#define STEAM_PS3_COMMUNICATION_SIG_MAX 160
+#define STEAM_PS3_LANGUAGE_MAX 64
+#define STEAM_PS3_REGION_CODE_MAX 16
+#define STEAM_PS3_CURRENT_PARAMS_VER 2
+struct SteamPS3Params_t
+{
+ uint32 m_unVersion; // set to STEAM_PS3_CURRENT_PARAMS_VER
+
+ void *pReserved;
+ uint32 m_nAppId; // set to your game's appid
+
+ char m_rgchInstallationPath[ STEAM_PS3_PATH_MAX ]; // directory containing latest steam prx's and sdata. Can be read only (BDVD)
+ char m_rgchSystemCache[ STEAM_PS3_PATH_MAX ]; // temp working cache, not persistent
+ char m_rgchGameData[ STEAM_PS3_PATH_MAX ]; // persistent game data path for storing user data
+ char m_rgchNpServiceID[ STEAM_PS3_SERVICE_ID_MAX ];
+ char m_rgchNpCommunicationID[ STEAM_PS3_COMMUNICATION_ID_MAX ];
+ char m_rgchNpCommunicationSig[ STEAM_PS3_COMMUNICATION_SIG_MAX ];
+
+ // Language should be one of the following. must be zero terminated
+ // danish
+ // dutch
+ // english
+ // finnish
+ // french
+ // german
+ // italian
+ // korean
+ // norwegian
+ // polish
+ // portuguese
+ // russian
+ // schinese
+ // spanish
+ // swedish
+ // tchinese
+ char m_rgchSteamLanguage[ STEAM_PS3_LANGUAGE_MAX ];
+
+ // region codes are "SCEA", "SCEE", "SCEJ". must be zero terminated
+ char m_rgchRegionCode[ STEAM_PS3_REGION_CODE_MAX ];
+
+ // Should be SYS_TTYP3 through SYS_TTYP10, if it's 0 then Steam won't spawn a
+ // thread to read console input at all. Using this let's you use Steam console commands
+ // like: profile_on, profile_off, profile_dump, mem_stats, mem_validate.
+ unsigned int m_cSteamInputTTY;
+
+ struct Ps3netInit_t
+ {
+ bool m_bNeedInit;
+ void *m_pMemory;
+ int m_nMemorySize;
+ int m_flags;
+ } m_sysNetInitInfo;
+
+ struct Ps3jpgInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysJpgInitInfo;
+
+ struct Ps3pngInit_t
+ {
+ bool m_bNeedInit;
+ } m_sysPngInitInfo;
+
+ struct Ps3sysutilUserInfo_t
+ {
+ bool m_bNeedInit;
+ } m_sysSysUtilUserInfo;
+
+ bool m_bIncludeNewsPage;
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+// PlayStation 3 memory structure
+//----------------------------------------------------------------------------------------------------------------------------------------------------------//
+#define STEAMPS3_MALLOC_INUSE 0x53D04A51
+#define STEAMPS3_MALLOC_SYSTEM 0x0D102C48
+#define STEAMPS3_MALLOC_OK 0xFFD04A51
+struct SteamPS3Memory_t
+{
+ bool m_bSingleAllocation; // If true, Steam will request one 6MB allocation and use the returned memory for all future allocations
+ // If false, Steam will make call malloc for each allocation
+
+ // required function pointers
+ void* (*m_pfMalloc)(size_t);
+ void* (*m_pfRealloc)(void *, size_t);
+ void (*m_pfFree)(void *);
+ size_t (*m_pUsable_size)(void*);
+};
+
+
+#endif // STEAMPS3PARAMS_H
diff --git a/lsteamclient/steamworks_sdk_142/steamtypes.h b/lsteamclient/steamworks_sdk_142/steamtypes.h
new file mode 100644
index 00000000..8e52caf2
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/steamtypes.h
@@ -0,0 +1,184 @@
+//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMTYPES_H
+#define STEAMTYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define S_CALLTYPE __cdecl
+
+// Steam-specific types. Defined here so this header file can be included in other code bases.
+#ifndef WCHARTYPES_H
+typedef unsigned char uint8;
+#endif
+
+#if defined( __GNUC__ ) && !defined(POSIX)
+ #if __GNUC__ < 4
+ #error "Steamworks requires GCC 4.X (4.2 or 4.4 have been tested)"
+ #endif
+ #define POSIX 1
+#endif
+
+#if defined(__x86_64__) || defined(_WIN64) || defined(__aarch64__)
+#define X64BITS
+#endif
+
+// Make sure VALVE_BIG_ENDIAN gets set on PS3, may already be set previously in Valve internal code.
+#if !defined(VALVE_BIG_ENDIAN) && defined(_PS3)
+#define VALVE_BIG_ENDIAN
+#endif
+
+typedef unsigned char uint8;
+typedef signed char int8;
+
+#if defined( _WIN32 )
+
+typedef __int16 int16;
+typedef unsigned __int16 uint16;
+typedef __int32 int32;
+typedef unsigned __int32 uint32;
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
+
+typedef int64 lint64;
+typedef uint64 ulint64;
+
+#ifdef X64BITS
+typedef __int64 intp; // intp is an integer that can accomodate a pointer
+typedef unsigned __int64 uintp; // (ie, sizeof(intp) >= sizeof(int) && sizeof(intp) >= sizeof(void *)
+#else
+typedef __int32 intp;
+typedef unsigned __int32 uintp;
+#endif
+
+#else // _WIN32
+
+typedef short int16;
+typedef unsigned short uint16;
+typedef int int32;
+typedef unsigned int uint32;
+typedef long long int64;
+typedef unsigned long long uint64;
+
+// [u]int64 are actually defined as 'long long' and gcc 64-bit
+// doesn't automatically consider them the same as 'long int'.
+// Changing the types for [u]int64 is complicated by
+// there being many definitions, so we just
+// define a 'long int' here and use it in places that would
+// otherwise confuse the compiler.
+typedef long int lint64;
+typedef unsigned long int ulint64;
+
+#ifdef X64BITS
+typedef long long intp;
+typedef unsigned long long uintp;
+#else
+typedef int intp;
+typedef unsigned int uintp;
+#endif
+
+#endif // else _WIN32
+
+#ifdef API_GEN
+# define CLANG_ATTR(ATTR) __attribute__((annotate( ATTR )))
+#else
+# define CLANG_ATTR(ATTR)
+#endif
+
+#define METHOD_DESC(DESC) CLANG_ATTR( "desc:" #DESC ";" )
+#define IGNOREATTR() CLANG_ATTR( "ignore" )
+#define OUT_STRUCT() CLANG_ATTR( "out_struct: ;" )
+#define OUT_STRING() CLANG_ATTR( "out_string: ;" )
+#define OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" )
+#define OUT_ARRAY_COUNT(COUNTER, DESC) CLANG_ATTR( "out_array_count:" #COUNTER ";desc:" #DESC )
+#define ARRAY_COUNT(COUNTER) CLANG_ATTR( "array_count:" #COUNTER ";" )
+#define ARRAY_COUNT_D(COUNTER, DESC) CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC )
+#define BUFFER_COUNT(COUNTER) CLANG_ATTR( "buffer_count:" #COUNTER ";" )
+#define OUT_BUFFER_COUNT(COUNTER) CLANG_ATTR( "out_buffer_count:" #COUNTER ";" )
+#define OUT_STRING_COUNT(COUNTER) CLANG_ATTR( "out_string_count:" #COUNTER ";" )
+#define DESC(DESC) CLANG_ATTR("desc:" #DESC ";")
+#define CALL_RESULT(RESULT_TYPE) CLANG_ATTR("callresult:" #RESULT_TYPE ";")
+#define CALL_BACK(RESULT_TYPE) CLANG_ATTR("callback:" #RESULT_TYPE ";")
+
+const int k_cubSaltSize = 8;
+typedef uint8 Salt_t[ k_cubSaltSize ];
+
+//-----------------------------------------------------------------------------
+// GID (GlobalID) stuff
+// This is a globally unique identifier. It's guaranteed to be unique across all
+// racks and servers for as long as a given universe persists.
+//-----------------------------------------------------------------------------
+// NOTE: for GID parsing/rendering and other utils, see gid.h
+typedef uint64 GID_t;
+
+const GID_t k_GIDNil = 0xffffffffffffffffull;
+
+// For convenience, we define a number of types that are just new names for GIDs
+typedef uint64 JobID_t; // Each Job has a unique ID
+typedef GID_t TxnID_t; // Each financial transaction has a unique ID
+
+const GID_t k_TxnIDNil = k_GIDNil;
+const GID_t k_TxnIDUnknown = 0;
+
+const JobID_t k_JobIDNil = 0xffffffffffffffffull;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 PackageId_t;
+const PackageId_t k_uPackageIdFreeSub = 0x0;
+const PackageId_t k_uPackageIdInvalid = 0xFFFFFFFF;
+
+typedef uint32 BundleId_t;
+const BundleId_t k_uBundleIdInvalid = 0;
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this.
+typedef uint32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
+
+// this is baked into client messages and interfaces as an int,
+// make sure we never break this. AppIds and DepotIDs also presently
+// share the same namespace, but since we'd like to change that in the future
+// I've defined it seperately here.
+typedef uint32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+// RTime32
+// We use this 32 bit time representing real world time.
+// It offers 1 second resolution beginning on January 1, 1970 (Unix time)
+typedef uint32 RTime32;
+
+typedef uint32 CellID_t;
+const CellID_t k_uCellIDInvalid = 0xFFFFFFFF;
+
+// handle to a Steam API call
+typedef uint64 SteamAPICall_t;
+const SteamAPICall_t k_uAPICallInvalid = 0x0;
+
+typedef uint32 AccountID_t;
+
+typedef uint32 PartnerId_t;
+const PartnerId_t k_uPartnerIdInvalid = 0;
+
+// ID for a depot content manifest
+typedef uint64 ManifestId_t;
+const ManifestId_t k_uManifestIdInvalid = 0;
+
+// ID for cafe sites
+typedef uint64 SiteId_t;
+const SiteId_t k_ulSiteIdInvalid = 0;
+
+
+#endif // STEAMTYPES_H
diff --git a/lsteamclient/steamworks_sdk_142/steamuniverse.h b/lsteamclient/steamworks_sdk_142/steamuniverse.h
new file mode 100644
index 00000000..2318935f
--- /dev/null
+++ b/lsteamclient/steamworks_sdk_142/steamuniverse.h
@@ -0,0 +1,27 @@
+//========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef STEAMUNIVERSE_H
+#define STEAMUNIVERSE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// Steam universes. Each universe is a self-contained Steam instance.
+enum EUniverse
+{
+ k_EUniverseInvalid = 0,
+ k_EUniversePublic = 1,
+ k_EUniverseBeta = 2,
+ k_EUniverseInternal = 3,
+ k_EUniverseDev = 4,
+ // k_EUniverseRC = 5, // no such universe anymore
+ k_EUniverseMax
+};
+
+
+#endif // STEAMUNIVERSE_H
diff --git a/lsteamclient/winISteamAppList.c b/lsteamclient/winISteamAppList.c
new file mode 100644
index 00000000..e6269420
--- /dev/null
+++ b/lsteamclient/winISteamAppList.c
@@ -0,0 +1,88 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001.h"
+
+typedef struct __winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001;
+
+DEFINE_THISCALL_WRAPPER(winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetNumInstalledApps, 4)
+uint32 __thiscall winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetNumInstalledApps(winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetNumInstalledApps(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetInstalledApps, 12)
+uint32 __thiscall winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetInstalledApps(winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001 *_this, AppId_t * pvecAppID, uint32 unMaxAppIDs)
+{
+ TRACE("%p\n", _this);
+ return cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetInstalledApps(_this->linux_side, pvecAppID, unMaxAppIDs);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetAppName, 16)
+int __thiscall winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetAppName(winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001 *_this, AppId_t nAppID, char * pchName, int cchNameMax)
+{
+ TRACE("%p\n", _this);
+ return cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetAppName(_this->linux_side, nAppID, pchName, cchNameMax);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetAppInstallDir, 16)
+int __thiscall winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetAppInstallDir(winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001 *_this, AppId_t nAppID, char * pchDirectory, int cchNameMax)
+{
+ uint32 path_result;
+ TRACE("%p\n", _this);
+ path_result = cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetAppInstallDir(_this->linux_side, nAppID, pchDirectory, cchNameMax);
+ return steamclient_unix_path_to_dos_path(path_result, pchDirectory, cchNameMax);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetAppBuildId, 8)
+int __thiscall winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetAppBuildId(winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetAppBuildId(_this->linux_side, nAppID);
+}
+
+extern vtable_ptr winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001,
+ VTABLE_ADD_FUNC(winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetNumInstalledApps)
+ VTABLE_ADD_FUNC(winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetInstalledApps)
+ VTABLE_ADD_FUNC(winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetAppName)
+ VTABLE_ADD_FUNC(winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetAppInstallDir)
+ VTABLE_ADD_FUNC(winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_GetAppBuildId)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001 *create_winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001(void *linux_side)
+{
+ winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamAppTicket.c b/lsteamclient/winISteamAppTicket.c
new file mode 100644
index 00000000..446380f9
--- /dev/null
+++ b/lsteamclient/winISteamAppTicket.c
@@ -0,0 +1,54 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001.h"
+
+typedef struct __winISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001;
+
+DEFINE_THISCALL_WRAPPER(winISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001_GetAppOwnershipTicketData, 32)
+uint32 __thiscall winISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001_GetAppOwnershipTicketData(winISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001 *_this, uint32 nAppID, void * pvBuffer, uint32 cbBufferLength, uint32 * piAppId, uint32 * piSteamId, uint32 * piSignature, uint32 * pcbSignature)
+{
+ TRACE("%p\n", _this);
+ return cppISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001_GetAppOwnershipTicketData(_this->linux_side, nAppID, pvBuffer, cbBufferLength, piAppId, piSteamId, piSignature, pcbSignature);
+}
+
+extern vtable_ptr winISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001,
+ VTABLE_ADD_FUNC(winISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001_GetAppOwnershipTicketData)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001 *create_winISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001(void *linux_side)
+{
+ winISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamApps.c b/lsteamclient/winISteamApps.c
new file mode 100644
index 00000000..693afeca
--- /dev/null
+++ b/lsteamclient/winISteamApps.c
@@ -0,0 +1,1222 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamApps_STEAMAPPS_INTERFACE_VERSION008.h"
+
+typedef struct __winISteamApps_STEAMAPPS_INTERFACE_VERSION008 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamApps_STEAMAPPS_INTERFACE_VERSION008;
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsSubscribed, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsSubscribed(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsSubscribed(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsLowViolence, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsLowViolence(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsLowViolence(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsCybercafe, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsCybercafe(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsCybercafe(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsVACBanned, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsVACBanned(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsVACBanned(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetCurrentGameLanguage, 4)
+const char * __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetCurrentGameLanguage(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetCurrentGameLanguage(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAvailableGameLanguages, 4)
+const char * __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAvailableGameLanguages(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAvailableGameLanguages(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsSubscribedApp, 8)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsSubscribedApp(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsSubscribedApp(_this->linux_side, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsDlcInstalled, 8)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsDlcInstalled(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsDlcInstalled(_this->linux_side, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetEarliestPurchaseUnixTime, 8)
+uint32 __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetEarliestPurchaseUnixTime(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetEarliestPurchaseUnixTime(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsSubscribedFromFreeWeekend, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsSubscribedFromFreeWeekend(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsSubscribedFromFreeWeekend(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetDLCCount, 4)
+int __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetDLCCount(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetDLCCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BGetDLCDataByIndex, 24)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BGetDLCDataByIndex(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BGetDLCDataByIndex(_this->linux_side, iDLC, pAppID, pbAvailable, pchName, cchNameBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_InstallDLC, 8)
+void __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_InstallDLC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_InstallDLC(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_UninstallDLC, 8)
+void __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_UninstallDLC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_UninstallDLC(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_RequestAppProofOfPurchaseKey, 8)
+void __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_RequestAppProofOfPurchaseKey(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_RequestAppProofOfPurchaseKey(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetCurrentBetaName, 12)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetCurrentBetaName(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this, char * pchName, int cchNameBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetCurrentBetaName(_this->linux_side, pchName, cchNameBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_MarkContentCorrupt, 5)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_MarkContentCorrupt(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this, bool bMissingFilesOnly)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_MarkContentCorrupt(_this->linux_side, bMissingFilesOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetInstalledDepots, 16)
+uint32 __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetInstalledDepots(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetInstalledDepots(_this->linux_side, appID, pvecDepots, cMaxDepots);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAppInstallDir, 16)
+uint32 __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAppInstallDir(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize)
+{
+ uint32 path_result;
+ TRACE("%p\n", _this);
+ path_result = cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAppInstallDir(_this->linux_side, appID, pchFolder, cchFolderBufferSize);
+ return steamclient_unix_path_to_dos_path(path_result, pchFolder, cchFolderBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsAppInstalled, 8)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsAppInstalled(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsAppInstalled(_this->linux_side, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAppOwner, 8)
+CSteamID *__thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAppOwner(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAppOwner(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetLaunchQueryParam, 8)
+const char * __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetLaunchQueryParam(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetLaunchQueryParam(_this->linux_side, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetDlcDownloadProgress, 16)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetDlcDownloadProgress(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetDlcDownloadProgress(_this->linux_side, nAppID, punBytesDownloaded, punBytesTotal);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAppBuildId, 4)
+int __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAppBuildId(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAppBuildId(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_RequestAllProofOfPurchaseKeys, 4)
+void __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_RequestAllProofOfPurchaseKeys(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_RequestAllProofOfPurchaseKeys(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetFileDetails, 8)
+SteamAPICall_t __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetFileDetails(winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *_this, const char * pszFileName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetFileDetails(_this->linux_side, pszFileName);
+}
+
+extern vtable_ptr winISteamApps_STEAMAPPS_INTERFACE_VERSION008_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamApps_STEAMAPPS_INTERFACE_VERSION008,
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsSubscribed)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsLowViolence)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsCybercafe)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsVACBanned)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetCurrentGameLanguage)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAvailableGameLanguages)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsSubscribedApp)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsDlcInstalled)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetEarliestPurchaseUnixTime)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsSubscribedFromFreeWeekend)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetDLCCount)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BGetDLCDataByIndex)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_InstallDLC)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_UninstallDLC)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_RequestAppProofOfPurchaseKey)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetCurrentBetaName)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_MarkContentCorrupt)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetInstalledDepots)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAppInstallDir)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_BIsAppInstalled)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAppOwner)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetLaunchQueryParam)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetDlcDownloadProgress)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetAppBuildId)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_RequestAllProofOfPurchaseKeys)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION008_GetFileDetails)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *create_winISteamApps_STEAMAPPS_INTERFACE_VERSION008(void *linux_side)
+{
+ winISteamApps_STEAMAPPS_INTERFACE_VERSION008 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamApps_STEAMAPPS_INTERFACE_VERSION008));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamApps_STEAMAPPS_INTERFACE_VERSION008_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamApps_STEAMAPPS_INTERFACE_VERSION007.h"
+
+typedef struct __winISteamApps_STEAMAPPS_INTERFACE_VERSION007 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamApps_STEAMAPPS_INTERFACE_VERSION007;
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsSubscribed, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsSubscribed(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsSubscribed(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsLowViolence, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsLowViolence(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsLowViolence(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsCybercafe, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsCybercafe(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsCybercafe(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsVACBanned, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsVACBanned(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsVACBanned(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetCurrentGameLanguage, 4)
+const char * __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetCurrentGameLanguage(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetCurrentGameLanguage(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAvailableGameLanguages, 4)
+const char * __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAvailableGameLanguages(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAvailableGameLanguages(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsSubscribedApp, 8)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsSubscribedApp(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsSubscribedApp(_this->linux_side, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsDlcInstalled, 8)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsDlcInstalled(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsDlcInstalled(_this->linux_side, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetEarliestPurchaseUnixTime, 8)
+uint32 __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetEarliestPurchaseUnixTime(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetEarliestPurchaseUnixTime(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsSubscribedFromFreeWeekend, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsSubscribedFromFreeWeekend(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsSubscribedFromFreeWeekend(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetDLCCount, 4)
+int __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetDLCCount(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetDLCCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BGetDLCDataByIndex, 24)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BGetDLCDataByIndex(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BGetDLCDataByIndex(_this->linux_side, iDLC, pAppID, pbAvailable, pchName, cchNameBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_InstallDLC, 8)
+void __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_InstallDLC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_InstallDLC(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_UninstallDLC, 8)
+void __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_UninstallDLC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_UninstallDLC(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_RequestAppProofOfPurchaseKey, 8)
+void __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_RequestAppProofOfPurchaseKey(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_RequestAppProofOfPurchaseKey(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetCurrentBetaName, 12)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetCurrentBetaName(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this, char * pchName, int cchNameBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetCurrentBetaName(_this->linux_side, pchName, cchNameBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_MarkContentCorrupt, 5)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_MarkContentCorrupt(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this, bool bMissingFilesOnly)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_MarkContentCorrupt(_this->linux_side, bMissingFilesOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetInstalledDepots, 16)
+uint32 __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetInstalledDepots(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetInstalledDepots(_this->linux_side, appID, pvecDepots, cMaxDepots);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAppInstallDir, 16)
+uint32 __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAppInstallDir(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize)
+{
+ uint32 path_result;
+ TRACE("%p\n", _this);
+ path_result = cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAppInstallDir(_this->linux_side, appID, pchFolder, cchFolderBufferSize);
+ return steamclient_unix_path_to_dos_path(path_result, pchFolder, cchFolderBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsAppInstalled, 8)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsAppInstalled(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsAppInstalled(_this->linux_side, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAppOwner, 8)
+CSteamID *__thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAppOwner(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAppOwner(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetLaunchQueryParam, 8)
+const char * __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetLaunchQueryParam(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetLaunchQueryParam(_this->linux_side, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetDlcDownloadProgress, 16)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetDlcDownloadProgress(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this, AppId_t nAppID, uint64 * punBytesDownloaded, uint64 * punBytesTotal)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetDlcDownloadProgress(_this->linux_side, nAppID, punBytesDownloaded, punBytesTotal);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAppBuildId, 4)
+int __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAppBuildId(winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAppBuildId(_this->linux_side);
+}
+
+extern vtable_ptr winISteamApps_STEAMAPPS_INTERFACE_VERSION007_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamApps_STEAMAPPS_INTERFACE_VERSION007,
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsSubscribed)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsLowViolence)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsCybercafe)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsVACBanned)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetCurrentGameLanguage)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAvailableGameLanguages)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsSubscribedApp)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsDlcInstalled)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetEarliestPurchaseUnixTime)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsSubscribedFromFreeWeekend)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetDLCCount)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BGetDLCDataByIndex)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_InstallDLC)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_UninstallDLC)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_RequestAppProofOfPurchaseKey)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetCurrentBetaName)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_MarkContentCorrupt)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetInstalledDepots)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAppInstallDir)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_BIsAppInstalled)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAppOwner)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetLaunchQueryParam)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetDlcDownloadProgress)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION007_GetAppBuildId)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *create_winISteamApps_STEAMAPPS_INTERFACE_VERSION007(void *linux_side)
+{
+ winISteamApps_STEAMAPPS_INTERFACE_VERSION007 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamApps_STEAMAPPS_INTERFACE_VERSION007));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamApps_STEAMAPPS_INTERFACE_VERSION007_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamApps_STEAMAPPS_INTERFACE_VERSION006.h"
+
+typedef struct __winISteamApps_STEAMAPPS_INTERFACE_VERSION006 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamApps_STEAMAPPS_INTERFACE_VERSION006;
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsSubscribed, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsSubscribed(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsSubscribed(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsLowViolence, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsLowViolence(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsLowViolence(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsCybercafe, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsCybercafe(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsCybercafe(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsVACBanned, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsVACBanned(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsVACBanned(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetCurrentGameLanguage, 4)
+const char * __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetCurrentGameLanguage(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetCurrentGameLanguage(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetAvailableGameLanguages, 4)
+const char * __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetAvailableGameLanguages(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetAvailableGameLanguages(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsSubscribedApp, 8)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsSubscribedApp(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsSubscribedApp(_this->linux_side, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsDlcInstalled, 8)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsDlcInstalled(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsDlcInstalled(_this->linux_side, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetEarliestPurchaseUnixTime, 8)
+uint32 __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetEarliestPurchaseUnixTime(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetEarliestPurchaseUnixTime(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsSubscribedFromFreeWeekend, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsSubscribedFromFreeWeekend(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsSubscribedFromFreeWeekend(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetDLCCount, 4)
+int __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetDLCCount(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetDLCCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BGetDLCDataByIndex, 24)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BGetDLCDataByIndex(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BGetDLCDataByIndex(_this->linux_side, iDLC, pAppID, pbAvailable, pchName, cchNameBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_InstallDLC, 8)
+void __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_InstallDLC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_InstallDLC(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_UninstallDLC, 8)
+void __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_UninstallDLC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_UninstallDLC(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_RequestAppProofOfPurchaseKey, 8)
+void __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_RequestAppProofOfPurchaseKey(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_RequestAppProofOfPurchaseKey(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetCurrentBetaName, 12)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetCurrentBetaName(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this, char * pchName, int cchNameBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetCurrentBetaName(_this->linux_side, pchName, cchNameBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_MarkContentCorrupt, 5)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_MarkContentCorrupt(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this, bool bMissingFilesOnly)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_MarkContentCorrupt(_this->linux_side, bMissingFilesOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetInstalledDepots, 16)
+uint32 __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetInstalledDepots(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this, AppId_t appID, DepotId_t * pvecDepots, uint32 cMaxDepots)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetInstalledDepots(_this->linux_side, appID, pvecDepots, cMaxDepots);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetAppInstallDir, 16)
+uint32 __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetAppInstallDir(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize)
+{
+ uint32 path_result;
+ TRACE("%p\n", _this);
+ path_result = cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetAppInstallDir(_this->linux_side, appID, pchFolder, cchFolderBufferSize);
+ return steamclient_unix_path_to_dos_path(path_result, pchFolder, cchFolderBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsAppInstalled, 8)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsAppInstalled(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsAppInstalled(_this->linux_side, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetAppOwner, 8)
+CSteamID *__thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetAppOwner(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetAppOwner(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetLaunchQueryParam, 8)
+const char * __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetLaunchQueryParam(winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *_this, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetLaunchQueryParam(_this->linux_side, pchKey);
+}
+
+extern vtable_ptr winISteamApps_STEAMAPPS_INTERFACE_VERSION006_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamApps_STEAMAPPS_INTERFACE_VERSION006,
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsSubscribed)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsLowViolence)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsCybercafe)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsVACBanned)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetCurrentGameLanguage)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetAvailableGameLanguages)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsSubscribedApp)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsDlcInstalled)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetEarliestPurchaseUnixTime)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsSubscribedFromFreeWeekend)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetDLCCount)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BGetDLCDataByIndex)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_InstallDLC)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_UninstallDLC)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_RequestAppProofOfPurchaseKey)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetCurrentBetaName)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_MarkContentCorrupt)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetInstalledDepots)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetAppInstallDir)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_BIsAppInstalled)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetAppOwner)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION006_GetLaunchQueryParam)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *create_winISteamApps_STEAMAPPS_INTERFACE_VERSION006(void *linux_side)
+{
+ winISteamApps_STEAMAPPS_INTERFACE_VERSION006 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamApps_STEAMAPPS_INTERFACE_VERSION006));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamApps_STEAMAPPS_INTERFACE_VERSION006_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamApps_STEAMAPPS_INTERFACE_VERSION005.h"
+
+typedef struct __winISteamApps_STEAMAPPS_INTERFACE_VERSION005 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamApps_STEAMAPPS_INTERFACE_VERSION005;
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsSubscribed, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsSubscribed(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsSubscribed(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsLowViolence, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsLowViolence(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsLowViolence(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsCybercafe, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsCybercafe(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsCybercafe(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsVACBanned, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsVACBanned(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsVACBanned(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetCurrentGameLanguage, 4)
+const char * __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetCurrentGameLanguage(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetCurrentGameLanguage(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetAvailableGameLanguages, 4)
+const char * __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetAvailableGameLanguages(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetAvailableGameLanguages(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsSubscribedApp, 8)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsSubscribedApp(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsSubscribedApp(_this->linux_side, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsDlcInstalled, 8)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsDlcInstalled(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsDlcInstalled(_this->linux_side, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetEarliestPurchaseUnixTime, 8)
+uint32 __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetEarliestPurchaseUnixTime(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetEarliestPurchaseUnixTime(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsSubscribedFromFreeWeekend, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsSubscribedFromFreeWeekend(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsSubscribedFromFreeWeekend(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetDLCCount, 4)
+int __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetDLCCount(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetDLCCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BGetDLCDataByIndex, 24)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BGetDLCDataByIndex(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BGetDLCDataByIndex(_this->linux_side, iDLC, pAppID, pbAvailable, pchName, cchNameBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_InstallDLC, 8)
+void __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_InstallDLC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_InstallDLC(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_UninstallDLC, 8)
+void __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_UninstallDLC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_UninstallDLC(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_RequestAppProofOfPurchaseKey, 8)
+void __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_RequestAppProofOfPurchaseKey(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_RequestAppProofOfPurchaseKey(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetCurrentBetaName, 12)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetCurrentBetaName(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this, char * pchName, int cchNameBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetCurrentBetaName(_this->linux_side, pchName, cchNameBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_MarkContentCorrupt, 5)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_MarkContentCorrupt(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this, bool bMissingFilesOnly)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_MarkContentCorrupt(_this->linux_side, bMissingFilesOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetInstalledDepots, 12)
+uint32 __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetInstalledDepots(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this, DepotId_t * pvecDepots, uint32 cMaxDepots)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetInstalledDepots(_this->linux_side, pvecDepots, cMaxDepots);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetAppInstallDir, 16)
+uint32 __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetAppInstallDir(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this, AppId_t appID, char * pchFolder, uint32 cchFolderBufferSize)
+{
+ uint32 path_result;
+ TRACE("%p\n", _this);
+ path_result = cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetAppInstallDir(_this->linux_side, appID, pchFolder, cchFolderBufferSize);
+ return steamclient_unix_path_to_dos_path(path_result, pchFolder, cchFolderBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsAppInstalled, 8)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsAppInstalled(winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *_this, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsAppInstalled(_this->linux_side, appID);
+}
+
+extern vtable_ptr winISteamApps_STEAMAPPS_INTERFACE_VERSION005_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamApps_STEAMAPPS_INTERFACE_VERSION005,
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsSubscribed)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsLowViolence)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsCybercafe)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsVACBanned)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetCurrentGameLanguage)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetAvailableGameLanguages)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsSubscribedApp)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsDlcInstalled)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetEarliestPurchaseUnixTime)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsSubscribedFromFreeWeekend)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetDLCCount)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BGetDLCDataByIndex)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_InstallDLC)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_UninstallDLC)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_RequestAppProofOfPurchaseKey)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetCurrentBetaName)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_MarkContentCorrupt)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetInstalledDepots)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_GetAppInstallDir)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION005_BIsAppInstalled)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *create_winISteamApps_STEAMAPPS_INTERFACE_VERSION005(void *linux_side)
+{
+ winISteamApps_STEAMAPPS_INTERFACE_VERSION005 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamApps_STEAMAPPS_INTERFACE_VERSION005));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamApps_STEAMAPPS_INTERFACE_VERSION005_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamApps_STEAMAPPS_INTERFACE_VERSION004.h"
+
+typedef struct __winISteamApps_STEAMAPPS_INTERFACE_VERSION004 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamApps_STEAMAPPS_INTERFACE_VERSION004;
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsSubscribed, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsSubscribed(winISteamApps_STEAMAPPS_INTERFACE_VERSION004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsSubscribed(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsLowViolence, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsLowViolence(winISteamApps_STEAMAPPS_INTERFACE_VERSION004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsLowViolence(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsCybercafe, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsCybercafe(winISteamApps_STEAMAPPS_INTERFACE_VERSION004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsCybercafe(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsVACBanned, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsVACBanned(winISteamApps_STEAMAPPS_INTERFACE_VERSION004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsVACBanned(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetCurrentGameLanguage, 4)
+const char * __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetCurrentGameLanguage(winISteamApps_STEAMAPPS_INTERFACE_VERSION004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetCurrentGameLanguage(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetAvailableGameLanguages, 4)
+const char * __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetAvailableGameLanguages(winISteamApps_STEAMAPPS_INTERFACE_VERSION004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetAvailableGameLanguages(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsSubscribedApp, 8)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsSubscribedApp(winISteamApps_STEAMAPPS_INTERFACE_VERSION004 *_this, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsSubscribedApp(_this->linux_side, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsDlcInstalled, 8)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsDlcInstalled(winISteamApps_STEAMAPPS_INTERFACE_VERSION004 *_this, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsDlcInstalled(_this->linux_side, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetEarliestPurchaseUnixTime, 8)
+uint32 __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetEarliestPurchaseUnixTime(winISteamApps_STEAMAPPS_INTERFACE_VERSION004 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetEarliestPurchaseUnixTime(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsSubscribedFromFreeWeekend, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsSubscribedFromFreeWeekend(winISteamApps_STEAMAPPS_INTERFACE_VERSION004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsSubscribedFromFreeWeekend(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetDLCCount, 4)
+int __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetDLCCount(winISteamApps_STEAMAPPS_INTERFACE_VERSION004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetDLCCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BGetDLCDataByIndex, 24)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BGetDLCDataByIndex(winISteamApps_STEAMAPPS_INTERFACE_VERSION004 *_this, int iDLC, AppId_t * pAppID, bool * pbAvailable, char * pchName, int cchNameBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_BGetDLCDataByIndex(_this->linux_side, iDLC, pAppID, pbAvailable, pchName, cchNameBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_InstallDLC, 8)
+void __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION004_InstallDLC(winISteamApps_STEAMAPPS_INTERFACE_VERSION004 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_InstallDLC(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_UninstallDLC, 8)
+void __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION004_UninstallDLC(winISteamApps_STEAMAPPS_INTERFACE_VERSION004 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamApps_STEAMAPPS_INTERFACE_VERSION004_UninstallDLC(_this->linux_side, nAppID);
+}
+
+extern vtable_ptr winISteamApps_STEAMAPPS_INTERFACE_VERSION004_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamApps_STEAMAPPS_INTERFACE_VERSION004,
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsSubscribed)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsLowViolence)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsCybercafe)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsVACBanned)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetCurrentGameLanguage)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetAvailableGameLanguages)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsSubscribedApp)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsDlcInstalled)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetEarliestPurchaseUnixTime)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BIsSubscribedFromFreeWeekend)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_GetDLCCount)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_BGetDLCDataByIndex)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_InstallDLC)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION004_UninstallDLC)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamApps_STEAMAPPS_INTERFACE_VERSION004 *create_winISteamApps_STEAMAPPS_INTERFACE_VERSION004(void *linux_side)
+{
+ winISteamApps_STEAMAPPS_INTERFACE_VERSION004 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamApps_STEAMAPPS_INTERFACE_VERSION004));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamApps_STEAMAPPS_INTERFACE_VERSION004_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamApps_STEAMAPPS_INTERFACE_VERSION003.h"
+
+typedef struct __winISteamApps_STEAMAPPS_INTERFACE_VERSION003 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamApps_STEAMAPPS_INTERFACE_VERSION003;
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsSubscribed, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsSubscribed(winISteamApps_STEAMAPPS_INTERFACE_VERSION003 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsSubscribed(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsLowViolence, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsLowViolence(winISteamApps_STEAMAPPS_INTERFACE_VERSION003 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsLowViolence(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsCybercafe, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsCybercafe(winISteamApps_STEAMAPPS_INTERFACE_VERSION003 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsCybercafe(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsVACBanned, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsVACBanned(winISteamApps_STEAMAPPS_INTERFACE_VERSION003 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsVACBanned(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION003_GetCurrentGameLanguage, 4)
+const char * __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION003_GetCurrentGameLanguage(winISteamApps_STEAMAPPS_INTERFACE_VERSION003 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_GetCurrentGameLanguage(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION003_GetAvailableGameLanguages, 4)
+const char * __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION003_GetAvailableGameLanguages(winISteamApps_STEAMAPPS_INTERFACE_VERSION003 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_GetAvailableGameLanguages(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsSubscribedApp, 8)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsSubscribedApp(winISteamApps_STEAMAPPS_INTERFACE_VERSION003 *_this, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsSubscribedApp(_this->linux_side, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsDlcInstalled, 8)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsDlcInstalled(winISteamApps_STEAMAPPS_INTERFACE_VERSION003 *_this, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsDlcInstalled(_this->linux_side, appID);
+}
+
+extern vtable_ptr winISteamApps_STEAMAPPS_INTERFACE_VERSION003_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamApps_STEAMAPPS_INTERFACE_VERSION003,
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsSubscribed)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsLowViolence)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsCybercafe)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsVACBanned)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION003_GetCurrentGameLanguage)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION003_GetAvailableGameLanguages)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsSubscribedApp)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION003_BIsDlcInstalled)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamApps_STEAMAPPS_INTERFACE_VERSION003 *create_winISteamApps_STEAMAPPS_INTERFACE_VERSION003(void *linux_side)
+{
+ winISteamApps_STEAMAPPS_INTERFACE_VERSION003 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamApps_STEAMAPPS_INTERFACE_VERSION003));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamApps_STEAMAPPS_INTERFACE_VERSION003_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamApps_STEAMAPPS_INTERFACE_VERSION002.h"
+
+typedef struct __winISteamApps_STEAMAPPS_INTERFACE_VERSION002 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamApps_STEAMAPPS_INTERFACE_VERSION002;
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsSubscribed, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsSubscribed(winISteamApps_STEAMAPPS_INTERFACE_VERSION002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsSubscribed(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsLowViolence, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsLowViolence(winISteamApps_STEAMAPPS_INTERFACE_VERSION002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsLowViolence(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsCybercafe, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsCybercafe(winISteamApps_STEAMAPPS_INTERFACE_VERSION002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsCybercafe(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsVACBanned, 4)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsVACBanned(winISteamApps_STEAMAPPS_INTERFACE_VERSION002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsVACBanned(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION002_GetCurrentGameLanguage, 4)
+const char * __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION002_GetCurrentGameLanguage(winISteamApps_STEAMAPPS_INTERFACE_VERSION002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_GetCurrentGameLanguage(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION002_GetAvailableGameLanguages, 4)
+const char * __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION002_GetAvailableGameLanguages(winISteamApps_STEAMAPPS_INTERFACE_VERSION002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_GetAvailableGameLanguages(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsSubscribedApp, 8)
+bool __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsSubscribedApp(winISteamApps_STEAMAPPS_INTERFACE_VERSION002 *_this, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsSubscribedApp(_this->linux_side, appID);
+}
+
+extern vtable_ptr winISteamApps_STEAMAPPS_INTERFACE_VERSION002_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamApps_STEAMAPPS_INTERFACE_VERSION002,
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsSubscribed)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsLowViolence)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsCybercafe)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsVACBanned)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION002_GetCurrentGameLanguage)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION002_GetAvailableGameLanguages)
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION002_BIsSubscribedApp)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamApps_STEAMAPPS_INTERFACE_VERSION002 *create_winISteamApps_STEAMAPPS_INTERFACE_VERSION002(void *linux_side)
+{
+ winISteamApps_STEAMAPPS_INTERFACE_VERSION002 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamApps_STEAMAPPS_INTERFACE_VERSION002));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamApps_STEAMAPPS_INTERFACE_VERSION002_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamApps_STEAMAPPS_INTERFACE_VERSION001.h"
+
+typedef struct __winISteamApps_STEAMAPPS_INTERFACE_VERSION001 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamApps_STEAMAPPS_INTERFACE_VERSION001;
+
+DEFINE_THISCALL_WRAPPER(winISteamApps_STEAMAPPS_INTERFACE_VERSION001_GetAppData, 20)
+int __thiscall winISteamApps_STEAMAPPS_INTERFACE_VERSION001_GetAppData(winISteamApps_STEAMAPPS_INTERFACE_VERSION001 *_this, AppId_t nAppID, const char * pchKey, char * pchValue, int cchValueMax)
+{
+ TRACE("%p\n", _this);
+ return cppISteamApps_STEAMAPPS_INTERFACE_VERSION001_GetAppData(_this->linux_side, nAppID, pchKey, pchValue, cchValueMax);
+}
+
+extern vtable_ptr winISteamApps_STEAMAPPS_INTERFACE_VERSION001_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamApps_STEAMAPPS_INTERFACE_VERSION001,
+ VTABLE_ADD_FUNC(winISteamApps_STEAMAPPS_INTERFACE_VERSION001_GetAppData)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamApps_STEAMAPPS_INTERFACE_VERSION001 *create_winISteamApps_STEAMAPPS_INTERFACE_VERSION001(void *linux_side)
+{
+ winISteamApps_STEAMAPPS_INTERFACE_VERSION001 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamApps_STEAMAPPS_INTERFACE_VERSION001));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamApps_STEAMAPPS_INTERFACE_VERSION001_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamClient.c b/lsteamclient/winISteamClient.c
new file mode 100644
index 00000000..fcd31e27
--- /dev/null
+++ b/lsteamclient/winISteamClient.c
@@ -0,0 +1,2624 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamClient_SteamClient017.h"
+
+typedef struct __winISteamClient_SteamClient017 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamClient_SteamClient017;
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_CreateSteamPipe, 4)
+HSteamPipe __thiscall winISteamClient_SteamClient017_CreateSteamPipe(winISteamClient_SteamClient017 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient017_CreateSteamPipe(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_BReleaseSteamPipe, 8)
+bool __thiscall winISteamClient_SteamClient017_BReleaseSteamPipe(winISteamClient_SteamClient017 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient017_BReleaseSteamPipe(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_ConnectToGlobalUser, 8)
+HSteamUser __thiscall winISteamClient_SteamClient017_ConnectToGlobalUser(winISteamClient_SteamClient017 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient017_ConnectToGlobalUser(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_CreateLocalUser, 12)
+HSteamUser __thiscall winISteamClient_SteamClient017_CreateLocalUser(winISteamClient_SteamClient017 *_this, HSteamPipe * phSteamPipe, EAccountType eAccountType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient017_CreateLocalUser(_this->linux_side, phSteamPipe, eAccountType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_ReleaseUser, 12)
+void __thiscall winISteamClient_SteamClient017_ReleaseUser(winISteamClient_SteamClient017 *_this, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient017_ReleaseUser(_this->linux_side, hSteamPipe, hUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamUser, 16)
+winISteamUser * __thiscall winISteamClient_SteamClient017_GetISteamUser(winISteamClient_SteamClient017 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamUser(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamGameServer, 16)
+winISteamGameServer * __thiscall winISteamClient_SteamClient017_GetISteamGameServer(winISteamClient_SteamClient017 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamGameServer(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_SetLocalIPBinding, 10)
+void __thiscall winISteamClient_SteamClient017_SetLocalIPBinding(winISteamClient_SteamClient017 *_this, uint32 unIP, uint16 usPort)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient017_SetLocalIPBinding(_this->linux_side, unIP, usPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamFriends, 16)
+winISteamFriends * __thiscall winISteamClient_SteamClient017_GetISteamFriends(winISteamClient_SteamClient017 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamFriends(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamUtils, 12)
+winISteamUtils * __thiscall winISteamClient_SteamClient017_GetISteamUtils(winISteamClient_SteamClient017 *_this, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamUtils(_this->linux_side, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamMatchmaking, 16)
+winISteamMatchmaking * __thiscall winISteamClient_SteamClient017_GetISteamMatchmaking(winISteamClient_SteamClient017 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamMatchmaking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamMatchmakingServers, 16)
+winISteamMatchmakingServers * __thiscall winISteamClient_SteamClient017_GetISteamMatchmakingServers(winISteamClient_SteamClient017 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamMatchmakingServers(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamGenericInterface, 16)
+void * __thiscall winISteamClient_SteamClient017_GetISteamGenericInterface(winISteamClient_SteamClient017 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamGenericInterface(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamUserStats, 16)
+winISteamUserStats * __thiscall winISteamClient_SteamClient017_GetISteamUserStats(winISteamClient_SteamClient017 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamUserStats(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamGameServerStats, 16)
+winISteamGameServerStats * __thiscall winISteamClient_SteamClient017_GetISteamGameServerStats(winISteamClient_SteamClient017 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamGameServerStats(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamApps, 16)
+winISteamApps * __thiscall winISteamClient_SteamClient017_GetISteamApps(winISteamClient_SteamClient017 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamApps(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamNetworking, 16)
+winISteamNetworking * __thiscall winISteamClient_SteamClient017_GetISteamNetworking(winISteamClient_SteamClient017 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamNetworking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamRemoteStorage, 16)
+winISteamRemoteStorage * __thiscall winISteamClient_SteamClient017_GetISteamRemoteStorage(winISteamClient_SteamClient017 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamRemoteStorage(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamScreenshots, 16)
+winISteamScreenshots * __thiscall winISteamClient_SteamClient017_GetISteamScreenshots(winISteamClient_SteamClient017 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamScreenshots(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_RunFrame, 4)
+void __thiscall winISteamClient_SteamClient017_RunFrame(winISteamClient_SteamClient017 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient017_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetIPCCallCount, 4)
+uint32 __thiscall winISteamClient_SteamClient017_GetIPCCallCount(winISteamClient_SteamClient017 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient017_GetIPCCallCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_SetWarningMessageHook, 8)
+void __thiscall winISteamClient_SteamClient017_SetWarningMessageHook(winISteamClient_SteamClient017 *_this, SteamAPIWarningMessageHook_t pFunction)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient017_SetWarningMessageHook(_this->linux_side, pFunction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_BShutdownIfAllPipesClosed, 4)
+bool __thiscall winISteamClient_SteamClient017_BShutdownIfAllPipesClosed(winISteamClient_SteamClient017 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient017_BShutdownIfAllPipesClosed(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamHTTP, 16)
+winISteamHTTP * __thiscall winISteamClient_SteamClient017_GetISteamHTTP(winISteamClient_SteamClient017 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamHTTP(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_DEPRECATED_GetISteamUnifiedMessages, 16)
+void * __thiscall winISteamClient_SteamClient017_DEPRECATED_GetISteamUnifiedMessages(winISteamClient_SteamClient017 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient017_DEPRECATED_GetISteamUnifiedMessages(_this->linux_side, hSteamuser, hSteamPipe, pchVersion);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamController, 16)
+winISteamController * __thiscall winISteamClient_SteamClient017_GetISteamController(winISteamClient_SteamClient017 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamController(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamUGC, 16)
+winISteamUGC * __thiscall winISteamClient_SteamClient017_GetISteamUGC(winISteamClient_SteamClient017 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamUGC(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamAppList, 16)
+winISteamAppList * __thiscall winISteamClient_SteamClient017_GetISteamAppList(winISteamClient_SteamClient017 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamAppList(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamMusic, 16)
+winISteamMusic * __thiscall winISteamClient_SteamClient017_GetISteamMusic(winISteamClient_SteamClient017 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamMusic(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamMusicRemote, 16)
+winISteamMusicRemote * __thiscall winISteamClient_SteamClient017_GetISteamMusicRemote(winISteamClient_SteamClient017 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamMusicRemote(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamHTMLSurface, 16)
+winISteamHTMLSurface * __thiscall winISteamClient_SteamClient017_GetISteamHTMLSurface(winISteamClient_SteamClient017 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamHTMLSurface(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_DEPRECATED_Set_SteamAPI_CPostAPIResultInProcess, 8)
+void __thiscall winISteamClient_SteamClient017_DEPRECATED_Set_SteamAPI_CPostAPIResultInProcess(winISteamClient_SteamClient017 *_this, void * _a)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient017_DEPRECATED_Set_SteamAPI_CPostAPIResultInProcess(_this->linux_side, _a);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess, 8)
+void __thiscall winISteamClient_SteamClient017_DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess(winISteamClient_SteamClient017 *_this, void * _a)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient017_DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess(_this->linux_side, _a);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_Set_SteamAPI_CCheckCallbackRegisteredInProcess, 8)
+void __thiscall winISteamClient_SteamClient017_Set_SteamAPI_CCheckCallbackRegisteredInProcess(winISteamClient_SteamClient017 *_this, SteamAPI_CheckCallbackRegistered_t func)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient017_Set_SteamAPI_CCheckCallbackRegisteredInProcess(_this->linux_side, func);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamInventory, 16)
+winISteamInventory * __thiscall winISteamClient_SteamClient017_GetISteamInventory(winISteamClient_SteamClient017 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamInventory(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamVideo, 16)
+winISteamVideo * __thiscall winISteamClient_SteamClient017_GetISteamVideo(winISteamClient_SteamClient017 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamVideo(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamParentalSettings, 16)
+winISteamParentalSettings * __thiscall winISteamClient_SteamClient017_GetISteamParentalSettings(winISteamClient_SteamClient017 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient017_GetISteamParentalSettings(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+extern vtable_ptr winISteamClient_SteamClient017_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamClient_SteamClient017,
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_CreateSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_BReleaseSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_ConnectToGlobalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_CreateLocalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_ReleaseUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamGameServer)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_SetLocalIPBinding)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamFriends)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamUtils)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamMatchmaking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamMatchmakingServers)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamGenericInterface)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamUserStats)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamGameServerStats)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamApps)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamNetworking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamRemoteStorage)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamScreenshots)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_RunFrame)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetIPCCallCount)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_SetWarningMessageHook)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_BShutdownIfAllPipesClosed)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamHTTP)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_DEPRECATED_GetISteamUnifiedMessages)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamController)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamUGC)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamAppList)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamMusic)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamMusicRemote)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamHTMLSurface)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_DEPRECATED_Set_SteamAPI_CPostAPIResultInProcess)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_Set_SteamAPI_CCheckCallbackRegisteredInProcess)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamInventory)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamVideo)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient017_GetISteamParentalSettings)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamClient_SteamClient017 *create_winISteamClient_SteamClient017(void *linux_side)
+{
+ winISteamClient_SteamClient017 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamClient_SteamClient017));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamClient_SteamClient017_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamClient_SteamClient016.h"
+
+typedef struct __winISteamClient_SteamClient016 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamClient_SteamClient016;
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_CreateSteamPipe, 4)
+HSteamPipe __thiscall winISteamClient_SteamClient016_CreateSteamPipe(winISteamClient_SteamClient016 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient016_CreateSteamPipe(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_BReleaseSteamPipe, 8)
+bool __thiscall winISteamClient_SteamClient016_BReleaseSteamPipe(winISteamClient_SteamClient016 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient016_BReleaseSteamPipe(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_ConnectToGlobalUser, 8)
+HSteamUser __thiscall winISteamClient_SteamClient016_ConnectToGlobalUser(winISteamClient_SteamClient016 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient016_ConnectToGlobalUser(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_CreateLocalUser, 12)
+HSteamUser __thiscall winISteamClient_SteamClient016_CreateLocalUser(winISteamClient_SteamClient016 *_this, HSteamPipe * phSteamPipe, EAccountType eAccountType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient016_CreateLocalUser(_this->linux_side, phSteamPipe, eAccountType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_ReleaseUser, 12)
+void __thiscall winISteamClient_SteamClient016_ReleaseUser(winISteamClient_SteamClient016 *_this, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient016_ReleaseUser(_this->linux_side, hSteamPipe, hUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamUser, 16)
+winISteamUser * __thiscall winISteamClient_SteamClient016_GetISteamUser(winISteamClient_SteamClient016 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamUser(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamGameServer, 16)
+winISteamGameServer * __thiscall winISteamClient_SteamClient016_GetISteamGameServer(winISteamClient_SteamClient016 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamGameServer(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_SetLocalIPBinding, 10)
+void __thiscall winISteamClient_SteamClient016_SetLocalIPBinding(winISteamClient_SteamClient016 *_this, uint32 unIP, uint16 usPort)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient016_SetLocalIPBinding(_this->linux_side, unIP, usPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamFriends, 16)
+winISteamFriends * __thiscall winISteamClient_SteamClient016_GetISteamFriends(winISteamClient_SteamClient016 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamFriends(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamUtils, 12)
+winISteamUtils * __thiscall winISteamClient_SteamClient016_GetISteamUtils(winISteamClient_SteamClient016 *_this, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamUtils(_this->linux_side, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamMatchmaking, 16)
+winISteamMatchmaking * __thiscall winISteamClient_SteamClient016_GetISteamMatchmaking(winISteamClient_SteamClient016 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamMatchmaking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamMatchmakingServers, 16)
+winISteamMatchmakingServers * __thiscall winISteamClient_SteamClient016_GetISteamMatchmakingServers(winISteamClient_SteamClient016 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamMatchmakingServers(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamGenericInterface, 16)
+void * __thiscall winISteamClient_SteamClient016_GetISteamGenericInterface(winISteamClient_SteamClient016 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamGenericInterface(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamUserStats, 16)
+winISteamUserStats * __thiscall winISteamClient_SteamClient016_GetISteamUserStats(winISteamClient_SteamClient016 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamUserStats(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamGameServerStats, 16)
+winISteamGameServerStats * __thiscall winISteamClient_SteamClient016_GetISteamGameServerStats(winISteamClient_SteamClient016 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamGameServerStats(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamApps, 16)
+winISteamApps * __thiscall winISteamClient_SteamClient016_GetISteamApps(winISteamClient_SteamClient016 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamApps(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamNetworking, 16)
+winISteamNetworking * __thiscall winISteamClient_SteamClient016_GetISteamNetworking(winISteamClient_SteamClient016 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamNetworking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamRemoteStorage, 16)
+winISteamRemoteStorage * __thiscall winISteamClient_SteamClient016_GetISteamRemoteStorage(winISteamClient_SteamClient016 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamRemoteStorage(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamScreenshots, 16)
+winISteamScreenshots * __thiscall winISteamClient_SteamClient016_GetISteamScreenshots(winISteamClient_SteamClient016 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamScreenshots(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_RunFrame, 4)
+void __thiscall winISteamClient_SteamClient016_RunFrame(winISteamClient_SteamClient016 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient016_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetIPCCallCount, 4)
+uint32 __thiscall winISteamClient_SteamClient016_GetIPCCallCount(winISteamClient_SteamClient016 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient016_GetIPCCallCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_SetWarningMessageHook, 8)
+void __thiscall winISteamClient_SteamClient016_SetWarningMessageHook(winISteamClient_SteamClient016 *_this, SteamAPIWarningMessageHook_t pFunction)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient016_SetWarningMessageHook(_this->linux_side, pFunction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_BShutdownIfAllPipesClosed, 4)
+bool __thiscall winISteamClient_SteamClient016_BShutdownIfAllPipesClosed(winISteamClient_SteamClient016 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient016_BShutdownIfAllPipesClosed(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamHTTP, 16)
+winISteamHTTP * __thiscall winISteamClient_SteamClient016_GetISteamHTTP(winISteamClient_SteamClient016 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamHTTP(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamUnifiedMessages, 16)
+winISteamUnifiedMessages * __thiscall winISteamClient_SteamClient016_GetISteamUnifiedMessages(winISteamClient_SteamClient016 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamUnifiedMessages(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamController, 16)
+winISteamController * __thiscall winISteamClient_SteamClient016_GetISteamController(winISteamClient_SteamClient016 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamController(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamUGC, 16)
+winISteamUGC * __thiscall winISteamClient_SteamClient016_GetISteamUGC(winISteamClient_SteamClient016 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamUGC(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamAppList, 16)
+winISteamAppList * __thiscall winISteamClient_SteamClient016_GetISteamAppList(winISteamClient_SteamClient016 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamAppList(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamMusic, 16)
+winISteamMusic * __thiscall winISteamClient_SteamClient016_GetISteamMusic(winISteamClient_SteamClient016 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamMusic(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamMusicRemote, 16)
+winISteamMusicRemote * __thiscall winISteamClient_SteamClient016_GetISteamMusicRemote(winISteamClient_SteamClient016 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamMusicRemote(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_GetISteamHTMLSurface, 16)
+winISteamHTMLSurface * __thiscall winISteamClient_SteamClient016_GetISteamHTMLSurface(winISteamClient_SteamClient016 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient016_GetISteamHTMLSurface(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_Set_SteamAPI_CPostAPIResultInProcess, 8)
+void __thiscall winISteamClient_SteamClient016_Set_SteamAPI_CPostAPIResultInProcess(winISteamClient_SteamClient016 *_this, SteamAPI_PostAPIResultInProcess_t func)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient016_Set_SteamAPI_CPostAPIResultInProcess(_this->linux_side, func);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_Remove_SteamAPI_CPostAPIResultInProcess, 8)
+void __thiscall winISteamClient_SteamClient016_Remove_SteamAPI_CPostAPIResultInProcess(winISteamClient_SteamClient016 *_this, SteamAPI_PostAPIResultInProcess_t func)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient016_Remove_SteamAPI_CPostAPIResultInProcess(_this->linux_side, func);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_Set_SteamAPI_CCheckCallbackRegisteredInProcess, 8)
+void __thiscall winISteamClient_SteamClient016_Set_SteamAPI_CCheckCallbackRegisteredInProcess(winISteamClient_SteamClient016 *_this, SteamAPI_CheckCallbackRegistered_t func)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient016_Set_SteamAPI_CCheckCallbackRegisteredInProcess(_this->linux_side, func);
+}
+
+extern vtable_ptr winISteamClient_SteamClient016_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamClient_SteamClient016,
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_CreateSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_BReleaseSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_ConnectToGlobalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_CreateLocalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_ReleaseUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamGameServer)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_SetLocalIPBinding)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamFriends)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamUtils)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamMatchmaking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamMatchmakingServers)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamGenericInterface)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamUserStats)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamGameServerStats)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamApps)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamNetworking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamRemoteStorage)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamScreenshots)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_RunFrame)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetIPCCallCount)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_SetWarningMessageHook)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_BShutdownIfAllPipesClosed)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamHTTP)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamUnifiedMessages)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamController)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamUGC)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamAppList)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamMusic)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamMusicRemote)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_GetISteamHTMLSurface)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_Set_SteamAPI_CPostAPIResultInProcess)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_Remove_SteamAPI_CPostAPIResultInProcess)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient016_Set_SteamAPI_CCheckCallbackRegisteredInProcess)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamClient_SteamClient016 *create_winISteamClient_SteamClient016(void *linux_side)
+{
+ winISteamClient_SteamClient016 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamClient_SteamClient016));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamClient_SteamClient016_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamClient_SteamClient015.h"
+
+typedef struct __winISteamClient_SteamClient015 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamClient_SteamClient015;
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_CreateSteamPipe, 4)
+HSteamPipe __thiscall winISteamClient_SteamClient015_CreateSteamPipe(winISteamClient_SteamClient015 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient015_CreateSteamPipe(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_BReleaseSteamPipe, 8)
+bool __thiscall winISteamClient_SteamClient015_BReleaseSteamPipe(winISteamClient_SteamClient015 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient015_BReleaseSteamPipe(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_ConnectToGlobalUser, 8)
+HSteamUser __thiscall winISteamClient_SteamClient015_ConnectToGlobalUser(winISteamClient_SteamClient015 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient015_ConnectToGlobalUser(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_CreateLocalUser, 12)
+HSteamUser __thiscall winISteamClient_SteamClient015_CreateLocalUser(winISteamClient_SteamClient015 *_this, HSteamPipe * phSteamPipe, EAccountType eAccountType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient015_CreateLocalUser(_this->linux_side, phSteamPipe, eAccountType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_ReleaseUser, 12)
+void __thiscall winISteamClient_SteamClient015_ReleaseUser(winISteamClient_SteamClient015 *_this, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient015_ReleaseUser(_this->linux_side, hSteamPipe, hUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamUser, 16)
+winISteamUser * __thiscall winISteamClient_SteamClient015_GetISteamUser(winISteamClient_SteamClient015 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamUser(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamGameServer, 16)
+winISteamGameServer * __thiscall winISteamClient_SteamClient015_GetISteamGameServer(winISteamClient_SteamClient015 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamGameServer(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_SetLocalIPBinding, 10)
+void __thiscall winISteamClient_SteamClient015_SetLocalIPBinding(winISteamClient_SteamClient015 *_this, uint32 unIP, uint16 usPort)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient015_SetLocalIPBinding(_this->linux_side, unIP, usPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamFriends, 16)
+winISteamFriends * __thiscall winISteamClient_SteamClient015_GetISteamFriends(winISteamClient_SteamClient015 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamFriends(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamUtils, 12)
+winISteamUtils * __thiscall winISteamClient_SteamClient015_GetISteamUtils(winISteamClient_SteamClient015 *_this, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamUtils(_this->linux_side, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamMatchmaking, 16)
+winISteamMatchmaking * __thiscall winISteamClient_SteamClient015_GetISteamMatchmaking(winISteamClient_SteamClient015 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamMatchmaking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamMatchmakingServers, 16)
+winISteamMatchmakingServers * __thiscall winISteamClient_SteamClient015_GetISteamMatchmakingServers(winISteamClient_SteamClient015 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamMatchmakingServers(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamGenericInterface, 16)
+void * __thiscall winISteamClient_SteamClient015_GetISteamGenericInterface(winISteamClient_SteamClient015 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamGenericInterface(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamUserStats, 16)
+winISteamUserStats * __thiscall winISteamClient_SteamClient015_GetISteamUserStats(winISteamClient_SteamClient015 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamUserStats(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamGameServerStats, 16)
+winISteamGameServerStats * __thiscall winISteamClient_SteamClient015_GetISteamGameServerStats(winISteamClient_SteamClient015 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamGameServerStats(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamApps, 16)
+winISteamApps * __thiscall winISteamClient_SteamClient015_GetISteamApps(winISteamClient_SteamClient015 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamApps(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamNetworking, 16)
+winISteamNetworking * __thiscall winISteamClient_SteamClient015_GetISteamNetworking(winISteamClient_SteamClient015 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamNetworking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamRemoteStorage, 16)
+winISteamRemoteStorage * __thiscall winISteamClient_SteamClient015_GetISteamRemoteStorage(winISteamClient_SteamClient015 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamRemoteStorage(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamScreenshots, 16)
+winISteamScreenshots * __thiscall winISteamClient_SteamClient015_GetISteamScreenshots(winISteamClient_SteamClient015 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamScreenshots(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_RunFrame, 4)
+void __thiscall winISteamClient_SteamClient015_RunFrame(winISteamClient_SteamClient015 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient015_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetIPCCallCount, 4)
+uint32 __thiscall winISteamClient_SteamClient015_GetIPCCallCount(winISteamClient_SteamClient015 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient015_GetIPCCallCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_SetWarningMessageHook, 8)
+void __thiscall winISteamClient_SteamClient015_SetWarningMessageHook(winISteamClient_SteamClient015 *_this, SteamAPIWarningMessageHook_t pFunction)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient015_SetWarningMessageHook(_this->linux_side, pFunction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_BShutdownIfAllPipesClosed, 4)
+bool __thiscall winISteamClient_SteamClient015_BShutdownIfAllPipesClosed(winISteamClient_SteamClient015 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient015_BShutdownIfAllPipesClosed(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamHTTP, 16)
+winISteamHTTP * __thiscall winISteamClient_SteamClient015_GetISteamHTTP(winISteamClient_SteamClient015 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamHTTP(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamUnifiedMessages, 16)
+winISteamUnifiedMessages * __thiscall winISteamClient_SteamClient015_GetISteamUnifiedMessages(winISteamClient_SteamClient015 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamUnifiedMessages(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamController, 16)
+winISteamController * __thiscall winISteamClient_SteamClient015_GetISteamController(winISteamClient_SteamClient015 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamController(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamUGC, 16)
+winISteamUGC * __thiscall winISteamClient_SteamClient015_GetISteamUGC(winISteamClient_SteamClient015 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamUGC(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamAppList, 16)
+winISteamAppList * __thiscall winISteamClient_SteamClient015_GetISteamAppList(winISteamClient_SteamClient015 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamAppList(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamMusic, 16)
+winISteamMusic * __thiscall winISteamClient_SteamClient015_GetISteamMusic(winISteamClient_SteamClient015 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamMusic(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamMusicRemote, 16)
+winISteamMusicRemote * __thiscall winISteamClient_SteamClient015_GetISteamMusicRemote(winISteamClient_SteamClient015 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient015_GetISteamMusicRemote(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+extern vtable_ptr winISteamClient_SteamClient015_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamClient_SteamClient015,
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_CreateSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_BReleaseSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_ConnectToGlobalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_CreateLocalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_ReleaseUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamGameServer)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_SetLocalIPBinding)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamFriends)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamUtils)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamMatchmaking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamMatchmakingServers)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamGenericInterface)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamUserStats)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamGameServerStats)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamApps)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamNetworking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamRemoteStorage)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamScreenshots)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_RunFrame)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetIPCCallCount)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_SetWarningMessageHook)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_BShutdownIfAllPipesClosed)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamHTTP)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamUnifiedMessages)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamController)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamUGC)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamAppList)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamMusic)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient015_GetISteamMusicRemote)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamClient_SteamClient015 *create_winISteamClient_SteamClient015(void *linux_side)
+{
+ winISteamClient_SteamClient015 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamClient_SteamClient015));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamClient_SteamClient015_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamClient_SteamClient014.h"
+
+typedef struct __winISteamClient_SteamClient014 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamClient_SteamClient014;
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_CreateSteamPipe, 4)
+HSteamPipe __thiscall winISteamClient_SteamClient014_CreateSteamPipe(winISteamClient_SteamClient014 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient014_CreateSteamPipe(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_BReleaseSteamPipe, 8)
+bool __thiscall winISteamClient_SteamClient014_BReleaseSteamPipe(winISteamClient_SteamClient014 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient014_BReleaseSteamPipe(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_ConnectToGlobalUser, 8)
+HSteamUser __thiscall winISteamClient_SteamClient014_ConnectToGlobalUser(winISteamClient_SteamClient014 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient014_ConnectToGlobalUser(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_CreateLocalUser, 12)
+HSteamUser __thiscall winISteamClient_SteamClient014_CreateLocalUser(winISteamClient_SteamClient014 *_this, HSteamPipe * phSteamPipe, EAccountType eAccountType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient014_CreateLocalUser(_this->linux_side, phSteamPipe, eAccountType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_ReleaseUser, 12)
+void __thiscall winISteamClient_SteamClient014_ReleaseUser(winISteamClient_SteamClient014 *_this, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient014_ReleaseUser(_this->linux_side, hSteamPipe, hUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamUser, 16)
+winISteamUser * __thiscall winISteamClient_SteamClient014_GetISteamUser(winISteamClient_SteamClient014 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamUser(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamGameServer, 16)
+winISteamGameServer * __thiscall winISteamClient_SteamClient014_GetISteamGameServer(winISteamClient_SteamClient014 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamGameServer(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_SetLocalIPBinding, 10)
+void __thiscall winISteamClient_SteamClient014_SetLocalIPBinding(winISteamClient_SteamClient014 *_this, uint32 unIP, uint16 usPort)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient014_SetLocalIPBinding(_this->linux_side, unIP, usPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamFriends, 16)
+winISteamFriends * __thiscall winISteamClient_SteamClient014_GetISteamFriends(winISteamClient_SteamClient014 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamFriends(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamUtils, 12)
+winISteamUtils * __thiscall winISteamClient_SteamClient014_GetISteamUtils(winISteamClient_SteamClient014 *_this, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamUtils(_this->linux_side, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamMatchmaking, 16)
+winISteamMatchmaking * __thiscall winISteamClient_SteamClient014_GetISteamMatchmaking(winISteamClient_SteamClient014 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamMatchmaking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamMatchmakingServers, 16)
+winISteamMatchmakingServers * __thiscall winISteamClient_SteamClient014_GetISteamMatchmakingServers(winISteamClient_SteamClient014 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamMatchmakingServers(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamGenericInterface, 16)
+void * __thiscall winISteamClient_SteamClient014_GetISteamGenericInterface(winISteamClient_SteamClient014 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamGenericInterface(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamUserStats, 16)
+winISteamUserStats * __thiscall winISteamClient_SteamClient014_GetISteamUserStats(winISteamClient_SteamClient014 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamUserStats(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamGameServerStats, 16)
+winISteamGameServerStats * __thiscall winISteamClient_SteamClient014_GetISteamGameServerStats(winISteamClient_SteamClient014 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamGameServerStats(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamApps, 16)
+winISteamApps * __thiscall winISteamClient_SteamClient014_GetISteamApps(winISteamClient_SteamClient014 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamApps(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamNetworking, 16)
+winISteamNetworking * __thiscall winISteamClient_SteamClient014_GetISteamNetworking(winISteamClient_SteamClient014 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamNetworking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamRemoteStorage, 16)
+winISteamRemoteStorage * __thiscall winISteamClient_SteamClient014_GetISteamRemoteStorage(winISteamClient_SteamClient014 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamRemoteStorage(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamScreenshots, 16)
+winISteamScreenshots * __thiscall winISteamClient_SteamClient014_GetISteamScreenshots(winISteamClient_SteamClient014 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamScreenshots(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_RunFrame, 4)
+void __thiscall winISteamClient_SteamClient014_RunFrame(winISteamClient_SteamClient014 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient014_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetIPCCallCount, 4)
+uint32 __thiscall winISteamClient_SteamClient014_GetIPCCallCount(winISteamClient_SteamClient014 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient014_GetIPCCallCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_SetWarningMessageHook, 8)
+void __thiscall winISteamClient_SteamClient014_SetWarningMessageHook(winISteamClient_SteamClient014 *_this, SteamAPIWarningMessageHook_t pFunction)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient014_SetWarningMessageHook(_this->linux_side, pFunction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_BShutdownIfAllPipesClosed, 4)
+bool __thiscall winISteamClient_SteamClient014_BShutdownIfAllPipesClosed(winISteamClient_SteamClient014 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient014_BShutdownIfAllPipesClosed(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamHTTP, 16)
+winISteamHTTP * __thiscall winISteamClient_SteamClient014_GetISteamHTTP(winISteamClient_SteamClient014 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamHTTP(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamUnifiedMessages, 16)
+winISteamUnifiedMessages * __thiscall winISteamClient_SteamClient014_GetISteamUnifiedMessages(winISteamClient_SteamClient014 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamUnifiedMessages(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamController, 16)
+winISteamController * __thiscall winISteamClient_SteamClient014_GetISteamController(winISteamClient_SteamClient014 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamController(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamUGC, 16)
+winISteamUGC * __thiscall winISteamClient_SteamClient014_GetISteamUGC(winISteamClient_SteamClient014 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamUGC(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamAppList, 16)
+winISteamAppList * __thiscall winISteamClient_SteamClient014_GetISteamAppList(winISteamClient_SteamClient014 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamAppList(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamMusic, 16)
+winISteamMusic * __thiscall winISteamClient_SteamClient014_GetISteamMusic(winISteamClient_SteamClient014 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient014_GetISteamMusic(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+extern vtable_ptr winISteamClient_SteamClient014_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamClient_SteamClient014,
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_CreateSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_BReleaseSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_ConnectToGlobalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_CreateLocalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_ReleaseUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamGameServer)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_SetLocalIPBinding)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamFriends)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamUtils)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamMatchmaking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamMatchmakingServers)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamGenericInterface)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamUserStats)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamGameServerStats)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamApps)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamNetworking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamRemoteStorage)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamScreenshots)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_RunFrame)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetIPCCallCount)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_SetWarningMessageHook)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_BShutdownIfAllPipesClosed)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamHTTP)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamUnifiedMessages)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamController)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamUGC)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamAppList)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient014_GetISteamMusic)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamClient_SteamClient014 *create_winISteamClient_SteamClient014(void *linux_side)
+{
+ winISteamClient_SteamClient014 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamClient_SteamClient014));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamClient_SteamClient014_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamClient_SteamClient012.h"
+
+typedef struct __winISteamClient_SteamClient012 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamClient_SteamClient012;
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_CreateSteamPipe, 4)
+HSteamPipe __thiscall winISteamClient_SteamClient012_CreateSteamPipe(winISteamClient_SteamClient012 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient012_CreateSteamPipe(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_BReleaseSteamPipe, 8)
+bool __thiscall winISteamClient_SteamClient012_BReleaseSteamPipe(winISteamClient_SteamClient012 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient012_BReleaseSteamPipe(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_ConnectToGlobalUser, 8)
+HSteamUser __thiscall winISteamClient_SteamClient012_ConnectToGlobalUser(winISteamClient_SteamClient012 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient012_ConnectToGlobalUser(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_CreateLocalUser, 12)
+HSteamUser __thiscall winISteamClient_SteamClient012_CreateLocalUser(winISteamClient_SteamClient012 *_this, HSteamPipe * phSteamPipe, EAccountType eAccountType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient012_CreateLocalUser(_this->linux_side, phSteamPipe, eAccountType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_ReleaseUser, 12)
+void __thiscall winISteamClient_SteamClient012_ReleaseUser(winISteamClient_SteamClient012 *_this, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient012_ReleaseUser(_this->linux_side, hSteamPipe, hUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamUser, 16)
+winISteamUser * __thiscall winISteamClient_SteamClient012_GetISteamUser(winISteamClient_SteamClient012 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient012_GetISteamUser(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamGameServer, 16)
+winISteamGameServer * __thiscall winISteamClient_SteamClient012_GetISteamGameServer(winISteamClient_SteamClient012 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient012_GetISteamGameServer(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_SetLocalIPBinding, 10)
+void __thiscall winISteamClient_SteamClient012_SetLocalIPBinding(winISteamClient_SteamClient012 *_this, uint32 unIP, uint16 usPort)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient012_SetLocalIPBinding(_this->linux_side, unIP, usPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamFriends, 16)
+winISteamFriends * __thiscall winISteamClient_SteamClient012_GetISteamFriends(winISteamClient_SteamClient012 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient012_GetISteamFriends(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamUtils, 12)
+winISteamUtils * __thiscall winISteamClient_SteamClient012_GetISteamUtils(winISteamClient_SteamClient012 *_this, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient012_GetISteamUtils(_this->linux_side, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamMatchmaking, 16)
+winISteamMatchmaking * __thiscall winISteamClient_SteamClient012_GetISteamMatchmaking(winISteamClient_SteamClient012 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient012_GetISteamMatchmaking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamMatchmakingServers, 16)
+winISteamMatchmakingServers * __thiscall winISteamClient_SteamClient012_GetISteamMatchmakingServers(winISteamClient_SteamClient012 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient012_GetISteamMatchmakingServers(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamGenericInterface, 16)
+void * __thiscall winISteamClient_SteamClient012_GetISteamGenericInterface(winISteamClient_SteamClient012 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient012_GetISteamGenericInterface(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamUserStats, 16)
+winISteamUserStats * __thiscall winISteamClient_SteamClient012_GetISteamUserStats(winISteamClient_SteamClient012 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient012_GetISteamUserStats(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamGameServerStats, 16)
+winISteamGameServerStats * __thiscall winISteamClient_SteamClient012_GetISteamGameServerStats(winISteamClient_SteamClient012 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient012_GetISteamGameServerStats(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamApps, 16)
+winISteamApps * __thiscall winISteamClient_SteamClient012_GetISteamApps(winISteamClient_SteamClient012 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient012_GetISteamApps(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamNetworking, 16)
+winISteamNetworking * __thiscall winISteamClient_SteamClient012_GetISteamNetworking(winISteamClient_SteamClient012 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient012_GetISteamNetworking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamRemoteStorage, 16)
+winISteamRemoteStorage * __thiscall winISteamClient_SteamClient012_GetISteamRemoteStorage(winISteamClient_SteamClient012 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient012_GetISteamRemoteStorage(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamScreenshots, 16)
+winISteamScreenshots * __thiscall winISteamClient_SteamClient012_GetISteamScreenshots(winISteamClient_SteamClient012 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient012_GetISteamScreenshots(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_RunFrame, 4)
+void __thiscall winISteamClient_SteamClient012_RunFrame(winISteamClient_SteamClient012 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient012_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetIPCCallCount, 4)
+uint32 __thiscall winISteamClient_SteamClient012_GetIPCCallCount(winISteamClient_SteamClient012 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient012_GetIPCCallCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_SetWarningMessageHook, 8)
+void __thiscall winISteamClient_SteamClient012_SetWarningMessageHook(winISteamClient_SteamClient012 *_this, SteamAPIWarningMessageHook_t pFunction)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient012_SetWarningMessageHook(_this->linux_side, pFunction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_BShutdownIfAllPipesClosed, 4)
+bool __thiscall winISteamClient_SteamClient012_BShutdownIfAllPipesClosed(winISteamClient_SteamClient012 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient012_BShutdownIfAllPipesClosed(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamHTTP, 16)
+winISteamHTTP * __thiscall winISteamClient_SteamClient012_GetISteamHTTP(winISteamClient_SteamClient012 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient012_GetISteamHTTP(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamUnifiedMessages, 16)
+winISteamUnifiedMessages * __thiscall winISteamClient_SteamClient012_GetISteamUnifiedMessages(winISteamClient_SteamClient012 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient012_GetISteamUnifiedMessages(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamController, 16)
+winISteamController * __thiscall winISteamClient_SteamClient012_GetISteamController(winISteamClient_SteamClient012 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient012_GetISteamController(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamUGC, 16)
+winISteamUGC * __thiscall winISteamClient_SteamClient012_GetISteamUGC(winISteamClient_SteamClient012 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient012_GetISteamUGC(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+extern vtable_ptr winISteamClient_SteamClient012_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamClient_SteamClient012,
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_CreateSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_BReleaseSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_ConnectToGlobalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_CreateLocalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_ReleaseUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_GetISteamUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_GetISteamGameServer)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_SetLocalIPBinding)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_GetISteamFriends)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_GetISteamUtils)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_GetISteamMatchmaking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_GetISteamMatchmakingServers)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_GetISteamGenericInterface)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_GetISteamUserStats)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_GetISteamGameServerStats)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_GetISteamApps)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_GetISteamNetworking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_GetISteamRemoteStorage)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_GetISteamScreenshots)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_RunFrame)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_GetIPCCallCount)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_SetWarningMessageHook)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_BShutdownIfAllPipesClosed)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_GetISteamHTTP)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_GetISteamUnifiedMessages)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_GetISteamController)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient012_GetISteamUGC)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamClient_SteamClient012 *create_winISteamClient_SteamClient012(void *linux_side)
+{
+ winISteamClient_SteamClient012 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamClient_SteamClient012));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamClient_SteamClient012_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamClient_SteamClient011.h"
+
+typedef struct __winISteamClient_SteamClient011 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamClient_SteamClient011;
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_CreateSteamPipe, 4)
+HSteamPipe __thiscall winISteamClient_SteamClient011_CreateSteamPipe(winISteamClient_SteamClient011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient011_CreateSteamPipe(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_BReleaseSteamPipe, 8)
+bool __thiscall winISteamClient_SteamClient011_BReleaseSteamPipe(winISteamClient_SteamClient011 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient011_BReleaseSteamPipe(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_ConnectToGlobalUser, 8)
+HSteamUser __thiscall winISteamClient_SteamClient011_ConnectToGlobalUser(winISteamClient_SteamClient011 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient011_ConnectToGlobalUser(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_CreateLocalUser, 12)
+HSteamUser __thiscall winISteamClient_SteamClient011_CreateLocalUser(winISteamClient_SteamClient011 *_this, HSteamPipe * phSteamPipe, EAccountType eAccountType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient011_CreateLocalUser(_this->linux_side, phSteamPipe, eAccountType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_ReleaseUser, 12)
+void __thiscall winISteamClient_SteamClient011_ReleaseUser(winISteamClient_SteamClient011 *_this, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient011_ReleaseUser(_this->linux_side, hSteamPipe, hUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_GetISteamUser, 16)
+winISteamUser * __thiscall winISteamClient_SteamClient011_GetISteamUser(winISteamClient_SteamClient011 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient011_GetISteamUser(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_GetISteamGameServer, 16)
+winISteamGameServer * __thiscall winISteamClient_SteamClient011_GetISteamGameServer(winISteamClient_SteamClient011 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient011_GetISteamGameServer(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_SetLocalIPBinding, 10)
+void __thiscall winISteamClient_SteamClient011_SetLocalIPBinding(winISteamClient_SteamClient011 *_this, uint32 unIP, uint16 usPort)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient011_SetLocalIPBinding(_this->linux_side, unIP, usPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_GetISteamFriends, 16)
+winISteamFriends * __thiscall winISteamClient_SteamClient011_GetISteamFriends(winISteamClient_SteamClient011 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient011_GetISteamFriends(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_GetISteamUtils, 12)
+winISteamUtils * __thiscall winISteamClient_SteamClient011_GetISteamUtils(winISteamClient_SteamClient011 *_this, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient011_GetISteamUtils(_this->linux_side, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_GetISteamMatchmaking, 16)
+winISteamMatchmaking * __thiscall winISteamClient_SteamClient011_GetISteamMatchmaking(winISteamClient_SteamClient011 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient011_GetISteamMatchmaking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_GetISteamMasterServerUpdater, 16)
+winISteamMasterServerUpdater * __thiscall winISteamClient_SteamClient011_GetISteamMasterServerUpdater(winISteamClient_SteamClient011 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient011_GetISteamMasterServerUpdater(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_GetISteamMatchmakingServers, 16)
+winISteamMatchmakingServers * __thiscall winISteamClient_SteamClient011_GetISteamMatchmakingServers(winISteamClient_SteamClient011 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient011_GetISteamMatchmakingServers(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_GetISteamGenericInterface, 16)
+void * __thiscall winISteamClient_SteamClient011_GetISteamGenericInterface(winISteamClient_SteamClient011 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient011_GetISteamGenericInterface(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_GetISteamUserStats, 16)
+winISteamUserStats * __thiscall winISteamClient_SteamClient011_GetISteamUserStats(winISteamClient_SteamClient011 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient011_GetISteamUserStats(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_GetISteamGameServerStats, 16)
+winISteamGameServerStats * __thiscall winISteamClient_SteamClient011_GetISteamGameServerStats(winISteamClient_SteamClient011 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient011_GetISteamGameServerStats(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_GetISteamApps, 16)
+winISteamApps * __thiscall winISteamClient_SteamClient011_GetISteamApps(winISteamClient_SteamClient011 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient011_GetISteamApps(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_GetISteamNetworking, 16)
+winISteamNetworking * __thiscall winISteamClient_SteamClient011_GetISteamNetworking(winISteamClient_SteamClient011 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient011_GetISteamNetworking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_GetISteamRemoteStorage, 16)
+winISteamRemoteStorage * __thiscall winISteamClient_SteamClient011_GetISteamRemoteStorage(winISteamClient_SteamClient011 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient011_GetISteamRemoteStorage(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_GetISteamScreenshots, 16)
+winISteamScreenshots * __thiscall winISteamClient_SteamClient011_GetISteamScreenshots(winISteamClient_SteamClient011 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient011_GetISteamScreenshots(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_RunFrame, 4)
+void __thiscall winISteamClient_SteamClient011_RunFrame(winISteamClient_SteamClient011 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient011_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_GetIPCCallCount, 4)
+uint32 __thiscall winISteamClient_SteamClient011_GetIPCCallCount(winISteamClient_SteamClient011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient011_GetIPCCallCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_SetWarningMessageHook, 8)
+void __thiscall winISteamClient_SteamClient011_SetWarningMessageHook(winISteamClient_SteamClient011 *_this, SteamAPIWarningMessageHook_t pFunction)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient011_SetWarningMessageHook(_this->linux_side, pFunction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_BShutdownIfAllPipesClosed, 4)
+bool __thiscall winISteamClient_SteamClient011_BShutdownIfAllPipesClosed(winISteamClient_SteamClient011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient011_BShutdownIfAllPipesClosed(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_GetISteamHTTP, 16)
+winISteamHTTP * __thiscall winISteamClient_SteamClient011_GetISteamHTTP(winISteamClient_SteamClient011 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient011_GetISteamHTTP(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+extern vtable_ptr winISteamClient_SteamClient011_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamClient_SteamClient011,
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_CreateSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_BReleaseSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_ConnectToGlobalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_CreateLocalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_ReleaseUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_GetISteamUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_GetISteamGameServer)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_SetLocalIPBinding)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_GetISteamFriends)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_GetISteamUtils)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_GetISteamMatchmaking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_GetISteamMasterServerUpdater)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_GetISteamMatchmakingServers)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_GetISteamGenericInterface)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_GetISteamUserStats)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_GetISteamGameServerStats)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_GetISteamApps)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_GetISteamNetworking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_GetISteamRemoteStorage)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_GetISteamScreenshots)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_RunFrame)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_GetIPCCallCount)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_SetWarningMessageHook)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_BShutdownIfAllPipesClosed)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient011_GetISteamHTTP)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamClient_SteamClient011 *create_winISteamClient_SteamClient011(void *linux_side)
+{
+ winISteamClient_SteamClient011 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamClient_SteamClient011));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamClient_SteamClient011_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamClient_SteamClient010.h"
+
+typedef struct __winISteamClient_SteamClient010 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamClient_SteamClient010;
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_CreateSteamPipe, 4)
+HSteamPipe __thiscall winISteamClient_SteamClient010_CreateSteamPipe(winISteamClient_SteamClient010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient010_CreateSteamPipe(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_BReleaseSteamPipe, 8)
+bool __thiscall winISteamClient_SteamClient010_BReleaseSteamPipe(winISteamClient_SteamClient010 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient010_BReleaseSteamPipe(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_ConnectToGlobalUser, 8)
+HSteamUser __thiscall winISteamClient_SteamClient010_ConnectToGlobalUser(winISteamClient_SteamClient010 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient010_ConnectToGlobalUser(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_CreateLocalUser, 12)
+HSteamUser __thiscall winISteamClient_SteamClient010_CreateLocalUser(winISteamClient_SteamClient010 *_this, HSteamPipe * phSteamPipe, EAccountType eAccountType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient010_CreateLocalUser(_this->linux_side, phSteamPipe, eAccountType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_ReleaseUser, 12)
+void __thiscall winISteamClient_SteamClient010_ReleaseUser(winISteamClient_SteamClient010 *_this, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient010_ReleaseUser(_this->linux_side, hSteamPipe, hUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_GetISteamUser, 16)
+winISteamUser * __thiscall winISteamClient_SteamClient010_GetISteamUser(winISteamClient_SteamClient010 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient010_GetISteamUser(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_GetISteamGameServer, 16)
+winISteamGameServer * __thiscall winISteamClient_SteamClient010_GetISteamGameServer(winISteamClient_SteamClient010 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient010_GetISteamGameServer(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_SetLocalIPBinding, 10)
+void __thiscall winISteamClient_SteamClient010_SetLocalIPBinding(winISteamClient_SteamClient010 *_this, uint32 unIP, uint16 usPort)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient010_SetLocalIPBinding(_this->linux_side, unIP, usPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_GetISteamFriends, 16)
+winISteamFriends * __thiscall winISteamClient_SteamClient010_GetISteamFriends(winISteamClient_SteamClient010 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient010_GetISteamFriends(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_GetISteamUtils, 12)
+winISteamUtils * __thiscall winISteamClient_SteamClient010_GetISteamUtils(winISteamClient_SteamClient010 *_this, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient010_GetISteamUtils(_this->linux_side, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_GetISteamMatchmaking, 16)
+winISteamMatchmaking * __thiscall winISteamClient_SteamClient010_GetISteamMatchmaking(winISteamClient_SteamClient010 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient010_GetISteamMatchmaking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_GetISteamMasterServerUpdater, 16)
+winISteamMasterServerUpdater * __thiscall winISteamClient_SteamClient010_GetISteamMasterServerUpdater(winISteamClient_SteamClient010 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient010_GetISteamMasterServerUpdater(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_GetISteamMatchmakingServers, 16)
+winISteamMatchmakingServers * __thiscall winISteamClient_SteamClient010_GetISteamMatchmakingServers(winISteamClient_SteamClient010 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient010_GetISteamMatchmakingServers(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_GetISteamGenericInterface, 16)
+void * __thiscall winISteamClient_SteamClient010_GetISteamGenericInterface(winISteamClient_SteamClient010 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient010_GetISteamGenericInterface(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_GetISteamUserStats, 16)
+winISteamUserStats * __thiscall winISteamClient_SteamClient010_GetISteamUserStats(winISteamClient_SteamClient010 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient010_GetISteamUserStats(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_GetISteamGameServerStats, 16)
+winISteamGameServerStats * __thiscall winISteamClient_SteamClient010_GetISteamGameServerStats(winISteamClient_SteamClient010 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient010_GetISteamGameServerStats(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_GetISteamApps, 16)
+winISteamApps * __thiscall winISteamClient_SteamClient010_GetISteamApps(winISteamClient_SteamClient010 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient010_GetISteamApps(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_GetISteamNetworking, 16)
+winISteamNetworking * __thiscall winISteamClient_SteamClient010_GetISteamNetworking(winISteamClient_SteamClient010 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient010_GetISteamNetworking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_GetISteamRemoteStorage, 16)
+winISteamRemoteStorage * __thiscall winISteamClient_SteamClient010_GetISteamRemoteStorage(winISteamClient_SteamClient010 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient010_GetISteamRemoteStorage(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_RunFrame, 4)
+void __thiscall winISteamClient_SteamClient010_RunFrame(winISteamClient_SteamClient010 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient010_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_GetIPCCallCount, 4)
+uint32 __thiscall winISteamClient_SteamClient010_GetIPCCallCount(winISteamClient_SteamClient010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient010_GetIPCCallCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_SetWarningMessageHook, 8)
+void __thiscall winISteamClient_SteamClient010_SetWarningMessageHook(winISteamClient_SteamClient010 *_this, SteamAPIWarningMessageHook_t pFunction)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient010_SetWarningMessageHook(_this->linux_side, pFunction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_BShutdownIfAllPipesClosed, 4)
+bool __thiscall winISteamClient_SteamClient010_BShutdownIfAllPipesClosed(winISteamClient_SteamClient010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient010_BShutdownIfAllPipesClosed(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_GetISteamHTTP, 16)
+winISteamHTTP * __thiscall winISteamClient_SteamClient010_GetISteamHTTP(winISteamClient_SteamClient010 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient010_GetISteamHTTP(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+extern vtable_ptr winISteamClient_SteamClient010_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamClient_SteamClient010,
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_CreateSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_BReleaseSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_ConnectToGlobalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_CreateLocalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_ReleaseUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_GetISteamUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_GetISteamGameServer)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_SetLocalIPBinding)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_GetISteamFriends)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_GetISteamUtils)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_GetISteamMatchmaking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_GetISteamMasterServerUpdater)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_GetISteamMatchmakingServers)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_GetISteamGenericInterface)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_GetISteamUserStats)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_GetISteamGameServerStats)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_GetISteamApps)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_GetISteamNetworking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_GetISteamRemoteStorage)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_RunFrame)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_GetIPCCallCount)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_SetWarningMessageHook)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_BShutdownIfAllPipesClosed)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient010_GetISteamHTTP)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamClient_SteamClient010 *create_winISteamClient_SteamClient010(void *linux_side)
+{
+ winISteamClient_SteamClient010 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamClient_SteamClient010));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamClient_SteamClient010_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamClient_SteamClient009.h"
+
+typedef struct __winISteamClient_SteamClient009 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamClient_SteamClient009;
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_CreateSteamPipe, 4)
+HSteamPipe __thiscall winISteamClient_SteamClient009_CreateSteamPipe(winISteamClient_SteamClient009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient009_CreateSteamPipe(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_BReleaseSteamPipe, 8)
+bool __thiscall winISteamClient_SteamClient009_BReleaseSteamPipe(winISteamClient_SteamClient009 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient009_BReleaseSteamPipe(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_ConnectToGlobalUser, 8)
+HSteamUser __thiscall winISteamClient_SteamClient009_ConnectToGlobalUser(winISteamClient_SteamClient009 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient009_ConnectToGlobalUser(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_CreateLocalUser, 12)
+HSteamUser __thiscall winISteamClient_SteamClient009_CreateLocalUser(winISteamClient_SteamClient009 *_this, HSteamPipe * phSteamPipe, EAccountType eAccountType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient009_CreateLocalUser(_this->linux_side, phSteamPipe, eAccountType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_ReleaseUser, 12)
+void __thiscall winISteamClient_SteamClient009_ReleaseUser(winISteamClient_SteamClient009 *_this, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient009_ReleaseUser(_this->linux_side, hSteamPipe, hUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_GetISteamUser, 16)
+winISteamUser * __thiscall winISteamClient_SteamClient009_GetISteamUser(winISteamClient_SteamClient009 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient009_GetISteamUser(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_GetISteamGameServer, 16)
+winISteamGameServer * __thiscall winISteamClient_SteamClient009_GetISteamGameServer(winISteamClient_SteamClient009 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient009_GetISteamGameServer(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_SetLocalIPBinding, 10)
+void __thiscall winISteamClient_SteamClient009_SetLocalIPBinding(winISteamClient_SteamClient009 *_this, uint32 unIP, uint16 usPort)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient009_SetLocalIPBinding(_this->linux_side, unIP, usPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_GetISteamFriends, 16)
+winISteamFriends * __thiscall winISteamClient_SteamClient009_GetISteamFriends(winISteamClient_SteamClient009 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient009_GetISteamFriends(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_GetISteamUtils, 12)
+winISteamUtils * __thiscall winISteamClient_SteamClient009_GetISteamUtils(winISteamClient_SteamClient009 *_this, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient009_GetISteamUtils(_this->linux_side, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_GetISteamMatchmaking, 16)
+winISteamMatchmaking * __thiscall winISteamClient_SteamClient009_GetISteamMatchmaking(winISteamClient_SteamClient009 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient009_GetISteamMatchmaking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_GetISteamMasterServerUpdater, 16)
+winISteamMasterServerUpdater * __thiscall winISteamClient_SteamClient009_GetISteamMasterServerUpdater(winISteamClient_SteamClient009 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient009_GetISteamMasterServerUpdater(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_GetISteamMatchmakingServers, 16)
+winISteamMatchmakingServers * __thiscall winISteamClient_SteamClient009_GetISteamMatchmakingServers(winISteamClient_SteamClient009 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient009_GetISteamMatchmakingServers(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_GetISteamGenericInterface, 16)
+void * __thiscall winISteamClient_SteamClient009_GetISteamGenericInterface(winISteamClient_SteamClient009 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient009_GetISteamGenericInterface(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_GetISteamUserStats, 16)
+winISteamUserStats * __thiscall winISteamClient_SteamClient009_GetISteamUserStats(winISteamClient_SteamClient009 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient009_GetISteamUserStats(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_GetISteamGameServerStats, 16)
+winISteamGameServerStats * __thiscall winISteamClient_SteamClient009_GetISteamGameServerStats(winISteamClient_SteamClient009 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient009_GetISteamGameServerStats(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_GetISteamApps, 16)
+winISteamApps * __thiscall winISteamClient_SteamClient009_GetISteamApps(winISteamClient_SteamClient009 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient009_GetISteamApps(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_GetISteamNetworking, 16)
+winISteamNetworking * __thiscall winISteamClient_SteamClient009_GetISteamNetworking(winISteamClient_SteamClient009 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient009_GetISteamNetworking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_GetISteamRemoteStorage, 16)
+winISteamRemoteStorage * __thiscall winISteamClient_SteamClient009_GetISteamRemoteStorage(winISteamClient_SteamClient009 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient009_GetISteamRemoteStorage(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_RunFrame, 4)
+void __thiscall winISteamClient_SteamClient009_RunFrame(winISteamClient_SteamClient009 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient009_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_GetIPCCallCount, 4)
+uint32 __thiscall winISteamClient_SteamClient009_GetIPCCallCount(winISteamClient_SteamClient009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient009_GetIPCCallCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_SetWarningMessageHook, 8)
+void __thiscall winISteamClient_SteamClient009_SetWarningMessageHook(winISteamClient_SteamClient009 *_this, SteamAPIWarningMessageHook_t pFunction)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient009_SetWarningMessageHook(_this->linux_side, pFunction);
+}
+
+extern vtable_ptr winISteamClient_SteamClient009_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamClient_SteamClient009,
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_CreateSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_BReleaseSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_ConnectToGlobalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_CreateLocalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_ReleaseUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_GetISteamUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_GetISteamGameServer)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_SetLocalIPBinding)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_GetISteamFriends)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_GetISteamUtils)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_GetISteamMatchmaking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_GetISteamMasterServerUpdater)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_GetISteamMatchmakingServers)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_GetISteamGenericInterface)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_GetISteamUserStats)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_GetISteamGameServerStats)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_GetISteamApps)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_GetISteamNetworking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_GetISteamRemoteStorage)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_RunFrame)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_GetIPCCallCount)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient009_SetWarningMessageHook)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamClient_SteamClient009 *create_winISteamClient_SteamClient009(void *linux_side)
+{
+ winISteamClient_SteamClient009 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamClient_SteamClient009));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamClient_SteamClient009_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamClient_SteamClient008.h"
+
+typedef struct __winISteamClient_SteamClient008 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamClient_SteamClient008;
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_CreateSteamPipe, 4)
+HSteamPipe __thiscall winISteamClient_SteamClient008_CreateSteamPipe(winISteamClient_SteamClient008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient008_CreateSteamPipe(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_BReleaseSteamPipe, 8)
+bool __thiscall winISteamClient_SteamClient008_BReleaseSteamPipe(winISteamClient_SteamClient008 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient008_BReleaseSteamPipe(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_ConnectToGlobalUser, 8)
+HSteamUser __thiscall winISteamClient_SteamClient008_ConnectToGlobalUser(winISteamClient_SteamClient008 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient008_ConnectToGlobalUser(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_CreateLocalUser, 12)
+HSteamUser __thiscall winISteamClient_SteamClient008_CreateLocalUser(winISteamClient_SteamClient008 *_this, HSteamPipe * phSteamPipe, EAccountType eAccountType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient008_CreateLocalUser(_this->linux_side, phSteamPipe, eAccountType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_ReleaseUser, 12)
+void __thiscall winISteamClient_SteamClient008_ReleaseUser(winISteamClient_SteamClient008 *_this, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient008_ReleaseUser(_this->linux_side, hSteamPipe, hUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_GetISteamUser, 16)
+winISteamUser * __thiscall winISteamClient_SteamClient008_GetISteamUser(winISteamClient_SteamClient008 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient008_GetISteamUser(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_GetISteamGameServer, 16)
+winISteamGameServer * __thiscall winISteamClient_SteamClient008_GetISteamGameServer(winISteamClient_SteamClient008 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient008_GetISteamGameServer(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_SetLocalIPBinding, 10)
+void __thiscall winISteamClient_SteamClient008_SetLocalIPBinding(winISteamClient_SteamClient008 *_this, uint32 unIP, uint16 usPort)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient008_SetLocalIPBinding(_this->linux_side, unIP, usPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_GetISteamFriends, 16)
+winISteamFriends * __thiscall winISteamClient_SteamClient008_GetISteamFriends(winISteamClient_SteamClient008 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient008_GetISteamFriends(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_GetISteamUtils, 12)
+winISteamUtils * __thiscall winISteamClient_SteamClient008_GetISteamUtils(winISteamClient_SteamClient008 *_this, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient008_GetISteamUtils(_this->linux_side, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_GetISteamMatchmaking, 16)
+winISteamMatchmaking * __thiscall winISteamClient_SteamClient008_GetISteamMatchmaking(winISteamClient_SteamClient008 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient008_GetISteamMatchmaking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_GetISteamMasterServerUpdater, 16)
+winISteamMasterServerUpdater * __thiscall winISteamClient_SteamClient008_GetISteamMasterServerUpdater(winISteamClient_SteamClient008 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient008_GetISteamMasterServerUpdater(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_GetISteamMatchmakingServers, 16)
+winISteamMatchmakingServers * __thiscall winISteamClient_SteamClient008_GetISteamMatchmakingServers(winISteamClient_SteamClient008 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient008_GetISteamMatchmakingServers(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_GetISteamGenericInterface, 16)
+void * __thiscall winISteamClient_SteamClient008_GetISteamGenericInterface(winISteamClient_SteamClient008 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient008_GetISteamGenericInterface(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_GetISteamUserStats, 16)
+winISteamUserStats * __thiscall winISteamClient_SteamClient008_GetISteamUserStats(winISteamClient_SteamClient008 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient008_GetISteamUserStats(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_GetISteamApps, 16)
+winISteamApps * __thiscall winISteamClient_SteamClient008_GetISteamApps(winISteamClient_SteamClient008 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient008_GetISteamApps(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_GetISteamNetworking, 16)
+winISteamNetworking * __thiscall winISteamClient_SteamClient008_GetISteamNetworking(winISteamClient_SteamClient008 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient008_GetISteamNetworking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_GetISteamRemoteStorage, 16)
+winISteamRemoteStorage * __thiscall winISteamClient_SteamClient008_GetISteamRemoteStorage(winISteamClient_SteamClient008 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient008_GetISteamRemoteStorage(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_RunFrame, 4)
+void __thiscall winISteamClient_SteamClient008_RunFrame(winISteamClient_SteamClient008 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient008_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_GetIPCCallCount, 4)
+uint32 __thiscall winISteamClient_SteamClient008_GetIPCCallCount(winISteamClient_SteamClient008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient008_GetIPCCallCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_SetWarningMessageHook, 8)
+void __thiscall winISteamClient_SteamClient008_SetWarningMessageHook(winISteamClient_SteamClient008 *_this, SteamAPIWarningMessageHook_t pFunction)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient008_SetWarningMessageHook(_this->linux_side, pFunction);
+}
+
+extern vtable_ptr winISteamClient_SteamClient008_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamClient_SteamClient008,
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_CreateSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_BReleaseSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_ConnectToGlobalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_CreateLocalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_ReleaseUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_GetISteamUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_GetISteamGameServer)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_SetLocalIPBinding)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_GetISteamFriends)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_GetISteamUtils)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_GetISteamMatchmaking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_GetISteamMasterServerUpdater)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_GetISteamMatchmakingServers)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_GetISteamGenericInterface)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_GetISteamUserStats)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_GetISteamApps)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_GetISteamNetworking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_GetISteamRemoteStorage)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_RunFrame)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_GetIPCCallCount)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient008_SetWarningMessageHook)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamClient_SteamClient008 *create_winISteamClient_SteamClient008(void *linux_side)
+{
+ winISteamClient_SteamClient008 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamClient_SteamClient008));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamClient_SteamClient008_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamClient_SteamClient007.h"
+
+typedef struct __winISteamClient_SteamClient007 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamClient_SteamClient007;
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_CreateSteamPipe, 4)
+HSteamPipe __thiscall winISteamClient_SteamClient007_CreateSteamPipe(winISteamClient_SteamClient007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient007_CreateSteamPipe(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_BReleaseSteamPipe, 8)
+bool __thiscall winISteamClient_SteamClient007_BReleaseSteamPipe(winISteamClient_SteamClient007 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient007_BReleaseSteamPipe(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_ConnectToGlobalUser, 8)
+HSteamUser __thiscall winISteamClient_SteamClient007_ConnectToGlobalUser(winISteamClient_SteamClient007 *_this, HSteamPipe hSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient007_ConnectToGlobalUser(_this->linux_side, hSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_CreateLocalUser, 8)
+HSteamUser __thiscall winISteamClient_SteamClient007_CreateLocalUser(winISteamClient_SteamClient007 *_this, HSteamPipe * phSteamPipe)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient007_CreateLocalUser(_this->linux_side, phSteamPipe);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_ReleaseUser, 12)
+void __thiscall winISteamClient_SteamClient007_ReleaseUser(winISteamClient_SteamClient007 *_this, HSteamPipe hSteamPipe, HSteamUser hUser)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient007_ReleaseUser(_this->linux_side, hSteamPipe, hUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_GetISteamUser, 16)
+winISteamUser * __thiscall winISteamClient_SteamClient007_GetISteamUser(winISteamClient_SteamClient007 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient007_GetISteamUser(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_GetISteamGameServer, 16)
+winISteamGameServer * __thiscall winISteamClient_SteamClient007_GetISteamGameServer(winISteamClient_SteamClient007 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient007_GetISteamGameServer(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_SetLocalIPBinding, 10)
+void __thiscall winISteamClient_SteamClient007_SetLocalIPBinding(winISteamClient_SteamClient007 *_this, uint32 unIP, uint16 usPort)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient007_SetLocalIPBinding(_this->linux_side, unIP, usPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_GetISteamFriends, 16)
+winISteamFriends * __thiscall winISteamClient_SteamClient007_GetISteamFriends(winISteamClient_SteamClient007 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient007_GetISteamFriends(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_GetISteamUtils, 12)
+winISteamUtils * __thiscall winISteamClient_SteamClient007_GetISteamUtils(winISteamClient_SteamClient007 *_this, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient007_GetISteamUtils(_this->linux_side, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_GetISteamMatchmaking, 16)
+winISteamMatchmaking * __thiscall winISteamClient_SteamClient007_GetISteamMatchmaking(winISteamClient_SteamClient007 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient007_GetISteamMatchmaking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_GetISteamContentServer, 16)
+winISteamContentServer * __thiscall winISteamClient_SteamClient007_GetISteamContentServer(winISteamClient_SteamClient007 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient007_GetISteamContentServer(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_GetISteamMasterServerUpdater, 16)
+winISteamMasterServerUpdater * __thiscall winISteamClient_SteamClient007_GetISteamMasterServerUpdater(winISteamClient_SteamClient007 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient007_GetISteamMasterServerUpdater(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_GetISteamMatchmakingServers, 16)
+winISteamMatchmakingServers * __thiscall winISteamClient_SteamClient007_GetISteamMatchmakingServers(winISteamClient_SteamClient007 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient007_GetISteamMatchmakingServers(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_GetISteamGenericInterface, 16)
+void * __thiscall winISteamClient_SteamClient007_GetISteamGenericInterface(winISteamClient_SteamClient007 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient007_GetISteamGenericInterface(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_RunFrame, 4)
+void __thiscall winISteamClient_SteamClient007_RunFrame(winISteamClient_SteamClient007 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient007_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_GetIPCCallCount, 4)
+uint32 __thiscall winISteamClient_SteamClient007_GetIPCCallCount(winISteamClient_SteamClient007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamClient_SteamClient007_GetIPCCallCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_GetISteamUserStats, 16)
+winISteamUserStats * __thiscall winISteamClient_SteamClient007_GetISteamUserStats(winISteamClient_SteamClient007 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient007_GetISteamUserStats(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_GetISteamApps, 16)
+winISteamApps * __thiscall winISteamClient_SteamClient007_GetISteamApps(winISteamClient_SteamClient007 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient007_GetISteamApps(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_GetISteamNetworking, 16)
+winISteamNetworking * __thiscall winISteamClient_SteamClient007_GetISteamNetworking(winISteamClient_SteamClient007 *_this, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient007_GetISteamNetworking(_this->linux_side, hSteamUser, hSteamPipe, pchVersion));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_SetWarningMessageHook, 8)
+void __thiscall winISteamClient_SteamClient007_SetWarningMessageHook(winISteamClient_SteamClient007 *_this, SteamAPIWarningMessageHook_t pFunction)
+{
+ TRACE("%p\n", _this);
+ cppISteamClient_SteamClient007_SetWarningMessageHook(_this->linux_side, pFunction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_GetISteamRemoteStorage, 16)
+winISteamRemoteStorage * __thiscall winISteamClient_SteamClient007_GetISteamRemoteStorage(winISteamClient_SteamClient007 *_this, HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char * pchVersion)
+{
+ TRACE("%p\n", _this);
+ return create_win_interface(pchVersion,
+ cppISteamClient_SteamClient007_GetISteamRemoteStorage(_this->linux_side, hSteamuser, hSteamPipe, pchVersion));
+}
+
+extern vtable_ptr winISteamClient_SteamClient007_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamClient_SteamClient007,
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_CreateSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_BReleaseSteamPipe)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_ConnectToGlobalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_CreateLocalUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_ReleaseUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_GetISteamUser)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_GetISteamGameServer)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_SetLocalIPBinding)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_GetISteamFriends)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_GetISteamUtils)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_GetISteamMatchmaking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_GetISteamContentServer)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_GetISteamMasterServerUpdater)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_GetISteamMatchmakingServers)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_GetISteamGenericInterface)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_RunFrame)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_GetIPCCallCount)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_GetISteamUserStats)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_GetISteamApps)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_GetISteamNetworking)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_SetWarningMessageHook)
+ VTABLE_ADD_FUNC(winISteamClient_SteamClient007_GetISteamRemoteStorage)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamClient_SteamClient007 *create_winISteamClient_SteamClient007(void *linux_side)
+{
+ winISteamClient_SteamClient007 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamClient_SteamClient007));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamClient_SteamClient007_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamController.c b/lsteamclient/winISteamController.c
new file mode 100644
index 00000000..8c7ec418
--- /dev/null
+++ b/lsteamclient/winISteamController.c
@@ -0,0 +1,981 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamController_SteamController006.h"
+
+typedef struct __winISteamController_SteamController006 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamController_SteamController006;
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_Init, 4)
+bool __thiscall winISteamController_SteamController006_Init(winISteamController_SteamController006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController006_Init(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_Shutdown, 4)
+bool __thiscall winISteamController_SteamController006_Shutdown(winISteamController_SteamController006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController006_Shutdown(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_RunFrame, 4)
+void __thiscall winISteamController_SteamController006_RunFrame(winISteamController_SteamController006 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController006_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_GetConnectedControllers, 8)
+int __thiscall winISteamController_SteamController006_GetConnectedControllers(winISteamController_SteamController006 *_this, ControllerHandle_t * handlesOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController006_GetConnectedControllers(_this->linux_side, handlesOut);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_ShowBindingPanel, 12)
+bool __thiscall winISteamController_SteamController006_ShowBindingPanel(winISteamController_SteamController006 *_this, ControllerHandle_t controllerHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController006_ShowBindingPanel(_this->linux_side, controllerHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_GetActionSetHandle, 8)
+ControllerActionSetHandle_t __thiscall winISteamController_SteamController006_GetActionSetHandle(winISteamController_SteamController006 *_this, const char * pszActionSetName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController006_GetActionSetHandle(_this->linux_side, pszActionSetName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_ActivateActionSet, 20)
+void __thiscall winISteamController_SteamController006_ActivateActionSet(winISteamController_SteamController006 *_this, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController006_ActivateActionSet(_this->linux_side, controllerHandle, actionSetHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_GetCurrentActionSet, 12)
+ControllerActionSetHandle_t __thiscall winISteamController_SteamController006_GetCurrentActionSet(winISteamController_SteamController006 *_this, ControllerHandle_t controllerHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController006_GetCurrentActionSet(_this->linux_side, controllerHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_ActivateActionSetLayer, 20)
+void __thiscall winISteamController_SteamController006_ActivateActionSetLayer(winISteamController_SteamController006 *_this, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetLayerHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController006_ActivateActionSetLayer(_this->linux_side, controllerHandle, actionSetLayerHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_DeactivateActionSetLayer, 20)
+void __thiscall winISteamController_SteamController006_DeactivateActionSetLayer(winISteamController_SteamController006 *_this, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetLayerHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController006_DeactivateActionSetLayer(_this->linux_side, controllerHandle, actionSetLayerHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_DeactivateAllActionSetLayers, 12)
+void __thiscall winISteamController_SteamController006_DeactivateAllActionSetLayers(winISteamController_SteamController006 *_this, ControllerHandle_t controllerHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController006_DeactivateAllActionSetLayers(_this->linux_side, controllerHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_GetActiveActionSetLayers, 16)
+int __thiscall winISteamController_SteamController006_GetActiveActionSetLayers(winISteamController_SteamController006 *_this, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t * handlesOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController006_GetActiveActionSetLayers(_this->linux_side, controllerHandle, handlesOut);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_GetDigitalActionHandle, 8)
+ControllerDigitalActionHandle_t __thiscall winISteamController_SteamController006_GetDigitalActionHandle(winISteamController_SteamController006 *_this, const char * pszActionName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController006_GetDigitalActionHandle(_this->linux_side, pszActionName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_GetDigitalActionData, 24)
+ControllerDigitalActionData_t *__thiscall winISteamController_SteamController006_GetDigitalActionData(winISteamController_SteamController006 *_this, ControllerDigitalActionData_t *_r, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamController_SteamController006_GetDigitalActionData(_this->linux_side, controllerHandle, digitalActionHandle);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_GetDigitalActionOrigins, 32)
+int __thiscall winISteamController_SteamController006_GetDigitalActionOrigins(winISteamController_SteamController006 *_this, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin * originsOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController006_GetDigitalActionOrigins(_this->linux_side, controllerHandle, actionSetHandle, digitalActionHandle, originsOut);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_GetAnalogActionHandle, 8)
+ControllerAnalogActionHandle_t __thiscall winISteamController_SteamController006_GetAnalogActionHandle(winISteamController_SteamController006 *_this, const char * pszActionName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController006_GetAnalogActionHandle(_this->linux_side, pszActionName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_GetAnalogActionData, 24)
+ControllerAnalogActionData_t *__thiscall winISteamController_SteamController006_GetAnalogActionData(winISteamController_SteamController006 *_this, ControllerAnalogActionData_t *_r, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamController_SteamController006_GetAnalogActionData(_this->linux_side, controllerHandle, analogActionHandle);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_GetAnalogActionOrigins, 32)
+int __thiscall winISteamController_SteamController006_GetAnalogActionOrigins(winISteamController_SteamController006 *_this, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin * originsOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController006_GetAnalogActionOrigins(_this->linux_side, controllerHandle, actionSetHandle, analogActionHandle, originsOut);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_StopAnalogActionMomentum, 20)
+void __thiscall winISteamController_SteamController006_StopAnalogActionMomentum(winISteamController_SteamController006 *_this, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController006_StopAnalogActionMomentum(_this->linux_side, controllerHandle, eAction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_TriggerHapticPulse, 18)
+void __thiscall winISteamController_SteamController006_TriggerHapticPulse(winISteamController_SteamController006 *_this, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController006_TriggerHapticPulse(_this->linux_side, controllerHandle, eTargetPad, usDurationMicroSec);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_TriggerRepeatedHapticPulse, 26)
+void __thiscall winISteamController_SteamController006_TriggerRepeatedHapticPulse(winISteamController_SteamController006 *_this, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController006_TriggerRepeatedHapticPulse(_this->linux_side, controllerHandle, eTargetPad, usDurationMicroSec, usOffMicroSec, unRepeat, nFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_TriggerVibration, 16)
+void __thiscall winISteamController_SteamController006_TriggerVibration(winISteamController_SteamController006 *_this, ControllerHandle_t controllerHandle, unsigned short usLeftSpeed, unsigned short usRightSpeed)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController006_TriggerVibration(_this->linux_side, controllerHandle, usLeftSpeed, usRightSpeed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_SetLEDColor, 19)
+void __thiscall winISteamController_SteamController006_SetLEDColor(winISteamController_SteamController006 *_this, ControllerHandle_t controllerHandle, uint8 nColorR, uint8 nColorG, uint8 nColorB, unsigned int nFlags)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController006_SetLEDColor(_this->linux_side, controllerHandle, nColorR, nColorG, nColorB, nFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_GetGamepadIndexForController, 12)
+int __thiscall winISteamController_SteamController006_GetGamepadIndexForController(winISteamController_SteamController006 *_this, ControllerHandle_t ulControllerHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController006_GetGamepadIndexForController(_this->linux_side, ulControllerHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_GetControllerForGamepadIndex, 8)
+ControllerHandle_t __thiscall winISteamController_SteamController006_GetControllerForGamepadIndex(winISteamController_SteamController006 *_this, int nIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController006_GetControllerForGamepadIndex(_this->linux_side, nIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_GetMotionData, 16)
+ControllerMotionData_t *__thiscall winISteamController_SteamController006_GetMotionData(winISteamController_SteamController006 *_this, ControllerMotionData_t *_r, ControllerHandle_t controllerHandle)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamController_SteamController006_GetMotionData(_this->linux_side, controllerHandle);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_ShowDigitalActionOrigins, 32)
+bool __thiscall winISteamController_SteamController006_ShowDigitalActionOrigins(winISteamController_SteamController006 *_this, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController006_ShowDigitalActionOrigins(_this->linux_side, controllerHandle, digitalActionHandle, flScale, flXPosition, flYPosition);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_ShowAnalogActionOrigins, 32)
+bool __thiscall winISteamController_SteamController006_ShowAnalogActionOrigins(winISteamController_SteamController006 *_this, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController006_ShowAnalogActionOrigins(_this->linux_side, controllerHandle, analogActionHandle, flScale, flXPosition, flYPosition);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_GetStringForActionOrigin, 8)
+const char * __thiscall winISteamController_SteamController006_GetStringForActionOrigin(winISteamController_SteamController006 *_this, EControllerActionOrigin eOrigin)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController006_GetStringForActionOrigin(_this->linux_side, eOrigin);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_GetGlyphForActionOrigin, 8)
+const char * __thiscall winISteamController_SteamController006_GetGlyphForActionOrigin(winISteamController_SteamController006 *_this, EControllerActionOrigin eOrigin)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController006_GetGlyphForActionOrigin(_this->linux_side, eOrigin);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController006_GetInputTypeForHandle, 12)
+ESteamInputType __thiscall winISteamController_SteamController006_GetInputTypeForHandle(winISteamController_SteamController006 *_this, ControllerHandle_t controllerHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController006_GetInputTypeForHandle(_this->linux_side, controllerHandle);
+}
+
+extern vtable_ptr winISteamController_SteamController006_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamController_SteamController006,
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_Init)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_Shutdown)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_RunFrame)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_GetConnectedControllers)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_ShowBindingPanel)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_GetActionSetHandle)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_ActivateActionSet)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_GetCurrentActionSet)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_ActivateActionSetLayer)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_DeactivateActionSetLayer)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_DeactivateAllActionSetLayers)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_GetActiveActionSetLayers)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_GetDigitalActionHandle)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_GetDigitalActionData)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_GetDigitalActionOrigins)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_GetAnalogActionHandle)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_GetAnalogActionData)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_GetAnalogActionOrigins)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_StopAnalogActionMomentum)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_TriggerHapticPulse)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_TriggerRepeatedHapticPulse)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_TriggerVibration)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_SetLEDColor)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_GetGamepadIndexForController)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_GetControllerForGamepadIndex)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_GetMotionData)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_ShowDigitalActionOrigins)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_ShowAnalogActionOrigins)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_GetStringForActionOrigin)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_GetGlyphForActionOrigin)
+ VTABLE_ADD_FUNC(winISteamController_SteamController006_GetInputTypeForHandle)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamController_SteamController006 *create_winISteamController_SteamController006(void *linux_side)
+{
+ winISteamController_SteamController006 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamController_SteamController006));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamController_SteamController006_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamController_SteamController005.h"
+
+typedef struct __winISteamController_SteamController005 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamController_SteamController005;
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_Init, 4)
+bool __thiscall winISteamController_SteamController005_Init(winISteamController_SteamController005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController005_Init(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_Shutdown, 4)
+bool __thiscall winISteamController_SteamController005_Shutdown(winISteamController_SteamController005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController005_Shutdown(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_RunFrame, 4)
+void __thiscall winISteamController_SteamController005_RunFrame(winISteamController_SteamController005 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController005_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_GetConnectedControllers, 8)
+int __thiscall winISteamController_SteamController005_GetConnectedControllers(winISteamController_SteamController005 *_this, ControllerHandle_t * handlesOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController005_GetConnectedControllers(_this->linux_side, handlesOut);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_ShowBindingPanel, 12)
+bool __thiscall winISteamController_SteamController005_ShowBindingPanel(winISteamController_SteamController005 *_this, ControllerHandle_t controllerHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController005_ShowBindingPanel(_this->linux_side, controllerHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_GetActionSetHandle, 8)
+ControllerActionSetHandle_t __thiscall winISteamController_SteamController005_GetActionSetHandle(winISteamController_SteamController005 *_this, const char * pszActionSetName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController005_GetActionSetHandle(_this->linux_side, pszActionSetName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_ActivateActionSet, 20)
+void __thiscall winISteamController_SteamController005_ActivateActionSet(winISteamController_SteamController005 *_this, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController005_ActivateActionSet(_this->linux_side, controllerHandle, actionSetHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_GetCurrentActionSet, 12)
+ControllerActionSetHandle_t __thiscall winISteamController_SteamController005_GetCurrentActionSet(winISteamController_SteamController005 *_this, ControllerHandle_t controllerHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController005_GetCurrentActionSet(_this->linux_side, controllerHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_GetDigitalActionHandle, 8)
+ControllerDigitalActionHandle_t __thiscall winISteamController_SteamController005_GetDigitalActionHandle(winISteamController_SteamController005 *_this, const char * pszActionName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController005_GetDigitalActionHandle(_this->linux_side, pszActionName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_GetDigitalActionData, 24)
+ControllerDigitalActionData_t *__thiscall winISteamController_SteamController005_GetDigitalActionData(winISteamController_SteamController005 *_this, ControllerDigitalActionData_t *_r, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamController_SteamController005_GetDigitalActionData(_this->linux_side, controllerHandle, digitalActionHandle);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_GetDigitalActionOrigins, 32)
+int __thiscall winISteamController_SteamController005_GetDigitalActionOrigins(winISteamController_SteamController005 *_this, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin * originsOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController005_GetDigitalActionOrigins(_this->linux_side, controllerHandle, actionSetHandle, digitalActionHandle, originsOut);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_GetAnalogActionHandle, 8)
+ControllerAnalogActionHandle_t __thiscall winISteamController_SteamController005_GetAnalogActionHandle(winISteamController_SteamController005 *_this, const char * pszActionName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController005_GetAnalogActionHandle(_this->linux_side, pszActionName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_GetAnalogActionData, 24)
+ControllerAnalogActionData_t *__thiscall winISteamController_SteamController005_GetAnalogActionData(winISteamController_SteamController005 *_this, ControllerAnalogActionData_t *_r, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamController_SteamController005_GetAnalogActionData(_this->linux_side, controllerHandle, analogActionHandle);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_GetAnalogActionOrigins, 32)
+int __thiscall winISteamController_SteamController005_GetAnalogActionOrigins(winISteamController_SteamController005 *_this, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin * originsOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController005_GetAnalogActionOrigins(_this->linux_side, controllerHandle, actionSetHandle, analogActionHandle, originsOut);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_StopAnalogActionMomentum, 20)
+void __thiscall winISteamController_SteamController005_StopAnalogActionMomentum(winISteamController_SteamController005 *_this, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController005_StopAnalogActionMomentum(_this->linux_side, controllerHandle, eAction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_TriggerHapticPulse, 18)
+void __thiscall winISteamController_SteamController005_TriggerHapticPulse(winISteamController_SteamController005 *_this, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController005_TriggerHapticPulse(_this->linux_side, controllerHandle, eTargetPad, usDurationMicroSec);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_TriggerRepeatedHapticPulse, 26)
+void __thiscall winISteamController_SteamController005_TriggerRepeatedHapticPulse(winISteamController_SteamController005 *_this, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController005_TriggerRepeatedHapticPulse(_this->linux_side, controllerHandle, eTargetPad, usDurationMicroSec, usOffMicroSec, unRepeat, nFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_TriggerVibration, 16)
+void __thiscall winISteamController_SteamController005_TriggerVibration(winISteamController_SteamController005 *_this, ControllerHandle_t controllerHandle, unsigned short usLeftSpeed, unsigned short usRightSpeed)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController005_TriggerVibration(_this->linux_side, controllerHandle, usLeftSpeed, usRightSpeed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_SetLEDColor, 19)
+void __thiscall winISteamController_SteamController005_SetLEDColor(winISteamController_SteamController005 *_this, ControllerHandle_t controllerHandle, uint8 nColorR, uint8 nColorG, uint8 nColorB, unsigned int nFlags)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController005_SetLEDColor(_this->linux_side, controllerHandle, nColorR, nColorG, nColorB, nFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_GetGamepadIndexForController, 12)
+int __thiscall winISteamController_SteamController005_GetGamepadIndexForController(winISteamController_SteamController005 *_this, ControllerHandle_t ulControllerHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController005_GetGamepadIndexForController(_this->linux_side, ulControllerHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_GetControllerForGamepadIndex, 8)
+ControllerHandle_t __thiscall winISteamController_SteamController005_GetControllerForGamepadIndex(winISteamController_SteamController005 *_this, int nIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController005_GetControllerForGamepadIndex(_this->linux_side, nIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_GetMotionData, 16)
+ControllerMotionData_t *__thiscall winISteamController_SteamController005_GetMotionData(winISteamController_SteamController005 *_this, ControllerMotionData_t *_r, ControllerHandle_t controllerHandle)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamController_SteamController005_GetMotionData(_this->linux_side, controllerHandle);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_ShowDigitalActionOrigins, 32)
+bool __thiscall winISteamController_SteamController005_ShowDigitalActionOrigins(winISteamController_SteamController005 *_this, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController005_ShowDigitalActionOrigins(_this->linux_side, controllerHandle, digitalActionHandle, flScale, flXPosition, flYPosition);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_ShowAnalogActionOrigins, 32)
+bool __thiscall winISteamController_SteamController005_ShowAnalogActionOrigins(winISteamController_SteamController005 *_this, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController005_ShowAnalogActionOrigins(_this->linux_side, controllerHandle, analogActionHandle, flScale, flXPosition, flYPosition);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_GetStringForActionOrigin, 8)
+const char * __thiscall winISteamController_SteamController005_GetStringForActionOrigin(winISteamController_SteamController005 *_this, EControllerActionOrigin eOrigin)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController005_GetStringForActionOrigin(_this->linux_side, eOrigin);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController005_GetGlyphForActionOrigin, 8)
+const char * __thiscall winISteamController_SteamController005_GetGlyphForActionOrigin(winISteamController_SteamController005 *_this, EControllerActionOrigin eOrigin)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController005_GetGlyphForActionOrigin(_this->linux_side, eOrigin);
+}
+
+extern vtable_ptr winISteamController_SteamController005_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamController_SteamController005,
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_Init)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_Shutdown)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_RunFrame)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_GetConnectedControllers)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_ShowBindingPanel)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_GetActionSetHandle)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_ActivateActionSet)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_GetCurrentActionSet)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_GetDigitalActionHandle)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_GetDigitalActionData)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_GetDigitalActionOrigins)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_GetAnalogActionHandle)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_GetAnalogActionData)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_GetAnalogActionOrigins)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_StopAnalogActionMomentum)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_TriggerHapticPulse)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_TriggerRepeatedHapticPulse)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_TriggerVibration)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_SetLEDColor)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_GetGamepadIndexForController)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_GetControllerForGamepadIndex)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_GetMotionData)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_ShowDigitalActionOrigins)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_ShowAnalogActionOrigins)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_GetStringForActionOrigin)
+ VTABLE_ADD_FUNC(winISteamController_SteamController005_GetGlyphForActionOrigin)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamController_SteamController005 *create_winISteamController_SteamController005(void *linux_side)
+{
+ winISteamController_SteamController005 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamController_SteamController005));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamController_SteamController005_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamController_SteamController004.h"
+
+typedef struct __winISteamController_SteamController004 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamController_SteamController004;
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_Init, 4)
+bool __thiscall winISteamController_SteamController004_Init(winISteamController_SteamController004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController004_Init(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_Shutdown, 4)
+bool __thiscall winISteamController_SteamController004_Shutdown(winISteamController_SteamController004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController004_Shutdown(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_RunFrame, 4)
+void __thiscall winISteamController_SteamController004_RunFrame(winISteamController_SteamController004 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController004_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_GetConnectedControllers, 8)
+int __thiscall winISteamController_SteamController004_GetConnectedControllers(winISteamController_SteamController004 *_this, ControllerHandle_t * handlesOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController004_GetConnectedControllers(_this->linux_side, handlesOut);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_ShowBindingPanel, 12)
+bool __thiscall winISteamController_SteamController004_ShowBindingPanel(winISteamController_SteamController004 *_this, ControllerHandle_t controllerHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController004_ShowBindingPanel(_this->linux_side, controllerHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_GetActionSetHandle, 8)
+ControllerActionSetHandle_t __thiscall winISteamController_SteamController004_GetActionSetHandle(winISteamController_SteamController004 *_this, const char * pszActionSetName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController004_GetActionSetHandle(_this->linux_side, pszActionSetName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_ActivateActionSet, 20)
+void __thiscall winISteamController_SteamController004_ActivateActionSet(winISteamController_SteamController004 *_this, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController004_ActivateActionSet(_this->linux_side, controllerHandle, actionSetHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_GetCurrentActionSet, 12)
+ControllerActionSetHandle_t __thiscall winISteamController_SteamController004_GetCurrentActionSet(winISteamController_SteamController004 *_this, ControllerHandle_t controllerHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController004_GetCurrentActionSet(_this->linux_side, controllerHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_GetDigitalActionHandle, 8)
+ControllerDigitalActionHandle_t __thiscall winISteamController_SteamController004_GetDigitalActionHandle(winISteamController_SteamController004 *_this, const char * pszActionName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController004_GetDigitalActionHandle(_this->linux_side, pszActionName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_GetDigitalActionData, 24)
+ControllerDigitalActionData_t *__thiscall winISteamController_SteamController004_GetDigitalActionData(winISteamController_SteamController004 *_this, ControllerDigitalActionData_t *_r, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamController_SteamController004_GetDigitalActionData(_this->linux_side, controllerHandle, digitalActionHandle);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_GetDigitalActionOrigins, 32)
+int __thiscall winISteamController_SteamController004_GetDigitalActionOrigins(winISteamController_SteamController004 *_this, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin * originsOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController004_GetDigitalActionOrigins(_this->linux_side, controllerHandle, actionSetHandle, digitalActionHandle, originsOut);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_GetAnalogActionHandle, 8)
+ControllerAnalogActionHandle_t __thiscall winISteamController_SteamController004_GetAnalogActionHandle(winISteamController_SteamController004 *_this, const char * pszActionName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController004_GetAnalogActionHandle(_this->linux_side, pszActionName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_GetAnalogActionData, 24)
+ControllerAnalogActionData_t *__thiscall winISteamController_SteamController004_GetAnalogActionData(winISteamController_SteamController004 *_this, ControllerAnalogActionData_t *_r, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamController_SteamController004_GetAnalogActionData(_this->linux_side, controllerHandle, analogActionHandle);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_GetAnalogActionOrigins, 32)
+int __thiscall winISteamController_SteamController004_GetAnalogActionOrigins(winISteamController_SteamController004 *_this, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin * originsOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController004_GetAnalogActionOrigins(_this->linux_side, controllerHandle, actionSetHandle, analogActionHandle, originsOut);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_StopAnalogActionMomentum, 20)
+void __thiscall winISteamController_SteamController004_StopAnalogActionMomentum(winISteamController_SteamController004 *_this, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController004_StopAnalogActionMomentum(_this->linux_side, controllerHandle, eAction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_TriggerHapticPulse, 18)
+void __thiscall winISteamController_SteamController004_TriggerHapticPulse(winISteamController_SteamController004 *_this, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController004_TriggerHapticPulse(_this->linux_side, controllerHandle, eTargetPad, usDurationMicroSec);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_TriggerRepeatedHapticPulse, 26)
+void __thiscall winISteamController_SteamController004_TriggerRepeatedHapticPulse(winISteamController_SteamController004 *_this, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController004_TriggerRepeatedHapticPulse(_this->linux_side, controllerHandle, eTargetPad, usDurationMicroSec, usOffMicroSec, unRepeat, nFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_GetGamepadIndexForController, 12)
+int __thiscall winISteamController_SteamController004_GetGamepadIndexForController(winISteamController_SteamController004 *_this, ControllerHandle_t ulControllerHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController004_GetGamepadIndexForController(_this->linux_side, ulControllerHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_GetControllerForGamepadIndex, 8)
+ControllerHandle_t __thiscall winISteamController_SteamController004_GetControllerForGamepadIndex(winISteamController_SteamController004 *_this, int nIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController004_GetControllerForGamepadIndex(_this->linux_side, nIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_GetMotionData, 16)
+ControllerMotionData_t *__thiscall winISteamController_SteamController004_GetMotionData(winISteamController_SteamController004 *_this, ControllerMotionData_t *_r, ControllerHandle_t controllerHandle)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamController_SteamController004_GetMotionData(_this->linux_side, controllerHandle);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_ShowDigitalActionOrigins, 32)
+bool __thiscall winISteamController_SteamController004_ShowDigitalActionOrigins(winISteamController_SteamController004 *_this, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController004_ShowDigitalActionOrigins(_this->linux_side, controllerHandle, digitalActionHandle, flScale, flXPosition, flYPosition);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController004_ShowAnalogActionOrigins, 32)
+bool __thiscall winISteamController_SteamController004_ShowAnalogActionOrigins(winISteamController_SteamController004 *_this, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController004_ShowAnalogActionOrigins(_this->linux_side, controllerHandle, analogActionHandle, flScale, flXPosition, flYPosition);
+}
+
+extern vtable_ptr winISteamController_SteamController004_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamController_SteamController004,
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_Init)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_Shutdown)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_RunFrame)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_GetConnectedControllers)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_ShowBindingPanel)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_GetActionSetHandle)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_ActivateActionSet)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_GetCurrentActionSet)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_GetDigitalActionHandle)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_GetDigitalActionData)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_GetDigitalActionOrigins)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_GetAnalogActionHandle)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_GetAnalogActionData)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_GetAnalogActionOrigins)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_StopAnalogActionMomentum)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_TriggerHapticPulse)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_TriggerRepeatedHapticPulse)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_GetGamepadIndexForController)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_GetControllerForGamepadIndex)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_GetMotionData)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_ShowDigitalActionOrigins)
+ VTABLE_ADD_FUNC(winISteamController_SteamController004_ShowAnalogActionOrigins)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamController_SteamController004 *create_winISteamController_SteamController004(void *linux_side)
+{
+ winISteamController_SteamController004 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamController_SteamController004));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamController_SteamController004_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamController_SteamController003.h"
+
+typedef struct __winISteamController_SteamController003 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamController_SteamController003;
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController003_Init, 4)
+bool __thiscall winISteamController_SteamController003_Init(winISteamController_SteamController003 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController003_Init(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController003_Shutdown, 4)
+bool __thiscall winISteamController_SteamController003_Shutdown(winISteamController_SteamController003 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController003_Shutdown(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController003_RunFrame, 4)
+void __thiscall winISteamController_SteamController003_RunFrame(winISteamController_SteamController003 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController003_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController003_GetConnectedControllers, 8)
+int __thiscall winISteamController_SteamController003_GetConnectedControllers(winISteamController_SteamController003 *_this, ControllerHandle_t * handlesOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController003_GetConnectedControllers(_this->linux_side, handlesOut);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController003_ShowBindingPanel, 12)
+bool __thiscall winISteamController_SteamController003_ShowBindingPanel(winISteamController_SteamController003 *_this, ControllerHandle_t controllerHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController003_ShowBindingPanel(_this->linux_side, controllerHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController003_GetActionSetHandle, 8)
+ControllerActionSetHandle_t __thiscall winISteamController_SteamController003_GetActionSetHandle(winISteamController_SteamController003 *_this, const char * pszActionSetName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController003_GetActionSetHandle(_this->linux_side, pszActionSetName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController003_ActivateActionSet, 20)
+void __thiscall winISteamController_SteamController003_ActivateActionSet(winISteamController_SteamController003 *_this, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController003_ActivateActionSet(_this->linux_side, controllerHandle, actionSetHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController003_GetCurrentActionSet, 12)
+ControllerActionSetHandle_t __thiscall winISteamController_SteamController003_GetCurrentActionSet(winISteamController_SteamController003 *_this, ControllerHandle_t controllerHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController003_GetCurrentActionSet(_this->linux_side, controllerHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController003_GetDigitalActionHandle, 8)
+ControllerDigitalActionHandle_t __thiscall winISteamController_SteamController003_GetDigitalActionHandle(winISteamController_SteamController003 *_this, const char * pszActionName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController003_GetDigitalActionHandle(_this->linux_side, pszActionName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController003_GetDigitalActionData, 24)
+ControllerDigitalActionData_t *__thiscall winISteamController_SteamController003_GetDigitalActionData(winISteamController_SteamController003 *_this, ControllerDigitalActionData_t *_r, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamController_SteamController003_GetDigitalActionData(_this->linux_side, controllerHandle, digitalActionHandle);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController003_GetDigitalActionOrigins, 32)
+int __thiscall winISteamController_SteamController003_GetDigitalActionOrigins(winISteamController_SteamController003 *_this, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin * originsOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController003_GetDigitalActionOrigins(_this->linux_side, controllerHandle, actionSetHandle, digitalActionHandle, originsOut);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController003_GetAnalogActionHandle, 8)
+ControllerAnalogActionHandle_t __thiscall winISteamController_SteamController003_GetAnalogActionHandle(winISteamController_SteamController003 *_this, const char * pszActionName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController003_GetAnalogActionHandle(_this->linux_side, pszActionName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController003_GetAnalogActionData, 24)
+ControllerAnalogActionData_t *__thiscall winISteamController_SteamController003_GetAnalogActionData(winISteamController_SteamController003 *_this, ControllerAnalogActionData_t *_r, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamController_SteamController003_GetAnalogActionData(_this->linux_side, controllerHandle, analogActionHandle);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController003_GetAnalogActionOrigins, 32)
+int __thiscall winISteamController_SteamController003_GetAnalogActionOrigins(winISteamController_SteamController003 *_this, ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin * originsOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_SteamController003_GetAnalogActionOrigins(_this->linux_side, controllerHandle, actionSetHandle, analogActionHandle, originsOut);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController003_StopAnalogActionMomentum, 20)
+void __thiscall winISteamController_SteamController003_StopAnalogActionMomentum(winISteamController_SteamController003 *_this, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController003_StopAnalogActionMomentum(_this->linux_side, controllerHandle, eAction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController003_TriggerHapticPulse, 18)
+void __thiscall winISteamController_SteamController003_TriggerHapticPulse(winISteamController_SteamController003 *_this, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController003_TriggerHapticPulse(_this->linux_side, controllerHandle, eTargetPad, usDurationMicroSec);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_SteamController003_TriggerRepeatedHapticPulse, 26)
+void __thiscall winISteamController_SteamController003_TriggerRepeatedHapticPulse(winISteamController_SteamController003 *_this, ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_SteamController003_TriggerRepeatedHapticPulse(_this->linux_side, controllerHandle, eTargetPad, usDurationMicroSec, usOffMicroSec, unRepeat, nFlags);
+}
+
+extern vtable_ptr winISteamController_SteamController003_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamController_SteamController003,
+ VTABLE_ADD_FUNC(winISteamController_SteamController003_Init)
+ VTABLE_ADD_FUNC(winISteamController_SteamController003_Shutdown)
+ VTABLE_ADD_FUNC(winISteamController_SteamController003_RunFrame)
+ VTABLE_ADD_FUNC(winISteamController_SteamController003_GetConnectedControllers)
+ VTABLE_ADD_FUNC(winISteamController_SteamController003_ShowBindingPanel)
+ VTABLE_ADD_FUNC(winISteamController_SteamController003_GetActionSetHandle)
+ VTABLE_ADD_FUNC(winISteamController_SteamController003_ActivateActionSet)
+ VTABLE_ADD_FUNC(winISteamController_SteamController003_GetCurrentActionSet)
+ VTABLE_ADD_FUNC(winISteamController_SteamController003_GetDigitalActionHandle)
+ VTABLE_ADD_FUNC(winISteamController_SteamController003_GetDigitalActionData)
+ VTABLE_ADD_FUNC(winISteamController_SteamController003_GetDigitalActionOrigins)
+ VTABLE_ADD_FUNC(winISteamController_SteamController003_GetAnalogActionHandle)
+ VTABLE_ADD_FUNC(winISteamController_SteamController003_GetAnalogActionData)
+ VTABLE_ADD_FUNC(winISteamController_SteamController003_GetAnalogActionOrigins)
+ VTABLE_ADD_FUNC(winISteamController_SteamController003_StopAnalogActionMomentum)
+ VTABLE_ADD_FUNC(winISteamController_SteamController003_TriggerHapticPulse)
+ VTABLE_ADD_FUNC(winISteamController_SteamController003_TriggerRepeatedHapticPulse)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamController_SteamController003 *create_winISteamController_SteamController003(void *linux_side)
+{
+ winISteamController_SteamController003 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamController_SteamController003));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamController_SteamController003_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION.h"
+
+typedef struct __winISteamController_STEAMCONTROLLER_INTERFACE_VERSION {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamController_STEAMCONTROLLER_INTERFACE_VERSION;
+
+DEFINE_THISCALL_WRAPPER(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_Init, 8)
+bool __thiscall winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_Init(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION *_this, const char * pchAbsolutePathToControllerConfigVDF)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION_Init(_this->linux_side, pchAbsolutePathToControllerConfigVDF);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_Shutdown, 4)
+bool __thiscall winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_Shutdown(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION_Shutdown(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_RunFrame, 4)
+void __thiscall winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_RunFrame(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_GetControllerState, 12)
+bool __thiscall winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_GetControllerState(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION *_this, uint32 unControllerIndex, SteamControllerState001_t * pState)
+{
+ TRACE("%p\n", _this);
+ return cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION_GetControllerState(_this->linux_side, unControllerIndex, pState);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_TriggerHapticPulse, 14)
+void __thiscall winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_TriggerHapticPulse(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION *_this, uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION_TriggerHapticPulse(_this->linux_side, unControllerIndex, eTargetPad, usDurationMicroSec);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_SetOverrideMode, 8)
+void __thiscall winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_SetOverrideMode(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION *_this, const char * pchMode)
+{
+ TRACE("%p\n", _this);
+ cppISteamController_STEAMCONTROLLER_INTERFACE_VERSION_SetOverrideMode(_this->linux_side, pchMode);
+}
+
+extern vtable_ptr winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION,
+ VTABLE_ADD_FUNC(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_Init)
+ VTABLE_ADD_FUNC(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_Shutdown)
+ VTABLE_ADD_FUNC(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_RunFrame)
+ VTABLE_ADD_FUNC(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_GetControllerState)
+ VTABLE_ADD_FUNC(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_TriggerHapticPulse)
+ VTABLE_ADD_FUNC(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_SetOverrideMode)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamController_STEAMCONTROLLER_INTERFACE_VERSION *create_winISteamController_STEAMCONTROLLER_INTERFACE_VERSION(void *linux_side)
+{
+ winISteamController_STEAMCONTROLLER_INTERFACE_VERSION *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamController_STEAMCONTROLLER_INTERFACE_VERSION));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamController_STEAMCONTROLLER_INTERFACE_VERSION_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamFriends.c b/lsteamclient/winISteamFriends.c
new file mode 100644
index 00000000..c400e4bb
--- /dev/null
+++ b/lsteamclient/winISteamFriends.c
@@ -0,0 +1,4034 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamFriends_SteamFriends015.h"
+
+typedef struct __winISteamFriends_SteamFriends015 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamFriends_SteamFriends015;
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetPersonaName, 4)
+const char * __thiscall winISteamFriends_SteamFriends015_GetPersonaName(winISteamFriends_SteamFriends015 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetPersonaName(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_SetPersonaName, 8)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends015_SetPersonaName(winISteamFriends_SteamFriends015 *_this, const char * pchPersonaName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_SetPersonaName(_this->linux_side, pchPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetPersonaState, 4)
+EPersonaState __thiscall winISteamFriends_SteamFriends015_GetPersonaState(winISteamFriends_SteamFriends015 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetPersonaState(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendCount, 8)
+int __thiscall winISteamFriends_SteamFriends015_GetFriendCount(winISteamFriends_SteamFriends015 *_this, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFriendCount(_this->linux_side, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendByIndex, 16)
+CSteamID *__thiscall winISteamFriends_SteamFriends015_GetFriendByIndex(winISteamFriends_SteamFriends015 *_this, CSteamID *_r, int iFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends015_GetFriendByIndex(_this->linux_side, iFriend, iFriendFlags);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendRelationship, 12)
+EFriendRelationship __thiscall winISteamFriends_SteamFriends015_GetFriendRelationship(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFriendRelationship(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendPersonaState, 12)
+EPersonaState __thiscall winISteamFriends_SteamFriends015_GetFriendPersonaState(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFriendPersonaState(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendPersonaName, 12)
+const char * __thiscall winISteamFriends_SteamFriends015_GetFriendPersonaName(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFriendPersonaName(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendGamePlayed, 16)
+bool __thiscall winISteamFriends_SteamFriends015_GetFriendGamePlayed(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend, FriendGameInfo_t * pFriendGameInfo)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFriendGamePlayed(_this->linux_side, steamIDFriend, pFriendGameInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendPersonaNameHistory, 16)
+const char * __thiscall winISteamFriends_SteamFriends015_GetFriendPersonaNameHistory(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend, int iPersonaName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFriendPersonaNameHistory(_this->linux_side, steamIDFriend, iPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendSteamLevel, 12)
+int __thiscall winISteamFriends_SteamFriends015_GetFriendSteamLevel(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFriendSteamLevel(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetPlayerNickname, 12)
+const char * __thiscall winISteamFriends_SteamFriends015_GetPlayerNickname(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDPlayer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetPlayerNickname(_this->linux_side, steamIDPlayer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendsGroupCount, 4)
+int __thiscall winISteamFriends_SteamFriends015_GetFriendsGroupCount(winISteamFriends_SteamFriends015 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFriendsGroupCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendsGroupIDByIndex, 8)
+FriendsGroupID_t __thiscall winISteamFriends_SteamFriends015_GetFriendsGroupIDByIndex(winISteamFriends_SteamFriends015 *_this, int iFG)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFriendsGroupIDByIndex(_this->linux_side, iFG);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendsGroupName, 6)
+const char * __thiscall winISteamFriends_SteamFriends015_GetFriendsGroupName(winISteamFriends_SteamFriends015 *_this, FriendsGroupID_t friendsGroupID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFriendsGroupName(_this->linux_side, friendsGroupID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendsGroupMembersCount, 6)
+int __thiscall winISteamFriends_SteamFriends015_GetFriendsGroupMembersCount(winISteamFriends_SteamFriends015 *_this, FriendsGroupID_t friendsGroupID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFriendsGroupMembersCount(_this->linux_side, friendsGroupID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendsGroupMembersList, 14)
+void __thiscall winISteamFriends_SteamFriends015_GetFriendsGroupMembersList(winISteamFriends_SteamFriends015 *_this, FriendsGroupID_t friendsGroupID, CSteamID * pOutSteamIDMembers, int nMembersCount)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends015_GetFriendsGroupMembersList(_this->linux_side, friendsGroupID, pOutSteamIDMembers, nMembersCount);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_HasFriend, 16)
+bool __thiscall winISteamFriends_SteamFriends015_HasFriend(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_HasFriend(_this->linux_side, steamIDFriend, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetClanCount, 4)
+int __thiscall winISteamFriends_SteamFriends015_GetClanCount(winISteamFriends_SteamFriends015 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetClanCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetClanByIndex, 12)
+CSteamID *__thiscall winISteamFriends_SteamFriends015_GetClanByIndex(winISteamFriends_SteamFriends015 *_this, CSteamID *_r, int iClan)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends015_GetClanByIndex(_this->linux_side, iClan);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetClanName, 12)
+const char * __thiscall winISteamFriends_SteamFriends015_GetClanName(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetClanName(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetClanTag, 12)
+const char * __thiscall winISteamFriends_SteamFriends015_GetClanTag(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetClanTag(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetClanActivityCounts, 24)
+bool __thiscall winISteamFriends_SteamFriends015_GetClanActivityCounts(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetClanActivityCounts(_this->linux_side, steamIDClan, pnOnline, pnInGame, pnChatting);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_DownloadClanActivityCounts, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends015_DownloadClanActivityCounts(winISteamFriends_SteamFriends015 *_this, CSteamID * psteamIDClans, int cClansToRequest)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_DownloadClanActivityCounts(_this->linux_side, psteamIDClans, cClansToRequest);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendCountFromSource, 12)
+int __thiscall winISteamFriends_SteamFriends015_GetFriendCountFromSource(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFriendCountFromSource(_this->linux_side, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendFromSourceByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends015_GetFriendFromSourceByIndex(winISteamFriends_SteamFriends015 *_this, CSteamID *_r, CSteamID steamIDSource, int iFriend)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends015_GetFriendFromSourceByIndex(_this->linux_side, steamIDSource, iFriend);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_IsUserInSource, 20)
+bool __thiscall winISteamFriends_SteamFriends015_IsUserInSource(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_IsUserInSource(_this->linux_side, steamIDUser, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_SetInGameVoiceSpeaking, 13)
+void __thiscall winISteamFriends_SteamFriends015_SetInGameVoiceSpeaking(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDUser, bool bSpeaking)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends015_SetInGameVoiceSpeaking(_this->linux_side, steamIDUser, bSpeaking);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_ActivateGameOverlay, 8)
+void __thiscall winISteamFriends_SteamFriends015_ActivateGameOverlay(winISteamFriends_SteamFriends015 *_this, const char * pchDialog)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends015_ActivateGameOverlay(_this->linux_side, pchDialog);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_ActivateGameOverlayToUser, 16)
+void __thiscall winISteamFriends_SteamFriends015_ActivateGameOverlayToUser(winISteamFriends_SteamFriends015 *_this, const char * pchDialog, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends015_ActivateGameOverlayToUser(_this->linux_side, pchDialog, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_ActivateGameOverlayToWebPage, 8)
+void __thiscall winISteamFriends_SteamFriends015_ActivateGameOverlayToWebPage(winISteamFriends_SteamFriends015 *_this, const char * pchURL)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends015_ActivateGameOverlayToWebPage(_this->linux_side, pchURL);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_ActivateGameOverlayToStore, 12)
+void __thiscall winISteamFriends_SteamFriends015_ActivateGameOverlayToStore(winISteamFriends_SteamFriends015 *_this, AppId_t nAppID, EOverlayToStoreFlag eFlag)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends015_ActivateGameOverlayToStore(_this->linux_side, nAppID, eFlag);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_SetPlayedWith, 12)
+void __thiscall winISteamFriends_SteamFriends015_SetPlayedWith(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDUserPlayedWith)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends015_SetPlayedWith(_this->linux_side, steamIDUserPlayedWith);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_ActivateGameOverlayInviteDialog, 12)
+void __thiscall winISteamFriends_SteamFriends015_ActivateGameOverlayInviteDialog(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends015_ActivateGameOverlayInviteDialog(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetSmallFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends015_GetSmallFriendAvatar(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetSmallFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetMediumFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends015_GetMediumFriendAvatar(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetMediumFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetLargeFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends015_GetLargeFriendAvatar(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetLargeFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_RequestUserInformation, 13)
+bool __thiscall winISteamFriends_SteamFriends015_RequestUserInformation(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDUser, bool bRequireNameOnly)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_RequestUserInformation(_this->linux_side, steamIDUser, bRequireNameOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_RequestClanOfficerList, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends015_RequestClanOfficerList(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_RequestClanOfficerList(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetClanOwner, 16)
+CSteamID *__thiscall winISteamFriends_SteamFriends015_GetClanOwner(winISteamFriends_SteamFriends015 *_this, CSteamID *_r, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends015_GetClanOwner(_this->linux_side, steamIDClan);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetClanOfficerCount, 12)
+int __thiscall winISteamFriends_SteamFriends015_GetClanOfficerCount(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetClanOfficerCount(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetClanOfficerByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends015_GetClanOfficerByIndex(winISteamFriends_SteamFriends015 *_this, CSteamID *_r, CSteamID steamIDClan, int iOfficer)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends015_GetClanOfficerByIndex(_this->linux_side, steamIDClan, iOfficer);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetUserRestrictions, 4)
+uint32 __thiscall winISteamFriends_SteamFriends015_GetUserRestrictions(winISteamFriends_SteamFriends015 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetUserRestrictions(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_SetRichPresence, 12)
+bool __thiscall winISteamFriends_SteamFriends015_SetRichPresence(winISteamFriends_SteamFriends015 *_this, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_SetRichPresence(_this->linux_side, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_ClearRichPresence, 4)
+void __thiscall winISteamFriends_SteamFriends015_ClearRichPresence(winISteamFriends_SteamFriends015 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends015_ClearRichPresence(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendRichPresence, 16)
+const char * __thiscall winISteamFriends_SteamFriends015_GetFriendRichPresence(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFriendRichPresence(_this->linux_side, steamIDFriend, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendRichPresenceKeyCount, 12)
+int __thiscall winISteamFriends_SteamFriends015_GetFriendRichPresenceKeyCount(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFriendRichPresenceKeyCount(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendRichPresenceKeyByIndex, 16)
+const char * __thiscall winISteamFriends_SteamFriends015_GetFriendRichPresenceKeyByIndex(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend, int iKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFriendRichPresenceKeyByIndex(_this->linux_side, steamIDFriend, iKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_RequestFriendRichPresence, 12)
+void __thiscall winISteamFriends_SteamFriends015_RequestFriendRichPresence(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends015_RequestFriendRichPresence(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_InviteUserToGame, 16)
+bool __thiscall winISteamFriends_SteamFriends015_InviteUserToGame(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend, const char * pchConnectString)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_InviteUserToGame(_this->linux_side, steamIDFriend, pchConnectString);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetCoplayFriendCount, 4)
+int __thiscall winISteamFriends_SteamFriends015_GetCoplayFriendCount(winISteamFriends_SteamFriends015 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetCoplayFriendCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetCoplayFriend, 12)
+CSteamID *__thiscall winISteamFriends_SteamFriends015_GetCoplayFriend(winISteamFriends_SteamFriends015 *_this, CSteamID *_r, int iCoplayFriend)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends015_GetCoplayFriend(_this->linux_side, iCoplayFriend);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendCoplayTime, 12)
+int __thiscall winISteamFriends_SteamFriends015_GetFriendCoplayTime(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFriendCoplayTime(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendCoplayGame, 12)
+AppId_t __thiscall winISteamFriends_SteamFriends015_GetFriendCoplayGame(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFriendCoplayGame(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_JoinClanChatRoom, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends015_JoinClanChatRoom(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_JoinClanChatRoom(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_LeaveClanChatRoom, 12)
+bool __thiscall winISteamFriends_SteamFriends015_LeaveClanChatRoom(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_LeaveClanChatRoom(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetClanChatMemberCount, 12)
+int __thiscall winISteamFriends_SteamFriends015_GetClanChatMemberCount(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetClanChatMemberCount(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetChatMemberByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends015_GetChatMemberByIndex(winISteamFriends_SteamFriends015 *_this, CSteamID *_r, CSteamID steamIDClan, int iUser)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends015_GetChatMemberByIndex(_this->linux_side, steamIDClan, iUser);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_SendClanChatMessage, 16)
+bool __thiscall winISteamFriends_SteamFriends015_SendClanChatMessage(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDClanChat, const char * pchText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_SendClanChatMessage(_this->linux_side, steamIDClanChat, pchText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetClanChatMessage, 32)
+int __thiscall winISteamFriends_SteamFriends015_GetClanChatMessage(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, CSteamID * psteamidChatter)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetClanChatMessage(_this->linux_side, steamIDClanChat, iMessage, prgchText, cchTextMax, peChatEntryType, psteamidChatter);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_IsClanChatAdmin, 20)
+bool __thiscall winISteamFriends_SteamFriends015_IsClanChatAdmin(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDClanChat, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_IsClanChatAdmin(_this->linux_side, steamIDClanChat, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_IsClanChatWindowOpenInSteam, 12)
+bool __thiscall winISteamFriends_SteamFriends015_IsClanChatWindowOpenInSteam(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDClanChat)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_IsClanChatWindowOpenInSteam(_this->linux_side, steamIDClanChat);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_OpenClanChatWindowInSteam, 12)
+bool __thiscall winISteamFriends_SteamFriends015_OpenClanChatWindowInSteam(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDClanChat)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_OpenClanChatWindowInSteam(_this->linux_side, steamIDClanChat);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_CloseClanChatWindowInSteam, 12)
+bool __thiscall winISteamFriends_SteamFriends015_CloseClanChatWindowInSteam(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDClanChat)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_CloseClanChatWindowInSteam(_this->linux_side, steamIDClanChat);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_SetListenForFriendsMessages, 5)
+bool __thiscall winISteamFriends_SteamFriends015_SetListenForFriendsMessages(winISteamFriends_SteamFriends015 *_this, bool bInterceptEnabled)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_SetListenForFriendsMessages(_this->linux_side, bInterceptEnabled);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_ReplyToFriendMessage, 16)
+bool __thiscall winISteamFriends_SteamFriends015_ReplyToFriendMessage(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend, const char * pchMsgToSend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_ReplyToFriendMessage(_this->linux_side, steamIDFriend, pchMsgToSend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFriendMessage, 28)
+int __thiscall winISteamFriends_SteamFriends015_GetFriendMessage(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFriendMessage(_this->linux_side, steamIDFriend, iMessageID, pvData, cubData, peChatEntryType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_GetFollowerCount, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends015_GetFollowerCount(winISteamFriends_SteamFriends015 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_GetFollowerCount(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_IsFollowing, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends015_IsFollowing(winISteamFriends_SteamFriends015 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_IsFollowing(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_EnumerateFollowingList, 8)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends015_EnumerateFollowingList(winISteamFriends_SteamFriends015 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_EnumerateFollowingList(_this->linux_side, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_IsClanPublic, 12)
+bool __thiscall winISteamFriends_SteamFriends015_IsClanPublic(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_IsClanPublic(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends015_IsClanOfficialGameGroup, 12)
+bool __thiscall winISteamFriends_SteamFriends015_IsClanOfficialGameGroup(winISteamFriends_SteamFriends015 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends015_IsClanOfficialGameGroup(_this->linux_side, steamIDClan);
+}
+
+extern vtable_ptr winISteamFriends_SteamFriends015_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamFriends_SteamFriends015,
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_SetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendRelationship)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendGamePlayed)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendPersonaNameHistory)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendSteamLevel)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetPlayerNickname)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendsGroupCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendsGroupIDByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendsGroupName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendsGroupMembersCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendsGroupMembersList)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_HasFriend)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetClanCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetClanByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetClanName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetClanTag)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetClanActivityCounts)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_DownloadClanActivityCounts)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendCountFromSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendFromSourceByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_IsUserInSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_SetInGameVoiceSpeaking)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_ActivateGameOverlay)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_ActivateGameOverlayToUser)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_ActivateGameOverlayToWebPage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_ActivateGameOverlayToStore)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_SetPlayedWith)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_ActivateGameOverlayInviteDialog)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetSmallFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetMediumFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetLargeFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_RequestUserInformation)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_RequestClanOfficerList)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetClanOwner)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetClanOfficerCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetClanOfficerByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetUserRestrictions)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_SetRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_ClearRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendRichPresenceKeyCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendRichPresenceKeyByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_RequestFriendRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_InviteUserToGame)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetCoplayFriendCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetCoplayFriend)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendCoplayTime)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendCoplayGame)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_JoinClanChatRoom)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_LeaveClanChatRoom)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetClanChatMemberCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetChatMemberByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_SendClanChatMessage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetClanChatMessage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_IsClanChatAdmin)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_IsClanChatWindowOpenInSteam)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_OpenClanChatWindowInSteam)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_CloseClanChatWindowInSteam)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_SetListenForFriendsMessages)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_ReplyToFriendMessage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFriendMessage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_GetFollowerCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_IsFollowing)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_EnumerateFollowingList)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_IsClanPublic)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends015_IsClanOfficialGameGroup)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamFriends_SteamFriends015 *create_winISteamFriends_SteamFriends015(void *linux_side)
+{
+ winISteamFriends_SteamFriends015 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamFriends_SteamFriends015));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamFriends_SteamFriends015_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamFriends_SteamFriends014.h"
+
+typedef struct __winISteamFriends_SteamFriends014 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamFriends_SteamFriends014;
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetPersonaName, 4)
+const char * __thiscall winISteamFriends_SteamFriends014_GetPersonaName(winISteamFriends_SteamFriends014 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetPersonaName(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_SetPersonaName, 8)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends014_SetPersonaName(winISteamFriends_SteamFriends014 *_this, const char * pchPersonaName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_SetPersonaName(_this->linux_side, pchPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetPersonaState, 4)
+EPersonaState __thiscall winISteamFriends_SteamFriends014_GetPersonaState(winISteamFriends_SteamFriends014 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetPersonaState(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetFriendCount, 8)
+int __thiscall winISteamFriends_SteamFriends014_GetFriendCount(winISteamFriends_SteamFriends014 *_this, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetFriendCount(_this->linux_side, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetFriendByIndex, 16)
+CSteamID *__thiscall winISteamFriends_SteamFriends014_GetFriendByIndex(winISteamFriends_SteamFriends014 *_this, CSteamID *_r, int iFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends014_GetFriendByIndex(_this->linux_side, iFriend, iFriendFlags);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetFriendRelationship, 12)
+EFriendRelationship __thiscall winISteamFriends_SteamFriends014_GetFriendRelationship(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetFriendRelationship(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetFriendPersonaState, 12)
+EPersonaState __thiscall winISteamFriends_SteamFriends014_GetFriendPersonaState(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetFriendPersonaState(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetFriendPersonaName, 12)
+const char * __thiscall winISteamFriends_SteamFriends014_GetFriendPersonaName(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetFriendPersonaName(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetFriendGamePlayed, 16)
+bool __thiscall winISteamFriends_SteamFriends014_GetFriendGamePlayed(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDFriend, FriendGameInfo_t * pFriendGameInfo)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetFriendGamePlayed(_this->linux_side, steamIDFriend, pFriendGameInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetFriendPersonaNameHistory, 16)
+const char * __thiscall winISteamFriends_SteamFriends014_GetFriendPersonaNameHistory(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDFriend, int iPersonaName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetFriendPersonaNameHistory(_this->linux_side, steamIDFriend, iPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetPlayerNickname, 12)
+const char * __thiscall winISteamFriends_SteamFriends014_GetPlayerNickname(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDPlayer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetPlayerNickname(_this->linux_side, steamIDPlayer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_HasFriend, 16)
+bool __thiscall winISteamFriends_SteamFriends014_HasFriend(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_HasFriend(_this->linux_side, steamIDFriend, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetClanCount, 4)
+int __thiscall winISteamFriends_SteamFriends014_GetClanCount(winISteamFriends_SteamFriends014 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetClanCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetClanByIndex, 12)
+CSteamID *__thiscall winISteamFriends_SteamFriends014_GetClanByIndex(winISteamFriends_SteamFriends014 *_this, CSteamID *_r, int iClan)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends014_GetClanByIndex(_this->linux_side, iClan);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetClanName, 12)
+const char * __thiscall winISteamFriends_SteamFriends014_GetClanName(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetClanName(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetClanTag, 12)
+const char * __thiscall winISteamFriends_SteamFriends014_GetClanTag(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetClanTag(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetClanActivityCounts, 24)
+bool __thiscall winISteamFriends_SteamFriends014_GetClanActivityCounts(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetClanActivityCounts(_this->linux_side, steamIDClan, pnOnline, pnInGame, pnChatting);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_DownloadClanActivityCounts, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends014_DownloadClanActivityCounts(winISteamFriends_SteamFriends014 *_this, CSteamID * psteamIDClans, int cClansToRequest)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_DownloadClanActivityCounts(_this->linux_side, psteamIDClans, cClansToRequest);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetFriendCountFromSource, 12)
+int __thiscall winISteamFriends_SteamFriends014_GetFriendCountFromSource(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetFriendCountFromSource(_this->linux_side, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetFriendFromSourceByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends014_GetFriendFromSourceByIndex(winISteamFriends_SteamFriends014 *_this, CSteamID *_r, CSteamID steamIDSource, int iFriend)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends014_GetFriendFromSourceByIndex(_this->linux_side, steamIDSource, iFriend);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_IsUserInSource, 20)
+bool __thiscall winISteamFriends_SteamFriends014_IsUserInSource(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_IsUserInSource(_this->linux_side, steamIDUser, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_SetInGameVoiceSpeaking, 13)
+void __thiscall winISteamFriends_SteamFriends014_SetInGameVoiceSpeaking(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDUser, bool bSpeaking)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends014_SetInGameVoiceSpeaking(_this->linux_side, steamIDUser, bSpeaking);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_ActivateGameOverlay, 8)
+void __thiscall winISteamFriends_SteamFriends014_ActivateGameOverlay(winISteamFriends_SteamFriends014 *_this, const char * pchDialog)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends014_ActivateGameOverlay(_this->linux_side, pchDialog);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_ActivateGameOverlayToUser, 16)
+void __thiscall winISteamFriends_SteamFriends014_ActivateGameOverlayToUser(winISteamFriends_SteamFriends014 *_this, const char * pchDialog, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends014_ActivateGameOverlayToUser(_this->linux_side, pchDialog, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_ActivateGameOverlayToWebPage, 8)
+void __thiscall winISteamFriends_SteamFriends014_ActivateGameOverlayToWebPage(winISteamFriends_SteamFriends014 *_this, const char * pchURL)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends014_ActivateGameOverlayToWebPage(_this->linux_side, pchURL);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_ActivateGameOverlayToStore, 12)
+void __thiscall winISteamFriends_SteamFriends014_ActivateGameOverlayToStore(winISteamFriends_SteamFriends014 *_this, AppId_t nAppID, EOverlayToStoreFlag eFlag)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends014_ActivateGameOverlayToStore(_this->linux_side, nAppID, eFlag);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_SetPlayedWith, 12)
+void __thiscall winISteamFriends_SteamFriends014_SetPlayedWith(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDUserPlayedWith)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends014_SetPlayedWith(_this->linux_side, steamIDUserPlayedWith);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_ActivateGameOverlayInviteDialog, 12)
+void __thiscall winISteamFriends_SteamFriends014_ActivateGameOverlayInviteDialog(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends014_ActivateGameOverlayInviteDialog(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetSmallFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends014_GetSmallFriendAvatar(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetSmallFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetMediumFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends014_GetMediumFriendAvatar(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetMediumFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetLargeFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends014_GetLargeFriendAvatar(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetLargeFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_RequestUserInformation, 13)
+bool __thiscall winISteamFriends_SteamFriends014_RequestUserInformation(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDUser, bool bRequireNameOnly)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_RequestUserInformation(_this->linux_side, steamIDUser, bRequireNameOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_RequestClanOfficerList, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends014_RequestClanOfficerList(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_RequestClanOfficerList(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetClanOwner, 16)
+CSteamID *__thiscall winISteamFriends_SteamFriends014_GetClanOwner(winISteamFriends_SteamFriends014 *_this, CSteamID *_r, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends014_GetClanOwner(_this->linux_side, steamIDClan);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetClanOfficerCount, 12)
+int __thiscall winISteamFriends_SteamFriends014_GetClanOfficerCount(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetClanOfficerCount(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetClanOfficerByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends014_GetClanOfficerByIndex(winISteamFriends_SteamFriends014 *_this, CSteamID *_r, CSteamID steamIDClan, int iOfficer)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends014_GetClanOfficerByIndex(_this->linux_side, steamIDClan, iOfficer);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetUserRestrictions, 4)
+uint32 __thiscall winISteamFriends_SteamFriends014_GetUserRestrictions(winISteamFriends_SteamFriends014 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetUserRestrictions(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_SetRichPresence, 12)
+bool __thiscall winISteamFriends_SteamFriends014_SetRichPresence(winISteamFriends_SteamFriends014 *_this, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_SetRichPresence(_this->linux_side, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_ClearRichPresence, 4)
+void __thiscall winISteamFriends_SteamFriends014_ClearRichPresence(winISteamFriends_SteamFriends014 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends014_ClearRichPresence(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetFriendRichPresence, 16)
+const char * __thiscall winISteamFriends_SteamFriends014_GetFriendRichPresence(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDFriend, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetFriendRichPresence(_this->linux_side, steamIDFriend, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetFriendRichPresenceKeyCount, 12)
+int __thiscall winISteamFriends_SteamFriends014_GetFriendRichPresenceKeyCount(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetFriendRichPresenceKeyCount(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetFriendRichPresenceKeyByIndex, 16)
+const char * __thiscall winISteamFriends_SteamFriends014_GetFriendRichPresenceKeyByIndex(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDFriend, int iKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetFriendRichPresenceKeyByIndex(_this->linux_side, steamIDFriend, iKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_RequestFriendRichPresence, 12)
+void __thiscall winISteamFriends_SteamFriends014_RequestFriendRichPresence(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends014_RequestFriendRichPresence(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_InviteUserToGame, 16)
+bool __thiscall winISteamFriends_SteamFriends014_InviteUserToGame(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDFriend, const char * pchConnectString)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_InviteUserToGame(_this->linux_side, steamIDFriend, pchConnectString);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetCoplayFriendCount, 4)
+int __thiscall winISteamFriends_SteamFriends014_GetCoplayFriendCount(winISteamFriends_SteamFriends014 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetCoplayFriendCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetCoplayFriend, 12)
+CSteamID *__thiscall winISteamFriends_SteamFriends014_GetCoplayFriend(winISteamFriends_SteamFriends014 *_this, CSteamID *_r, int iCoplayFriend)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends014_GetCoplayFriend(_this->linux_side, iCoplayFriend);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetFriendCoplayTime, 12)
+int __thiscall winISteamFriends_SteamFriends014_GetFriendCoplayTime(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetFriendCoplayTime(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetFriendCoplayGame, 12)
+AppId_t __thiscall winISteamFriends_SteamFriends014_GetFriendCoplayGame(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetFriendCoplayGame(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_JoinClanChatRoom, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends014_JoinClanChatRoom(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_JoinClanChatRoom(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_LeaveClanChatRoom, 12)
+bool __thiscall winISteamFriends_SteamFriends014_LeaveClanChatRoom(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_LeaveClanChatRoom(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetClanChatMemberCount, 12)
+int __thiscall winISteamFriends_SteamFriends014_GetClanChatMemberCount(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetClanChatMemberCount(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetChatMemberByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends014_GetChatMemberByIndex(winISteamFriends_SteamFriends014 *_this, CSteamID *_r, CSteamID steamIDClan, int iUser)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends014_GetChatMemberByIndex(_this->linux_side, steamIDClan, iUser);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_SendClanChatMessage, 16)
+bool __thiscall winISteamFriends_SteamFriends014_SendClanChatMessage(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDClanChat, const char * pchText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_SendClanChatMessage(_this->linux_side, steamIDClanChat, pchText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetClanChatMessage, 32)
+int __thiscall winISteamFriends_SteamFriends014_GetClanChatMessage(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * peChatEntryType, CSteamID * psteamidChatter)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetClanChatMessage(_this->linux_side, steamIDClanChat, iMessage, prgchText, cchTextMax, peChatEntryType, psteamidChatter);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_IsClanChatAdmin, 20)
+bool __thiscall winISteamFriends_SteamFriends014_IsClanChatAdmin(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDClanChat, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_IsClanChatAdmin(_this->linux_side, steamIDClanChat, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_IsClanChatWindowOpenInSteam, 12)
+bool __thiscall winISteamFriends_SteamFriends014_IsClanChatWindowOpenInSteam(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDClanChat)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_IsClanChatWindowOpenInSteam(_this->linux_side, steamIDClanChat);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_OpenClanChatWindowInSteam, 12)
+bool __thiscall winISteamFriends_SteamFriends014_OpenClanChatWindowInSteam(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDClanChat)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_OpenClanChatWindowInSteam(_this->linux_side, steamIDClanChat);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_CloseClanChatWindowInSteam, 12)
+bool __thiscall winISteamFriends_SteamFriends014_CloseClanChatWindowInSteam(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDClanChat)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_CloseClanChatWindowInSteam(_this->linux_side, steamIDClanChat);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_SetListenForFriendsMessages, 5)
+bool __thiscall winISteamFriends_SteamFriends014_SetListenForFriendsMessages(winISteamFriends_SteamFriends014 *_this, bool bInterceptEnabled)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_SetListenForFriendsMessages(_this->linux_side, bInterceptEnabled);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_ReplyToFriendMessage, 16)
+bool __thiscall winISteamFriends_SteamFriends014_ReplyToFriendMessage(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDFriend, const char * pchMsgToSend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_ReplyToFriendMessage(_this->linux_side, steamIDFriend, pchMsgToSend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetFriendMessage, 28)
+int __thiscall winISteamFriends_SteamFriends014_GetFriendMessage(winISteamFriends_SteamFriends014 *_this, CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetFriendMessage(_this->linux_side, steamIDFriend, iMessageID, pvData, cubData, peChatEntryType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_GetFollowerCount, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends014_GetFollowerCount(winISteamFriends_SteamFriends014 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_GetFollowerCount(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_IsFollowing, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends014_IsFollowing(winISteamFriends_SteamFriends014 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_IsFollowing(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends014_EnumerateFollowingList, 8)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends014_EnumerateFollowingList(winISteamFriends_SteamFriends014 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends014_EnumerateFollowingList(_this->linux_side, unStartIndex);
+}
+
+extern vtable_ptr winISteamFriends_SteamFriends014_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamFriends_SteamFriends014,
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_SetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetFriendCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetFriendByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetFriendRelationship)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetFriendPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetFriendPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetFriendGamePlayed)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetFriendPersonaNameHistory)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetPlayerNickname)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_HasFriend)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetClanCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetClanByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetClanName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetClanTag)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetClanActivityCounts)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_DownloadClanActivityCounts)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetFriendCountFromSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetFriendFromSourceByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_IsUserInSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_SetInGameVoiceSpeaking)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_ActivateGameOverlay)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_ActivateGameOverlayToUser)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_ActivateGameOverlayToWebPage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_ActivateGameOverlayToStore)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_SetPlayedWith)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_ActivateGameOverlayInviteDialog)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetSmallFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetMediumFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetLargeFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_RequestUserInformation)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_RequestClanOfficerList)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetClanOwner)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetClanOfficerCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetClanOfficerByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetUserRestrictions)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_SetRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_ClearRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetFriendRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetFriendRichPresenceKeyCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetFriendRichPresenceKeyByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_RequestFriendRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_InviteUserToGame)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetCoplayFriendCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetCoplayFriend)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetFriendCoplayTime)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetFriendCoplayGame)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_JoinClanChatRoom)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_LeaveClanChatRoom)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetClanChatMemberCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetChatMemberByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_SendClanChatMessage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetClanChatMessage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_IsClanChatAdmin)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_IsClanChatWindowOpenInSteam)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_OpenClanChatWindowInSteam)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_CloseClanChatWindowInSteam)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_SetListenForFriendsMessages)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_ReplyToFriendMessage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetFriendMessage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_GetFollowerCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_IsFollowing)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends014_EnumerateFollowingList)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamFriends_SteamFriends014 *create_winISteamFriends_SteamFriends014(void *linux_side)
+{
+ winISteamFriends_SteamFriends014 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamFriends_SteamFriends014));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamFriends_SteamFriends014_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamFriends_SteamFriends013.h"
+
+typedef struct __winISteamFriends_SteamFriends013 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamFriends_SteamFriends013;
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetPersonaName, 4)
+const char * __thiscall winISteamFriends_SteamFriends013_GetPersonaName(winISteamFriends_SteamFriends013 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetPersonaName(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_SetPersonaName, 8)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends013_SetPersonaName(winISteamFriends_SteamFriends013 *_this, const char * pchPersonaName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_SetPersonaName(_this->linux_side, pchPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetPersonaState, 4)
+EPersonaState __thiscall winISteamFriends_SteamFriends013_GetPersonaState(winISteamFriends_SteamFriends013 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetPersonaState(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetFriendCount, 8)
+int __thiscall winISteamFriends_SteamFriends013_GetFriendCount(winISteamFriends_SteamFriends013 *_this, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetFriendCount(_this->linux_side, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetFriendByIndex, 16)
+CSteamID *__thiscall winISteamFriends_SteamFriends013_GetFriendByIndex(winISteamFriends_SteamFriends013 *_this, CSteamID *_r, int iFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends013_GetFriendByIndex(_this->linux_side, iFriend, iFriendFlags);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetFriendRelationship, 12)
+EFriendRelationship __thiscall winISteamFriends_SteamFriends013_GetFriendRelationship(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetFriendRelationship(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetFriendPersonaState, 12)
+EPersonaState __thiscall winISteamFriends_SteamFriends013_GetFriendPersonaState(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetFriendPersonaState(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetFriendPersonaName, 12)
+const char * __thiscall winISteamFriends_SteamFriends013_GetFriendPersonaName(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetFriendPersonaName(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetFriendGamePlayed, 16)
+bool __thiscall winISteamFriends_SteamFriends013_GetFriendGamePlayed(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDFriend, FriendGameInfo_t * pFriendGameInfo)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetFriendGamePlayed(_this->linux_side, steamIDFriend, pFriendGameInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetFriendPersonaNameHistory, 16)
+const char * __thiscall winISteamFriends_SteamFriends013_GetFriendPersonaNameHistory(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDFriend, int iPersonaName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetFriendPersonaNameHistory(_this->linux_side, steamIDFriend, iPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_HasFriend, 16)
+bool __thiscall winISteamFriends_SteamFriends013_HasFriend(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_HasFriend(_this->linux_side, steamIDFriend, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetClanCount, 4)
+int __thiscall winISteamFriends_SteamFriends013_GetClanCount(winISteamFriends_SteamFriends013 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetClanCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetClanByIndex, 12)
+CSteamID *__thiscall winISteamFriends_SteamFriends013_GetClanByIndex(winISteamFriends_SteamFriends013 *_this, CSteamID *_r, int iClan)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends013_GetClanByIndex(_this->linux_side, iClan);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetClanName, 12)
+const char * __thiscall winISteamFriends_SteamFriends013_GetClanName(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetClanName(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetClanTag, 12)
+const char * __thiscall winISteamFriends_SteamFriends013_GetClanTag(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetClanTag(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetClanActivityCounts, 24)
+bool __thiscall winISteamFriends_SteamFriends013_GetClanActivityCounts(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetClanActivityCounts(_this->linux_side, steamIDClan, pnOnline, pnInGame, pnChatting);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_DownloadClanActivityCounts, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends013_DownloadClanActivityCounts(winISteamFriends_SteamFriends013 *_this, CSteamID * psteamIDClans, int cClansToRequest)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_DownloadClanActivityCounts(_this->linux_side, psteamIDClans, cClansToRequest);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetFriendCountFromSource, 12)
+int __thiscall winISteamFriends_SteamFriends013_GetFriendCountFromSource(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetFriendCountFromSource(_this->linux_side, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetFriendFromSourceByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends013_GetFriendFromSourceByIndex(winISteamFriends_SteamFriends013 *_this, CSteamID *_r, CSteamID steamIDSource, int iFriend)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends013_GetFriendFromSourceByIndex(_this->linux_side, steamIDSource, iFriend);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_IsUserInSource, 20)
+bool __thiscall winISteamFriends_SteamFriends013_IsUserInSource(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_IsUserInSource(_this->linux_side, steamIDUser, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_SetInGameVoiceSpeaking, 13)
+void __thiscall winISteamFriends_SteamFriends013_SetInGameVoiceSpeaking(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDUser, bool bSpeaking)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends013_SetInGameVoiceSpeaking(_this->linux_side, steamIDUser, bSpeaking);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_ActivateGameOverlay, 8)
+void __thiscall winISteamFriends_SteamFriends013_ActivateGameOverlay(winISteamFriends_SteamFriends013 *_this, const char * pchDialog)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends013_ActivateGameOverlay(_this->linux_side, pchDialog);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_ActivateGameOverlayToUser, 16)
+void __thiscall winISteamFriends_SteamFriends013_ActivateGameOverlayToUser(winISteamFriends_SteamFriends013 *_this, const char * pchDialog, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends013_ActivateGameOverlayToUser(_this->linux_side, pchDialog, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_ActivateGameOverlayToWebPage, 8)
+void __thiscall winISteamFriends_SteamFriends013_ActivateGameOverlayToWebPage(winISteamFriends_SteamFriends013 *_this, const char * pchURL)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends013_ActivateGameOverlayToWebPage(_this->linux_side, pchURL);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_ActivateGameOverlayToStore, 12)
+void __thiscall winISteamFriends_SteamFriends013_ActivateGameOverlayToStore(winISteamFriends_SteamFriends013 *_this, AppId_t nAppID, EOverlayToStoreFlag eFlag)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends013_ActivateGameOverlayToStore(_this->linux_side, nAppID, eFlag);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_SetPlayedWith, 12)
+void __thiscall winISteamFriends_SteamFriends013_SetPlayedWith(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDUserPlayedWith)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends013_SetPlayedWith(_this->linux_side, steamIDUserPlayedWith);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_ActivateGameOverlayInviteDialog, 12)
+void __thiscall winISteamFriends_SteamFriends013_ActivateGameOverlayInviteDialog(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends013_ActivateGameOverlayInviteDialog(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetSmallFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends013_GetSmallFriendAvatar(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetSmallFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetMediumFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends013_GetMediumFriendAvatar(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetMediumFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetLargeFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends013_GetLargeFriendAvatar(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetLargeFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_RequestUserInformation, 13)
+bool __thiscall winISteamFriends_SteamFriends013_RequestUserInformation(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDUser, bool bRequireNameOnly)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_RequestUserInformation(_this->linux_side, steamIDUser, bRequireNameOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_RequestClanOfficerList, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends013_RequestClanOfficerList(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_RequestClanOfficerList(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetClanOwner, 16)
+CSteamID *__thiscall winISteamFriends_SteamFriends013_GetClanOwner(winISteamFriends_SteamFriends013 *_this, CSteamID *_r, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends013_GetClanOwner(_this->linux_side, steamIDClan);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetClanOfficerCount, 12)
+int __thiscall winISteamFriends_SteamFriends013_GetClanOfficerCount(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetClanOfficerCount(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetClanOfficerByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends013_GetClanOfficerByIndex(winISteamFriends_SteamFriends013 *_this, CSteamID *_r, CSteamID steamIDClan, int iOfficer)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends013_GetClanOfficerByIndex(_this->linux_side, steamIDClan, iOfficer);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetUserRestrictions, 4)
+uint32 __thiscall winISteamFriends_SteamFriends013_GetUserRestrictions(winISteamFriends_SteamFriends013 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetUserRestrictions(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_SetRichPresence, 12)
+bool __thiscall winISteamFriends_SteamFriends013_SetRichPresence(winISteamFriends_SteamFriends013 *_this, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_SetRichPresence(_this->linux_side, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_ClearRichPresence, 4)
+void __thiscall winISteamFriends_SteamFriends013_ClearRichPresence(winISteamFriends_SteamFriends013 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends013_ClearRichPresence(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetFriendRichPresence, 16)
+const char * __thiscall winISteamFriends_SteamFriends013_GetFriendRichPresence(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDFriend, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetFriendRichPresence(_this->linux_side, steamIDFriend, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetFriendRichPresenceKeyCount, 12)
+int __thiscall winISteamFriends_SteamFriends013_GetFriendRichPresenceKeyCount(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetFriendRichPresenceKeyCount(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetFriendRichPresenceKeyByIndex, 16)
+const char * __thiscall winISteamFriends_SteamFriends013_GetFriendRichPresenceKeyByIndex(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDFriend, int iKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetFriendRichPresenceKeyByIndex(_this->linux_side, steamIDFriend, iKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_RequestFriendRichPresence, 12)
+void __thiscall winISteamFriends_SteamFriends013_RequestFriendRichPresence(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends013_RequestFriendRichPresence(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_InviteUserToGame, 16)
+bool __thiscall winISteamFriends_SteamFriends013_InviteUserToGame(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDFriend, const char * pchConnectString)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_InviteUserToGame(_this->linux_side, steamIDFriend, pchConnectString);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetCoplayFriendCount, 4)
+int __thiscall winISteamFriends_SteamFriends013_GetCoplayFriendCount(winISteamFriends_SteamFriends013 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetCoplayFriendCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetCoplayFriend, 12)
+CSteamID *__thiscall winISteamFriends_SteamFriends013_GetCoplayFriend(winISteamFriends_SteamFriends013 *_this, CSteamID *_r, int iCoplayFriend)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends013_GetCoplayFriend(_this->linux_side, iCoplayFriend);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetFriendCoplayTime, 12)
+int __thiscall winISteamFriends_SteamFriends013_GetFriendCoplayTime(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetFriendCoplayTime(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetFriendCoplayGame, 12)
+AppId_t __thiscall winISteamFriends_SteamFriends013_GetFriendCoplayGame(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetFriendCoplayGame(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_JoinClanChatRoom, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends013_JoinClanChatRoom(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_JoinClanChatRoom(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_LeaveClanChatRoom, 12)
+bool __thiscall winISteamFriends_SteamFriends013_LeaveClanChatRoom(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_LeaveClanChatRoom(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetClanChatMemberCount, 12)
+int __thiscall winISteamFriends_SteamFriends013_GetClanChatMemberCount(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetClanChatMemberCount(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetChatMemberByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends013_GetChatMemberByIndex(winISteamFriends_SteamFriends013 *_this, CSteamID *_r, CSteamID steamIDClan, int iUser)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends013_GetChatMemberByIndex(_this->linux_side, steamIDClan, iUser);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_SendClanChatMessage, 16)
+bool __thiscall winISteamFriends_SteamFriends013_SendClanChatMessage(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDClanChat, const char * pchText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_SendClanChatMessage(_this->linux_side, steamIDClanChat, pchText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetClanChatMessage, 32)
+int __thiscall winISteamFriends_SteamFriends013_GetClanChatMessage(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * _a, CSteamID * _b)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetClanChatMessage(_this->linux_side, steamIDClanChat, iMessage, prgchText, cchTextMax, _a, _b);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_IsClanChatAdmin, 20)
+bool __thiscall winISteamFriends_SteamFriends013_IsClanChatAdmin(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDClanChat, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_IsClanChatAdmin(_this->linux_side, steamIDClanChat, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_IsClanChatWindowOpenInSteam, 12)
+bool __thiscall winISteamFriends_SteamFriends013_IsClanChatWindowOpenInSteam(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDClanChat)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_IsClanChatWindowOpenInSteam(_this->linux_side, steamIDClanChat);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_OpenClanChatWindowInSteam, 12)
+bool __thiscall winISteamFriends_SteamFriends013_OpenClanChatWindowInSteam(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDClanChat)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_OpenClanChatWindowInSteam(_this->linux_side, steamIDClanChat);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_CloseClanChatWindowInSteam, 12)
+bool __thiscall winISteamFriends_SteamFriends013_CloseClanChatWindowInSteam(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDClanChat)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_CloseClanChatWindowInSteam(_this->linux_side, steamIDClanChat);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_SetListenForFriendsMessages, 5)
+bool __thiscall winISteamFriends_SteamFriends013_SetListenForFriendsMessages(winISteamFriends_SteamFriends013 *_this, bool bInterceptEnabled)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_SetListenForFriendsMessages(_this->linux_side, bInterceptEnabled);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_ReplyToFriendMessage, 16)
+bool __thiscall winISteamFriends_SteamFriends013_ReplyToFriendMessage(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDFriend, const char * pchMsgToSend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_ReplyToFriendMessage(_this->linux_side, steamIDFriend, pchMsgToSend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetFriendMessage, 28)
+int __thiscall winISteamFriends_SteamFriends013_GetFriendMessage(winISteamFriends_SteamFriends013 *_this, CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetFriendMessage(_this->linux_side, steamIDFriend, iMessageID, pvData, cubData, peChatEntryType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_GetFollowerCount, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends013_GetFollowerCount(winISteamFriends_SteamFriends013 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_GetFollowerCount(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_IsFollowing, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends013_IsFollowing(winISteamFriends_SteamFriends013 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_IsFollowing(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends013_EnumerateFollowingList, 8)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends013_EnumerateFollowingList(winISteamFriends_SteamFriends013 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends013_EnumerateFollowingList(_this->linux_side, unStartIndex);
+}
+
+extern vtable_ptr winISteamFriends_SteamFriends013_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamFriends_SteamFriends013,
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_SetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetFriendCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetFriendByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetFriendRelationship)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetFriendPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetFriendPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetFriendGamePlayed)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetFriendPersonaNameHistory)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_HasFriend)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetClanCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetClanByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetClanName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetClanTag)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetClanActivityCounts)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_DownloadClanActivityCounts)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetFriendCountFromSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetFriendFromSourceByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_IsUserInSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_SetInGameVoiceSpeaking)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_ActivateGameOverlay)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_ActivateGameOverlayToUser)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_ActivateGameOverlayToWebPage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_ActivateGameOverlayToStore)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_SetPlayedWith)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_ActivateGameOverlayInviteDialog)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetSmallFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetMediumFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetLargeFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_RequestUserInformation)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_RequestClanOfficerList)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetClanOwner)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetClanOfficerCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetClanOfficerByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetUserRestrictions)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_SetRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_ClearRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetFriendRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetFriendRichPresenceKeyCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetFriendRichPresenceKeyByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_RequestFriendRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_InviteUserToGame)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetCoplayFriendCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetCoplayFriend)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetFriendCoplayTime)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetFriendCoplayGame)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_JoinClanChatRoom)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_LeaveClanChatRoom)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetClanChatMemberCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetChatMemberByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_SendClanChatMessage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetClanChatMessage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_IsClanChatAdmin)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_IsClanChatWindowOpenInSteam)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_OpenClanChatWindowInSteam)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_CloseClanChatWindowInSteam)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_SetListenForFriendsMessages)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_ReplyToFriendMessage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetFriendMessage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_GetFollowerCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_IsFollowing)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends013_EnumerateFollowingList)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamFriends_SteamFriends013 *create_winISteamFriends_SteamFriends013(void *linux_side)
+{
+ winISteamFriends_SteamFriends013 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamFriends_SteamFriends013));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamFriends_SteamFriends013_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamFriends_SteamFriends011.h"
+
+typedef struct __winISteamFriends_SteamFriends011 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamFriends_SteamFriends011;
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetPersonaName, 4)
+const char * __thiscall winISteamFriends_SteamFriends011_GetPersonaName(winISteamFriends_SteamFriends011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetPersonaName(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_SetPersonaName, 8)
+void __thiscall winISteamFriends_SteamFriends011_SetPersonaName(winISteamFriends_SteamFriends011 *_this, const char * pchPersonaName)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends011_SetPersonaName(_this->linux_side, pchPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetPersonaState, 4)
+EPersonaState __thiscall winISteamFriends_SteamFriends011_GetPersonaState(winISteamFriends_SteamFriends011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetPersonaState(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetFriendCount, 8)
+int __thiscall winISteamFriends_SteamFriends011_GetFriendCount(winISteamFriends_SteamFriends011 *_this, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetFriendCount(_this->linux_side, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetFriendByIndex, 16)
+CSteamID *__thiscall winISteamFriends_SteamFriends011_GetFriendByIndex(winISteamFriends_SteamFriends011 *_this, CSteamID *_r, int iFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends011_GetFriendByIndex(_this->linux_side, iFriend, iFriendFlags);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetFriendRelationship, 12)
+EFriendRelationship __thiscall winISteamFriends_SteamFriends011_GetFriendRelationship(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetFriendRelationship(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetFriendPersonaState, 12)
+EPersonaState __thiscall winISteamFriends_SteamFriends011_GetFriendPersonaState(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetFriendPersonaState(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetFriendPersonaName, 12)
+const char * __thiscall winISteamFriends_SteamFriends011_GetFriendPersonaName(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetFriendPersonaName(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetFriendGamePlayed, 16)
+bool __thiscall winISteamFriends_SteamFriends011_GetFriendGamePlayed(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDFriend, FriendGameInfo_t * pFriendGameInfo)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetFriendGamePlayed(_this->linux_side, steamIDFriend, pFriendGameInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetFriendPersonaNameHistory, 16)
+const char * __thiscall winISteamFriends_SteamFriends011_GetFriendPersonaNameHistory(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDFriend, int iPersonaName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetFriendPersonaNameHistory(_this->linux_side, steamIDFriend, iPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_HasFriend, 16)
+bool __thiscall winISteamFriends_SteamFriends011_HasFriend(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_HasFriend(_this->linux_side, steamIDFriend, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetClanCount, 4)
+int __thiscall winISteamFriends_SteamFriends011_GetClanCount(winISteamFriends_SteamFriends011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetClanCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetClanByIndex, 12)
+CSteamID *__thiscall winISteamFriends_SteamFriends011_GetClanByIndex(winISteamFriends_SteamFriends011 *_this, CSteamID *_r, int iClan)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends011_GetClanByIndex(_this->linux_side, iClan);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetClanName, 12)
+const char * __thiscall winISteamFriends_SteamFriends011_GetClanName(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetClanName(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetClanTag, 12)
+const char * __thiscall winISteamFriends_SteamFriends011_GetClanTag(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetClanTag(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetClanActivityCounts, 24)
+bool __thiscall winISteamFriends_SteamFriends011_GetClanActivityCounts(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDClan, int * pnOnline, int * pnInGame, int * pnChatting)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetClanActivityCounts(_this->linux_side, steamIDClan, pnOnline, pnInGame, pnChatting);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_DownloadClanActivityCounts, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends011_DownloadClanActivityCounts(winISteamFriends_SteamFriends011 *_this, CSteamID * psteamIDClans, int cClansToRequest)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_DownloadClanActivityCounts(_this->linux_side, psteamIDClans, cClansToRequest);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetFriendCountFromSource, 12)
+int __thiscall winISteamFriends_SteamFriends011_GetFriendCountFromSource(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetFriendCountFromSource(_this->linux_side, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetFriendFromSourceByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends011_GetFriendFromSourceByIndex(winISteamFriends_SteamFriends011 *_this, CSteamID *_r, CSteamID steamIDSource, int iFriend)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends011_GetFriendFromSourceByIndex(_this->linux_side, steamIDSource, iFriend);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_IsUserInSource, 20)
+bool __thiscall winISteamFriends_SteamFriends011_IsUserInSource(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_IsUserInSource(_this->linux_side, steamIDUser, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_SetInGameVoiceSpeaking, 13)
+void __thiscall winISteamFriends_SteamFriends011_SetInGameVoiceSpeaking(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDUser, bool bSpeaking)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends011_SetInGameVoiceSpeaking(_this->linux_side, steamIDUser, bSpeaking);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_ActivateGameOverlay, 8)
+void __thiscall winISteamFriends_SteamFriends011_ActivateGameOverlay(winISteamFriends_SteamFriends011 *_this, const char * pchDialog)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends011_ActivateGameOverlay(_this->linux_side, pchDialog);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_ActivateGameOverlayToUser, 16)
+void __thiscall winISteamFriends_SteamFriends011_ActivateGameOverlayToUser(winISteamFriends_SteamFriends011 *_this, const char * pchDialog, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends011_ActivateGameOverlayToUser(_this->linux_side, pchDialog, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_ActivateGameOverlayToWebPage, 8)
+void __thiscall winISteamFriends_SteamFriends011_ActivateGameOverlayToWebPage(winISteamFriends_SteamFriends011 *_this, const char * pchURL)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends011_ActivateGameOverlayToWebPage(_this->linux_side, pchURL);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_ActivateGameOverlayToStore, 8)
+void __thiscall winISteamFriends_SteamFriends011_ActivateGameOverlayToStore(winISteamFriends_SteamFriends011 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends011_ActivateGameOverlayToStore(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_SetPlayedWith, 12)
+void __thiscall winISteamFriends_SteamFriends011_SetPlayedWith(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDUserPlayedWith)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends011_SetPlayedWith(_this->linux_side, steamIDUserPlayedWith);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_ActivateGameOverlayInviteDialog, 12)
+void __thiscall winISteamFriends_SteamFriends011_ActivateGameOverlayInviteDialog(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends011_ActivateGameOverlayInviteDialog(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetSmallFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends011_GetSmallFriendAvatar(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetSmallFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetMediumFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends011_GetMediumFriendAvatar(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetMediumFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetLargeFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends011_GetLargeFriendAvatar(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetLargeFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_RequestUserInformation, 13)
+bool __thiscall winISteamFriends_SteamFriends011_RequestUserInformation(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDUser, bool bRequireNameOnly)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_RequestUserInformation(_this->linux_side, steamIDUser, bRequireNameOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_RequestClanOfficerList, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends011_RequestClanOfficerList(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_RequestClanOfficerList(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetClanOwner, 16)
+CSteamID *__thiscall winISteamFriends_SteamFriends011_GetClanOwner(winISteamFriends_SteamFriends011 *_this, CSteamID *_r, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends011_GetClanOwner(_this->linux_side, steamIDClan);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetClanOfficerCount, 12)
+int __thiscall winISteamFriends_SteamFriends011_GetClanOfficerCount(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetClanOfficerCount(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetClanOfficerByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends011_GetClanOfficerByIndex(winISteamFriends_SteamFriends011 *_this, CSteamID *_r, CSteamID steamIDClan, int iOfficer)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends011_GetClanOfficerByIndex(_this->linux_side, steamIDClan, iOfficer);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetUserRestrictions, 4)
+uint32 __thiscall winISteamFriends_SteamFriends011_GetUserRestrictions(winISteamFriends_SteamFriends011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetUserRestrictions(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_SetRichPresence, 12)
+bool __thiscall winISteamFriends_SteamFriends011_SetRichPresence(winISteamFriends_SteamFriends011 *_this, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_SetRichPresence(_this->linux_side, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_ClearRichPresence, 4)
+void __thiscall winISteamFriends_SteamFriends011_ClearRichPresence(winISteamFriends_SteamFriends011 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends011_ClearRichPresence(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetFriendRichPresence, 16)
+const char * __thiscall winISteamFriends_SteamFriends011_GetFriendRichPresence(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDFriend, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetFriendRichPresence(_this->linux_side, steamIDFriend, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetFriendRichPresenceKeyCount, 12)
+int __thiscall winISteamFriends_SteamFriends011_GetFriendRichPresenceKeyCount(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetFriendRichPresenceKeyCount(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetFriendRichPresenceKeyByIndex, 16)
+const char * __thiscall winISteamFriends_SteamFriends011_GetFriendRichPresenceKeyByIndex(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDFriend, int iKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetFriendRichPresenceKeyByIndex(_this->linux_side, steamIDFriend, iKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_RequestFriendRichPresence, 12)
+void __thiscall winISteamFriends_SteamFriends011_RequestFriendRichPresence(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends011_RequestFriendRichPresence(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_InviteUserToGame, 16)
+bool __thiscall winISteamFriends_SteamFriends011_InviteUserToGame(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDFriend, const char * pchConnectString)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_InviteUserToGame(_this->linux_side, steamIDFriend, pchConnectString);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetCoplayFriendCount, 4)
+int __thiscall winISteamFriends_SteamFriends011_GetCoplayFriendCount(winISteamFriends_SteamFriends011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetCoplayFriendCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetCoplayFriend, 12)
+CSteamID *__thiscall winISteamFriends_SteamFriends011_GetCoplayFriend(winISteamFriends_SteamFriends011 *_this, CSteamID *_r, int iCoplayFriend)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends011_GetCoplayFriend(_this->linux_side, iCoplayFriend);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetFriendCoplayTime, 12)
+int __thiscall winISteamFriends_SteamFriends011_GetFriendCoplayTime(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetFriendCoplayTime(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetFriendCoplayGame, 12)
+AppId_t __thiscall winISteamFriends_SteamFriends011_GetFriendCoplayGame(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetFriendCoplayGame(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_JoinClanChatRoom, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends011_JoinClanChatRoom(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_JoinClanChatRoom(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_LeaveClanChatRoom, 12)
+bool __thiscall winISteamFriends_SteamFriends011_LeaveClanChatRoom(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_LeaveClanChatRoom(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetClanChatMemberCount, 12)
+int __thiscall winISteamFriends_SteamFriends011_GetClanChatMemberCount(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetClanChatMemberCount(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetChatMemberByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends011_GetChatMemberByIndex(winISteamFriends_SteamFriends011 *_this, CSteamID *_r, CSteamID steamIDClan, int iUser)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends011_GetChatMemberByIndex(_this->linux_side, steamIDClan, iUser);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_SendClanChatMessage, 16)
+bool __thiscall winISteamFriends_SteamFriends011_SendClanChatMessage(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDClanChat, const char * pchText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_SendClanChatMessage(_this->linux_side, steamIDClanChat, pchText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetClanChatMessage, 32)
+int __thiscall winISteamFriends_SteamFriends011_GetClanChatMessage(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDClanChat, int iMessage, void * prgchText, int cchTextMax, EChatEntryType * _a, CSteamID * _b)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetClanChatMessage(_this->linux_side, steamIDClanChat, iMessage, prgchText, cchTextMax, _a, _b);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_IsClanChatAdmin, 20)
+bool __thiscall winISteamFriends_SteamFriends011_IsClanChatAdmin(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDClanChat, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_IsClanChatAdmin(_this->linux_side, steamIDClanChat, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_IsClanChatWindowOpenInSteam, 12)
+bool __thiscall winISteamFriends_SteamFriends011_IsClanChatWindowOpenInSteam(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDClanChat)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_IsClanChatWindowOpenInSteam(_this->linux_side, steamIDClanChat);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_OpenClanChatWindowInSteam, 12)
+bool __thiscall winISteamFriends_SteamFriends011_OpenClanChatWindowInSteam(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDClanChat)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_OpenClanChatWindowInSteam(_this->linux_side, steamIDClanChat);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_CloseClanChatWindowInSteam, 12)
+bool __thiscall winISteamFriends_SteamFriends011_CloseClanChatWindowInSteam(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDClanChat)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_CloseClanChatWindowInSteam(_this->linux_side, steamIDClanChat);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_SetListenForFriendsMessages, 5)
+bool __thiscall winISteamFriends_SteamFriends011_SetListenForFriendsMessages(winISteamFriends_SteamFriends011 *_this, bool bInterceptEnabled)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_SetListenForFriendsMessages(_this->linux_side, bInterceptEnabled);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_ReplyToFriendMessage, 16)
+bool __thiscall winISteamFriends_SteamFriends011_ReplyToFriendMessage(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDFriend, const char * pchMsgToSend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_ReplyToFriendMessage(_this->linux_side, steamIDFriend, pchMsgToSend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetFriendMessage, 28)
+int __thiscall winISteamFriends_SteamFriends011_GetFriendMessage(winISteamFriends_SteamFriends011 *_this, CSteamID steamIDFriend, int iMessageID, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetFriendMessage(_this->linux_side, steamIDFriend, iMessageID, pvData, cubData, peChatEntryType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_GetFollowerCount, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends011_GetFollowerCount(winISteamFriends_SteamFriends011 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_GetFollowerCount(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_IsFollowing, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends011_IsFollowing(winISteamFriends_SteamFriends011 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_IsFollowing(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends011_EnumerateFollowingList, 8)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends011_EnumerateFollowingList(winISteamFriends_SteamFriends011 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends011_EnumerateFollowingList(_this->linux_side, unStartIndex);
+}
+
+extern vtable_ptr winISteamFriends_SteamFriends011_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamFriends_SteamFriends011,
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_SetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetFriendCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetFriendByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetFriendRelationship)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetFriendPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetFriendPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetFriendGamePlayed)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetFriendPersonaNameHistory)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_HasFriend)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetClanCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetClanByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetClanName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetClanTag)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetClanActivityCounts)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_DownloadClanActivityCounts)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetFriendCountFromSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetFriendFromSourceByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_IsUserInSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_SetInGameVoiceSpeaking)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_ActivateGameOverlay)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_ActivateGameOverlayToUser)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_ActivateGameOverlayToWebPage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_ActivateGameOverlayToStore)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_SetPlayedWith)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_ActivateGameOverlayInviteDialog)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetSmallFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetMediumFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetLargeFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_RequestUserInformation)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_RequestClanOfficerList)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetClanOwner)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetClanOfficerCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetClanOfficerByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetUserRestrictions)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_SetRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_ClearRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetFriendRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetFriendRichPresenceKeyCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetFriendRichPresenceKeyByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_RequestFriendRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_InviteUserToGame)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetCoplayFriendCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetCoplayFriend)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetFriendCoplayTime)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetFriendCoplayGame)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_JoinClanChatRoom)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_LeaveClanChatRoom)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetClanChatMemberCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetChatMemberByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_SendClanChatMessage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetClanChatMessage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_IsClanChatAdmin)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_IsClanChatWindowOpenInSteam)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_OpenClanChatWindowInSteam)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_CloseClanChatWindowInSteam)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_SetListenForFriendsMessages)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_ReplyToFriendMessage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetFriendMessage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_GetFollowerCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_IsFollowing)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends011_EnumerateFollowingList)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamFriends_SteamFriends011 *create_winISteamFriends_SteamFriends011(void *linux_side)
+{
+ winISteamFriends_SteamFriends011 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamFriends_SteamFriends011));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamFriends_SteamFriends011_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamFriends_SteamFriends009.h"
+
+typedef struct __winISteamFriends_SteamFriends009 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamFriends_SteamFriends009;
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetPersonaName, 4)
+const char * __thiscall winISteamFriends_SteamFriends009_GetPersonaName(winISteamFriends_SteamFriends009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetPersonaName(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_SetPersonaName, 8)
+void __thiscall winISteamFriends_SteamFriends009_SetPersonaName(winISteamFriends_SteamFriends009 *_this, const char * pchPersonaName)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends009_SetPersonaName(_this->linux_side, pchPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetPersonaState, 4)
+EPersonaState __thiscall winISteamFriends_SteamFriends009_GetPersonaState(winISteamFriends_SteamFriends009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetPersonaState(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetFriendCount, 8)
+int __thiscall winISteamFriends_SteamFriends009_GetFriendCount(winISteamFriends_SteamFriends009 *_this, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetFriendCount(_this->linux_side, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetFriendByIndex, 16)
+CSteamID *__thiscall winISteamFriends_SteamFriends009_GetFriendByIndex(winISteamFriends_SteamFriends009 *_this, CSteamID *_r, int iFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends009_GetFriendByIndex(_this->linux_side, iFriend, iFriendFlags);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetFriendRelationship, 12)
+EFriendRelationship __thiscall winISteamFriends_SteamFriends009_GetFriendRelationship(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetFriendRelationship(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetFriendPersonaState, 12)
+EPersonaState __thiscall winISteamFriends_SteamFriends009_GetFriendPersonaState(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetFriendPersonaState(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetFriendPersonaName, 12)
+const char * __thiscall winISteamFriends_SteamFriends009_GetFriendPersonaName(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetFriendPersonaName(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetFriendGamePlayed, 16)
+bool __thiscall winISteamFriends_SteamFriends009_GetFriendGamePlayed(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDFriend, FriendGameInfo_t * pFriendGameInfo)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetFriendGamePlayed(_this->linux_side, steamIDFriend, pFriendGameInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetFriendPersonaNameHistory, 16)
+const char * __thiscall winISteamFriends_SteamFriends009_GetFriendPersonaNameHistory(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDFriend, int iPersonaName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetFriendPersonaNameHistory(_this->linux_side, steamIDFriend, iPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_HasFriend, 16)
+bool __thiscall winISteamFriends_SteamFriends009_HasFriend(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_HasFriend(_this->linux_side, steamIDFriend, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetClanCount, 4)
+int __thiscall winISteamFriends_SteamFriends009_GetClanCount(winISteamFriends_SteamFriends009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetClanCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetClanByIndex, 12)
+CSteamID *__thiscall winISteamFriends_SteamFriends009_GetClanByIndex(winISteamFriends_SteamFriends009 *_this, CSteamID *_r, int iClan)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends009_GetClanByIndex(_this->linux_side, iClan);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetClanName, 12)
+const char * __thiscall winISteamFriends_SteamFriends009_GetClanName(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetClanName(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetClanTag, 12)
+const char * __thiscall winISteamFriends_SteamFriends009_GetClanTag(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetClanTag(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetFriendCountFromSource, 12)
+int __thiscall winISteamFriends_SteamFriends009_GetFriendCountFromSource(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetFriendCountFromSource(_this->linux_side, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetFriendFromSourceByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends009_GetFriendFromSourceByIndex(winISteamFriends_SteamFriends009 *_this, CSteamID *_r, CSteamID steamIDSource, int iFriend)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends009_GetFriendFromSourceByIndex(_this->linux_side, steamIDSource, iFriend);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_IsUserInSource, 20)
+bool __thiscall winISteamFriends_SteamFriends009_IsUserInSource(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_IsUserInSource(_this->linux_side, steamIDUser, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_SetInGameVoiceSpeaking, 13)
+void __thiscall winISteamFriends_SteamFriends009_SetInGameVoiceSpeaking(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDUser, bool bSpeaking)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends009_SetInGameVoiceSpeaking(_this->linux_side, steamIDUser, bSpeaking);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_ActivateGameOverlay, 8)
+void __thiscall winISteamFriends_SteamFriends009_ActivateGameOverlay(winISteamFriends_SteamFriends009 *_this, const char * pchDialog)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends009_ActivateGameOverlay(_this->linux_side, pchDialog);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_ActivateGameOverlayToUser, 16)
+void __thiscall winISteamFriends_SteamFriends009_ActivateGameOverlayToUser(winISteamFriends_SteamFriends009 *_this, const char * pchDialog, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends009_ActivateGameOverlayToUser(_this->linux_side, pchDialog, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_ActivateGameOverlayToWebPage, 8)
+void __thiscall winISteamFriends_SteamFriends009_ActivateGameOverlayToWebPage(winISteamFriends_SteamFriends009 *_this, const char * pchURL)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends009_ActivateGameOverlayToWebPage(_this->linux_side, pchURL);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_ActivateGameOverlayToStore, 8)
+void __thiscall winISteamFriends_SteamFriends009_ActivateGameOverlayToStore(winISteamFriends_SteamFriends009 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends009_ActivateGameOverlayToStore(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_SetPlayedWith, 12)
+void __thiscall winISteamFriends_SteamFriends009_SetPlayedWith(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDUserPlayedWith)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends009_SetPlayedWith(_this->linux_side, steamIDUserPlayedWith);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_ActivateGameOverlayInviteDialog, 12)
+void __thiscall winISteamFriends_SteamFriends009_ActivateGameOverlayInviteDialog(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends009_ActivateGameOverlayInviteDialog(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetSmallFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends009_GetSmallFriendAvatar(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetSmallFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetMediumFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends009_GetMediumFriendAvatar(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetMediumFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetLargeFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends009_GetLargeFriendAvatar(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetLargeFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_RequestUserInformation, 13)
+bool __thiscall winISteamFriends_SteamFriends009_RequestUserInformation(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDUser, bool bRequireNameOnly)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_RequestUserInformation(_this->linux_side, steamIDUser, bRequireNameOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_RequestClanOfficerList, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends009_RequestClanOfficerList(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_RequestClanOfficerList(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetClanOwner, 16)
+CSteamID *__thiscall winISteamFriends_SteamFriends009_GetClanOwner(winISteamFriends_SteamFriends009 *_this, CSteamID *_r, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends009_GetClanOwner(_this->linux_side, steamIDClan);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetClanOfficerCount, 12)
+int __thiscall winISteamFriends_SteamFriends009_GetClanOfficerCount(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetClanOfficerCount(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetClanOfficerByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends009_GetClanOfficerByIndex(winISteamFriends_SteamFriends009 *_this, CSteamID *_r, CSteamID steamIDClan, int iOfficer)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends009_GetClanOfficerByIndex(_this->linux_side, steamIDClan, iOfficer);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetUserRestrictions, 4)
+uint32 __thiscall winISteamFriends_SteamFriends009_GetUserRestrictions(winISteamFriends_SteamFriends009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetUserRestrictions(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_SetRichPresence, 12)
+bool __thiscall winISteamFriends_SteamFriends009_SetRichPresence(winISteamFriends_SteamFriends009 *_this, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_SetRichPresence(_this->linux_side, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_ClearRichPresence, 4)
+void __thiscall winISteamFriends_SteamFriends009_ClearRichPresence(winISteamFriends_SteamFriends009 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends009_ClearRichPresence(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetFriendRichPresence, 16)
+const char * __thiscall winISteamFriends_SteamFriends009_GetFriendRichPresence(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDFriend, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetFriendRichPresence(_this->linux_side, steamIDFriend, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetFriendRichPresenceKeyCount, 12)
+int __thiscall winISteamFriends_SteamFriends009_GetFriendRichPresenceKeyCount(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetFriendRichPresenceKeyCount(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetFriendRichPresenceKeyByIndex, 16)
+const char * __thiscall winISteamFriends_SteamFriends009_GetFriendRichPresenceKeyByIndex(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDFriend, int iKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetFriendRichPresenceKeyByIndex(_this->linux_side, steamIDFriend, iKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_InviteUserToGame, 16)
+bool __thiscall winISteamFriends_SteamFriends009_InviteUserToGame(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDFriend, const char * pchConnectString)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_InviteUserToGame(_this->linux_side, steamIDFriend, pchConnectString);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetCoplayFriendCount, 4)
+int __thiscall winISteamFriends_SteamFriends009_GetCoplayFriendCount(winISteamFriends_SteamFriends009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetCoplayFriendCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetCoplayFriend, 12)
+CSteamID *__thiscall winISteamFriends_SteamFriends009_GetCoplayFriend(winISteamFriends_SteamFriends009 *_this, CSteamID *_r, int iCoplayFriend)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends009_GetCoplayFriend(_this->linux_side, iCoplayFriend);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetFriendCoplayTime, 12)
+int __thiscall winISteamFriends_SteamFriends009_GetFriendCoplayTime(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetFriendCoplayTime(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends009_GetFriendCoplayGame, 12)
+AppId_t __thiscall winISteamFriends_SteamFriends009_GetFriendCoplayGame(winISteamFriends_SteamFriends009 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends009_GetFriendCoplayGame(_this->linux_side, steamIDFriend);
+}
+
+extern vtable_ptr winISteamFriends_SteamFriends009_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamFriends_SteamFriends009,
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_SetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetFriendCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetFriendByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetFriendRelationship)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetFriendPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetFriendPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetFriendGamePlayed)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetFriendPersonaNameHistory)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_HasFriend)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetClanCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetClanByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetClanName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetClanTag)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetFriendCountFromSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetFriendFromSourceByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_IsUserInSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_SetInGameVoiceSpeaking)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_ActivateGameOverlay)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_ActivateGameOverlayToUser)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_ActivateGameOverlayToWebPage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_ActivateGameOverlayToStore)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_SetPlayedWith)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_ActivateGameOverlayInviteDialog)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetSmallFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetMediumFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetLargeFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_RequestUserInformation)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_RequestClanOfficerList)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetClanOwner)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetClanOfficerCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetClanOfficerByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetUserRestrictions)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_SetRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_ClearRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetFriendRichPresence)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetFriendRichPresenceKeyCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetFriendRichPresenceKeyByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_InviteUserToGame)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetCoplayFriendCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetCoplayFriend)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetFriendCoplayTime)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends009_GetFriendCoplayGame)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamFriends_SteamFriends009 *create_winISteamFriends_SteamFriends009(void *linux_side)
+{
+ winISteamFriends_SteamFriends009 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamFriends_SteamFriends009));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamFriends_SteamFriends009_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamFriends_SteamFriends008.h"
+
+typedef struct __winISteamFriends_SteamFriends008 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamFriends_SteamFriends008;
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetPersonaName, 4)
+const char * __thiscall winISteamFriends_SteamFriends008_GetPersonaName(winISteamFriends_SteamFriends008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_GetPersonaName(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_SetPersonaName, 8)
+void __thiscall winISteamFriends_SteamFriends008_SetPersonaName(winISteamFriends_SteamFriends008 *_this, const char * pchPersonaName)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends008_SetPersonaName(_this->linux_side, pchPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetPersonaState, 4)
+EPersonaState __thiscall winISteamFriends_SteamFriends008_GetPersonaState(winISteamFriends_SteamFriends008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_GetPersonaState(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetFriendCount, 8)
+int __thiscall winISteamFriends_SteamFriends008_GetFriendCount(winISteamFriends_SteamFriends008 *_this, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_GetFriendCount(_this->linux_side, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetFriendByIndex, 16)
+CSteamID *__thiscall winISteamFriends_SteamFriends008_GetFriendByIndex(winISteamFriends_SteamFriends008 *_this, CSteamID *_r, int iFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends008_GetFriendByIndex(_this->linux_side, iFriend, iFriendFlags);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetFriendRelationship, 12)
+EFriendRelationship __thiscall winISteamFriends_SteamFriends008_GetFriendRelationship(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_GetFriendRelationship(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetFriendPersonaState, 12)
+EPersonaState __thiscall winISteamFriends_SteamFriends008_GetFriendPersonaState(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_GetFriendPersonaState(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetFriendPersonaName, 12)
+const char * __thiscall winISteamFriends_SteamFriends008_GetFriendPersonaName(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_GetFriendPersonaName(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetFriendGamePlayed, 16)
+bool __thiscall winISteamFriends_SteamFriends008_GetFriendGamePlayed(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDFriend, FriendGameInfo_t * pFriendGameInfo)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_GetFriendGamePlayed(_this->linux_side, steamIDFriend, pFriendGameInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetFriendPersonaNameHistory, 16)
+const char * __thiscall winISteamFriends_SteamFriends008_GetFriendPersonaNameHistory(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDFriend, int iPersonaName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_GetFriendPersonaNameHistory(_this->linux_side, steamIDFriend, iPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_HasFriend, 16)
+bool __thiscall winISteamFriends_SteamFriends008_HasFriend(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_HasFriend(_this->linux_side, steamIDFriend, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetClanCount, 4)
+int __thiscall winISteamFriends_SteamFriends008_GetClanCount(winISteamFriends_SteamFriends008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_GetClanCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetClanByIndex, 12)
+CSteamID *__thiscall winISteamFriends_SteamFriends008_GetClanByIndex(winISteamFriends_SteamFriends008 *_this, CSteamID *_r, int iClan)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends008_GetClanByIndex(_this->linux_side, iClan);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetClanName, 12)
+const char * __thiscall winISteamFriends_SteamFriends008_GetClanName(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_GetClanName(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetClanTag, 12)
+const char * __thiscall winISteamFriends_SteamFriends008_GetClanTag(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_GetClanTag(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetFriendCountFromSource, 12)
+int __thiscall winISteamFriends_SteamFriends008_GetFriendCountFromSource(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_GetFriendCountFromSource(_this->linux_side, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetFriendFromSourceByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends008_GetFriendFromSourceByIndex(winISteamFriends_SteamFriends008 *_this, CSteamID *_r, CSteamID steamIDSource, int iFriend)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends008_GetFriendFromSourceByIndex(_this->linux_side, steamIDSource, iFriend);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_IsUserInSource, 20)
+bool __thiscall winISteamFriends_SteamFriends008_IsUserInSource(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_IsUserInSource(_this->linux_side, steamIDUser, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_SetInGameVoiceSpeaking, 13)
+void __thiscall winISteamFriends_SteamFriends008_SetInGameVoiceSpeaking(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDUser, bool bSpeaking)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends008_SetInGameVoiceSpeaking(_this->linux_side, steamIDUser, bSpeaking);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_ActivateGameOverlay, 8)
+void __thiscall winISteamFriends_SteamFriends008_ActivateGameOverlay(winISteamFriends_SteamFriends008 *_this, const char * pchDialog)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends008_ActivateGameOverlay(_this->linux_side, pchDialog);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_ActivateGameOverlayToUser, 16)
+void __thiscall winISteamFriends_SteamFriends008_ActivateGameOverlayToUser(winISteamFriends_SteamFriends008 *_this, const char * pchDialog, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends008_ActivateGameOverlayToUser(_this->linux_side, pchDialog, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_ActivateGameOverlayToWebPage, 8)
+void __thiscall winISteamFriends_SteamFriends008_ActivateGameOverlayToWebPage(winISteamFriends_SteamFriends008 *_this, const char * pchURL)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends008_ActivateGameOverlayToWebPage(_this->linux_side, pchURL);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_ActivateGameOverlayToStore, 8)
+void __thiscall winISteamFriends_SteamFriends008_ActivateGameOverlayToStore(winISteamFriends_SteamFriends008 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends008_ActivateGameOverlayToStore(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_SetPlayedWith, 12)
+void __thiscall winISteamFriends_SteamFriends008_SetPlayedWith(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDUserPlayedWith)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends008_SetPlayedWith(_this->linux_side, steamIDUserPlayedWith);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_ActivateGameOverlayInviteDialog, 12)
+void __thiscall winISteamFriends_SteamFriends008_ActivateGameOverlayInviteDialog(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends008_ActivateGameOverlayInviteDialog(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetSmallFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends008_GetSmallFriendAvatar(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_GetSmallFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetMediumFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends008_GetMediumFriendAvatar(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_GetMediumFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetLargeFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends008_GetLargeFriendAvatar(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_GetLargeFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_RequestUserInformation, 13)
+bool __thiscall winISteamFriends_SteamFriends008_RequestUserInformation(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDUser, bool bRequireNameOnly)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_RequestUserInformation(_this->linux_side, steamIDUser, bRequireNameOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_RequestClanOfficerList, 12)
+SteamAPICall_t __thiscall winISteamFriends_SteamFriends008_RequestClanOfficerList(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_RequestClanOfficerList(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetClanOwner, 16)
+CSteamID *__thiscall winISteamFriends_SteamFriends008_GetClanOwner(winISteamFriends_SteamFriends008 *_this, CSteamID *_r, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends008_GetClanOwner(_this->linux_side, steamIDClan);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetClanOfficerCount, 12)
+int __thiscall winISteamFriends_SteamFriends008_GetClanOfficerCount(winISteamFriends_SteamFriends008 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_GetClanOfficerCount(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetClanOfficerByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends008_GetClanOfficerByIndex(winISteamFriends_SteamFriends008 *_this, CSteamID *_r, CSteamID steamIDClan, int iOfficer)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends008_GetClanOfficerByIndex(_this->linux_side, steamIDClan, iOfficer);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends008_GetUserRestrictions, 4)
+uint32 __thiscall winISteamFriends_SteamFriends008_GetUserRestrictions(winISteamFriends_SteamFriends008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends008_GetUserRestrictions(_this->linux_side);
+}
+
+extern vtable_ptr winISteamFriends_SteamFriends008_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamFriends_SteamFriends008,
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_SetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetFriendCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetFriendByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetFriendRelationship)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetFriendPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetFriendPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetFriendGamePlayed)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetFriendPersonaNameHistory)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_HasFriend)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetClanCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetClanByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetClanName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetClanTag)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetFriendCountFromSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetFriendFromSourceByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_IsUserInSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_SetInGameVoiceSpeaking)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_ActivateGameOverlay)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_ActivateGameOverlayToUser)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_ActivateGameOverlayToWebPage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_ActivateGameOverlayToStore)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_SetPlayedWith)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_ActivateGameOverlayInviteDialog)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetSmallFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetMediumFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetLargeFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_RequestUserInformation)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_RequestClanOfficerList)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetClanOwner)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetClanOfficerCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetClanOfficerByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends008_GetUserRestrictions)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamFriends_SteamFriends008 *create_winISteamFriends_SteamFriends008(void *linux_side)
+{
+ winISteamFriends_SteamFriends008 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamFriends_SteamFriends008));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamFriends_SteamFriends008_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamFriends_SteamFriends007.h"
+
+typedef struct __winISteamFriends_SteamFriends007 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamFriends_SteamFriends007;
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_GetPersonaName, 4)
+const char * __thiscall winISteamFriends_SteamFriends007_GetPersonaName(winISteamFriends_SteamFriends007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends007_GetPersonaName(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_SetPersonaName, 8)
+void __thiscall winISteamFriends_SteamFriends007_SetPersonaName(winISteamFriends_SteamFriends007 *_this, const char * pchPersonaName)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends007_SetPersonaName(_this->linux_side, pchPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_GetPersonaState, 4)
+EPersonaState __thiscall winISteamFriends_SteamFriends007_GetPersonaState(winISteamFriends_SteamFriends007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends007_GetPersonaState(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_GetFriendCount, 8)
+int __thiscall winISteamFriends_SteamFriends007_GetFriendCount(winISteamFriends_SteamFriends007 *_this, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends007_GetFriendCount(_this->linux_side, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_GetFriendByIndex, 16)
+CSteamID *__thiscall winISteamFriends_SteamFriends007_GetFriendByIndex(winISteamFriends_SteamFriends007 *_this, CSteamID *_r, int iFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends007_GetFriendByIndex(_this->linux_side, iFriend, iFriendFlags);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_GetFriendRelationship, 12)
+EFriendRelationship __thiscall winISteamFriends_SteamFriends007_GetFriendRelationship(winISteamFriends_SteamFriends007 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends007_GetFriendRelationship(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_GetFriendPersonaState, 12)
+EPersonaState __thiscall winISteamFriends_SteamFriends007_GetFriendPersonaState(winISteamFriends_SteamFriends007 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends007_GetFriendPersonaState(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_GetFriendPersonaName, 12)
+const char * __thiscall winISteamFriends_SteamFriends007_GetFriendPersonaName(winISteamFriends_SteamFriends007 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends007_GetFriendPersonaName(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_GetFriendGamePlayed, 16)
+bool __thiscall winISteamFriends_SteamFriends007_GetFriendGamePlayed(winISteamFriends_SteamFriends007 *_this, CSteamID steamIDFriend, FriendGameInfo_t * pFriendGameInfo)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends007_GetFriendGamePlayed(_this->linux_side, steamIDFriend, pFriendGameInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_GetFriendPersonaNameHistory, 16)
+const char * __thiscall winISteamFriends_SteamFriends007_GetFriendPersonaNameHistory(winISteamFriends_SteamFriends007 *_this, CSteamID steamIDFriend, int iPersonaName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends007_GetFriendPersonaNameHistory(_this->linux_side, steamIDFriend, iPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_HasFriend, 16)
+bool __thiscall winISteamFriends_SteamFriends007_HasFriend(winISteamFriends_SteamFriends007 *_this, CSteamID steamIDFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends007_HasFriend(_this->linux_side, steamIDFriend, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_GetClanCount, 4)
+int __thiscall winISteamFriends_SteamFriends007_GetClanCount(winISteamFriends_SteamFriends007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends007_GetClanCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_GetClanByIndex, 12)
+CSteamID *__thiscall winISteamFriends_SteamFriends007_GetClanByIndex(winISteamFriends_SteamFriends007 *_this, CSteamID *_r, int iClan)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends007_GetClanByIndex(_this->linux_side, iClan);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_GetClanName, 12)
+const char * __thiscall winISteamFriends_SteamFriends007_GetClanName(winISteamFriends_SteamFriends007 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends007_GetClanName(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_GetClanTag, 12)
+const char * __thiscall winISteamFriends_SteamFriends007_GetClanTag(winISteamFriends_SteamFriends007 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends007_GetClanTag(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_GetFriendCountFromSource, 12)
+int __thiscall winISteamFriends_SteamFriends007_GetFriendCountFromSource(winISteamFriends_SteamFriends007 *_this, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends007_GetFriendCountFromSource(_this->linux_side, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_GetFriendFromSourceByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends007_GetFriendFromSourceByIndex(winISteamFriends_SteamFriends007 *_this, CSteamID *_r, CSteamID steamIDSource, int iFriend)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends007_GetFriendFromSourceByIndex(_this->linux_side, steamIDSource, iFriend);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_IsUserInSource, 20)
+bool __thiscall winISteamFriends_SteamFriends007_IsUserInSource(winISteamFriends_SteamFriends007 *_this, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends007_IsUserInSource(_this->linux_side, steamIDUser, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_SetInGameVoiceSpeaking, 13)
+void __thiscall winISteamFriends_SteamFriends007_SetInGameVoiceSpeaking(winISteamFriends_SteamFriends007 *_this, CSteamID steamIDUser, bool bSpeaking)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends007_SetInGameVoiceSpeaking(_this->linux_side, steamIDUser, bSpeaking);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_ActivateGameOverlay, 8)
+void __thiscall winISteamFriends_SteamFriends007_ActivateGameOverlay(winISteamFriends_SteamFriends007 *_this, const char * pchDialog)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends007_ActivateGameOverlay(_this->linux_side, pchDialog);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_ActivateGameOverlayToUser, 16)
+void __thiscall winISteamFriends_SteamFriends007_ActivateGameOverlayToUser(winISteamFriends_SteamFriends007 *_this, const char * pchDialog, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends007_ActivateGameOverlayToUser(_this->linux_side, pchDialog, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_ActivateGameOverlayToWebPage, 8)
+void __thiscall winISteamFriends_SteamFriends007_ActivateGameOverlayToWebPage(winISteamFriends_SteamFriends007 *_this, const char * pchURL)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends007_ActivateGameOverlayToWebPage(_this->linux_side, pchURL);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_ActivateGameOverlayToStore, 8)
+void __thiscall winISteamFriends_SteamFriends007_ActivateGameOverlayToStore(winISteamFriends_SteamFriends007 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends007_ActivateGameOverlayToStore(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_SetPlayedWith, 12)
+void __thiscall winISteamFriends_SteamFriends007_SetPlayedWith(winISteamFriends_SteamFriends007 *_this, CSteamID steamIDUserPlayedWith)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends007_SetPlayedWith(_this->linux_side, steamIDUserPlayedWith);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_ActivateGameOverlayInviteDialog, 12)
+void __thiscall winISteamFriends_SteamFriends007_ActivateGameOverlayInviteDialog(winISteamFriends_SteamFriends007 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends007_ActivateGameOverlayInviteDialog(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_GetSmallFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends007_GetSmallFriendAvatar(winISteamFriends_SteamFriends007 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends007_GetSmallFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_GetMediumFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends007_GetMediumFriendAvatar(winISteamFriends_SteamFriends007 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends007_GetMediumFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends007_GetLargeFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends007_GetLargeFriendAvatar(winISteamFriends_SteamFriends007 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends007_GetLargeFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+extern vtable_ptr winISteamFriends_SteamFriends007_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamFriends_SteamFriends007,
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_GetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_SetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_GetPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_GetFriendCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_GetFriendByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_GetFriendRelationship)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_GetFriendPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_GetFriendPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_GetFriendGamePlayed)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_GetFriendPersonaNameHistory)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_HasFriend)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_GetClanCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_GetClanByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_GetClanName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_GetClanTag)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_GetFriendCountFromSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_GetFriendFromSourceByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_IsUserInSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_SetInGameVoiceSpeaking)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_ActivateGameOverlay)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_ActivateGameOverlayToUser)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_ActivateGameOverlayToWebPage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_ActivateGameOverlayToStore)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_SetPlayedWith)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_ActivateGameOverlayInviteDialog)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_GetSmallFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_GetMediumFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends007_GetLargeFriendAvatar)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamFriends_SteamFriends007 *create_winISteamFriends_SteamFriends007(void *linux_side)
+{
+ winISteamFriends_SteamFriends007 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamFriends_SteamFriends007));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamFriends_SteamFriends007_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamFriends_SteamFriends006.h"
+
+typedef struct __winISteamFriends_SteamFriends006 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamFriends_SteamFriends006;
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_GetPersonaName, 4)
+const char * __thiscall winISteamFriends_SteamFriends006_GetPersonaName(winISteamFriends_SteamFriends006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends006_GetPersonaName(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_SetPersonaName, 8)
+void __thiscall winISteamFriends_SteamFriends006_SetPersonaName(winISteamFriends_SteamFriends006 *_this, const char * pchPersonaName)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends006_SetPersonaName(_this->linux_side, pchPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_GetPersonaState, 4)
+EPersonaState __thiscall winISteamFriends_SteamFriends006_GetPersonaState(winISteamFriends_SteamFriends006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends006_GetPersonaState(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_GetFriendCount, 8)
+int __thiscall winISteamFriends_SteamFriends006_GetFriendCount(winISteamFriends_SteamFriends006 *_this, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends006_GetFriendCount(_this->linux_side, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_GetFriendByIndex, 16)
+CSteamID *__thiscall winISteamFriends_SteamFriends006_GetFriendByIndex(winISteamFriends_SteamFriends006 *_this, CSteamID *_r, int iFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends006_GetFriendByIndex(_this->linux_side, iFriend, iFriendFlags);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_GetFriendRelationship, 12)
+EFriendRelationship __thiscall winISteamFriends_SteamFriends006_GetFriendRelationship(winISteamFriends_SteamFriends006 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends006_GetFriendRelationship(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_GetFriendPersonaState, 12)
+EPersonaState __thiscall winISteamFriends_SteamFriends006_GetFriendPersonaState(winISteamFriends_SteamFriends006 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends006_GetFriendPersonaState(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_GetFriendPersonaName, 12)
+const char * __thiscall winISteamFriends_SteamFriends006_GetFriendPersonaName(winISteamFriends_SteamFriends006 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends006_GetFriendPersonaName(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_GetFriendAvatar, 16)
+int __thiscall winISteamFriends_SteamFriends006_GetFriendAvatar(winISteamFriends_SteamFriends006 *_this, CSteamID steamIDFriend, int eAvatarSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends006_GetFriendAvatar(_this->linux_side, steamIDFriend, eAvatarSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_GetFriendGamePlayed, 16)
+bool __thiscall winISteamFriends_SteamFriends006_GetFriendGamePlayed(winISteamFriends_SteamFriends006 *_this, CSteamID steamIDFriend, FriendGameInfo_t * pFriendGameInfo)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends006_GetFriendGamePlayed(_this->linux_side, steamIDFriend, pFriendGameInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_GetFriendPersonaNameHistory, 16)
+const char * __thiscall winISteamFriends_SteamFriends006_GetFriendPersonaNameHistory(winISteamFriends_SteamFriends006 *_this, CSteamID steamIDFriend, int iPersonaName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends006_GetFriendPersonaNameHistory(_this->linux_side, steamIDFriend, iPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_HasFriend, 16)
+bool __thiscall winISteamFriends_SteamFriends006_HasFriend(winISteamFriends_SteamFriends006 *_this, CSteamID steamIDFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends006_HasFriend(_this->linux_side, steamIDFriend, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_GetClanCount, 4)
+int __thiscall winISteamFriends_SteamFriends006_GetClanCount(winISteamFriends_SteamFriends006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends006_GetClanCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_GetClanByIndex, 12)
+CSteamID *__thiscall winISteamFriends_SteamFriends006_GetClanByIndex(winISteamFriends_SteamFriends006 *_this, CSteamID *_r, int iClan)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends006_GetClanByIndex(_this->linux_side, iClan);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_GetClanName, 12)
+const char * __thiscall winISteamFriends_SteamFriends006_GetClanName(winISteamFriends_SteamFriends006 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends006_GetClanName(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_GetClanTag, 12)
+const char * __thiscall winISteamFriends_SteamFriends006_GetClanTag(winISteamFriends_SteamFriends006 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends006_GetClanTag(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_GetFriendCountFromSource, 12)
+int __thiscall winISteamFriends_SteamFriends006_GetFriendCountFromSource(winISteamFriends_SteamFriends006 *_this, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends006_GetFriendCountFromSource(_this->linux_side, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_GetFriendFromSourceByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends006_GetFriendFromSourceByIndex(winISteamFriends_SteamFriends006 *_this, CSteamID *_r, CSteamID steamIDSource, int iFriend)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends006_GetFriendFromSourceByIndex(_this->linux_side, steamIDSource, iFriend);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_IsUserInSource, 20)
+bool __thiscall winISteamFriends_SteamFriends006_IsUserInSource(winISteamFriends_SteamFriends006 *_this, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends006_IsUserInSource(_this->linux_side, steamIDUser, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_SetInGameVoiceSpeaking, 13)
+void __thiscall winISteamFriends_SteamFriends006_SetInGameVoiceSpeaking(winISteamFriends_SteamFriends006 *_this, CSteamID steamIDUser, bool bSpeaking)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends006_SetInGameVoiceSpeaking(_this->linux_side, steamIDUser, bSpeaking);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_ActivateGameOverlay, 8)
+void __thiscall winISteamFriends_SteamFriends006_ActivateGameOverlay(winISteamFriends_SteamFriends006 *_this, const char * pchDialog)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends006_ActivateGameOverlay(_this->linux_side, pchDialog);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_ActivateGameOverlayToUser, 16)
+void __thiscall winISteamFriends_SteamFriends006_ActivateGameOverlayToUser(winISteamFriends_SteamFriends006 *_this, const char * pchDialog, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends006_ActivateGameOverlayToUser(_this->linux_side, pchDialog, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_ActivateGameOverlayToWebPage, 8)
+void __thiscall winISteamFriends_SteamFriends006_ActivateGameOverlayToWebPage(winISteamFriends_SteamFriends006 *_this, const char * pchURL)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends006_ActivateGameOverlayToWebPage(_this->linux_side, pchURL);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_ActivateGameOverlayToStore, 8)
+void __thiscall winISteamFriends_SteamFriends006_ActivateGameOverlayToStore(winISteamFriends_SteamFriends006 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends006_ActivateGameOverlayToStore(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_SetPlayedWith, 12)
+void __thiscall winISteamFriends_SteamFriends006_SetPlayedWith(winISteamFriends_SteamFriends006 *_this, CSteamID steamIDUserPlayedWith)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends006_SetPlayedWith(_this->linux_side, steamIDUserPlayedWith);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends006_ActivateGameOverlayInviteDialog, 12)
+void __thiscall winISteamFriends_SteamFriends006_ActivateGameOverlayInviteDialog(winISteamFriends_SteamFriends006 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends006_ActivateGameOverlayInviteDialog(_this->linux_side, steamIDLobby);
+}
+
+extern vtable_ptr winISteamFriends_SteamFriends006_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamFriends_SteamFriends006,
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_GetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_SetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_GetPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_GetFriendCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_GetFriendByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_GetFriendRelationship)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_GetFriendPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_GetFriendPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_GetFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_GetFriendGamePlayed)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_GetFriendPersonaNameHistory)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_HasFriend)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_GetClanCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_GetClanByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_GetClanName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_GetClanTag)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_GetFriendCountFromSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_GetFriendFromSourceByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_IsUserInSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_SetInGameVoiceSpeaking)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_ActivateGameOverlay)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_ActivateGameOverlayToUser)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_ActivateGameOverlayToWebPage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_ActivateGameOverlayToStore)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_SetPlayedWith)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends006_ActivateGameOverlayInviteDialog)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamFriends_SteamFriends006 *create_winISteamFriends_SteamFriends006(void *linux_side)
+{
+ winISteamFriends_SteamFriends006 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamFriends_SteamFriends006));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamFriends_SteamFriends006_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamFriends_SteamFriends005.h"
+
+typedef struct __winISteamFriends_SteamFriends005 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamFriends_SteamFriends005;
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_GetPersonaName, 4)
+const char * __thiscall winISteamFriends_SteamFriends005_GetPersonaName(winISteamFriends_SteamFriends005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends005_GetPersonaName(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_SetPersonaName, 8)
+void __thiscall winISteamFriends_SteamFriends005_SetPersonaName(winISteamFriends_SteamFriends005 *_this, const char * pchPersonaName)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends005_SetPersonaName(_this->linux_side, pchPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_GetPersonaState, 4)
+EPersonaState __thiscall winISteamFriends_SteamFriends005_GetPersonaState(winISteamFriends_SteamFriends005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends005_GetPersonaState(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_GetFriendCount, 8)
+int __thiscall winISteamFriends_SteamFriends005_GetFriendCount(winISteamFriends_SteamFriends005 *_this, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends005_GetFriendCount(_this->linux_side, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_GetFriendByIndex, 16)
+CSteamID *__thiscall winISteamFriends_SteamFriends005_GetFriendByIndex(winISteamFriends_SteamFriends005 *_this, CSteamID *_r, int iFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends005_GetFriendByIndex(_this->linux_side, iFriend, iFriendFlags);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_GetFriendRelationship, 12)
+EFriendRelationship __thiscall winISteamFriends_SteamFriends005_GetFriendRelationship(winISteamFriends_SteamFriends005 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends005_GetFriendRelationship(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_GetFriendPersonaState, 12)
+EPersonaState __thiscall winISteamFriends_SteamFriends005_GetFriendPersonaState(winISteamFriends_SteamFriends005 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends005_GetFriendPersonaState(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_GetFriendPersonaName, 12)
+const char * __thiscall winISteamFriends_SteamFriends005_GetFriendPersonaName(winISteamFriends_SteamFriends005 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends005_GetFriendPersonaName(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_GetFriendAvatar, 16)
+int __thiscall winISteamFriends_SteamFriends005_GetFriendAvatar(winISteamFriends_SteamFriends005 *_this, CSteamID steamIDFriend, int eAvatarSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends005_GetFriendAvatar(_this->linux_side, steamIDFriend, eAvatarSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_GetFriendGamePlayed, 16)
+bool __thiscall winISteamFriends_SteamFriends005_GetFriendGamePlayed(winISteamFriends_SteamFriends005 *_this, CSteamID steamIDFriend, FriendGameInfo_t * pFriendGameInfo)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends005_GetFriendGamePlayed(_this->linux_side, steamIDFriend, pFriendGameInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_GetFriendPersonaNameHistory, 16)
+const char * __thiscall winISteamFriends_SteamFriends005_GetFriendPersonaNameHistory(winISteamFriends_SteamFriends005 *_this, CSteamID steamIDFriend, int iPersonaName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends005_GetFriendPersonaNameHistory(_this->linux_side, steamIDFriend, iPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_HasFriend, 16)
+bool __thiscall winISteamFriends_SteamFriends005_HasFriend(winISteamFriends_SteamFriends005 *_this, CSteamID steamIDFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends005_HasFriend(_this->linux_side, steamIDFriend, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_GetClanCount, 4)
+int __thiscall winISteamFriends_SteamFriends005_GetClanCount(winISteamFriends_SteamFriends005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends005_GetClanCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_GetClanByIndex, 12)
+CSteamID *__thiscall winISteamFriends_SteamFriends005_GetClanByIndex(winISteamFriends_SteamFriends005 *_this, CSteamID *_r, int iClan)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends005_GetClanByIndex(_this->linux_side, iClan);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_GetClanName, 12)
+const char * __thiscall winISteamFriends_SteamFriends005_GetClanName(winISteamFriends_SteamFriends005 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends005_GetClanName(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_GetFriendCountFromSource, 12)
+int __thiscall winISteamFriends_SteamFriends005_GetFriendCountFromSource(winISteamFriends_SteamFriends005 *_this, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends005_GetFriendCountFromSource(_this->linux_side, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_GetFriendFromSourceByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends005_GetFriendFromSourceByIndex(winISteamFriends_SteamFriends005 *_this, CSteamID *_r, CSteamID steamIDSource, int iFriend)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends005_GetFriendFromSourceByIndex(_this->linux_side, steamIDSource, iFriend);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_IsUserInSource, 20)
+bool __thiscall winISteamFriends_SteamFriends005_IsUserInSource(winISteamFriends_SteamFriends005 *_this, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends005_IsUserInSource(_this->linux_side, steamIDUser, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_SetInGameVoiceSpeaking, 13)
+void __thiscall winISteamFriends_SteamFriends005_SetInGameVoiceSpeaking(winISteamFriends_SteamFriends005 *_this, CSteamID steamIDUser, bool bSpeaking)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends005_SetInGameVoiceSpeaking(_this->linux_side, steamIDUser, bSpeaking);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_ActivateGameOverlay, 8)
+void __thiscall winISteamFriends_SteamFriends005_ActivateGameOverlay(winISteamFriends_SteamFriends005 *_this, const char * pchDialog)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends005_ActivateGameOverlay(_this->linux_side, pchDialog);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_ActivateGameOverlayToUser, 16)
+void __thiscall winISteamFriends_SteamFriends005_ActivateGameOverlayToUser(winISteamFriends_SteamFriends005 *_this, const char * pchDialog, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends005_ActivateGameOverlayToUser(_this->linux_side, pchDialog, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_ActivateGameOverlayToWebPage, 8)
+void __thiscall winISteamFriends_SteamFriends005_ActivateGameOverlayToWebPage(winISteamFriends_SteamFriends005 *_this, const char * pchURL)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends005_ActivateGameOverlayToWebPage(_this->linux_side, pchURL);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_ActivateGameOverlayToStore, 8)
+void __thiscall winISteamFriends_SteamFriends005_ActivateGameOverlayToStore(winISteamFriends_SteamFriends005 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends005_ActivateGameOverlayToStore(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends005_SetPlayedWith, 12)
+void __thiscall winISteamFriends_SteamFriends005_SetPlayedWith(winISteamFriends_SteamFriends005 *_this, CSteamID steamIDUserPlayedWith)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends005_SetPlayedWith(_this->linux_side, steamIDUserPlayedWith);
+}
+
+extern vtable_ptr winISteamFriends_SteamFriends005_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamFriends_SteamFriends005,
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_GetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_SetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_GetPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_GetFriendCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_GetFriendByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_GetFriendRelationship)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_GetFriendPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_GetFriendPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_GetFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_GetFriendGamePlayed)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_GetFriendPersonaNameHistory)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_HasFriend)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_GetClanCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_GetClanByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_GetClanName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_GetFriendCountFromSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_GetFriendFromSourceByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_IsUserInSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_SetInGameVoiceSpeaking)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_ActivateGameOverlay)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_ActivateGameOverlayToUser)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_ActivateGameOverlayToWebPage)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_ActivateGameOverlayToStore)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends005_SetPlayedWith)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamFriends_SteamFriends005 *create_winISteamFriends_SteamFriends005(void *linux_side)
+{
+ winISteamFriends_SteamFriends005 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamFriends_SteamFriends005));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamFriends_SteamFriends005_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamFriends_SteamFriends004.h"
+
+typedef struct __winISteamFriends_SteamFriends004 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamFriends_SteamFriends004;
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_GetPersonaName, 4)
+const char * __thiscall winISteamFriends_SteamFriends004_GetPersonaName(winISteamFriends_SteamFriends004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends004_GetPersonaName(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_SetPersonaName, 8)
+void __thiscall winISteamFriends_SteamFriends004_SetPersonaName(winISteamFriends_SteamFriends004 *_this, const char * pchPersonaName)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends004_SetPersonaName(_this->linux_side, pchPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_GetPersonaState, 4)
+EPersonaState __thiscall winISteamFriends_SteamFriends004_GetPersonaState(winISteamFriends_SteamFriends004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends004_GetPersonaState(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_GetFriendCount, 8)
+int __thiscall winISteamFriends_SteamFriends004_GetFriendCount(winISteamFriends_SteamFriends004 *_this, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends004_GetFriendCount(_this->linux_side, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_GetFriendByIndex, 16)
+CSteamID *__thiscall winISteamFriends_SteamFriends004_GetFriendByIndex(winISteamFriends_SteamFriends004 *_this, CSteamID *_r, int iFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends004_GetFriendByIndex(_this->linux_side, iFriend, iFriendFlags);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_GetFriendRelationship, 12)
+EFriendRelationship __thiscall winISteamFriends_SteamFriends004_GetFriendRelationship(winISteamFriends_SteamFriends004 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends004_GetFriendRelationship(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_GetFriendPersonaState, 12)
+EPersonaState __thiscall winISteamFriends_SteamFriends004_GetFriendPersonaState(winISteamFriends_SteamFriends004 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends004_GetFriendPersonaState(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_GetFriendPersonaName, 12)
+const char * __thiscall winISteamFriends_SteamFriends004_GetFriendPersonaName(winISteamFriends_SteamFriends004 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends004_GetFriendPersonaName(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_GetFriendAvatar, 16)
+int __thiscall winISteamFriends_SteamFriends004_GetFriendAvatar(winISteamFriends_SteamFriends004 *_this, CSteamID steamIDFriend, int eAvatarSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends004_GetFriendAvatar(_this->linux_side, steamIDFriend, eAvatarSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_GetFriendGamePlayed, 28)
+bool __thiscall winISteamFriends_SteamFriends004_GetFriendGamePlayed(winISteamFriends_SteamFriends004 *_this, CSteamID steamIDFriend, uint64 * pulGameID, uint32 * punGameIP, uint16 * pusGamePort, uint16 * pusQueryPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends004_GetFriendGamePlayed(_this->linux_side, steamIDFriend, pulGameID, punGameIP, pusGamePort, pusQueryPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_GetFriendPersonaNameHistory, 16)
+const char * __thiscall winISteamFriends_SteamFriends004_GetFriendPersonaNameHistory(winISteamFriends_SteamFriends004 *_this, CSteamID steamIDFriend, int iPersonaName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends004_GetFriendPersonaNameHistory(_this->linux_side, steamIDFriend, iPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_HasFriend, 16)
+bool __thiscall winISteamFriends_SteamFriends004_HasFriend(winISteamFriends_SteamFriends004 *_this, CSteamID steamIDFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends004_HasFriend(_this->linux_side, steamIDFriend, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_GetClanCount, 4)
+int __thiscall winISteamFriends_SteamFriends004_GetClanCount(winISteamFriends_SteamFriends004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends004_GetClanCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_GetClanByIndex, 12)
+CSteamID *__thiscall winISteamFriends_SteamFriends004_GetClanByIndex(winISteamFriends_SteamFriends004 *_this, CSteamID *_r, int iClan)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends004_GetClanByIndex(_this->linux_side, iClan);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_GetClanName, 12)
+const char * __thiscall winISteamFriends_SteamFriends004_GetClanName(winISteamFriends_SteamFriends004 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends004_GetClanName(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_GetFriendCountFromSource, 12)
+int __thiscall winISteamFriends_SteamFriends004_GetFriendCountFromSource(winISteamFriends_SteamFriends004 *_this, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends004_GetFriendCountFromSource(_this->linux_side, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_GetFriendFromSourceByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends004_GetFriendFromSourceByIndex(winISteamFriends_SteamFriends004 *_this, CSteamID *_r, CSteamID steamIDSource, int iFriend)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends004_GetFriendFromSourceByIndex(_this->linux_side, steamIDSource, iFriend);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_IsUserInSource, 20)
+bool __thiscall winISteamFriends_SteamFriends004_IsUserInSource(winISteamFriends_SteamFriends004 *_this, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends004_IsUserInSource(_this->linux_side, steamIDUser, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_SetInGameVoiceSpeaking, 13)
+void __thiscall winISteamFriends_SteamFriends004_SetInGameVoiceSpeaking(winISteamFriends_SteamFriends004 *_this, CSteamID steamIDUser, bool bSpeaking)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends004_SetInGameVoiceSpeaking(_this->linux_side, steamIDUser, bSpeaking);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends004_ActivateGameOverlay, 8)
+void __thiscall winISteamFriends_SteamFriends004_ActivateGameOverlay(winISteamFriends_SteamFriends004 *_this, const char * pchDialog)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends004_ActivateGameOverlay(_this->linux_side, pchDialog);
+}
+
+extern vtable_ptr winISteamFriends_SteamFriends004_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamFriends_SteamFriends004,
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_GetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_SetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_GetPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_GetFriendCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_GetFriendByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_GetFriendRelationship)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_GetFriendPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_GetFriendPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_GetFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_GetFriendGamePlayed)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_GetFriendPersonaNameHistory)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_HasFriend)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_GetClanCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_GetClanByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_GetClanName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_GetFriendCountFromSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_GetFriendFromSourceByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_IsUserInSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_SetInGameVoiceSpeaking)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends004_ActivateGameOverlay)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamFriends_SteamFriends004 *create_winISteamFriends_SteamFriends004(void *linux_side)
+{
+ winISteamFriends_SteamFriends004 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamFriends_SteamFriends004));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamFriends_SteamFriends004_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamFriends_SteamFriends003.h"
+
+typedef struct __winISteamFriends_SteamFriends003 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamFriends_SteamFriends003;
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_GetPersonaName, 4)
+const char * __thiscall winISteamFriends_SteamFriends003_GetPersonaName(winISteamFriends_SteamFriends003 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends003_GetPersonaName(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_SetPersonaName, 8)
+void __thiscall winISteamFriends_SteamFriends003_SetPersonaName(winISteamFriends_SteamFriends003 *_this, const char * pchPersonaName)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends003_SetPersonaName(_this->linux_side, pchPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_GetPersonaState, 4)
+EPersonaState __thiscall winISteamFriends_SteamFriends003_GetPersonaState(winISteamFriends_SteamFriends003 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends003_GetPersonaState(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_GetFriendCount, 8)
+int __thiscall winISteamFriends_SteamFriends003_GetFriendCount(winISteamFriends_SteamFriends003 *_this, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends003_GetFriendCount(_this->linux_side, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_GetFriendByIndex, 16)
+CSteamID *__thiscall winISteamFriends_SteamFriends003_GetFriendByIndex(winISteamFriends_SteamFriends003 *_this, CSteamID *_r, int iFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends003_GetFriendByIndex(_this->linux_side, iFriend, iFriendFlags);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_GetFriendRelationship, 12)
+EFriendRelationship __thiscall winISteamFriends_SteamFriends003_GetFriendRelationship(winISteamFriends_SteamFriends003 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends003_GetFriendRelationship(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_GetFriendPersonaState, 12)
+EPersonaState __thiscall winISteamFriends_SteamFriends003_GetFriendPersonaState(winISteamFriends_SteamFriends003 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends003_GetFriendPersonaState(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_GetFriendPersonaName, 12)
+const char * __thiscall winISteamFriends_SteamFriends003_GetFriendPersonaName(winISteamFriends_SteamFriends003 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends003_GetFriendPersonaName(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_GetFriendAvatar, 12)
+int __thiscall winISteamFriends_SteamFriends003_GetFriendAvatar(winISteamFriends_SteamFriends003 *_this, CSteamID steamIDFriend)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends003_GetFriendAvatar(_this->linux_side, steamIDFriend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_GetFriendGamePlayed, 28)
+bool __thiscall winISteamFriends_SteamFriends003_GetFriendGamePlayed(winISteamFriends_SteamFriends003 *_this, CSteamID steamIDFriend, uint64 * pulGameID, uint32 * punGameIP, uint16 * pusGamePort, uint16 * pusQueryPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends003_GetFriendGamePlayed(_this->linux_side, steamIDFriend, pulGameID, punGameIP, pusGamePort, pusQueryPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_GetFriendPersonaNameHistory, 16)
+const char * __thiscall winISteamFriends_SteamFriends003_GetFriendPersonaNameHistory(winISteamFriends_SteamFriends003 *_this, CSteamID steamIDFriend, int iPersonaName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends003_GetFriendPersonaNameHistory(_this->linux_side, steamIDFriend, iPersonaName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_HasFriend, 16)
+bool __thiscall winISteamFriends_SteamFriends003_HasFriend(winISteamFriends_SteamFriends003 *_this, CSteamID steamIDFriend, int iFriendFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends003_HasFriend(_this->linux_side, steamIDFriend, iFriendFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_GetClanCount, 4)
+int __thiscall winISteamFriends_SteamFriends003_GetClanCount(winISteamFriends_SteamFriends003 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends003_GetClanCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_GetClanByIndex, 12)
+CSteamID *__thiscall winISteamFriends_SteamFriends003_GetClanByIndex(winISteamFriends_SteamFriends003 *_this, CSteamID *_r, int iClan)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends003_GetClanByIndex(_this->linux_side, iClan);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_GetClanName, 12)
+const char * __thiscall winISteamFriends_SteamFriends003_GetClanName(winISteamFriends_SteamFriends003 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends003_GetClanName(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_GetFriendCountFromSource, 12)
+int __thiscall winISteamFriends_SteamFriends003_GetFriendCountFromSource(winISteamFriends_SteamFriends003 *_this, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends003_GetFriendCountFromSource(_this->linux_side, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_GetFriendFromSourceByIndex, 20)
+CSteamID *__thiscall winISteamFriends_SteamFriends003_GetFriendFromSourceByIndex(winISteamFriends_SteamFriends003 *_this, CSteamID *_r, CSteamID steamIDSource, int iFriend)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamFriends_SteamFriends003_GetFriendFromSourceByIndex(_this->linux_side, steamIDSource, iFriend);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_IsUserInSource, 20)
+bool __thiscall winISteamFriends_SteamFriends003_IsUserInSource(winISteamFriends_SteamFriends003 *_this, CSteamID steamIDUser, CSteamID steamIDSource)
+{
+ TRACE("%p\n", _this);
+ return cppISteamFriends_SteamFriends003_IsUserInSource(_this->linux_side, steamIDUser, steamIDSource);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_SetInGameVoiceSpeaking, 13)
+void __thiscall winISteamFriends_SteamFriends003_SetInGameVoiceSpeaking(winISteamFriends_SteamFriends003 *_this, CSteamID steamIDUser, bool bSpeaking)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends003_SetInGameVoiceSpeaking(_this->linux_side, steamIDUser, bSpeaking);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamFriends_SteamFriends003_ActivateGameOverlay, 8)
+void __thiscall winISteamFriends_SteamFriends003_ActivateGameOverlay(winISteamFriends_SteamFriends003 *_this, const char * pchDialog)
+{
+ TRACE("%p\n", _this);
+ cppISteamFriends_SteamFriends003_ActivateGameOverlay(_this->linux_side, pchDialog);
+}
+
+extern vtable_ptr winISteamFriends_SteamFriends003_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamFriends_SteamFriends003,
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_GetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_SetPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_GetPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_GetFriendCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_GetFriendByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_GetFriendRelationship)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_GetFriendPersonaState)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_GetFriendPersonaName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_GetFriendAvatar)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_GetFriendGamePlayed)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_GetFriendPersonaNameHistory)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_HasFriend)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_GetClanCount)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_GetClanByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_GetClanName)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_GetFriendCountFromSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_GetFriendFromSourceByIndex)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_IsUserInSource)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_SetInGameVoiceSpeaking)
+ VTABLE_ADD_FUNC(winISteamFriends_SteamFriends003_ActivateGameOverlay)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamFriends_SteamFriends003 *create_winISteamFriends_SteamFriends003(void *linux_side)
+{
+ winISteamFriends_SteamFriends003 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamFriends_SteamFriends003));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamFriends_SteamFriends003_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamGameCoordinator.c b/lsteamclient/winISteamGameCoordinator.c
new file mode 100644
index 00000000..78b33049
--- /dev/null
+++ b/lsteamclient/winISteamGameCoordinator.c
@@ -0,0 +1,70 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamGameCoordinator_SteamGameCoordinator001.h"
+
+typedef struct __winISteamGameCoordinator_SteamGameCoordinator001 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamGameCoordinator_SteamGameCoordinator001;
+
+DEFINE_THISCALL_WRAPPER(winISteamGameCoordinator_SteamGameCoordinator001_SendMessage, 16)
+EGCResults __thiscall winISteamGameCoordinator_SteamGameCoordinator001_SendMessage(winISteamGameCoordinator_SteamGameCoordinator001 *_this, uint32 unMsgType, const void * pubData, uint32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameCoordinator_SteamGameCoordinator001_SendMessage(_this->linux_side, unMsgType, pubData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameCoordinator_SteamGameCoordinator001_IsMessageAvailable, 8)
+bool __thiscall winISteamGameCoordinator_SteamGameCoordinator001_IsMessageAvailable(winISteamGameCoordinator_SteamGameCoordinator001 *_this, uint32 * pcubMsgSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameCoordinator_SteamGameCoordinator001_IsMessageAvailable(_this->linux_side, pcubMsgSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameCoordinator_SteamGameCoordinator001_RetrieveMessage, 20)
+EGCResults __thiscall winISteamGameCoordinator_SteamGameCoordinator001_RetrieveMessage(winISteamGameCoordinator_SteamGameCoordinator001 *_this, uint32 * punMsgType, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameCoordinator_SteamGameCoordinator001_RetrieveMessage(_this->linux_side, punMsgType, pubDest, cubDest, pcubMsgSize);
+}
+
+extern vtable_ptr winISteamGameCoordinator_SteamGameCoordinator001_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamGameCoordinator_SteamGameCoordinator001,
+ VTABLE_ADD_FUNC(winISteamGameCoordinator_SteamGameCoordinator001_SendMessage)
+ VTABLE_ADD_FUNC(winISteamGameCoordinator_SteamGameCoordinator001_IsMessageAvailable)
+ VTABLE_ADD_FUNC(winISteamGameCoordinator_SteamGameCoordinator001_RetrieveMessage)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamGameCoordinator_SteamGameCoordinator001 *create_winISteamGameCoordinator_SteamGameCoordinator001(void *linux_side)
+{
+ winISteamGameCoordinator_SteamGameCoordinator001 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamGameCoordinator_SteamGameCoordinator001));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamGameCoordinator_SteamGameCoordinator001_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamGameServer.c b/lsteamclient/winISteamGameServer.c
new file mode 100644
index 00000000..fccb2159
--- /dev/null
+++ b/lsteamclient/winISteamGameServer.c
@@ -0,0 +1,1622 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamGameServer_SteamGameServer012.h"
+
+typedef struct __winISteamGameServer_SteamGameServer012 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamGameServer_SteamGameServer012;
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_InitGameServer, 24)
+bool __thiscall winISteamGameServer_SteamGameServer012_InitGameServer(winISteamGameServer_SteamGameServer012 *_this, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer012_InitGameServer(_this->linux_side, unIP, usGamePort, usQueryPort, unFlags, nGameAppId, pchVersionString);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_SetProduct, 8)
+void __thiscall winISteamGameServer_SteamGameServer012_SetProduct(winISteamGameServer_SteamGameServer012 *_this, const char * pszProduct)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_SetProduct(_this->linux_side, pszProduct);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_SetGameDescription, 8)
+void __thiscall winISteamGameServer_SteamGameServer012_SetGameDescription(winISteamGameServer_SteamGameServer012 *_this, const char * pszGameDescription)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_SetGameDescription(_this->linux_side, pszGameDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_SetModDir, 8)
+void __thiscall winISteamGameServer_SteamGameServer012_SetModDir(winISteamGameServer_SteamGameServer012 *_this, const char * pszModDir)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_SetModDir(_this->linux_side, pszModDir);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_SetDedicatedServer, 5)
+void __thiscall winISteamGameServer_SteamGameServer012_SetDedicatedServer(winISteamGameServer_SteamGameServer012 *_this, bool bDedicated)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_SetDedicatedServer(_this->linux_side, bDedicated);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_LogOn, 8)
+void __thiscall winISteamGameServer_SteamGameServer012_LogOn(winISteamGameServer_SteamGameServer012 *_this, const char * pszToken)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_LogOn(_this->linux_side, pszToken);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_LogOnAnonymous, 4)
+void __thiscall winISteamGameServer_SteamGameServer012_LogOnAnonymous(winISteamGameServer_SteamGameServer012 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_LogOnAnonymous(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_LogOff, 4)
+void __thiscall winISteamGameServer_SteamGameServer012_LogOff(winISteamGameServer_SteamGameServer012 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_LogOff(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_BLoggedOn, 4)
+bool __thiscall winISteamGameServer_SteamGameServer012_BLoggedOn(winISteamGameServer_SteamGameServer012 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer012_BLoggedOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_BSecure, 4)
+bool __thiscall winISteamGameServer_SteamGameServer012_BSecure(winISteamGameServer_SteamGameServer012 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer012_BSecure(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_GetSteamID, 8)
+CSteamID *__thiscall winISteamGameServer_SteamGameServer012_GetSteamID(winISteamGameServer_SteamGameServer012 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamGameServer_SteamGameServer012_GetSteamID(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_WasRestartRequested, 4)
+bool __thiscall winISteamGameServer_SteamGameServer012_WasRestartRequested(winISteamGameServer_SteamGameServer012 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer012_WasRestartRequested(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_SetMaxPlayerCount, 8)
+void __thiscall winISteamGameServer_SteamGameServer012_SetMaxPlayerCount(winISteamGameServer_SteamGameServer012 *_this, int cPlayersMax)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_SetMaxPlayerCount(_this->linux_side, cPlayersMax);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_SetBotPlayerCount, 8)
+void __thiscall winISteamGameServer_SteamGameServer012_SetBotPlayerCount(winISteamGameServer_SteamGameServer012 *_this, int cBotplayers)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_SetBotPlayerCount(_this->linux_side, cBotplayers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_SetServerName, 8)
+void __thiscall winISteamGameServer_SteamGameServer012_SetServerName(winISteamGameServer_SteamGameServer012 *_this, const char * pszServerName)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_SetServerName(_this->linux_side, pszServerName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_SetMapName, 8)
+void __thiscall winISteamGameServer_SteamGameServer012_SetMapName(winISteamGameServer_SteamGameServer012 *_this, const char * pszMapName)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_SetMapName(_this->linux_side, pszMapName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_SetPasswordProtected, 5)
+void __thiscall winISteamGameServer_SteamGameServer012_SetPasswordProtected(winISteamGameServer_SteamGameServer012 *_this, bool bPasswordProtected)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_SetPasswordProtected(_this->linux_side, bPasswordProtected);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_SetSpectatorPort, 6)
+void __thiscall winISteamGameServer_SteamGameServer012_SetSpectatorPort(winISteamGameServer_SteamGameServer012 *_this, uint16 unSpectatorPort)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_SetSpectatorPort(_this->linux_side, unSpectatorPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_SetSpectatorServerName, 8)
+void __thiscall winISteamGameServer_SteamGameServer012_SetSpectatorServerName(winISteamGameServer_SteamGameServer012 *_this, const char * pszSpectatorServerName)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_SetSpectatorServerName(_this->linux_side, pszSpectatorServerName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_ClearAllKeyValues, 4)
+void __thiscall winISteamGameServer_SteamGameServer012_ClearAllKeyValues(winISteamGameServer_SteamGameServer012 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_ClearAllKeyValues(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_SetKeyValue, 12)
+void __thiscall winISteamGameServer_SteamGameServer012_SetKeyValue(winISteamGameServer_SteamGameServer012 *_this, const char * pKey, const char * pValue)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_SetKeyValue(_this->linux_side, pKey, pValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_SetGameTags, 8)
+void __thiscall winISteamGameServer_SteamGameServer012_SetGameTags(winISteamGameServer_SteamGameServer012 *_this, const char * pchGameTags)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_SetGameTags(_this->linux_side, pchGameTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_SetGameData, 8)
+void __thiscall winISteamGameServer_SteamGameServer012_SetGameData(winISteamGameServer_SteamGameServer012 *_this, const char * pchGameData)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_SetGameData(_this->linux_side, pchGameData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_SetRegion, 8)
+void __thiscall winISteamGameServer_SteamGameServer012_SetRegion(winISteamGameServer_SteamGameServer012 *_this, const char * pszRegion)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_SetRegion(_this->linux_side, pszRegion);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_SendUserConnectAndAuthenticate, 20)
+bool __thiscall winISteamGameServer_SteamGameServer012_SendUserConnectAndAuthenticate(winISteamGameServer_SteamGameServer012 *_this, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, CSteamID * pSteamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer012_SendUserConnectAndAuthenticate(_this->linux_side, unIPClient, pvAuthBlob, cubAuthBlobSize, pSteamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_CreateUnauthenticatedUserConnection, 8)
+CSteamID *__thiscall winISteamGameServer_SteamGameServer012_CreateUnauthenticatedUserConnection(winISteamGameServer_SteamGameServer012 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamGameServer_SteamGameServer012_CreateUnauthenticatedUserConnection(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_SendUserDisconnect, 12)
+void __thiscall winISteamGameServer_SteamGameServer012_SendUserDisconnect(winISteamGameServer_SteamGameServer012 *_this, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_SendUserDisconnect(_this->linux_side, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_BUpdateUserData, 20)
+bool __thiscall winISteamGameServer_SteamGameServer012_BUpdateUserData(winISteamGameServer_SteamGameServer012 *_this, CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer012_BUpdateUserData(_this->linux_side, steamIDUser, pchPlayerName, uScore);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_GetAuthSessionTicket, 16)
+HAuthTicket __thiscall winISteamGameServer_SteamGameServer012_GetAuthSessionTicket(winISteamGameServer_SteamGameServer012 *_this, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer012_GetAuthSessionTicket(_this->linux_side, pTicket, cbMaxTicket, pcbTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_BeginAuthSession, 20)
+EBeginAuthSessionResult __thiscall winISteamGameServer_SteamGameServer012_BeginAuthSession(winISteamGameServer_SteamGameServer012 *_this, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer012_BeginAuthSession(_this->linux_side, pAuthTicket, cbAuthTicket, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_EndAuthSession, 12)
+void __thiscall winISteamGameServer_SteamGameServer012_EndAuthSession(winISteamGameServer_SteamGameServer012 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_EndAuthSession(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_CancelAuthTicket, 8)
+void __thiscall winISteamGameServer_SteamGameServer012_CancelAuthTicket(winISteamGameServer_SteamGameServer012 *_this, HAuthTicket hAuthTicket)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_CancelAuthTicket(_this->linux_side, hAuthTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_UserHasLicenseForApp, 16)
+EUserHasLicenseForAppResult __thiscall winISteamGameServer_SteamGameServer012_UserHasLicenseForApp(winISteamGameServer_SteamGameServer012 *_this, CSteamID steamID, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer012_UserHasLicenseForApp(_this->linux_side, steamID, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_RequestUserGroupStatus, 20)
+bool __thiscall winISteamGameServer_SteamGameServer012_RequestUserGroupStatus(winISteamGameServer_SteamGameServer012 *_this, CSteamID steamIDUser, CSteamID steamIDGroup)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer012_RequestUserGroupStatus(_this->linux_side, steamIDUser, steamIDGroup);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_GetGameplayStats, 4)
+void __thiscall winISteamGameServer_SteamGameServer012_GetGameplayStats(winISteamGameServer_SteamGameServer012 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_GetGameplayStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_GetServerReputation, 4)
+SteamAPICall_t __thiscall winISteamGameServer_SteamGameServer012_GetServerReputation(winISteamGameServer_SteamGameServer012 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer012_GetServerReputation(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_GetPublicIP, 4)
+uint32 __thiscall winISteamGameServer_SteamGameServer012_GetPublicIP(winISteamGameServer_SteamGameServer012 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer012_GetPublicIP(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_HandleIncomingPacket, 18)
+bool __thiscall winISteamGameServer_SteamGameServer012_HandleIncomingPacket(winISteamGameServer_SteamGameServer012 *_this, const void * pData, int cbData, uint32 srcIP, uint16 srcPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer012_HandleIncomingPacket(_this->linux_side, pData, cbData, srcIP, srcPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_GetNextOutgoingPacket, 20)
+int __thiscall winISteamGameServer_SteamGameServer012_GetNextOutgoingPacket(winISteamGameServer_SteamGameServer012 *_this, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer012_GetNextOutgoingPacket(_this->linux_side, pOut, cbMaxOut, pNetAdr, pPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_EnableHeartbeats, 5)
+void __thiscall winISteamGameServer_SteamGameServer012_EnableHeartbeats(winISteamGameServer_SteamGameServer012 *_this, bool bActive)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_EnableHeartbeats(_this->linux_side, bActive);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_SetHeartbeatInterval, 8)
+void __thiscall winISteamGameServer_SteamGameServer012_SetHeartbeatInterval(winISteamGameServer_SteamGameServer012 *_this, int iHeartbeatInterval)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_SetHeartbeatInterval(_this->linux_side, iHeartbeatInterval);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_ForceHeartbeat, 4)
+void __thiscall winISteamGameServer_SteamGameServer012_ForceHeartbeat(winISteamGameServer_SteamGameServer012 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer012_ForceHeartbeat(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_AssociateWithClan, 12)
+SteamAPICall_t __thiscall winISteamGameServer_SteamGameServer012_AssociateWithClan(winISteamGameServer_SteamGameServer012 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer012_AssociateWithClan(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer012_ComputeNewPlayerCompatibility, 12)
+SteamAPICall_t __thiscall winISteamGameServer_SteamGameServer012_ComputeNewPlayerCompatibility(winISteamGameServer_SteamGameServer012 *_this, CSteamID steamIDNewPlayer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer012_ComputeNewPlayerCompatibility(_this->linux_side, steamIDNewPlayer);
+}
+
+extern vtable_ptr winISteamGameServer_SteamGameServer012_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamGameServer_SteamGameServer012,
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_InitGameServer)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_SetProduct)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_SetGameDescription)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_SetModDir)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_SetDedicatedServer)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_LogOn)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_LogOnAnonymous)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_LogOff)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_BLoggedOn)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_BSecure)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_GetSteamID)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_WasRestartRequested)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_SetMaxPlayerCount)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_SetBotPlayerCount)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_SetServerName)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_SetMapName)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_SetPasswordProtected)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_SetSpectatorPort)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_SetSpectatorServerName)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_ClearAllKeyValues)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_SetKeyValue)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_SetGameTags)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_SetGameData)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_SetRegion)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_SendUserConnectAndAuthenticate)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_CreateUnauthenticatedUserConnection)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_SendUserDisconnect)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_BUpdateUserData)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_GetAuthSessionTicket)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_BeginAuthSession)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_EndAuthSession)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_CancelAuthTicket)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_UserHasLicenseForApp)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_RequestUserGroupStatus)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_GetGameplayStats)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_GetServerReputation)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_GetPublicIP)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_HandleIncomingPacket)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_GetNextOutgoingPacket)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_EnableHeartbeats)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_SetHeartbeatInterval)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_ForceHeartbeat)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_AssociateWithClan)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer012_ComputeNewPlayerCompatibility)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamGameServer_SteamGameServer012 *create_winISteamGameServer_SteamGameServer012(void *linux_side)
+{
+ winISteamGameServer_SteamGameServer012 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamGameServer_SteamGameServer012));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamGameServer_SteamGameServer012_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamGameServer_SteamGameServer011.h"
+
+typedef struct __winISteamGameServer_SteamGameServer011 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamGameServer_SteamGameServer011;
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_InitGameServer, 24)
+bool __thiscall winISteamGameServer_SteamGameServer011_InitGameServer(winISteamGameServer_SteamGameServer011 *_this, uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char * pchVersionString)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer011_InitGameServer(_this->linux_side, unIP, usGamePort, usQueryPort, unFlags, nGameAppId, pchVersionString);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_SetProduct, 8)
+void __thiscall winISteamGameServer_SteamGameServer011_SetProduct(winISteamGameServer_SteamGameServer011 *_this, const char * pszProduct)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_SetProduct(_this->linux_side, pszProduct);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_SetGameDescription, 8)
+void __thiscall winISteamGameServer_SteamGameServer011_SetGameDescription(winISteamGameServer_SteamGameServer011 *_this, const char * pszGameDescription)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_SetGameDescription(_this->linux_side, pszGameDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_SetModDir, 8)
+void __thiscall winISteamGameServer_SteamGameServer011_SetModDir(winISteamGameServer_SteamGameServer011 *_this, const char * pszModDir)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_SetModDir(_this->linux_side, pszModDir);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_SetDedicatedServer, 5)
+void __thiscall winISteamGameServer_SteamGameServer011_SetDedicatedServer(winISteamGameServer_SteamGameServer011 *_this, bool bDedicated)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_SetDedicatedServer(_this->linux_side, bDedicated);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_LogOn, 12)
+void __thiscall winISteamGameServer_SteamGameServer011_LogOn(winISteamGameServer_SteamGameServer011 *_this, const char * pszAccountName, const char * pszPassword)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_LogOn(_this->linux_side, pszAccountName, pszPassword);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_LogOnAnonymous, 4)
+void __thiscall winISteamGameServer_SteamGameServer011_LogOnAnonymous(winISteamGameServer_SteamGameServer011 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_LogOnAnonymous(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_LogOff, 4)
+void __thiscall winISteamGameServer_SteamGameServer011_LogOff(winISteamGameServer_SteamGameServer011 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_LogOff(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_BLoggedOn, 4)
+bool __thiscall winISteamGameServer_SteamGameServer011_BLoggedOn(winISteamGameServer_SteamGameServer011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer011_BLoggedOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_BSecure, 4)
+bool __thiscall winISteamGameServer_SteamGameServer011_BSecure(winISteamGameServer_SteamGameServer011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer011_BSecure(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_GetSteamID, 8)
+CSteamID *__thiscall winISteamGameServer_SteamGameServer011_GetSteamID(winISteamGameServer_SteamGameServer011 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamGameServer_SteamGameServer011_GetSteamID(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_WasRestartRequested, 4)
+bool __thiscall winISteamGameServer_SteamGameServer011_WasRestartRequested(winISteamGameServer_SteamGameServer011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer011_WasRestartRequested(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_SetMaxPlayerCount, 8)
+void __thiscall winISteamGameServer_SteamGameServer011_SetMaxPlayerCount(winISteamGameServer_SteamGameServer011 *_this, int cPlayersMax)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_SetMaxPlayerCount(_this->linux_side, cPlayersMax);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_SetBotPlayerCount, 8)
+void __thiscall winISteamGameServer_SteamGameServer011_SetBotPlayerCount(winISteamGameServer_SteamGameServer011 *_this, int cBotplayers)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_SetBotPlayerCount(_this->linux_side, cBotplayers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_SetServerName, 8)
+void __thiscall winISteamGameServer_SteamGameServer011_SetServerName(winISteamGameServer_SteamGameServer011 *_this, const char * pszServerName)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_SetServerName(_this->linux_side, pszServerName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_SetMapName, 8)
+void __thiscall winISteamGameServer_SteamGameServer011_SetMapName(winISteamGameServer_SteamGameServer011 *_this, const char * pszMapName)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_SetMapName(_this->linux_side, pszMapName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_SetPasswordProtected, 5)
+void __thiscall winISteamGameServer_SteamGameServer011_SetPasswordProtected(winISteamGameServer_SteamGameServer011 *_this, bool bPasswordProtected)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_SetPasswordProtected(_this->linux_side, bPasswordProtected);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_SetSpectatorPort, 6)
+void __thiscall winISteamGameServer_SteamGameServer011_SetSpectatorPort(winISteamGameServer_SteamGameServer011 *_this, uint16 unSpectatorPort)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_SetSpectatorPort(_this->linux_side, unSpectatorPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_SetSpectatorServerName, 8)
+void __thiscall winISteamGameServer_SteamGameServer011_SetSpectatorServerName(winISteamGameServer_SteamGameServer011 *_this, const char * pszSpectatorServerName)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_SetSpectatorServerName(_this->linux_side, pszSpectatorServerName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_ClearAllKeyValues, 4)
+void __thiscall winISteamGameServer_SteamGameServer011_ClearAllKeyValues(winISteamGameServer_SteamGameServer011 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_ClearAllKeyValues(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_SetKeyValue, 12)
+void __thiscall winISteamGameServer_SteamGameServer011_SetKeyValue(winISteamGameServer_SteamGameServer011 *_this, const char * pKey, const char * pValue)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_SetKeyValue(_this->linux_side, pKey, pValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_SetGameTags, 8)
+void __thiscall winISteamGameServer_SteamGameServer011_SetGameTags(winISteamGameServer_SteamGameServer011 *_this, const char * pchGameTags)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_SetGameTags(_this->linux_side, pchGameTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_SetGameData, 8)
+void __thiscall winISteamGameServer_SteamGameServer011_SetGameData(winISteamGameServer_SteamGameServer011 *_this, const char * pchGameData)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_SetGameData(_this->linux_side, pchGameData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_SetRegion, 8)
+void __thiscall winISteamGameServer_SteamGameServer011_SetRegion(winISteamGameServer_SteamGameServer011 *_this, const char * pszRegion)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_SetRegion(_this->linux_side, pszRegion);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_SendUserConnectAndAuthenticate, 20)
+bool __thiscall winISteamGameServer_SteamGameServer011_SendUserConnectAndAuthenticate(winISteamGameServer_SteamGameServer011 *_this, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, CSteamID * pSteamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer011_SendUserConnectAndAuthenticate(_this->linux_side, unIPClient, pvAuthBlob, cubAuthBlobSize, pSteamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_CreateUnauthenticatedUserConnection, 8)
+CSteamID *__thiscall winISteamGameServer_SteamGameServer011_CreateUnauthenticatedUserConnection(winISteamGameServer_SteamGameServer011 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamGameServer_SteamGameServer011_CreateUnauthenticatedUserConnection(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_SendUserDisconnect, 12)
+void __thiscall winISteamGameServer_SteamGameServer011_SendUserDisconnect(winISteamGameServer_SteamGameServer011 *_this, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_SendUserDisconnect(_this->linux_side, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_BUpdateUserData, 20)
+bool __thiscall winISteamGameServer_SteamGameServer011_BUpdateUserData(winISteamGameServer_SteamGameServer011 *_this, CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer011_BUpdateUserData(_this->linux_side, steamIDUser, pchPlayerName, uScore);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_GetAuthSessionTicket, 16)
+HAuthTicket __thiscall winISteamGameServer_SteamGameServer011_GetAuthSessionTicket(winISteamGameServer_SteamGameServer011 *_this, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer011_GetAuthSessionTicket(_this->linux_side, pTicket, cbMaxTicket, pcbTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_BeginAuthSession, 20)
+EBeginAuthSessionResult __thiscall winISteamGameServer_SteamGameServer011_BeginAuthSession(winISteamGameServer_SteamGameServer011 *_this, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer011_BeginAuthSession(_this->linux_side, pAuthTicket, cbAuthTicket, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_EndAuthSession, 12)
+void __thiscall winISteamGameServer_SteamGameServer011_EndAuthSession(winISteamGameServer_SteamGameServer011 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_EndAuthSession(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_CancelAuthTicket, 8)
+void __thiscall winISteamGameServer_SteamGameServer011_CancelAuthTicket(winISteamGameServer_SteamGameServer011 *_this, HAuthTicket hAuthTicket)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_CancelAuthTicket(_this->linux_side, hAuthTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_UserHasLicenseForApp, 16)
+EUserHasLicenseForAppResult __thiscall winISteamGameServer_SteamGameServer011_UserHasLicenseForApp(winISteamGameServer_SteamGameServer011 *_this, CSteamID steamID, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer011_UserHasLicenseForApp(_this->linux_side, steamID, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_RequestUserGroupStatus, 20)
+bool __thiscall winISteamGameServer_SteamGameServer011_RequestUserGroupStatus(winISteamGameServer_SteamGameServer011 *_this, CSteamID steamIDUser, CSteamID steamIDGroup)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer011_RequestUserGroupStatus(_this->linux_side, steamIDUser, steamIDGroup);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_GetGameplayStats, 4)
+void __thiscall winISteamGameServer_SteamGameServer011_GetGameplayStats(winISteamGameServer_SteamGameServer011 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_GetGameplayStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_GetServerReputation, 4)
+SteamAPICall_t __thiscall winISteamGameServer_SteamGameServer011_GetServerReputation(winISteamGameServer_SteamGameServer011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer011_GetServerReputation(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_GetPublicIP, 4)
+uint32 __thiscall winISteamGameServer_SteamGameServer011_GetPublicIP(winISteamGameServer_SteamGameServer011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer011_GetPublicIP(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_HandleIncomingPacket, 18)
+bool __thiscall winISteamGameServer_SteamGameServer011_HandleIncomingPacket(winISteamGameServer_SteamGameServer011 *_this, const void * pData, int cbData, uint32 srcIP, uint16 srcPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer011_HandleIncomingPacket(_this->linux_side, pData, cbData, srcIP, srcPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_GetNextOutgoingPacket, 20)
+int __thiscall winISteamGameServer_SteamGameServer011_GetNextOutgoingPacket(winISteamGameServer_SteamGameServer011 *_this, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer011_GetNextOutgoingPacket(_this->linux_side, pOut, cbMaxOut, pNetAdr, pPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_EnableHeartbeats, 5)
+void __thiscall winISteamGameServer_SteamGameServer011_EnableHeartbeats(winISteamGameServer_SteamGameServer011 *_this, bool bActive)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_EnableHeartbeats(_this->linux_side, bActive);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_SetHeartbeatInterval, 8)
+void __thiscall winISteamGameServer_SteamGameServer011_SetHeartbeatInterval(winISteamGameServer_SteamGameServer011 *_this, int iHeartbeatInterval)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_SetHeartbeatInterval(_this->linux_side, iHeartbeatInterval);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_ForceHeartbeat, 4)
+void __thiscall winISteamGameServer_SteamGameServer011_ForceHeartbeat(winISteamGameServer_SteamGameServer011 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer011_ForceHeartbeat(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_AssociateWithClan, 12)
+SteamAPICall_t __thiscall winISteamGameServer_SteamGameServer011_AssociateWithClan(winISteamGameServer_SteamGameServer011 *_this, CSteamID steamIDClan)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer011_AssociateWithClan(_this->linux_side, steamIDClan);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer011_ComputeNewPlayerCompatibility, 12)
+SteamAPICall_t __thiscall winISteamGameServer_SteamGameServer011_ComputeNewPlayerCompatibility(winISteamGameServer_SteamGameServer011 *_this, CSteamID steamIDNewPlayer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer011_ComputeNewPlayerCompatibility(_this->linux_side, steamIDNewPlayer);
+}
+
+extern vtable_ptr winISteamGameServer_SteamGameServer011_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamGameServer_SteamGameServer011,
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_InitGameServer)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_SetProduct)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_SetGameDescription)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_SetModDir)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_SetDedicatedServer)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_LogOn)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_LogOnAnonymous)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_LogOff)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_BLoggedOn)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_BSecure)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_GetSteamID)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_WasRestartRequested)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_SetMaxPlayerCount)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_SetBotPlayerCount)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_SetServerName)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_SetMapName)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_SetPasswordProtected)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_SetSpectatorPort)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_SetSpectatorServerName)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_ClearAllKeyValues)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_SetKeyValue)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_SetGameTags)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_SetGameData)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_SetRegion)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_SendUserConnectAndAuthenticate)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_CreateUnauthenticatedUserConnection)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_SendUserDisconnect)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_BUpdateUserData)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_GetAuthSessionTicket)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_BeginAuthSession)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_EndAuthSession)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_CancelAuthTicket)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_UserHasLicenseForApp)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_RequestUserGroupStatus)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_GetGameplayStats)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_GetServerReputation)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_GetPublicIP)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_HandleIncomingPacket)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_GetNextOutgoingPacket)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_EnableHeartbeats)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_SetHeartbeatInterval)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_ForceHeartbeat)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_AssociateWithClan)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer011_ComputeNewPlayerCompatibility)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamGameServer_SteamGameServer011 *create_winISteamGameServer_SteamGameServer011(void *linux_side)
+{
+ winISteamGameServer_SteamGameServer011 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamGameServer_SteamGameServer011));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamGameServer_SteamGameServer011_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamGameServer_SteamGameServer010.h"
+
+typedef struct __winISteamGameServer_SteamGameServer010 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamGameServer_SteamGameServer010;
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_LogOn, 4)
+void __thiscall winISteamGameServer_SteamGameServer010_LogOn(winISteamGameServer_SteamGameServer010 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer010_LogOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_LogOff, 4)
+void __thiscall winISteamGameServer_SteamGameServer010_LogOff(winISteamGameServer_SteamGameServer010 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer010_LogOff(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_BLoggedOn, 4)
+bool __thiscall winISteamGameServer_SteamGameServer010_BLoggedOn(winISteamGameServer_SteamGameServer010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer010_BLoggedOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_BSecure, 4)
+bool __thiscall winISteamGameServer_SteamGameServer010_BSecure(winISteamGameServer_SteamGameServer010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer010_BSecure(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_GetSteamID, 8)
+CSteamID *__thiscall winISteamGameServer_SteamGameServer010_GetSteamID(winISteamGameServer_SteamGameServer010 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamGameServer_SteamGameServer010_GetSteamID(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_SendUserConnectAndAuthenticate, 20)
+bool __thiscall winISteamGameServer_SteamGameServer010_SendUserConnectAndAuthenticate(winISteamGameServer_SteamGameServer010 *_this, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, CSteamID * pSteamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer010_SendUserConnectAndAuthenticate(_this->linux_side, unIPClient, pvAuthBlob, cubAuthBlobSize, pSteamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_CreateUnauthenticatedUserConnection, 8)
+CSteamID *__thiscall winISteamGameServer_SteamGameServer010_CreateUnauthenticatedUserConnection(winISteamGameServer_SteamGameServer010 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamGameServer_SteamGameServer010_CreateUnauthenticatedUserConnection(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_SendUserDisconnect, 12)
+void __thiscall winISteamGameServer_SteamGameServer010_SendUserDisconnect(winISteamGameServer_SteamGameServer010 *_this, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer010_SendUserDisconnect(_this->linux_side, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_BUpdateUserData, 20)
+bool __thiscall winISteamGameServer_SteamGameServer010_BUpdateUserData(winISteamGameServer_SteamGameServer010 *_this, CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer010_BUpdateUserData(_this->linux_side, steamIDUser, pchPlayerName, uScore);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_BSetServerType, 27)
+bool __thiscall winISteamGameServer_SteamGameServer010_BSetServerType(winISteamGameServer_SteamGameServer010 *_this, uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort, uint16 unSpectatorPort, uint16 usQueryPort, const char * pchGameDir, const char * pchVersion, bool bLANMode)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer010_BSetServerType(_this->linux_side, unServerFlags, unGameIP, unGamePort, unSpectatorPort, usQueryPort, pchGameDir, pchVersion, bLANMode);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_UpdateServerStatus, 28)
+void __thiscall winISteamGameServer_SteamGameServer010_UpdateServerStatus(winISteamGameServer_SteamGameServer010 *_this, int cPlayers, int cPlayersMax, int cBotPlayers, const char * pchServerName, const char * pSpectatorServerName, const char * pchMapName)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer010_UpdateServerStatus(_this->linux_side, cPlayers, cPlayersMax, cBotPlayers, pchServerName, pSpectatorServerName, pchMapName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_UpdateSpectatorPort, 6)
+void __thiscall winISteamGameServer_SteamGameServer010_UpdateSpectatorPort(winISteamGameServer_SteamGameServer010 *_this, uint16 unSpectatorPort)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer010_UpdateSpectatorPort(_this->linux_side, unSpectatorPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_SetGameTags, 8)
+void __thiscall winISteamGameServer_SteamGameServer010_SetGameTags(winISteamGameServer_SteamGameServer010 *_this, const char * pchGameTags)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer010_SetGameTags(_this->linux_side, pchGameTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_GetGameplayStats, 4)
+void __thiscall winISteamGameServer_SteamGameServer010_GetGameplayStats(winISteamGameServer_SteamGameServer010 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer010_GetGameplayStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_GetServerReputation, 4)
+SteamAPICall_t __thiscall winISteamGameServer_SteamGameServer010_GetServerReputation(winISteamGameServer_SteamGameServer010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer010_GetServerReputation(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_RequestUserGroupStatus, 20)
+bool __thiscall winISteamGameServer_SteamGameServer010_RequestUserGroupStatus(winISteamGameServer_SteamGameServer010 *_this, CSteamID steamIDUser, CSteamID steamIDGroup)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer010_RequestUserGroupStatus(_this->linux_side, steamIDUser, steamIDGroup);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_GetPublicIP, 4)
+uint32 __thiscall winISteamGameServer_SteamGameServer010_GetPublicIP(winISteamGameServer_SteamGameServer010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer010_GetPublicIP(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_SetGameData, 8)
+void __thiscall winISteamGameServer_SteamGameServer010_SetGameData(winISteamGameServer_SteamGameServer010 *_this, const char * pchGameData)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer010_SetGameData(_this->linux_side, pchGameData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_UserHasLicenseForApp, 16)
+EUserHasLicenseForAppResult __thiscall winISteamGameServer_SteamGameServer010_UserHasLicenseForApp(winISteamGameServer_SteamGameServer010 *_this, CSteamID steamID, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer010_UserHasLicenseForApp(_this->linux_side, steamID, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_GetAuthSessionTicket, 16)
+HAuthTicket __thiscall winISteamGameServer_SteamGameServer010_GetAuthSessionTicket(winISteamGameServer_SteamGameServer010 *_this, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer010_GetAuthSessionTicket(_this->linux_side, pTicket, cbMaxTicket, pcbTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_BeginAuthSession, 20)
+EBeginAuthSessionResult __thiscall winISteamGameServer_SteamGameServer010_BeginAuthSession(winISteamGameServer_SteamGameServer010 *_this, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer010_BeginAuthSession(_this->linux_side, pAuthTicket, cbAuthTicket, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_EndAuthSession, 12)
+void __thiscall winISteamGameServer_SteamGameServer010_EndAuthSession(winISteamGameServer_SteamGameServer010 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer010_EndAuthSession(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer010_CancelAuthTicket, 8)
+void __thiscall winISteamGameServer_SteamGameServer010_CancelAuthTicket(winISteamGameServer_SteamGameServer010 *_this, HAuthTicket hAuthTicket)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer010_CancelAuthTicket(_this->linux_side, hAuthTicket);
+}
+
+extern vtable_ptr winISteamGameServer_SteamGameServer010_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamGameServer_SteamGameServer010,
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_LogOn)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_LogOff)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_BLoggedOn)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_BSecure)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_GetSteamID)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_SendUserConnectAndAuthenticate)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_CreateUnauthenticatedUserConnection)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_SendUserDisconnect)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_BUpdateUserData)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_BSetServerType)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_UpdateServerStatus)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_UpdateSpectatorPort)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_SetGameTags)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_GetGameplayStats)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_GetServerReputation)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_RequestUserGroupStatus)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_GetPublicIP)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_SetGameData)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_UserHasLicenseForApp)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_GetAuthSessionTicket)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_BeginAuthSession)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_EndAuthSession)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer010_CancelAuthTicket)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamGameServer_SteamGameServer010 *create_winISteamGameServer_SteamGameServer010(void *linux_side)
+{
+ winISteamGameServer_SteamGameServer010 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamGameServer_SteamGameServer010));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamGameServer_SteamGameServer010_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamGameServer_SteamGameServer009.h"
+
+typedef struct __winISteamGameServer_SteamGameServer009 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamGameServer_SteamGameServer009;
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_LogOn, 4)
+void __thiscall winISteamGameServer_SteamGameServer009_LogOn(winISteamGameServer_SteamGameServer009 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer009_LogOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_LogOff, 4)
+void __thiscall winISteamGameServer_SteamGameServer009_LogOff(winISteamGameServer_SteamGameServer009 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer009_LogOff(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_BLoggedOn, 4)
+bool __thiscall winISteamGameServer_SteamGameServer009_BLoggedOn(winISteamGameServer_SteamGameServer009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer009_BLoggedOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_BSecure, 4)
+bool __thiscall winISteamGameServer_SteamGameServer009_BSecure(winISteamGameServer_SteamGameServer009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer009_BSecure(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_GetSteamID, 8)
+CSteamID *__thiscall winISteamGameServer_SteamGameServer009_GetSteamID(winISteamGameServer_SteamGameServer009 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamGameServer_SteamGameServer009_GetSteamID(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_SendUserConnectAndAuthenticate, 20)
+bool __thiscall winISteamGameServer_SteamGameServer009_SendUserConnectAndAuthenticate(winISteamGameServer_SteamGameServer009 *_this, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, CSteamID * pSteamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer009_SendUserConnectAndAuthenticate(_this->linux_side, unIPClient, pvAuthBlob, cubAuthBlobSize, pSteamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_CreateUnauthenticatedUserConnection, 8)
+CSteamID *__thiscall winISteamGameServer_SteamGameServer009_CreateUnauthenticatedUserConnection(winISteamGameServer_SteamGameServer009 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamGameServer_SteamGameServer009_CreateUnauthenticatedUserConnection(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_SendUserDisconnect, 12)
+void __thiscall winISteamGameServer_SteamGameServer009_SendUserDisconnect(winISteamGameServer_SteamGameServer009 *_this, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer009_SendUserDisconnect(_this->linux_side, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_BUpdateUserData, 20)
+bool __thiscall winISteamGameServer_SteamGameServer009_BUpdateUserData(winISteamGameServer_SteamGameServer009 *_this, CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer009_BUpdateUserData(_this->linux_side, steamIDUser, pchPlayerName, uScore);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_BSetServerType, 27)
+bool __thiscall winISteamGameServer_SteamGameServer009_BSetServerType(winISteamGameServer_SteamGameServer009 *_this, uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort, uint16 unSpectatorPort, uint16 usQueryPort, const char * pchGameDir, const char * pchVersion, bool bLANMode)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer009_BSetServerType(_this->linux_side, unServerFlags, unGameIP, unGamePort, unSpectatorPort, usQueryPort, pchGameDir, pchVersion, bLANMode);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_UpdateServerStatus, 28)
+void __thiscall winISteamGameServer_SteamGameServer009_UpdateServerStatus(winISteamGameServer_SteamGameServer009 *_this, int cPlayers, int cPlayersMax, int cBotPlayers, const char * pchServerName, const char * pSpectatorServerName, const char * pchMapName)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer009_UpdateServerStatus(_this->linux_side, cPlayers, cPlayersMax, cBotPlayers, pchServerName, pSpectatorServerName, pchMapName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_UpdateSpectatorPort, 6)
+void __thiscall winISteamGameServer_SteamGameServer009_UpdateSpectatorPort(winISteamGameServer_SteamGameServer009 *_this, uint16 unSpectatorPort)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer009_UpdateSpectatorPort(_this->linux_side, unSpectatorPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_SetGameType, 8)
+void __thiscall winISteamGameServer_SteamGameServer009_SetGameType(winISteamGameServer_SteamGameServer009 *_this, const char * pchGameType)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer009_SetGameType(_this->linux_side, pchGameType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_BGetUserAchievementStatus, 16)
+bool __thiscall winISteamGameServer_SteamGameServer009_BGetUserAchievementStatus(winISteamGameServer_SteamGameServer009 *_this, CSteamID steamID, const char * pchAchievementName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer009_BGetUserAchievementStatus(_this->linux_side, steamID, pchAchievementName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_GetGameplayStats, 4)
+void __thiscall winISteamGameServer_SteamGameServer009_GetGameplayStats(winISteamGameServer_SteamGameServer009 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer009_GetGameplayStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_RequestUserGroupStatus, 20)
+bool __thiscall winISteamGameServer_SteamGameServer009_RequestUserGroupStatus(winISteamGameServer_SteamGameServer009 *_this, CSteamID steamIDUser, CSteamID steamIDGroup)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer009_RequestUserGroupStatus(_this->linux_side, steamIDUser, steamIDGroup);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_GetPublicIP, 4)
+uint32 __thiscall winISteamGameServer_SteamGameServer009_GetPublicIP(winISteamGameServer_SteamGameServer009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer009_GetPublicIP(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_SetGameData, 8)
+void __thiscall winISteamGameServer_SteamGameServer009_SetGameData(winISteamGameServer_SteamGameServer009 *_this, const char * pchGameData)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer009_SetGameData(_this->linux_side, pchGameData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer009_UserHasLicenseForApp, 16)
+EUserHasLicenseForAppResult __thiscall winISteamGameServer_SteamGameServer009_UserHasLicenseForApp(winISteamGameServer_SteamGameServer009 *_this, CSteamID steamID, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer009_UserHasLicenseForApp(_this->linux_side, steamID, appID);
+}
+
+extern vtable_ptr winISteamGameServer_SteamGameServer009_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamGameServer_SteamGameServer009,
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_LogOn)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_LogOff)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_BLoggedOn)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_BSecure)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_GetSteamID)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_SendUserConnectAndAuthenticate)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_CreateUnauthenticatedUserConnection)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_SendUserDisconnect)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_BUpdateUserData)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_BSetServerType)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_UpdateServerStatus)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_UpdateSpectatorPort)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_SetGameType)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_BGetUserAchievementStatus)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_GetGameplayStats)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_RequestUserGroupStatus)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_GetPublicIP)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_SetGameData)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer009_UserHasLicenseForApp)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamGameServer_SteamGameServer009 *create_winISteamGameServer_SteamGameServer009(void *linux_side)
+{
+ winISteamGameServer_SteamGameServer009 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamGameServer_SteamGameServer009));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamGameServer_SteamGameServer009_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamGameServer_SteamGameServer008.h"
+
+typedef struct __winISteamGameServer_SteamGameServer008 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamGameServer_SteamGameServer008;
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer008_LogOn, 4)
+void __thiscall winISteamGameServer_SteamGameServer008_LogOn(winISteamGameServer_SteamGameServer008 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer008_LogOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer008_LogOff, 4)
+void __thiscall winISteamGameServer_SteamGameServer008_LogOff(winISteamGameServer_SteamGameServer008 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer008_LogOff(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer008_BLoggedOn, 4)
+bool __thiscall winISteamGameServer_SteamGameServer008_BLoggedOn(winISteamGameServer_SteamGameServer008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer008_BLoggedOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer008_BSecure, 4)
+bool __thiscall winISteamGameServer_SteamGameServer008_BSecure(winISteamGameServer_SteamGameServer008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer008_BSecure(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer008_GetSteamID, 8)
+CSteamID *__thiscall winISteamGameServer_SteamGameServer008_GetSteamID(winISteamGameServer_SteamGameServer008 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamGameServer_SteamGameServer008_GetSteamID(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer008_SendUserConnectAndAuthenticate, 20)
+bool __thiscall winISteamGameServer_SteamGameServer008_SendUserConnectAndAuthenticate(winISteamGameServer_SteamGameServer008 *_this, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, CSteamID * pSteamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer008_SendUserConnectAndAuthenticate(_this->linux_side, unIPClient, pvAuthBlob, cubAuthBlobSize, pSteamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer008_CreateUnauthenticatedUserConnection, 8)
+CSteamID *__thiscall winISteamGameServer_SteamGameServer008_CreateUnauthenticatedUserConnection(winISteamGameServer_SteamGameServer008 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamGameServer_SteamGameServer008_CreateUnauthenticatedUserConnection(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer008_SendUserDisconnect, 12)
+void __thiscall winISteamGameServer_SteamGameServer008_SendUserDisconnect(winISteamGameServer_SteamGameServer008 *_this, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer008_SendUserDisconnect(_this->linux_side, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer008_BUpdateUserData, 20)
+bool __thiscall winISteamGameServer_SteamGameServer008_BUpdateUserData(winISteamGameServer_SteamGameServer008 *_this, CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer008_BUpdateUserData(_this->linux_side, steamIDUser, pchPlayerName, uScore);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer008_BSetServerType, 27)
+bool __thiscall winISteamGameServer_SteamGameServer008_BSetServerType(winISteamGameServer_SteamGameServer008 *_this, uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort, uint16 unSpectatorPort, uint16 usQueryPort, const char * pchGameDir, const char * pchVersion, bool bLANMode)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer008_BSetServerType(_this->linux_side, unServerFlags, unGameIP, unGamePort, unSpectatorPort, usQueryPort, pchGameDir, pchVersion, bLANMode);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer008_UpdateServerStatus, 28)
+void __thiscall winISteamGameServer_SteamGameServer008_UpdateServerStatus(winISteamGameServer_SteamGameServer008 *_this, int cPlayers, int cPlayersMax, int cBotPlayers, const char * pchServerName, const char * pSpectatorServerName, const char * pchMapName)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer008_UpdateServerStatus(_this->linux_side, cPlayers, cPlayersMax, cBotPlayers, pchServerName, pSpectatorServerName, pchMapName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer008_UpdateSpectatorPort, 6)
+void __thiscall winISteamGameServer_SteamGameServer008_UpdateSpectatorPort(winISteamGameServer_SteamGameServer008 *_this, uint16 unSpectatorPort)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer008_UpdateSpectatorPort(_this->linux_side, unSpectatorPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer008_SetGameType, 8)
+void __thiscall winISteamGameServer_SteamGameServer008_SetGameType(winISteamGameServer_SteamGameServer008 *_this, const char * pchGameType)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer008_SetGameType(_this->linux_side, pchGameType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer008_BGetUserAchievementStatus, 16)
+bool __thiscall winISteamGameServer_SteamGameServer008_BGetUserAchievementStatus(winISteamGameServer_SteamGameServer008 *_this, CSteamID steamID, const char * pchAchievementName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer008_BGetUserAchievementStatus(_this->linux_side, steamID, pchAchievementName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer008_GetGameplayStats, 4)
+void __thiscall winISteamGameServer_SteamGameServer008_GetGameplayStats(winISteamGameServer_SteamGameServer008 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer008_GetGameplayStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer008_RequestUserGroupStatus, 20)
+bool __thiscall winISteamGameServer_SteamGameServer008_RequestUserGroupStatus(winISteamGameServer_SteamGameServer008 *_this, CSteamID steamIDUser, CSteamID steamIDGroup)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer008_RequestUserGroupStatus(_this->linux_side, steamIDUser, steamIDGroup);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer008_GetPublicIP, 4)
+uint32 __thiscall winISteamGameServer_SteamGameServer008_GetPublicIP(winISteamGameServer_SteamGameServer008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer008_GetPublicIP(_this->linux_side);
+}
+
+extern vtable_ptr winISteamGameServer_SteamGameServer008_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamGameServer_SteamGameServer008,
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer008_LogOn)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer008_LogOff)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer008_BLoggedOn)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer008_BSecure)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer008_GetSteamID)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer008_SendUserConnectAndAuthenticate)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer008_CreateUnauthenticatedUserConnection)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer008_SendUserDisconnect)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer008_BUpdateUserData)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer008_BSetServerType)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer008_UpdateServerStatus)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer008_UpdateSpectatorPort)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer008_SetGameType)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer008_BGetUserAchievementStatus)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer008_GetGameplayStats)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer008_RequestUserGroupStatus)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer008_GetPublicIP)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamGameServer_SteamGameServer008 *create_winISteamGameServer_SteamGameServer008(void *linux_side)
+{
+ winISteamGameServer_SteamGameServer008 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamGameServer_SteamGameServer008));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamGameServer_SteamGameServer008_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamGameServer_SteamGameServer005.h"
+
+typedef struct __winISteamGameServer_SteamGameServer005 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamGameServer_SteamGameServer005;
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer005_LogOn, 4)
+void __thiscall winISteamGameServer_SteamGameServer005_LogOn(winISteamGameServer_SteamGameServer005 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer005_LogOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer005_LogOff, 4)
+void __thiscall winISteamGameServer_SteamGameServer005_LogOff(winISteamGameServer_SteamGameServer005 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer005_LogOff(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer005_BLoggedOn, 4)
+bool __thiscall winISteamGameServer_SteamGameServer005_BLoggedOn(winISteamGameServer_SteamGameServer005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer005_BLoggedOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer005_BSecure, 4)
+bool __thiscall winISteamGameServer_SteamGameServer005_BSecure(winISteamGameServer_SteamGameServer005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer005_BSecure(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer005_GetSteamID, 8)
+CSteamID *__thiscall winISteamGameServer_SteamGameServer005_GetSteamID(winISteamGameServer_SteamGameServer005 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamGameServer_SteamGameServer005_GetSteamID(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer005_SendUserConnectAndAuthenticate, 20)
+bool __thiscall winISteamGameServer_SteamGameServer005_SendUserConnectAndAuthenticate(winISteamGameServer_SteamGameServer005 *_this, uint32 unIPClient, const void * pvAuthBlob, uint32 cubAuthBlobSize, CSteamID * pSteamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer005_SendUserConnectAndAuthenticate(_this->linux_side, unIPClient, pvAuthBlob, cubAuthBlobSize, pSteamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer005_CreateUnauthenticatedUserConnection, 8)
+CSteamID *__thiscall winISteamGameServer_SteamGameServer005_CreateUnauthenticatedUserConnection(winISteamGameServer_SteamGameServer005 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamGameServer_SteamGameServer005_CreateUnauthenticatedUserConnection(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer005_SendUserDisconnect, 12)
+void __thiscall winISteamGameServer_SteamGameServer005_SendUserDisconnect(winISteamGameServer_SteamGameServer005 *_this, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer005_SendUserDisconnect(_this->linux_side, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer005_BUpdateUserData, 20)
+bool __thiscall winISteamGameServer_SteamGameServer005_BUpdateUserData(winISteamGameServer_SteamGameServer005 *_this, CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer005_BUpdateUserData(_this->linux_side, steamIDUser, pchPlayerName, uScore);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer005_BSetServerType, 27)
+bool __thiscall winISteamGameServer_SteamGameServer005_BSetServerType(winISteamGameServer_SteamGameServer005 *_this, uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort, uint16 unSpectatorPort, uint16 usQueryPort, const char * pchGameDir, const char * pchVersion, bool bLANMode)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer005_BSetServerType(_this->linux_side, unServerFlags, unGameIP, unGamePort, unSpectatorPort, usQueryPort, pchGameDir, pchVersion, bLANMode);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer005_UpdateServerStatus, 28)
+void __thiscall winISteamGameServer_SteamGameServer005_UpdateServerStatus(winISteamGameServer_SteamGameServer005 *_this, int cPlayers, int cPlayersMax, int cBotPlayers, const char * pchServerName, const char * pSpectatorServerName, const char * pchMapName)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer005_UpdateServerStatus(_this->linux_side, cPlayers, cPlayersMax, cBotPlayers, pchServerName, pSpectatorServerName, pchMapName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer005_UpdateSpectatorPort, 6)
+void __thiscall winISteamGameServer_SteamGameServer005_UpdateSpectatorPort(winISteamGameServer_SteamGameServer005 *_this, uint16 unSpectatorPort)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer005_UpdateSpectatorPort(_this->linux_side, unSpectatorPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer005_SetGameType, 8)
+void __thiscall winISteamGameServer_SteamGameServer005_SetGameType(winISteamGameServer_SteamGameServer005 *_this, const char * pchGameType)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer005_SetGameType(_this->linux_side, pchGameType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer005_BGetUserAchievementStatus, 16)
+bool __thiscall winISteamGameServer_SteamGameServer005_BGetUserAchievementStatus(winISteamGameServer_SteamGameServer005 *_this, CSteamID steamID, const char * pchAchievementName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer005_BGetUserAchievementStatus(_this->linux_side, steamID, pchAchievementName);
+}
+
+extern vtable_ptr winISteamGameServer_SteamGameServer005_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamGameServer_SteamGameServer005,
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer005_LogOn)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer005_LogOff)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer005_BLoggedOn)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer005_BSecure)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer005_GetSteamID)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer005_SendUserConnectAndAuthenticate)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer005_CreateUnauthenticatedUserConnection)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer005_SendUserDisconnect)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer005_BUpdateUserData)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer005_BSetServerType)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer005_UpdateServerStatus)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer005_UpdateSpectatorPort)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer005_SetGameType)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer005_BGetUserAchievementStatus)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamGameServer_SteamGameServer005 *create_winISteamGameServer_SteamGameServer005(void *linux_side)
+{
+ winISteamGameServer_SteamGameServer005 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamGameServer_SteamGameServer005));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamGameServer_SteamGameServer005_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamGameServer_SteamGameServer004.h"
+
+typedef struct __winISteamGameServer_SteamGameServer004 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamGameServer_SteamGameServer004;
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer004_LogOn, 4)
+void __thiscall winISteamGameServer_SteamGameServer004_LogOn(winISteamGameServer_SteamGameServer004 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer004_LogOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer004_LogOff, 4)
+void __thiscall winISteamGameServer_SteamGameServer004_LogOff(winISteamGameServer_SteamGameServer004 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer004_LogOff(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer004_BLoggedOn, 4)
+bool __thiscall winISteamGameServer_SteamGameServer004_BLoggedOn(winISteamGameServer_SteamGameServer004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer004_BLoggedOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer004_BSecure, 4)
+bool __thiscall winISteamGameServer_SteamGameServer004_BSecure(winISteamGameServer_SteamGameServer004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer004_BSecure(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer004_GetSteamID, 8)
+CSteamID *__thiscall winISteamGameServer_SteamGameServer004_GetSteamID(winISteamGameServer_SteamGameServer004 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamGameServer_SteamGameServer004_GetSteamID(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer004_SendUserConnectAndAuthenticate, 24)
+void __thiscall winISteamGameServer_SteamGameServer004_SendUserConnectAndAuthenticate(winISteamGameServer_SteamGameServer004 *_this, CSteamID steamIDUser, uint32 unIPClient, void * pvAuthBlob, uint32 cubAuthBlobSize)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer004_SendUserConnectAndAuthenticate(_this->linux_side, steamIDUser, unIPClient, pvAuthBlob, cubAuthBlobSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer004_CreateUnauthenticatedUserConnection, 8)
+CSteamID *__thiscall winISteamGameServer_SteamGameServer004_CreateUnauthenticatedUserConnection(winISteamGameServer_SteamGameServer004 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamGameServer_SteamGameServer004_CreateUnauthenticatedUserConnection(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer004_SendUserDisconnect, 12)
+void __thiscall winISteamGameServer_SteamGameServer004_SendUserDisconnect(winISteamGameServer_SteamGameServer004 *_this, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer004_SendUserDisconnect(_this->linux_side, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer004_BUpdateUserData, 20)
+bool __thiscall winISteamGameServer_SteamGameServer004_BUpdateUserData(winISteamGameServer_SteamGameServer004 *_this, CSteamID steamIDUser, const char * pchPlayerName, uint32 uScore)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer004_BUpdateUserData(_this->linux_side, steamIDUser, pchPlayerName, uScore);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer004_BSetServerType, 31)
+bool __thiscall winISteamGameServer_SteamGameServer004_BSetServerType(winISteamGameServer_SteamGameServer004 *_this, int32 nGameAppId, uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort, uint16 unSpectatorPort, uint16 usQueryPort, const char * pchGameDir, const char * pchVersion, bool bLANMode)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer004_BSetServerType(_this->linux_side, nGameAppId, unServerFlags, unGameIP, unGamePort, unSpectatorPort, usQueryPort, pchGameDir, pchVersion, bLANMode);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer004_UpdateServerStatus, 28)
+void __thiscall winISteamGameServer_SteamGameServer004_UpdateServerStatus(winISteamGameServer_SteamGameServer004 *_this, int cPlayers, int cPlayersMax, int cBotPlayers, const char * pchServerName, const char * pSpectatorServerName, const char * pchMapName)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer004_UpdateServerStatus(_this->linux_side, cPlayers, cPlayersMax, cBotPlayers, pchServerName, pSpectatorServerName, pchMapName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer004_UpdateSpectatorPort, 6)
+void __thiscall winISteamGameServer_SteamGameServer004_UpdateSpectatorPort(winISteamGameServer_SteamGameServer004 *_this, uint16 unSpectatorPort)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer004_UpdateSpectatorPort(_this->linux_side, unSpectatorPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer004_SetGameType, 8)
+void __thiscall winISteamGameServer_SteamGameServer004_SetGameType(winISteamGameServer_SteamGameServer004 *_this, const char * pchGameType)
+{
+ TRACE("%p\n", _this);
+ cppISteamGameServer_SteamGameServer004_SetGameType(_this->linux_side, pchGameType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServer_SteamGameServer004_BGetUserAchievementStatus, 16)
+bool __thiscall winISteamGameServer_SteamGameServer004_BGetUserAchievementStatus(winISteamGameServer_SteamGameServer004 *_this, CSteamID steamID, const char * pchAchievementName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServer_SteamGameServer004_BGetUserAchievementStatus(_this->linux_side, steamID, pchAchievementName);
+}
+
+extern vtable_ptr winISteamGameServer_SteamGameServer004_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamGameServer_SteamGameServer004,
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer004_LogOn)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer004_LogOff)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer004_BLoggedOn)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer004_BSecure)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer004_GetSteamID)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer004_SendUserConnectAndAuthenticate)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer004_CreateUnauthenticatedUserConnection)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer004_SendUserDisconnect)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer004_BUpdateUserData)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer004_BSetServerType)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer004_UpdateServerStatus)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer004_UpdateSpectatorPort)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer004_SetGameType)
+ VTABLE_ADD_FUNC(winISteamGameServer_SteamGameServer004_BGetUserAchievementStatus)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamGameServer_SteamGameServer004 *create_winISteamGameServer_SteamGameServer004(void *linux_side)
+{
+ winISteamGameServer_SteamGameServer004 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamGameServer_SteamGameServer004));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamGameServer_SteamGameServer004_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamGameServerStats.c b/lsteamclient/winISteamGameServerStats.c
new file mode 100644
index 00000000..27fde6d1
--- /dev/null
+++ b/lsteamclient/winISteamGameServerStats.c
@@ -0,0 +1,126 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamGameServerStats_SteamGameServerStats001.h"
+
+typedef struct __winISteamGameServerStats_SteamGameServerStats001 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamGameServerStats_SteamGameServerStats001;
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServerStats_SteamGameServerStats001_RequestUserStats, 12)
+SteamAPICall_t __thiscall winISteamGameServerStats_SteamGameServerStats001_RequestUserStats(winISteamGameServerStats_SteamGameServerStats001 *_this, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServerStats_SteamGameServerStats001_RequestUserStats(_this->linux_side, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServerStats_SteamGameServerStats001_GetUserStat, 20)
+bool __thiscall winISteamGameServerStats_SteamGameServerStats001_GetUserStat(winISteamGameServerStats_SteamGameServerStats001 *_this, CSteamID steamIDUser, const char * pchName, int32 * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServerStats_SteamGameServerStats001_GetUserStat(_this->linux_side, steamIDUser, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServerStats_SteamGameServerStats001_GetUserStat_2, 20)
+bool __thiscall winISteamGameServerStats_SteamGameServerStats001_GetUserStat_2(winISteamGameServerStats_SteamGameServerStats001 *_this, CSteamID steamIDUser, const char * pchName, float * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServerStats_SteamGameServerStats001_GetUserStat_2(_this->linux_side, steamIDUser, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServerStats_SteamGameServerStats001_GetUserAchievement, 20)
+bool __thiscall winISteamGameServerStats_SteamGameServerStats001_GetUserAchievement(winISteamGameServerStats_SteamGameServerStats001 *_this, CSteamID steamIDUser, const char * pchName, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServerStats_SteamGameServerStats001_GetUserAchievement(_this->linux_side, steamIDUser, pchName, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServerStats_SteamGameServerStats001_SetUserStat, 20)
+bool __thiscall winISteamGameServerStats_SteamGameServerStats001_SetUserStat(winISteamGameServerStats_SteamGameServerStats001 *_this, CSteamID steamIDUser, const char * pchName, int32 nData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServerStats_SteamGameServerStats001_SetUserStat(_this->linux_side, steamIDUser, pchName, nData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServerStats_SteamGameServerStats001_SetUserStat_2, 20)
+bool __thiscall winISteamGameServerStats_SteamGameServerStats001_SetUserStat_2(winISteamGameServerStats_SteamGameServerStats001 *_this, CSteamID steamIDUser, const char * pchName, float fData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServerStats_SteamGameServerStats001_SetUserStat_2(_this->linux_side, steamIDUser, pchName, fData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServerStats_SteamGameServerStats001_UpdateUserAvgRateStat, 28)
+bool __thiscall winISteamGameServerStats_SteamGameServerStats001_UpdateUserAvgRateStat(winISteamGameServerStats_SteamGameServerStats001 *_this, CSteamID steamIDUser, const char * pchName, float flCountThisSession, double dSessionLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServerStats_SteamGameServerStats001_UpdateUserAvgRateStat(_this->linux_side, steamIDUser, pchName, flCountThisSession, dSessionLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServerStats_SteamGameServerStats001_SetUserAchievement, 16)
+bool __thiscall winISteamGameServerStats_SteamGameServerStats001_SetUserAchievement(winISteamGameServerStats_SteamGameServerStats001 *_this, CSteamID steamIDUser, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServerStats_SteamGameServerStats001_SetUserAchievement(_this->linux_side, steamIDUser, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServerStats_SteamGameServerStats001_ClearUserAchievement, 16)
+bool __thiscall winISteamGameServerStats_SteamGameServerStats001_ClearUserAchievement(winISteamGameServerStats_SteamGameServerStats001 *_this, CSteamID steamIDUser, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServerStats_SteamGameServerStats001_ClearUserAchievement(_this->linux_side, steamIDUser, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamGameServerStats_SteamGameServerStats001_StoreUserStats, 12)
+SteamAPICall_t __thiscall winISteamGameServerStats_SteamGameServerStats001_StoreUserStats(winISteamGameServerStats_SteamGameServerStats001 *_this, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamGameServerStats_SteamGameServerStats001_StoreUserStats(_this->linux_side, steamIDUser);
+}
+
+extern vtable_ptr winISteamGameServerStats_SteamGameServerStats001_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamGameServerStats_SteamGameServerStats001,
+ VTABLE_ADD_FUNC(winISteamGameServerStats_SteamGameServerStats001_RequestUserStats)
+ VTABLE_ADD_FUNC(winISteamGameServerStats_SteamGameServerStats001_GetUserStat)
+ VTABLE_ADD_FUNC(winISteamGameServerStats_SteamGameServerStats001_GetUserStat_2)
+ VTABLE_ADD_FUNC(winISteamGameServerStats_SteamGameServerStats001_GetUserAchievement)
+ VTABLE_ADD_FUNC(winISteamGameServerStats_SteamGameServerStats001_SetUserStat)
+ VTABLE_ADD_FUNC(winISteamGameServerStats_SteamGameServerStats001_SetUserStat_2)
+ VTABLE_ADD_FUNC(winISteamGameServerStats_SteamGameServerStats001_UpdateUserAvgRateStat)
+ VTABLE_ADD_FUNC(winISteamGameServerStats_SteamGameServerStats001_SetUserAchievement)
+ VTABLE_ADD_FUNC(winISteamGameServerStats_SteamGameServerStats001_ClearUserAchievement)
+ VTABLE_ADD_FUNC(winISteamGameServerStats_SteamGameServerStats001_StoreUserStats)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamGameServerStats_SteamGameServerStats001 *create_winISteamGameServerStats_SteamGameServerStats001(void *linux_side)
+{
+ winISteamGameServerStats_SteamGameServerStats001 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamGameServerStats_SteamGameServerStats001));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamGameServerStats_SteamGameServerStats001_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamHTMLSurface.c b/lsteamclient/winISteamHTMLSurface.c
new file mode 100644
index 00000000..485e7b98
--- /dev/null
+++ b/lsteamclient/winISteamHTMLSurface.c
@@ -0,0 +1,940 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004.h"
+
+typedef struct __winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004;
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Init, 4)
+bool __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Init(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Init(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Shutdown, 4)
+bool __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Shutdown(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Shutdown(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_CreateBrowser, 12)
+SteamAPICall_t __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_CreateBrowser(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, const char * pchUserAgent, const char * pchUserCSS)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_CreateBrowser(_this->linux_side, pchUserAgent, pchUserCSS);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_RemoveBrowser, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_RemoveBrowser(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_RemoveBrowser(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_LoadURL, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_LoadURL(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_LoadURL(_this->linux_side, unBrowserHandle, pchURL, pchPostData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetSize, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetSize(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetSize(_this->linux_side, unBrowserHandle, unWidth, unHeight);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_StopLoad, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_StopLoad(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_StopLoad(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Reload, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Reload(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Reload(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_GoBack, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_GoBack(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_GoBack(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_GoForward, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_GoForward(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_GoForward(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_AddHeader, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_AddHeader(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_AddHeader(_this->linux_side, unBrowserHandle, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_ExecuteJavascript, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_ExecuteJavascript(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, const char * pchScript)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_ExecuteJavascript(_this->linux_side, unBrowserHandle, pchScript);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseUp, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseUp(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseUp(_this->linux_side, unBrowserHandle, eMouseButton);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseDown, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseDown(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseDown(_this->linux_side, unBrowserHandle, eMouseButton);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseDoubleClick, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseDoubleClick(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseDoubleClick(_this->linux_side, unBrowserHandle, eMouseButton);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseMove, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseMove(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, int x, int y)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseMove(_this->linux_side, unBrowserHandle, x, y);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseWheel, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseWheel(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, int32 nDelta)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseWheel(_this->linux_side, unBrowserHandle, nDelta);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyDown, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyDown(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyDown(_this->linux_side, unBrowserHandle, nNativeKeyCode, eHTMLKeyModifiers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyUp, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyUp(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyUp(_this->linux_side, unBrowserHandle, nNativeKeyCode, eHTMLKeyModifiers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyChar, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyChar(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyChar(_this->linux_side, unBrowserHandle, cUnicodeChar, eHTMLKeyModifiers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetHorizontalScroll, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetHorizontalScroll(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetHorizontalScroll(_this->linux_side, unBrowserHandle, nAbsolutePixelScroll);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetVerticalScroll, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetVerticalScroll(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetVerticalScroll(_this->linux_side, unBrowserHandle, nAbsolutePixelScroll);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetKeyFocus, 9)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetKeyFocus(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetKeyFocus(_this->linux_side, unBrowserHandle, bHasKeyFocus);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_ViewSource, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_ViewSource(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_ViewSource(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_CopyToClipboard, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_CopyToClipboard(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_CopyToClipboard(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_PasteFromClipboard, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_PasteFromClipboard(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_PasteFromClipboard(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Find, 14)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Find(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Find(_this->linux_side, unBrowserHandle, pchSearchStr, bCurrentlyInFind, bReverse);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_StopFind, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_StopFind(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_StopFind(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_GetLinkAtPosition, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_GetLinkAtPosition(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, int x, int y)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_GetLinkAtPosition(_this->linux_side, unBrowserHandle, x, y);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetCookie, 26)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetCookie(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetCookie(_this->linux_side, pchHostname, pchKey, pchValue, pchPath, nExpires, bSecure, bHTTPOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetPageScaleFactor, 20)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetPageScaleFactor(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetPageScaleFactor(_this->linux_side, unBrowserHandle, flZoom, nPointX, nPointY);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetBackgroundMode, 9)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetBackgroundMode(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, bool bBackgroundMode)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetBackgroundMode(_this->linux_side, unBrowserHandle, bBackgroundMode);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetDPIScalingFactor, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetDPIScalingFactor(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, float flDPIScaling)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetDPIScalingFactor(_this->linux_side, unBrowserHandle, flDPIScaling);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_AllowStartRequest, 9)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_AllowStartRequest(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, bool bAllowed)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_AllowStartRequest(_this->linux_side, unBrowserHandle, bAllowed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_JSDialogResponse, 9)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_JSDialogResponse(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, bool bResult)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_JSDialogResponse(_this->linux_side, unBrowserHandle, bResult);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_FileLoadDialogResponse, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_FileLoadDialogResponse(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *_this, HHTMLBrowser unBrowserHandle, const char ** pchSelectedFiles)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_FileLoadDialogResponse(_this->linux_side, unBrowserHandle, pchSelectedFiles);
+}
+
+extern vtable_ptr winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004,
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Init)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Shutdown)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_CreateBrowser)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_RemoveBrowser)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_LoadURL)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetSize)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_StopLoad)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Reload)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_GoBack)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_GoForward)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_AddHeader)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_ExecuteJavascript)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseUp)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseDown)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseDoubleClick)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseMove)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseWheel)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyDown)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyUp)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyChar)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetHorizontalScroll)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetVerticalScroll)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetKeyFocus)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_ViewSource)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_CopyToClipboard)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_PasteFromClipboard)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_Find)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_StopFind)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_GetLinkAtPosition)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetCookie)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetPageScaleFactor)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetBackgroundMode)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_SetDPIScalingFactor)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_AllowStartRequest)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_JSDialogResponse)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_FileLoadDialogResponse)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *create_winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004(void *linux_side)
+{
+ winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003.h"
+
+typedef struct __winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003;
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Init, 4)
+bool __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Init(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Init(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Shutdown, 4)
+bool __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Shutdown(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Shutdown(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_CreateBrowser, 12)
+SteamAPICall_t __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_CreateBrowser(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, const char * pchUserAgent, const char * pchUserCSS)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_CreateBrowser(_this->linux_side, pchUserAgent, pchUserCSS);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_RemoveBrowser, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_RemoveBrowser(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_RemoveBrowser(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_LoadURL, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_LoadURL(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_LoadURL(_this->linux_side, unBrowserHandle, pchURL, pchPostData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetSize, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetSize(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetSize(_this->linux_side, unBrowserHandle, unWidth, unHeight);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_StopLoad, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_StopLoad(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_StopLoad(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Reload, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Reload(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Reload(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_GoBack, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_GoBack(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_GoBack(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_GoForward, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_GoForward(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_GoForward(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_AddHeader, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_AddHeader(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_AddHeader(_this->linux_side, unBrowserHandle, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_ExecuteJavascript, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_ExecuteJavascript(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, const char * pchScript)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_ExecuteJavascript(_this->linux_side, unBrowserHandle, pchScript);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseUp, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseUp(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseUp(_this->linux_side, unBrowserHandle, eMouseButton);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseDown, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseDown(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseDown(_this->linux_side, unBrowserHandle, eMouseButton);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseDoubleClick, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseDoubleClick(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseDoubleClick(_this->linux_side, unBrowserHandle, eMouseButton);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseMove, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseMove(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, int x, int y)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseMove(_this->linux_side, unBrowserHandle, x, y);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseWheel, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseWheel(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, int32 nDelta)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseWheel(_this->linux_side, unBrowserHandle, nDelta);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyDown, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyDown(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyDown(_this->linux_side, unBrowserHandle, nNativeKeyCode, eHTMLKeyModifiers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyUp, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyUp(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyUp(_this->linux_side, unBrowserHandle, nNativeKeyCode, eHTMLKeyModifiers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyChar, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyChar(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyChar(_this->linux_side, unBrowserHandle, cUnicodeChar, eHTMLKeyModifiers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetHorizontalScroll, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetHorizontalScroll(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetHorizontalScroll(_this->linux_side, unBrowserHandle, nAbsolutePixelScroll);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetVerticalScroll, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetVerticalScroll(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetVerticalScroll(_this->linux_side, unBrowserHandle, nAbsolutePixelScroll);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetKeyFocus, 9)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetKeyFocus(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetKeyFocus(_this->linux_side, unBrowserHandle, bHasKeyFocus);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_ViewSource, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_ViewSource(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_ViewSource(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_CopyToClipboard, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_CopyToClipboard(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_CopyToClipboard(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_PasteFromClipboard, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_PasteFromClipboard(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_PasteFromClipboard(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Find, 14)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Find(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Find(_this->linux_side, unBrowserHandle, pchSearchStr, bCurrentlyInFind, bReverse);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_StopFind, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_StopFind(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_StopFind(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_GetLinkAtPosition, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_GetLinkAtPosition(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, int x, int y)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_GetLinkAtPosition(_this->linux_side, unBrowserHandle, x, y);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetCookie, 26)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetCookie(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetCookie(_this->linux_side, pchHostname, pchKey, pchValue, pchPath, nExpires, bSecure, bHTTPOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetPageScaleFactor, 20)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetPageScaleFactor(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetPageScaleFactor(_this->linux_side, unBrowserHandle, flZoom, nPointX, nPointY);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetBackgroundMode, 9)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetBackgroundMode(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, bool bBackgroundMode)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetBackgroundMode(_this->linux_side, unBrowserHandle, bBackgroundMode);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_AllowStartRequest, 9)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_AllowStartRequest(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, bool bAllowed)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_AllowStartRequest(_this->linux_side, unBrowserHandle, bAllowed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_JSDialogResponse, 9)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_JSDialogResponse(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, bool bResult)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_JSDialogResponse(_this->linux_side, unBrowserHandle, bResult);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_FileLoadDialogResponse, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_FileLoadDialogResponse(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *_this, HHTMLBrowser unBrowserHandle, const char ** pchSelectedFiles)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_FileLoadDialogResponse(_this->linux_side, unBrowserHandle, pchSelectedFiles);
+}
+
+extern vtable_ptr winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003,
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Init)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Shutdown)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_CreateBrowser)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_RemoveBrowser)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_LoadURL)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetSize)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_StopLoad)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Reload)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_GoBack)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_GoForward)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_AddHeader)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_ExecuteJavascript)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseUp)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseDown)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseDoubleClick)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseMove)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseWheel)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyDown)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyUp)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyChar)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetHorizontalScroll)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetVerticalScroll)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetKeyFocus)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_ViewSource)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_CopyToClipboard)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_PasteFromClipboard)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_Find)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_StopFind)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_GetLinkAtPosition)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetCookie)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetPageScaleFactor)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_SetBackgroundMode)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_AllowStartRequest)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_JSDialogResponse)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_FileLoadDialogResponse)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *create_winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003(void *linux_side)
+{
+ winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002.h"
+
+typedef struct __winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002;
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Init, 4)
+bool __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Init(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Init(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Shutdown, 4)
+bool __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Shutdown(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Shutdown(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_CreateBrowser, 12)
+SteamAPICall_t __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_CreateBrowser(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, const char * pchUserAgent, const char * pchUserCSS)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_CreateBrowser(_this->linux_side, pchUserAgent, pchUserCSS);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_RemoveBrowser, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_RemoveBrowser(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_RemoveBrowser(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_LoadURL, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_LoadURL(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, const char * pchURL, const char * pchPostData)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_LoadURL(_this->linux_side, unBrowserHandle, pchURL, pchPostData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetSize, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetSize(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetSize(_this->linux_side, unBrowserHandle, unWidth, unHeight);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_StopLoad, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_StopLoad(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_StopLoad(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Reload, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Reload(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Reload(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_GoBack, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_GoBack(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_GoBack(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_GoForward, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_GoForward(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_GoForward(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_AddHeader, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_AddHeader(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_AddHeader(_this->linux_side, unBrowserHandle, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_ExecuteJavascript, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_ExecuteJavascript(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, const char * pchScript)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_ExecuteJavascript(_this->linux_side, unBrowserHandle, pchScript);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseUp, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseUp(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseUp(_this->linux_side, unBrowserHandle, eMouseButton);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseDown, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseDown(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseDown(_this->linux_side, unBrowserHandle, eMouseButton);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseDoubleClick, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseDoubleClick(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseDoubleClick(_this->linux_side, unBrowserHandle, eMouseButton);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseMove, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseMove(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, int x, int y)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseMove(_this->linux_side, unBrowserHandle, x, y);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseWheel, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseWheel(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, int32 nDelta)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseWheel(_this->linux_side, unBrowserHandle, nDelta);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyDown, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyDown(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyDown(_this->linux_side, unBrowserHandle, nNativeKeyCode, eHTMLKeyModifiers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyUp, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyUp(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyUp(_this->linux_side, unBrowserHandle, nNativeKeyCode, eHTMLKeyModifiers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyChar, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyChar(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyChar(_this->linux_side, unBrowserHandle, cUnicodeChar, eHTMLKeyModifiers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetHorizontalScroll, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetHorizontalScroll(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetHorizontalScroll(_this->linux_side, unBrowserHandle, nAbsolutePixelScroll);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetVerticalScroll, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetVerticalScroll(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetVerticalScroll(_this->linux_side, unBrowserHandle, nAbsolutePixelScroll);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetKeyFocus, 9)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetKeyFocus(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetKeyFocus(_this->linux_side, unBrowserHandle, bHasKeyFocus);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_ViewSource, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_ViewSource(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_ViewSource(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_CopyToClipboard, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_CopyToClipboard(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_CopyToClipboard(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_PasteFromClipboard, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_PasteFromClipboard(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_PasteFromClipboard(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Find, 14)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Find(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, const char * pchSearchStr, bool bCurrentlyInFind, bool bReverse)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Find(_this->linux_side, unBrowserHandle, pchSearchStr, bCurrentlyInFind, bReverse);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_StopFind, 8)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_StopFind(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_StopFind(_this->linux_side, unBrowserHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_GetLinkAtPosition, 16)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_GetLinkAtPosition(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, int x, int y)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_GetLinkAtPosition(_this->linux_side, unBrowserHandle, x, y);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetCookie, 26)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetCookie(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, const char * pchHostname, const char * pchKey, const char * pchValue, const char * pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetCookie(_this->linux_side, pchHostname, pchKey, pchValue, pchPath, nExpires, bSecure, bHTTPOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetPageScaleFactor, 20)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetPageScaleFactor(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetPageScaleFactor(_this->linux_side, unBrowserHandle, flZoom, nPointX, nPointY);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_AllowStartRequest, 9)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_AllowStartRequest(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, bool bAllowed)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_AllowStartRequest(_this->linux_side, unBrowserHandle, bAllowed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_JSDialogResponse, 9)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_JSDialogResponse(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, bool bResult)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_JSDialogResponse(_this->linux_side, unBrowserHandle, bResult);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_FileLoadDialogResponse, 12)
+void __thiscall winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_FileLoadDialogResponse(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *_this, HHTMLBrowser unBrowserHandle, const char ** pchSelectedFiles)
+{
+ TRACE("%p\n", _this);
+ cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_FileLoadDialogResponse(_this->linux_side, unBrowserHandle, pchSelectedFiles);
+}
+
+extern vtable_ptr winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002,
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Init)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Shutdown)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_CreateBrowser)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_RemoveBrowser)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_LoadURL)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetSize)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_StopLoad)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Reload)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_GoBack)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_GoForward)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_AddHeader)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_ExecuteJavascript)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseUp)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseDown)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseDoubleClick)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseMove)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseWheel)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyDown)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyUp)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyChar)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetHorizontalScroll)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetVerticalScroll)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetKeyFocus)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_ViewSource)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_CopyToClipboard)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_PasteFromClipboard)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_Find)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_StopFind)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_GetLinkAtPosition)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetCookie)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_SetPageScaleFactor)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_AllowStartRequest)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_JSDialogResponse)
+ VTABLE_ADD_FUNC(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_FileLoadDialogResponse)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *create_winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002(void *linux_side)
+{
+ winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamHTTP.c b/lsteamclient/winISteamHTTP.c
new file mode 100644
index 00000000..2f54b7e0
--- /dev/null
+++ b/lsteamclient/winISteamHTTP.c
@@ -0,0 +1,393 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002.h"
+
+typedef struct __winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002;
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_CreateHTTPRequest, 12)
+HTTPRequestHandle __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_CreateHTTPRequest(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_CreateHTTPRequest(_this->linux_side, eHTTPRequestMethod, pchAbsoluteURL);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestContextValue, 16)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestContextValue(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest, uint64 ulContextValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestContextValue(_this->linux_side, hRequest, ulContextValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestNetworkActivityTimeout, 12)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestNetworkActivityTimeout(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestNetworkActivityTimeout(_this->linux_side, hRequest, unTimeoutSeconds);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestHeaderValue, 16)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestHeaderValue(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestHeaderValue(_this->linux_side, hRequest, pchHeaderName, pchHeaderValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestGetOrPostParameter, 16)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestGetOrPostParameter(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestGetOrPostParameter(_this->linux_side, hRequest, pchParamName, pchParamValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SendHTTPRequest, 12)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SendHTTPRequest(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SendHTTPRequest(_this->linux_side, hRequest, pCallHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SendHTTPRequestAndStreamResponse, 12)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SendHTTPRequestAndStreamResponse(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SendHTTPRequestAndStreamResponse(_this->linux_side, hRequest, pCallHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_DeferHTTPRequest, 8)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_DeferHTTPRequest(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_DeferHTTPRequest(_this->linux_side, hRequest);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_PrioritizeHTTPRequest, 8)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_PrioritizeHTTPRequest(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_PrioritizeHTTPRequest(_this->linux_side, hRequest);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseHeaderSize, 16)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseHeaderSize(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseHeaderSize(_this->linux_side, hRequest, pchHeaderName, unResponseHeaderSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseHeaderValue, 20)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseHeaderValue(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseHeaderValue(_this->linux_side, hRequest, pchHeaderName, pHeaderValueBuffer, unBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseBodySize, 12)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseBodySize(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest, uint32 * unBodySize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseBodySize(_this->linux_side, hRequest, unBodySize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseBodyData, 16)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseBodyData(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseBodyData(_this->linux_side, hRequest, pBodyDataBuffer, unBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPStreamingResponseBodyData, 20)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPStreamingResponseBodyData(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest, uint32 cOffset, uint8 * pBodyDataBuffer, uint32 unBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPStreamingResponseBodyData(_this->linux_side, hRequest, cOffset, pBodyDataBuffer, unBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_ReleaseHTTPRequest, 8)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_ReleaseHTTPRequest(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_ReleaseHTTPRequest(_this->linux_side, hRequest);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPDownloadProgressPct, 12)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPDownloadProgressPct(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest, float * pflPercentOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPDownloadProgressPct(_this->linux_side, hRequest, pflPercentOut);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestRawPostBody, 20)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestRawPostBody(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestRawPostBody(_this->linux_side, hRequest, pchContentType, pubBody, unBodyLen);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_CreateCookieContainer, 5)
+HTTPCookieContainerHandle __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_CreateCookieContainer(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, bool bAllowResponsesToModify)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_CreateCookieContainer(_this->linux_side, bAllowResponsesToModify);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_ReleaseCookieContainer, 8)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_ReleaseCookieContainer(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPCookieContainerHandle hCookieContainer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_ReleaseCookieContainer(_this->linux_side, hCookieContainer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetCookie, 20)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetCookie(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPCookieContainerHandle hCookieContainer, const char * pchHost, const char * pchUrl, const char * pchCookie)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetCookie(_this->linux_side, hCookieContainer, pchHost, pchUrl, pchCookie);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestCookieContainer, 12)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestCookieContainer(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestCookieContainer(_this->linux_side, hRequest, hCookieContainer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestUserAgentInfo, 12)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestUserAgentInfo(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest, const char * pchUserAgentInfo)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestUserAgentInfo(_this->linux_side, hRequest, pchUserAgentInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestRequiresVerifiedCertificate, 9)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestRequiresVerifiedCertificate(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestRequiresVerifiedCertificate(_this->linux_side, hRequest, bRequireVerifiedCertificate);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestAbsoluteTimeoutMS, 12)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestAbsoluteTimeoutMS(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest, uint32 unMilliseconds)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestAbsoluteTimeoutMS(_this->linux_side, hRequest, unMilliseconds);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPRequestWasTimedOut, 12)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPRequestWasTimedOut(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *_this, HTTPRequestHandle hRequest, bool * pbWasTimedOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPRequestWasTimedOut(_this->linux_side, hRequest, pbWasTimedOut);
+}
+
+extern vtable_ptr winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002,
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_CreateHTTPRequest)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestContextValue)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestNetworkActivityTimeout)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestHeaderValue)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestGetOrPostParameter)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SendHTTPRequest)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SendHTTPRequestAndStreamResponse)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_DeferHTTPRequest)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_PrioritizeHTTPRequest)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseHeaderSize)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseHeaderValue)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseBodySize)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPResponseBodyData)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPStreamingResponseBodyData)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_ReleaseHTTPRequest)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPDownloadProgressPct)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestRawPostBody)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_CreateCookieContainer)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_ReleaseCookieContainer)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetCookie)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestCookieContainer)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestUserAgentInfo)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestRequiresVerifiedCertificate)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_SetHTTPRequestAbsoluteTimeoutMS)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_GetHTTPRequestWasTimedOut)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *create_winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002(void *linux_side)
+{
+ winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001.h"
+
+typedef struct __winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001;
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_CreateHTTPRequest, 12)
+HTTPRequestHandle __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_CreateHTTPRequest(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001 *_this, EHTTPMethod eHTTPRequestMethod, const char * pchAbsoluteURL)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_CreateHTTPRequest(_this->linux_side, eHTTPRequestMethod, pchAbsoluteURL);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestContextValue, 16)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestContextValue(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001 *_this, HTTPRequestHandle hRequest, uint64 ulContextValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestContextValue(_this->linux_side, hRequest, ulContextValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestNetworkActivityTimeout, 12)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestNetworkActivityTimeout(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001 *_this, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestNetworkActivityTimeout(_this->linux_side, hRequest, unTimeoutSeconds);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestHeaderValue, 16)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestHeaderValue(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001 *_this, HTTPRequestHandle hRequest, const char * pchHeaderName, const char * pchHeaderValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestHeaderValue(_this->linux_side, hRequest, pchHeaderName, pchHeaderValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestGetOrPostParameter, 16)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestGetOrPostParameter(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001 *_this, HTTPRequestHandle hRequest, const char * pchParamName, const char * pchParamValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestGetOrPostParameter(_this->linux_side, hRequest, pchParamName, pchParamValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SendHTTPRequest, 12)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SendHTTPRequest(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001 *_this, HTTPRequestHandle hRequest, SteamAPICall_t * pCallHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SendHTTPRequest(_this->linux_side, hRequest, pCallHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_DeferHTTPRequest, 8)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_DeferHTTPRequest(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001 *_this, HTTPRequestHandle hRequest)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_DeferHTTPRequest(_this->linux_side, hRequest);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_PrioritizeHTTPRequest, 8)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_PrioritizeHTTPRequest(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001 *_this, HTTPRequestHandle hRequest)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_PrioritizeHTTPRequest(_this->linux_side, hRequest);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseHeaderSize, 16)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseHeaderSize(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001 *_this, HTTPRequestHandle hRequest, const char * pchHeaderName, uint32 * unResponseHeaderSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseHeaderSize(_this->linux_side, hRequest, pchHeaderName, unResponseHeaderSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseHeaderValue, 20)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseHeaderValue(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001 *_this, HTTPRequestHandle hRequest, const char * pchHeaderName, uint8 * pHeaderValueBuffer, uint32 unBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseHeaderValue(_this->linux_side, hRequest, pchHeaderName, pHeaderValueBuffer, unBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseBodySize, 12)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseBodySize(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001 *_this, HTTPRequestHandle hRequest, uint32 * unBodySize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseBodySize(_this->linux_side, hRequest, unBodySize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseBodyData, 16)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseBodyData(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001 *_this, HTTPRequestHandle hRequest, uint8 * pBodyDataBuffer, uint32 unBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseBodyData(_this->linux_side, hRequest, pBodyDataBuffer, unBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_ReleaseHTTPRequest, 8)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_ReleaseHTTPRequest(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001 *_this, HTTPRequestHandle hRequest)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_ReleaseHTTPRequest(_this->linux_side, hRequest);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPDownloadProgressPct, 12)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPDownloadProgressPct(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001 *_this, HTTPRequestHandle hRequest, float * pflPercentOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPDownloadProgressPct(_this->linux_side, hRequest, pflPercentOut);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestRawPostBody, 20)
+bool __thiscall winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestRawPostBody(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001 *_this, HTTPRequestHandle hRequest, const char * pchContentType, uint8 * pubBody, uint32 unBodyLen)
+{
+ TRACE("%p\n", _this);
+ return cppISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestRawPostBody(_this->linux_side, hRequest, pchContentType, pubBody, unBodyLen);
+}
+
+extern vtable_ptr winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001,
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_CreateHTTPRequest)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestContextValue)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestNetworkActivityTimeout)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestHeaderValue)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestGetOrPostParameter)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SendHTTPRequest)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_DeferHTTPRequest)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_PrioritizeHTTPRequest)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseHeaderSize)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseHeaderValue)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseBodySize)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPResponseBodyData)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_ReleaseHTTPRequest)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_GetHTTPDownloadProgressPct)
+ VTABLE_ADD_FUNC(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_SetHTTPRequestRawPostBody)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001 *create_winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001(void *linux_side)
+{
+ winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamInventory.c b/lsteamclient/winISteamInventory.c
new file mode 100644
index 00000000..2041a0e4
--- /dev/null
+++ b/lsteamclient/winISteamInventory.c
@@ -0,0 +1,561 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamInventory_STEAMINVENTORY_INTERFACE_V002.h"
+
+typedef struct __winISteamInventory_STEAMINVENTORY_INTERFACE_V002 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamInventory_STEAMINVENTORY_INTERFACE_V002;
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultStatus, 8)
+EResult __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultStatus(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t resultHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultStatus(_this->linux_side, resultHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultItems, 16)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultItems(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t resultHandle, SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultItems(_this->linux_side, resultHandle, pOutItemsArray, punOutItemsArraySize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultItemProperty, 24)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultItemProperty(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t resultHandle, uint32 unItemIndex, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSizeOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultItemProperty(_this->linux_side, resultHandle, unItemIndex, pchPropertyName, pchValueBuffer, punValueBufferSizeOut);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultTimestamp, 8)
+uint32 __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultTimestamp(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t resultHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultTimestamp(_this->linux_side, resultHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_CheckResultSteamID, 16)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_CheckResultSteamID(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t resultHandle, CSteamID steamIDExpected)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_CheckResultSteamID(_this->linux_side, resultHandle, steamIDExpected);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_DestroyResult, 8)
+void __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_DestroyResult(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t resultHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_DestroyResult(_this->linux_side, resultHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetAllItems, 8)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetAllItems(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t * pResultHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetAllItems(_this->linux_side, pResultHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemsByID, 16)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemsByID(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemsByID(_this->linux_side, pResultHandle, pInstanceIDs, unCountInstanceIDs);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SerializeResult, 16)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SerializeResult(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SerializeResult(_this->linux_side, resultHandle, pOutBuffer, punOutBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_DeserializeResult, 17)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_DeserializeResult(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_DeserializeResult(_this->linux_side, pOutResultHandle, pBuffer, unBufferSize, bRESERVED_MUST_BE_FALSE);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GenerateItems, 20)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GenerateItems(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GenerateItems(_this->linux_side, pResultHandle, pArrayItemDefs, punArrayQuantity, unArrayLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GrantPromoItems, 8)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GrantPromoItems(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t * pResultHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GrantPromoItems(_this->linux_side, pResultHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_AddPromoItem, 12)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_AddPromoItem(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_AddPromoItem(_this->linux_side, pResultHandle, itemDef);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_AddPromoItems, 16)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_AddPromoItems(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_AddPromoItems(_this->linux_side, pResultHandle, pArrayItemDefs, unArrayLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_ConsumeItem, 20)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_ConsumeItem(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_ConsumeItem(_this->linux_side, pResultHandle, itemConsume, unQuantity);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_ExchangeItems, 32)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_ExchangeItems(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_ExchangeItems(_this->linux_side, pResultHandle, pArrayGenerate, punArrayGenerateQuantity, unArrayGenerateLength, pArrayDestroy, punArrayDestroyQuantity, unArrayDestroyLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_TransferItemQuantity, 28)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_TransferItemQuantity(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_TransferItemQuantity(_this->linux_side, pResultHandle, itemIdSource, unQuantity, itemIdDest);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SendItemDropHeartbeat, 4)
+void __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SendItemDropHeartbeat(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SendItemDropHeartbeat(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_TriggerItemDrop, 12)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_TriggerItemDrop(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_TriggerItemDrop(_this->linux_side, pResultHandle, dropListDefinition);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_TradeItems, 40)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_TradeItems(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryResult_t * pResultHandle, CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_TradeItems(_this->linux_side, pResultHandle, steamIDTradePartner, pArrayGive, pArrayGiveQuantity, nArrayGiveLength, pArrayGet, pArrayGetQuantity, nArrayGetLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_LoadItemDefinitions, 4)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_LoadItemDefinitions(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_LoadItemDefinitions(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemDefinitionIDs, 12)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemDefinitionIDs(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemDefinitionIDs(_this->linux_side, pItemDefIDs, punItemDefIDsArraySize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemDefinitionProperty, 20)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemDefinitionProperty(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSizeOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemDefinitionProperty(_this->linux_side, iDefinition, pchPropertyName, pchValueBuffer, punValueBufferSizeOut);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_RequestEligiblePromoItemDefinitionsIDs, 12)
+SteamAPICall_t __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_RequestEligiblePromoItemDefinitionsIDs(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_RequestEligiblePromoItemDefinitionsIDs(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetEligiblePromoItemDefinitionIDs, 20)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetEligiblePromoItemDefinitionIDs(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, CSteamID steamID, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetEligiblePromoItemDefinitionIDs(_this->linux_side, steamID, pItemDefIDs, punItemDefIDsArraySize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_StartPurchase, 16)
+SteamAPICall_t __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_StartPurchase(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_StartPurchase(_this->linux_side, pArrayItemDefs, punArrayQuantity, unArrayLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_RequestPrices, 4)
+SteamAPICall_t __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_RequestPrices(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_RequestPrices(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetNumItemsWithPrices, 4)
+uint32 __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetNumItemsWithPrices(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetNumItemsWithPrices(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemsWithPrices, 16)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemsWithPrices(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamItemDef_t * pArrayItemDefs, uint64 * pPrices, uint32 unArrayLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemsWithPrices(_this->linux_side, pArrayItemDefs, pPrices, unArrayLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemPrice, 12)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemPrice(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamItemDef_t iDefinition, uint64 * pPrice)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemPrice(_this->linux_side, iDefinition, pPrice);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_StartUpdateProperties, 4)
+SteamInventoryUpdateHandle_t __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_StartUpdateProperties(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_StartUpdateProperties(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_RemoveProperty, 24)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_RemoveProperty(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char * pchPropertyName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_RemoveProperty(_this->linux_side, handle, nItemID, pchPropertyName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty, 28)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char * pchPropertyName, const char * pchPropertyValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty(_this->linux_side, handle, nItemID, pchPropertyName, pchPropertyValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty_2, 25)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty_2(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char * pchPropertyName, bool bValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty_2(_this->linux_side, handle, nItemID, pchPropertyName, bValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty_3, 32)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty_3(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char * pchPropertyName, int64 nValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty_3(_this->linux_side, handle, nItemID, pchPropertyName, nValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty_4, 28)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty_4(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char * pchPropertyName, float flValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty_4(_this->linux_side, handle, nItemID, pchPropertyName, flValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SubmitUpdateProperties, 16)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SubmitUpdateProperties(winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *_this, SteamInventoryUpdateHandle_t handle, SteamInventoryResult_t * pResultHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V002_SubmitUpdateProperties(_this->linux_side, handle, pResultHandle);
+}
+
+extern vtable_ptr winISteamInventory_STEAMINVENTORY_INTERFACE_V002_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamInventory_STEAMINVENTORY_INTERFACE_V002,
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultStatus)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultItems)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultItemProperty)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetResultTimestamp)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_CheckResultSteamID)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_DestroyResult)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetAllItems)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemsByID)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SerializeResult)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_DeserializeResult)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GenerateItems)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GrantPromoItems)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_AddPromoItem)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_AddPromoItems)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_ConsumeItem)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_ExchangeItems)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_TransferItemQuantity)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SendItemDropHeartbeat)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_TriggerItemDrop)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_TradeItems)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_LoadItemDefinitions)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemDefinitionIDs)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemDefinitionProperty)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_RequestEligiblePromoItemDefinitionsIDs)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetEligiblePromoItemDefinitionIDs)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_StartPurchase)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_RequestPrices)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetNumItemsWithPrices)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemsWithPrices)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_GetItemPrice)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_StartUpdateProperties)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_RemoveProperty)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty_2)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty_3)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SetProperty_4)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V002_SubmitUpdateProperties)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *create_winISteamInventory_STEAMINVENTORY_INTERFACE_V002(void *linux_side)
+{
+ winISteamInventory_STEAMINVENTORY_INTERFACE_V002 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamInventory_STEAMINVENTORY_INTERFACE_V002));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamInventory_STEAMINVENTORY_INTERFACE_V002_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamInventory_STEAMINVENTORY_INTERFACE_V001.h"
+
+typedef struct __winISteamInventory_STEAMINVENTORY_INTERFACE_V001 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamInventory_STEAMINVENTORY_INTERFACE_V001;
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetResultStatus, 8)
+EResult __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetResultStatus(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamInventoryResult_t resultHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetResultStatus(_this->linux_side, resultHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetResultItems, 16)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetResultItems(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamInventoryResult_t resultHandle, SteamItemDetails_t * pOutItemsArray, uint32 * punOutItemsArraySize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetResultItems(_this->linux_side, resultHandle, pOutItemsArray, punOutItemsArraySize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetResultTimestamp, 8)
+uint32 __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetResultTimestamp(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamInventoryResult_t resultHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetResultTimestamp(_this->linux_side, resultHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_CheckResultSteamID, 16)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_CheckResultSteamID(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamInventoryResult_t resultHandle, CSteamID steamIDExpected)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_CheckResultSteamID(_this->linux_side, resultHandle, steamIDExpected);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_DestroyResult, 8)
+void __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_DestroyResult(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamInventoryResult_t resultHandle)
+{
+ TRACE("%p\n", _this);
+ cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_DestroyResult(_this->linux_side, resultHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetAllItems, 8)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetAllItems(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamInventoryResult_t * pResultHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetAllItems(_this->linux_side, pResultHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetItemsByID, 16)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetItemsByID(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamInventoryResult_t * pResultHandle, const SteamItemInstanceID_t * pInstanceIDs, uint32 unCountInstanceIDs)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetItemsByID(_this->linux_side, pResultHandle, pInstanceIDs, unCountInstanceIDs);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_SerializeResult, 16)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_SerializeResult(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamInventoryResult_t resultHandle, void * pOutBuffer, uint32 * punOutBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_SerializeResult(_this->linux_side, resultHandle, pOutBuffer, punOutBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_DeserializeResult, 17)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_DeserializeResult(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamInventoryResult_t * pOutResultHandle, const void * pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_DeserializeResult(_this->linux_side, pOutResultHandle, pBuffer, unBufferSize, bRESERVED_MUST_BE_FALSE);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GenerateItems, 20)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GenerateItems(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, const uint32 * punArrayQuantity, uint32 unArrayLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GenerateItems(_this->linux_side, pResultHandle, pArrayItemDefs, punArrayQuantity, unArrayLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GrantPromoItems, 8)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GrantPromoItems(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamInventoryResult_t * pResultHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GrantPromoItems(_this->linux_side, pResultHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_AddPromoItem, 12)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_AddPromoItem(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamInventoryResult_t * pResultHandle, SteamItemDef_t itemDef)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_AddPromoItem(_this->linux_side, pResultHandle, itemDef);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_AddPromoItems, 16)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_AddPromoItems(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayItemDefs, uint32 unArrayLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_AddPromoItems(_this->linux_side, pResultHandle, pArrayItemDefs, unArrayLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_ConsumeItem, 20)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_ConsumeItem(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_ConsumeItem(_this->linux_side, pResultHandle, itemConsume, unQuantity);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_ExchangeItems, 32)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_ExchangeItems(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamInventoryResult_t * pResultHandle, const SteamItemDef_t * pArrayGenerate, const uint32 * punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t * pArrayDestroy, const uint32 * punArrayDestroyQuantity, uint32 unArrayDestroyLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_ExchangeItems(_this->linux_side, pResultHandle, pArrayGenerate, punArrayGenerateQuantity, unArrayGenerateLength, pArrayDestroy, punArrayDestroyQuantity, unArrayDestroyLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_TransferItemQuantity, 28)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_TransferItemQuantity(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamInventoryResult_t * pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_TransferItemQuantity(_this->linux_side, pResultHandle, itemIdSource, unQuantity, itemIdDest);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_SendItemDropHeartbeat, 4)
+void __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_SendItemDropHeartbeat(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_SendItemDropHeartbeat(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_TriggerItemDrop, 12)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_TriggerItemDrop(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamInventoryResult_t * pResultHandle, SteamItemDef_t dropListDefinition)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_TriggerItemDrop(_this->linux_side, pResultHandle, dropListDefinition);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_TradeItems, 40)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_TradeItems(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamInventoryResult_t * pResultHandle, CSteamID steamIDTradePartner, const SteamItemInstanceID_t * pArrayGive, const uint32 * pArrayGiveQuantity, uint32 nArrayGiveLength, const SteamItemInstanceID_t * pArrayGet, const uint32 * pArrayGetQuantity, uint32 nArrayGetLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_TradeItems(_this->linux_side, pResultHandle, steamIDTradePartner, pArrayGive, pArrayGiveQuantity, nArrayGiveLength, pArrayGet, pArrayGetQuantity, nArrayGetLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_LoadItemDefinitions, 4)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_LoadItemDefinitions(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_LoadItemDefinitions(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetItemDefinitionIDs, 12)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetItemDefinitionIDs(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetItemDefinitionIDs(_this->linux_side, pItemDefIDs, punItemDefIDsArraySize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetItemDefinitionProperty, 20)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetItemDefinitionProperty(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, SteamItemDef_t iDefinition, const char * pchPropertyName, char * pchValueBuffer, uint32 * punValueBufferSizeOut)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetItemDefinitionProperty(_this->linux_side, iDefinition, pchPropertyName, pchValueBuffer, punValueBufferSizeOut);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_RequestEligiblePromoItemDefinitionsIDs, 12)
+SteamAPICall_t __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_RequestEligiblePromoItemDefinitionsIDs(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_RequestEligiblePromoItemDefinitionsIDs(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetEligiblePromoItemDefinitionIDs, 20)
+bool __thiscall winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetEligiblePromoItemDefinitionIDs(winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *_this, CSteamID steamID, SteamItemDef_t * pItemDefIDs, uint32 * punItemDefIDsArraySize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetEligiblePromoItemDefinitionIDs(_this->linux_side, steamID, pItemDefIDs, punItemDefIDsArraySize);
+}
+
+extern vtable_ptr winISteamInventory_STEAMINVENTORY_INTERFACE_V001_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamInventory_STEAMINVENTORY_INTERFACE_V001,
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetResultStatus)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetResultItems)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetResultTimestamp)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_CheckResultSteamID)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_DestroyResult)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetAllItems)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetItemsByID)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_SerializeResult)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_DeserializeResult)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GenerateItems)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GrantPromoItems)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_AddPromoItem)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_AddPromoItems)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_ConsumeItem)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_ExchangeItems)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_TransferItemQuantity)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_SendItemDropHeartbeat)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_TriggerItemDrop)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_TradeItems)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_LoadItemDefinitions)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetItemDefinitionIDs)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetItemDefinitionProperty)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_RequestEligiblePromoItemDefinitionsIDs)
+ VTABLE_ADD_FUNC(winISteamInventory_STEAMINVENTORY_INTERFACE_V001_GetEligiblePromoItemDefinitionIDs)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *create_winISteamInventory_STEAMINVENTORY_INTERFACE_V001(void *linux_side)
+{
+ winISteamInventory_STEAMINVENTORY_INTERFACE_V001 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamInventory_STEAMINVENTORY_INTERFACE_V001));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamInventory_STEAMINVENTORY_INTERFACE_V001_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamMasterServerUpdater.c b/lsteamclient/winISteamMasterServerUpdater.c
new file mode 100644
index 00000000..d0997d06
--- /dev/null
+++ b/lsteamclient/winISteamMasterServerUpdater.c
@@ -0,0 +1,158 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamMasterServerUpdater_SteamMasterServerUpdater001.h"
+
+typedef struct __winISteamMasterServerUpdater_SteamMasterServerUpdater001 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamMasterServerUpdater_SteamMasterServerUpdater001;
+
+DEFINE_THISCALL_WRAPPER(winISteamMasterServerUpdater_SteamMasterServerUpdater001_SetActive, 5)
+void __thiscall winISteamMasterServerUpdater_SteamMasterServerUpdater001_SetActive(winISteamMasterServerUpdater_SteamMasterServerUpdater001 *_this, bool bActive)
+{
+ TRACE("%p\n", _this);
+ cppISteamMasterServerUpdater_SteamMasterServerUpdater001_SetActive(_this->linux_side, bActive);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMasterServerUpdater_SteamMasterServerUpdater001_SetHeartbeatInterval, 8)
+void __thiscall winISteamMasterServerUpdater_SteamMasterServerUpdater001_SetHeartbeatInterval(winISteamMasterServerUpdater_SteamMasterServerUpdater001 *_this, int iHeartbeatInterval)
+{
+ TRACE("%p\n", _this);
+ cppISteamMasterServerUpdater_SteamMasterServerUpdater001_SetHeartbeatInterval(_this->linux_side, iHeartbeatInterval);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMasterServerUpdater_SteamMasterServerUpdater001_HandleIncomingPacket, 18)
+bool __thiscall winISteamMasterServerUpdater_SteamMasterServerUpdater001_HandleIncomingPacket(winISteamMasterServerUpdater_SteamMasterServerUpdater001 *_this, const void * pData, int cbData, uint32 srcIP, uint16 srcPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMasterServerUpdater_SteamMasterServerUpdater001_HandleIncomingPacket(_this->linux_side, pData, cbData, srcIP, srcPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMasterServerUpdater_SteamMasterServerUpdater001_GetNextOutgoingPacket, 20)
+int __thiscall winISteamMasterServerUpdater_SteamMasterServerUpdater001_GetNextOutgoingPacket(winISteamMasterServerUpdater_SteamMasterServerUpdater001 *_this, void * pOut, int cbMaxOut, uint32 * pNetAdr, uint16 * pPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMasterServerUpdater_SteamMasterServerUpdater001_GetNextOutgoingPacket(_this->linux_side, pOut, cbMaxOut, pNetAdr, pPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMasterServerUpdater_SteamMasterServerUpdater001_SetBasicServerData, 22)
+void __thiscall winISteamMasterServerUpdater_SteamMasterServerUpdater001_SetBasicServerData(winISteamMasterServerUpdater_SteamMasterServerUpdater001 *_this, unsigned short nProtocolVersion, bool bDedicatedServer, const char * pRegionName, const char * pProductName, unsigned short nMaxReportedClients, bool bPasswordProtected, const char * pGameDescription)
+{
+ TRACE("%p\n", _this);
+ cppISteamMasterServerUpdater_SteamMasterServerUpdater001_SetBasicServerData(_this->linux_side, nProtocolVersion, bDedicatedServer, pRegionName, pProductName, nMaxReportedClients, bPasswordProtected, pGameDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMasterServerUpdater_SteamMasterServerUpdater001_ClearAllKeyValues, 4)
+void __thiscall winISteamMasterServerUpdater_SteamMasterServerUpdater001_ClearAllKeyValues(winISteamMasterServerUpdater_SteamMasterServerUpdater001 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamMasterServerUpdater_SteamMasterServerUpdater001_ClearAllKeyValues(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMasterServerUpdater_SteamMasterServerUpdater001_SetKeyValue, 12)
+void __thiscall winISteamMasterServerUpdater_SteamMasterServerUpdater001_SetKeyValue(winISteamMasterServerUpdater_SteamMasterServerUpdater001 *_this, const char * pKey, const char * pValue)
+{
+ TRACE("%p\n", _this);
+ cppISteamMasterServerUpdater_SteamMasterServerUpdater001_SetKeyValue(_this->linux_side, pKey, pValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMasterServerUpdater_SteamMasterServerUpdater001_NotifyShutdown, 4)
+void __thiscall winISteamMasterServerUpdater_SteamMasterServerUpdater001_NotifyShutdown(winISteamMasterServerUpdater_SteamMasterServerUpdater001 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamMasterServerUpdater_SteamMasterServerUpdater001_NotifyShutdown(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMasterServerUpdater_SteamMasterServerUpdater001_WasRestartRequested, 4)
+bool __thiscall winISteamMasterServerUpdater_SteamMasterServerUpdater001_WasRestartRequested(winISteamMasterServerUpdater_SteamMasterServerUpdater001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMasterServerUpdater_SteamMasterServerUpdater001_WasRestartRequested(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMasterServerUpdater_SteamMasterServerUpdater001_ForceHeartbeat, 4)
+void __thiscall winISteamMasterServerUpdater_SteamMasterServerUpdater001_ForceHeartbeat(winISteamMasterServerUpdater_SteamMasterServerUpdater001 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamMasterServerUpdater_SteamMasterServerUpdater001_ForceHeartbeat(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMasterServerUpdater_SteamMasterServerUpdater001_AddMasterServer, 8)
+bool __thiscall winISteamMasterServerUpdater_SteamMasterServerUpdater001_AddMasterServer(winISteamMasterServerUpdater_SteamMasterServerUpdater001 *_this, const char * pServerAddress)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMasterServerUpdater_SteamMasterServerUpdater001_AddMasterServer(_this->linux_side, pServerAddress);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMasterServerUpdater_SteamMasterServerUpdater001_RemoveMasterServer, 8)
+bool __thiscall winISteamMasterServerUpdater_SteamMasterServerUpdater001_RemoveMasterServer(winISteamMasterServerUpdater_SteamMasterServerUpdater001 *_this, const char * pServerAddress)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMasterServerUpdater_SteamMasterServerUpdater001_RemoveMasterServer(_this->linux_side, pServerAddress);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMasterServerUpdater_SteamMasterServerUpdater001_GetNumMasterServers, 4)
+int __thiscall winISteamMasterServerUpdater_SteamMasterServerUpdater001_GetNumMasterServers(winISteamMasterServerUpdater_SteamMasterServerUpdater001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMasterServerUpdater_SteamMasterServerUpdater001_GetNumMasterServers(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMasterServerUpdater_SteamMasterServerUpdater001_GetMasterServerAddress, 16)
+int __thiscall winISteamMasterServerUpdater_SteamMasterServerUpdater001_GetMasterServerAddress(winISteamMasterServerUpdater_SteamMasterServerUpdater001 *_this, int iServer, char * pOut, int outBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMasterServerUpdater_SteamMasterServerUpdater001_GetMasterServerAddress(_this->linux_side, iServer, pOut, outBufferSize);
+}
+
+extern vtable_ptr winISteamMasterServerUpdater_SteamMasterServerUpdater001_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamMasterServerUpdater_SteamMasterServerUpdater001,
+ VTABLE_ADD_FUNC(winISteamMasterServerUpdater_SteamMasterServerUpdater001_SetActive)
+ VTABLE_ADD_FUNC(winISteamMasterServerUpdater_SteamMasterServerUpdater001_SetHeartbeatInterval)
+ VTABLE_ADD_FUNC(winISteamMasterServerUpdater_SteamMasterServerUpdater001_HandleIncomingPacket)
+ VTABLE_ADD_FUNC(winISteamMasterServerUpdater_SteamMasterServerUpdater001_GetNextOutgoingPacket)
+ VTABLE_ADD_FUNC(winISteamMasterServerUpdater_SteamMasterServerUpdater001_SetBasicServerData)
+ VTABLE_ADD_FUNC(winISteamMasterServerUpdater_SteamMasterServerUpdater001_ClearAllKeyValues)
+ VTABLE_ADD_FUNC(winISteamMasterServerUpdater_SteamMasterServerUpdater001_SetKeyValue)
+ VTABLE_ADD_FUNC(winISteamMasterServerUpdater_SteamMasterServerUpdater001_NotifyShutdown)
+ VTABLE_ADD_FUNC(winISteamMasterServerUpdater_SteamMasterServerUpdater001_WasRestartRequested)
+ VTABLE_ADD_FUNC(winISteamMasterServerUpdater_SteamMasterServerUpdater001_ForceHeartbeat)
+ VTABLE_ADD_FUNC(winISteamMasterServerUpdater_SteamMasterServerUpdater001_AddMasterServer)
+ VTABLE_ADD_FUNC(winISteamMasterServerUpdater_SteamMasterServerUpdater001_RemoveMasterServer)
+ VTABLE_ADD_FUNC(winISteamMasterServerUpdater_SteamMasterServerUpdater001_GetNumMasterServers)
+ VTABLE_ADD_FUNC(winISteamMasterServerUpdater_SteamMasterServerUpdater001_GetMasterServerAddress)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamMasterServerUpdater_SteamMasterServerUpdater001 *create_winISteamMasterServerUpdater_SteamMasterServerUpdater001(void *linux_side)
+{
+ winISteamMasterServerUpdater_SteamMasterServerUpdater001 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamMasterServerUpdater_SteamMasterServerUpdater001));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamMasterServerUpdater_SteamMasterServerUpdater001_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamMatchmaking.c b/lsteamclient/winISteamMatchmaking.c
new file mode 100644
index 00000000..f0ccdada
--- /dev/null
+++ b/lsteamclient/winISteamMatchmaking.c
@@ -0,0 +1,1661 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamMatchmaking_SteamMatchMaking009.h"
+
+typedef struct __winISteamMatchmaking_SteamMatchMaking009 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamMatchmaking_SteamMatchMaking009;
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_GetFavoriteGameCount, 4)
+int __thiscall winISteamMatchmaking_SteamMatchMaking009_GetFavoriteGameCount(winISteamMatchmaking_SteamMatchMaking009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_GetFavoriteGameCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_GetFavoriteGame, 32)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking009_GetFavoriteGame(winISteamMatchmaking_SteamMatchMaking009 *_this, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_GetFavoriteGame(_this->linux_side, iGame, pnAppID, pnIP, pnConnPort, pnQueryPort, punFlags, pRTime32LastPlayedOnServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_AddFavoriteGame, 24)
+int __thiscall winISteamMatchmaking_SteamMatchMaking009_AddFavoriteGame(winISteamMatchmaking_SteamMatchMaking009 *_this, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_AddFavoriteGame(_this->linux_side, nAppID, nIP, nConnPort, nQueryPort, unFlags, rTime32LastPlayedOnServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_RemoveFavoriteGame, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking009_RemoveFavoriteGame(winISteamMatchmaking_SteamMatchMaking009 *_this, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_RemoveFavoriteGame(_this->linux_side, nAppID, nIP, nConnPort, nQueryPort, unFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_RequestLobbyList, 4)
+SteamAPICall_t __thiscall winISteamMatchmaking_SteamMatchMaking009_RequestLobbyList(winISteamMatchmaking_SteamMatchMaking009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_RequestLobbyList(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListStringFilter, 16)
+void __thiscall winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListStringFilter(winISteamMatchmaking_SteamMatchMaking009 *_this, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListStringFilter(_this->linux_side, pchKeyToMatch, pchValueToMatch, eComparisonType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListNumericalFilter, 16)
+void __thiscall winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListNumericalFilter(winISteamMatchmaking_SteamMatchMaking009 *_this, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListNumericalFilter(_this->linux_side, pchKeyToMatch, nValueToMatch, eComparisonType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListNearValueFilter, 12)
+void __thiscall winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListNearValueFilter(winISteamMatchmaking_SteamMatchMaking009 *_this, const char * pchKeyToMatch, int nValueToBeCloseTo)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListNearValueFilter(_this->linux_side, pchKeyToMatch, nValueToBeCloseTo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListFilterSlotsAvailable, 8)
+void __thiscall winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListFilterSlotsAvailable(winISteamMatchmaking_SteamMatchMaking009 *_this, int nSlotsAvailable)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListFilterSlotsAvailable(_this->linux_side, nSlotsAvailable);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListDistanceFilter, 8)
+void __thiscall winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListDistanceFilter(winISteamMatchmaking_SteamMatchMaking009 *_this, ELobbyDistanceFilter eLobbyDistanceFilter)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListDistanceFilter(_this->linux_side, eLobbyDistanceFilter);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListResultCountFilter, 8)
+void __thiscall winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListResultCountFilter(winISteamMatchmaking_SteamMatchMaking009 *_this, int cMaxResults)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListResultCountFilter(_this->linux_side, cMaxResults);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListCompatibleMembersFilter, 12)
+void __thiscall winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListCompatibleMembersFilter(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListCompatibleMembersFilter(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_GetLobbyByIndex, 12)
+CSteamID *__thiscall winISteamMatchmaking_SteamMatchMaking009_GetLobbyByIndex(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID *_r, int iLobby)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamMatchmaking_SteamMatchMaking009_GetLobbyByIndex(_this->linux_side, iLobby);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_CreateLobby, 12)
+SteamAPICall_t __thiscall winISteamMatchmaking_SteamMatchMaking009_CreateLobby(winISteamMatchmaking_SteamMatchMaking009 *_this, ELobbyType eLobbyType, int cMaxMembers)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_CreateLobby(_this->linux_side, eLobbyType, cMaxMembers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_JoinLobby, 12)
+SteamAPICall_t __thiscall winISteamMatchmaking_SteamMatchMaking009_JoinLobby(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_JoinLobby(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_LeaveLobby, 12)
+void __thiscall winISteamMatchmaking_SteamMatchMaking009_LeaveLobby(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking009_LeaveLobby(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_InviteUserToLobby, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking009_InviteUserToLobby(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby, CSteamID steamIDInvitee)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_InviteUserToLobby(_this->linux_side, steamIDLobby, steamIDInvitee);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_GetNumLobbyMembers, 12)
+int __thiscall winISteamMatchmaking_SteamMatchMaking009_GetNumLobbyMembers(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_GetNumLobbyMembers(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_GetLobbyMemberByIndex, 20)
+CSteamID *__thiscall winISteamMatchmaking_SteamMatchMaking009_GetLobbyMemberByIndex(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID *_r, CSteamID steamIDLobby, int iMember)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamMatchmaking_SteamMatchMaking009_GetLobbyMemberByIndex(_this->linux_side, steamIDLobby, iMember);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_GetLobbyData, 16)
+const char * __thiscall winISteamMatchmaking_SteamMatchMaking009_GetLobbyData(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_GetLobbyData(_this->linux_side, steamIDLobby, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_SetLobbyData, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking009_SetLobbyData(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_SetLobbyData(_this->linux_side, steamIDLobby, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_GetLobbyDataCount, 12)
+int __thiscall winISteamMatchmaking_SteamMatchMaking009_GetLobbyDataCount(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_GetLobbyDataCount(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_GetLobbyDataByIndex, 32)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking009_GetLobbyDataByIndex(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_GetLobbyDataByIndex(_this->linux_side, steamIDLobby, iLobbyData, pchKey, cchKeyBufferSize, pchValue, cchValueBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_DeleteLobbyData, 16)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking009_DeleteLobbyData(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_DeleteLobbyData(_this->linux_side, steamIDLobby, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_GetLobbyMemberData, 24)
+const char * __thiscall winISteamMatchmaking_SteamMatchMaking009_GetLobbyMemberData(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby, CSteamID steamIDUser, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_GetLobbyMemberData(_this->linux_side, steamIDLobby, steamIDUser, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_SetLobbyMemberData, 20)
+void __thiscall winISteamMatchmaking_SteamMatchMaking009_SetLobbyMemberData(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking009_SetLobbyMemberData(_this->linux_side, steamIDLobby, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_SendLobbyChatMsg, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking009_SendLobbyChatMsg(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_SendLobbyChatMsg(_this->linux_side, steamIDLobby, pvMsgBody, cubMsgBody);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_GetLobbyChatEntry, 32)
+int __thiscall winISteamMatchmaking_SteamMatchMaking009_GetLobbyChatEntry(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby, int iChatID, CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_GetLobbyChatEntry(_this->linux_side, steamIDLobby, iChatID, pSteamIDUser, pvData, cubData, peChatEntryType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_RequestLobbyData, 12)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking009_RequestLobbyData(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_RequestLobbyData(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_SetLobbyGameServer, 26)
+void __thiscall winISteamMatchmaking_SteamMatchMaking009_SetLobbyGameServer(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking009_SetLobbyGameServer(_this->linux_side, steamIDLobby, unGameServerIP, unGameServerPort, steamIDGameServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_GetLobbyGameServer, 24)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking009_GetLobbyGameServer(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, CSteamID * psteamIDGameServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_GetLobbyGameServer(_this->linux_side, steamIDLobby, punGameServerIP, punGameServerPort, psteamIDGameServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_SetLobbyMemberLimit, 16)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking009_SetLobbyMemberLimit(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby, int cMaxMembers)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_SetLobbyMemberLimit(_this->linux_side, steamIDLobby, cMaxMembers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_GetLobbyMemberLimit, 12)
+int __thiscall winISteamMatchmaking_SteamMatchMaking009_GetLobbyMemberLimit(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_GetLobbyMemberLimit(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_SetLobbyType, 16)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking009_SetLobbyType(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby, ELobbyType eLobbyType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_SetLobbyType(_this->linux_side, steamIDLobby, eLobbyType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_SetLobbyJoinable, 13)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking009_SetLobbyJoinable(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby, bool bLobbyJoinable)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_SetLobbyJoinable(_this->linux_side, steamIDLobby, bLobbyJoinable);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_GetLobbyOwner, 16)
+CSteamID *__thiscall winISteamMatchmaking_SteamMatchMaking009_GetLobbyOwner(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID *_r, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamMatchmaking_SteamMatchMaking009_GetLobbyOwner(_this->linux_side, steamIDLobby);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_SetLobbyOwner, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking009_SetLobbyOwner(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby, CSteamID steamIDNewOwner)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_SetLobbyOwner(_this->linux_side, steamIDLobby, steamIDNewOwner);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking009_SetLinkedLobby, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking009_SetLinkedLobby(winISteamMatchmaking_SteamMatchMaking009 *_this, CSteamID steamIDLobby, CSteamID steamIDLobbyDependent)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking009_SetLinkedLobby(_this->linux_side, steamIDLobby, steamIDLobbyDependent);
+}
+
+extern vtable_ptr winISteamMatchmaking_SteamMatchMaking009_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamMatchmaking_SteamMatchMaking009,
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_GetFavoriteGameCount)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_GetFavoriteGame)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_AddFavoriteGame)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_RemoveFavoriteGame)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_RequestLobbyList)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListStringFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListNumericalFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListNearValueFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListFilterSlotsAvailable)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListDistanceFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListResultCountFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_AddRequestLobbyListCompatibleMembersFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_GetLobbyByIndex)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_CreateLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_JoinLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_LeaveLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_InviteUserToLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_GetNumLobbyMembers)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_GetLobbyMemberByIndex)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_GetLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_SetLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_GetLobbyDataCount)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_GetLobbyDataByIndex)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_DeleteLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_GetLobbyMemberData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_SetLobbyMemberData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_SendLobbyChatMsg)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_GetLobbyChatEntry)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_RequestLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_SetLobbyGameServer)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_GetLobbyGameServer)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_SetLobbyMemberLimit)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_GetLobbyMemberLimit)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_SetLobbyType)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_SetLobbyJoinable)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_GetLobbyOwner)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_SetLobbyOwner)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking009_SetLinkedLobby)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamMatchmaking_SteamMatchMaking009 *create_winISteamMatchmaking_SteamMatchMaking009(void *linux_side)
+{
+ winISteamMatchmaking_SteamMatchMaking009 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamMatchmaking_SteamMatchMaking009));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamMatchmaking_SteamMatchMaking009_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamMatchmaking_SteamMatchMaking008.h"
+
+typedef struct __winISteamMatchmaking_SteamMatchMaking008 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamMatchmaking_SteamMatchMaking008;
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_GetFavoriteGameCount, 4)
+int __thiscall winISteamMatchmaking_SteamMatchMaking008_GetFavoriteGameCount(winISteamMatchmaking_SteamMatchMaking008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_GetFavoriteGameCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_GetFavoriteGame, 32)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking008_GetFavoriteGame(winISteamMatchmaking_SteamMatchMaking008 *_this, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_GetFavoriteGame(_this->linux_side, iGame, pnAppID, pnIP, pnConnPort, pnQueryPort, punFlags, pRTime32LastPlayedOnServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_AddFavoriteGame, 24)
+int __thiscall winISteamMatchmaking_SteamMatchMaking008_AddFavoriteGame(winISteamMatchmaking_SteamMatchMaking008 *_this, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_AddFavoriteGame(_this->linux_side, nAppID, nIP, nConnPort, nQueryPort, unFlags, rTime32LastPlayedOnServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_RemoveFavoriteGame, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking008_RemoveFavoriteGame(winISteamMatchmaking_SteamMatchMaking008 *_this, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_RemoveFavoriteGame(_this->linux_side, nAppID, nIP, nConnPort, nQueryPort, unFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_RequestLobbyList, 4)
+SteamAPICall_t __thiscall winISteamMatchmaking_SteamMatchMaking008_RequestLobbyList(winISteamMatchmaking_SteamMatchMaking008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_RequestLobbyList(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListStringFilter, 16)
+void __thiscall winISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListStringFilter(winISteamMatchmaking_SteamMatchMaking008 *_this, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListStringFilter(_this->linux_side, pchKeyToMatch, pchValueToMatch, eComparisonType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListNumericalFilter, 16)
+void __thiscall winISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListNumericalFilter(winISteamMatchmaking_SteamMatchMaking008 *_this, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListNumericalFilter(_this->linux_side, pchKeyToMatch, nValueToMatch, eComparisonType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListNearValueFilter, 12)
+void __thiscall winISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListNearValueFilter(winISteamMatchmaking_SteamMatchMaking008 *_this, const char * pchKeyToMatch, int nValueToBeCloseTo)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListNearValueFilter(_this->linux_side, pchKeyToMatch, nValueToBeCloseTo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListFilterSlotsAvailable, 8)
+void __thiscall winISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListFilterSlotsAvailable(winISteamMatchmaking_SteamMatchMaking008 *_this, int nSlotsAvailable)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListFilterSlotsAvailable(_this->linux_side, nSlotsAvailable);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListDistanceFilter, 8)
+void __thiscall winISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListDistanceFilter(winISteamMatchmaking_SteamMatchMaking008 *_this, ELobbyDistanceFilter eLobbyDistanceFilter)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListDistanceFilter(_this->linux_side, eLobbyDistanceFilter);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListResultCountFilter, 8)
+void __thiscall winISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListResultCountFilter(winISteamMatchmaking_SteamMatchMaking008 *_this, int cMaxResults)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListResultCountFilter(_this->linux_side, cMaxResults);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_GetLobbyByIndex, 12)
+CSteamID *__thiscall winISteamMatchmaking_SteamMatchMaking008_GetLobbyByIndex(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID *_r, int iLobby)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamMatchmaking_SteamMatchMaking008_GetLobbyByIndex(_this->linux_side, iLobby);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_CreateLobby, 12)
+SteamAPICall_t __thiscall winISteamMatchmaking_SteamMatchMaking008_CreateLobby(winISteamMatchmaking_SteamMatchMaking008 *_this, ELobbyType eLobbyType, int cMaxMembers)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_CreateLobby(_this->linux_side, eLobbyType, cMaxMembers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_JoinLobby, 12)
+SteamAPICall_t __thiscall winISteamMatchmaking_SteamMatchMaking008_JoinLobby(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_JoinLobby(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_LeaveLobby, 12)
+void __thiscall winISteamMatchmaking_SteamMatchMaking008_LeaveLobby(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking008_LeaveLobby(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_InviteUserToLobby, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking008_InviteUserToLobby(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby, CSteamID steamIDInvitee)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_InviteUserToLobby(_this->linux_side, steamIDLobby, steamIDInvitee);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_GetNumLobbyMembers, 12)
+int __thiscall winISteamMatchmaking_SteamMatchMaking008_GetNumLobbyMembers(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_GetNumLobbyMembers(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_GetLobbyMemberByIndex, 20)
+CSteamID *__thiscall winISteamMatchmaking_SteamMatchMaking008_GetLobbyMemberByIndex(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID *_r, CSteamID steamIDLobby, int iMember)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamMatchmaking_SteamMatchMaking008_GetLobbyMemberByIndex(_this->linux_side, steamIDLobby, iMember);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_GetLobbyData, 16)
+const char * __thiscall winISteamMatchmaking_SteamMatchMaking008_GetLobbyData(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_GetLobbyData(_this->linux_side, steamIDLobby, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_SetLobbyData, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking008_SetLobbyData(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_SetLobbyData(_this->linux_side, steamIDLobby, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_GetLobbyDataCount, 12)
+int __thiscall winISteamMatchmaking_SteamMatchMaking008_GetLobbyDataCount(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_GetLobbyDataCount(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_GetLobbyDataByIndex, 32)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking008_GetLobbyDataByIndex(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_GetLobbyDataByIndex(_this->linux_side, steamIDLobby, iLobbyData, pchKey, cchKeyBufferSize, pchValue, cchValueBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_DeleteLobbyData, 16)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking008_DeleteLobbyData(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_DeleteLobbyData(_this->linux_side, steamIDLobby, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_GetLobbyMemberData, 24)
+const char * __thiscall winISteamMatchmaking_SteamMatchMaking008_GetLobbyMemberData(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby, CSteamID steamIDUser, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_GetLobbyMemberData(_this->linux_side, steamIDLobby, steamIDUser, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_SetLobbyMemberData, 20)
+void __thiscall winISteamMatchmaking_SteamMatchMaking008_SetLobbyMemberData(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking008_SetLobbyMemberData(_this->linux_side, steamIDLobby, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_SendLobbyChatMsg, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking008_SendLobbyChatMsg(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_SendLobbyChatMsg(_this->linux_side, steamIDLobby, pvMsgBody, cubMsgBody);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_GetLobbyChatEntry, 32)
+int __thiscall winISteamMatchmaking_SteamMatchMaking008_GetLobbyChatEntry(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby, int iChatID, CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_GetLobbyChatEntry(_this->linux_side, steamIDLobby, iChatID, pSteamIDUser, pvData, cubData, peChatEntryType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_RequestLobbyData, 12)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking008_RequestLobbyData(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_RequestLobbyData(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_SetLobbyGameServer, 26)
+void __thiscall winISteamMatchmaking_SteamMatchMaking008_SetLobbyGameServer(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking008_SetLobbyGameServer(_this->linux_side, steamIDLobby, unGameServerIP, unGameServerPort, steamIDGameServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_GetLobbyGameServer, 24)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking008_GetLobbyGameServer(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, CSteamID * psteamIDGameServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_GetLobbyGameServer(_this->linux_side, steamIDLobby, punGameServerIP, punGameServerPort, psteamIDGameServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_SetLobbyMemberLimit, 16)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking008_SetLobbyMemberLimit(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby, int cMaxMembers)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_SetLobbyMemberLimit(_this->linux_side, steamIDLobby, cMaxMembers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_GetLobbyMemberLimit, 12)
+int __thiscall winISteamMatchmaking_SteamMatchMaking008_GetLobbyMemberLimit(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_GetLobbyMemberLimit(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_SetLobbyType, 16)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking008_SetLobbyType(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby, ELobbyType eLobbyType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_SetLobbyType(_this->linux_side, steamIDLobby, eLobbyType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_SetLobbyJoinable, 13)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking008_SetLobbyJoinable(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby, bool bLobbyJoinable)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_SetLobbyJoinable(_this->linux_side, steamIDLobby, bLobbyJoinable);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_GetLobbyOwner, 16)
+CSteamID *__thiscall winISteamMatchmaking_SteamMatchMaking008_GetLobbyOwner(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID *_r, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamMatchmaking_SteamMatchMaking008_GetLobbyOwner(_this->linux_side, steamIDLobby);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking008_SetLobbyOwner, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking008_SetLobbyOwner(winISteamMatchmaking_SteamMatchMaking008 *_this, CSteamID steamIDLobby, CSteamID steamIDNewOwner)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking008_SetLobbyOwner(_this->linux_side, steamIDLobby, steamIDNewOwner);
+}
+
+extern vtable_ptr winISteamMatchmaking_SteamMatchMaking008_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamMatchmaking_SteamMatchMaking008,
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_GetFavoriteGameCount)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_GetFavoriteGame)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_AddFavoriteGame)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_RemoveFavoriteGame)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_RequestLobbyList)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListStringFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListNumericalFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListNearValueFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListFilterSlotsAvailable)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListDistanceFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_AddRequestLobbyListResultCountFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_GetLobbyByIndex)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_CreateLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_JoinLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_LeaveLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_InviteUserToLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_GetNumLobbyMembers)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_GetLobbyMemberByIndex)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_GetLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_SetLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_GetLobbyDataCount)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_GetLobbyDataByIndex)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_DeleteLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_GetLobbyMemberData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_SetLobbyMemberData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_SendLobbyChatMsg)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_GetLobbyChatEntry)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_RequestLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_SetLobbyGameServer)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_GetLobbyGameServer)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_SetLobbyMemberLimit)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_GetLobbyMemberLimit)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_SetLobbyType)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_SetLobbyJoinable)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_GetLobbyOwner)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking008_SetLobbyOwner)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamMatchmaking_SteamMatchMaking008 *create_winISteamMatchmaking_SteamMatchMaking008(void *linux_side)
+{
+ winISteamMatchmaking_SteamMatchMaking008 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamMatchmaking_SteamMatchMaking008));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamMatchmaking_SteamMatchMaking008_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamMatchmaking_SteamMatchMaking007.h"
+
+typedef struct __winISteamMatchmaking_SteamMatchMaking007 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamMatchmaking_SteamMatchMaking007;
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_GetFavoriteGameCount, 4)
+int __thiscall winISteamMatchmaking_SteamMatchMaking007_GetFavoriteGameCount(winISteamMatchmaking_SteamMatchMaking007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_GetFavoriteGameCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_GetFavoriteGame, 32)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking007_GetFavoriteGame(winISteamMatchmaking_SteamMatchMaking007 *_this, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_GetFavoriteGame(_this->linux_side, iGame, pnAppID, pnIP, pnConnPort, pnQueryPort, punFlags, pRTime32LastPlayedOnServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_AddFavoriteGame, 24)
+int __thiscall winISteamMatchmaking_SteamMatchMaking007_AddFavoriteGame(winISteamMatchmaking_SteamMatchMaking007 *_this, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_AddFavoriteGame(_this->linux_side, nAppID, nIP, nConnPort, nQueryPort, unFlags, rTime32LastPlayedOnServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_RemoveFavoriteGame, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking007_RemoveFavoriteGame(winISteamMatchmaking_SteamMatchMaking007 *_this, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_RemoveFavoriteGame(_this->linux_side, nAppID, nIP, nConnPort, nQueryPort, unFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_RequestLobbyList, 4)
+SteamAPICall_t __thiscall winISteamMatchmaking_SteamMatchMaking007_RequestLobbyList(winISteamMatchmaking_SteamMatchMaking007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_RequestLobbyList(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListStringFilter, 16)
+void __thiscall winISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListStringFilter(winISteamMatchmaking_SteamMatchMaking007 *_this, const char * pchKeyToMatch, const char * pchValueToMatch, ELobbyComparison eComparisonType)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListStringFilter(_this->linux_side, pchKeyToMatch, pchValueToMatch, eComparisonType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListNumericalFilter, 16)
+void __thiscall winISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListNumericalFilter(winISteamMatchmaking_SteamMatchMaking007 *_this, const char * pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListNumericalFilter(_this->linux_side, pchKeyToMatch, nValueToMatch, eComparisonType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListNearValueFilter, 12)
+void __thiscall winISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListNearValueFilter(winISteamMatchmaking_SteamMatchMaking007 *_this, const char * pchKeyToMatch, int nValueToBeCloseTo)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListNearValueFilter(_this->linux_side, pchKeyToMatch, nValueToBeCloseTo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListFilterSlotsAvailable, 8)
+void __thiscall winISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListFilterSlotsAvailable(winISteamMatchmaking_SteamMatchMaking007 *_this, int nSlotsAvailable)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListFilterSlotsAvailable(_this->linux_side, nSlotsAvailable);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_GetLobbyByIndex, 12)
+CSteamID *__thiscall winISteamMatchmaking_SteamMatchMaking007_GetLobbyByIndex(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID *_r, int iLobby)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamMatchmaking_SteamMatchMaking007_GetLobbyByIndex(_this->linux_side, iLobby);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_CreateLobby, 12)
+SteamAPICall_t __thiscall winISteamMatchmaking_SteamMatchMaking007_CreateLobby(winISteamMatchmaking_SteamMatchMaking007 *_this, ELobbyType eLobbyType, int cMaxMembers)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_CreateLobby(_this->linux_side, eLobbyType, cMaxMembers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_JoinLobby, 12)
+SteamAPICall_t __thiscall winISteamMatchmaking_SteamMatchMaking007_JoinLobby(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_JoinLobby(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_LeaveLobby, 12)
+void __thiscall winISteamMatchmaking_SteamMatchMaking007_LeaveLobby(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking007_LeaveLobby(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_InviteUserToLobby, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking007_InviteUserToLobby(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby, CSteamID steamIDInvitee)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_InviteUserToLobby(_this->linux_side, steamIDLobby, steamIDInvitee);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_GetNumLobbyMembers, 12)
+int __thiscall winISteamMatchmaking_SteamMatchMaking007_GetNumLobbyMembers(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_GetNumLobbyMembers(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_GetLobbyMemberByIndex, 20)
+CSteamID *__thiscall winISteamMatchmaking_SteamMatchMaking007_GetLobbyMemberByIndex(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID *_r, CSteamID steamIDLobby, int iMember)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamMatchmaking_SteamMatchMaking007_GetLobbyMemberByIndex(_this->linux_side, steamIDLobby, iMember);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_GetLobbyData, 16)
+const char * __thiscall winISteamMatchmaking_SteamMatchMaking007_GetLobbyData(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_GetLobbyData(_this->linux_side, steamIDLobby, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_SetLobbyData, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking007_SetLobbyData(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_SetLobbyData(_this->linux_side, steamIDLobby, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_GetLobbyDataCount, 12)
+int __thiscall winISteamMatchmaking_SteamMatchMaking007_GetLobbyDataCount(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_GetLobbyDataCount(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_GetLobbyDataByIndex, 32)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking007_GetLobbyDataByIndex(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby, int iLobbyData, char * pchKey, int cchKeyBufferSize, char * pchValue, int cchValueBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_GetLobbyDataByIndex(_this->linux_side, steamIDLobby, iLobbyData, pchKey, cchKeyBufferSize, pchValue, cchValueBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_DeleteLobbyData, 16)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking007_DeleteLobbyData(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_DeleteLobbyData(_this->linux_side, steamIDLobby, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_GetLobbyMemberData, 24)
+const char * __thiscall winISteamMatchmaking_SteamMatchMaking007_GetLobbyMemberData(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby, CSteamID steamIDUser, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_GetLobbyMemberData(_this->linux_side, steamIDLobby, steamIDUser, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_SetLobbyMemberData, 20)
+void __thiscall winISteamMatchmaking_SteamMatchMaking007_SetLobbyMemberData(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking007_SetLobbyMemberData(_this->linux_side, steamIDLobby, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_SendLobbyChatMsg, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking007_SendLobbyChatMsg(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_SendLobbyChatMsg(_this->linux_side, steamIDLobby, pvMsgBody, cubMsgBody);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_GetLobbyChatEntry, 32)
+int __thiscall winISteamMatchmaking_SteamMatchMaking007_GetLobbyChatEntry(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby, int iChatID, CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_GetLobbyChatEntry(_this->linux_side, steamIDLobby, iChatID, pSteamIDUser, pvData, cubData, peChatEntryType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_RequestLobbyData, 12)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking007_RequestLobbyData(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_RequestLobbyData(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_SetLobbyGameServer, 26)
+void __thiscall winISteamMatchmaking_SteamMatchMaking007_SetLobbyGameServer(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking007_SetLobbyGameServer(_this->linux_side, steamIDLobby, unGameServerIP, unGameServerPort, steamIDGameServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_GetLobbyGameServer, 24)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking007_GetLobbyGameServer(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, CSteamID * psteamIDGameServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_GetLobbyGameServer(_this->linux_side, steamIDLobby, punGameServerIP, punGameServerPort, psteamIDGameServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_SetLobbyMemberLimit, 16)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking007_SetLobbyMemberLimit(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby, int cMaxMembers)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_SetLobbyMemberLimit(_this->linux_side, steamIDLobby, cMaxMembers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_GetLobbyMemberLimit, 12)
+int __thiscall winISteamMatchmaking_SteamMatchMaking007_GetLobbyMemberLimit(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_GetLobbyMemberLimit(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_SetLobbyType, 16)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking007_SetLobbyType(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby, ELobbyType eLobbyType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_SetLobbyType(_this->linux_side, steamIDLobby, eLobbyType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_SetLobbyJoinable, 13)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking007_SetLobbyJoinable(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby, bool bLobbyJoinable)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_SetLobbyJoinable(_this->linux_side, steamIDLobby, bLobbyJoinable);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_GetLobbyOwner, 16)
+CSteamID *__thiscall winISteamMatchmaking_SteamMatchMaking007_GetLobbyOwner(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID *_r, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamMatchmaking_SteamMatchMaking007_GetLobbyOwner(_this->linux_side, steamIDLobby);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking007_SetLobbyOwner, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking007_SetLobbyOwner(winISteamMatchmaking_SteamMatchMaking007 *_this, CSteamID steamIDLobby, CSteamID steamIDNewOwner)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking007_SetLobbyOwner(_this->linux_side, steamIDLobby, steamIDNewOwner);
+}
+
+extern vtable_ptr winISteamMatchmaking_SteamMatchMaking007_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamMatchmaking_SteamMatchMaking007,
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_GetFavoriteGameCount)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_GetFavoriteGame)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_AddFavoriteGame)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_RemoveFavoriteGame)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_RequestLobbyList)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListStringFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListNumericalFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListNearValueFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_AddRequestLobbyListFilterSlotsAvailable)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_GetLobbyByIndex)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_CreateLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_JoinLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_LeaveLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_InviteUserToLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_GetNumLobbyMembers)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_GetLobbyMemberByIndex)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_GetLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_SetLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_GetLobbyDataCount)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_GetLobbyDataByIndex)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_DeleteLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_GetLobbyMemberData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_SetLobbyMemberData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_SendLobbyChatMsg)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_GetLobbyChatEntry)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_RequestLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_SetLobbyGameServer)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_GetLobbyGameServer)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_SetLobbyMemberLimit)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_GetLobbyMemberLimit)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_SetLobbyType)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_SetLobbyJoinable)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_GetLobbyOwner)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking007_SetLobbyOwner)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamMatchmaking_SteamMatchMaking007 *create_winISteamMatchmaking_SteamMatchMaking007(void *linux_side)
+{
+ winISteamMatchmaking_SteamMatchMaking007 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamMatchmaking_SteamMatchMaking007));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamMatchmaking_SteamMatchMaking007_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamMatchmaking_SteamMatchMaking006.h"
+
+typedef struct __winISteamMatchmaking_SteamMatchMaking006 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamMatchmaking_SteamMatchMaking006;
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_GetFavoriteGameCount, 4)
+int __thiscall winISteamMatchmaking_SteamMatchMaking006_GetFavoriteGameCount(winISteamMatchmaking_SteamMatchMaking006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_GetFavoriteGameCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_GetFavoriteGame, 32)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking006_GetFavoriteGame(winISteamMatchmaking_SteamMatchMaking006 *_this, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_GetFavoriteGame(_this->linux_side, iGame, pnAppID, pnIP, pnConnPort, pnQueryPort, punFlags, pRTime32LastPlayedOnServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_AddFavoriteGame, 24)
+int __thiscall winISteamMatchmaking_SteamMatchMaking006_AddFavoriteGame(winISteamMatchmaking_SteamMatchMaking006 *_this, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_AddFavoriteGame(_this->linux_side, nAppID, nIP, nConnPort, nQueryPort, unFlags, rTime32LastPlayedOnServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_RemoveFavoriteGame, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking006_RemoveFavoriteGame(winISteamMatchmaking_SteamMatchMaking006 *_this, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_RemoveFavoriteGame(_this->linux_side, nAppID, nIP, nConnPort, nQueryPort, unFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_RequestLobbyList, 4)
+SteamAPICall_t __thiscall winISteamMatchmaking_SteamMatchMaking006_RequestLobbyList(winISteamMatchmaking_SteamMatchMaking006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_RequestLobbyList(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_AddRequestLobbyListFilter, 12)
+void __thiscall winISteamMatchmaking_SteamMatchMaking006_AddRequestLobbyListFilter(winISteamMatchmaking_SteamMatchMaking006 *_this, const char * pchKeyToMatch, const char * pchValueToMatch)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking006_AddRequestLobbyListFilter(_this->linux_side, pchKeyToMatch, pchValueToMatch);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_AddRequestLobbyListNumericalFilter, 16)
+void __thiscall winISteamMatchmaking_SteamMatchMaking006_AddRequestLobbyListNumericalFilter(winISteamMatchmaking_SteamMatchMaking006 *_this, const char * pchKeyToMatch, int nValueToMatch, int nComparisonType)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking006_AddRequestLobbyListNumericalFilter(_this->linux_side, pchKeyToMatch, nValueToMatch, nComparisonType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_AddRequestLobbyListNearValueFilter, 12)
+void __thiscall winISteamMatchmaking_SteamMatchMaking006_AddRequestLobbyListNearValueFilter(winISteamMatchmaking_SteamMatchMaking006 *_this, const char * pchKeyToMatch, int nValueToBeCloseTo)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking006_AddRequestLobbyListNearValueFilter(_this->linux_side, pchKeyToMatch, nValueToBeCloseTo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_GetLobbyByIndex, 12)
+CSteamID *__thiscall winISteamMatchmaking_SteamMatchMaking006_GetLobbyByIndex(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID *_r, int iLobby)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamMatchmaking_SteamMatchMaking006_GetLobbyByIndex(_this->linux_side, iLobby);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_CreateLobby, 8)
+SteamAPICall_t __thiscall winISteamMatchmaking_SteamMatchMaking006_CreateLobby(winISteamMatchmaking_SteamMatchMaking006 *_this, ELobbyType eLobbyType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_CreateLobby(_this->linux_side, eLobbyType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_JoinLobby, 12)
+SteamAPICall_t __thiscall winISteamMatchmaking_SteamMatchMaking006_JoinLobby(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_JoinLobby(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_LeaveLobby, 12)
+void __thiscall winISteamMatchmaking_SteamMatchMaking006_LeaveLobby(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking006_LeaveLobby(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_InviteUserToLobby, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking006_InviteUserToLobby(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID steamIDLobby, CSteamID steamIDInvitee)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_InviteUserToLobby(_this->linux_side, steamIDLobby, steamIDInvitee);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_GetNumLobbyMembers, 12)
+int __thiscall winISteamMatchmaking_SteamMatchMaking006_GetNumLobbyMembers(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_GetNumLobbyMembers(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_GetLobbyMemberByIndex, 20)
+CSteamID *__thiscall winISteamMatchmaking_SteamMatchMaking006_GetLobbyMemberByIndex(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID *_r, CSteamID steamIDLobby, int iMember)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamMatchmaking_SteamMatchMaking006_GetLobbyMemberByIndex(_this->linux_side, steamIDLobby, iMember);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_GetLobbyData, 16)
+const char * __thiscall winISteamMatchmaking_SteamMatchMaking006_GetLobbyData(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID steamIDLobby, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_GetLobbyData(_this->linux_side, steamIDLobby, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_SetLobbyData, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking006_SetLobbyData(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_SetLobbyData(_this->linux_side, steamIDLobby, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_GetLobbyMemberData, 24)
+const char * __thiscall winISteamMatchmaking_SteamMatchMaking006_GetLobbyMemberData(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID steamIDLobby, CSteamID steamIDUser, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_GetLobbyMemberData(_this->linux_side, steamIDLobby, steamIDUser, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_SetLobbyMemberData, 20)
+void __thiscall winISteamMatchmaking_SteamMatchMaking006_SetLobbyMemberData(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking006_SetLobbyMemberData(_this->linux_side, steamIDLobby, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_SendLobbyChatMsg, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking006_SendLobbyChatMsg(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_SendLobbyChatMsg(_this->linux_side, steamIDLobby, pvMsgBody, cubMsgBody);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_GetLobbyChatEntry, 32)
+int __thiscall winISteamMatchmaking_SteamMatchMaking006_GetLobbyChatEntry(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID steamIDLobby, int iChatID, CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_GetLobbyChatEntry(_this->linux_side, steamIDLobby, iChatID, pSteamIDUser, pvData, cubData, peChatEntryType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_RequestLobbyData, 12)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking006_RequestLobbyData(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_RequestLobbyData(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_SetLobbyGameServer, 26)
+void __thiscall winISteamMatchmaking_SteamMatchMaking006_SetLobbyGameServer(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking006_SetLobbyGameServer(_this->linux_side, steamIDLobby, unGameServerIP, unGameServerPort, steamIDGameServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_GetLobbyGameServer, 24)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking006_GetLobbyGameServer(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, CSteamID * psteamIDGameServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_GetLobbyGameServer(_this->linux_side, steamIDLobby, punGameServerIP, punGameServerPort, psteamIDGameServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_SetLobbyMemberLimit, 16)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking006_SetLobbyMemberLimit(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID steamIDLobby, int cMaxMembers)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_SetLobbyMemberLimit(_this->linux_side, steamIDLobby, cMaxMembers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_GetLobbyMemberLimit, 12)
+int __thiscall winISteamMatchmaking_SteamMatchMaking006_GetLobbyMemberLimit(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_GetLobbyMemberLimit(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_SetLobbyType, 16)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking006_SetLobbyType(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID steamIDLobby, ELobbyType eLobbyType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking006_SetLobbyType(_this->linux_side, steamIDLobby, eLobbyType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking006_GetLobbyOwner, 16)
+CSteamID *__thiscall winISteamMatchmaking_SteamMatchMaking006_GetLobbyOwner(winISteamMatchmaking_SteamMatchMaking006 *_this, CSteamID *_r, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamMatchmaking_SteamMatchMaking006_GetLobbyOwner(_this->linux_side, steamIDLobby);
+ return _r;
+}
+
+extern vtable_ptr winISteamMatchmaking_SteamMatchMaking006_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamMatchmaking_SteamMatchMaking006,
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_GetFavoriteGameCount)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_GetFavoriteGame)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_AddFavoriteGame)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_RemoveFavoriteGame)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_RequestLobbyList)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_AddRequestLobbyListFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_AddRequestLobbyListNumericalFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_AddRequestLobbyListNearValueFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_GetLobbyByIndex)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_CreateLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_JoinLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_LeaveLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_InviteUserToLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_GetNumLobbyMembers)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_GetLobbyMemberByIndex)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_GetLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_SetLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_GetLobbyMemberData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_SetLobbyMemberData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_SendLobbyChatMsg)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_GetLobbyChatEntry)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_RequestLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_SetLobbyGameServer)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_GetLobbyGameServer)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_SetLobbyMemberLimit)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_GetLobbyMemberLimit)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_SetLobbyType)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking006_GetLobbyOwner)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamMatchmaking_SteamMatchMaking006 *create_winISteamMatchmaking_SteamMatchMaking006(void *linux_side)
+{
+ winISteamMatchmaking_SteamMatchMaking006 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamMatchmaking_SteamMatchMaking006));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamMatchmaking_SteamMatchMaking006_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamMatchmaking_SteamMatchMaking004.h"
+
+typedef struct __winISteamMatchmaking_SteamMatchMaking004 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamMatchmaking_SteamMatchMaking004;
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_GetFavoriteGameCount, 4)
+int __thiscall winISteamMatchmaking_SteamMatchMaking004_GetFavoriteGameCount(winISteamMatchmaking_SteamMatchMaking004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking004_GetFavoriteGameCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_GetFavoriteGame, 32)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking004_GetFavoriteGame(winISteamMatchmaking_SteamMatchMaking004 *_this, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking004_GetFavoriteGame(_this->linux_side, iGame, pnAppID, pnIP, pnConnPort, pnQueryPort, punFlags, pRTime32LastPlayedOnServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_AddFavoriteGame, 24)
+int __thiscall winISteamMatchmaking_SteamMatchMaking004_AddFavoriteGame(winISteamMatchmaking_SteamMatchMaking004 *_this, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking004_AddFavoriteGame(_this->linux_side, nAppID, nIP, nConnPort, nQueryPort, unFlags, rTime32LastPlayedOnServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_RemoveFavoriteGame, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking004_RemoveFavoriteGame(winISteamMatchmaking_SteamMatchMaking004 *_this, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking004_RemoveFavoriteGame(_this->linux_side, nAppID, nIP, nConnPort, nQueryPort, unFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_RequestLobbyList, 4)
+void __thiscall winISteamMatchmaking_SteamMatchMaking004_RequestLobbyList(winISteamMatchmaking_SteamMatchMaking004 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking004_RequestLobbyList(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_AddRequestLobbyListFilter, 12)
+void __thiscall winISteamMatchmaking_SteamMatchMaking004_AddRequestLobbyListFilter(winISteamMatchmaking_SteamMatchMaking004 *_this, const char * pchKeyToMatch, const char * pchValueToMatch)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking004_AddRequestLobbyListFilter(_this->linux_side, pchKeyToMatch, pchValueToMatch);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_AddRequestLobbyListNumericalFilter, 16)
+void __thiscall winISteamMatchmaking_SteamMatchMaking004_AddRequestLobbyListNumericalFilter(winISteamMatchmaking_SteamMatchMaking004 *_this, const char * pchKeyToMatch, int nValueToMatch, int nComparisonType)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking004_AddRequestLobbyListNumericalFilter(_this->linux_side, pchKeyToMatch, nValueToMatch, nComparisonType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_AddRequestLobbyListSlotsAvailableFilter, 4)
+void __thiscall winISteamMatchmaking_SteamMatchMaking004_AddRequestLobbyListSlotsAvailableFilter(winISteamMatchmaking_SteamMatchMaking004 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking004_AddRequestLobbyListSlotsAvailableFilter(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_GetLobbyByIndex, 12)
+CSteamID *__thiscall winISteamMatchmaking_SteamMatchMaking004_GetLobbyByIndex(winISteamMatchmaking_SteamMatchMaking004 *_this, CSteamID *_r, int iLobby)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamMatchmaking_SteamMatchMaking004_GetLobbyByIndex(_this->linux_side, iLobby);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_CreateLobby, 5)
+void __thiscall winISteamMatchmaking_SteamMatchMaking004_CreateLobby(winISteamMatchmaking_SteamMatchMaking004 *_this, bool bPrivate)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking004_CreateLobby(_this->linux_side, bPrivate);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_JoinLobby, 12)
+void __thiscall winISteamMatchmaking_SteamMatchMaking004_JoinLobby(winISteamMatchmaking_SteamMatchMaking004 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking004_JoinLobby(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_LeaveLobby, 12)
+void __thiscall winISteamMatchmaking_SteamMatchMaking004_LeaveLobby(winISteamMatchmaking_SteamMatchMaking004 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking004_LeaveLobby(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_InviteUserToLobby, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking004_InviteUserToLobby(winISteamMatchmaking_SteamMatchMaking004 *_this, CSteamID steamIDLobby, CSteamID steamIDInvitee)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking004_InviteUserToLobby(_this->linux_side, steamIDLobby, steamIDInvitee);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_GetNumLobbyMembers, 12)
+int __thiscall winISteamMatchmaking_SteamMatchMaking004_GetNumLobbyMembers(winISteamMatchmaking_SteamMatchMaking004 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking004_GetNumLobbyMembers(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_GetLobbyMemberByIndex, 20)
+CSteamID *__thiscall winISteamMatchmaking_SteamMatchMaking004_GetLobbyMemberByIndex(winISteamMatchmaking_SteamMatchMaking004 *_this, CSteamID *_r, CSteamID steamIDLobby, int iMember)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamMatchmaking_SteamMatchMaking004_GetLobbyMemberByIndex(_this->linux_side, steamIDLobby, iMember);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_GetLobbyData, 16)
+const char * __thiscall winISteamMatchmaking_SteamMatchMaking004_GetLobbyData(winISteamMatchmaking_SteamMatchMaking004 *_this, CSteamID steamIDLobby, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking004_GetLobbyData(_this->linux_side, steamIDLobby, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_SetLobbyData, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking004_SetLobbyData(winISteamMatchmaking_SteamMatchMaking004 *_this, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking004_SetLobbyData(_this->linux_side, steamIDLobby, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_GetLobbyMemberData, 24)
+const char * __thiscall winISteamMatchmaking_SteamMatchMaking004_GetLobbyMemberData(winISteamMatchmaking_SteamMatchMaking004 *_this, CSteamID steamIDLobby, CSteamID steamIDUser, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking004_GetLobbyMemberData(_this->linux_side, steamIDLobby, steamIDUser, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_SetLobbyMemberData, 20)
+void __thiscall winISteamMatchmaking_SteamMatchMaking004_SetLobbyMemberData(winISteamMatchmaking_SteamMatchMaking004 *_this, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking004_SetLobbyMemberData(_this->linux_side, steamIDLobby, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_SendLobbyChatMsg, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking004_SendLobbyChatMsg(winISteamMatchmaking_SteamMatchMaking004 *_this, CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking004_SendLobbyChatMsg(_this->linux_side, steamIDLobby, pvMsgBody, cubMsgBody);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_GetLobbyChatEntry, 32)
+int __thiscall winISteamMatchmaking_SteamMatchMaking004_GetLobbyChatEntry(winISteamMatchmaking_SteamMatchMaking004 *_this, CSteamID steamIDLobby, int iChatID, CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking004_GetLobbyChatEntry(_this->linux_side, steamIDLobby, iChatID, pSteamIDUser, pvData, cubData, peChatEntryType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_RequestLobbyData, 12)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking004_RequestLobbyData(winISteamMatchmaking_SteamMatchMaking004 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking004_RequestLobbyData(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_SetLobbyGameServer, 26)
+void __thiscall winISteamMatchmaking_SteamMatchMaking004_SetLobbyGameServer(winISteamMatchmaking_SteamMatchMaking004 *_this, CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking004_SetLobbyGameServer(_this->linux_side, steamIDLobby, unGameServerIP, unGameServerPort, steamIDGameServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_GetLobbyGameServer, 24)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking004_GetLobbyGameServer(winISteamMatchmaking_SteamMatchMaking004 *_this, CSteamID steamIDLobby, uint32 * punGameServerIP, uint16 * punGameServerPort, CSteamID * psteamIDGameServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking004_GetLobbyGameServer(_this->linux_side, steamIDLobby, punGameServerIP, punGameServerPort, psteamIDGameServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_SetLobbyMemberLimit, 16)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking004_SetLobbyMemberLimit(winISteamMatchmaking_SteamMatchMaking004 *_this, CSteamID steamIDLobby, int cMaxMembers)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking004_SetLobbyMemberLimit(_this->linux_side, steamIDLobby, cMaxMembers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_GetLobbyMemberLimit, 12)
+int __thiscall winISteamMatchmaking_SteamMatchMaking004_GetLobbyMemberLimit(winISteamMatchmaking_SteamMatchMaking004 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking004_GetLobbyMemberLimit(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking004_RequestFriendsLobbies, 4)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking004_RequestFriendsLobbies(winISteamMatchmaking_SteamMatchMaking004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking004_RequestFriendsLobbies(_this->linux_side);
+}
+
+extern vtable_ptr winISteamMatchmaking_SteamMatchMaking004_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamMatchmaking_SteamMatchMaking004,
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_GetFavoriteGameCount)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_GetFavoriteGame)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_AddFavoriteGame)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_RemoveFavoriteGame)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_RequestLobbyList)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_AddRequestLobbyListFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_AddRequestLobbyListNumericalFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_AddRequestLobbyListSlotsAvailableFilter)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_GetLobbyByIndex)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_CreateLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_JoinLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_LeaveLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_InviteUserToLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_GetNumLobbyMembers)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_GetLobbyMemberByIndex)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_GetLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_SetLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_GetLobbyMemberData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_SetLobbyMemberData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_SendLobbyChatMsg)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_GetLobbyChatEntry)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_RequestLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_SetLobbyGameServer)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_GetLobbyGameServer)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_SetLobbyMemberLimit)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_GetLobbyMemberLimit)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking004_RequestFriendsLobbies)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamMatchmaking_SteamMatchMaking004 *create_winISteamMatchmaking_SteamMatchMaking004(void *linux_side)
+{
+ winISteamMatchmaking_SteamMatchMaking004 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamMatchmaking_SteamMatchMaking004));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamMatchmaking_SteamMatchMaking004_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamMatchmaking_SteamMatchMaking002.h"
+
+typedef struct __winISteamMatchmaking_SteamMatchMaking002 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamMatchmaking_SteamMatchMaking002;
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_GetFavoriteGameCount, 4)
+int __thiscall winISteamMatchmaking_SteamMatchMaking002_GetFavoriteGameCount(winISteamMatchmaking_SteamMatchMaking002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking002_GetFavoriteGameCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_GetFavoriteGame, 32)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking002_GetFavoriteGame(winISteamMatchmaking_SteamMatchMaking002 *_this, int iGame, AppId_t * pnAppID, uint32 * pnIP, uint16 * pnConnPort, uint16 * pnQueryPort, uint32 * punFlags, uint32 * pRTime32LastPlayedOnServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking002_GetFavoriteGame(_this->linux_side, iGame, pnAppID, pnIP, pnConnPort, pnQueryPort, punFlags, pRTime32LastPlayedOnServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_AddFavoriteGame, 24)
+int __thiscall winISteamMatchmaking_SteamMatchMaking002_AddFavoriteGame(winISteamMatchmaking_SteamMatchMaking002 *_this, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking002_AddFavoriteGame(_this->linux_side, nAppID, nIP, nConnPort, nQueryPort, unFlags, rTime32LastPlayedOnServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_RemoveFavoriteGame, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking002_RemoveFavoriteGame(winISteamMatchmaking_SteamMatchMaking002 *_this, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking002_RemoveFavoriteGame(_this->linux_side, nAppID, nIP, nConnPort, nQueryPort, unFlags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_RequestLobbyList, 4)
+void __thiscall winISteamMatchmaking_SteamMatchMaking002_RequestLobbyList(winISteamMatchmaking_SteamMatchMaking002 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking002_RequestLobbyList(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_GetLobbyByIndex, 12)
+CSteamID *__thiscall winISteamMatchmaking_SteamMatchMaking002_GetLobbyByIndex(winISteamMatchmaking_SteamMatchMaking002 *_this, CSteamID *_r, int iLobby)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamMatchmaking_SteamMatchMaking002_GetLobbyByIndex(_this->linux_side, iLobby);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_CreateLobby, 5)
+void __thiscall winISteamMatchmaking_SteamMatchMaking002_CreateLobby(winISteamMatchmaking_SteamMatchMaking002 *_this, bool bPrivate)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking002_CreateLobby(_this->linux_side, bPrivate);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_JoinLobby, 12)
+void __thiscall winISteamMatchmaking_SteamMatchMaking002_JoinLobby(winISteamMatchmaking_SteamMatchMaking002 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking002_JoinLobby(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_LeaveLobby, 12)
+void __thiscall winISteamMatchmaking_SteamMatchMaking002_LeaveLobby(winISteamMatchmaking_SteamMatchMaking002 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking002_LeaveLobby(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_InviteUserToLobby, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking002_InviteUserToLobby(winISteamMatchmaking_SteamMatchMaking002 *_this, CSteamID steamIDLobby, CSteamID steamIDInvitee)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking002_InviteUserToLobby(_this->linux_side, steamIDLobby, steamIDInvitee);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_GetNumLobbyMembers, 12)
+int __thiscall winISteamMatchmaking_SteamMatchMaking002_GetNumLobbyMembers(winISteamMatchmaking_SteamMatchMaking002 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking002_GetNumLobbyMembers(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_GetLobbyMemberByIndex, 20)
+CSteamID *__thiscall winISteamMatchmaking_SteamMatchMaking002_GetLobbyMemberByIndex(winISteamMatchmaking_SteamMatchMaking002 *_this, CSteamID *_r, CSteamID steamIDLobby, int iMember)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamMatchmaking_SteamMatchMaking002_GetLobbyMemberByIndex(_this->linux_side, steamIDLobby, iMember);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_GetLobbyData, 16)
+const char * __thiscall winISteamMatchmaking_SteamMatchMaking002_GetLobbyData(winISteamMatchmaking_SteamMatchMaking002 *_this, CSteamID steamIDLobby, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking002_GetLobbyData(_this->linux_side, steamIDLobby, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_SetLobbyData, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking002_SetLobbyData(winISteamMatchmaking_SteamMatchMaking002 *_this, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking002_SetLobbyData(_this->linux_side, steamIDLobby, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_GetLobbyMemberData, 24)
+const char * __thiscall winISteamMatchmaking_SteamMatchMaking002_GetLobbyMemberData(winISteamMatchmaking_SteamMatchMaking002 *_this, CSteamID steamIDLobby, CSteamID steamIDUser, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking002_GetLobbyMemberData(_this->linux_side, steamIDLobby, steamIDUser, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_SetLobbyMemberData, 20)
+void __thiscall winISteamMatchmaking_SteamMatchMaking002_SetLobbyMemberData(winISteamMatchmaking_SteamMatchMaking002 *_this, CSteamID steamIDLobby, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking002_SetLobbyMemberData(_this->linux_side, steamIDLobby, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_SendLobbyChatMsg, 20)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking002_SendLobbyChatMsg(winISteamMatchmaking_SteamMatchMaking002 *_this, CSteamID steamIDLobby, const void * pvMsgBody, int cubMsgBody)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking002_SendLobbyChatMsg(_this->linux_side, steamIDLobby, pvMsgBody, cubMsgBody);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_GetLobbyChatEntry, 32)
+int __thiscall winISteamMatchmaking_SteamMatchMaking002_GetLobbyChatEntry(winISteamMatchmaking_SteamMatchMaking002 *_this, CSteamID steamIDLobby, int iChatID, CSteamID * pSteamIDUser, void * pvData, int cubData, EChatEntryType * peChatEntryType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking002_GetLobbyChatEntry(_this->linux_side, steamIDLobby, iChatID, pSteamIDUser, pvData, cubData, peChatEntryType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_RequestLobbyData, 12)
+bool __thiscall winISteamMatchmaking_SteamMatchMaking002_RequestLobbyData(winISteamMatchmaking_SteamMatchMaking002 *_this, CSteamID steamIDLobby)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmaking_SteamMatchMaking002_RequestLobbyData(_this->linux_side, steamIDLobby);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmaking_SteamMatchMaking002_SetLobbyGameServer, 26)
+void __thiscall winISteamMatchmaking_SteamMatchMaking002_SetLobbyGameServer(winISteamMatchmaking_SteamMatchMaking002 *_this, CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmaking_SteamMatchMaking002_SetLobbyGameServer(_this->linux_side, steamIDLobby, unGameServerIP, unGameServerPort, steamIDGameServer);
+}
+
+extern vtable_ptr winISteamMatchmaking_SteamMatchMaking002_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamMatchmaking_SteamMatchMaking002,
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_GetFavoriteGameCount)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_GetFavoriteGame)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_AddFavoriteGame)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_RemoveFavoriteGame)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_RequestLobbyList)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_GetLobbyByIndex)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_CreateLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_JoinLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_LeaveLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_InviteUserToLobby)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_GetNumLobbyMembers)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_GetLobbyMemberByIndex)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_GetLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_SetLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_GetLobbyMemberData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_SetLobbyMemberData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_SendLobbyChatMsg)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_GetLobbyChatEntry)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_RequestLobbyData)
+ VTABLE_ADD_FUNC(winISteamMatchmaking_SteamMatchMaking002_SetLobbyGameServer)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamMatchmaking_SteamMatchMaking002 *create_winISteamMatchmaking_SteamMatchMaking002(void *linux_side)
+{
+ winISteamMatchmaking_SteamMatchMaking002 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamMatchmaking_SteamMatchMaking002));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamMatchmaking_SteamMatchMaking002_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamMatchmakingServers.c b/lsteamclient/winISteamMatchmakingServers.c
new file mode 100644
index 00000000..9182c084
--- /dev/null
+++ b/lsteamclient/winISteamMatchmakingServers.c
@@ -0,0 +1,337 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamMatchmakingServers_SteamMatchMakingServers002.h"
+
+typedef struct __winISteamMatchmakingServers_SteamMatchMakingServers002 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamMatchmakingServers_SteamMatchMakingServers002;
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers002_RequestInternetServerList, 20)
+HServerListRequest __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_RequestInternetServerList(winISteamMatchmakingServers_SteamMatchMakingServers002 *_this, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmakingServers_SteamMatchMakingServers002_RequestInternetServerList(_this->linux_side, iApp, ppchFilters, nFilters, create_LinuxMatchmakingServerListResponse(pRequestServersResponse));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers002_RequestLANServerList, 12)
+HServerListRequest __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_RequestLANServerList(winISteamMatchmakingServers_SteamMatchMakingServers002 *_this, AppId_t iApp, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmakingServers_SteamMatchMakingServers002_RequestLANServerList(_this->linux_side, iApp, create_LinuxMatchmakingServerListResponse(pRequestServersResponse));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers002_RequestFriendsServerList, 20)
+HServerListRequest __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_RequestFriendsServerList(winISteamMatchmakingServers_SteamMatchMakingServers002 *_this, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmakingServers_SteamMatchMakingServers002_RequestFriendsServerList(_this->linux_side, iApp, ppchFilters, nFilters, create_LinuxMatchmakingServerListResponse(pRequestServersResponse));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers002_RequestFavoritesServerList, 20)
+HServerListRequest __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_RequestFavoritesServerList(winISteamMatchmakingServers_SteamMatchMakingServers002 *_this, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmakingServers_SteamMatchMakingServers002_RequestFavoritesServerList(_this->linux_side, iApp, ppchFilters, nFilters, create_LinuxMatchmakingServerListResponse(pRequestServersResponse));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers002_RequestHistoryServerList, 20)
+HServerListRequest __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_RequestHistoryServerList(winISteamMatchmakingServers_SteamMatchMakingServers002 *_this, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmakingServers_SteamMatchMakingServers002_RequestHistoryServerList(_this->linux_side, iApp, ppchFilters, nFilters, create_LinuxMatchmakingServerListResponse(pRequestServersResponse));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers002_RequestSpectatorServerList, 20)
+HServerListRequest __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_RequestSpectatorServerList(winISteamMatchmakingServers_SteamMatchMakingServers002 *_this, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmakingServers_SteamMatchMakingServers002_RequestSpectatorServerList(_this->linux_side, iApp, ppchFilters, nFilters, create_LinuxMatchmakingServerListResponse(pRequestServersResponse));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers002_ReleaseRequest, 8)
+void __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_ReleaseRequest(winISteamMatchmakingServers_SteamMatchMakingServers002 *_this, HServerListRequest hServerListRequest)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmakingServers_SteamMatchMakingServers002_ReleaseRequest(_this->linux_side, hServerListRequest);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers002_GetServerDetails, 12)
+gameserveritem_t * __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_GetServerDetails(winISteamMatchmakingServers_SteamMatchMakingServers002 *_this, HServerListRequest hRequest, int iServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmakingServers_SteamMatchMakingServers002_GetServerDetails(_this->linux_side, hRequest, iServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers002_CancelQuery, 8)
+void __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_CancelQuery(winISteamMatchmakingServers_SteamMatchMakingServers002 *_this, HServerListRequest hRequest)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmakingServers_SteamMatchMakingServers002_CancelQuery(_this->linux_side, hRequest);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers002_RefreshQuery, 8)
+void __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_RefreshQuery(winISteamMatchmakingServers_SteamMatchMakingServers002 *_this, HServerListRequest hRequest)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmakingServers_SteamMatchMakingServers002_RefreshQuery(_this->linux_side, hRequest);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers002_IsRefreshing, 8)
+bool __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_IsRefreshing(winISteamMatchmakingServers_SteamMatchMakingServers002 *_this, HServerListRequest hRequest)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmakingServers_SteamMatchMakingServers002_IsRefreshing(_this->linux_side, hRequest);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers002_GetServerCount, 8)
+int __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_GetServerCount(winISteamMatchmakingServers_SteamMatchMakingServers002 *_this, HServerListRequest hRequest)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmakingServers_SteamMatchMakingServers002_GetServerCount(_this->linux_side, hRequest);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers002_RefreshServer, 12)
+void __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_RefreshServer(winISteamMatchmakingServers_SteamMatchMakingServers002 *_this, HServerListRequest hRequest, int iServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmakingServers_SteamMatchMakingServers002_RefreshServer(_this->linux_side, hRequest, iServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers002_PingServer, 14)
+HServerQuery __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_PingServer(winISteamMatchmakingServers_SteamMatchMakingServers002 *_this, uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse * pRequestServersResponse)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmakingServers_SteamMatchMakingServers002_PingServer(_this->linux_side, unIP, usPort, pRequestServersResponse);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers002_PlayerDetails, 14)
+HServerQuery __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_PlayerDetails(winISteamMatchmakingServers_SteamMatchMakingServers002 *_this, uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse * pRequestServersResponse)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmakingServers_SteamMatchMakingServers002_PlayerDetails(_this->linux_side, unIP, usPort, pRequestServersResponse);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers002_ServerRules, 14)
+HServerQuery __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_ServerRules(winISteamMatchmakingServers_SteamMatchMakingServers002 *_this, uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse * pRequestServersResponse)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmakingServers_SteamMatchMakingServers002_ServerRules(_this->linux_side, unIP, usPort, pRequestServersResponse);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers002_CancelServerQuery, 8)
+void __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_CancelServerQuery(winISteamMatchmakingServers_SteamMatchMakingServers002 *_this, HServerQuery hServerQuery)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmakingServers_SteamMatchMakingServers002_CancelServerQuery(_this->linux_side, hServerQuery);
+}
+
+extern vtable_ptr winISteamMatchmakingServers_SteamMatchMakingServers002_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamMatchmakingServers_SteamMatchMakingServers002,
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers002_RequestInternetServerList)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers002_RequestLANServerList)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers002_RequestFriendsServerList)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers002_RequestFavoritesServerList)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers002_RequestHistoryServerList)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers002_RequestSpectatorServerList)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers002_ReleaseRequest)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers002_GetServerDetails)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers002_CancelQuery)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers002_RefreshQuery)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers002_IsRefreshing)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers002_GetServerCount)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers002_RefreshServer)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers002_PingServer)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers002_PlayerDetails)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers002_ServerRules)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers002_CancelServerQuery)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamMatchmakingServers_SteamMatchMakingServers002 *create_winISteamMatchmakingServers_SteamMatchMakingServers002(void *linux_side)
+{
+ winISteamMatchmakingServers_SteamMatchMakingServers002 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamMatchmakingServers_SteamMatchMakingServers002));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamMatchmakingServers_SteamMatchMakingServers002_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamMatchmakingServers_SteamMatchMakingServers001.h"
+
+typedef struct __winISteamMatchmakingServers_SteamMatchMakingServers001 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamMatchmakingServers_SteamMatchMakingServers001;
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers001_RequestInternetServerList, 20)
+void __thiscall winISteamMatchmakingServers_SteamMatchMakingServers001_RequestInternetServerList(winISteamMatchmakingServers_SteamMatchMakingServers001 *_this, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmakingServers_SteamMatchMakingServers001_RequestInternetServerList(_this->linux_side, iApp, ppchFilters, nFilters, create_LinuxMatchmakingServerListResponse(pRequestServersResponse));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers001_RequestLANServerList, 12)
+void __thiscall winISteamMatchmakingServers_SteamMatchMakingServers001_RequestLANServerList(winISteamMatchmakingServers_SteamMatchMakingServers001 *_this, AppId_t iApp, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmakingServers_SteamMatchMakingServers001_RequestLANServerList(_this->linux_side, iApp, create_LinuxMatchmakingServerListResponse(pRequestServersResponse));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers001_RequestFriendsServerList, 20)
+void __thiscall winISteamMatchmakingServers_SteamMatchMakingServers001_RequestFriendsServerList(winISteamMatchmakingServers_SteamMatchMakingServers001 *_this, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmakingServers_SteamMatchMakingServers001_RequestFriendsServerList(_this->linux_side, iApp, ppchFilters, nFilters, create_LinuxMatchmakingServerListResponse(pRequestServersResponse));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers001_RequestFavoritesServerList, 20)
+void __thiscall winISteamMatchmakingServers_SteamMatchMakingServers001_RequestFavoritesServerList(winISteamMatchmakingServers_SteamMatchMakingServers001 *_this, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmakingServers_SteamMatchMakingServers001_RequestFavoritesServerList(_this->linux_side, iApp, ppchFilters, nFilters, create_LinuxMatchmakingServerListResponse(pRequestServersResponse));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers001_RequestHistoryServerList, 20)
+void __thiscall winISteamMatchmakingServers_SteamMatchMakingServers001_RequestHistoryServerList(winISteamMatchmakingServers_SteamMatchMakingServers001 *_this, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmakingServers_SteamMatchMakingServers001_RequestHistoryServerList(_this->linux_side, iApp, ppchFilters, nFilters, create_LinuxMatchmakingServerListResponse(pRequestServersResponse));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers001_RequestSpectatorServerList, 20)
+void __thiscall winISteamMatchmakingServers_SteamMatchMakingServers001_RequestSpectatorServerList(winISteamMatchmakingServers_SteamMatchMakingServers001 *_this, AppId_t iApp, MatchMakingKeyValuePair_t ** ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse * pRequestServersResponse)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmakingServers_SteamMatchMakingServers001_RequestSpectatorServerList(_this->linux_side, iApp, ppchFilters, nFilters, create_LinuxMatchmakingServerListResponse(pRequestServersResponse));
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers001_GetServerDetails, 12)
+gameserveritem_t * __thiscall winISteamMatchmakingServers_SteamMatchMakingServers001_GetServerDetails(winISteamMatchmakingServers_SteamMatchMakingServers001 *_this, EMatchMakingType eType, int iServer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmakingServers_SteamMatchMakingServers001_GetServerDetails(_this->linux_side, eType, iServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers001_CancelQuery, 8)
+void __thiscall winISteamMatchmakingServers_SteamMatchMakingServers001_CancelQuery(winISteamMatchmakingServers_SteamMatchMakingServers001 *_this, EMatchMakingType eType)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmakingServers_SteamMatchMakingServers001_CancelQuery(_this->linux_side, eType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers001_RefreshQuery, 8)
+void __thiscall winISteamMatchmakingServers_SteamMatchMakingServers001_RefreshQuery(winISteamMatchmakingServers_SteamMatchMakingServers001 *_this, EMatchMakingType eType)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmakingServers_SteamMatchMakingServers001_RefreshQuery(_this->linux_side, eType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers001_IsRefreshing, 8)
+bool __thiscall winISteamMatchmakingServers_SteamMatchMakingServers001_IsRefreshing(winISteamMatchmakingServers_SteamMatchMakingServers001 *_this, EMatchMakingType eType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmakingServers_SteamMatchMakingServers001_IsRefreshing(_this->linux_side, eType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers001_GetServerCount, 8)
+int __thiscall winISteamMatchmakingServers_SteamMatchMakingServers001_GetServerCount(winISteamMatchmakingServers_SteamMatchMakingServers001 *_this, EMatchMakingType eType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmakingServers_SteamMatchMakingServers001_GetServerCount(_this->linux_side, eType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers001_RefreshServer, 12)
+void __thiscall winISteamMatchmakingServers_SteamMatchMakingServers001_RefreshServer(winISteamMatchmakingServers_SteamMatchMakingServers001 *_this, EMatchMakingType eType, int iServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmakingServers_SteamMatchMakingServers001_RefreshServer(_this->linux_side, eType, iServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers001_PingServer, 14)
+HServerQuery __thiscall winISteamMatchmakingServers_SteamMatchMakingServers001_PingServer(winISteamMatchmakingServers_SteamMatchMakingServers001 *_this, uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse * pRequestServersResponse)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmakingServers_SteamMatchMakingServers001_PingServer(_this->linux_side, unIP, usPort, pRequestServersResponse);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers001_PlayerDetails, 14)
+HServerQuery __thiscall winISteamMatchmakingServers_SteamMatchMakingServers001_PlayerDetails(winISteamMatchmakingServers_SteamMatchMakingServers001 *_this, uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse * pRequestServersResponse)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmakingServers_SteamMatchMakingServers001_PlayerDetails(_this->linux_side, unIP, usPort, pRequestServersResponse);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers001_ServerRules, 14)
+HServerQuery __thiscall winISteamMatchmakingServers_SteamMatchMakingServers001_ServerRules(winISteamMatchmakingServers_SteamMatchMakingServers001 *_this, uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse * pRequestServersResponse)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMatchmakingServers_SteamMatchMakingServers001_ServerRules(_this->linux_side, unIP, usPort, pRequestServersResponse);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMatchmakingServers_SteamMatchMakingServers001_CancelServerQuery, 8)
+void __thiscall winISteamMatchmakingServers_SteamMatchMakingServers001_CancelServerQuery(winISteamMatchmakingServers_SteamMatchMakingServers001 *_this, HServerQuery hServerQuery)
+{
+ TRACE("%p\n", _this);
+ cppISteamMatchmakingServers_SteamMatchMakingServers001_CancelServerQuery(_this->linux_side, hServerQuery);
+}
+
+extern vtable_ptr winISteamMatchmakingServers_SteamMatchMakingServers001_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamMatchmakingServers_SteamMatchMakingServers001,
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers001_RequestInternetServerList)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers001_RequestLANServerList)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers001_RequestFriendsServerList)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers001_RequestFavoritesServerList)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers001_RequestHistoryServerList)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers001_RequestSpectatorServerList)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers001_GetServerDetails)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers001_CancelQuery)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers001_RefreshQuery)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers001_IsRefreshing)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers001_GetServerCount)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers001_RefreshServer)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers001_PingServer)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers001_PlayerDetails)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers001_ServerRules)
+ VTABLE_ADD_FUNC(winISteamMatchmakingServers_SteamMatchMakingServers001_CancelServerQuery)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamMatchmakingServers_SteamMatchMakingServers001 *create_winISteamMatchmakingServers_SteamMatchMakingServers001(void *linux_side)
+{
+ winISteamMatchmakingServers_SteamMatchMakingServers001 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamMatchmakingServers_SteamMatchMakingServers001));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamMatchmakingServers_SteamMatchMakingServers001_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamMusic.c b/lsteamclient/winISteamMusic.c
new file mode 100644
index 00000000..30e75e90
--- /dev/null
+++ b/lsteamclient/winISteamMusic.c
@@ -0,0 +1,118 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001.h"
+
+typedef struct __winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001;
+
+DEFINE_THISCALL_WRAPPER(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_BIsEnabled, 4)
+bool __thiscall winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_BIsEnabled(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_BIsEnabled(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_BIsPlaying, 4)
+bool __thiscall winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_BIsPlaying(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_BIsPlaying(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_GetPlaybackStatus, 4)
+AudioPlayback_Status __thiscall winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_GetPlaybackStatus(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_GetPlaybackStatus(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_Play, 4)
+void __thiscall winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_Play(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_Play(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_Pause, 4)
+void __thiscall winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_Pause(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_Pause(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_PlayPrevious, 4)
+void __thiscall winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_PlayPrevious(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_PlayPrevious(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_PlayNext, 4)
+void __thiscall winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_PlayNext(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_PlayNext(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_SetVolume, 8)
+void __thiscall winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_SetVolume(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001 *_this, float flVolume)
+{
+ TRACE("%p\n", _this);
+ cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_SetVolume(_this->linux_side, flVolume);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_GetVolume, 4)
+float __thiscall winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_GetVolume(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_GetVolume(_this->linux_side);
+}
+
+extern vtable_ptr winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001,
+ VTABLE_ADD_FUNC(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_BIsEnabled)
+ VTABLE_ADD_FUNC(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_BIsPlaying)
+ VTABLE_ADD_FUNC(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_GetPlaybackStatus)
+ VTABLE_ADD_FUNC(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_Play)
+ VTABLE_ADD_FUNC(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_Pause)
+ VTABLE_ADD_FUNC(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_PlayPrevious)
+ VTABLE_ADD_FUNC(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_PlayNext)
+ VTABLE_ADD_FUNC(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_SetVolume)
+ VTABLE_ADD_FUNC(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_GetVolume)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001 *create_winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001(void *linux_side)
+{
+ winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamMusicRemote.c b/lsteamclient/winISteamMusicRemote.c
new file mode 100644
index 00000000..914b879d
--- /dev/null
+++ b/lsteamclient/winISteamMusicRemote.c
@@ -0,0 +1,302 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001.h"
+
+typedef struct __winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001;
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_RegisterSteamMusicRemote, 8)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_RegisterSteamMusicRemote(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_RegisterSteamMusicRemote(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_DeregisterSteamMusicRemote, 4)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_DeregisterSteamMusicRemote(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_DeregisterSteamMusicRemote(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_BIsCurrentMusicRemote, 4)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_BIsCurrentMusicRemote(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_BIsCurrentMusicRemote(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_BActivationSuccess, 5)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_BActivationSuccess(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, bool bValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_BActivationSuccess(_this->linux_side, bValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetDisplayName, 8)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetDisplayName(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, const char * pchDisplayName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetDisplayName(_this->linux_side, pchDisplayName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetPNGIcon_64x64, 12)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetPNGIcon_64x64(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, void * pvBuffer, uint32 cbBufferLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetPNGIcon_64x64(_this->linux_side, pvBuffer, cbBufferLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnablePlayPrevious, 5)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnablePlayPrevious(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, bool bValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnablePlayPrevious(_this->linux_side, bValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnablePlayNext, 5)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnablePlayNext(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, bool bValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnablePlayNext(_this->linux_side, bValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnableShuffled, 5)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnableShuffled(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, bool bValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnableShuffled(_this->linux_side, bValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnableLooped, 5)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnableLooped(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, bool bValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnableLooped(_this->linux_side, bValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnableQueue, 5)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnableQueue(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, bool bValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnableQueue(_this->linux_side, bValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnablePlaylists, 5)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnablePlaylists(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, bool bValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnablePlaylists(_this->linux_side, bValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdatePlaybackStatus, 8)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdatePlaybackStatus(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, AudioPlayback_Status nStatus)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdatePlaybackStatus(_this->linux_side, nStatus);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateShuffled, 5)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateShuffled(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, bool bValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateShuffled(_this->linux_side, bValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateLooped, 5)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateLooped(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, bool bValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateLooped(_this->linux_side, bValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateVolume, 8)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateVolume(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, float flValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateVolume(_this->linux_side, flValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_CurrentEntryWillChange, 4)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_CurrentEntryWillChange(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_CurrentEntryWillChange(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_CurrentEntryIsAvailable, 5)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_CurrentEntryIsAvailable(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, bool bAvailable)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_CurrentEntryIsAvailable(_this->linux_side, bAvailable);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateCurrentEntryText, 8)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateCurrentEntryText(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, const char * pchText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateCurrentEntryText(_this->linux_side, pchText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateCurrentEntryElapsedSeconds, 8)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateCurrentEntryElapsedSeconds(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, int nValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateCurrentEntryElapsedSeconds(_this->linux_side, nValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateCurrentEntryCoverArt, 12)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateCurrentEntryCoverArt(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, void * pvBuffer, uint32 cbBufferLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateCurrentEntryCoverArt(_this->linux_side, pvBuffer, cbBufferLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_CurrentEntryDidChange, 4)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_CurrentEntryDidChange(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_CurrentEntryDidChange(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_QueueWillChange, 4)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_QueueWillChange(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_QueueWillChange(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_ResetQueueEntries, 4)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_ResetQueueEntries(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_ResetQueueEntries(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetQueueEntry, 16)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetQueueEntry(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, int nID, int nPosition, const char * pchEntryText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetQueueEntry(_this->linux_side, nID, nPosition, pchEntryText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetCurrentQueueEntry, 8)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetCurrentQueueEntry(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, int nID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetCurrentQueueEntry(_this->linux_side, nID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_QueueDidChange, 4)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_QueueDidChange(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_QueueDidChange(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_PlaylistWillChange, 4)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_PlaylistWillChange(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_PlaylistWillChange(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_ResetPlaylistEntries, 4)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_ResetPlaylistEntries(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_ResetPlaylistEntries(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetPlaylistEntry, 16)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetPlaylistEntry(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, int nID, int nPosition, const char * pchEntryText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetPlaylistEntry(_this->linux_side, nID, nPosition, pchEntryText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetCurrentPlaylistEntry, 8)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetCurrentPlaylistEntry(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this, int nID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetCurrentPlaylistEntry(_this->linux_side, nID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_PlaylistDidChange, 4)
+bool __thiscall winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_PlaylistDidChange(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_PlaylistDidChange(_this->linux_side);
+}
+
+extern vtable_ptr winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001,
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_RegisterSteamMusicRemote)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_DeregisterSteamMusicRemote)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_BIsCurrentMusicRemote)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_BActivationSuccess)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetDisplayName)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetPNGIcon_64x64)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnablePlayPrevious)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnablePlayNext)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnableShuffled)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnableLooped)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnableQueue)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_EnablePlaylists)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdatePlaybackStatus)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateShuffled)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateLooped)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateVolume)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_CurrentEntryWillChange)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_CurrentEntryIsAvailable)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateCurrentEntryText)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateCurrentEntryElapsedSeconds)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_UpdateCurrentEntryCoverArt)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_CurrentEntryDidChange)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_QueueWillChange)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_ResetQueueEntries)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetQueueEntry)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetCurrentQueueEntry)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_QueueDidChange)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_PlaylistWillChange)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_ResetPlaylistEntries)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetPlaylistEntry)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_SetCurrentPlaylistEntry)
+ VTABLE_ADD_FUNC(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_PlaylistDidChange)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *create_winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001(void *linux_side)
+{
+ winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamNetworking.c b/lsteamclient/winISteamNetworking.c
new file mode 100644
index 00000000..1e1614e8
--- /dev/null
+++ b/lsteamclient/winISteamNetworking.c
@@ -0,0 +1,858 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamNetworking_SteamNetworking005.h"
+
+typedef struct __winISteamNetworking_SteamNetworking005 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamNetworking_SteamNetworking005;
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_SendP2PPacket, 28)
+bool __thiscall winISteamNetworking_SteamNetworking005_SendP2PPacket(winISteamNetworking_SteamNetworking005 *_this, CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_SendP2PPacket(_this->linux_side, steamIDRemote, pubData, cubData, eP2PSendType, nChannel);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_IsP2PPacketAvailable, 12)
+bool __thiscall winISteamNetworking_SteamNetworking005_IsP2PPacketAvailable(winISteamNetworking_SteamNetworking005 *_this, uint32 * pcubMsgSize, int nChannel)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_IsP2PPacketAvailable(_this->linux_side, pcubMsgSize, nChannel);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_ReadP2PPacket, 24)
+bool __thiscall winISteamNetworking_SteamNetworking005_ReadP2PPacket(winISteamNetworking_SteamNetworking005 *_this, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, CSteamID * psteamIDRemote, int nChannel)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_ReadP2PPacket(_this->linux_side, pubDest, cubDest, pcubMsgSize, psteamIDRemote, nChannel);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_AcceptP2PSessionWithUser, 12)
+bool __thiscall winISteamNetworking_SteamNetworking005_AcceptP2PSessionWithUser(winISteamNetworking_SteamNetworking005 *_this, CSteamID steamIDRemote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_AcceptP2PSessionWithUser(_this->linux_side, steamIDRemote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_CloseP2PSessionWithUser, 12)
+bool __thiscall winISteamNetworking_SteamNetworking005_CloseP2PSessionWithUser(winISteamNetworking_SteamNetworking005 *_this, CSteamID steamIDRemote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_CloseP2PSessionWithUser(_this->linux_side, steamIDRemote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_CloseP2PChannelWithUser, 16)
+bool __thiscall winISteamNetworking_SteamNetworking005_CloseP2PChannelWithUser(winISteamNetworking_SteamNetworking005 *_this, CSteamID steamIDRemote, int nChannel)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_CloseP2PChannelWithUser(_this->linux_side, steamIDRemote, nChannel);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_GetP2PSessionState, 16)
+bool __thiscall winISteamNetworking_SteamNetworking005_GetP2PSessionState(winISteamNetworking_SteamNetworking005 *_this, CSteamID steamIDRemote, P2PSessionState_t * pConnectionState)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_GetP2PSessionState(_this->linux_side, steamIDRemote, pConnectionState);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_AllowP2PPacketRelay, 5)
+bool __thiscall winISteamNetworking_SteamNetworking005_AllowP2PPacketRelay(winISteamNetworking_SteamNetworking005 *_this, bool bAllow)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_AllowP2PPacketRelay(_this->linux_side, bAllow);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_CreateListenSocket, 15)
+SNetListenSocket_t __thiscall winISteamNetworking_SteamNetworking005_CreateListenSocket(winISteamNetworking_SteamNetworking005 *_this, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_CreateListenSocket(_this->linux_side, nVirtualP2PPort, nIP, nPort, bAllowUseOfPacketRelay);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_CreateP2PConnectionSocket, 21)
+SNetSocket_t __thiscall winISteamNetworking_SteamNetworking005_CreateP2PConnectionSocket(winISteamNetworking_SteamNetworking005 *_this, CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_CreateP2PConnectionSocket(_this->linux_side, steamIDTarget, nVirtualPort, nTimeoutSec, bAllowUseOfPacketRelay);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_CreateConnectionSocket, 14)
+SNetSocket_t __thiscall winISteamNetworking_SteamNetworking005_CreateConnectionSocket(winISteamNetworking_SteamNetworking005 *_this, uint32 nIP, uint16 nPort, int nTimeoutSec)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_CreateConnectionSocket(_this->linux_side, nIP, nPort, nTimeoutSec);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_DestroySocket, 9)
+bool __thiscall winISteamNetworking_SteamNetworking005_DestroySocket(winISteamNetworking_SteamNetworking005 *_this, SNetSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_DestroySocket(_this->linux_side, hSocket, bNotifyRemoteEnd);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_DestroyListenSocket, 9)
+bool __thiscall winISteamNetworking_SteamNetworking005_DestroyListenSocket(winISteamNetworking_SteamNetworking005 *_this, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_DestroyListenSocket(_this->linux_side, hSocket, bNotifyRemoteEnd);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_SendDataOnSocket, 17)
+bool __thiscall winISteamNetworking_SteamNetworking005_SendDataOnSocket(winISteamNetworking_SteamNetworking005 *_this, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_SendDataOnSocket(_this->linux_side, hSocket, pubData, cubData, bReliable);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_IsDataAvailableOnSocket, 12)
+bool __thiscall winISteamNetworking_SteamNetworking005_IsDataAvailableOnSocket(winISteamNetworking_SteamNetworking005 *_this, SNetSocket_t hSocket, uint32 * pcubMsgSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_IsDataAvailableOnSocket(_this->linux_side, hSocket, pcubMsgSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_RetrieveDataFromSocket, 20)
+bool __thiscall winISteamNetworking_SteamNetworking005_RetrieveDataFromSocket(winISteamNetworking_SteamNetworking005 *_this, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_RetrieveDataFromSocket(_this->linux_side, hSocket, pubDest, cubDest, pcubMsgSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_IsDataAvailable, 16)
+bool __thiscall winISteamNetworking_SteamNetworking005_IsDataAvailable(winISteamNetworking_SteamNetworking005 *_this, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_IsDataAvailable(_this->linux_side, hListenSocket, pcubMsgSize, phSocket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_RetrieveData, 24)
+bool __thiscall winISteamNetworking_SteamNetworking005_RetrieveData(winISteamNetworking_SteamNetworking005 *_this, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_RetrieveData(_this->linux_side, hListenSocket, pubDest, cubDest, pcubMsgSize, phSocket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_GetSocketInfo, 24)
+bool __thiscall winISteamNetworking_SteamNetworking005_GetSocketInfo(winISteamNetworking_SteamNetworking005 *_this, SNetSocket_t hSocket, CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_GetSocketInfo(_this->linux_side, hSocket, pSteamIDRemote, peSocketStatus, punIPRemote, punPortRemote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_GetListenSocketInfo, 16)
+bool __thiscall winISteamNetworking_SteamNetworking005_GetListenSocketInfo(winISteamNetworking_SteamNetworking005 *_this, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_GetListenSocketInfo(_this->linux_side, hListenSocket, pnIP, pnPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_GetSocketConnectionType, 8)
+ESNetSocketConnectionType __thiscall winISteamNetworking_SteamNetworking005_GetSocketConnectionType(winISteamNetworking_SteamNetworking005 *_this, SNetSocket_t hSocket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_GetSocketConnectionType(_this->linux_side, hSocket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking005_GetMaxPacketSize, 8)
+int __thiscall winISteamNetworking_SteamNetworking005_GetMaxPacketSize(winISteamNetworking_SteamNetworking005 *_this, SNetSocket_t hSocket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking005_GetMaxPacketSize(_this->linux_side, hSocket);
+}
+
+extern vtable_ptr winISteamNetworking_SteamNetworking005_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamNetworking_SteamNetworking005,
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_SendP2PPacket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_IsP2PPacketAvailable)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_ReadP2PPacket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_AcceptP2PSessionWithUser)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_CloseP2PSessionWithUser)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_CloseP2PChannelWithUser)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_GetP2PSessionState)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_AllowP2PPacketRelay)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_CreateListenSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_CreateP2PConnectionSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_CreateConnectionSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_DestroySocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_DestroyListenSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_SendDataOnSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_IsDataAvailableOnSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_RetrieveDataFromSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_IsDataAvailable)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_RetrieveData)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_GetSocketInfo)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_GetListenSocketInfo)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_GetSocketConnectionType)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking005_GetMaxPacketSize)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamNetworking_SteamNetworking005 *create_winISteamNetworking_SteamNetworking005(void *linux_side)
+{
+ winISteamNetworking_SteamNetworking005 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamNetworking_SteamNetworking005));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamNetworking_SteamNetworking005_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamNetworking_SteamNetworking004.h"
+
+typedef struct __winISteamNetworking_SteamNetworking004 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamNetworking_SteamNetworking004;
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_SendP2PPacket, 28)
+bool __thiscall winISteamNetworking_SteamNetworking004_SendP2PPacket(winISteamNetworking_SteamNetworking004 *_this, CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType, int nVirtualPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_SendP2PPacket(_this->linux_side, steamIDRemote, pubData, cubData, eP2PSendType, nVirtualPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_IsP2PPacketAvailable, 12)
+bool __thiscall winISteamNetworking_SteamNetworking004_IsP2PPacketAvailable(winISteamNetworking_SteamNetworking004 *_this, uint32 * pcubMsgSize, int nVirtualPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_IsP2PPacketAvailable(_this->linux_side, pcubMsgSize, nVirtualPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_ReadP2PPacket, 24)
+bool __thiscall winISteamNetworking_SteamNetworking004_ReadP2PPacket(winISteamNetworking_SteamNetworking004 *_this, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, CSteamID * psteamIDRemote, int nVirtualPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_ReadP2PPacket(_this->linux_side, pubDest, cubDest, pcubMsgSize, psteamIDRemote, nVirtualPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_AcceptP2PSessionWithUser, 12)
+bool __thiscall winISteamNetworking_SteamNetworking004_AcceptP2PSessionWithUser(winISteamNetworking_SteamNetworking004 *_this, CSteamID steamIDRemote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_AcceptP2PSessionWithUser(_this->linux_side, steamIDRemote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_CloseP2PSessionWithUser, 12)
+bool __thiscall winISteamNetworking_SteamNetworking004_CloseP2PSessionWithUser(winISteamNetworking_SteamNetworking004 *_this, CSteamID steamIDRemote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_CloseP2PSessionWithUser(_this->linux_side, steamIDRemote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_GetP2PSessionState, 16)
+bool __thiscall winISteamNetworking_SteamNetworking004_GetP2PSessionState(winISteamNetworking_SteamNetworking004 *_this, CSteamID steamIDRemote, P2PSessionState_t * pConnectionState)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_GetP2PSessionState(_this->linux_side, steamIDRemote, pConnectionState);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_CreateListenSocket, 15)
+SNetListenSocket_t __thiscall winISteamNetworking_SteamNetworking004_CreateListenSocket(winISteamNetworking_SteamNetworking004 *_this, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_CreateListenSocket(_this->linux_side, nVirtualP2PPort, nIP, nPort, bAllowUseOfPacketRelay);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_CreateP2PConnectionSocket, 21)
+SNetSocket_t __thiscall winISteamNetworking_SteamNetworking004_CreateP2PConnectionSocket(winISteamNetworking_SteamNetworking004 *_this, CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_CreateP2PConnectionSocket(_this->linux_side, steamIDTarget, nVirtualPort, nTimeoutSec, bAllowUseOfPacketRelay);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_CreateConnectionSocket, 14)
+SNetSocket_t __thiscall winISteamNetworking_SteamNetworking004_CreateConnectionSocket(winISteamNetworking_SteamNetworking004 *_this, uint32 nIP, uint16 nPort, int nTimeoutSec)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_CreateConnectionSocket(_this->linux_side, nIP, nPort, nTimeoutSec);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_DestroySocket, 9)
+bool __thiscall winISteamNetworking_SteamNetworking004_DestroySocket(winISteamNetworking_SteamNetworking004 *_this, SNetSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_DestroySocket(_this->linux_side, hSocket, bNotifyRemoteEnd);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_DestroyListenSocket, 9)
+bool __thiscall winISteamNetworking_SteamNetworking004_DestroyListenSocket(winISteamNetworking_SteamNetworking004 *_this, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_DestroyListenSocket(_this->linux_side, hSocket, bNotifyRemoteEnd);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_SendDataOnSocket, 17)
+bool __thiscall winISteamNetworking_SteamNetworking004_SendDataOnSocket(winISteamNetworking_SteamNetworking004 *_this, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_SendDataOnSocket(_this->linux_side, hSocket, pubData, cubData, bReliable);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_IsDataAvailableOnSocket, 12)
+bool __thiscall winISteamNetworking_SteamNetworking004_IsDataAvailableOnSocket(winISteamNetworking_SteamNetworking004 *_this, SNetSocket_t hSocket, uint32 * pcubMsgSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_IsDataAvailableOnSocket(_this->linux_side, hSocket, pcubMsgSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_RetrieveDataFromSocket, 20)
+bool __thiscall winISteamNetworking_SteamNetworking004_RetrieveDataFromSocket(winISteamNetworking_SteamNetworking004 *_this, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_RetrieveDataFromSocket(_this->linux_side, hSocket, pubDest, cubDest, pcubMsgSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_IsDataAvailable, 16)
+bool __thiscall winISteamNetworking_SteamNetworking004_IsDataAvailable(winISteamNetworking_SteamNetworking004 *_this, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_IsDataAvailable(_this->linux_side, hListenSocket, pcubMsgSize, phSocket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_RetrieveData, 24)
+bool __thiscall winISteamNetworking_SteamNetworking004_RetrieveData(winISteamNetworking_SteamNetworking004 *_this, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_RetrieveData(_this->linux_side, hListenSocket, pubDest, cubDest, pcubMsgSize, phSocket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_GetSocketInfo, 24)
+bool __thiscall winISteamNetworking_SteamNetworking004_GetSocketInfo(winISteamNetworking_SteamNetworking004 *_this, SNetSocket_t hSocket, CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_GetSocketInfo(_this->linux_side, hSocket, pSteamIDRemote, peSocketStatus, punIPRemote, punPortRemote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_GetListenSocketInfo, 16)
+bool __thiscall winISteamNetworking_SteamNetworking004_GetListenSocketInfo(winISteamNetworking_SteamNetworking004 *_this, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_GetListenSocketInfo(_this->linux_side, hListenSocket, pnIP, pnPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_GetSocketConnectionType, 8)
+ESNetSocketConnectionType __thiscall winISteamNetworking_SteamNetworking004_GetSocketConnectionType(winISteamNetworking_SteamNetworking004 *_this, SNetSocket_t hSocket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_GetSocketConnectionType(_this->linux_side, hSocket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking004_GetMaxPacketSize, 8)
+int __thiscall winISteamNetworking_SteamNetworking004_GetMaxPacketSize(winISteamNetworking_SteamNetworking004 *_this, SNetSocket_t hSocket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking004_GetMaxPacketSize(_this->linux_side, hSocket);
+}
+
+extern vtable_ptr winISteamNetworking_SteamNetworking004_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamNetworking_SteamNetworking004,
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_SendP2PPacket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_IsP2PPacketAvailable)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_ReadP2PPacket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_AcceptP2PSessionWithUser)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_CloseP2PSessionWithUser)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_GetP2PSessionState)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_CreateListenSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_CreateP2PConnectionSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_CreateConnectionSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_DestroySocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_DestroyListenSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_SendDataOnSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_IsDataAvailableOnSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_RetrieveDataFromSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_IsDataAvailable)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_RetrieveData)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_GetSocketInfo)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_GetListenSocketInfo)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_GetSocketConnectionType)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking004_GetMaxPacketSize)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamNetworking_SteamNetworking004 *create_winISteamNetworking_SteamNetworking004(void *linux_side)
+{
+ winISteamNetworking_SteamNetworking004 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamNetworking_SteamNetworking004));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamNetworking_SteamNetworking004_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamNetworking_SteamNetworking003.h"
+
+typedef struct __winISteamNetworking_SteamNetworking003 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamNetworking_SteamNetworking003;
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_SendP2PPacket, 24)
+bool __thiscall winISteamNetworking_SteamNetworking003_SendP2PPacket(winISteamNetworking_SteamNetworking003 *_this, CSteamID steamIDRemote, const void * pubData, uint32 cubData, EP2PSend eP2PSendType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_SendP2PPacket(_this->linux_side, steamIDRemote, pubData, cubData, eP2PSendType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_IsP2PPacketAvailable, 8)
+bool __thiscall winISteamNetworking_SteamNetworking003_IsP2PPacketAvailable(winISteamNetworking_SteamNetworking003 *_this, uint32 * pcubMsgSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_IsP2PPacketAvailable(_this->linux_side, pcubMsgSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_ReadP2PPacket, 20)
+bool __thiscall winISteamNetworking_SteamNetworking003_ReadP2PPacket(winISteamNetworking_SteamNetworking003 *_this, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, CSteamID * psteamIDRemote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_ReadP2PPacket(_this->linux_side, pubDest, cubDest, pcubMsgSize, psteamIDRemote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_AcceptP2PSessionWithUser, 12)
+bool __thiscall winISteamNetworking_SteamNetworking003_AcceptP2PSessionWithUser(winISteamNetworking_SteamNetworking003 *_this, CSteamID steamIDRemote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_AcceptP2PSessionWithUser(_this->linux_side, steamIDRemote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_CloseP2PSessionWithUser, 12)
+bool __thiscall winISteamNetworking_SteamNetworking003_CloseP2PSessionWithUser(winISteamNetworking_SteamNetworking003 *_this, CSteamID steamIDRemote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_CloseP2PSessionWithUser(_this->linux_side, steamIDRemote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_GetP2PSessionState, 16)
+bool __thiscall winISteamNetworking_SteamNetworking003_GetP2PSessionState(winISteamNetworking_SteamNetworking003 *_this, CSteamID steamIDRemote, P2PSessionState_t * pConnectionState)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_GetP2PSessionState(_this->linux_side, steamIDRemote, pConnectionState);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_CreateListenSocket, 15)
+SNetListenSocket_t __thiscall winISteamNetworking_SteamNetworking003_CreateListenSocket(winISteamNetworking_SteamNetworking003 *_this, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_CreateListenSocket(_this->linux_side, nVirtualP2PPort, nIP, nPort, bAllowUseOfPacketRelay);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_CreateP2PConnectionSocket, 21)
+SNetSocket_t __thiscall winISteamNetworking_SteamNetworking003_CreateP2PConnectionSocket(winISteamNetworking_SteamNetworking003 *_this, CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_CreateP2PConnectionSocket(_this->linux_side, steamIDTarget, nVirtualPort, nTimeoutSec, bAllowUseOfPacketRelay);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_CreateConnectionSocket, 14)
+SNetSocket_t __thiscall winISteamNetworking_SteamNetworking003_CreateConnectionSocket(winISteamNetworking_SteamNetworking003 *_this, uint32 nIP, uint16 nPort, int nTimeoutSec)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_CreateConnectionSocket(_this->linux_side, nIP, nPort, nTimeoutSec);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_DestroySocket, 9)
+bool __thiscall winISteamNetworking_SteamNetworking003_DestroySocket(winISteamNetworking_SteamNetworking003 *_this, SNetSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_DestroySocket(_this->linux_side, hSocket, bNotifyRemoteEnd);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_DestroyListenSocket, 9)
+bool __thiscall winISteamNetworking_SteamNetworking003_DestroyListenSocket(winISteamNetworking_SteamNetworking003 *_this, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_DestroyListenSocket(_this->linux_side, hSocket, bNotifyRemoteEnd);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_SendDataOnSocket, 17)
+bool __thiscall winISteamNetworking_SteamNetworking003_SendDataOnSocket(winISteamNetworking_SteamNetworking003 *_this, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_SendDataOnSocket(_this->linux_side, hSocket, pubData, cubData, bReliable);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_IsDataAvailableOnSocket, 12)
+bool __thiscall winISteamNetworking_SteamNetworking003_IsDataAvailableOnSocket(winISteamNetworking_SteamNetworking003 *_this, SNetSocket_t hSocket, uint32 * pcubMsgSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_IsDataAvailableOnSocket(_this->linux_side, hSocket, pcubMsgSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_RetrieveDataFromSocket, 20)
+bool __thiscall winISteamNetworking_SteamNetworking003_RetrieveDataFromSocket(winISteamNetworking_SteamNetworking003 *_this, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_RetrieveDataFromSocket(_this->linux_side, hSocket, pubDest, cubDest, pcubMsgSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_IsDataAvailable, 16)
+bool __thiscall winISteamNetworking_SteamNetworking003_IsDataAvailable(winISteamNetworking_SteamNetworking003 *_this, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_IsDataAvailable(_this->linux_side, hListenSocket, pcubMsgSize, phSocket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_RetrieveData, 24)
+bool __thiscall winISteamNetworking_SteamNetworking003_RetrieveData(winISteamNetworking_SteamNetworking003 *_this, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_RetrieveData(_this->linux_side, hListenSocket, pubDest, cubDest, pcubMsgSize, phSocket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_GetSocketInfo, 24)
+bool __thiscall winISteamNetworking_SteamNetworking003_GetSocketInfo(winISteamNetworking_SteamNetworking003 *_this, SNetSocket_t hSocket, CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_GetSocketInfo(_this->linux_side, hSocket, pSteamIDRemote, peSocketStatus, punIPRemote, punPortRemote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_GetListenSocketInfo, 16)
+bool __thiscall winISteamNetworking_SteamNetworking003_GetListenSocketInfo(winISteamNetworking_SteamNetworking003 *_this, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_GetListenSocketInfo(_this->linux_side, hListenSocket, pnIP, pnPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_GetSocketConnectionType, 8)
+ESNetSocketConnectionType __thiscall winISteamNetworking_SteamNetworking003_GetSocketConnectionType(winISteamNetworking_SteamNetworking003 *_this, SNetSocket_t hSocket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_GetSocketConnectionType(_this->linux_side, hSocket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking003_GetMaxPacketSize, 8)
+int __thiscall winISteamNetworking_SteamNetworking003_GetMaxPacketSize(winISteamNetworking_SteamNetworking003 *_this, SNetSocket_t hSocket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking003_GetMaxPacketSize(_this->linux_side, hSocket);
+}
+
+extern vtable_ptr winISteamNetworking_SteamNetworking003_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamNetworking_SteamNetworking003,
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_SendP2PPacket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_IsP2PPacketAvailable)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_ReadP2PPacket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_AcceptP2PSessionWithUser)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_CloseP2PSessionWithUser)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_GetP2PSessionState)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_CreateListenSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_CreateP2PConnectionSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_CreateConnectionSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_DestroySocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_DestroyListenSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_SendDataOnSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_IsDataAvailableOnSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_RetrieveDataFromSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_IsDataAvailable)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_RetrieveData)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_GetSocketInfo)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_GetListenSocketInfo)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_GetSocketConnectionType)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking003_GetMaxPacketSize)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamNetworking_SteamNetworking003 *create_winISteamNetworking_SteamNetworking003(void *linux_side)
+{
+ winISteamNetworking_SteamNetworking003 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamNetworking_SteamNetworking003));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamNetworking_SteamNetworking003_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamNetworking_SteamNetworking002.h"
+
+typedef struct __winISteamNetworking_SteamNetworking002 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamNetworking_SteamNetworking002;
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking002_CreateListenSocket, 15)
+SNetListenSocket_t __thiscall winISteamNetworking_SteamNetworking002_CreateListenSocket(winISteamNetworking_SteamNetworking002 *_this, int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking002_CreateListenSocket(_this->linux_side, nVirtualP2PPort, nIP, nPort, bAllowUseOfPacketRelay);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking002_CreateP2PConnectionSocket, 21)
+SNetSocket_t __thiscall winISteamNetworking_SteamNetworking002_CreateP2PConnectionSocket(winISteamNetworking_SteamNetworking002 *_this, CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking002_CreateP2PConnectionSocket(_this->linux_side, steamIDTarget, nVirtualPort, nTimeoutSec, bAllowUseOfPacketRelay);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking002_CreateConnectionSocket, 14)
+SNetSocket_t __thiscall winISteamNetworking_SteamNetworking002_CreateConnectionSocket(winISteamNetworking_SteamNetworking002 *_this, uint32 nIP, uint16 nPort, int nTimeoutSec)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking002_CreateConnectionSocket(_this->linux_side, nIP, nPort, nTimeoutSec);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking002_DestroySocket, 9)
+bool __thiscall winISteamNetworking_SteamNetworking002_DestroySocket(winISteamNetworking_SteamNetworking002 *_this, SNetSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking002_DestroySocket(_this->linux_side, hSocket, bNotifyRemoteEnd);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking002_DestroyListenSocket, 9)
+bool __thiscall winISteamNetworking_SteamNetworking002_DestroyListenSocket(winISteamNetworking_SteamNetworking002 *_this, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking002_DestroyListenSocket(_this->linux_side, hSocket, bNotifyRemoteEnd);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking002_SendDataOnSocket, 17)
+bool __thiscall winISteamNetworking_SteamNetworking002_SendDataOnSocket(winISteamNetworking_SteamNetworking002 *_this, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking002_SendDataOnSocket(_this->linux_side, hSocket, pubData, cubData, bReliable);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking002_IsDataAvailableOnSocket, 12)
+bool __thiscall winISteamNetworking_SteamNetworking002_IsDataAvailableOnSocket(winISteamNetworking_SteamNetworking002 *_this, SNetSocket_t hSocket, uint32 * pcubMsgSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking002_IsDataAvailableOnSocket(_this->linux_side, hSocket, pcubMsgSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking002_RetrieveDataFromSocket, 20)
+bool __thiscall winISteamNetworking_SteamNetworking002_RetrieveDataFromSocket(winISteamNetworking_SteamNetworking002 *_this, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking002_RetrieveDataFromSocket(_this->linux_side, hSocket, pubDest, cubDest, pcubMsgSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking002_IsDataAvailable, 16)
+bool __thiscall winISteamNetworking_SteamNetworking002_IsDataAvailable(winISteamNetworking_SteamNetworking002 *_this, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking002_IsDataAvailable(_this->linux_side, hListenSocket, pcubMsgSize, phSocket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking002_RetrieveData, 24)
+bool __thiscall winISteamNetworking_SteamNetworking002_RetrieveData(winISteamNetworking_SteamNetworking002 *_this, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking002_RetrieveData(_this->linux_side, hListenSocket, pubDest, cubDest, pcubMsgSize, phSocket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking002_GetSocketInfo, 24)
+bool __thiscall winISteamNetworking_SteamNetworking002_GetSocketInfo(winISteamNetworking_SteamNetworking002 *_this, SNetSocket_t hSocket, CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking002_GetSocketInfo(_this->linux_side, hSocket, pSteamIDRemote, peSocketStatus, punIPRemote, punPortRemote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking002_GetListenSocketInfo, 16)
+bool __thiscall winISteamNetworking_SteamNetworking002_GetListenSocketInfo(winISteamNetworking_SteamNetworking002 *_this, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking002_GetListenSocketInfo(_this->linux_side, hListenSocket, pnIP, pnPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking002_GetSocketConnectionType, 8)
+ESNetSocketConnectionType __thiscall winISteamNetworking_SteamNetworking002_GetSocketConnectionType(winISteamNetworking_SteamNetworking002 *_this, SNetSocket_t hSocket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking002_GetSocketConnectionType(_this->linux_side, hSocket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking002_GetMaxPacketSize, 8)
+int __thiscall winISteamNetworking_SteamNetworking002_GetMaxPacketSize(winISteamNetworking_SteamNetworking002 *_this, SNetSocket_t hSocket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking002_GetMaxPacketSize(_this->linux_side, hSocket);
+}
+
+extern vtable_ptr winISteamNetworking_SteamNetworking002_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamNetworking_SteamNetworking002,
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking002_CreateListenSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking002_CreateP2PConnectionSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking002_CreateConnectionSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking002_DestroySocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking002_DestroyListenSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking002_SendDataOnSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking002_IsDataAvailableOnSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking002_RetrieveDataFromSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking002_IsDataAvailable)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking002_RetrieveData)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking002_GetSocketInfo)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking002_GetListenSocketInfo)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking002_GetSocketConnectionType)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking002_GetMaxPacketSize)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamNetworking_SteamNetworking002 *create_winISteamNetworking_SteamNetworking002(void *linux_side)
+{
+ winISteamNetworking_SteamNetworking002 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamNetworking_SteamNetworking002));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamNetworking_SteamNetworking002_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamNetworking_SteamNetworking001.h"
+
+typedef struct __winISteamNetworking_SteamNetworking001 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamNetworking_SteamNetworking001;
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking001_CreateListenSocket, 14)
+SNetListenSocket_t __thiscall winISteamNetworking_SteamNetworking001_CreateListenSocket(winISteamNetworking_SteamNetworking001 *_this, int nVirtualP2PPort, uint32 nIP, uint16 nPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking001_CreateListenSocket(_this->linux_side, nVirtualP2PPort, nIP, nPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking001_CreateP2PConnectionSocket, 20)
+SNetSocket_t __thiscall winISteamNetworking_SteamNetworking001_CreateP2PConnectionSocket(winISteamNetworking_SteamNetworking001 *_this, CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking001_CreateP2PConnectionSocket(_this->linux_side, steamIDTarget, nVirtualPort, nTimeoutSec);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking001_CreateConnectionSocket, 14)
+SNetSocket_t __thiscall winISteamNetworking_SteamNetworking001_CreateConnectionSocket(winISteamNetworking_SteamNetworking001 *_this, uint32 nIP, uint16 nPort, int nTimeoutSec)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking001_CreateConnectionSocket(_this->linux_side, nIP, nPort, nTimeoutSec);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking001_DestroySocket, 9)
+bool __thiscall winISteamNetworking_SteamNetworking001_DestroySocket(winISteamNetworking_SteamNetworking001 *_this, SNetSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking001_DestroySocket(_this->linux_side, hSocket, bNotifyRemoteEnd);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking001_DestroyListenSocket, 9)
+bool __thiscall winISteamNetworking_SteamNetworking001_DestroyListenSocket(winISteamNetworking_SteamNetworking001 *_this, SNetListenSocket_t hSocket, bool bNotifyRemoteEnd)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking001_DestroyListenSocket(_this->linux_side, hSocket, bNotifyRemoteEnd);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking001_SendDataOnSocket, 17)
+bool __thiscall winISteamNetworking_SteamNetworking001_SendDataOnSocket(winISteamNetworking_SteamNetworking001 *_this, SNetSocket_t hSocket, void * pubData, uint32 cubData, bool bReliable)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking001_SendDataOnSocket(_this->linux_side, hSocket, pubData, cubData, bReliable);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking001_IsDataAvailableOnSocket, 12)
+bool __thiscall winISteamNetworking_SteamNetworking001_IsDataAvailableOnSocket(winISteamNetworking_SteamNetworking001 *_this, SNetSocket_t hSocket, uint32 * pcubMsgSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking001_IsDataAvailableOnSocket(_this->linux_side, hSocket, pcubMsgSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking001_RetrieveDataFromSocket, 20)
+bool __thiscall winISteamNetworking_SteamNetworking001_RetrieveDataFromSocket(winISteamNetworking_SteamNetworking001 *_this, SNetSocket_t hSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking001_RetrieveDataFromSocket(_this->linux_side, hSocket, pubDest, cubDest, pcubMsgSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking001_IsDataAvailable, 16)
+bool __thiscall winISteamNetworking_SteamNetworking001_IsDataAvailable(winISteamNetworking_SteamNetworking001 *_this, SNetListenSocket_t hListenSocket, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking001_IsDataAvailable(_this->linux_side, hListenSocket, pcubMsgSize, phSocket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking001_RetrieveData, 24)
+bool __thiscall winISteamNetworking_SteamNetworking001_RetrieveData(winISteamNetworking_SteamNetworking001 *_this, SNetListenSocket_t hListenSocket, void * pubDest, uint32 cubDest, uint32 * pcubMsgSize, SNetSocket_t * phSocket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking001_RetrieveData(_this->linux_side, hListenSocket, pubDest, cubDest, pcubMsgSize, phSocket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking001_GetSocketInfo, 24)
+bool __thiscall winISteamNetworking_SteamNetworking001_GetSocketInfo(winISteamNetworking_SteamNetworking001 *_this, SNetSocket_t hSocket, CSteamID * pSteamIDRemote, int * peSocketStatus, uint32 * punIPRemote, uint16 * punPortRemote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking001_GetSocketInfo(_this->linux_side, hSocket, pSteamIDRemote, peSocketStatus, punIPRemote, punPortRemote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamNetworking_SteamNetworking001_GetListenSocketInfo, 16)
+bool __thiscall winISteamNetworking_SteamNetworking001_GetListenSocketInfo(winISteamNetworking_SteamNetworking001 *_this, SNetListenSocket_t hListenSocket, uint32 * pnIP, uint16 * pnPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamNetworking_SteamNetworking001_GetListenSocketInfo(_this->linux_side, hListenSocket, pnIP, pnPort);
+}
+
+extern vtable_ptr winISteamNetworking_SteamNetworking001_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamNetworking_SteamNetworking001,
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking001_CreateListenSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking001_CreateP2PConnectionSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking001_CreateConnectionSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking001_DestroySocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking001_DestroyListenSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking001_SendDataOnSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking001_IsDataAvailableOnSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking001_RetrieveDataFromSocket)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking001_IsDataAvailable)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking001_RetrieveData)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking001_GetSocketInfo)
+ VTABLE_ADD_FUNC(winISteamNetworking_SteamNetworking001_GetListenSocketInfo)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamNetworking_SteamNetworking001 *create_winISteamNetworking_SteamNetworking001(void *linux_side)
+{
+ winISteamNetworking_SteamNetworking001 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamNetworking_SteamNetworking001));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamNetworking_SteamNetworking001_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamParentalSettings.c b/lsteamclient/winISteamParentalSettings.c
new file mode 100644
index 00000000..7bccedcd
--- /dev/null
+++ b/lsteamclient/winISteamParentalSettings.c
@@ -0,0 +1,94 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001.h"
+
+typedef struct __winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001;
+
+DEFINE_THISCALL_WRAPPER(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsParentalLockEnabled, 4)
+bool __thiscall winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsParentalLockEnabled(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsParentalLockEnabled(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsParentalLockLocked, 4)
+bool __thiscall winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsParentalLockLocked(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsParentalLockLocked(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsAppBlocked, 8)
+bool __thiscall winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsAppBlocked(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsAppBlocked(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsAppInBlockList, 8)
+bool __thiscall winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsAppInBlockList(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001 *_this, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsAppInBlockList(_this->linux_side, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsFeatureBlocked, 8)
+bool __thiscall winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsFeatureBlocked(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001 *_this, EParentalFeature eFeature)
+{
+ TRACE("%p\n", _this);
+ return cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsFeatureBlocked(_this->linux_side, eFeature);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsFeatureInBlockList, 8)
+bool __thiscall winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsFeatureInBlockList(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001 *_this, EParentalFeature eFeature)
+{
+ TRACE("%p\n", _this);
+ return cppISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsFeatureInBlockList(_this->linux_side, eFeature);
+}
+
+extern vtable_ptr winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001,
+ VTABLE_ADD_FUNC(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsParentalLockEnabled)
+ VTABLE_ADD_FUNC(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsParentalLockLocked)
+ VTABLE_ADD_FUNC(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsAppBlocked)
+ VTABLE_ADD_FUNC(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsAppInBlockList)
+ VTABLE_ADD_FUNC(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsFeatureBlocked)
+ VTABLE_ADD_FUNC(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_BIsFeatureInBlockList)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001 *create_winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001(void *linux_side)
+{
+ winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamRemoteStorage.c b/lsteamclient/winISteamRemoteStorage.c
new file mode 100644
index 00000000..a9ab5135
--- /dev/null
+++ b/lsteamclient/winISteamRemoteStorage.c
@@ -0,0 +1,3681 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014.h"
+
+typedef struct __winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014;
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWrite, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWrite(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, const char * pchFile, const void * pvData, int32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWrite(_this->linux_side, pchFile, pvData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileRead, 16)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileRead(_this->linux_side, pchFile, pvData, cubDataToRead);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteAsync, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteAsync(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, const char * pchFile, const void * pvData, uint32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteAsync(_this->linux_side, pchFile, pvData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileReadAsync, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileReadAsync(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, const char * pchFile, uint32 nOffset, uint32 cubToRead)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileReadAsync(_this->linux_side, pchFile, nOffset, cubToRead);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileReadAsyncComplete, 20)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileReadAsyncComplete(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, SteamAPICall_t hReadCall, void * pvBuffer, uint32 cubToRead)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileReadAsyncComplete(_this->linux_side, hReadCall, pvBuffer, cubToRead);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileForget, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileForget(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileForget(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileDelete, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileDelete(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileDelete(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileShare, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileShare(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileShare(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SetSyncPlatforms, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SetSyncPlatforms(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SetSyncPlatforms(_this->linux_side, pchFile, eRemoteStoragePlatform);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamOpen, 8)
+UGCFileWriteStreamHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamOpen(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamOpen(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamWriteChunk, 20)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamWriteChunk(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamWriteChunk(_this->linux_side, writeHandle, pvData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamClose, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamClose(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, UGCFileWriteStreamHandle_t writeHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamClose(_this->linux_side, writeHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamCancel, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamCancel(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, UGCFileWriteStreamHandle_t writeHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamCancel(_this->linux_side, writeHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileExists, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileExists(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileExists(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FilePersisted, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FilePersisted(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FilePersisted(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileSize, 8)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileSize(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileTimestamp, 8)
+int64 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileTimestamp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileTimestamp(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetSyncPlatforms, 8)
+ERemoteStoragePlatform __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetSyncPlatforms(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetSyncPlatforms(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileNameAndSize, 12)
+const char * __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileNameAndSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, int iFile, int32 * pnFileSizeInBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileNameAndSize(_this->linux_side, iFile, pnFileSizeInBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetQuota, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetQuota(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, uint64 * pnTotalBytes, uint64 * puAvailableBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetQuota(_this->linux_side, pnTotalBytes, puAvailableBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_IsCloudEnabledForAccount, 4)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_IsCloudEnabledForAccount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_IsCloudEnabledForAccount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_IsCloudEnabledForApp, 4)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_IsCloudEnabledForApp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_IsCloudEnabledForApp(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SetCloudEnabledForApp, 5)
+void __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SetCloudEnabledForApp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, bool bEnabled)
+{
+ TRACE("%p\n", _this);
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SetCloudEnabledForApp(_this->linux_side, bEnabled);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UGCDownload, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UGCDownload(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, UGCHandle_t hContent, uint32 unPriority)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UGCDownload(_this->linux_side, hContent, unPriority);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetUGCDownloadProgress, 20)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetUGCDownloadProgress(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetUGCDownloadProgress(_this->linux_side, hContent, pnBytesDownloaded, pnBytesExpected);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetUGCDetails, 28)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetUGCDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, CSteamID * pSteamIDOwner)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetUGCDetails(_this->linux_side, hContent, pnAppID, ppchName, pnFileSizeInBytes, pSteamIDOwner);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UGCRead, 28)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UGCRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UGCRead(_this->linux_side, hContent, pvData, cubDataToRead, cOffset, eAction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetCachedUGCCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetCachedUGCCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetCachedUGCCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetCachedUGCHandle, 8)
+UGCHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetCachedUGCHandle(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, int32 iCachedContent)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetCachedUGCHandle(_this->linux_side, iCachedContent);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_PublishWorkshopFile, 36)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_PublishWorkshopFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_PublishWorkshopFile(_this->linux_side, pchFile, pchPreviewFile, nConsumerAppId, pchTitle, pchDescription, eVisibility, pTags, eWorkshopFileType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_CreatePublishedFileUpdateRequest, 12)
+PublishedFileUpdateHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_CreatePublishedFileUpdateRequest(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_CreatePublishedFileUpdateRequest(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileFile, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileFile(_this->linux_side, updateHandle, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFilePreviewFile, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFilePreviewFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFilePreviewFile(_this->linux_side, updateHandle, pchPreviewFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileTitle, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileTitle(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileTitle(_this->linux_side, updateHandle, pchTitle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileDescription, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileDescription(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileDescription(_this->linux_side, updateHandle, pchDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileVisibility, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileVisibility(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileVisibility(_this->linux_side, updateHandle, eVisibility);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileTags, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileTags(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileTags(_this->linux_side, updateHandle, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_CommitPublishedFileUpdate, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_CommitPublishedFileUpdate(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, PublishedFileUpdateHandle_t updateHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_CommitPublishedFileUpdate(_this->linux_side, updateHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetPublishedFileDetails, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetPublishedFileDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetPublishedFileDetails(_this->linux_side, unPublishedFileId, unMaxSecondsOld);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_DeletePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_DeletePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_DeletePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumerateUserPublishedFiles, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumerateUserPublishedFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumerateUserPublishedFiles(_this->linux_side, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SubscribePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SubscribePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SubscribePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumerateUserSubscribedFiles, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumerateUserSubscribedFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumerateUserSubscribedFiles(_this->linux_side, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UnsubscribePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UnsubscribePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UnsubscribePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileSetChangeDescription, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileSetChangeDescription(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileSetChangeDescription(_this->linux_side, updateHandle, pchChangeDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetPublishedItemVoteDetails, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetPublishedItemVoteDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetPublishedItemVoteDetails(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdateUserPublishedItemVote, 13)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdateUserPublishedItemVote(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, PublishedFileId_t unPublishedFileId, bool bVoteUp)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdateUserPublishedItemVote(_this->linux_side, unPublishedFileId, bVoteUp);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetUserPublishedItemVoteDetails, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetUserPublishedItemVoteDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetUserPublishedItemVoteDetails(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumerateUserSharedWorkshopFiles, 24)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumerateUserSharedWorkshopFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t * pRequiredTags, SteamParamStringArray_t * pExcludedTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumerateUserSharedWorkshopFiles(_this->linux_side, steamId, unStartIndex, pRequiredTags, pExcludedTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_PublishVideo, 40)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_PublishVideo(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_PublishVideo(_this->linux_side, eVideoProvider, pchVideoAccount, pchVideoIdentifier, pchPreviewFile, nConsumerAppId, pchTitle, pchDescription, eVisibility, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SetUserPublishedFileAction, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SetUserPublishedFileAction(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SetUserPublishedFileAction(_this->linux_side, unPublishedFileId, eAction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumeratePublishedFilesByUserAction, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumeratePublishedFilesByUserAction(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, EWorkshopFileAction eAction, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumeratePublishedFilesByUserAction(_this->linux_side, eAction, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumeratePublishedWorkshopFiles, 28)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumeratePublishedWorkshopFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t * pTags, SteamParamStringArray_t * pUserTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumeratePublishedWorkshopFiles(_this->linux_side, eEnumerationType, unStartIndex, unCount, unDays, pTags, pUserTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UGCDownloadToLocation, 20)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UGCDownloadToLocation(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *_this, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UGCDownloadToLocation(_this->linux_side, hContent, pchLocation, unPriority);
+}
+
+extern vtable_ptr winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014,
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWrite)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteAsync)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileReadAsync)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileReadAsyncComplete)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileForget)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileDelete)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileShare)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SetSyncPlatforms)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamOpen)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamWriteChunk)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamClose)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileWriteStreamCancel)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FileExists)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_FilePersisted)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileTimestamp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetSyncPlatforms)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetFileNameAndSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetQuota)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_IsCloudEnabledForAccount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_IsCloudEnabledForApp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SetCloudEnabledForApp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UGCDownload)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetUGCDownloadProgress)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetUGCDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UGCRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetCachedUGCCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetCachedUGCHandle)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_PublishWorkshopFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_CreatePublishedFileUpdateRequest)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFilePreviewFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileTitle)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileDescription)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileVisibility)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileTags)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_CommitPublishedFileUpdate)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetPublishedFileDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_DeletePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumerateUserPublishedFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SubscribePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumerateUserSubscribedFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UnsubscribePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdatePublishedFileSetChangeDescription)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetPublishedItemVoteDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UpdateUserPublishedItemVote)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_GetUserPublishedItemVoteDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumerateUserSharedWorkshopFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_PublishVideo)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_SetUserPublishedFileAction)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumeratePublishedFilesByUserAction)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_EnumeratePublishedWorkshopFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_UGCDownloadToLocation)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014(void *linux_side)
+{
+ winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013.h"
+
+typedef struct __winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013;
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWrite, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWrite(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, const char * pchFile, const void * pvData, int32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWrite(_this->linux_side, pchFile, pvData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileRead, 16)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileRead(_this->linux_side, pchFile, pvData, cubDataToRead);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteAsync, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteAsync(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, const char * pchFile, const void * pvData, uint32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteAsync(_this->linux_side, pchFile, pvData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileReadAsync, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileReadAsync(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, const char * pchFile, uint32 nOffset, uint32 cubToRead)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileReadAsync(_this->linux_side, pchFile, nOffset, cubToRead);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileReadAsyncComplete, 20)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileReadAsyncComplete(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, SteamAPICall_t hReadCall, void * pvBuffer, uint32 cubToRead)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileReadAsyncComplete(_this->linux_side, hReadCall, pvBuffer, cubToRead);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileForget, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileForget(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileForget(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileDelete, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileDelete(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileDelete(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileShare, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileShare(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileShare(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SetSyncPlatforms, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SetSyncPlatforms(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SetSyncPlatforms(_this->linux_side, pchFile, eRemoteStoragePlatform);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamOpen, 8)
+UGCFileWriteStreamHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamOpen(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamOpen(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamWriteChunk, 20)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamWriteChunk(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamWriteChunk(_this->linux_side, writeHandle, pvData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamClose, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamClose(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, UGCFileWriteStreamHandle_t writeHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamClose(_this->linux_side, writeHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamCancel, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamCancel(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, UGCFileWriteStreamHandle_t writeHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamCancel(_this->linux_side, writeHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileExists, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileExists(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileExists(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FilePersisted, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FilePersisted(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FilePersisted(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileSize, 8)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileSize(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileTimestamp, 8)
+int64 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileTimestamp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileTimestamp(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetSyncPlatforms, 8)
+ERemoteStoragePlatform __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetSyncPlatforms(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetSyncPlatforms(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileNameAndSize, 12)
+const char * __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileNameAndSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, int iFile, int32 * pnFileSizeInBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileNameAndSize(_this->linux_side, iFile, pnFileSizeInBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetQuota, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetQuota(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, int32 * pnTotalBytes, int32 * puAvailableBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetQuota(_this->linux_side, pnTotalBytes, puAvailableBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_IsCloudEnabledForAccount, 4)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_IsCloudEnabledForAccount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_IsCloudEnabledForAccount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_IsCloudEnabledForApp, 4)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_IsCloudEnabledForApp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_IsCloudEnabledForApp(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SetCloudEnabledForApp, 5)
+void __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SetCloudEnabledForApp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, bool bEnabled)
+{
+ TRACE("%p\n", _this);
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SetCloudEnabledForApp(_this->linux_side, bEnabled);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UGCDownload, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UGCDownload(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, UGCHandle_t hContent, uint32 unPriority)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UGCDownload(_this->linux_side, hContent, unPriority);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetUGCDownloadProgress, 20)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetUGCDownloadProgress(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetUGCDownloadProgress(_this->linux_side, hContent, pnBytesDownloaded, pnBytesExpected);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetUGCDetails, 28)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetUGCDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, CSteamID * pSteamIDOwner)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetUGCDetails(_this->linux_side, hContent, pnAppID, ppchName, pnFileSizeInBytes, pSteamIDOwner);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UGCRead, 28)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UGCRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UGCRead(_this->linux_side, hContent, pvData, cubDataToRead, cOffset, eAction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetCachedUGCCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetCachedUGCCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetCachedUGCCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetCachedUGCHandle, 8)
+UGCHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetCachedUGCHandle(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, int32 iCachedContent)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetCachedUGCHandle(_this->linux_side, iCachedContent);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_PublishWorkshopFile, 36)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_PublishWorkshopFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_PublishWorkshopFile(_this->linux_side, pchFile, pchPreviewFile, nConsumerAppId, pchTitle, pchDescription, eVisibility, pTags, eWorkshopFileType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_CreatePublishedFileUpdateRequest, 12)
+PublishedFileUpdateHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_CreatePublishedFileUpdateRequest(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_CreatePublishedFileUpdateRequest(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileFile, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileFile(_this->linux_side, updateHandle, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFilePreviewFile, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFilePreviewFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFilePreviewFile(_this->linux_side, updateHandle, pchPreviewFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileTitle, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileTitle(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileTitle(_this->linux_side, updateHandle, pchTitle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileDescription, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileDescription(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileDescription(_this->linux_side, updateHandle, pchDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileVisibility, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileVisibility(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileVisibility(_this->linux_side, updateHandle, eVisibility);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileTags, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileTags(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileTags(_this->linux_side, updateHandle, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_CommitPublishedFileUpdate, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_CommitPublishedFileUpdate(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, PublishedFileUpdateHandle_t updateHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_CommitPublishedFileUpdate(_this->linux_side, updateHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetPublishedFileDetails, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetPublishedFileDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetPublishedFileDetails(_this->linux_side, unPublishedFileId, unMaxSecondsOld);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_DeletePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_DeletePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_DeletePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumerateUserPublishedFiles, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumerateUserPublishedFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumerateUserPublishedFiles(_this->linux_side, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SubscribePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SubscribePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SubscribePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumerateUserSubscribedFiles, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumerateUserSubscribedFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumerateUserSubscribedFiles(_this->linux_side, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UnsubscribePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UnsubscribePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UnsubscribePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileSetChangeDescription, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileSetChangeDescription(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileSetChangeDescription(_this->linux_side, updateHandle, pchChangeDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetPublishedItemVoteDetails, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetPublishedItemVoteDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetPublishedItemVoteDetails(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdateUserPublishedItemVote, 13)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdateUserPublishedItemVote(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, PublishedFileId_t unPublishedFileId, bool bVoteUp)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdateUserPublishedItemVote(_this->linux_side, unPublishedFileId, bVoteUp);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetUserPublishedItemVoteDetails, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetUserPublishedItemVoteDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetUserPublishedItemVoteDetails(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumerateUserSharedWorkshopFiles, 24)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumerateUserSharedWorkshopFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t * pRequiredTags, SteamParamStringArray_t * pExcludedTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumerateUserSharedWorkshopFiles(_this->linux_side, steamId, unStartIndex, pRequiredTags, pExcludedTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_PublishVideo, 40)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_PublishVideo(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_PublishVideo(_this->linux_side, eVideoProvider, pchVideoAccount, pchVideoIdentifier, pchPreviewFile, nConsumerAppId, pchTitle, pchDescription, eVisibility, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SetUserPublishedFileAction, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SetUserPublishedFileAction(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SetUserPublishedFileAction(_this->linux_side, unPublishedFileId, eAction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumeratePublishedFilesByUserAction, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumeratePublishedFilesByUserAction(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, EWorkshopFileAction eAction, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumeratePublishedFilesByUserAction(_this->linux_side, eAction, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumeratePublishedWorkshopFiles, 28)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumeratePublishedWorkshopFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t * pTags, SteamParamStringArray_t * pUserTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumeratePublishedWorkshopFiles(_this->linux_side, eEnumerationType, unStartIndex, unCount, unDays, pTags, pUserTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UGCDownloadToLocation, 20)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UGCDownloadToLocation(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *_this, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UGCDownloadToLocation(_this->linux_side, hContent, pchLocation, unPriority);
+}
+
+extern vtable_ptr winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013,
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWrite)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteAsync)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileReadAsync)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileReadAsyncComplete)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileForget)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileDelete)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileShare)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SetSyncPlatforms)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamOpen)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamWriteChunk)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamClose)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileWriteStreamCancel)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FileExists)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_FilePersisted)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileTimestamp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetSyncPlatforms)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetFileNameAndSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetQuota)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_IsCloudEnabledForAccount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_IsCloudEnabledForApp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SetCloudEnabledForApp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UGCDownload)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetUGCDownloadProgress)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetUGCDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UGCRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetCachedUGCCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetCachedUGCHandle)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_PublishWorkshopFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_CreatePublishedFileUpdateRequest)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFilePreviewFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileTitle)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileDescription)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileVisibility)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileTags)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_CommitPublishedFileUpdate)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetPublishedFileDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_DeletePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumerateUserPublishedFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SubscribePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumerateUserSubscribedFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UnsubscribePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdatePublishedFileSetChangeDescription)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetPublishedItemVoteDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UpdateUserPublishedItemVote)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_GetUserPublishedItemVoteDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumerateUserSharedWorkshopFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_PublishVideo)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_SetUserPublishedFileAction)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumeratePublishedFilesByUserAction)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_EnumeratePublishedWorkshopFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_UGCDownloadToLocation)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013(void *linux_side)
+{
+ winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012.h"
+
+typedef struct __winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012;
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWrite, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWrite(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, const char * pchFile, const void * pvData, int32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWrite(_this->linux_side, pchFile, pvData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileRead, 16)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileRead(_this->linux_side, pchFile, pvData, cubDataToRead);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileForget, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileForget(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileForget(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileDelete, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileDelete(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileDelete(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileShare, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileShare(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileShare(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SetSyncPlatforms, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SetSyncPlatforms(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SetSyncPlatforms(_this->linux_side, pchFile, eRemoteStoragePlatform);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamOpen, 8)
+UGCFileWriteStreamHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamOpen(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamOpen(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamWriteChunk, 20)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamWriteChunk(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamWriteChunk(_this->linux_side, writeHandle, pvData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamClose, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamClose(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, UGCFileWriteStreamHandle_t writeHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamClose(_this->linux_side, writeHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamCancel, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamCancel(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, UGCFileWriteStreamHandle_t writeHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamCancel(_this->linux_side, writeHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileExists, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileExists(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileExists(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FilePersisted, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FilePersisted(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FilePersisted(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileSize, 8)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileSize(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileTimestamp, 8)
+int64 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileTimestamp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileTimestamp(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetSyncPlatforms, 8)
+ERemoteStoragePlatform __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetSyncPlatforms(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetSyncPlatforms(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileNameAndSize, 12)
+const char * __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileNameAndSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, int iFile, int32 * pnFileSizeInBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileNameAndSize(_this->linux_side, iFile, pnFileSizeInBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetQuota, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetQuota(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, int32 * pnTotalBytes, int32 * puAvailableBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetQuota(_this->linux_side, pnTotalBytes, puAvailableBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_IsCloudEnabledForAccount, 4)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_IsCloudEnabledForAccount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_IsCloudEnabledForAccount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_IsCloudEnabledForApp, 4)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_IsCloudEnabledForApp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_IsCloudEnabledForApp(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SetCloudEnabledForApp, 5)
+void __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SetCloudEnabledForApp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, bool bEnabled)
+{
+ TRACE("%p\n", _this);
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SetCloudEnabledForApp(_this->linux_side, bEnabled);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UGCDownload, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UGCDownload(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, UGCHandle_t hContent, uint32 unPriority)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UGCDownload(_this->linux_side, hContent, unPriority);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetUGCDownloadProgress, 20)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetUGCDownloadProgress(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetUGCDownloadProgress(_this->linux_side, hContent, pnBytesDownloaded, pnBytesExpected);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetUGCDetails, 28)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetUGCDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, CSteamID * pSteamIDOwner)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetUGCDetails(_this->linux_side, hContent, pnAppID, ppchName, pnFileSizeInBytes, pSteamIDOwner);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UGCRead, 28)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UGCRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UGCRead(_this->linux_side, hContent, pvData, cubDataToRead, cOffset, eAction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetCachedUGCCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetCachedUGCCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetCachedUGCCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetCachedUGCHandle, 8)
+UGCHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetCachedUGCHandle(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, int32 iCachedContent)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetCachedUGCHandle(_this->linux_side, iCachedContent);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_PublishWorkshopFile, 36)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_PublishWorkshopFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_PublishWorkshopFile(_this->linux_side, pchFile, pchPreviewFile, nConsumerAppId, pchTitle, pchDescription, eVisibility, pTags, eWorkshopFileType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_CreatePublishedFileUpdateRequest, 12)
+PublishedFileUpdateHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_CreatePublishedFileUpdateRequest(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_CreatePublishedFileUpdateRequest(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileFile, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileFile(_this->linux_side, updateHandle, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFilePreviewFile, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFilePreviewFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFilePreviewFile(_this->linux_side, updateHandle, pchPreviewFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileTitle, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileTitle(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileTitle(_this->linux_side, updateHandle, pchTitle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileDescription, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileDescription(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileDescription(_this->linux_side, updateHandle, pchDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileVisibility, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileVisibility(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileVisibility(_this->linux_side, updateHandle, eVisibility);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileTags, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileTags(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileTags(_this->linux_side, updateHandle, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_CommitPublishedFileUpdate, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_CommitPublishedFileUpdate(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, PublishedFileUpdateHandle_t updateHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_CommitPublishedFileUpdate(_this->linux_side, updateHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetPublishedFileDetails, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetPublishedFileDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetPublishedFileDetails(_this->linux_side, unPublishedFileId, unMaxSecondsOld);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_DeletePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_DeletePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_DeletePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumerateUserPublishedFiles, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumerateUserPublishedFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumerateUserPublishedFiles(_this->linux_side, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SubscribePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SubscribePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SubscribePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumerateUserSubscribedFiles, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumerateUserSubscribedFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumerateUserSubscribedFiles(_this->linux_side, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UnsubscribePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UnsubscribePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UnsubscribePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileSetChangeDescription, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileSetChangeDescription(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileSetChangeDescription(_this->linux_side, updateHandle, pchChangeDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetPublishedItemVoteDetails, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetPublishedItemVoteDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetPublishedItemVoteDetails(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdateUserPublishedItemVote, 13)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdateUserPublishedItemVote(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, PublishedFileId_t unPublishedFileId, bool bVoteUp)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdateUserPublishedItemVote(_this->linux_side, unPublishedFileId, bVoteUp);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetUserPublishedItemVoteDetails, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetUserPublishedItemVoteDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetUserPublishedItemVoteDetails(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumerateUserSharedWorkshopFiles, 24)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumerateUserSharedWorkshopFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t * pRequiredTags, SteamParamStringArray_t * pExcludedTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumerateUserSharedWorkshopFiles(_this->linux_side, steamId, unStartIndex, pRequiredTags, pExcludedTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_PublishVideo, 40)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_PublishVideo(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_PublishVideo(_this->linux_side, eVideoProvider, pchVideoAccount, pchVideoIdentifier, pchPreviewFile, nConsumerAppId, pchTitle, pchDescription, eVisibility, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SetUserPublishedFileAction, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SetUserPublishedFileAction(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SetUserPublishedFileAction(_this->linux_side, unPublishedFileId, eAction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumeratePublishedFilesByUserAction, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumeratePublishedFilesByUserAction(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, EWorkshopFileAction eAction, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumeratePublishedFilesByUserAction(_this->linux_side, eAction, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumeratePublishedWorkshopFiles, 28)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumeratePublishedWorkshopFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t * pTags, SteamParamStringArray_t * pUserTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumeratePublishedWorkshopFiles(_this->linux_side, eEnumerationType, unStartIndex, unCount, unDays, pTags, pUserTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UGCDownloadToLocation, 20)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UGCDownloadToLocation(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *_this, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UGCDownloadToLocation(_this->linux_side, hContent, pchLocation, unPriority);
+}
+
+extern vtable_ptr winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012,
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWrite)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileForget)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileDelete)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileShare)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SetSyncPlatforms)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamOpen)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamWriteChunk)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamClose)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileWriteStreamCancel)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FileExists)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_FilePersisted)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileTimestamp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetSyncPlatforms)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetFileNameAndSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetQuota)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_IsCloudEnabledForAccount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_IsCloudEnabledForApp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SetCloudEnabledForApp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UGCDownload)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetUGCDownloadProgress)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetUGCDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UGCRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetCachedUGCCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetCachedUGCHandle)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_PublishWorkshopFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_CreatePublishedFileUpdateRequest)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFilePreviewFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileTitle)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileDescription)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileVisibility)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileTags)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_CommitPublishedFileUpdate)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetPublishedFileDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_DeletePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumerateUserPublishedFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SubscribePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumerateUserSubscribedFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UnsubscribePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdatePublishedFileSetChangeDescription)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetPublishedItemVoteDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UpdateUserPublishedItemVote)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_GetUserPublishedItemVoteDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumerateUserSharedWorkshopFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_PublishVideo)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_SetUserPublishedFileAction)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumeratePublishedFilesByUserAction)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_EnumeratePublishedWorkshopFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_UGCDownloadToLocation)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012(void *linux_side)
+{
+ winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011.h"
+
+typedef struct __winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011;
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWrite, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWrite(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, const char * pchFile, const void * pvData, int32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWrite(_this->linux_side, pchFile, pvData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileRead, 16)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileRead(_this->linux_side, pchFile, pvData, cubDataToRead);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileForget, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileForget(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileForget(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileDelete, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileDelete(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileDelete(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileShare, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileShare(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileShare(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SetSyncPlatforms, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SetSyncPlatforms(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SetSyncPlatforms(_this->linux_side, pchFile, eRemoteStoragePlatform);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamOpen, 8)
+UGCFileWriteStreamHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamOpen(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamOpen(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamWriteChunk, 20)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamWriteChunk(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamWriteChunk(_this->linux_side, writeHandle, pvData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamClose, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamClose(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, UGCFileWriteStreamHandle_t writeHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamClose(_this->linux_side, writeHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamCancel, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamCancel(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, UGCFileWriteStreamHandle_t writeHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamCancel(_this->linux_side, writeHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileExists, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileExists(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileExists(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FilePersisted, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FilePersisted(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FilePersisted(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileSize, 8)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileSize(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileTimestamp, 8)
+int64 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileTimestamp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileTimestamp(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetSyncPlatforms, 8)
+ERemoteStoragePlatform __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetSyncPlatforms(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetSyncPlatforms(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileNameAndSize, 12)
+const char * __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileNameAndSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, int iFile, int32 * pnFileSizeInBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileNameAndSize(_this->linux_side, iFile, pnFileSizeInBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetQuota, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetQuota(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, int32 * pnTotalBytes, int32 * puAvailableBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetQuota(_this->linux_side, pnTotalBytes, puAvailableBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_IsCloudEnabledForAccount, 4)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_IsCloudEnabledForAccount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_IsCloudEnabledForAccount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_IsCloudEnabledForApp, 4)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_IsCloudEnabledForApp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_IsCloudEnabledForApp(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SetCloudEnabledForApp, 5)
+void __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SetCloudEnabledForApp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, bool bEnabled)
+{
+ TRACE("%p\n", _this);
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SetCloudEnabledForApp(_this->linux_side, bEnabled);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UGCDownload, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UGCDownload(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, UGCHandle_t hContent, uint32 unPriority)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UGCDownload(_this->linux_side, hContent, unPriority);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetUGCDownloadProgress, 20)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetUGCDownloadProgress(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetUGCDownloadProgress(_this->linux_side, hContent, pnBytesDownloaded, pnBytesExpected);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetUGCDetails, 28)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetUGCDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, CSteamID * pSteamIDOwner)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetUGCDetails(_this->linux_side, hContent, pnAppID, ppchName, pnFileSizeInBytes, pSteamIDOwner);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UGCRead, 24)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UGCRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UGCRead(_this->linux_side, hContent, pvData, cubDataToRead, cOffset);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetCachedUGCCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetCachedUGCCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetCachedUGCCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetCachedUGCHandle, 8)
+UGCHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetCachedUGCHandle(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, int32 iCachedContent)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetCachedUGCHandle(_this->linux_side, iCachedContent);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_PublishWorkshopFile, 36)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_PublishWorkshopFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_PublishWorkshopFile(_this->linux_side, pchFile, pchPreviewFile, nConsumerAppId, pchTitle, pchDescription, eVisibility, pTags, eWorkshopFileType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_CreatePublishedFileUpdateRequest, 12)
+PublishedFileUpdateHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_CreatePublishedFileUpdateRequest(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_CreatePublishedFileUpdateRequest(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileFile, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileFile(_this->linux_side, updateHandle, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFilePreviewFile, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFilePreviewFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFilePreviewFile(_this->linux_side, updateHandle, pchPreviewFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileTitle, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileTitle(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileTitle(_this->linux_side, updateHandle, pchTitle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileDescription, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileDescription(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileDescription(_this->linux_side, updateHandle, pchDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileVisibility, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileVisibility(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileVisibility(_this->linux_side, updateHandle, eVisibility);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileTags, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileTags(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileTags(_this->linux_side, updateHandle, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_CommitPublishedFileUpdate, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_CommitPublishedFileUpdate(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, PublishedFileUpdateHandle_t updateHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_CommitPublishedFileUpdate(_this->linux_side, updateHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetPublishedFileDetails, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetPublishedFileDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetPublishedFileDetails(_this->linux_side, unPublishedFileId, unMaxSecondsOld);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_DeletePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_DeletePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_DeletePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumerateUserPublishedFiles, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumerateUserPublishedFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumerateUserPublishedFiles(_this->linux_side, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SubscribePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SubscribePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SubscribePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumerateUserSubscribedFiles, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumerateUserSubscribedFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumerateUserSubscribedFiles(_this->linux_side, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UnsubscribePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UnsubscribePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UnsubscribePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileSetChangeDescription, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileSetChangeDescription(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileSetChangeDescription(_this->linux_side, updateHandle, pchChangeDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetPublishedItemVoteDetails, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetPublishedItemVoteDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetPublishedItemVoteDetails(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdateUserPublishedItemVote, 13)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdateUserPublishedItemVote(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, PublishedFileId_t unPublishedFileId, bool bVoteUp)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdateUserPublishedItemVote(_this->linux_side, unPublishedFileId, bVoteUp);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetUserPublishedItemVoteDetails, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetUserPublishedItemVoteDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetUserPublishedItemVoteDetails(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumerateUserSharedWorkshopFiles, 24)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumerateUserSharedWorkshopFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t * pRequiredTags, SteamParamStringArray_t * pExcludedTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumerateUserSharedWorkshopFiles(_this->linux_side, steamId, unStartIndex, pRequiredTags, pExcludedTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_PublishVideo, 40)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_PublishVideo(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_PublishVideo(_this->linux_side, eVideoProvider, pchVideoAccount, pchVideoIdentifier, pchPreviewFile, nConsumerAppId, pchTitle, pchDescription, eVisibility, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SetUserPublishedFileAction, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SetUserPublishedFileAction(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SetUserPublishedFileAction(_this->linux_side, unPublishedFileId, eAction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumeratePublishedFilesByUserAction, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumeratePublishedFilesByUserAction(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, EWorkshopFileAction eAction, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumeratePublishedFilesByUserAction(_this->linux_side, eAction, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumeratePublishedWorkshopFiles, 28)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumeratePublishedWorkshopFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t * pTags, SteamParamStringArray_t * pUserTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumeratePublishedWorkshopFiles(_this->linux_side, eEnumerationType, unStartIndex, unCount, unDays, pTags, pUserTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UGCDownloadToLocation, 20)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UGCDownloadToLocation(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *_this, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UGCDownloadToLocation(_this->linux_side, hContent, pchLocation, unPriority);
+}
+
+extern vtable_ptr winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011,
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWrite)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileForget)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileDelete)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileShare)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SetSyncPlatforms)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamOpen)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamWriteChunk)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamClose)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileWriteStreamCancel)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FileExists)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_FilePersisted)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileTimestamp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetSyncPlatforms)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetFileNameAndSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetQuota)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_IsCloudEnabledForAccount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_IsCloudEnabledForApp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SetCloudEnabledForApp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UGCDownload)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetUGCDownloadProgress)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetUGCDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UGCRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetCachedUGCCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetCachedUGCHandle)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_PublishWorkshopFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_CreatePublishedFileUpdateRequest)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFilePreviewFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileTitle)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileDescription)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileVisibility)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileTags)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_CommitPublishedFileUpdate)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetPublishedFileDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_DeletePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumerateUserPublishedFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SubscribePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumerateUserSubscribedFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UnsubscribePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdatePublishedFileSetChangeDescription)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetPublishedItemVoteDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UpdateUserPublishedItemVote)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_GetUserPublishedItemVoteDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumerateUserSharedWorkshopFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_PublishVideo)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_SetUserPublishedFileAction)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumeratePublishedFilesByUserAction)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_EnumeratePublishedWorkshopFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_UGCDownloadToLocation)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011(void *linux_side)
+{
+ winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010.h"
+
+typedef struct __winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010;
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWrite, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWrite(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, const char * pchFile, const void * pvData, int32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWrite(_this->linux_side, pchFile, pvData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileRead, 16)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileRead(_this->linux_side, pchFile, pvData, cubDataToRead);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileForget, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileForget(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileForget(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileDelete, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileDelete(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileDelete(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileShare, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileShare(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileShare(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SetSyncPlatforms, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SetSyncPlatforms(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SetSyncPlatforms(_this->linux_side, pchFile, eRemoteStoragePlatform);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamOpen, 8)
+UGCFileWriteStreamHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamOpen(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamOpen(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamWriteChunk, 20)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamWriteChunk(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamWriteChunk(_this->linux_side, writeHandle, pvData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamClose, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamClose(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, UGCFileWriteStreamHandle_t writeHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamClose(_this->linux_side, writeHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamCancel, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamCancel(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, UGCFileWriteStreamHandle_t writeHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamCancel(_this->linux_side, writeHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileExists, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileExists(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileExists(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FilePersisted, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FilePersisted(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FilePersisted(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileSize, 8)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileSize(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileTimestamp, 8)
+int64 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileTimestamp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileTimestamp(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetSyncPlatforms, 8)
+ERemoteStoragePlatform __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetSyncPlatforms(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetSyncPlatforms(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileNameAndSize, 12)
+const char * __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileNameAndSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, int iFile, int32 * pnFileSizeInBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileNameAndSize(_this->linux_side, iFile, pnFileSizeInBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetQuota, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetQuota(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, int32 * pnTotalBytes, int32 * puAvailableBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetQuota(_this->linux_side, pnTotalBytes, puAvailableBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_IsCloudEnabledForAccount, 4)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_IsCloudEnabledForAccount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_IsCloudEnabledForAccount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_IsCloudEnabledForApp, 4)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_IsCloudEnabledForApp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_IsCloudEnabledForApp(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SetCloudEnabledForApp, 5)
+void __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SetCloudEnabledForApp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, bool bEnabled)
+{
+ TRACE("%p\n", _this);
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SetCloudEnabledForApp(_this->linux_side, bEnabled);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UGCDownload, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UGCDownload(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, UGCHandle_t hContent, uint32 unPriority)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UGCDownload(_this->linux_side, hContent, unPriority);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetUGCDownloadProgress, 20)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetUGCDownloadProgress(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetUGCDownloadProgress(_this->linux_side, hContent, pnBytesDownloaded, pnBytesExpected);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetUGCDetails, 28)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetUGCDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, CSteamID * pSteamIDOwner)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetUGCDetails(_this->linux_side, hContent, pnAppID, ppchName, pnFileSizeInBytes, pSteamIDOwner);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UGCRead, 24)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UGCRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, UGCHandle_t hContent, void * pvData, int32 cubDataToRead, uint32 cOffset)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UGCRead(_this->linux_side, hContent, pvData, cubDataToRead, cOffset);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetCachedUGCCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetCachedUGCCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetCachedUGCCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetCachedUGCHandle, 8)
+UGCHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetCachedUGCHandle(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, int32 iCachedContent)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetCachedUGCHandle(_this->linux_side, iCachedContent);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_PublishWorkshopFile, 36)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_PublishWorkshopFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_PublishWorkshopFile(_this->linux_side, pchFile, pchPreviewFile, nConsumerAppId, pchTitle, pchDescription, eVisibility, pTags, eWorkshopFileType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_CreatePublishedFileUpdateRequest, 12)
+PublishedFileUpdateHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_CreatePublishedFileUpdateRequest(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_CreatePublishedFileUpdateRequest(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileFile, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileFile(_this->linux_side, updateHandle, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFilePreviewFile, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFilePreviewFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFilePreviewFile(_this->linux_side, updateHandle, pchPreviewFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileTitle, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileTitle(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileTitle(_this->linux_side, updateHandle, pchTitle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileDescription, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileDescription(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileDescription(_this->linux_side, updateHandle, pchDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileVisibility, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileVisibility(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileVisibility(_this->linux_side, updateHandle, eVisibility);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileTags, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileTags(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileTags(_this->linux_side, updateHandle, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_CommitPublishedFileUpdate, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_CommitPublishedFileUpdate(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, PublishedFileUpdateHandle_t updateHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_CommitPublishedFileUpdate(_this->linux_side, updateHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetPublishedFileDetails, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetPublishedFileDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetPublishedFileDetails(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_DeletePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_DeletePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_DeletePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumerateUserPublishedFiles, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumerateUserPublishedFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumerateUserPublishedFiles(_this->linux_side, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SubscribePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SubscribePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SubscribePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumerateUserSubscribedFiles, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumerateUserSubscribedFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumerateUserSubscribedFiles(_this->linux_side, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UnsubscribePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UnsubscribePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UnsubscribePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileSetChangeDescription, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileSetChangeDescription(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileSetChangeDescription(_this->linux_side, updateHandle, pchChangeDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetPublishedItemVoteDetails, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetPublishedItemVoteDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetPublishedItemVoteDetails(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdateUserPublishedItemVote, 13)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdateUserPublishedItemVote(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, PublishedFileId_t unPublishedFileId, bool bVoteUp)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdateUserPublishedItemVote(_this->linux_side, unPublishedFileId, bVoteUp);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetUserPublishedItemVoteDetails, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetUserPublishedItemVoteDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetUserPublishedItemVoteDetails(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumerateUserSharedWorkshopFiles, 24)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumerateUserSharedWorkshopFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t * pRequiredTags, SteamParamStringArray_t * pExcludedTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumerateUserSharedWorkshopFiles(_this->linux_side, steamId, unStartIndex, pRequiredTags, pExcludedTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_PublishVideo, 40)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_PublishVideo(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_PublishVideo(_this->linux_side, eVideoProvider, pchVideoAccount, pchVideoIdentifier, pchPreviewFile, nConsumerAppId, pchTitle, pchDescription, eVisibility, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SetUserPublishedFileAction, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SetUserPublishedFileAction(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SetUserPublishedFileAction(_this->linux_side, unPublishedFileId, eAction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumeratePublishedFilesByUserAction, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumeratePublishedFilesByUserAction(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, EWorkshopFileAction eAction, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumeratePublishedFilesByUserAction(_this->linux_side, eAction, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumeratePublishedWorkshopFiles, 28)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumeratePublishedWorkshopFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t * pTags, SteamParamStringArray_t * pUserTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumeratePublishedWorkshopFiles(_this->linux_side, eEnumerationType, unStartIndex, unCount, unDays, pTags, pUserTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UGCDownloadToLocation, 20)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UGCDownloadToLocation(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *_this, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UGCDownloadToLocation(_this->linux_side, hContent, pchLocation, unPriority);
+}
+
+extern vtable_ptr winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010,
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWrite)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileForget)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileDelete)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileShare)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SetSyncPlatforms)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamOpen)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamWriteChunk)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamClose)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileWriteStreamCancel)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FileExists)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_FilePersisted)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileTimestamp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetSyncPlatforms)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetFileNameAndSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetQuota)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_IsCloudEnabledForAccount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_IsCloudEnabledForApp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SetCloudEnabledForApp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UGCDownload)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetUGCDownloadProgress)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetUGCDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UGCRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetCachedUGCCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetCachedUGCHandle)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_PublishWorkshopFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_CreatePublishedFileUpdateRequest)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFilePreviewFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileTitle)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileDescription)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileVisibility)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileTags)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_CommitPublishedFileUpdate)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetPublishedFileDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_DeletePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumerateUserPublishedFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SubscribePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumerateUserSubscribedFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UnsubscribePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdatePublishedFileSetChangeDescription)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetPublishedItemVoteDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UpdateUserPublishedItemVote)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_GetUserPublishedItemVoteDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumerateUserSharedWorkshopFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_PublishVideo)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_SetUserPublishedFileAction)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumeratePublishedFilesByUserAction)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_EnumeratePublishedWorkshopFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_UGCDownloadToLocation)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010(void *linux_side)
+{
+ winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008.h"
+
+typedef struct __winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008;
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWrite, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWrite(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, const char * pchFile, const void * pvData, int32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWrite(_this->linux_side, pchFile, pvData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileRead, 16)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileRead(_this->linux_side, pchFile, pvData, cubDataToRead);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileForget, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileForget(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileForget(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileDelete, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileDelete(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileDelete(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileShare, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileShare(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileShare(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SetSyncPlatforms, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SetSyncPlatforms(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SetSyncPlatforms(_this->linux_side, pchFile, eRemoteStoragePlatform);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamOpen, 8)
+UGCFileWriteStreamHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamOpen(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamOpen(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamWriteChunk, 20)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamWriteChunk(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, UGCFileWriteStreamHandle_t writeHandle, const void * pvData, int32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamWriteChunk(_this->linux_side, writeHandle, pvData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamClose, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamClose(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, UGCFileWriteStreamHandle_t writeHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamClose(_this->linux_side, writeHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamCancel, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamCancel(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, UGCFileWriteStreamHandle_t writeHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamCancel(_this->linux_side, writeHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileExists, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileExists(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileExists(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FilePersisted, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FilePersisted(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FilePersisted(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileSize, 8)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileSize(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileTimestamp, 8)
+int64 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileTimestamp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileTimestamp(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetSyncPlatforms, 8)
+ERemoteStoragePlatform __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetSyncPlatforms(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetSyncPlatforms(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileNameAndSize, 12)
+const char * __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileNameAndSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, int iFile, int32 * pnFileSizeInBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileNameAndSize(_this->linux_side, iFile, pnFileSizeInBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetQuota, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetQuota(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, int32 * pnTotalBytes, int32 * puAvailableBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetQuota(_this->linux_side, pnTotalBytes, puAvailableBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_IsCloudEnabledForAccount, 4)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_IsCloudEnabledForAccount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_IsCloudEnabledForAccount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_IsCloudEnabledForApp, 4)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_IsCloudEnabledForApp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_IsCloudEnabledForApp(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SetCloudEnabledForApp, 5)
+void __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SetCloudEnabledForApp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, bool bEnabled)
+{
+ TRACE("%p\n", _this);
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SetCloudEnabledForApp(_this->linux_side, bEnabled);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UGCDownload, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UGCDownload(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, UGCHandle_t hContent)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UGCDownload(_this->linux_side, hContent);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetUGCDownloadProgress, 20)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetUGCDownloadProgress(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetUGCDownloadProgress(_this->linux_side, hContent, pnBytesDownloaded, pnBytesExpected);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetUGCDetails, 28)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetUGCDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, CSteamID * pSteamIDOwner)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetUGCDetails(_this->linux_side, hContent, pnAppID, ppchName, pnFileSizeInBytes, pSteamIDOwner);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UGCRead, 20)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UGCRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, UGCHandle_t hContent, void * pvData, int32 cubDataToRead)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UGCRead(_this->linux_side, hContent, pvData, cubDataToRead);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetCachedUGCCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetCachedUGCCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetCachedUGCCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetCachedUGCHandle, 8)
+UGCHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetCachedUGCHandle(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, int32 iCachedContent)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetCachedUGCHandle(_this->linux_side, iCachedContent);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_PublishWorkshopFile, 36)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_PublishWorkshopFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_PublishWorkshopFile(_this->linux_side, pchFile, pchPreviewFile, nConsumerAppId, pchTitle, pchDescription, eVisibility, pTags, eWorkshopFileType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_CreatePublishedFileUpdateRequest, 12)
+PublishedFileUpdateHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_CreatePublishedFileUpdateRequest(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_CreatePublishedFileUpdateRequest(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileFile, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileFile(_this->linux_side, updateHandle, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFilePreviewFile, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFilePreviewFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFilePreviewFile(_this->linux_side, updateHandle, pchPreviewFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileTitle, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileTitle(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileTitle(_this->linux_side, updateHandle, pchTitle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileDescription, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileDescription(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileDescription(_this->linux_side, updateHandle, pchDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileVisibility, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileVisibility(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileVisibility(_this->linux_side, updateHandle, eVisibility);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileTags, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileTags(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileTags(_this->linux_side, updateHandle, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_CommitPublishedFileUpdate, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_CommitPublishedFileUpdate(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, PublishedFileUpdateHandle_t updateHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_CommitPublishedFileUpdate(_this->linux_side, updateHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetPublishedFileDetails, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetPublishedFileDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetPublishedFileDetails(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_DeletePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_DeletePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_DeletePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumerateUserPublishedFiles, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumerateUserPublishedFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumerateUserPublishedFiles(_this->linux_side, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SubscribePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SubscribePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SubscribePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumerateUserSubscribedFiles, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumerateUserSubscribedFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumerateUserSubscribedFiles(_this->linux_side, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UnsubscribePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UnsubscribePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UnsubscribePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileSetChangeDescription, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileSetChangeDescription(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileSetChangeDescription(_this->linux_side, updateHandle, pchChangeDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetPublishedItemVoteDetails, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetPublishedItemVoteDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetPublishedItemVoteDetails(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdateUserPublishedItemVote, 13)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdateUserPublishedItemVote(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, PublishedFileId_t unPublishedFileId, bool bVoteUp)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdateUserPublishedItemVote(_this->linux_side, unPublishedFileId, bVoteUp);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetUserPublishedItemVoteDetails, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetUserPublishedItemVoteDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetUserPublishedItemVoteDetails(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumerateUserSharedWorkshopFiles, 24)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumerateUserSharedWorkshopFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t * pRequiredTags, SteamParamStringArray_t * pExcludedTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumerateUserSharedWorkshopFiles(_this->linux_side, steamId, unStartIndex, pRequiredTags, pExcludedTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_PublishVideo, 40)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_PublishVideo(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, EWorkshopVideoProvider eVideoProvider, const char * pchVideoAccount, const char * pchVideoIdentifier, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_PublishVideo(_this->linux_side, eVideoProvider, pchVideoAccount, pchVideoIdentifier, pchPreviewFile, nConsumerAppId, pchTitle, pchDescription, eVisibility, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SetUserPublishedFileAction, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SetUserPublishedFileAction(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SetUserPublishedFileAction(_this->linux_side, unPublishedFileId, eAction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumeratePublishedFilesByUserAction, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumeratePublishedFilesByUserAction(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, EWorkshopFileAction eAction, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumeratePublishedFilesByUserAction(_this->linux_side, eAction, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumeratePublishedWorkshopFiles, 28)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumeratePublishedWorkshopFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *_this, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t * pTags, SteamParamStringArray_t * pUserTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumeratePublishedWorkshopFiles(_this->linux_side, eEnumerationType, unStartIndex, unCount, unDays, pTags, pUserTags);
+}
+
+extern vtable_ptr winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008,
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWrite)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileForget)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileDelete)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileShare)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SetSyncPlatforms)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamOpen)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamWriteChunk)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamClose)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileWriteStreamCancel)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FileExists)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_FilePersisted)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileTimestamp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetSyncPlatforms)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetFileNameAndSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetQuota)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_IsCloudEnabledForAccount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_IsCloudEnabledForApp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SetCloudEnabledForApp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UGCDownload)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetUGCDownloadProgress)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetUGCDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UGCRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetCachedUGCCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetCachedUGCHandle)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_PublishWorkshopFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_CreatePublishedFileUpdateRequest)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFilePreviewFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileTitle)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileDescription)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileVisibility)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileTags)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_CommitPublishedFileUpdate)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetPublishedFileDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_DeletePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumerateUserPublishedFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SubscribePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumerateUserSubscribedFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UnsubscribePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdatePublishedFileSetChangeDescription)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetPublishedItemVoteDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_UpdateUserPublishedItemVote)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_GetUserPublishedItemVoteDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumerateUserSharedWorkshopFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_PublishVideo)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_SetUserPublishedFileAction)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumeratePublishedFilesByUserAction)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_EnumeratePublishedWorkshopFiles)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008(void *linux_side)
+{
+ winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006.h"
+
+typedef struct __winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006;
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileWrite, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileWrite(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, const char * pchFile, const void * pvData, int32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileWrite(_this->linux_side, pchFile, pvData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileRead, 16)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileRead(_this->linux_side, pchFile, pvData, cubDataToRead);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileForget, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileForget(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileForget(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileDelete, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileDelete(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileDelete(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileShare, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileShare(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileShare(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SetSyncPlatforms, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SetSyncPlatforms(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SetSyncPlatforms(_this->linux_side, pchFile, eRemoteStoragePlatform);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileExists, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileExists(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileExists(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FilePersisted, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FilePersisted(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FilePersisted(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileSize, 8)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileSize(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileTimestamp, 8)
+int64 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileTimestamp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileTimestamp(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetSyncPlatforms, 8)
+ERemoteStoragePlatform __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetSyncPlatforms(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetSyncPlatforms(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileNameAndSize, 12)
+const char * __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileNameAndSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, int iFile, int32 * pnFileSizeInBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileNameAndSize(_this->linux_side, iFile, pnFileSizeInBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetQuota, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetQuota(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, int32 * pnTotalBytes, int32 * puAvailableBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetQuota(_this->linux_side, pnTotalBytes, puAvailableBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_IsCloudEnabledForAccount, 4)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_IsCloudEnabledForAccount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_IsCloudEnabledForAccount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_IsCloudEnabledForApp, 4)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_IsCloudEnabledForApp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_IsCloudEnabledForApp(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SetCloudEnabledForApp, 5)
+void __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SetCloudEnabledForApp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, bool bEnabled)
+{
+ TRACE("%p\n", _this);
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SetCloudEnabledForApp(_this->linux_side, bEnabled);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UGCDownload, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UGCDownload(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, UGCHandle_t hContent)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UGCDownload(_this->linux_side, hContent);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetUGCDownloadProgress, 20)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetUGCDownloadProgress(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, UGCHandle_t hContent, int32 * pnBytesDownloaded, int32 * pnBytesExpected)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetUGCDownloadProgress(_this->linux_side, hContent, pnBytesDownloaded, pnBytesExpected);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetUGCDetails, 28)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetUGCDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, CSteamID * pSteamIDOwner)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetUGCDetails(_this->linux_side, hContent, pnAppID, ppchName, pnFileSizeInBytes, pSteamIDOwner);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UGCRead, 20)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UGCRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, UGCHandle_t hContent, void * pvData, int32 cubDataToRead)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UGCRead(_this->linux_side, hContent, pvData, cubDataToRead);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetCachedUGCCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetCachedUGCCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetCachedUGCCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetCachedUGCHandle, 8)
+UGCHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetCachedUGCHandle(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, int32 iCachedContent)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetCachedUGCHandle(_this->linux_side, iCachedContent);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_PublishWorkshopFile, 36)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_PublishWorkshopFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags, EWorkshopFileType eWorkshopFileType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_PublishWorkshopFile(_this->linux_side, pchFile, pchPreviewFile, nConsumerAppId, pchTitle, pchDescription, eVisibility, pTags, eWorkshopFileType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_CreatePublishedFileUpdateRequest, 12)
+PublishedFileUpdateHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_CreatePublishedFileUpdateRequest(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_CreatePublishedFileUpdateRequest(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileFile, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileFile(_this->linux_side, updateHandle, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFilePreviewFile, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFilePreviewFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchPreviewFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFilePreviewFile(_this->linux_side, updateHandle, pchPreviewFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileTitle, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileTitle(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchTitle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileTitle(_this->linux_side, updateHandle, pchTitle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileDescription, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileDescription(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileDescription(_this->linux_side, updateHandle, pchDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileVisibility, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileVisibility(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileVisibility(_this->linux_side, updateHandle, eVisibility);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileTags, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileTags(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileTags(_this->linux_side, updateHandle, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_CommitPublishedFileUpdate, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_CommitPublishedFileUpdate(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, PublishedFileUpdateHandle_t updateHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_CommitPublishedFileUpdate(_this->linux_side, updateHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetPublishedFileDetails, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetPublishedFileDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetPublishedFileDetails(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_DeletePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_DeletePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_DeletePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumerateUserPublishedFiles, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumerateUserPublishedFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumerateUserPublishedFiles(_this->linux_side, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SubscribePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SubscribePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SubscribePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumerateUserSubscribedFiles, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumerateUserSubscribedFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumerateUserSubscribedFiles(_this->linux_side, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UnsubscribePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UnsubscribePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UnsubscribePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileSetChangeDescription, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileSetChangeDescription(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, PublishedFileUpdateHandle_t updateHandle, const char * pchChangeDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileSetChangeDescription(_this->linux_side, updateHandle, pchChangeDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetPublishedItemVoteDetails, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetPublishedItemVoteDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetPublishedItemVoteDetails(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdateUserPublishedItemVote, 13)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdateUserPublishedItemVote(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, PublishedFileId_t unPublishedFileId, bool bVoteUp)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdateUserPublishedItemVote(_this->linux_side, unPublishedFileId, bVoteUp);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetUserPublishedItemVoteDetails, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetUserPublishedItemVoteDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetUserPublishedItemVoteDetails(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumerateUserSharedWorkshopFiles, 24)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumerateUserSharedWorkshopFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t * pRequiredTags, SteamParamStringArray_t * pExcludedTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumerateUserSharedWorkshopFiles(_this->linux_side, steamId, unStartIndex, pRequiredTags, pExcludedTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_PublishVideo, 32)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_PublishVideo(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, const char * pchVideoURL, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_PublishVideo(_this->linux_side, pchVideoURL, pchPreviewFile, nConsumerAppId, pchTitle, pchDescription, eVisibility, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SetUserPublishedFileAction, 16)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SetUserPublishedFileAction(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SetUserPublishedFileAction(_this->linux_side, unPublishedFileId, eAction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumeratePublishedFilesByUserAction, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumeratePublishedFilesByUserAction(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, EWorkshopFileAction eAction, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumeratePublishedFilesByUserAction(_this->linux_side, eAction, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumeratePublishedWorkshopFiles, 28)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumeratePublishedWorkshopFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *_this, EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t * pTags, SteamParamStringArray_t * pUserTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumeratePublishedWorkshopFiles(_this->linux_side, eEnumerationType, unStartIndex, unCount, unDays, pTags, pUserTags);
+}
+
+extern vtable_ptr winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006,
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileWrite)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileForget)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileDelete)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileShare)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SetSyncPlatforms)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FileExists)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_FilePersisted)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileTimestamp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetSyncPlatforms)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetFileNameAndSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetQuota)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_IsCloudEnabledForAccount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_IsCloudEnabledForApp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SetCloudEnabledForApp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UGCDownload)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetUGCDownloadProgress)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetUGCDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UGCRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetCachedUGCCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetCachedUGCHandle)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_PublishWorkshopFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_CreatePublishedFileUpdateRequest)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFilePreviewFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileTitle)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileDescription)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileVisibility)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileTags)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_CommitPublishedFileUpdate)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetPublishedFileDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_DeletePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumerateUserPublishedFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SubscribePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumerateUserSubscribedFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UnsubscribePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdatePublishedFileSetChangeDescription)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetPublishedItemVoteDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_UpdateUserPublishedItemVote)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_GetUserPublishedItemVoteDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumerateUserSharedWorkshopFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_PublishVideo)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_SetUserPublishedFileAction)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumeratePublishedFilesByUserAction)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_EnumeratePublishedWorkshopFiles)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006(void *linux_side)
+{
+ winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005.h"
+
+typedef struct __winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005;
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileWrite, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileWrite(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, const char * pchFile, const void * pvData, int32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileWrite(_this->linux_side, pchFile, pvData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileRead, 16)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileRead(_this->linux_side, pchFile, pvData, cubDataToRead);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileForget, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileForget(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileForget(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileDelete, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileDelete(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileDelete(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileShare, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileShare(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileShare(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_SetSyncPlatforms, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_SetSyncPlatforms(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_SetSyncPlatforms(_this->linux_side, pchFile, eRemoteStoragePlatform);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileExists, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileExists(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileExists(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FilePersisted, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FilePersisted(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FilePersisted(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileSize, 8)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileSize(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileTimestamp, 8)
+int64 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileTimestamp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileTimestamp(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetSyncPlatforms, 8)
+ERemoteStoragePlatform __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetSyncPlatforms(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetSyncPlatforms(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileNameAndSize, 12)
+const char * __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileNameAndSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, int iFile, int32 * pnFileSizeInBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileNameAndSize(_this->linux_side, iFile, pnFileSizeInBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetQuota, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetQuota(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, int32 * pnTotalBytes, int32 * puAvailableBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetQuota(_this->linux_side, pnTotalBytes, puAvailableBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_IsCloudEnabledForAccount, 4)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_IsCloudEnabledForAccount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_IsCloudEnabledForAccount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_IsCloudEnabledForApp, 4)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_IsCloudEnabledForApp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_IsCloudEnabledForApp(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_SetCloudEnabledForApp, 5)
+void __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_SetCloudEnabledForApp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, bool bEnabled)
+{
+ TRACE("%p\n", _this);
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_SetCloudEnabledForApp(_this->linux_side, bEnabled);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UGCDownload, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UGCDownload(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, UGCHandle_t hContent)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UGCDownload(_this->linux_side, hContent);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetUGCDetails, 28)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetUGCDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, CSteamID * pSteamIDOwner)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetUGCDetails(_this->linux_side, hContent, pnAppID, ppchName, pnFileSizeInBytes, pSteamIDOwner);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UGCRead, 20)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UGCRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, UGCHandle_t hContent, void * pvData, int32 cubDataToRead)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UGCRead(_this->linux_side, hContent, pvData, cubDataToRead);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetCachedUGCCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetCachedUGCCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetCachedUGCCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetCachedUGCHandle, 8)
+UGCHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetCachedUGCHandle(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, int32 iCachedContent)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetCachedUGCHandle(_this->linux_side, iCachedContent);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_PublishFile, 32)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_PublishFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_PublishFile(_this->linux_side, pchFile, pchPreviewFile, nConsumerAppId, pchTitle, pchDescription, eVisibility, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_PublishWorkshopFile, 28)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_PublishWorkshopFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, const char * pchFile, const char * pchPreviewFile, AppId_t nConsumerAppId, const char * pchTitle, const char * pchDescription, SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_PublishWorkshopFile(_this->linux_side, pchFile, pchPreviewFile, nConsumerAppId, pchTitle, pchDescription, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UpdatePublishedFile, 44)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UpdatePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, RemoteStorageUpdatePublishedFileRequest_t updatePublishedFileRequest)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UpdatePublishedFile(_this->linux_side, updatePublishedFileRequest);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetPublishedFileDetails, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetPublishedFileDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetPublishedFileDetails(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_DeletePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_DeletePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_DeletePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_EnumerateUserPublishedFiles, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_EnumerateUserPublishedFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_EnumerateUserPublishedFiles(_this->linux_side, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_SubscribePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_SubscribePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_SubscribePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_EnumerateUserSubscribedFiles, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_EnumerateUserSubscribedFiles(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, uint32 unStartIndex)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_EnumerateUserSubscribedFiles(_this->linux_side, unStartIndex);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UnsubscribePublishedFile, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UnsubscribePublishedFile(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *_this, PublishedFileId_t unPublishedFileId)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UnsubscribePublishedFile(_this->linux_side, unPublishedFileId);
+}
+
+extern vtable_ptr winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005,
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileWrite)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileForget)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileDelete)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileShare)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_SetSyncPlatforms)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FileExists)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_FilePersisted)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileTimestamp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetSyncPlatforms)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetFileNameAndSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetQuota)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_IsCloudEnabledForAccount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_IsCloudEnabledForApp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_SetCloudEnabledForApp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UGCDownload)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetUGCDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UGCRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetCachedUGCCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetCachedUGCHandle)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_PublishFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_PublishWorkshopFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UpdatePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_GetPublishedFileDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_DeletePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_EnumerateUserPublishedFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_SubscribePublishedFile)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_EnumerateUserSubscribedFiles)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_UnsubscribePublishedFile)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005(void *linux_side)
+{
+ winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004.h"
+
+typedef struct __winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004;
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileWrite, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileWrite(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this, const char * pchFile, const void * pvData, int32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileWrite(_this->linux_side, pchFile, pvData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileRead, 16)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileRead(_this->linux_side, pchFile, pvData, cubDataToRead);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileForget, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileForget(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileForget(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileDelete, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileDelete(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileDelete(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileShare, 8)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileShare(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileShare(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_SetSyncPlatforms, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_SetSyncPlatforms(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this, const char * pchFile, ERemoteStoragePlatform eRemoteStoragePlatform)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_SetSyncPlatforms(_this->linux_side, pchFile, eRemoteStoragePlatform);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileExists, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileExists(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileExists(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FilePersisted, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FilePersisted(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FilePersisted(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileSize, 8)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileSize(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileTimestamp, 8)
+int64 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileTimestamp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileTimestamp(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetSyncPlatforms, 8)
+ERemoteStoragePlatform __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetSyncPlatforms(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetSyncPlatforms(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileNameAndSize, 12)
+const char * __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileNameAndSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this, int iFile, int32 * pnFileSizeInBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileNameAndSize(_this->linux_side, iFile, pnFileSizeInBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetQuota, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetQuota(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this, int32 * pnTotalBytes, int32 * puAvailableBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetQuota(_this->linux_side, pnTotalBytes, puAvailableBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_IsCloudEnabledForAccount, 4)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_IsCloudEnabledForAccount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_IsCloudEnabledForAccount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_IsCloudEnabledForApp, 4)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_IsCloudEnabledForApp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_IsCloudEnabledForApp(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_SetCloudEnabledForApp, 5)
+void __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_SetCloudEnabledForApp(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this, bool bEnabled)
+{
+ TRACE("%p\n", _this);
+ cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_SetCloudEnabledForApp(_this->linux_side, bEnabled);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_UGCDownload, 12)
+SteamAPICall_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_UGCDownload(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this, UGCHandle_t hContent)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_UGCDownload(_this->linux_side, hContent);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetUGCDetails, 28)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetUGCDetails(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this, UGCHandle_t hContent, AppId_t * pnAppID, char ** ppchName, int32 * pnFileSizeInBytes, CSteamID * pSteamIDOwner)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetUGCDetails(_this->linux_side, hContent, pnAppID, ppchName, pnFileSizeInBytes, pSteamIDOwner);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_UGCRead, 20)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_UGCRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this, UGCHandle_t hContent, void * pvData, int32 cubDataToRead)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_UGCRead(_this->linux_side, hContent, pvData, cubDataToRead);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetCachedUGCCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetCachedUGCCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetCachedUGCCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetCachedUGCHandle, 8)
+UGCHandle_t __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetCachedUGCHandle(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *_this, int32 iCachedContent)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetCachedUGCHandle(_this->linux_side, iCachedContent);
+}
+
+extern vtable_ptr winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004,
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileWrite)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileForget)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileDelete)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileShare)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_SetSyncPlatforms)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FileExists)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_FilePersisted)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileTimestamp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetSyncPlatforms)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetFileNameAndSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetQuota)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_IsCloudEnabledForAccount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_IsCloudEnabledForApp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_SetCloudEnabledForApp)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_UGCDownload)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetUGCDetails)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_UGCRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetCachedUGCCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_GetCachedUGCHandle)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004(void *linux_side)
+{
+ winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002.h"
+
+typedef struct __winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002;
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_FileWrite, 16)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_FileWrite(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002 *_this, const char * pchFile, const void * pvData, int32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_FileWrite(_this->linux_side, pchFile, pvData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetFileSize, 8)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetFileSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetFileSize(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_FileRead, 16)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_FileRead(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002 *_this, const char * pchFile, void * pvData, int32 cubDataToRead)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_FileRead(_this->linux_side, pchFile, pvData, cubDataToRead);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_FileExists, 8)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_FileExists(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002 *_this, const char * pchFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_FileExists(_this->linux_side, pchFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetFileCount, 4)
+int32 __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetFileCount(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetFileCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetFileNameAndSize, 12)
+const char * __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetFileNameAndSize(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002 *_this, int iFile, int32 * pnFileSizeInBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetFileNameAndSize(_this->linux_side, iFile, pnFileSizeInBytes);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetQuota, 12)
+bool __thiscall winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetQuota(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002 *_this, int32 * pnTotalBytes, int32 * puAvailableBytes)
+{
+ TRACE("%p\n", _this);
+ return cppISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetQuota(_this->linux_side, pnTotalBytes, puAvailableBytes);
+}
+
+extern vtable_ptr winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002,
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_FileWrite)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetFileSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_FileRead)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_FileExists)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetFileCount)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetFileNameAndSize)
+ VTABLE_ADD_FUNC(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_GetQuota)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002 *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002(void *linux_side)
+{
+ winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamScreenshots.c b/lsteamclient/winISteamScreenshots.c
new file mode 100644
index 00000000..5320c476
--- /dev/null
+++ b/lsteamclient/winISteamScreenshots.c
@@ -0,0 +1,276 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003.h"
+
+typedef struct __winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003;
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_WriteScreenshot, 20)
+ScreenshotHandle __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_WriteScreenshot(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003 *_this, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight)
+{
+ TRACE("%p\n", _this);
+ return cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_WriteScreenshot(_this->linux_side, pubRGB, cubRGB, nWidth, nHeight);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_AddScreenshotToLibrary, 20)
+ScreenshotHandle __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_AddScreenshotToLibrary(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003 *_this, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight)
+{
+ TRACE("%p\n", _this);
+ return cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_AddScreenshotToLibrary(_this->linux_side, pchFilename, pchThumbnailFilename, nWidth, nHeight);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_TriggerScreenshot, 4)
+void __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_TriggerScreenshot(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_TriggerScreenshot(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_HookScreenshots, 5)
+void __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_HookScreenshots(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003 *_this, bool bHook)
+{
+ TRACE("%p\n", _this);
+ cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_HookScreenshots(_this->linux_side, bHook);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_SetLocation, 12)
+bool __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_SetLocation(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003 *_this, ScreenshotHandle hScreenshot, const char * pchLocation)
+{
+ TRACE("%p\n", _this);
+ return cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_SetLocation(_this->linux_side, hScreenshot, pchLocation);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_TagUser, 16)
+bool __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_TagUser(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003 *_this, ScreenshotHandle hScreenshot, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_TagUser(_this->linux_side, hScreenshot, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_TagPublishedFile, 16)
+bool __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_TagPublishedFile(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003 *_this, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_TagPublishedFile(_this->linux_side, hScreenshot, unPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_IsScreenshotsHooked, 4)
+bool __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_IsScreenshotsHooked(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_IsScreenshotsHooked(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_AddVRScreenshotToLibrary, 16)
+ScreenshotHandle __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_AddVRScreenshotToLibrary(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003 *_this, EVRScreenshotType eType, const char * pchFilename, const char * pchVRFilename)
+{
+ TRACE("%p\n", _this);
+ return cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_AddVRScreenshotToLibrary(_this->linux_side, eType, pchFilename, pchVRFilename);
+}
+
+extern vtable_ptr winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003,
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_WriteScreenshot)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_AddScreenshotToLibrary)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_TriggerScreenshot)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_HookScreenshots)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_SetLocation)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_TagUser)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_TagPublishedFile)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_IsScreenshotsHooked)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_AddVRScreenshotToLibrary)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003 *create_winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003(void *linux_side)
+{
+ winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002.h"
+
+typedef struct __winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002;
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_WriteScreenshot, 20)
+ScreenshotHandle __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_WriteScreenshot(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002 *_this, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight)
+{
+ TRACE("%p\n", _this);
+ return cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_WriteScreenshot(_this->linux_side, pubRGB, cubRGB, nWidth, nHeight);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_AddScreenshotToLibrary, 20)
+ScreenshotHandle __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_AddScreenshotToLibrary(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002 *_this, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight)
+{
+ TRACE("%p\n", _this);
+ return cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_AddScreenshotToLibrary(_this->linux_side, pchFilename, pchThumbnailFilename, nWidth, nHeight);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_TriggerScreenshot, 4)
+void __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_TriggerScreenshot(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_TriggerScreenshot(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_HookScreenshots, 5)
+void __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_HookScreenshots(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002 *_this, bool bHook)
+{
+ TRACE("%p\n", _this);
+ cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_HookScreenshots(_this->linux_side, bHook);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_SetLocation, 12)
+bool __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_SetLocation(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002 *_this, ScreenshotHandle hScreenshot, const char * pchLocation)
+{
+ TRACE("%p\n", _this);
+ return cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_SetLocation(_this->linux_side, hScreenshot, pchLocation);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_TagUser, 16)
+bool __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_TagUser(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002 *_this, ScreenshotHandle hScreenshot, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_TagUser(_this->linux_side, hScreenshot, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_TagPublishedFile, 16)
+bool __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_TagPublishedFile(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002 *_this, ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_TagPublishedFile(_this->linux_side, hScreenshot, unPublishedFileID);
+}
+
+extern vtable_ptr winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002,
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_WriteScreenshot)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_AddScreenshotToLibrary)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_TriggerScreenshot)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_HookScreenshots)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_SetLocation)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_TagUser)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_TagPublishedFile)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002 *create_winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002(void *linux_side)
+{
+ winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001.h"
+
+typedef struct __winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001;
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_WriteScreenshot, 20)
+ScreenshotHandle __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_WriteScreenshot(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001 *_this, void * pubRGB, uint32 cubRGB, int nWidth, int nHeight)
+{
+ TRACE("%p\n", _this);
+ return cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_WriteScreenshot(_this->linux_side, pubRGB, cubRGB, nWidth, nHeight);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_AddScreenshotToLibrary, 20)
+ScreenshotHandle __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_AddScreenshotToLibrary(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001 *_this, const char * pchFilename, const char * pchThumbnailFilename, int nWidth, int nHeight)
+{
+ TRACE("%p\n", _this);
+ return cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_AddScreenshotToLibrary(_this->linux_side, pchFilename, pchThumbnailFilename, nWidth, nHeight);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_TriggerScreenshot, 4)
+void __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_TriggerScreenshot(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_TriggerScreenshot(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_HookScreenshots, 5)
+void __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_HookScreenshots(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001 *_this, bool bHook)
+{
+ TRACE("%p\n", _this);
+ cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_HookScreenshots(_this->linux_side, bHook);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_SetLocation, 12)
+bool __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_SetLocation(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001 *_this, ScreenshotHandle hScreenshot, const char * pchLocation)
+{
+ TRACE("%p\n", _this);
+ return cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_SetLocation(_this->linux_side, hScreenshot, pchLocation);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_TagUser, 16)
+bool __thiscall winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_TagUser(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001 *_this, ScreenshotHandle hScreenshot, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_TagUser(_this->linux_side, hScreenshot, steamID);
+}
+
+extern vtable_ptr winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001,
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_WriteScreenshot)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_AddScreenshotToLibrary)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_TriggerScreenshot)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_HookScreenshots)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_SetLocation)
+ VTABLE_ADD_FUNC(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_TagUser)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001 *create_winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001(void *linux_side)
+{
+ winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamUGC.c b/lsteamclient/winISteamUGC.c
new file mode 100644
index 00000000..06ddaf5f
--- /dev/null
+++ b/lsteamclient/winISteamUGC.c
@@ -0,0 +1,3321 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamUGC_STEAMUGC_INTERFACE_VERSION010.h"
+
+typedef struct __winISteamUGC_STEAMUGC_INTERFACE_VERSION010 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUGC_STEAMUGC_INTERFACE_VERSION010;
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateQueryUserUGCRequest, 32)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateQueryUserUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateQueryUserUGCRequest(_this->linux_side, unAccountID, eListType, eMatchingUGCType, eSortOrder, nCreatorAppID, nConsumerAppID, unPage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateQueryAllUGCRequest, 24)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateQueryAllUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateQueryAllUGCRequest(_this->linux_side, eQueryType, eMatchingeMatchingUGCTypeFileType, nCreatorAppID, nConsumerAppID, unPage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateQueryUGCDetailsRequest, 12)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateQueryUGCDetailsRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateQueryUGCDetailsRequest(_this->linux_side, pvecPublishedFileID, unNumPublishedFileIDs);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SendQueryUGCRequest, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SendQueryUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SendQueryUGCRequest(_this->linux_side, handle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCResult, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCResult(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t * pDetails)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCResult(_this->linux_side, handle, index, pDetails);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCPreviewURL, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCPreviewURL(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCPreviewURL(_this->linux_side, handle, index, pchURL, cchURLSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCMetadata, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCMetadata(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCMetadata(_this->linux_side, handle, index, pchMetadata, cchMetadatasize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCChildren, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCChildren(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCChildren(_this->linux_side, handle, index, pvecPublishedFileID, cMaxEntries);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCStatistic, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCStatistic(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint64 * pStatValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCStatistic(_this->linux_side, handle, index, eStatType, pStatValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCNumAdditionalPreviews, 16)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCNumAdditionalPreviews(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, uint32 index)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCNumAdditionalPreviews(_this->linux_side, handle, index);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCAdditionalPreview, 40)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCAdditionalPreview(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, char * pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType * pPreviewType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCAdditionalPreview(_this->linux_side, handle, index, previewIndex, pchURLOrVideoID, cchURLSize, pchOriginalFileName, cchOriginalFileNameSize, pPreviewType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCNumKeyValueTags, 16)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCNumKeyValueTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, uint32 index)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCNumKeyValueTags(_this->linux_side, handle, index);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCKeyValueTag, 36)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCKeyValueTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCKeyValueTag(_this->linux_side, handle, index, keyValueTagIndex, pchKey, cchKeySize, pchValue, cchValueSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_ReleaseQueryUGCRequest, 12)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_ReleaseQueryUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_ReleaseQueryUGCRequest(_this->linux_side, handle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddRequiredTag, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddRequiredTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, const char * pTagName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddRequiredTag(_this->linux_side, handle, pTagName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddExcludedTag, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddExcludedTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, const char * pTagName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddExcludedTag(_this->linux_side, handle, pTagName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnOnlyIDs, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnOnlyIDs(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, bool bReturnOnlyIDs)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnOnlyIDs(_this->linux_side, handle, bReturnOnlyIDs);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnKeyValueTags, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnKeyValueTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, bool bReturnKeyValueTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnKeyValueTags(_this->linux_side, handle, bReturnKeyValueTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnLongDescription, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnLongDescription(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, bool bReturnLongDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnLongDescription(_this->linux_side, handle, bReturnLongDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnMetadata, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnMetadata(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, bool bReturnMetadata)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnMetadata(_this->linux_side, handle, bReturnMetadata);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnChildren, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnChildren(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, bool bReturnChildren)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnChildren(_this->linux_side, handle, bReturnChildren);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnAdditionalPreviews, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnAdditionalPreviews(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnAdditionalPreviews(_this->linux_side, handle, bReturnAdditionalPreviews);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnTotalOnly, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnTotalOnly(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, bool bReturnTotalOnly)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnTotalOnly(_this->linux_side, handle, bReturnTotalOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnPlaytimeStats, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnPlaytimeStats(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, uint32 unDays)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnPlaytimeStats(_this->linux_side, handle, unDays);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetLanguage, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetLanguage(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, const char * pchLanguage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetLanguage(_this->linux_side, handle, pchLanguage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetAllowCachedResponse, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetAllowCachedResponse(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetAllowCachedResponse(_this->linux_side, handle, unMaxAgeSeconds);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetCloudFileNameFilter, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetCloudFileNameFilter(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, const char * pMatchCloudFileName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetCloudFileNameFilter(_this->linux_side, handle, pMatchCloudFileName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetMatchAnyTag, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetMatchAnyTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, bool bMatchAnyTag)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetMatchAnyTag(_this->linux_side, handle, bMatchAnyTag);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetSearchText, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetSearchText(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, const char * pSearchText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetSearchText(_this->linux_side, handle, pSearchText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetRankedByTrendDays, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetRankedByTrendDays(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, uint32 unDays)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetRankedByTrendDays(_this->linux_side, handle, unDays);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddRequiredKeyValueTag, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddRequiredKeyValueTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCQueryHandle_t handle, const char * pKey, const char * pValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddRequiredKeyValueTag(_this->linux_side, handle, pKey, pValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_RequestUGCDetails, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_RequestUGCDetails(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_RequestUGCDetails(_this->linux_side, nPublishedFileID, unMaxAgeSeconds);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, AppId_t nConsumerAppId, EWorkshopFileType eFileType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateItem(_this->linux_side, nConsumerAppId, eFileType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_StartItemUpdate, 16)
+UGCUpdateHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_StartItemUpdate(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_StartItemUpdate(_this->linux_side, nConsumerAppId, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemTitle, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemTitle(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCUpdateHandle_t handle, const char * pchTitle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemTitle(_this->linux_side, handle, pchTitle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemDescription, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemDescription(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCUpdateHandle_t handle, const char * pchDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemDescription(_this->linux_side, handle, pchDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemUpdateLanguage, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemUpdateLanguage(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCUpdateHandle_t handle, const char * pchLanguage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemUpdateLanguage(_this->linux_side, handle, pchLanguage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemMetadata, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemMetadata(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCUpdateHandle_t handle, const char * pchMetaData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemMetadata(_this->linux_side, handle, pchMetaData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemVisibility, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemVisibility(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemVisibility(_this->linux_side, handle, eVisibility);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemTags, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemTags(_this->linux_side, updateHandle, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemContent, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemContent(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCUpdateHandle_t handle, const char * pszContentFolder)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemContent(_this->linux_side, handle, pszContentFolder);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemPreview, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemPreview(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCUpdateHandle_t handle, const char * pszPreviewFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemPreview(_this->linux_side, handle, pszPreviewFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveItemKeyValueTags, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveItemKeyValueTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCUpdateHandle_t handle, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveItemKeyValueTags(_this->linux_side, handle, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemKeyValueTag, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemKeyValueTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemKeyValueTag(_this->linux_side, handle, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemPreviewFile, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemPreviewFile(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCUpdateHandle_t handle, const char * pszPreviewFile, EItemPreviewType type)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemPreviewFile(_this->linux_side, handle, pszPreviewFile, type);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemPreviewVideo, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemPreviewVideo(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCUpdateHandle_t handle, const char * pszVideoID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemPreviewVideo(_this->linux_side, handle, pszVideoID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_UpdateItemPreviewFile, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_UpdateItemPreviewFile(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCUpdateHandle_t handle, uint32 index, const char * pszPreviewFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_UpdateItemPreviewFile(_this->linux_side, handle, index, pszPreviewFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_UpdateItemPreviewVideo, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_UpdateItemPreviewVideo(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCUpdateHandle_t handle, uint32 index, const char * pszVideoID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_UpdateItemPreviewVideo(_this->linux_side, handle, index, pszVideoID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveItemPreview, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveItemPreview(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCUpdateHandle_t handle, uint32 index)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveItemPreview(_this->linux_side, handle, index);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SubmitItemUpdate, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SubmitItemUpdate(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCUpdateHandle_t handle, const char * pchChangeNote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SubmitItemUpdate(_this->linux_side, handle, pchChangeNote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemUpdateProgress, 20)
+EItemUpdateStatus __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemUpdateProgress(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemUpdateProgress(_this->linux_side, handle, punBytesProcessed, punBytesTotal);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetUserItemVote, 13)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetUserItemVote(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t nPublishedFileID, bool bVoteUp)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetUserItemVote(_this->linux_side, nPublishedFileID, bVoteUp);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetUserItemVote, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetUserItemVote(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetUserItemVote(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemToFavorites, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemToFavorites(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemToFavorites(_this->linux_side, nAppId, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveItemFromFavorites, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveItemFromFavorites(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveItemFromFavorites(_this->linux_side, nAppId, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SubscribeItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SubscribeItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SubscribeItem(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_UnsubscribeItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_UnsubscribeItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_UnsubscribeItem(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetNumSubscribedItems, 4)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetNumSubscribedItems(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetNumSubscribedItems(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetSubscribedItems, 12)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetSubscribedItems(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetSubscribedItems(_this->linux_side, pvecPublishedFileID, cMaxEntries);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemState, 12)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemState(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemState(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemInstallInfo, 28)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemInstallInfo(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp)
+{
+ uint32 path_result;
+ TRACE("%p\n", _this);
+ path_result = cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemInstallInfo(_this->linux_side, nPublishedFileID, punSizeOnDisk, pchFolder, cchFolderSize, punTimeStamp);
+ return steamclient_unix_path_to_dos_path(path_result, pchFolder, cchFolderSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemDownloadInfo, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemDownloadInfo(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemDownloadInfo(_this->linux_side, nPublishedFileID, punBytesDownloaded, punBytesTotal);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_DownloadItem, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_DownloadItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t nPublishedFileID, bool bHighPriority)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_DownloadItem(_this->linux_side, nPublishedFileID, bHighPriority);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_BInitWorkshopForGameServer, 12)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_BInitWorkshopForGameServer(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, DepotId_t unWorkshopDepotID, const char * pszFolder)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_BInitWorkshopForGameServer(_this->linux_side, unWorkshopDepotID, pszFolder);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SuspendDownloads, 5)
+void __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SuspendDownloads(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, bool bSuspend)
+{
+ TRACE("%p\n", _this);
+ cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_SuspendDownloads(_this->linux_side, bSuspend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_StartPlaytimeTracking, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_StartPlaytimeTracking(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_StartPlaytimeTracking(_this->linux_side, pvecPublishedFileID, unNumPublishedFileIDs);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_StopPlaytimeTracking, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_StopPlaytimeTracking(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_StopPlaytimeTracking(_this->linux_side, pvecPublishedFileID, unNumPublishedFileIDs);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_StopPlaytimeTrackingForAllItems, 4)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_StopPlaytimeTrackingForAllItems(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_StopPlaytimeTrackingForAllItems(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddDependency, 20)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddDependency(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddDependency(_this->linux_side, nParentPublishedFileID, nChildPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveDependency, 20)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveDependency(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveDependency(_this->linux_side, nParentPublishedFileID, nChildPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddAppDependency, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddAppDependency(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t nPublishedFileID, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddAppDependency(_this->linux_side, nPublishedFileID, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveAppDependency, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveAppDependency(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t nPublishedFileID, AppId_t nAppID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveAppDependency(_this->linux_side, nPublishedFileID, nAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetAppDependencies, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetAppDependencies(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetAppDependencies(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_DeleteItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION010_DeleteItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION010_DeleteItem(_this->linux_side, nPublishedFileID);
+}
+
+extern vtable_ptr winISteamUGC_STEAMUGC_INTERFACE_VERSION010_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUGC_STEAMUGC_INTERFACE_VERSION010,
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateQueryUserUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateQueryAllUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateQueryUGCDetailsRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SendQueryUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCResult)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCPreviewURL)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCMetadata)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCChildren)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCStatistic)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCNumAdditionalPreviews)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCAdditionalPreview)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCNumKeyValueTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetQueryUGCKeyValueTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_ReleaseQueryUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddRequiredTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddExcludedTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnOnlyIDs)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnKeyValueTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnLongDescription)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnMetadata)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnChildren)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnAdditionalPreviews)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnTotalOnly)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetReturnPlaytimeStats)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetLanguage)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetAllowCachedResponse)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetCloudFileNameFilter)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetMatchAnyTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetSearchText)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetRankedByTrendDays)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddRequiredKeyValueTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_RequestUGCDetails)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_CreateItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_StartItemUpdate)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemTitle)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemDescription)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemUpdateLanguage)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemMetadata)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemVisibility)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemContent)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetItemPreview)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveItemKeyValueTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemKeyValueTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemPreviewFile)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemPreviewVideo)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_UpdateItemPreviewFile)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_UpdateItemPreviewVideo)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveItemPreview)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SubmitItemUpdate)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemUpdateProgress)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SetUserItemVote)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetUserItemVote)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddItemToFavorites)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveItemFromFavorites)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SubscribeItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_UnsubscribeItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetNumSubscribedItems)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetSubscribedItems)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemState)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemInstallInfo)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetItemDownloadInfo)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_DownloadItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_BInitWorkshopForGameServer)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_SuspendDownloads)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_StartPlaytimeTracking)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_StopPlaytimeTracking)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_StopPlaytimeTrackingForAllItems)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddDependency)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveDependency)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_AddAppDependency)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_RemoveAppDependency)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_GetAppDependencies)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION010_DeleteItem)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *create_winISteamUGC_STEAMUGC_INTERFACE_VERSION010(void *linux_side)
+{
+ winISteamUGC_STEAMUGC_INTERFACE_VERSION010 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUGC_STEAMUGC_INTERFACE_VERSION010));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUGC_STEAMUGC_INTERFACE_VERSION010_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUGC_STEAMUGC_INTERFACE_VERSION009.h"
+
+typedef struct __winISteamUGC_STEAMUGC_INTERFACE_VERSION009 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUGC_STEAMUGC_INTERFACE_VERSION009;
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateQueryUserUGCRequest, 32)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateQueryUserUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateQueryUserUGCRequest(_this->linux_side, unAccountID, eListType, eMatchingUGCType, eSortOrder, nCreatorAppID, nConsumerAppID, unPage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateQueryAllUGCRequest, 24)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateQueryAllUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateQueryAllUGCRequest(_this->linux_side, eQueryType, eMatchingeMatchingUGCTypeFileType, nCreatorAppID, nConsumerAppID, unPage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateQueryUGCDetailsRequest, 12)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateQueryUGCDetailsRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateQueryUGCDetailsRequest(_this->linux_side, pvecPublishedFileID, unNumPublishedFileIDs);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SendQueryUGCRequest, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SendQueryUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SendQueryUGCRequest(_this->linux_side, handle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCResult, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCResult(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t * pDetails)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCResult(_this->linux_side, handle, index, pDetails);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCPreviewURL, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCPreviewURL(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCPreviewURL(_this->linux_side, handle, index, pchURL, cchURLSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCMetadata, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCMetadata(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCMetadata(_this->linux_side, handle, index, pchMetadata, cchMetadatasize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCChildren, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCChildren(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCChildren(_this->linux_side, handle, index, pvecPublishedFileID, cMaxEntries);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCStatistic, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCStatistic(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint64 * pStatValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCStatistic(_this->linux_side, handle, index, eStatType, pStatValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCNumAdditionalPreviews, 16)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCNumAdditionalPreviews(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, uint32 index)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCNumAdditionalPreviews(_this->linux_side, handle, index);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCAdditionalPreview, 40)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCAdditionalPreview(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, char * pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType * pPreviewType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCAdditionalPreview(_this->linux_side, handle, index, previewIndex, pchURLOrVideoID, cchURLSize, pchOriginalFileName, cchOriginalFileNameSize, pPreviewType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCNumKeyValueTags, 16)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCNumKeyValueTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, uint32 index)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCNumKeyValueTags(_this->linux_side, handle, index);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCKeyValueTag, 36)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCKeyValueTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCKeyValueTag(_this->linux_side, handle, index, keyValueTagIndex, pchKey, cchKeySize, pchValue, cchValueSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_ReleaseQueryUGCRequest, 12)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_ReleaseQueryUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_ReleaseQueryUGCRequest(_this->linux_side, handle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddRequiredTag, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddRequiredTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, const char * pTagName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddRequiredTag(_this->linux_side, handle, pTagName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddExcludedTag, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddExcludedTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, const char * pTagName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddExcludedTag(_this->linux_side, handle, pTagName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnOnlyIDs, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnOnlyIDs(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, bool bReturnOnlyIDs)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnOnlyIDs(_this->linux_side, handle, bReturnOnlyIDs);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnKeyValueTags, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnKeyValueTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, bool bReturnKeyValueTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnKeyValueTags(_this->linux_side, handle, bReturnKeyValueTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnLongDescription, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnLongDescription(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, bool bReturnLongDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnLongDescription(_this->linux_side, handle, bReturnLongDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnMetadata, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnMetadata(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, bool bReturnMetadata)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnMetadata(_this->linux_side, handle, bReturnMetadata);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnChildren, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnChildren(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, bool bReturnChildren)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnChildren(_this->linux_side, handle, bReturnChildren);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnAdditionalPreviews, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnAdditionalPreviews(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnAdditionalPreviews(_this->linux_side, handle, bReturnAdditionalPreviews);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnTotalOnly, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnTotalOnly(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, bool bReturnTotalOnly)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnTotalOnly(_this->linux_side, handle, bReturnTotalOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetLanguage, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetLanguage(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, const char * pchLanguage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetLanguage(_this->linux_side, handle, pchLanguage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetAllowCachedResponse, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetAllowCachedResponse(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetAllowCachedResponse(_this->linux_side, handle, unMaxAgeSeconds);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetCloudFileNameFilter, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetCloudFileNameFilter(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, const char * pMatchCloudFileName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetCloudFileNameFilter(_this->linux_side, handle, pMatchCloudFileName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetMatchAnyTag, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetMatchAnyTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, bool bMatchAnyTag)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetMatchAnyTag(_this->linux_side, handle, bMatchAnyTag);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetSearchText, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetSearchText(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, const char * pSearchText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetSearchText(_this->linux_side, handle, pSearchText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetRankedByTrendDays, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetRankedByTrendDays(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, uint32 unDays)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetRankedByTrendDays(_this->linux_side, handle, unDays);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddRequiredKeyValueTag, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddRequiredKeyValueTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCQueryHandle_t handle, const char * pKey, const char * pValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddRequiredKeyValueTag(_this->linux_side, handle, pKey, pValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_RequestUGCDetails, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_RequestUGCDetails(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_RequestUGCDetails(_this->linux_side, nPublishedFileID, unMaxAgeSeconds);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, AppId_t nConsumerAppId, EWorkshopFileType eFileType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateItem(_this->linux_side, nConsumerAppId, eFileType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_StartItemUpdate, 16)
+UGCUpdateHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_StartItemUpdate(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_StartItemUpdate(_this->linux_side, nConsumerAppId, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemTitle, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemTitle(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCUpdateHandle_t handle, const char * pchTitle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemTitle(_this->linux_side, handle, pchTitle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemDescription, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemDescription(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCUpdateHandle_t handle, const char * pchDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemDescription(_this->linux_side, handle, pchDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemUpdateLanguage, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemUpdateLanguage(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCUpdateHandle_t handle, const char * pchLanguage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemUpdateLanguage(_this->linux_side, handle, pchLanguage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemMetadata, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemMetadata(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCUpdateHandle_t handle, const char * pchMetaData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemMetadata(_this->linux_side, handle, pchMetaData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemVisibility, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemVisibility(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemVisibility(_this->linux_side, handle, eVisibility);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemTags, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemTags(_this->linux_side, updateHandle, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemContent, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemContent(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCUpdateHandle_t handle, const char * pszContentFolder)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemContent(_this->linux_side, handle, pszContentFolder);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemPreview, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemPreview(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCUpdateHandle_t handle, const char * pszPreviewFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemPreview(_this->linux_side, handle, pszPreviewFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_RemoveItemKeyValueTags, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_RemoveItemKeyValueTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCUpdateHandle_t handle, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_RemoveItemKeyValueTags(_this->linux_side, handle, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemKeyValueTag, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemKeyValueTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemKeyValueTag(_this->linux_side, handle, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemPreviewFile, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemPreviewFile(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCUpdateHandle_t handle, const char * pszPreviewFile, EItemPreviewType type)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemPreviewFile(_this->linux_side, handle, pszPreviewFile, type);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemPreviewVideo, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemPreviewVideo(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCUpdateHandle_t handle, const char * pszVideoID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemPreviewVideo(_this->linux_side, handle, pszVideoID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_UpdateItemPreviewFile, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_UpdateItemPreviewFile(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCUpdateHandle_t handle, uint32 index, const char * pszPreviewFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_UpdateItemPreviewFile(_this->linux_side, handle, index, pszPreviewFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_UpdateItemPreviewVideo, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_UpdateItemPreviewVideo(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCUpdateHandle_t handle, uint32 index, const char * pszVideoID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_UpdateItemPreviewVideo(_this->linux_side, handle, index, pszVideoID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_RemoveItemPreview, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_RemoveItemPreview(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCUpdateHandle_t handle, uint32 index)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_RemoveItemPreview(_this->linux_side, handle, index);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SubmitItemUpdate, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SubmitItemUpdate(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCUpdateHandle_t handle, const char * pchChangeNote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SubmitItemUpdate(_this->linux_side, handle, pchChangeNote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemUpdateProgress, 20)
+EItemUpdateStatus __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemUpdateProgress(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemUpdateProgress(_this->linux_side, handle, punBytesProcessed, punBytesTotal);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetUserItemVote, 13)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetUserItemVote(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, PublishedFileId_t nPublishedFileID, bool bVoteUp)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetUserItemVote(_this->linux_side, nPublishedFileID, bVoteUp);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetUserItemVote, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetUserItemVote(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetUserItemVote(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemToFavorites, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemToFavorites(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemToFavorites(_this->linux_side, nAppId, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_RemoveItemFromFavorites, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_RemoveItemFromFavorites(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_RemoveItemFromFavorites(_this->linux_side, nAppId, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SubscribeItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SubscribeItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SubscribeItem(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_UnsubscribeItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_UnsubscribeItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_UnsubscribeItem(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetNumSubscribedItems, 4)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetNumSubscribedItems(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetNumSubscribedItems(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetSubscribedItems, 12)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetSubscribedItems(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetSubscribedItems(_this->linux_side, pvecPublishedFileID, cMaxEntries);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemState, 12)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemState(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemState(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemInstallInfo, 28)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemInstallInfo(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp)
+{
+ uint32 path_result;
+ TRACE("%p\n", _this);
+ path_result = cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemInstallInfo(_this->linux_side, nPublishedFileID, punSizeOnDisk, pchFolder, cchFolderSize, punTimeStamp);
+ return steamclient_unix_path_to_dos_path(path_result, pchFolder, cchFolderSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemDownloadInfo, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemDownloadInfo(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemDownloadInfo(_this->linux_side, nPublishedFileID, punBytesDownloaded, punBytesTotal);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_DownloadItem, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_DownloadItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, PublishedFileId_t nPublishedFileID, bool bHighPriority)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_DownloadItem(_this->linux_side, nPublishedFileID, bHighPriority);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_BInitWorkshopForGameServer, 12)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_BInitWorkshopForGameServer(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, DepotId_t unWorkshopDepotID, const char * pszFolder)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_BInitWorkshopForGameServer(_this->linux_side, unWorkshopDepotID, pszFolder);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SuspendDownloads, 5)
+void __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SuspendDownloads(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, bool bSuspend)
+{
+ TRACE("%p\n", _this);
+ cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_SuspendDownloads(_this->linux_side, bSuspend);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_StartPlaytimeTracking, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_StartPlaytimeTracking(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_StartPlaytimeTracking(_this->linux_side, pvecPublishedFileID, unNumPublishedFileIDs);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_StopPlaytimeTracking, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_StopPlaytimeTracking(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_StopPlaytimeTracking(_this->linux_side, pvecPublishedFileID, unNumPublishedFileIDs);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_StopPlaytimeTrackingForAllItems, 4)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION009_StopPlaytimeTrackingForAllItems(winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION009_StopPlaytimeTrackingForAllItems(_this->linux_side);
+}
+
+extern vtable_ptr winISteamUGC_STEAMUGC_INTERFACE_VERSION009_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUGC_STEAMUGC_INTERFACE_VERSION009,
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateQueryUserUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateQueryAllUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateQueryUGCDetailsRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SendQueryUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCResult)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCPreviewURL)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCMetadata)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCChildren)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCStatistic)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCNumAdditionalPreviews)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCAdditionalPreview)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCNumKeyValueTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetQueryUGCKeyValueTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_ReleaseQueryUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddRequiredTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddExcludedTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnOnlyIDs)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnKeyValueTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnLongDescription)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnMetadata)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnChildren)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnAdditionalPreviews)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetReturnTotalOnly)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetLanguage)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetAllowCachedResponse)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetCloudFileNameFilter)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetMatchAnyTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetSearchText)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetRankedByTrendDays)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddRequiredKeyValueTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_RequestUGCDetails)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_CreateItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_StartItemUpdate)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemTitle)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemDescription)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemUpdateLanguage)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemMetadata)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemVisibility)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemContent)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetItemPreview)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_RemoveItemKeyValueTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemKeyValueTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemPreviewFile)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemPreviewVideo)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_UpdateItemPreviewFile)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_UpdateItemPreviewVideo)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_RemoveItemPreview)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SubmitItemUpdate)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemUpdateProgress)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SetUserItemVote)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetUserItemVote)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_AddItemToFavorites)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_RemoveItemFromFavorites)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SubscribeItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_UnsubscribeItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetNumSubscribedItems)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetSubscribedItems)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemState)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemInstallInfo)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_GetItemDownloadInfo)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_DownloadItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_BInitWorkshopForGameServer)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_SuspendDownloads)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_StartPlaytimeTracking)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_StopPlaytimeTracking)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION009_StopPlaytimeTrackingForAllItems)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *create_winISteamUGC_STEAMUGC_INTERFACE_VERSION009(void *linux_side)
+{
+ winISteamUGC_STEAMUGC_INTERFACE_VERSION009 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUGC_STEAMUGC_INTERFACE_VERSION009));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUGC_STEAMUGC_INTERFACE_VERSION009_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUGC_STEAMUGC_INTERFACE_VERSION008.h"
+
+typedef struct __winISteamUGC_STEAMUGC_INTERFACE_VERSION008 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUGC_STEAMUGC_INTERFACE_VERSION008;
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateQueryUserUGCRequest, 32)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateQueryUserUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateQueryUserUGCRequest(_this->linux_side, unAccountID, eListType, eMatchingUGCType, eSortOrder, nCreatorAppID, nConsumerAppID, unPage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateQueryAllUGCRequest, 24)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateQueryAllUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateQueryAllUGCRequest(_this->linux_side, eQueryType, eMatchingeMatchingUGCTypeFileType, nCreatorAppID, nConsumerAppID, unPage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateQueryUGCDetailsRequest, 12)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateQueryUGCDetailsRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateQueryUGCDetailsRequest(_this->linux_side, pvecPublishedFileID, unNumPublishedFileIDs);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SendQueryUGCRequest, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SendQueryUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SendQueryUGCRequest(_this->linux_side, handle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCResult, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCResult(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t * pDetails)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCResult(_this->linux_side, handle, index, pDetails);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCPreviewURL, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCPreviewURL(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCPreviewURL(_this->linux_side, handle, index, pchURL, cchURLSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCMetadata, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCMetadata(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCMetadata(_this->linux_side, handle, index, pchMetadata, cchMetadatasize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCChildren, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCChildren(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCChildren(_this->linux_side, handle, index, pvecPublishedFileID, cMaxEntries);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCStatistic, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCStatistic(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 * pStatValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCStatistic(_this->linux_side, handle, index, eStatType, pStatValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCNumAdditionalPreviews, 16)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCNumAdditionalPreviews(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, uint32 index)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCNumAdditionalPreviews(_this->linux_side, handle, index);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCAdditionalPreview, 40)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCAdditionalPreview(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, char * pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType * pPreviewType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCAdditionalPreview(_this->linux_side, handle, index, previewIndex, pchURLOrVideoID, cchURLSize, pchOriginalFileName, cchOriginalFileNameSize, pPreviewType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCNumKeyValueTags, 16)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCNumKeyValueTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, uint32 index)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCNumKeyValueTags(_this->linux_side, handle, index);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCKeyValueTag, 36)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCKeyValueTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCKeyValueTag(_this->linux_side, handle, index, keyValueTagIndex, pchKey, cchKeySize, pchValue, cchValueSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_ReleaseQueryUGCRequest, 12)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_ReleaseQueryUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_ReleaseQueryUGCRequest(_this->linux_side, handle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddRequiredTag, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddRequiredTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, const char * pTagName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddRequiredTag(_this->linux_side, handle, pTagName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddExcludedTag, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddExcludedTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, const char * pTagName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddExcludedTag(_this->linux_side, handle, pTagName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnKeyValueTags, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnKeyValueTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, bool bReturnKeyValueTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnKeyValueTags(_this->linux_side, handle, bReturnKeyValueTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnLongDescription, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnLongDescription(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, bool bReturnLongDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnLongDescription(_this->linux_side, handle, bReturnLongDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnMetadata, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnMetadata(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, bool bReturnMetadata)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnMetadata(_this->linux_side, handle, bReturnMetadata);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnChildren, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnChildren(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, bool bReturnChildren)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnChildren(_this->linux_side, handle, bReturnChildren);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnAdditionalPreviews, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnAdditionalPreviews(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnAdditionalPreviews(_this->linux_side, handle, bReturnAdditionalPreviews);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnTotalOnly, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnTotalOnly(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, bool bReturnTotalOnly)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnTotalOnly(_this->linux_side, handle, bReturnTotalOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetLanguage, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetLanguage(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, const char * pchLanguage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetLanguage(_this->linux_side, handle, pchLanguage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetAllowCachedResponse, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetAllowCachedResponse(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetAllowCachedResponse(_this->linux_side, handle, unMaxAgeSeconds);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetCloudFileNameFilter, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetCloudFileNameFilter(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, const char * pMatchCloudFileName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetCloudFileNameFilter(_this->linux_side, handle, pMatchCloudFileName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetMatchAnyTag, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetMatchAnyTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, bool bMatchAnyTag)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetMatchAnyTag(_this->linux_side, handle, bMatchAnyTag);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetSearchText, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetSearchText(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, const char * pSearchText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetSearchText(_this->linux_side, handle, pSearchText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetRankedByTrendDays, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetRankedByTrendDays(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, uint32 unDays)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetRankedByTrendDays(_this->linux_side, handle, unDays);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddRequiredKeyValueTag, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddRequiredKeyValueTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCQueryHandle_t handle, const char * pKey, const char * pValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddRequiredKeyValueTag(_this->linux_side, handle, pKey, pValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_RequestUGCDetails, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_RequestUGCDetails(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_RequestUGCDetails(_this->linux_side, nPublishedFileID, unMaxAgeSeconds);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, AppId_t nConsumerAppId, EWorkshopFileType eFileType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateItem(_this->linux_side, nConsumerAppId, eFileType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_StartItemUpdate, 16)
+UGCUpdateHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_StartItemUpdate(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_StartItemUpdate(_this->linux_side, nConsumerAppId, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemTitle, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemTitle(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCUpdateHandle_t handle, const char * pchTitle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemTitle(_this->linux_side, handle, pchTitle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemDescription, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemDescription(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCUpdateHandle_t handle, const char * pchDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemDescription(_this->linux_side, handle, pchDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemUpdateLanguage, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemUpdateLanguage(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCUpdateHandle_t handle, const char * pchLanguage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemUpdateLanguage(_this->linux_side, handle, pchLanguage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemMetadata, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemMetadata(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCUpdateHandle_t handle, const char * pchMetaData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemMetadata(_this->linux_side, handle, pchMetaData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemVisibility, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemVisibility(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemVisibility(_this->linux_side, handle, eVisibility);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemTags, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemTags(_this->linux_side, updateHandle, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemContent, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemContent(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCUpdateHandle_t handle, const char * pszContentFolder)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemContent(_this->linux_side, handle, pszContentFolder);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemPreview, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemPreview(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCUpdateHandle_t handle, const char * pszPreviewFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemPreview(_this->linux_side, handle, pszPreviewFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_RemoveItemKeyValueTags, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_RemoveItemKeyValueTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCUpdateHandle_t handle, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_RemoveItemKeyValueTags(_this->linux_side, handle, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemKeyValueTag, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemKeyValueTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemKeyValueTag(_this->linux_side, handle, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemPreviewFile, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemPreviewFile(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCUpdateHandle_t handle, const char * pszPreviewFile, EItemPreviewType type)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemPreviewFile(_this->linux_side, handle, pszPreviewFile, type);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemPreviewVideo, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemPreviewVideo(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCUpdateHandle_t handle, const char * pszVideoID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemPreviewVideo(_this->linux_side, handle, pszVideoID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_UpdateItemPreviewFile, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_UpdateItemPreviewFile(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCUpdateHandle_t handle, uint32 index, const char * pszPreviewFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_UpdateItemPreviewFile(_this->linux_side, handle, index, pszPreviewFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_UpdateItemPreviewVideo, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_UpdateItemPreviewVideo(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCUpdateHandle_t handle, uint32 index, const char * pszVideoID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_UpdateItemPreviewVideo(_this->linux_side, handle, index, pszVideoID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_RemoveItemPreview, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_RemoveItemPreview(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCUpdateHandle_t handle, uint32 index)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_RemoveItemPreview(_this->linux_side, handle, index);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SubmitItemUpdate, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SubmitItemUpdate(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCUpdateHandle_t handle, const char * pchChangeNote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SubmitItemUpdate(_this->linux_side, handle, pchChangeNote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemUpdateProgress, 20)
+EItemUpdateStatus __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemUpdateProgress(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemUpdateProgress(_this->linux_side, handle, punBytesProcessed, punBytesTotal);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetUserItemVote, 13)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetUserItemVote(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, PublishedFileId_t nPublishedFileID, bool bVoteUp)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetUserItemVote(_this->linux_side, nPublishedFileID, bVoteUp);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetUserItemVote, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetUserItemVote(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetUserItemVote(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemToFavorites, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemToFavorites(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemToFavorites(_this->linux_side, nAppId, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_RemoveItemFromFavorites, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_RemoveItemFromFavorites(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_RemoveItemFromFavorites(_this->linux_side, nAppId, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SubscribeItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SubscribeItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SubscribeItem(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_UnsubscribeItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_UnsubscribeItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_UnsubscribeItem(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetNumSubscribedItems, 4)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetNumSubscribedItems(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetNumSubscribedItems(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetSubscribedItems, 12)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetSubscribedItems(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetSubscribedItems(_this->linux_side, pvecPublishedFileID, cMaxEntries);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemState, 12)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemState(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemState(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemInstallInfo, 28)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemInstallInfo(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp)
+{
+ uint32 path_result;
+ TRACE("%p\n", _this);
+ path_result = cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemInstallInfo(_this->linux_side, nPublishedFileID, punSizeOnDisk, pchFolder, cchFolderSize, punTimeStamp);
+ return steamclient_unix_path_to_dos_path(path_result, pchFolder, cchFolderSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemDownloadInfo, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemDownloadInfo(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemDownloadInfo(_this->linux_side, nPublishedFileID, punBytesDownloaded, punBytesTotal);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_DownloadItem, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_DownloadItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, PublishedFileId_t nPublishedFileID, bool bHighPriority)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_DownloadItem(_this->linux_side, nPublishedFileID, bHighPriority);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_BInitWorkshopForGameServer, 12)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_BInitWorkshopForGameServer(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, DepotId_t unWorkshopDepotID, const char * pszFolder)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_BInitWorkshopForGameServer(_this->linux_side, unWorkshopDepotID, pszFolder);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SuspendDownloads, 5)
+void __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SuspendDownloads(winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *_this, bool bSuspend)
+{
+ TRACE("%p\n", _this);
+ cppISteamUGC_STEAMUGC_INTERFACE_VERSION008_SuspendDownloads(_this->linux_side, bSuspend);
+}
+
+extern vtable_ptr winISteamUGC_STEAMUGC_INTERFACE_VERSION008_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUGC_STEAMUGC_INTERFACE_VERSION008,
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateQueryUserUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateQueryAllUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateQueryUGCDetailsRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SendQueryUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCResult)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCPreviewURL)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCMetadata)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCChildren)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCStatistic)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCNumAdditionalPreviews)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCAdditionalPreview)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCNumKeyValueTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetQueryUGCKeyValueTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_ReleaseQueryUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddRequiredTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddExcludedTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnKeyValueTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnLongDescription)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnMetadata)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnChildren)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnAdditionalPreviews)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetReturnTotalOnly)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetLanguage)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetAllowCachedResponse)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetCloudFileNameFilter)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetMatchAnyTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetSearchText)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetRankedByTrendDays)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddRequiredKeyValueTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_RequestUGCDetails)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_CreateItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_StartItemUpdate)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemTitle)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemDescription)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemUpdateLanguage)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemMetadata)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemVisibility)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemContent)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetItemPreview)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_RemoveItemKeyValueTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemKeyValueTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemPreviewFile)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemPreviewVideo)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_UpdateItemPreviewFile)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_UpdateItemPreviewVideo)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_RemoveItemPreview)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SubmitItemUpdate)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemUpdateProgress)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SetUserItemVote)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetUserItemVote)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_AddItemToFavorites)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_RemoveItemFromFavorites)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SubscribeItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_UnsubscribeItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetNumSubscribedItems)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetSubscribedItems)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemState)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemInstallInfo)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_GetItemDownloadInfo)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_DownloadItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_BInitWorkshopForGameServer)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION008_SuspendDownloads)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *create_winISteamUGC_STEAMUGC_INTERFACE_VERSION008(void *linux_side)
+{
+ winISteamUGC_STEAMUGC_INTERFACE_VERSION008 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUGC_STEAMUGC_INTERFACE_VERSION008));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUGC_STEAMUGC_INTERFACE_VERSION008_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUGC_STEAMUGC_INTERFACE_VERSION007.h"
+
+typedef struct __winISteamUGC_STEAMUGC_INTERFACE_VERSION007 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUGC_STEAMUGC_INTERFACE_VERSION007;
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateQueryUserUGCRequest, 32)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateQueryUserUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateQueryUserUGCRequest(_this->linux_side, unAccountID, eListType, eMatchingUGCType, eSortOrder, nCreatorAppID, nConsumerAppID, unPage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateQueryAllUGCRequest, 24)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateQueryAllUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateQueryAllUGCRequest(_this->linux_side, eQueryType, eMatchingeMatchingUGCTypeFileType, nCreatorAppID, nConsumerAppID, unPage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateQueryUGCDetailsRequest, 12)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateQueryUGCDetailsRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateQueryUGCDetailsRequest(_this->linux_side, pvecPublishedFileID, unNumPublishedFileIDs);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SendQueryUGCRequest, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SendQueryUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SendQueryUGCRequest(_this->linux_side, handle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCResult, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCResult(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t * pDetails)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCResult(_this->linux_side, handle, index, pDetails);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCPreviewURL, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCPreviewURL(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCPreviewURL(_this->linux_side, handle, index, pchURL, cchURLSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCMetadata, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCMetadata(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCMetadata(_this->linux_side, handle, index, pchMetadata, cchMetadatasize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCChildren, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCChildren(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCChildren(_this->linux_side, handle, index, pvecPublishedFileID, cMaxEntries);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCStatistic, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCStatistic(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 * pStatValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCStatistic(_this->linux_side, handle, index, eStatType, pStatValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCNumAdditionalPreviews, 16)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCNumAdditionalPreviews(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, uint32 index)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCNumAdditionalPreviews(_this->linux_side, handle, index);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCAdditionalPreview, 32)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCAdditionalPreview(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, bool * pbIsImage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCAdditionalPreview(_this->linux_side, handle, index, previewIndex, pchURLOrVideoID, cchURLSize, pbIsImage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCNumKeyValueTags, 16)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCNumKeyValueTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, uint32 index)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCNumKeyValueTags(_this->linux_side, handle, index);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCKeyValueTag, 36)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCKeyValueTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, char * pchKey, uint32 cchKeySize, char * pchValue, uint32 cchValueSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCKeyValueTag(_this->linux_side, handle, index, keyValueTagIndex, pchKey, cchKeySize, pchValue, cchValueSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_ReleaseQueryUGCRequest, 12)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_ReleaseQueryUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_ReleaseQueryUGCRequest(_this->linux_side, handle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddRequiredTag, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddRequiredTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, const char * pTagName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddRequiredTag(_this->linux_side, handle, pTagName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddExcludedTag, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddExcludedTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, const char * pTagName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddExcludedTag(_this->linux_side, handle, pTagName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnKeyValueTags, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnKeyValueTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, bool bReturnKeyValueTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnKeyValueTags(_this->linux_side, handle, bReturnKeyValueTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnLongDescription, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnLongDescription(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, bool bReturnLongDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnLongDescription(_this->linux_side, handle, bReturnLongDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnMetadata, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnMetadata(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, bool bReturnMetadata)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnMetadata(_this->linux_side, handle, bReturnMetadata);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnChildren, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnChildren(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, bool bReturnChildren)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnChildren(_this->linux_side, handle, bReturnChildren);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnAdditionalPreviews, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnAdditionalPreviews(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnAdditionalPreviews(_this->linux_side, handle, bReturnAdditionalPreviews);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnTotalOnly, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnTotalOnly(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, bool bReturnTotalOnly)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnTotalOnly(_this->linux_side, handle, bReturnTotalOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetLanguage, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetLanguage(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, const char * pchLanguage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetLanguage(_this->linux_side, handle, pchLanguage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetAllowCachedResponse, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetAllowCachedResponse(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetAllowCachedResponse(_this->linux_side, handle, unMaxAgeSeconds);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetCloudFileNameFilter, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetCloudFileNameFilter(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, const char * pMatchCloudFileName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetCloudFileNameFilter(_this->linux_side, handle, pMatchCloudFileName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetMatchAnyTag, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetMatchAnyTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, bool bMatchAnyTag)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetMatchAnyTag(_this->linux_side, handle, bMatchAnyTag);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetSearchText, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetSearchText(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, const char * pSearchText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetSearchText(_this->linux_side, handle, pSearchText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetRankedByTrendDays, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetRankedByTrendDays(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, uint32 unDays)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetRankedByTrendDays(_this->linux_side, handle, unDays);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddRequiredKeyValueTag, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddRequiredKeyValueTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCQueryHandle_t handle, const char * pKey, const char * pValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddRequiredKeyValueTag(_this->linux_side, handle, pKey, pValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_RequestUGCDetails, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_RequestUGCDetails(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_RequestUGCDetails(_this->linux_side, nPublishedFileID, unMaxAgeSeconds);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, AppId_t nConsumerAppId, EWorkshopFileType eFileType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateItem(_this->linux_side, nConsumerAppId, eFileType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_StartItemUpdate, 16)
+UGCUpdateHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_StartItemUpdate(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_StartItemUpdate(_this->linux_side, nConsumerAppId, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemTitle, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemTitle(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCUpdateHandle_t handle, const char * pchTitle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemTitle(_this->linux_side, handle, pchTitle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemDescription, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemDescription(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCUpdateHandle_t handle, const char * pchDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemDescription(_this->linux_side, handle, pchDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemUpdateLanguage, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemUpdateLanguage(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCUpdateHandle_t handle, const char * pchLanguage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemUpdateLanguage(_this->linux_side, handle, pchLanguage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemMetadata, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemMetadata(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCUpdateHandle_t handle, const char * pchMetaData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemMetadata(_this->linux_side, handle, pchMetaData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemVisibility, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemVisibility(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemVisibility(_this->linux_side, handle, eVisibility);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemTags, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemTags(_this->linux_side, updateHandle, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemContent, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemContent(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCUpdateHandle_t handle, const char * pszContentFolder)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemContent(_this->linux_side, handle, pszContentFolder);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemPreview, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemPreview(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCUpdateHandle_t handle, const char * pszPreviewFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemPreview(_this->linux_side, handle, pszPreviewFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_RemoveItemKeyValueTags, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_RemoveItemKeyValueTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCUpdateHandle_t handle, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_RemoveItemKeyValueTags(_this->linux_side, handle, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddItemKeyValueTag, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddItemKeyValueTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCUpdateHandle_t handle, const char * pchKey, const char * pchValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddItemKeyValueTag(_this->linux_side, handle, pchKey, pchValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SubmitItemUpdate, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SubmitItemUpdate(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCUpdateHandle_t handle, const char * pchChangeNote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SubmitItemUpdate(_this->linux_side, handle, pchChangeNote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemUpdateProgress, 20)
+EItemUpdateStatus __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemUpdateProgress(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemUpdateProgress(_this->linux_side, handle, punBytesProcessed, punBytesTotal);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetUserItemVote, 13)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetUserItemVote(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, PublishedFileId_t nPublishedFileID, bool bVoteUp)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetUserItemVote(_this->linux_side, nPublishedFileID, bVoteUp);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetUserItemVote, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetUserItemVote(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetUserItemVote(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddItemToFavorites, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddItemToFavorites(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddItemToFavorites(_this->linux_side, nAppId, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_RemoveItemFromFavorites, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_RemoveItemFromFavorites(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_RemoveItemFromFavorites(_this->linux_side, nAppId, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SubscribeItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SubscribeItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SubscribeItem(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_UnsubscribeItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_UnsubscribeItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_UnsubscribeItem(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetNumSubscribedItems, 4)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetNumSubscribedItems(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetNumSubscribedItems(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetSubscribedItems, 12)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetSubscribedItems(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetSubscribedItems(_this->linux_side, pvecPublishedFileID, cMaxEntries);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemState, 12)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemState(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemState(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemInstallInfo, 28)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemInstallInfo(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp)
+{
+ uint32 path_result;
+ TRACE("%p\n", _this);
+ path_result = cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemInstallInfo(_this->linux_side, nPublishedFileID, punSizeOnDisk, pchFolder, cchFolderSize, punTimeStamp);
+ return steamclient_unix_path_to_dos_path(path_result, pchFolder, cchFolderSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemDownloadInfo, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemDownloadInfo(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemDownloadInfo(_this->linux_side, nPublishedFileID, punBytesDownloaded, punBytesTotal);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_DownloadItem, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_DownloadItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, PublishedFileId_t nPublishedFileID, bool bHighPriority)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_DownloadItem(_this->linux_side, nPublishedFileID, bHighPriority);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_BInitWorkshopForGameServer, 12)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_BInitWorkshopForGameServer(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, DepotId_t unWorkshopDepotID, const char * pszFolder)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_BInitWorkshopForGameServer(_this->linux_side, unWorkshopDepotID, pszFolder);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SuspendDownloads, 5)
+void __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SuspendDownloads(winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *_this, bool bSuspend)
+{
+ TRACE("%p\n", _this);
+ cppISteamUGC_STEAMUGC_INTERFACE_VERSION007_SuspendDownloads(_this->linux_side, bSuspend);
+}
+
+extern vtable_ptr winISteamUGC_STEAMUGC_INTERFACE_VERSION007_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUGC_STEAMUGC_INTERFACE_VERSION007,
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateQueryUserUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateQueryAllUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateQueryUGCDetailsRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SendQueryUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCResult)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCPreviewURL)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCMetadata)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCChildren)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCStatistic)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCNumAdditionalPreviews)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCAdditionalPreview)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCNumKeyValueTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetQueryUGCKeyValueTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_ReleaseQueryUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddRequiredTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddExcludedTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnKeyValueTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnLongDescription)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnMetadata)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnChildren)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnAdditionalPreviews)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetReturnTotalOnly)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetLanguage)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetAllowCachedResponse)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetCloudFileNameFilter)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetMatchAnyTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetSearchText)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetRankedByTrendDays)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddRequiredKeyValueTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_RequestUGCDetails)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_CreateItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_StartItemUpdate)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemTitle)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemDescription)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemUpdateLanguage)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemMetadata)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemVisibility)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemContent)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetItemPreview)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_RemoveItemKeyValueTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddItemKeyValueTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SubmitItemUpdate)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemUpdateProgress)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SetUserItemVote)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetUserItemVote)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_AddItemToFavorites)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_RemoveItemFromFavorites)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SubscribeItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_UnsubscribeItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetNumSubscribedItems)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetSubscribedItems)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemState)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemInstallInfo)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_GetItemDownloadInfo)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_DownloadItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_BInitWorkshopForGameServer)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION007_SuspendDownloads)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *create_winISteamUGC_STEAMUGC_INTERFACE_VERSION007(void *linux_side)
+{
+ winISteamUGC_STEAMUGC_INTERFACE_VERSION007 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUGC_STEAMUGC_INTERFACE_VERSION007));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUGC_STEAMUGC_INTERFACE_VERSION007_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUGC_STEAMUGC_INTERFACE_VERSION005.h"
+
+typedef struct __winISteamUGC_STEAMUGC_INTERFACE_VERSION005 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUGC_STEAMUGC_INTERFACE_VERSION005;
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateQueryUserUGCRequest, 32)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateQueryUserUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateQueryUserUGCRequest(_this->linux_side, unAccountID, eListType, eMatchingUGCType, eSortOrder, nCreatorAppID, nConsumerAppID, unPage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateQueryAllUGCRequest, 24)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateQueryAllUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateQueryAllUGCRequest(_this->linux_side, eQueryType, eMatchingeMatchingUGCTypeFileType, nCreatorAppID, nConsumerAppID, unPage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateQueryUGCDetailsRequest, 12)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateQueryUGCDetailsRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateQueryUGCDetailsRequest(_this->linux_side, pvecPublishedFileID, unNumPublishedFileIDs);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SendQueryUGCRequest, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SendQueryUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SendQueryUGCRequest(_this->linux_side, handle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCResult, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCResult(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t * pDetails)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCResult(_this->linux_side, handle, index, pDetails);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCPreviewURL, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCPreviewURL(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCPreviewURL(_this->linux_side, handle, index, pchURL, cchURLSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCMetadata, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCMetadata(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCMetadata(_this->linux_side, handle, index, pchMetadata, cchMetadatasize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCChildren, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCChildren(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCChildren(_this->linux_side, handle, index, pvecPublishedFileID, cMaxEntries);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCStatistic, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCStatistic(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint32 * pStatValue)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCStatistic(_this->linux_side, handle, index, eStatType, pStatValue);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCNumAdditionalPreviews, 16)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCNumAdditionalPreviews(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, uint32 index)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCNumAdditionalPreviews(_this->linux_side, handle, index);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCAdditionalPreview, 32)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCAdditionalPreview(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, char * pchURLOrVideoID, uint32 cchURLSize, bool * pbIsImage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCAdditionalPreview(_this->linux_side, handle, index, previewIndex, pchURLOrVideoID, cchURLSize, pbIsImage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_ReleaseQueryUGCRequest, 12)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_ReleaseQueryUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_ReleaseQueryUGCRequest(_this->linux_side, handle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_AddRequiredTag, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_AddRequiredTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, const char * pTagName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_AddRequiredTag(_this->linux_side, handle, pTagName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_AddExcludedTag, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_AddExcludedTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, const char * pTagName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_AddExcludedTag(_this->linux_side, handle, pTagName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnLongDescription, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnLongDescription(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, bool bReturnLongDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnLongDescription(_this->linux_side, handle, bReturnLongDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnMetadata, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnMetadata(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, bool bReturnMetadata)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnMetadata(_this->linux_side, handle, bReturnMetadata);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnChildren, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnChildren(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, bool bReturnChildren)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnChildren(_this->linux_side, handle, bReturnChildren);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnAdditionalPreviews, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnAdditionalPreviews(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, bool bReturnAdditionalPreviews)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnAdditionalPreviews(_this->linux_side, handle, bReturnAdditionalPreviews);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnTotalOnly, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnTotalOnly(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, bool bReturnTotalOnly)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnTotalOnly(_this->linux_side, handle, bReturnTotalOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetAllowCachedResponse, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetAllowCachedResponse(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetAllowCachedResponse(_this->linux_side, handle, unMaxAgeSeconds);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetCloudFileNameFilter, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetCloudFileNameFilter(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, const char * pMatchCloudFileName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetCloudFileNameFilter(_this->linux_side, handle, pMatchCloudFileName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetMatchAnyTag, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetMatchAnyTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, bool bMatchAnyTag)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetMatchAnyTag(_this->linux_side, handle, bMatchAnyTag);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetSearchText, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetSearchText(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, const char * pSearchText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetSearchText(_this->linux_side, handle, pSearchText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetRankedByTrendDays, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetRankedByTrendDays(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCQueryHandle_t handle, uint32 unDays)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetRankedByTrendDays(_this->linux_side, handle, unDays);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_RequestUGCDetails, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_RequestUGCDetails(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_RequestUGCDetails(_this->linux_side, nPublishedFileID, unMaxAgeSeconds);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, AppId_t nConsumerAppId, EWorkshopFileType eFileType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateItem(_this->linux_side, nConsumerAppId, eFileType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_StartItemUpdate, 16)
+UGCUpdateHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_StartItemUpdate(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_StartItemUpdate(_this->linux_side, nConsumerAppId, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemTitle, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemTitle(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCUpdateHandle_t handle, const char * pchTitle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemTitle(_this->linux_side, handle, pchTitle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemDescription, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemDescription(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCUpdateHandle_t handle, const char * pchDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemDescription(_this->linux_side, handle, pchDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemMetadata, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemMetadata(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCUpdateHandle_t handle, const char * pchMetaData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemMetadata(_this->linux_side, handle, pchMetaData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemVisibility, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemVisibility(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemVisibility(_this->linux_side, handle, eVisibility);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemTags, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemTags(_this->linux_side, updateHandle, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemContent, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemContent(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCUpdateHandle_t handle, const char * pszContentFolder)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemContent(_this->linux_side, handle, pszContentFolder);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemPreview, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemPreview(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCUpdateHandle_t handle, const char * pszPreviewFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemPreview(_this->linux_side, handle, pszPreviewFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SubmitItemUpdate, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SubmitItemUpdate(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCUpdateHandle_t handle, const char * pchChangeNote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SubmitItemUpdate(_this->linux_side, handle, pchChangeNote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemUpdateProgress, 20)
+EItemUpdateStatus __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemUpdateProgress(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemUpdateProgress(_this->linux_side, handle, punBytesProcessed, punBytesTotal);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_AddItemToFavorites, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_AddItemToFavorites(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_AddItemToFavorites(_this->linux_side, nAppId, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_RemoveItemFromFavorites, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_RemoveItemFromFavorites(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, AppId_t nAppId, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_RemoveItemFromFavorites(_this->linux_side, nAppId, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SubscribeItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SubscribeItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_SubscribeItem(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_UnsubscribeItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_UnsubscribeItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_UnsubscribeItem(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetNumSubscribedItems, 4)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetNumSubscribedItems(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetNumSubscribedItems(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetSubscribedItems, 12)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetSubscribedItems(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetSubscribedItems(_this->linux_side, pvecPublishedFileID, cMaxEntries);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemState, 12)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemState(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemState(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemInstallInfo, 28)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemInstallInfo(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, uint32 * punTimeStamp)
+{
+ uint32 path_result;
+ TRACE("%p\n", _this);
+ path_result = cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemInstallInfo(_this->linux_side, nPublishedFileID, punSizeOnDisk, pchFolder, cchFolderSize, punTimeStamp);
+ return steamclient_unix_path_to_dos_path(path_result, pchFolder, cchFolderSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemDownloadInfo, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemDownloadInfo(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, PublishedFileId_t nPublishedFileID, uint64 * punBytesDownloaded, uint64 * punBytesTotal)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemDownloadInfo(_this->linux_side, nPublishedFileID, punBytesDownloaded, punBytesTotal);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_DownloadItem, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION005_DownloadItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *_this, PublishedFileId_t nPublishedFileID, bool bHighPriority)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION005_DownloadItem(_this->linux_side, nPublishedFileID, bHighPriority);
+}
+
+extern vtable_ptr winISteamUGC_STEAMUGC_INTERFACE_VERSION005_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUGC_STEAMUGC_INTERFACE_VERSION005,
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateQueryUserUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateQueryAllUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateQueryUGCDetailsRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SendQueryUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCResult)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCPreviewURL)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCMetadata)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCChildren)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCStatistic)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCNumAdditionalPreviews)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetQueryUGCAdditionalPreview)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_ReleaseQueryUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_AddRequiredTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_AddExcludedTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnLongDescription)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnMetadata)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnChildren)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnAdditionalPreviews)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetReturnTotalOnly)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetAllowCachedResponse)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetCloudFileNameFilter)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetMatchAnyTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetSearchText)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetRankedByTrendDays)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_RequestUGCDetails)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_CreateItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_StartItemUpdate)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemTitle)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemDescription)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemMetadata)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemVisibility)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemContent)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SetItemPreview)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SubmitItemUpdate)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemUpdateProgress)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_AddItemToFavorites)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_RemoveItemFromFavorites)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_SubscribeItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_UnsubscribeItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetNumSubscribedItems)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetSubscribedItems)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemState)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemInstallInfo)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_GetItemDownloadInfo)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION005_DownloadItem)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *create_winISteamUGC_STEAMUGC_INTERFACE_VERSION005(void *linux_side)
+{
+ winISteamUGC_STEAMUGC_INTERFACE_VERSION005 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUGC_STEAMUGC_INTERFACE_VERSION005));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUGC_STEAMUGC_INTERFACE_VERSION005_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUGC_STEAMUGC_INTERFACE_VERSION003.h"
+
+typedef struct __winISteamUGC_STEAMUGC_INTERFACE_VERSION003 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUGC_STEAMUGC_INTERFACE_VERSION003;
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_CreateQueryUserUGCRequest, 32)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_CreateQueryUserUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_CreateQueryUserUGCRequest(_this->linux_side, unAccountID, eListType, eMatchingUGCType, eSortOrder, nCreatorAppID, nConsumerAppID, unPage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_CreateQueryAllUGCRequest, 24)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_CreateQueryAllUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_CreateQueryAllUGCRequest(_this->linux_side, eQueryType, eMatchingeMatchingUGCTypeFileType, nCreatorAppID, nConsumerAppID, unPage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SendQueryUGCRequest, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SendQueryUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCQueryHandle_t handle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SendQueryUGCRequest(_this->linux_side, handle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetQueryUGCResult, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetQueryUGCResult(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t * pDetails)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetQueryUGCResult(_this->linux_side, handle, index, pDetails);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_ReleaseQueryUGCRequest, 12)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_ReleaseQueryUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCQueryHandle_t handle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_ReleaseQueryUGCRequest(_this->linux_side, handle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_AddRequiredTag, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_AddRequiredTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCQueryHandle_t handle, const char * pTagName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_AddRequiredTag(_this->linux_side, handle, pTagName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_AddExcludedTag, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_AddExcludedTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCQueryHandle_t handle, const char * pTagName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_AddExcludedTag(_this->linux_side, handle, pTagName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetReturnLongDescription, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetReturnLongDescription(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCQueryHandle_t handle, bool bReturnLongDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetReturnLongDescription(_this->linux_side, handle, bReturnLongDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetReturnTotalOnly, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetReturnTotalOnly(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCQueryHandle_t handle, bool bReturnTotalOnly)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetReturnTotalOnly(_this->linux_side, handle, bReturnTotalOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetAllowCachedResponse, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetAllowCachedResponse(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetAllowCachedResponse(_this->linux_side, handle, unMaxAgeSeconds);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetCloudFileNameFilter, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetCloudFileNameFilter(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCQueryHandle_t handle, const char * pMatchCloudFileName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetCloudFileNameFilter(_this->linux_side, handle, pMatchCloudFileName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetMatchAnyTag, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetMatchAnyTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCQueryHandle_t handle, bool bMatchAnyTag)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetMatchAnyTag(_this->linux_side, handle, bMatchAnyTag);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetSearchText, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetSearchText(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCQueryHandle_t handle, const char * pSearchText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetSearchText(_this->linux_side, handle, pSearchText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetRankedByTrendDays, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetRankedByTrendDays(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCQueryHandle_t handle, uint32 unDays)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetRankedByTrendDays(_this->linux_side, handle, unDays);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_RequestUGCDetails, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_RequestUGCDetails(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_RequestUGCDetails(_this->linux_side, nPublishedFileID, unMaxAgeSeconds);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_CreateItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_CreateItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, AppId_t nConsumerAppId, EWorkshopFileType eFileType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_CreateItem(_this->linux_side, nConsumerAppId, eFileType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_StartItemUpdate, 16)
+UGCUpdateHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_StartItemUpdate(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_StartItemUpdate(_this->linux_side, nConsumerAppId, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemTitle, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemTitle(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCUpdateHandle_t handle, const char * pchTitle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemTitle(_this->linux_side, handle, pchTitle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemDescription, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemDescription(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCUpdateHandle_t handle, const char * pchDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemDescription(_this->linux_side, handle, pchDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemVisibility, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemVisibility(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemVisibility(_this->linux_side, handle, eVisibility);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemTags, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemTags(_this->linux_side, updateHandle, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemContent, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemContent(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCUpdateHandle_t handle, const char * pszContentFolder)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemContent(_this->linux_side, handle, pszContentFolder);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemPreview, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemPreview(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCUpdateHandle_t handle, const char * pszPreviewFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemPreview(_this->linux_side, handle, pszPreviewFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SubmitItemUpdate, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SubmitItemUpdate(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCUpdateHandle_t handle, const char * pchChangeNote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SubmitItemUpdate(_this->linux_side, handle, pchChangeNote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetItemUpdateProgress, 20)
+EItemUpdateStatus __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetItemUpdateProgress(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetItemUpdateProgress(_this->linux_side, handle, punBytesProcessed, punBytesTotal);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SubscribeItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SubscribeItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_SubscribeItem(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_UnsubscribeItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_UnsubscribeItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_UnsubscribeItem(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetNumSubscribedItems, 4)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetNumSubscribedItems(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetNumSubscribedItems(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetSubscribedItems, 12)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetSubscribedItems(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetSubscribedItems(_this->linux_side, pvecPublishedFileID, cMaxEntries);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetItemInstallInfo, 28)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetItemInstallInfo(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize, bool * pbLegacyItem)
+{
+ uint32 path_result;
+ TRACE("%p\n", _this);
+ path_result = cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetItemInstallInfo(_this->linux_side, nPublishedFileID, punSizeOnDisk, pchFolder, cchFolderSize, pbLegacyItem);
+ return steamclient_unix_path_to_dos_path(path_result, pchFolder, cchFolderSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetItemUpdateInfo, 28)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetItemUpdateInfo(winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *_this, PublishedFileId_t nPublishedFileID, bool * pbNeedsUpdate, bool * pbIsDownloading, uint64 * punBytesDownloaded, uint64 * punBytesTotal)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetItemUpdateInfo(_this->linux_side, nPublishedFileID, pbNeedsUpdate, pbIsDownloading, punBytesDownloaded, punBytesTotal);
+}
+
+extern vtable_ptr winISteamUGC_STEAMUGC_INTERFACE_VERSION003_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUGC_STEAMUGC_INTERFACE_VERSION003,
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_CreateQueryUserUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_CreateQueryAllUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SendQueryUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetQueryUGCResult)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_ReleaseQueryUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_AddRequiredTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_AddExcludedTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetReturnLongDescription)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetReturnTotalOnly)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetAllowCachedResponse)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetCloudFileNameFilter)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetMatchAnyTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetSearchText)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetRankedByTrendDays)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_RequestUGCDetails)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_CreateItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_StartItemUpdate)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemTitle)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemDescription)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemVisibility)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemContent)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SetItemPreview)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SubmitItemUpdate)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetItemUpdateProgress)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_SubscribeItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_UnsubscribeItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetNumSubscribedItems)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetSubscribedItems)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetItemInstallInfo)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION003_GetItemUpdateInfo)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *create_winISteamUGC_STEAMUGC_INTERFACE_VERSION003(void *linux_side)
+{
+ winISteamUGC_STEAMUGC_INTERFACE_VERSION003 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUGC_STEAMUGC_INTERFACE_VERSION003));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUGC_STEAMUGC_INTERFACE_VERSION003_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUGC_STEAMUGC_INTERFACE_VERSION002.h"
+
+typedef struct __winISteamUGC_STEAMUGC_INTERFACE_VERSION002 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUGC_STEAMUGC_INTERFACE_VERSION002;
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_CreateQueryUserUGCRequest, 32)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_CreateQueryUserUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_CreateQueryUserUGCRequest(_this->linux_side, unAccountID, eListType, eMatchingUGCType, eSortOrder, nCreatorAppID, nConsumerAppID, unPage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_CreateQueryAllUGCRequest, 24)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_CreateQueryAllUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_CreateQueryAllUGCRequest(_this->linux_side, eQueryType, eMatchingeMatchingUGCTypeFileType, nCreatorAppID, nConsumerAppID, unPage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SendQueryUGCRequest, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SendQueryUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCQueryHandle_t handle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SendQueryUGCRequest(_this->linux_side, handle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetQueryUGCResult, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetQueryUGCResult(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t * pDetails)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetQueryUGCResult(_this->linux_side, handle, index, pDetails);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_ReleaseQueryUGCRequest, 12)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_ReleaseQueryUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCQueryHandle_t handle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_ReleaseQueryUGCRequest(_this->linux_side, handle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_AddRequiredTag, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_AddRequiredTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCQueryHandle_t handle, const char * pTagName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_AddRequiredTag(_this->linux_side, handle, pTagName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_AddExcludedTag, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_AddExcludedTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCQueryHandle_t handle, const char * pTagName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_AddExcludedTag(_this->linux_side, handle, pTagName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetReturnLongDescription, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetReturnLongDescription(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCQueryHandle_t handle, bool bReturnLongDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetReturnLongDescription(_this->linux_side, handle, bReturnLongDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetReturnTotalOnly, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetReturnTotalOnly(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCQueryHandle_t handle, bool bReturnTotalOnly)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetReturnTotalOnly(_this->linux_side, handle, bReturnTotalOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetAllowCachedResponse, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetAllowCachedResponse(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCQueryHandle_t handle, uint32 unMaxAgeSeconds)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetAllowCachedResponse(_this->linux_side, handle, unMaxAgeSeconds);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetCloudFileNameFilter, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetCloudFileNameFilter(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCQueryHandle_t handle, const char * pMatchCloudFileName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetCloudFileNameFilter(_this->linux_side, handle, pMatchCloudFileName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetMatchAnyTag, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetMatchAnyTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCQueryHandle_t handle, bool bMatchAnyTag)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetMatchAnyTag(_this->linux_side, handle, bMatchAnyTag);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetSearchText, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetSearchText(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCQueryHandle_t handle, const char * pSearchText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetSearchText(_this->linux_side, handle, pSearchText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetRankedByTrendDays, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetRankedByTrendDays(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCQueryHandle_t handle, uint32 unDays)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetRankedByTrendDays(_this->linux_side, handle, unDays);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_RequestUGCDetails, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_RequestUGCDetails(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_RequestUGCDetails(_this->linux_side, nPublishedFileID, unMaxAgeSeconds);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_CreateItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_CreateItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, AppId_t nConsumerAppId, EWorkshopFileType eFileType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_CreateItem(_this->linux_side, nConsumerAppId, eFileType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_StartItemUpdate, 16)
+UGCUpdateHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_StartItemUpdate(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_StartItemUpdate(_this->linux_side, nConsumerAppId, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemTitle, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemTitle(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCUpdateHandle_t handle, const char * pchTitle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemTitle(_this->linux_side, handle, pchTitle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemDescription, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemDescription(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCUpdateHandle_t handle, const char * pchDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemDescription(_this->linux_side, handle, pchDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemVisibility, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemVisibility(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemVisibility(_this->linux_side, handle, eVisibility);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemTags, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemTags(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t * pTags)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemTags(_this->linux_side, updateHandle, pTags);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemContent, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemContent(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCUpdateHandle_t handle, const char * pszContentFolder)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemContent(_this->linux_side, handle, pszContentFolder);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemPreview, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemPreview(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCUpdateHandle_t handle, const char * pszPreviewFile)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemPreview(_this->linux_side, handle, pszPreviewFile);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SubmitItemUpdate, 16)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SubmitItemUpdate(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCUpdateHandle_t handle, const char * pchChangeNote)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SubmitItemUpdate(_this->linux_side, handle, pchChangeNote);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetItemUpdateProgress, 20)
+EItemUpdateStatus __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetItemUpdateProgress(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, UGCUpdateHandle_t handle, uint64 * punBytesProcessed, uint64 * punBytesTotal)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetItemUpdateProgress(_this->linux_side, handle, punBytesProcessed, punBytesTotal);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SubscribeItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SubscribeItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_SubscribeItem(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_UnsubscribeItem, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_UnsubscribeItem(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_UnsubscribeItem(_this->linux_side, nPublishedFileID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetNumSubscribedItems, 4)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetNumSubscribedItems(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetNumSubscribedItems(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetSubscribedItems, 12)
+uint32 __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetSubscribedItems(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetSubscribedItems(_this->linux_side, pvecPublishedFileID, cMaxEntries);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetItemInstallInfo, 24)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetItemInstallInfo(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, PublishedFileId_t nPublishedFileID, uint64 * punSizeOnDisk, char * pchFolder, uint32 cchFolderSize)
+{
+ uint32 path_result;
+ TRACE("%p\n", _this);
+ path_result = cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetItemInstallInfo(_this->linux_side, nPublishedFileID, punSizeOnDisk, pchFolder, cchFolderSize);
+ return steamclient_unix_path_to_dos_path(path_result, pchFolder, cchFolderSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetItemUpdateInfo, 28)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetItemUpdateInfo(winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *_this, PublishedFileId_t nPublishedFileID, bool * pbNeedsUpdate, bool * pbIsDownloading, uint64 * punBytesDownloaded, uint64 * punBytesTotal)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetItemUpdateInfo(_this->linux_side, nPublishedFileID, pbNeedsUpdate, pbIsDownloading, punBytesDownloaded, punBytesTotal);
+}
+
+extern vtable_ptr winISteamUGC_STEAMUGC_INTERFACE_VERSION002_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUGC_STEAMUGC_INTERFACE_VERSION002,
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_CreateQueryUserUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_CreateQueryAllUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SendQueryUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetQueryUGCResult)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_ReleaseQueryUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_AddRequiredTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_AddExcludedTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetReturnLongDescription)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetReturnTotalOnly)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetAllowCachedResponse)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetCloudFileNameFilter)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetMatchAnyTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetSearchText)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetRankedByTrendDays)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_RequestUGCDetails)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_CreateItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_StartItemUpdate)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemTitle)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemDescription)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemVisibility)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemTags)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemContent)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SetItemPreview)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SubmitItemUpdate)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetItemUpdateProgress)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_SubscribeItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_UnsubscribeItem)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetNumSubscribedItems)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetSubscribedItems)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetItemInstallInfo)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION002_GetItemUpdateInfo)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *create_winISteamUGC_STEAMUGC_INTERFACE_VERSION002(void *linux_side)
+{
+ winISteamUGC_STEAMUGC_INTERFACE_VERSION002 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUGC_STEAMUGC_INTERFACE_VERSION002));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUGC_STEAMUGC_INTERFACE_VERSION002_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUGC_STEAMUGC_INTERFACE_VERSION001.h"
+
+typedef struct __winISteamUGC_STEAMUGC_INTERFACE_VERSION001 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUGC_STEAMUGC_INTERFACE_VERSION001;
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_CreateQueryUserUGCRequest, 32)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION001_CreateQueryUserUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION001 *_this, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_CreateQueryUserUGCRequest(_this->linux_side, unAccountID, eListType, eMatchingUGCType, eSortOrder, nCreatorAppID, nConsumerAppID, unPage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_CreateQueryAllUGCRequest, 24)
+UGCQueryHandle_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION001_CreateQueryAllUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION001 *_this, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_CreateQueryAllUGCRequest(_this->linux_side, eQueryType, eMatchingeMatchingUGCTypeFileType, nCreatorAppID, nConsumerAppID, unPage);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SendQueryUGCRequest, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SendQueryUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION001 *_this, UGCQueryHandle_t handle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SendQueryUGCRequest(_this->linux_side, handle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_GetQueryUGCResult, 20)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION001_GetQueryUGCResult(winISteamUGC_STEAMUGC_INTERFACE_VERSION001 *_this, UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t * pDetails)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_GetQueryUGCResult(_this->linux_side, handle, index, pDetails);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_ReleaseQueryUGCRequest, 12)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION001_ReleaseQueryUGCRequest(winISteamUGC_STEAMUGC_INTERFACE_VERSION001 *_this, UGCQueryHandle_t handle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_ReleaseQueryUGCRequest(_this->linux_side, handle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_AddRequiredTag, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION001_AddRequiredTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION001 *_this, UGCQueryHandle_t handle, const char * pTagName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_AddRequiredTag(_this->linux_side, handle, pTagName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_AddExcludedTag, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION001_AddExcludedTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION001 *_this, UGCQueryHandle_t handle, const char * pTagName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_AddExcludedTag(_this->linux_side, handle, pTagName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetReturnLongDescription, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetReturnLongDescription(winISteamUGC_STEAMUGC_INTERFACE_VERSION001 *_this, UGCQueryHandle_t handle, bool bReturnLongDescription)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetReturnLongDescription(_this->linux_side, handle, bReturnLongDescription);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetReturnTotalOnly, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetReturnTotalOnly(winISteamUGC_STEAMUGC_INTERFACE_VERSION001 *_this, UGCQueryHandle_t handle, bool bReturnTotalOnly)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetReturnTotalOnly(_this->linux_side, handle, bReturnTotalOnly);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetCloudFileNameFilter, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetCloudFileNameFilter(winISteamUGC_STEAMUGC_INTERFACE_VERSION001 *_this, UGCQueryHandle_t handle, const char * pMatchCloudFileName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetCloudFileNameFilter(_this->linux_side, handle, pMatchCloudFileName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetMatchAnyTag, 13)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetMatchAnyTag(winISteamUGC_STEAMUGC_INTERFACE_VERSION001 *_this, UGCQueryHandle_t handle, bool bMatchAnyTag)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetMatchAnyTag(_this->linux_side, handle, bMatchAnyTag);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetSearchText, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetSearchText(winISteamUGC_STEAMUGC_INTERFACE_VERSION001 *_this, UGCQueryHandle_t handle, const char * pSearchText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetSearchText(_this->linux_side, handle, pSearchText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetRankedByTrendDays, 16)
+bool __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetRankedByTrendDays(winISteamUGC_STEAMUGC_INTERFACE_VERSION001 *_this, UGCQueryHandle_t handle, uint32 unDays)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetRankedByTrendDays(_this->linux_side, handle, unDays);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_RequestUGCDetails, 12)
+SteamAPICall_t __thiscall winISteamUGC_STEAMUGC_INTERFACE_VERSION001_RequestUGCDetails(winISteamUGC_STEAMUGC_INTERFACE_VERSION001 *_this, PublishedFileId_t nPublishedFileID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUGC_STEAMUGC_INTERFACE_VERSION001_RequestUGCDetails(_this->linux_side, nPublishedFileID);
+}
+
+extern vtable_ptr winISteamUGC_STEAMUGC_INTERFACE_VERSION001_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUGC_STEAMUGC_INTERFACE_VERSION001,
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_CreateQueryUserUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_CreateQueryAllUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SendQueryUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_GetQueryUGCResult)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_ReleaseQueryUGCRequest)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_AddRequiredTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_AddExcludedTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetReturnLongDescription)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetReturnTotalOnly)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetCloudFileNameFilter)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetMatchAnyTag)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetSearchText)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_SetRankedByTrendDays)
+ VTABLE_ADD_FUNC(winISteamUGC_STEAMUGC_INTERFACE_VERSION001_RequestUGCDetails)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUGC_STEAMUGC_INTERFACE_VERSION001 *create_winISteamUGC_STEAMUGC_INTERFACE_VERSION001(void *linux_side)
+{
+ winISteamUGC_STEAMUGC_INTERFACE_VERSION001 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUGC_STEAMUGC_INTERFACE_VERSION001));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUGC_STEAMUGC_INTERFACE_VERSION001_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamUnifiedMessages.c b/lsteamclient/winISteamUnifiedMessages.c
new file mode 100644
index 00000000..d8073167
--- /dev/null
+++ b/lsteamclient/winISteamUnifiedMessages.c
@@ -0,0 +1,86 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001.h"
+
+typedef struct __winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001;
+
+DEFINE_THISCALL_WRAPPER(winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_SendMethod, 24)
+ClientUnifiedMessageHandle __thiscall winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_SendMethod(winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001 *_this, const char * pchServiceMethod, const void * pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_SendMethod(_this->linux_side, pchServiceMethod, pRequestBuffer, unRequestBufferSize, unContext);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_GetMethodResponseInfo, 20)
+bool __thiscall winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_GetMethodResponseInfo(winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001 *_this, ClientUnifiedMessageHandle hHandle, uint32 * punResponseSize, EResult * peResult)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_GetMethodResponseInfo(_this->linux_side, hHandle, punResponseSize, peResult);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_GetMethodResponseData, 21)
+bool __thiscall winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_GetMethodResponseData(winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001 *_this, ClientUnifiedMessageHandle hHandle, void * pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_GetMethodResponseData(_this->linux_side, hHandle, pResponseBuffer, unResponseBufferSize, bAutoRelease);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_ReleaseMethod, 12)
+bool __thiscall winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_ReleaseMethod(winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001 *_this, ClientUnifiedMessageHandle hHandle)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_ReleaseMethod(_this->linux_side, hHandle);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_SendNotification, 16)
+bool __thiscall winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_SendNotification(winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001 *_this, const char * pchServiceNotification, const void * pNotificationBuffer, uint32 unNotificationBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_SendNotification(_this->linux_side, pchServiceNotification, pNotificationBuffer, unNotificationBufferSize);
+}
+
+extern vtable_ptr winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001,
+ VTABLE_ADD_FUNC(winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_SendMethod)
+ VTABLE_ADD_FUNC(winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_GetMethodResponseInfo)
+ VTABLE_ADD_FUNC(winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_GetMethodResponseData)
+ VTABLE_ADD_FUNC(winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_ReleaseMethod)
+ VTABLE_ADD_FUNC(winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_SendNotification)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001 *create_winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001(void *linux_side)
+{
+ winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamUser.c b/lsteamclient/winISteamUser.c
new file mode 100644
index 00000000..ead3d883
--- /dev/null
+++ b/lsteamclient/winISteamUser.c
@@ -0,0 +1,1723 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamUser_SteamUser019.h"
+
+typedef struct __winISteamUser_SteamUser019 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUser_SteamUser019;
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_GetHSteamUser, 4)
+HSteamUser __thiscall winISteamUser_SteamUser019_GetHSteamUser(winISteamUser_SteamUser019 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_GetHSteamUser(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_BLoggedOn, 4)
+bool __thiscall winISteamUser_SteamUser019_BLoggedOn(winISteamUser_SteamUser019 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_BLoggedOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_GetSteamID, 8)
+CSteamID *__thiscall winISteamUser_SteamUser019_GetSteamID(winISteamUser_SteamUser019 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamUser_SteamUser019_GetSteamID(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_InitiateGameConnection, 27)
+int __thiscall winISteamUser_SteamUser019_InitiateGameConnection(winISteamUser_SteamUser019 *_this, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_InitiateGameConnection(_this->linux_side, pAuthBlob, cbMaxAuthBlob, steamIDGameServer, unIPServer, usPortServer, bSecure);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_TerminateGameConnection, 10)
+void __thiscall winISteamUser_SteamUser019_TerminateGameConnection(winISteamUser_SteamUser019 *_this, uint32 unIPServer, uint16 usPortServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser019_TerminateGameConnection(_this->linux_side, unIPServer, usPortServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_TrackAppUsageEvent, 20)
+void __thiscall winISteamUser_SteamUser019_TrackAppUsageEvent(winISteamUser_SteamUser019 *_this, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser019_TrackAppUsageEvent(_this->linux_side, gameID, eAppUsageEvent, pchExtraInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_GetUserDataFolder, 12)
+bool __thiscall winISteamUser_SteamUser019_GetUserDataFolder(winISteamUser_SteamUser019 *_this, char * pchBuffer, int cubBuffer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_GetUserDataFolder(_this->linux_side, pchBuffer, cubBuffer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_StartVoiceRecording, 4)
+void __thiscall winISteamUser_SteamUser019_StartVoiceRecording(winISteamUser_SteamUser019 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser019_StartVoiceRecording(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_StopVoiceRecording, 4)
+void __thiscall winISteamUser_SteamUser019_StopVoiceRecording(winISteamUser_SteamUser019 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser019_StopVoiceRecording(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_GetAvailableVoice, 16)
+EVoiceResult __thiscall winISteamUser_SteamUser019_GetAvailableVoice(winISteamUser_SteamUser019 *_this, uint32 * pcbCompressed, uint32 * pcbUncompressed_Deprecated, uint32 nUncompressedVoiceDesiredSampleRate_Deprecated)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_GetAvailableVoice(_this->linux_side, pcbCompressed, pcbUncompressed_Deprecated, nUncompressedVoiceDesiredSampleRate_Deprecated);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_GetVoice, 34)
+EVoiceResult __thiscall winISteamUser_SteamUser019_GetVoice(winISteamUser_SteamUser019 *_this, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed_Deprecated, void * pUncompressedDestBuffer_Deprecated, uint32 cbUncompressedDestBufferSize_Deprecated, uint32 * nUncompressBytesWritten_Deprecated, uint32 nUncompressedVoiceDesiredSampleRate_Deprecated)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_GetVoice(_this->linux_side, bWantCompressed, pDestBuffer, cbDestBufferSize, nBytesWritten, bWantUncompressed_Deprecated, pUncompressedDestBuffer_Deprecated, cbUncompressedDestBufferSize_Deprecated, nUncompressBytesWritten_Deprecated, nUncompressedVoiceDesiredSampleRate_Deprecated);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_DecompressVoice, 28)
+EVoiceResult __thiscall winISteamUser_SteamUser019_DecompressVoice(winISteamUser_SteamUser019 *_this, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_DecompressVoice(_this->linux_side, pCompressed, cbCompressed, pDestBuffer, cbDestBufferSize, nBytesWritten, nDesiredSampleRate);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_GetVoiceOptimalSampleRate, 4)
+uint32 __thiscall winISteamUser_SteamUser019_GetVoiceOptimalSampleRate(winISteamUser_SteamUser019 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_GetVoiceOptimalSampleRate(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_GetAuthSessionTicket, 16)
+HAuthTicket __thiscall winISteamUser_SteamUser019_GetAuthSessionTicket(winISteamUser_SteamUser019 *_this, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_GetAuthSessionTicket(_this->linux_side, pTicket, cbMaxTicket, pcbTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_BeginAuthSession, 20)
+EBeginAuthSessionResult __thiscall winISteamUser_SteamUser019_BeginAuthSession(winISteamUser_SteamUser019 *_this, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_BeginAuthSession(_this->linux_side, pAuthTicket, cbAuthTicket, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_EndAuthSession, 12)
+void __thiscall winISteamUser_SteamUser019_EndAuthSession(winISteamUser_SteamUser019 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser019_EndAuthSession(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_CancelAuthTicket, 8)
+void __thiscall winISteamUser_SteamUser019_CancelAuthTicket(winISteamUser_SteamUser019 *_this, HAuthTicket hAuthTicket)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser019_CancelAuthTicket(_this->linux_side, hAuthTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_UserHasLicenseForApp, 16)
+EUserHasLicenseForAppResult __thiscall winISteamUser_SteamUser019_UserHasLicenseForApp(winISteamUser_SteamUser019 *_this, CSteamID steamID, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_UserHasLicenseForApp(_this->linux_side, steamID, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_BIsBehindNAT, 4)
+bool __thiscall winISteamUser_SteamUser019_BIsBehindNAT(winISteamUser_SteamUser019 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_BIsBehindNAT(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_AdvertiseGame, 18)
+void __thiscall winISteamUser_SteamUser019_AdvertiseGame(winISteamUser_SteamUser019 *_this, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser019_AdvertiseGame(_this->linux_side, steamIDGameServer, unIPServer, usPortServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_RequestEncryptedAppTicket, 12)
+SteamAPICall_t __thiscall winISteamUser_SteamUser019_RequestEncryptedAppTicket(winISteamUser_SteamUser019 *_this, void * pDataToInclude, int cbDataToInclude)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_RequestEncryptedAppTicket(_this->linux_side, pDataToInclude, cbDataToInclude);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_GetEncryptedAppTicket, 16)
+bool __thiscall winISteamUser_SteamUser019_GetEncryptedAppTicket(winISteamUser_SteamUser019 *_this, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_GetEncryptedAppTicket(_this->linux_side, pTicket, cbMaxTicket, pcbTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_GetGameBadgeLevel, 9)
+int __thiscall winISteamUser_SteamUser019_GetGameBadgeLevel(winISteamUser_SteamUser019 *_this, int nSeries, bool bFoil)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_GetGameBadgeLevel(_this->linux_side, nSeries, bFoil);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_GetPlayerSteamLevel, 4)
+int __thiscall winISteamUser_SteamUser019_GetPlayerSteamLevel(winISteamUser_SteamUser019 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_GetPlayerSteamLevel(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_RequestStoreAuthURL, 8)
+SteamAPICall_t __thiscall winISteamUser_SteamUser019_RequestStoreAuthURL(winISteamUser_SteamUser019 *_this, const char * pchRedirectURL)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_RequestStoreAuthURL(_this->linux_side, pchRedirectURL);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_BIsPhoneVerified, 4)
+bool __thiscall winISteamUser_SteamUser019_BIsPhoneVerified(winISteamUser_SteamUser019 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_BIsPhoneVerified(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_BIsTwoFactorEnabled, 4)
+bool __thiscall winISteamUser_SteamUser019_BIsTwoFactorEnabled(winISteamUser_SteamUser019 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_BIsTwoFactorEnabled(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_BIsPhoneIdentifying, 4)
+bool __thiscall winISteamUser_SteamUser019_BIsPhoneIdentifying(winISteamUser_SteamUser019 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_BIsPhoneIdentifying(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser019_BIsPhoneRequiringVerification, 4)
+bool __thiscall winISteamUser_SteamUser019_BIsPhoneRequiringVerification(winISteamUser_SteamUser019 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser019_BIsPhoneRequiringVerification(_this->linux_side);
+}
+
+extern vtable_ptr winISteamUser_SteamUser019_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUser_SteamUser019,
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_GetHSteamUser)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_BLoggedOn)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_GetSteamID)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_InitiateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_TerminateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_TrackAppUsageEvent)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_GetUserDataFolder)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_StartVoiceRecording)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_StopVoiceRecording)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_GetAvailableVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_GetVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_DecompressVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_GetVoiceOptimalSampleRate)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_GetAuthSessionTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_BeginAuthSession)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_EndAuthSession)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_CancelAuthTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_UserHasLicenseForApp)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_BIsBehindNAT)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_AdvertiseGame)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_RequestEncryptedAppTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_GetEncryptedAppTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_GetGameBadgeLevel)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_GetPlayerSteamLevel)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_RequestStoreAuthURL)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_BIsPhoneVerified)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_BIsTwoFactorEnabled)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_BIsPhoneIdentifying)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser019_BIsPhoneRequiringVerification)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUser_SteamUser019 *create_winISteamUser_SteamUser019(void *linux_side)
+{
+ winISteamUser_SteamUser019 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUser_SteamUser019));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUser_SteamUser019_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUser_SteamUser018.h"
+
+typedef struct __winISteamUser_SteamUser018 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUser_SteamUser018;
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_GetHSteamUser, 4)
+HSteamUser __thiscall winISteamUser_SteamUser018_GetHSteamUser(winISteamUser_SteamUser018 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser018_GetHSteamUser(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_BLoggedOn, 4)
+bool __thiscall winISteamUser_SteamUser018_BLoggedOn(winISteamUser_SteamUser018 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser018_BLoggedOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_GetSteamID, 8)
+CSteamID *__thiscall winISteamUser_SteamUser018_GetSteamID(winISteamUser_SteamUser018 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamUser_SteamUser018_GetSteamID(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_InitiateGameConnection, 27)
+int __thiscall winISteamUser_SteamUser018_InitiateGameConnection(winISteamUser_SteamUser018 *_this, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser018_InitiateGameConnection(_this->linux_side, pAuthBlob, cbMaxAuthBlob, steamIDGameServer, unIPServer, usPortServer, bSecure);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_TerminateGameConnection, 10)
+void __thiscall winISteamUser_SteamUser018_TerminateGameConnection(winISteamUser_SteamUser018 *_this, uint32 unIPServer, uint16 usPortServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser018_TerminateGameConnection(_this->linux_side, unIPServer, usPortServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_TrackAppUsageEvent, 20)
+void __thiscall winISteamUser_SteamUser018_TrackAppUsageEvent(winISteamUser_SteamUser018 *_this, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser018_TrackAppUsageEvent(_this->linux_side, gameID, eAppUsageEvent, pchExtraInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_GetUserDataFolder, 12)
+bool __thiscall winISteamUser_SteamUser018_GetUserDataFolder(winISteamUser_SteamUser018 *_this, char * pchBuffer, int cubBuffer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser018_GetUserDataFolder(_this->linux_side, pchBuffer, cubBuffer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_StartVoiceRecording, 4)
+void __thiscall winISteamUser_SteamUser018_StartVoiceRecording(winISteamUser_SteamUser018 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser018_StartVoiceRecording(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_StopVoiceRecording, 4)
+void __thiscall winISteamUser_SteamUser018_StopVoiceRecording(winISteamUser_SteamUser018 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser018_StopVoiceRecording(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_GetAvailableVoice, 16)
+EVoiceResult __thiscall winISteamUser_SteamUser018_GetAvailableVoice(winISteamUser_SteamUser018 *_this, uint32 * pcbCompressed, uint32 * pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser018_GetAvailableVoice(_this->linux_side, pcbCompressed, pcbUncompressed, nUncompressedVoiceDesiredSampleRate);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_GetVoice, 34)
+EVoiceResult __thiscall winISteamUser_SteamUser018_GetVoice(winISteamUser_SteamUser018 *_this, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser018_GetVoice(_this->linux_side, bWantCompressed, pDestBuffer, cbDestBufferSize, nBytesWritten, bWantUncompressed, pUncompressedDestBuffer, cbUncompressedDestBufferSize, nUncompressBytesWritten, nUncompressedVoiceDesiredSampleRate);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_DecompressVoice, 28)
+EVoiceResult __thiscall winISteamUser_SteamUser018_DecompressVoice(winISteamUser_SteamUser018 *_this, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser018_DecompressVoice(_this->linux_side, pCompressed, cbCompressed, pDestBuffer, cbDestBufferSize, nBytesWritten, nDesiredSampleRate);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_GetVoiceOptimalSampleRate, 4)
+uint32 __thiscall winISteamUser_SteamUser018_GetVoiceOptimalSampleRate(winISteamUser_SteamUser018 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser018_GetVoiceOptimalSampleRate(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_GetAuthSessionTicket, 16)
+HAuthTicket __thiscall winISteamUser_SteamUser018_GetAuthSessionTicket(winISteamUser_SteamUser018 *_this, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser018_GetAuthSessionTicket(_this->linux_side, pTicket, cbMaxTicket, pcbTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_BeginAuthSession, 20)
+EBeginAuthSessionResult __thiscall winISteamUser_SteamUser018_BeginAuthSession(winISteamUser_SteamUser018 *_this, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser018_BeginAuthSession(_this->linux_side, pAuthTicket, cbAuthTicket, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_EndAuthSession, 12)
+void __thiscall winISteamUser_SteamUser018_EndAuthSession(winISteamUser_SteamUser018 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser018_EndAuthSession(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_CancelAuthTicket, 8)
+void __thiscall winISteamUser_SteamUser018_CancelAuthTicket(winISteamUser_SteamUser018 *_this, HAuthTicket hAuthTicket)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser018_CancelAuthTicket(_this->linux_side, hAuthTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_UserHasLicenseForApp, 16)
+EUserHasLicenseForAppResult __thiscall winISteamUser_SteamUser018_UserHasLicenseForApp(winISteamUser_SteamUser018 *_this, CSteamID steamID, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser018_UserHasLicenseForApp(_this->linux_side, steamID, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_BIsBehindNAT, 4)
+bool __thiscall winISteamUser_SteamUser018_BIsBehindNAT(winISteamUser_SteamUser018 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser018_BIsBehindNAT(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_AdvertiseGame, 18)
+void __thiscall winISteamUser_SteamUser018_AdvertiseGame(winISteamUser_SteamUser018 *_this, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser018_AdvertiseGame(_this->linux_side, steamIDGameServer, unIPServer, usPortServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_RequestEncryptedAppTicket, 12)
+SteamAPICall_t __thiscall winISteamUser_SteamUser018_RequestEncryptedAppTicket(winISteamUser_SteamUser018 *_this, void * pDataToInclude, int cbDataToInclude)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser018_RequestEncryptedAppTicket(_this->linux_side, pDataToInclude, cbDataToInclude);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_GetEncryptedAppTicket, 16)
+bool __thiscall winISteamUser_SteamUser018_GetEncryptedAppTicket(winISteamUser_SteamUser018 *_this, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser018_GetEncryptedAppTicket(_this->linux_side, pTicket, cbMaxTicket, pcbTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_GetGameBadgeLevel, 9)
+int __thiscall winISteamUser_SteamUser018_GetGameBadgeLevel(winISteamUser_SteamUser018 *_this, int nSeries, bool bFoil)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser018_GetGameBadgeLevel(_this->linux_side, nSeries, bFoil);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_GetPlayerSteamLevel, 4)
+int __thiscall winISteamUser_SteamUser018_GetPlayerSteamLevel(winISteamUser_SteamUser018 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser018_GetPlayerSteamLevel(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser018_RequestStoreAuthURL, 8)
+SteamAPICall_t __thiscall winISteamUser_SteamUser018_RequestStoreAuthURL(winISteamUser_SteamUser018 *_this, const char * pchRedirectURL)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser018_RequestStoreAuthURL(_this->linux_side, pchRedirectURL);
+}
+
+extern vtable_ptr winISteamUser_SteamUser018_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUser_SteamUser018,
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_GetHSteamUser)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_BLoggedOn)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_GetSteamID)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_InitiateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_TerminateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_TrackAppUsageEvent)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_GetUserDataFolder)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_StartVoiceRecording)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_StopVoiceRecording)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_GetAvailableVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_GetVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_DecompressVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_GetVoiceOptimalSampleRate)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_GetAuthSessionTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_BeginAuthSession)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_EndAuthSession)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_CancelAuthTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_UserHasLicenseForApp)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_BIsBehindNAT)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_AdvertiseGame)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_RequestEncryptedAppTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_GetEncryptedAppTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_GetGameBadgeLevel)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_GetPlayerSteamLevel)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser018_RequestStoreAuthURL)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUser_SteamUser018 *create_winISteamUser_SteamUser018(void *linux_side)
+{
+ winISteamUser_SteamUser018 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUser_SteamUser018));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUser_SteamUser018_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUser_SteamUser017.h"
+
+typedef struct __winISteamUser_SteamUser017 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUser_SteamUser017;
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_GetHSteamUser, 4)
+HSteamUser __thiscall winISteamUser_SteamUser017_GetHSteamUser(winISteamUser_SteamUser017 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser017_GetHSteamUser(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_BLoggedOn, 4)
+bool __thiscall winISteamUser_SteamUser017_BLoggedOn(winISteamUser_SteamUser017 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser017_BLoggedOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_GetSteamID, 8)
+CSteamID *__thiscall winISteamUser_SteamUser017_GetSteamID(winISteamUser_SteamUser017 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamUser_SteamUser017_GetSteamID(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_InitiateGameConnection, 27)
+int __thiscall winISteamUser_SteamUser017_InitiateGameConnection(winISteamUser_SteamUser017 *_this, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser017_InitiateGameConnection(_this->linux_side, pAuthBlob, cbMaxAuthBlob, steamIDGameServer, unIPServer, usPortServer, bSecure);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_TerminateGameConnection, 10)
+void __thiscall winISteamUser_SteamUser017_TerminateGameConnection(winISteamUser_SteamUser017 *_this, uint32 unIPServer, uint16 usPortServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser017_TerminateGameConnection(_this->linux_side, unIPServer, usPortServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_TrackAppUsageEvent, 20)
+void __thiscall winISteamUser_SteamUser017_TrackAppUsageEvent(winISteamUser_SteamUser017 *_this, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser017_TrackAppUsageEvent(_this->linux_side, gameID, eAppUsageEvent, pchExtraInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_GetUserDataFolder, 12)
+bool __thiscall winISteamUser_SteamUser017_GetUserDataFolder(winISteamUser_SteamUser017 *_this, char * pchBuffer, int cubBuffer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser017_GetUserDataFolder(_this->linux_side, pchBuffer, cubBuffer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_StartVoiceRecording, 4)
+void __thiscall winISteamUser_SteamUser017_StartVoiceRecording(winISteamUser_SteamUser017 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser017_StartVoiceRecording(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_StopVoiceRecording, 4)
+void __thiscall winISteamUser_SteamUser017_StopVoiceRecording(winISteamUser_SteamUser017 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser017_StopVoiceRecording(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_GetAvailableVoice, 16)
+EVoiceResult __thiscall winISteamUser_SteamUser017_GetAvailableVoice(winISteamUser_SteamUser017 *_this, uint32 * pcbCompressed, uint32 * pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser017_GetAvailableVoice(_this->linux_side, pcbCompressed, pcbUncompressed, nUncompressedVoiceDesiredSampleRate);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_GetVoice, 34)
+EVoiceResult __thiscall winISteamUser_SteamUser017_GetVoice(winISteamUser_SteamUser017 *_this, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser017_GetVoice(_this->linux_side, bWantCompressed, pDestBuffer, cbDestBufferSize, nBytesWritten, bWantUncompressed, pUncompressedDestBuffer, cbUncompressedDestBufferSize, nUncompressBytesWritten, nUncompressedVoiceDesiredSampleRate);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_DecompressVoice, 28)
+EVoiceResult __thiscall winISteamUser_SteamUser017_DecompressVoice(winISteamUser_SteamUser017 *_this, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser017_DecompressVoice(_this->linux_side, pCompressed, cbCompressed, pDestBuffer, cbDestBufferSize, nBytesWritten, nDesiredSampleRate);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_GetVoiceOptimalSampleRate, 4)
+uint32 __thiscall winISteamUser_SteamUser017_GetVoiceOptimalSampleRate(winISteamUser_SteamUser017 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser017_GetVoiceOptimalSampleRate(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_GetAuthSessionTicket, 16)
+HAuthTicket __thiscall winISteamUser_SteamUser017_GetAuthSessionTicket(winISteamUser_SteamUser017 *_this, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser017_GetAuthSessionTicket(_this->linux_side, pTicket, cbMaxTicket, pcbTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_BeginAuthSession, 20)
+EBeginAuthSessionResult __thiscall winISteamUser_SteamUser017_BeginAuthSession(winISteamUser_SteamUser017 *_this, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser017_BeginAuthSession(_this->linux_side, pAuthTicket, cbAuthTicket, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_EndAuthSession, 12)
+void __thiscall winISteamUser_SteamUser017_EndAuthSession(winISteamUser_SteamUser017 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser017_EndAuthSession(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_CancelAuthTicket, 8)
+void __thiscall winISteamUser_SteamUser017_CancelAuthTicket(winISteamUser_SteamUser017 *_this, HAuthTicket hAuthTicket)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser017_CancelAuthTicket(_this->linux_side, hAuthTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_UserHasLicenseForApp, 16)
+EUserHasLicenseForAppResult __thiscall winISteamUser_SteamUser017_UserHasLicenseForApp(winISteamUser_SteamUser017 *_this, CSteamID steamID, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser017_UserHasLicenseForApp(_this->linux_side, steamID, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_BIsBehindNAT, 4)
+bool __thiscall winISteamUser_SteamUser017_BIsBehindNAT(winISteamUser_SteamUser017 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser017_BIsBehindNAT(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_AdvertiseGame, 18)
+void __thiscall winISteamUser_SteamUser017_AdvertiseGame(winISteamUser_SteamUser017 *_this, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser017_AdvertiseGame(_this->linux_side, steamIDGameServer, unIPServer, usPortServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_RequestEncryptedAppTicket, 12)
+SteamAPICall_t __thiscall winISteamUser_SteamUser017_RequestEncryptedAppTicket(winISteamUser_SteamUser017 *_this, void * pDataToInclude, int cbDataToInclude)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser017_RequestEncryptedAppTicket(_this->linux_side, pDataToInclude, cbDataToInclude);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_GetEncryptedAppTicket, 16)
+bool __thiscall winISteamUser_SteamUser017_GetEncryptedAppTicket(winISteamUser_SteamUser017 *_this, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser017_GetEncryptedAppTicket(_this->linux_side, pTicket, cbMaxTicket, pcbTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_GetGameBadgeLevel, 9)
+int __thiscall winISteamUser_SteamUser017_GetGameBadgeLevel(winISteamUser_SteamUser017 *_this, int nSeries, bool bFoil)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser017_GetGameBadgeLevel(_this->linux_side, nSeries, bFoil);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser017_GetPlayerSteamLevel, 4)
+int __thiscall winISteamUser_SteamUser017_GetPlayerSteamLevel(winISteamUser_SteamUser017 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser017_GetPlayerSteamLevel(_this->linux_side);
+}
+
+extern vtable_ptr winISteamUser_SteamUser017_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUser_SteamUser017,
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_GetHSteamUser)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_BLoggedOn)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_GetSteamID)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_InitiateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_TerminateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_TrackAppUsageEvent)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_GetUserDataFolder)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_StartVoiceRecording)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_StopVoiceRecording)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_GetAvailableVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_GetVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_DecompressVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_GetVoiceOptimalSampleRate)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_GetAuthSessionTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_BeginAuthSession)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_EndAuthSession)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_CancelAuthTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_UserHasLicenseForApp)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_BIsBehindNAT)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_AdvertiseGame)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_RequestEncryptedAppTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_GetEncryptedAppTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_GetGameBadgeLevel)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser017_GetPlayerSteamLevel)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUser_SteamUser017 *create_winISteamUser_SteamUser017(void *linux_side)
+{
+ winISteamUser_SteamUser017 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUser_SteamUser017));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUser_SteamUser017_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUser_SteamUser016.h"
+
+typedef struct __winISteamUser_SteamUser016 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUser_SteamUser016;
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_GetHSteamUser, 4)
+HSteamUser __thiscall winISteamUser_SteamUser016_GetHSteamUser(winISteamUser_SteamUser016 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser016_GetHSteamUser(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_BLoggedOn, 4)
+bool __thiscall winISteamUser_SteamUser016_BLoggedOn(winISteamUser_SteamUser016 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser016_BLoggedOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_GetSteamID, 8)
+CSteamID *__thiscall winISteamUser_SteamUser016_GetSteamID(winISteamUser_SteamUser016 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamUser_SteamUser016_GetSteamID(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_InitiateGameConnection, 27)
+int __thiscall winISteamUser_SteamUser016_InitiateGameConnection(winISteamUser_SteamUser016 *_this, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser016_InitiateGameConnection(_this->linux_side, pAuthBlob, cbMaxAuthBlob, steamIDGameServer, unIPServer, usPortServer, bSecure);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_TerminateGameConnection, 10)
+void __thiscall winISteamUser_SteamUser016_TerminateGameConnection(winISteamUser_SteamUser016 *_this, uint32 unIPServer, uint16 usPortServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser016_TerminateGameConnection(_this->linux_side, unIPServer, usPortServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_TrackAppUsageEvent, 20)
+void __thiscall winISteamUser_SteamUser016_TrackAppUsageEvent(winISteamUser_SteamUser016 *_this, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser016_TrackAppUsageEvent(_this->linux_side, gameID, eAppUsageEvent, pchExtraInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_GetUserDataFolder, 12)
+bool __thiscall winISteamUser_SteamUser016_GetUserDataFolder(winISteamUser_SteamUser016 *_this, char * pchBuffer, int cubBuffer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser016_GetUserDataFolder(_this->linux_side, pchBuffer, cubBuffer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_StartVoiceRecording, 4)
+void __thiscall winISteamUser_SteamUser016_StartVoiceRecording(winISteamUser_SteamUser016 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser016_StartVoiceRecording(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_StopVoiceRecording, 4)
+void __thiscall winISteamUser_SteamUser016_StopVoiceRecording(winISteamUser_SteamUser016 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser016_StopVoiceRecording(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_GetAvailableVoice, 16)
+EVoiceResult __thiscall winISteamUser_SteamUser016_GetAvailableVoice(winISteamUser_SteamUser016 *_this, uint32 * pcbCompressed, uint32 * pcbUncompressed, uint32 nUncompressedVoiceDesiredSampleRate)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser016_GetAvailableVoice(_this->linux_side, pcbCompressed, pcbUncompressed, nUncompressedVoiceDesiredSampleRate);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_GetVoice, 34)
+EVoiceResult __thiscall winISteamUser_SteamUser016_GetVoice(winISteamUser_SteamUser016 *_this, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten, uint32 nUncompressedVoiceDesiredSampleRate)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser016_GetVoice(_this->linux_side, bWantCompressed, pDestBuffer, cbDestBufferSize, nBytesWritten, bWantUncompressed, pUncompressedDestBuffer, cbUncompressedDestBufferSize, nUncompressBytesWritten, nUncompressedVoiceDesiredSampleRate);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_DecompressVoice, 28)
+EVoiceResult __thiscall winISteamUser_SteamUser016_DecompressVoice(winISteamUser_SteamUser016 *_this, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, uint32 nDesiredSampleRate)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser016_DecompressVoice(_this->linux_side, pCompressed, cbCompressed, pDestBuffer, cbDestBufferSize, nBytesWritten, nDesiredSampleRate);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_GetVoiceOptimalSampleRate, 4)
+uint32 __thiscall winISteamUser_SteamUser016_GetVoiceOptimalSampleRate(winISteamUser_SteamUser016 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser016_GetVoiceOptimalSampleRate(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_GetAuthSessionTicket, 16)
+HAuthTicket __thiscall winISteamUser_SteamUser016_GetAuthSessionTicket(winISteamUser_SteamUser016 *_this, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser016_GetAuthSessionTicket(_this->linux_side, pTicket, cbMaxTicket, pcbTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_BeginAuthSession, 20)
+EBeginAuthSessionResult __thiscall winISteamUser_SteamUser016_BeginAuthSession(winISteamUser_SteamUser016 *_this, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser016_BeginAuthSession(_this->linux_side, pAuthTicket, cbAuthTicket, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_EndAuthSession, 12)
+void __thiscall winISteamUser_SteamUser016_EndAuthSession(winISteamUser_SteamUser016 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser016_EndAuthSession(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_CancelAuthTicket, 8)
+void __thiscall winISteamUser_SteamUser016_CancelAuthTicket(winISteamUser_SteamUser016 *_this, HAuthTicket hAuthTicket)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser016_CancelAuthTicket(_this->linux_side, hAuthTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_UserHasLicenseForApp, 16)
+EUserHasLicenseForAppResult __thiscall winISteamUser_SteamUser016_UserHasLicenseForApp(winISteamUser_SteamUser016 *_this, CSteamID steamID, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser016_UserHasLicenseForApp(_this->linux_side, steamID, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_BIsBehindNAT, 4)
+bool __thiscall winISteamUser_SteamUser016_BIsBehindNAT(winISteamUser_SteamUser016 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser016_BIsBehindNAT(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_AdvertiseGame, 18)
+void __thiscall winISteamUser_SteamUser016_AdvertiseGame(winISteamUser_SteamUser016 *_this, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser016_AdvertiseGame(_this->linux_side, steamIDGameServer, unIPServer, usPortServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_RequestEncryptedAppTicket, 12)
+SteamAPICall_t __thiscall winISteamUser_SteamUser016_RequestEncryptedAppTicket(winISteamUser_SteamUser016 *_this, void * pDataToInclude, int cbDataToInclude)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser016_RequestEncryptedAppTicket(_this->linux_side, pDataToInclude, cbDataToInclude);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser016_GetEncryptedAppTicket, 16)
+bool __thiscall winISteamUser_SteamUser016_GetEncryptedAppTicket(winISteamUser_SteamUser016 *_this, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser016_GetEncryptedAppTicket(_this->linux_side, pTicket, cbMaxTicket, pcbTicket);
+}
+
+extern vtable_ptr winISteamUser_SteamUser016_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUser_SteamUser016,
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_GetHSteamUser)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_BLoggedOn)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_GetSteamID)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_InitiateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_TerminateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_TrackAppUsageEvent)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_GetUserDataFolder)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_StartVoiceRecording)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_StopVoiceRecording)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_GetAvailableVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_GetVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_DecompressVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_GetVoiceOptimalSampleRate)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_GetAuthSessionTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_BeginAuthSession)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_EndAuthSession)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_CancelAuthTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_UserHasLicenseForApp)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_BIsBehindNAT)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_AdvertiseGame)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_RequestEncryptedAppTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser016_GetEncryptedAppTicket)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUser_SteamUser016 *create_winISteamUser_SteamUser016(void *linux_side)
+{
+ winISteamUser_SteamUser016 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUser_SteamUser016));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUser_SteamUser016_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUser_SteamUser014.h"
+
+typedef struct __winISteamUser_SteamUser014 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUser_SteamUser014;
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_GetHSteamUser, 4)
+HSteamUser __thiscall winISteamUser_SteamUser014_GetHSteamUser(winISteamUser_SteamUser014 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser014_GetHSteamUser(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_BLoggedOn, 4)
+bool __thiscall winISteamUser_SteamUser014_BLoggedOn(winISteamUser_SteamUser014 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser014_BLoggedOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_GetSteamID, 8)
+CSteamID *__thiscall winISteamUser_SteamUser014_GetSteamID(winISteamUser_SteamUser014 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamUser_SteamUser014_GetSteamID(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_InitiateGameConnection, 27)
+int __thiscall winISteamUser_SteamUser014_InitiateGameConnection(winISteamUser_SteamUser014 *_this, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser014_InitiateGameConnection(_this->linux_side, pAuthBlob, cbMaxAuthBlob, steamIDGameServer, unIPServer, usPortServer, bSecure);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_TerminateGameConnection, 10)
+void __thiscall winISteamUser_SteamUser014_TerminateGameConnection(winISteamUser_SteamUser014 *_this, uint32 unIPServer, uint16 usPortServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser014_TerminateGameConnection(_this->linux_side, unIPServer, usPortServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_TrackAppUsageEvent, 20)
+void __thiscall winISteamUser_SteamUser014_TrackAppUsageEvent(winISteamUser_SteamUser014 *_this, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser014_TrackAppUsageEvent(_this->linux_side, gameID, eAppUsageEvent, pchExtraInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_GetUserDataFolder, 12)
+bool __thiscall winISteamUser_SteamUser014_GetUserDataFolder(winISteamUser_SteamUser014 *_this, char * pchBuffer, int cubBuffer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser014_GetUserDataFolder(_this->linux_side, pchBuffer, cubBuffer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_StartVoiceRecording, 4)
+void __thiscall winISteamUser_SteamUser014_StartVoiceRecording(winISteamUser_SteamUser014 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser014_StartVoiceRecording(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_StopVoiceRecording, 4)
+void __thiscall winISteamUser_SteamUser014_StopVoiceRecording(winISteamUser_SteamUser014 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser014_StopVoiceRecording(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_GetAvailableVoice, 12)
+EVoiceResult __thiscall winISteamUser_SteamUser014_GetAvailableVoice(winISteamUser_SteamUser014 *_this, uint32 * pcbCompressed, uint32 * pcbUncompressed)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser014_GetAvailableVoice(_this->linux_side, pcbCompressed, pcbUncompressed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_GetVoice, 30)
+EVoiceResult __thiscall winISteamUser_SteamUser014_GetVoice(winISteamUser_SteamUser014 *_this, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser014_GetVoice(_this->linux_side, bWantCompressed, pDestBuffer, cbDestBufferSize, nBytesWritten, bWantUncompressed, pUncompressedDestBuffer, cbUncompressedDestBufferSize, nUncompressBytesWritten);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_DecompressVoice, 24)
+EVoiceResult __thiscall winISteamUser_SteamUser014_DecompressVoice(winISteamUser_SteamUser014 *_this, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser014_DecompressVoice(_this->linux_side, pCompressed, cbCompressed, pDestBuffer, cbDestBufferSize, nBytesWritten);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_GetAuthSessionTicket, 16)
+HAuthTicket __thiscall winISteamUser_SteamUser014_GetAuthSessionTicket(winISteamUser_SteamUser014 *_this, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser014_GetAuthSessionTicket(_this->linux_side, pTicket, cbMaxTicket, pcbTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_BeginAuthSession, 20)
+EBeginAuthSessionResult __thiscall winISteamUser_SteamUser014_BeginAuthSession(winISteamUser_SteamUser014 *_this, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser014_BeginAuthSession(_this->linux_side, pAuthTicket, cbAuthTicket, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_EndAuthSession, 12)
+void __thiscall winISteamUser_SteamUser014_EndAuthSession(winISteamUser_SteamUser014 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser014_EndAuthSession(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_CancelAuthTicket, 8)
+void __thiscall winISteamUser_SteamUser014_CancelAuthTicket(winISteamUser_SteamUser014 *_this, HAuthTicket hAuthTicket)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser014_CancelAuthTicket(_this->linux_side, hAuthTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_UserHasLicenseForApp, 16)
+EUserHasLicenseForAppResult __thiscall winISteamUser_SteamUser014_UserHasLicenseForApp(winISteamUser_SteamUser014 *_this, CSteamID steamID, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser014_UserHasLicenseForApp(_this->linux_side, steamID, appID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_BIsBehindNAT, 4)
+bool __thiscall winISteamUser_SteamUser014_BIsBehindNAT(winISteamUser_SteamUser014 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser014_BIsBehindNAT(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_AdvertiseGame, 18)
+void __thiscall winISteamUser_SteamUser014_AdvertiseGame(winISteamUser_SteamUser014 *_this, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser014_AdvertiseGame(_this->linux_side, steamIDGameServer, unIPServer, usPortServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_RequestEncryptedAppTicket, 12)
+SteamAPICall_t __thiscall winISteamUser_SteamUser014_RequestEncryptedAppTicket(winISteamUser_SteamUser014 *_this, void * pDataToInclude, int cbDataToInclude)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser014_RequestEncryptedAppTicket(_this->linux_side, pDataToInclude, cbDataToInclude);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser014_GetEncryptedAppTicket, 16)
+bool __thiscall winISteamUser_SteamUser014_GetEncryptedAppTicket(winISteamUser_SteamUser014 *_this, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser014_GetEncryptedAppTicket(_this->linux_side, pTicket, cbMaxTicket, pcbTicket);
+}
+
+extern vtable_ptr winISteamUser_SteamUser014_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUser_SteamUser014,
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_GetHSteamUser)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_BLoggedOn)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_GetSteamID)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_InitiateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_TerminateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_TrackAppUsageEvent)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_GetUserDataFolder)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_StartVoiceRecording)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_StopVoiceRecording)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_GetAvailableVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_GetVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_DecompressVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_GetAuthSessionTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_BeginAuthSession)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_EndAuthSession)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_CancelAuthTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_UserHasLicenseForApp)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_BIsBehindNAT)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_AdvertiseGame)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_RequestEncryptedAppTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser014_GetEncryptedAppTicket)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUser_SteamUser014 *create_winISteamUser_SteamUser014(void *linux_side)
+{
+ winISteamUser_SteamUser014 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUser_SteamUser014));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUser_SteamUser014_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUser_SteamUser013.h"
+
+typedef struct __winISteamUser_SteamUser013 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUser_SteamUser013;
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser013_GetHSteamUser, 4)
+HSteamUser __thiscall winISteamUser_SteamUser013_GetHSteamUser(winISteamUser_SteamUser013 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser013_GetHSteamUser(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser013_BLoggedOn, 4)
+bool __thiscall winISteamUser_SteamUser013_BLoggedOn(winISteamUser_SteamUser013 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser013_BLoggedOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser013_GetSteamID, 8)
+CSteamID *__thiscall winISteamUser_SteamUser013_GetSteamID(winISteamUser_SteamUser013 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamUser_SteamUser013_GetSteamID(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser013_InitiateGameConnection, 27)
+int __thiscall winISteamUser_SteamUser013_InitiateGameConnection(winISteamUser_SteamUser013 *_this, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser013_InitiateGameConnection(_this->linux_side, pAuthBlob, cbMaxAuthBlob, steamIDGameServer, unIPServer, usPortServer, bSecure);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser013_TerminateGameConnection, 10)
+void __thiscall winISteamUser_SteamUser013_TerminateGameConnection(winISteamUser_SteamUser013 *_this, uint32 unIPServer, uint16 usPortServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser013_TerminateGameConnection(_this->linux_side, unIPServer, usPortServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser013_TrackAppUsageEvent, 20)
+void __thiscall winISteamUser_SteamUser013_TrackAppUsageEvent(winISteamUser_SteamUser013 *_this, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser013_TrackAppUsageEvent(_this->linux_side, gameID, eAppUsageEvent, pchExtraInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser013_GetUserDataFolder, 12)
+bool __thiscall winISteamUser_SteamUser013_GetUserDataFolder(winISteamUser_SteamUser013 *_this, char * pchBuffer, int cubBuffer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser013_GetUserDataFolder(_this->linux_side, pchBuffer, cubBuffer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser013_StartVoiceRecording, 4)
+void __thiscall winISteamUser_SteamUser013_StartVoiceRecording(winISteamUser_SteamUser013 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser013_StartVoiceRecording(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser013_StopVoiceRecording, 4)
+void __thiscall winISteamUser_SteamUser013_StopVoiceRecording(winISteamUser_SteamUser013 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser013_StopVoiceRecording(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser013_GetAvailableVoice, 12)
+EVoiceResult __thiscall winISteamUser_SteamUser013_GetAvailableVoice(winISteamUser_SteamUser013 *_this, uint32 * pcbCompressed, uint32 * pcbUncompressed)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser013_GetAvailableVoice(_this->linux_side, pcbCompressed, pcbUncompressed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser013_GetVoice, 30)
+EVoiceResult __thiscall winISteamUser_SteamUser013_GetVoice(winISteamUser_SteamUser013 *_this, bool bWantCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten, bool bWantUncompressed, void * pUncompressedDestBuffer, uint32 cbUncompressedDestBufferSize, uint32 * nUncompressBytesWritten)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser013_GetVoice(_this->linux_side, bWantCompressed, pDestBuffer, cbDestBufferSize, nBytesWritten, bWantUncompressed, pUncompressedDestBuffer, cbUncompressedDestBufferSize, nUncompressBytesWritten);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser013_DecompressVoice, 24)
+EVoiceResult __thiscall winISteamUser_SteamUser013_DecompressVoice(winISteamUser_SteamUser013 *_this, const void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser013_DecompressVoice(_this->linux_side, pCompressed, cbCompressed, pDestBuffer, cbDestBufferSize, nBytesWritten);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser013_GetAuthSessionTicket, 16)
+HAuthTicket __thiscall winISteamUser_SteamUser013_GetAuthSessionTicket(winISteamUser_SteamUser013 *_this, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser013_GetAuthSessionTicket(_this->linux_side, pTicket, cbMaxTicket, pcbTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser013_BeginAuthSession, 20)
+EBeginAuthSessionResult __thiscall winISteamUser_SteamUser013_BeginAuthSession(winISteamUser_SteamUser013 *_this, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser013_BeginAuthSession(_this->linux_side, pAuthTicket, cbAuthTicket, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser013_EndAuthSession, 12)
+void __thiscall winISteamUser_SteamUser013_EndAuthSession(winISteamUser_SteamUser013 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser013_EndAuthSession(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser013_CancelAuthTicket, 8)
+void __thiscall winISteamUser_SteamUser013_CancelAuthTicket(winISteamUser_SteamUser013 *_this, HAuthTicket hAuthTicket)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser013_CancelAuthTicket(_this->linux_side, hAuthTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser013_UserHasLicenseForApp, 16)
+EUserHasLicenseForAppResult __thiscall winISteamUser_SteamUser013_UserHasLicenseForApp(winISteamUser_SteamUser013 *_this, CSteamID steamID, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser013_UserHasLicenseForApp(_this->linux_side, steamID, appID);
+}
+
+extern vtable_ptr winISteamUser_SteamUser013_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUser_SteamUser013,
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser013_GetHSteamUser)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser013_BLoggedOn)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser013_GetSteamID)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser013_InitiateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser013_TerminateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser013_TrackAppUsageEvent)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser013_GetUserDataFolder)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser013_StartVoiceRecording)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser013_StopVoiceRecording)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser013_GetAvailableVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser013_GetVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser013_DecompressVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser013_GetAuthSessionTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser013_BeginAuthSession)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser013_EndAuthSession)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser013_CancelAuthTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser013_UserHasLicenseForApp)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUser_SteamUser013 *create_winISteamUser_SteamUser013(void *linux_side)
+{
+ winISteamUser_SteamUser013 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUser_SteamUser013));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUser_SteamUser013_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUser_SteamUser012.h"
+
+typedef struct __winISteamUser_SteamUser012 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUser_SteamUser012;
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser012_GetHSteamUser, 4)
+HSteamUser __thiscall winISteamUser_SteamUser012_GetHSteamUser(winISteamUser_SteamUser012 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser012_GetHSteamUser(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser012_BLoggedOn, 4)
+bool __thiscall winISteamUser_SteamUser012_BLoggedOn(winISteamUser_SteamUser012 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser012_BLoggedOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser012_GetSteamID, 8)
+CSteamID *__thiscall winISteamUser_SteamUser012_GetSteamID(winISteamUser_SteamUser012 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamUser_SteamUser012_GetSteamID(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser012_InitiateGameConnection, 27)
+int __thiscall winISteamUser_SteamUser012_InitiateGameConnection(winISteamUser_SteamUser012 *_this, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser012_InitiateGameConnection(_this->linux_side, pAuthBlob, cbMaxAuthBlob, steamIDGameServer, unIPServer, usPortServer, bSecure);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser012_TerminateGameConnection, 10)
+void __thiscall winISteamUser_SteamUser012_TerminateGameConnection(winISteamUser_SteamUser012 *_this, uint32 unIPServer, uint16 usPortServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser012_TerminateGameConnection(_this->linux_side, unIPServer, usPortServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser012_TrackAppUsageEvent, 20)
+void __thiscall winISteamUser_SteamUser012_TrackAppUsageEvent(winISteamUser_SteamUser012 *_this, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser012_TrackAppUsageEvent(_this->linux_side, gameID, eAppUsageEvent, pchExtraInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser012_GetUserDataFolder, 12)
+bool __thiscall winISteamUser_SteamUser012_GetUserDataFolder(winISteamUser_SteamUser012 *_this, char * pchBuffer, int cubBuffer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser012_GetUserDataFolder(_this->linux_side, pchBuffer, cubBuffer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser012_StartVoiceRecording, 4)
+void __thiscall winISteamUser_SteamUser012_StartVoiceRecording(winISteamUser_SteamUser012 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser012_StartVoiceRecording(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser012_StopVoiceRecording, 4)
+void __thiscall winISteamUser_SteamUser012_StopVoiceRecording(winISteamUser_SteamUser012 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser012_StopVoiceRecording(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser012_GetCompressedVoice, 16)
+EVoiceResult __thiscall winISteamUser_SteamUser012_GetCompressedVoice(winISteamUser_SteamUser012 *_this, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser012_GetCompressedVoice(_this->linux_side, pDestBuffer, cbDestBufferSize, nBytesWritten);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser012_DecompressVoice, 24)
+EVoiceResult __thiscall winISteamUser_SteamUser012_DecompressVoice(winISteamUser_SteamUser012 *_this, void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser012_DecompressVoice(_this->linux_side, pCompressed, cbCompressed, pDestBuffer, cbDestBufferSize, nBytesWritten);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser012_GetAuthSessionTicket, 16)
+HAuthTicket __thiscall winISteamUser_SteamUser012_GetAuthSessionTicket(winISteamUser_SteamUser012 *_this, void * pTicket, int cbMaxTicket, uint32 * pcbTicket)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser012_GetAuthSessionTicket(_this->linux_side, pTicket, cbMaxTicket, pcbTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser012_BeginAuthSession, 20)
+EBeginAuthSessionResult __thiscall winISteamUser_SteamUser012_BeginAuthSession(winISteamUser_SteamUser012 *_this, const void * pAuthTicket, int cbAuthTicket, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser012_BeginAuthSession(_this->linux_side, pAuthTicket, cbAuthTicket, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser012_EndAuthSession, 12)
+void __thiscall winISteamUser_SteamUser012_EndAuthSession(winISteamUser_SteamUser012 *_this, CSteamID steamID)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser012_EndAuthSession(_this->linux_side, steamID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser012_CancelAuthTicket, 8)
+void __thiscall winISteamUser_SteamUser012_CancelAuthTicket(winISteamUser_SteamUser012 *_this, HAuthTicket hAuthTicket)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser012_CancelAuthTicket(_this->linux_side, hAuthTicket);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser012_UserHasLicenseForApp, 16)
+EUserHasLicenseForAppResult __thiscall winISteamUser_SteamUser012_UserHasLicenseForApp(winISteamUser_SteamUser012 *_this, CSteamID steamID, AppId_t appID)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser012_UserHasLicenseForApp(_this->linux_side, steamID, appID);
+}
+
+extern vtable_ptr winISteamUser_SteamUser012_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUser_SteamUser012,
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser012_GetHSteamUser)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser012_BLoggedOn)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser012_GetSteamID)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser012_InitiateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser012_TerminateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser012_TrackAppUsageEvent)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser012_GetUserDataFolder)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser012_StartVoiceRecording)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser012_StopVoiceRecording)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser012_GetCompressedVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser012_DecompressVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser012_GetAuthSessionTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser012_BeginAuthSession)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser012_EndAuthSession)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser012_CancelAuthTicket)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser012_UserHasLicenseForApp)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUser_SteamUser012 *create_winISteamUser_SteamUser012(void *linux_side)
+{
+ winISteamUser_SteamUser012 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUser_SteamUser012));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUser_SteamUser012_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUser_SteamUser011.h"
+
+typedef struct __winISteamUser_SteamUser011 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUser_SteamUser011;
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser011_GetHSteamUser, 4)
+HSteamUser __thiscall winISteamUser_SteamUser011_GetHSteamUser(winISteamUser_SteamUser011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser011_GetHSteamUser(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser011_BLoggedOn, 4)
+bool __thiscall winISteamUser_SteamUser011_BLoggedOn(winISteamUser_SteamUser011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser011_BLoggedOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser011_GetSteamID, 8)
+CSteamID *__thiscall winISteamUser_SteamUser011_GetSteamID(winISteamUser_SteamUser011 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamUser_SteamUser011_GetSteamID(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser011_InitiateGameConnection, 27)
+int __thiscall winISteamUser_SteamUser011_InitiateGameConnection(winISteamUser_SteamUser011 *_this, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser011_InitiateGameConnection(_this->linux_side, pAuthBlob, cbMaxAuthBlob, steamIDGameServer, unIPServer, usPortServer, bSecure);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser011_TerminateGameConnection, 10)
+void __thiscall winISteamUser_SteamUser011_TerminateGameConnection(winISteamUser_SteamUser011 *_this, uint32 unIPServer, uint16 usPortServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser011_TerminateGameConnection(_this->linux_side, unIPServer, usPortServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser011_TrackAppUsageEvent, 20)
+void __thiscall winISteamUser_SteamUser011_TrackAppUsageEvent(winISteamUser_SteamUser011 *_this, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser011_TrackAppUsageEvent(_this->linux_side, gameID, eAppUsageEvent, pchExtraInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser011_GetUserDataFolder, 12)
+bool __thiscall winISteamUser_SteamUser011_GetUserDataFolder(winISteamUser_SteamUser011 *_this, char * pchBuffer, int cubBuffer)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser011_GetUserDataFolder(_this->linux_side, pchBuffer, cubBuffer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser011_StartVoiceRecording, 4)
+void __thiscall winISteamUser_SteamUser011_StartVoiceRecording(winISteamUser_SteamUser011 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser011_StartVoiceRecording(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser011_StopVoiceRecording, 4)
+void __thiscall winISteamUser_SteamUser011_StopVoiceRecording(winISteamUser_SteamUser011 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser011_StopVoiceRecording(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser011_GetCompressedVoice, 16)
+EVoiceResult __thiscall winISteamUser_SteamUser011_GetCompressedVoice(winISteamUser_SteamUser011 *_this, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser011_GetCompressedVoice(_this->linux_side, pDestBuffer, cbDestBufferSize, nBytesWritten);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser011_DecompressVoice, 24)
+EVoiceResult __thiscall winISteamUser_SteamUser011_DecompressVoice(winISteamUser_SteamUser011 *_this, void * pCompressed, uint32 cbCompressed, void * pDestBuffer, uint32 cbDestBufferSize, uint32 * nBytesWritten)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser011_DecompressVoice(_this->linux_side, pCompressed, cbCompressed, pDestBuffer, cbDestBufferSize, nBytesWritten);
+}
+
+extern vtable_ptr winISteamUser_SteamUser011_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUser_SteamUser011,
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser011_GetHSteamUser)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser011_BLoggedOn)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser011_GetSteamID)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser011_InitiateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser011_TerminateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser011_TrackAppUsageEvent)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser011_GetUserDataFolder)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser011_StartVoiceRecording)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser011_StopVoiceRecording)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser011_GetCompressedVoice)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser011_DecompressVoice)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUser_SteamUser011 *create_winISteamUser_SteamUser011(void *linux_side)
+{
+ winISteamUser_SteamUser011 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUser_SteamUser011));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUser_SteamUser011_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUser_SteamUser010.h"
+
+typedef struct __winISteamUser_SteamUser010 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUser_SteamUser010;
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser010_GetHSteamUser, 4)
+HSteamUser __thiscall winISteamUser_SteamUser010_GetHSteamUser(winISteamUser_SteamUser010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser010_GetHSteamUser(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser010_BLoggedOn, 4)
+bool __thiscall winISteamUser_SteamUser010_BLoggedOn(winISteamUser_SteamUser010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser010_BLoggedOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser010_GetSteamID, 8)
+CSteamID *__thiscall winISteamUser_SteamUser010_GetSteamID(winISteamUser_SteamUser010 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamUser_SteamUser010_GetSteamID(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser010_InitiateGameConnection, 27)
+int __thiscall winISteamUser_SteamUser010_InitiateGameConnection(winISteamUser_SteamUser010 *_this, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser010_InitiateGameConnection(_this->linux_side, pAuthBlob, cbMaxAuthBlob, steamIDGameServer, unIPServer, usPortServer, bSecure);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser010_TerminateGameConnection, 10)
+void __thiscall winISteamUser_SteamUser010_TerminateGameConnection(winISteamUser_SteamUser010 *_this, uint32 unIPServer, uint16 usPortServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser010_TerminateGameConnection(_this->linux_side, unIPServer, usPortServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser010_TrackAppUsageEvent, 20)
+void __thiscall winISteamUser_SteamUser010_TrackAppUsageEvent(winISteamUser_SteamUser010 *_this, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser010_TrackAppUsageEvent(_this->linux_side, gameID, eAppUsageEvent, pchExtraInfo);
+}
+
+extern vtable_ptr winISteamUser_SteamUser010_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUser_SteamUser010,
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser010_GetHSteamUser)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser010_BLoggedOn)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser010_GetSteamID)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser010_InitiateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser010_TerminateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser010_TrackAppUsageEvent)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUser_SteamUser010 *create_winISteamUser_SteamUser010(void *linux_side)
+{
+ winISteamUser_SteamUser010 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUser_SteamUser010));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUser_SteamUser010_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUser_SteamUser009.h"
+
+typedef struct __winISteamUser_SteamUser009 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUser_SteamUser009;
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser009_GetHSteamUser, 4)
+HSteamUser __thiscall winISteamUser_SteamUser009_GetHSteamUser(winISteamUser_SteamUser009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser009_GetHSteamUser(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser009_BLoggedOn, 4)
+bool __thiscall winISteamUser_SteamUser009_BLoggedOn(winISteamUser_SteamUser009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser009_BLoggedOn(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser009_GetSteamID, 8)
+CSteamID *__thiscall winISteamUser_SteamUser009_GetSteamID(winISteamUser_SteamUser009 *_this, CSteamID *_r)
+{
+ TRACE("%p\n", _this);
+ *_r = cppISteamUser_SteamUser009_GetSteamID(_this->linux_side);
+ return _r;
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser009_InitiateGameConnection, 35)
+int __thiscall winISteamUser_SteamUser009_InitiateGameConnection(winISteamUser_SteamUser009 *_this, void * pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, CGameID gameID, uint32 unIPServer, uint16 usPortServer, bool bSecure)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUser_SteamUser009_InitiateGameConnection(_this->linux_side, pAuthBlob, cbMaxAuthBlob, steamIDGameServer, gameID, unIPServer, usPortServer, bSecure);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser009_TerminateGameConnection, 10)
+void __thiscall winISteamUser_SteamUser009_TerminateGameConnection(winISteamUser_SteamUser009 *_this, uint32 unIPServer, uint16 usPortServer)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser009_TerminateGameConnection(_this->linux_side, unIPServer, usPortServer);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser009_TrackAppUsageEvent, 20)
+void __thiscall winISteamUser_SteamUser009_TrackAppUsageEvent(winISteamUser_SteamUser009 *_this, CGameID gameID, int eAppUsageEvent, const char * pchExtraInfo)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser009_TrackAppUsageEvent(_this->linux_side, gameID, eAppUsageEvent, pchExtraInfo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUser_SteamUser009_RefreshSteam2Login, 4)
+void __thiscall winISteamUser_SteamUser009_RefreshSteam2Login(winISteamUser_SteamUser009 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUser_SteamUser009_RefreshSteam2Login(_this->linux_side);
+}
+
+extern vtable_ptr winISteamUser_SteamUser009_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUser_SteamUser009,
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser009_GetHSteamUser)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser009_BLoggedOn)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser009_GetSteamID)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser009_InitiateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser009_TerminateGameConnection)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser009_TrackAppUsageEvent)
+ VTABLE_ADD_FUNC(winISteamUser_SteamUser009_RefreshSteam2Login)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUser_SteamUser009 *create_winISteamUser_SteamUser009(void *linux_side)
+{
+ winISteamUser_SteamUser009 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUser_SteamUser009));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUser_SteamUser009_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamUserStats.c b/lsteamclient/winISteamUserStats.c
new file mode 100644
index 00000000..c9f5945f
--- /dev/null
+++ b/lsteamclient/winISteamUserStats.c
@@ -0,0 +1,2083 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011.h"
+
+typedef struct __winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011;
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestCurrentStats, 4)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestCurrentStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestCurrentStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetStat, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchName, int32 * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetStat(_this->linux_side, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetStat_2, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchName, float * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetStat_2(_this->linux_side, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_SetStat, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_SetStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchName, int32 nData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_SetStat(_this->linux_side, pchName, nData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_SetStat_2, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_SetStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchName, float fData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_SetStat_2(_this->linux_side, pchName, fData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_UpdateAvgRateStat, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_UpdateAvgRateStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchName, float flCountThisSession, double dSessionLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_UpdateAvgRateStat(_this->linux_side, pchName, flCountThisSession, dSessionLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievement, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchName, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievement(_this->linux_side, pchName, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_SetAchievement, 8)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_SetAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_SetAchievement(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_ClearAchievement, 8)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_ClearAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_ClearAchievement(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementAndUnlockTime, 16)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementAndUnlockTime(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementAndUnlockTime(_this->linux_side, pchName, pbAchieved, punUnlockTime);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_StoreStats, 4)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_StoreStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_StoreStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementIcon, 8)
+int __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementIcon(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementIcon(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementDisplayAttribute, 12)
+const char * __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementDisplayAttribute(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchName, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementDisplayAttribute(_this->linux_side, pchName, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_IndicateAchievementProgress, 16)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_IndicateAchievementProgress(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_IndicateAchievementProgress(_this->linux_side, pchName, nCurProgress, nMaxProgress);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetNumAchievements, 4)
+uint32 __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetNumAchievements(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetNumAchievements(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementName, 8)
+const char * __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementName(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, uint32 iAchievement)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementName(_this->linux_side, iAchievement);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestUserStats, 12)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestUserStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestUserStats(_this->linux_side, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserStat, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, CSteamID steamIDUser, const char * pchName, int32 * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserStat(_this->linux_side, steamIDUser, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserStat_2, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, CSteamID steamIDUser, const char * pchName, float * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserStat_2(_this->linux_side, steamIDUser, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserAchievement, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, CSteamID steamIDUser, const char * pchName, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserAchievement(_this->linux_side, steamIDUser, pchName, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserAchievementAndUnlockTime, 24)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserAchievementAndUnlockTime(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserAchievementAndUnlockTime(_this->linux_side, steamIDUser, pchName, pbAchieved, punUnlockTime);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_ResetAllStats, 5)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_ResetAllStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, bool bAchievementsToo)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_ResetAllStats(_this->linux_side, bAchievementsToo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_FindOrCreateLeaderboard, 16)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_FindOrCreateLeaderboard(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_FindOrCreateLeaderboard(_this->linux_side, pchLeaderboardName, eLeaderboardSortMethod, eLeaderboardDisplayType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_FindLeaderboard, 8)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_FindLeaderboard(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchLeaderboardName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_FindLeaderboard(_this->linux_side, pchLeaderboardName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardName, 12)
+const char * __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardName(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardName(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardEntryCount, 12)
+int __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardEntryCount(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardEntryCount(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardSortMethod, 12)
+ELeaderboardSortMethod __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardSortMethod(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardSortMethod(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardDisplayType, 12)
+ELeaderboardDisplayType __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardDisplayType(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardDisplayType(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_DownloadLeaderboardEntries, 24)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_DownloadLeaderboardEntries(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_DownloadLeaderboardEntries(_this->linux_side, hSteamLeaderboard, eLeaderboardDataRequest, nRangeStart, nRangeEnd);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_DownloadLeaderboardEntriesForUsers, 20)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_DownloadLeaderboardEntriesForUsers(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, SteamLeaderboard_t hSteamLeaderboard, CSteamID * prgUsers, int cUsers)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_DownloadLeaderboardEntriesForUsers(_this->linux_side, hSteamLeaderboard, prgUsers, cUsers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetDownloadedLeaderboardEntry, 28)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetDownloadedLeaderboardEntry(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetDownloadedLeaderboardEntry(_this->linux_side, hSteamLeaderboardEntries, index, pLeaderboardEntry, pDetails, cDetailsMax);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_UploadLeaderboardScore, 28)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_UploadLeaderboardScore(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_UploadLeaderboardScore(_this->linux_side, hSteamLeaderboard, eLeaderboardUploadScoreMethod, nScore, pScoreDetails, cScoreDetailsCount);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_AttachLeaderboardUGC, 20)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_AttachLeaderboardUGC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_AttachLeaderboardUGC(_this->linux_side, hSteamLeaderboard, hUGC);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetNumberOfCurrentPlayers, 4)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetNumberOfCurrentPlayers(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetNumberOfCurrentPlayers(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestGlobalAchievementPercentages, 4)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestGlobalAchievementPercentages(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestGlobalAchievementPercentages(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetMostAchievedAchievementInfo, 20)
+int __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetMostAchievedAchievementInfo(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetMostAchievedAchievementInfo(_this->linux_side, pchName, unNameBufLen, pflPercent, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetNextMostAchievedAchievementInfo, 24)
+int __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetNextMostAchievedAchievementInfo(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetNextMostAchievedAchievementInfo(_this->linux_side, iIteratorPrevious, pchName, unNameBufLen, pflPercent, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementAchievedPercent, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementAchievedPercent(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchName, float * pflPercent)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementAchievedPercent(_this->linux_side, pchName, pflPercent);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestGlobalStats, 8)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestGlobalStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, int nHistoryDays)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestGlobalStats(_this->linux_side, nHistoryDays);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStat, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchStatName, int64 * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStat(_this->linux_side, pchStatName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStat_2, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchStatName, double * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStat_2(_this->linux_side, pchStatName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStatHistory, 16)
+int32 __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStatHistory(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchStatName, int64 * pData, uint32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStatHistory(_this->linux_side, pchStatName, pData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStatHistory_2, 16)
+int32 __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStatHistory_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *_this, const char * pchStatName, double * pData, uint32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStatHistory_2(_this->linux_side, pchStatName, pData, cubData);
+}
+
+extern vtable_ptr winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011,
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestCurrentStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_SetStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_SetStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_UpdateAvgRateStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_SetAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_ClearAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementAndUnlockTime)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_StoreStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementIcon)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementDisplayAttribute)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_IndicateAchievementProgress)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetNumAchievements)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementName)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestUserStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetUserAchievementAndUnlockTime)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_ResetAllStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_FindOrCreateLeaderboard)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_FindLeaderboard)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardName)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardEntryCount)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardSortMethod)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetLeaderboardDisplayType)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_DownloadLeaderboardEntries)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_DownloadLeaderboardEntriesForUsers)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetDownloadedLeaderboardEntry)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_UploadLeaderboardScore)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_AttachLeaderboardUGC)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetNumberOfCurrentPlayers)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestGlobalAchievementPercentages)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetMostAchievedAchievementInfo)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetNextMostAchievedAchievementInfo)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetAchievementAchievedPercent)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_RequestGlobalStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStatHistory)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_GetGlobalStatHistory_2)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011(void *linux_side)
+{
+ winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010.h"
+
+typedef struct __winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010;
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestCurrentStats, 4)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestCurrentStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestCurrentStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetStat, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchName, int32 * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetStat(_this->linux_side, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetStat_2, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchName, float * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetStat_2(_this->linux_side, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_SetStat, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_SetStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchName, int32 nData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_SetStat(_this->linux_side, pchName, nData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_SetStat_2, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_SetStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchName, float fData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_SetStat_2(_this->linux_side, pchName, fData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_UpdateAvgRateStat, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_UpdateAvgRateStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchName, float flCountThisSession, double dSessionLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_UpdateAvgRateStat(_this->linux_side, pchName, flCountThisSession, dSessionLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievement, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchName, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievement(_this->linux_side, pchName, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_SetAchievement, 8)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_SetAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_SetAchievement(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_ClearAchievement, 8)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_ClearAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_ClearAchievement(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementAndUnlockTime, 16)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementAndUnlockTime(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementAndUnlockTime(_this->linux_side, pchName, pbAchieved, punUnlockTime);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_StoreStats, 4)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_StoreStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_StoreStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementIcon, 8)
+int __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementIcon(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementIcon(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementDisplayAttribute, 12)
+const char * __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementDisplayAttribute(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchName, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementDisplayAttribute(_this->linux_side, pchName, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_IndicateAchievementProgress, 16)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_IndicateAchievementProgress(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_IndicateAchievementProgress(_this->linux_side, pchName, nCurProgress, nMaxProgress);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestUserStats, 12)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestUserStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestUserStats(_this->linux_side, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserStat, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, CSteamID steamIDUser, const char * pchName, int32 * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserStat(_this->linux_side, steamIDUser, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserStat_2, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, CSteamID steamIDUser, const char * pchName, float * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserStat_2(_this->linux_side, steamIDUser, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserAchievement, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, CSteamID steamIDUser, const char * pchName, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserAchievement(_this->linux_side, steamIDUser, pchName, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserAchievementAndUnlockTime, 24)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserAchievementAndUnlockTime(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserAchievementAndUnlockTime(_this->linux_side, steamIDUser, pchName, pbAchieved, punUnlockTime);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_ResetAllStats, 5)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_ResetAllStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, bool bAchievementsToo)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_ResetAllStats(_this->linux_side, bAchievementsToo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_FindOrCreateLeaderboard, 16)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_FindOrCreateLeaderboard(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_FindOrCreateLeaderboard(_this->linux_side, pchLeaderboardName, eLeaderboardSortMethod, eLeaderboardDisplayType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_FindLeaderboard, 8)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_FindLeaderboard(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchLeaderboardName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_FindLeaderboard(_this->linux_side, pchLeaderboardName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardName, 12)
+const char * __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardName(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardName(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardEntryCount, 12)
+int __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardEntryCount(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardEntryCount(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardSortMethod, 12)
+ELeaderboardSortMethod __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardSortMethod(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardSortMethod(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardDisplayType, 12)
+ELeaderboardDisplayType __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardDisplayType(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardDisplayType(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_DownloadLeaderboardEntries, 24)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_DownloadLeaderboardEntries(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_DownloadLeaderboardEntries(_this->linux_side, hSteamLeaderboard, eLeaderboardDataRequest, nRangeStart, nRangeEnd);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_DownloadLeaderboardEntriesForUsers, 20)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_DownloadLeaderboardEntriesForUsers(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, SteamLeaderboard_t hSteamLeaderboard, CSteamID * prgUsers, int cUsers)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_DownloadLeaderboardEntriesForUsers(_this->linux_side, hSteamLeaderboard, prgUsers, cUsers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetDownloadedLeaderboardEntry, 28)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetDownloadedLeaderboardEntry(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetDownloadedLeaderboardEntry(_this->linux_side, hSteamLeaderboardEntries, index, pLeaderboardEntry, pDetails, cDetailsMax);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_UploadLeaderboardScore, 28)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_UploadLeaderboardScore(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_UploadLeaderboardScore(_this->linux_side, hSteamLeaderboard, eLeaderboardUploadScoreMethod, nScore, pScoreDetails, cScoreDetailsCount);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_AttachLeaderboardUGC, 20)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_AttachLeaderboardUGC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_AttachLeaderboardUGC(_this->linux_side, hSteamLeaderboard, hUGC);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetNumberOfCurrentPlayers, 4)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetNumberOfCurrentPlayers(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetNumberOfCurrentPlayers(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestGlobalAchievementPercentages, 4)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestGlobalAchievementPercentages(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestGlobalAchievementPercentages(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetMostAchievedAchievementInfo, 20)
+int __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetMostAchievedAchievementInfo(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetMostAchievedAchievementInfo(_this->linux_side, pchName, unNameBufLen, pflPercent, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetNextMostAchievedAchievementInfo, 24)
+int __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetNextMostAchievedAchievementInfo(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, int iIteratorPrevious, char * pchName, uint32 unNameBufLen, float * pflPercent, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetNextMostAchievedAchievementInfo(_this->linux_side, iIteratorPrevious, pchName, unNameBufLen, pflPercent, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementAchievedPercent, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementAchievedPercent(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchName, float * pflPercent)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementAchievedPercent(_this->linux_side, pchName, pflPercent);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestGlobalStats, 8)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestGlobalStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, int nHistoryDays)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestGlobalStats(_this->linux_side, nHistoryDays);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStat, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchStatName, int64 * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStat(_this->linux_side, pchStatName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStat_2, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchStatName, double * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStat_2(_this->linux_side, pchStatName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStatHistory, 16)
+int32 __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStatHistory(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchStatName, int64 * pData, uint32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStatHistory(_this->linux_side, pchStatName, pData, cubData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStatHistory_2, 16)
+int32 __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStatHistory_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *_this, const char * pchStatName, double * pData, uint32 cubData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStatHistory_2(_this->linux_side, pchStatName, pData, cubData);
+}
+
+extern vtable_ptr winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010,
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestCurrentStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_SetStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_SetStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_UpdateAvgRateStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_SetAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_ClearAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementAndUnlockTime)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_StoreStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementIcon)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementDisplayAttribute)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_IndicateAchievementProgress)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestUserStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetUserAchievementAndUnlockTime)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_ResetAllStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_FindOrCreateLeaderboard)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_FindLeaderboard)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardName)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardEntryCount)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardSortMethod)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetLeaderboardDisplayType)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_DownloadLeaderboardEntries)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_DownloadLeaderboardEntriesForUsers)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetDownloadedLeaderboardEntry)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_UploadLeaderboardScore)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_AttachLeaderboardUGC)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetNumberOfCurrentPlayers)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestGlobalAchievementPercentages)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetMostAchievedAchievementInfo)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetNextMostAchievedAchievementInfo)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetAchievementAchievedPercent)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_RequestGlobalStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStatHistory)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_GetGlobalStatHistory_2)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010(void *linux_side)
+{
+ winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009.h"
+
+typedef struct __winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009;
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_RequestCurrentStats, 4)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_RequestCurrentStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_RequestCurrentStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetStat, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, const char * pchName, int32 * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetStat(_this->linux_side, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetStat_2, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, const char * pchName, float * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetStat_2(_this->linux_side, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_SetStat, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_SetStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, const char * pchName, int32 nData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_SetStat(_this->linux_side, pchName, nData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_SetStat_2, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_SetStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, const char * pchName, float fData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_SetStat_2(_this->linux_side, pchName, fData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_UpdateAvgRateStat, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_UpdateAvgRateStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, const char * pchName, float flCountThisSession, double dSessionLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_UpdateAvgRateStat(_this->linux_side, pchName, flCountThisSession, dSessionLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievement, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, const char * pchName, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievement(_this->linux_side, pchName, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_SetAchievement, 8)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_SetAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_SetAchievement(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_ClearAchievement, 8)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_ClearAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_ClearAchievement(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievementAndUnlockTime, 16)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievementAndUnlockTime(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievementAndUnlockTime(_this->linux_side, pchName, pbAchieved, punUnlockTime);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_StoreStats, 4)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_StoreStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_StoreStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievementIcon, 8)
+int __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievementIcon(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievementIcon(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievementDisplayAttribute, 12)
+const char * __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievementDisplayAttribute(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, const char * pchName, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievementDisplayAttribute(_this->linux_side, pchName, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_IndicateAchievementProgress, 16)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_IndicateAchievementProgress(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_IndicateAchievementProgress(_this->linux_side, pchName, nCurProgress, nMaxProgress);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_RequestUserStats, 12)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_RequestUserStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_RequestUserStats(_this->linux_side, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserStat, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, CSteamID steamIDUser, const char * pchName, int32 * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserStat(_this->linux_side, steamIDUser, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserStat_2, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, CSteamID steamIDUser, const char * pchName, float * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserStat_2(_this->linux_side, steamIDUser, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserAchievement, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, CSteamID steamIDUser, const char * pchName, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserAchievement(_this->linux_side, steamIDUser, pchName, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserAchievementAndUnlockTime, 24)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserAchievementAndUnlockTime(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserAchievementAndUnlockTime(_this->linux_side, steamIDUser, pchName, pbAchieved, punUnlockTime);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_ResetAllStats, 5)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_ResetAllStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, bool bAchievementsToo)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_ResetAllStats(_this->linux_side, bAchievementsToo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_FindOrCreateLeaderboard, 16)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_FindOrCreateLeaderboard(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_FindOrCreateLeaderboard(_this->linux_side, pchLeaderboardName, eLeaderboardSortMethod, eLeaderboardDisplayType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_FindLeaderboard, 8)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_FindLeaderboard(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, const char * pchLeaderboardName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_FindLeaderboard(_this->linux_side, pchLeaderboardName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardName, 12)
+const char * __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardName(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardName(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardEntryCount, 12)
+int __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardEntryCount(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardEntryCount(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardSortMethod, 12)
+ELeaderboardSortMethod __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardSortMethod(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardSortMethod(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardDisplayType, 12)
+ELeaderboardDisplayType __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardDisplayType(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardDisplayType(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_DownloadLeaderboardEntries, 24)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_DownloadLeaderboardEntries(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_DownloadLeaderboardEntries(_this->linux_side, hSteamLeaderboard, eLeaderboardDataRequest, nRangeStart, nRangeEnd);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_DownloadLeaderboardEntriesForUsers, 20)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_DownloadLeaderboardEntriesForUsers(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, SteamLeaderboard_t hSteamLeaderboard, CSteamID * prgUsers, int cUsers)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_DownloadLeaderboardEntriesForUsers(_this->linux_side, hSteamLeaderboard, prgUsers, cUsers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetDownloadedLeaderboardEntry, 28)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetDownloadedLeaderboardEntry(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetDownloadedLeaderboardEntry(_this->linux_side, hSteamLeaderboardEntries, index, pLeaderboardEntry, pDetails, cDetailsMax);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_UploadLeaderboardScore, 28)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_UploadLeaderboardScore(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_UploadLeaderboardScore(_this->linux_side, hSteamLeaderboard, eLeaderboardUploadScoreMethod, nScore, pScoreDetails, cScoreDetailsCount);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_AttachLeaderboardUGC, 20)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_AttachLeaderboardUGC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this, SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_AttachLeaderboardUGC(_this->linux_side, hSteamLeaderboard, hUGC);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetNumberOfCurrentPlayers, 4)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetNumberOfCurrentPlayers(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetNumberOfCurrentPlayers(_this->linux_side);
+}
+
+extern vtable_ptr winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009,
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_RequestCurrentStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_SetStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_SetStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_UpdateAvgRateStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_SetAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_ClearAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievementAndUnlockTime)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_StoreStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievementIcon)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetAchievementDisplayAttribute)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_IndicateAchievementProgress)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_RequestUserStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetUserAchievementAndUnlockTime)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_ResetAllStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_FindOrCreateLeaderboard)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_FindLeaderboard)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardName)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardEntryCount)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardSortMethod)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetLeaderboardDisplayType)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_DownloadLeaderboardEntries)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_DownloadLeaderboardEntriesForUsers)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetDownloadedLeaderboardEntry)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_UploadLeaderboardScore)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_AttachLeaderboardUGC)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_GetNumberOfCurrentPlayers)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009(void *linux_side)
+{
+ winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007.h"
+
+typedef struct __winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007;
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_RequestCurrentStats, 4)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_RequestCurrentStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_RequestCurrentStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetStat, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, const char * pchName, int32 * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetStat(_this->linux_side, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetStat_2, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, const char * pchName, float * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetStat_2(_this->linux_side, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_SetStat, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_SetStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, const char * pchName, int32 nData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_SetStat(_this->linux_side, pchName, nData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_SetStat_2, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_SetStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, const char * pchName, float fData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_SetStat_2(_this->linux_side, pchName, fData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_UpdateAvgRateStat, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_UpdateAvgRateStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, const char * pchName, float flCountThisSession, double dSessionLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_UpdateAvgRateStat(_this->linux_side, pchName, flCountThisSession, dSessionLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievement, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, const char * pchName, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievement(_this->linux_side, pchName, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_SetAchievement, 8)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_SetAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_SetAchievement(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_ClearAchievement, 8)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_ClearAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_ClearAchievement(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievementAndUnlockTime, 16)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievementAndUnlockTime(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievementAndUnlockTime(_this->linux_side, pchName, pbAchieved, punUnlockTime);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_StoreStats, 4)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_StoreStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_StoreStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievementIcon, 8)
+int __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievementIcon(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievementIcon(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievementDisplayAttribute, 12)
+const char * __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievementDisplayAttribute(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, const char * pchName, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievementDisplayAttribute(_this->linux_side, pchName, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_IndicateAchievementProgress, 16)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_IndicateAchievementProgress(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_IndicateAchievementProgress(_this->linux_side, pchName, nCurProgress, nMaxProgress);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_RequestUserStats, 12)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_RequestUserStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_RequestUserStats(_this->linux_side, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserStat, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, CSteamID steamIDUser, const char * pchName, int32 * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserStat(_this->linux_side, steamIDUser, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserStat_2, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, CSteamID steamIDUser, const char * pchName, float * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserStat_2(_this->linux_side, steamIDUser, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserAchievement, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, CSteamID steamIDUser, const char * pchName, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserAchievement(_this->linux_side, steamIDUser, pchName, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserAchievementAndUnlockTime, 24)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserAchievementAndUnlockTime(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, CSteamID steamIDUser, const char * pchName, bool * pbAchieved, uint32 * punUnlockTime)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserAchievementAndUnlockTime(_this->linux_side, steamIDUser, pchName, pbAchieved, punUnlockTime);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_ResetAllStats, 5)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_ResetAllStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, bool bAchievementsToo)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_ResetAllStats(_this->linux_side, bAchievementsToo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_FindOrCreateLeaderboard, 16)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_FindOrCreateLeaderboard(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_FindOrCreateLeaderboard(_this->linux_side, pchLeaderboardName, eLeaderboardSortMethod, eLeaderboardDisplayType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_FindLeaderboard, 8)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_FindLeaderboard(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, const char * pchLeaderboardName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_FindLeaderboard(_this->linux_side, pchLeaderboardName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardName, 12)
+const char * __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardName(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardName(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardEntryCount, 12)
+int __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardEntryCount(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardEntryCount(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardSortMethod, 12)
+ELeaderboardSortMethod __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardSortMethod(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardSortMethod(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardDisplayType, 12)
+ELeaderboardDisplayType __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardDisplayType(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardDisplayType(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_DownloadLeaderboardEntries, 24)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_DownloadLeaderboardEntries(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_DownloadLeaderboardEntries(_this->linux_side, hSteamLeaderboard, eLeaderboardDataRequest, nRangeStart, nRangeEnd);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetDownloadedLeaderboardEntry, 28)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetDownloadedLeaderboardEntry(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetDownloadedLeaderboardEntry(_this->linux_side, hSteamLeaderboardEntries, index, pLeaderboardEntry, pDetails, cDetailsMax);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_UploadLeaderboardScore, 28)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_UploadLeaderboardScore(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_UploadLeaderboardScore(_this->linux_side, hSteamLeaderboard, eLeaderboardUploadScoreMethod, nScore, pScoreDetails, cScoreDetailsCount);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetNumberOfCurrentPlayers, 4)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetNumberOfCurrentPlayers(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetNumberOfCurrentPlayers(_this->linux_side);
+}
+
+extern vtable_ptr winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007,
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_RequestCurrentStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_SetStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_SetStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_UpdateAvgRateStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_SetAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_ClearAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievementAndUnlockTime)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_StoreStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievementIcon)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetAchievementDisplayAttribute)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_IndicateAchievementProgress)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_RequestUserStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetUserAchievementAndUnlockTime)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_ResetAllStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_FindOrCreateLeaderboard)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_FindLeaderboard)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardName)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardEntryCount)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardSortMethod)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetLeaderboardDisplayType)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_DownloadLeaderboardEntries)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetDownloadedLeaderboardEntry)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_UploadLeaderboardScore)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_GetNumberOfCurrentPlayers)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007(void *linux_side)
+{
+ winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006.h"
+
+typedef struct __winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006;
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_RequestCurrentStats, 4)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_RequestCurrentStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_RequestCurrentStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetStat, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, const char * pchName, int32 * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetStat(_this->linux_side, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetStat_2, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, const char * pchName, float * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetStat_2(_this->linux_side, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_SetStat, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_SetStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, const char * pchName, int32 nData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_SetStat(_this->linux_side, pchName, nData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_SetStat_2, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_SetStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, const char * pchName, float fData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_SetStat_2(_this->linux_side, pchName, fData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_UpdateAvgRateStat, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_UpdateAvgRateStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, const char * pchName, float flCountThisSession, double dSessionLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_UpdateAvgRateStat(_this->linux_side, pchName, flCountThisSession, dSessionLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetAchievement, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, const char * pchName, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetAchievement(_this->linux_side, pchName, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_SetAchievement, 8)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_SetAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_SetAchievement(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_ClearAchievement, 8)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_ClearAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_ClearAchievement(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_StoreStats, 4)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_StoreStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_StoreStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetAchievementIcon, 8)
+int __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetAchievementIcon(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetAchievementIcon(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetAchievementDisplayAttribute, 12)
+const char * __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetAchievementDisplayAttribute(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, const char * pchName, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetAchievementDisplayAttribute(_this->linux_side, pchName, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_IndicateAchievementProgress, 16)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_IndicateAchievementProgress(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_IndicateAchievementProgress(_this->linux_side, pchName, nCurProgress, nMaxProgress);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_RequestUserStats, 12)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_RequestUserStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_RequestUserStats(_this->linux_side, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetUserStat, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetUserStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, CSteamID steamIDUser, const char * pchName, int32 * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetUserStat(_this->linux_side, steamIDUser, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetUserStat_2, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetUserStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, CSteamID steamIDUser, const char * pchName, float * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetUserStat_2(_this->linux_side, steamIDUser, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetUserAchievement, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetUserAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, CSteamID steamIDUser, const char * pchName, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetUserAchievement(_this->linux_side, steamIDUser, pchName, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_ResetAllStats, 5)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_ResetAllStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, bool bAchievementsToo)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_ResetAllStats(_this->linux_side, bAchievementsToo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_FindOrCreateLeaderboard, 16)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_FindOrCreateLeaderboard(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_FindOrCreateLeaderboard(_this->linux_side, pchLeaderboardName, eLeaderboardSortMethod, eLeaderboardDisplayType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_FindLeaderboard, 8)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_FindLeaderboard(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, const char * pchLeaderboardName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_FindLeaderboard(_this->linux_side, pchLeaderboardName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardName, 12)
+const char * __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardName(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardName(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardEntryCount, 12)
+int __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardEntryCount(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardEntryCount(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardSortMethod, 12)
+ELeaderboardSortMethod __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardSortMethod(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardSortMethod(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardDisplayType, 12)
+ELeaderboardDisplayType __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardDisplayType(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardDisplayType(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_DownloadLeaderboardEntries, 24)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_DownloadLeaderboardEntries(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_DownloadLeaderboardEntries(_this->linux_side, hSteamLeaderboard, eLeaderboardDataRequest, nRangeStart, nRangeEnd);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetDownloadedLeaderboardEntry, 28)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetDownloadedLeaderboardEntry(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetDownloadedLeaderboardEntry(_this->linux_side, hSteamLeaderboardEntries, index, pLeaderboardEntry, pDetails, cDetailsMax);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_UploadLeaderboardScore, 28)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_UploadLeaderboardScore(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 * pScoreDetails, int cScoreDetailsCount)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_UploadLeaderboardScore(_this->linux_side, hSteamLeaderboard, eLeaderboardUploadScoreMethod, nScore, pScoreDetails, cScoreDetailsCount);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetNumberOfCurrentPlayers, 4)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetNumberOfCurrentPlayers(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetNumberOfCurrentPlayers(_this->linux_side);
+}
+
+extern vtable_ptr winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006,
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_RequestCurrentStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_SetStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_SetStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_UpdateAvgRateStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_SetAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_ClearAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_StoreStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetAchievementIcon)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetAchievementDisplayAttribute)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_IndicateAchievementProgress)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_RequestUserStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetUserStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetUserStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetUserAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_ResetAllStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_FindOrCreateLeaderboard)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_FindLeaderboard)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardName)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardEntryCount)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardSortMethod)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetLeaderboardDisplayType)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_DownloadLeaderboardEntries)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetDownloadedLeaderboardEntry)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_UploadLeaderboardScore)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_GetNumberOfCurrentPlayers)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006(void *linux_side)
+{
+ winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005.h"
+
+typedef struct __winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005;
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_RequestCurrentStats, 4)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_RequestCurrentStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_RequestCurrentStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetStat, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, const char * pchName, int32 * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetStat(_this->linux_side, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetStat_2, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, const char * pchName, float * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetStat_2(_this->linux_side, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_SetStat, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_SetStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, const char * pchName, int32 nData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_SetStat(_this->linux_side, pchName, nData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_SetStat_2, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_SetStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, const char * pchName, float fData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_SetStat_2(_this->linux_side, pchName, fData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_UpdateAvgRateStat, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_UpdateAvgRateStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, const char * pchName, float flCountThisSession, double dSessionLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_UpdateAvgRateStat(_this->linux_side, pchName, flCountThisSession, dSessionLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetAchievement, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, const char * pchName, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetAchievement(_this->linux_side, pchName, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_SetAchievement, 8)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_SetAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_SetAchievement(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_ClearAchievement, 8)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_ClearAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_ClearAchievement(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_StoreStats, 4)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_StoreStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_StoreStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetAchievementIcon, 8)
+int __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetAchievementIcon(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetAchievementIcon(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetAchievementDisplayAttribute, 12)
+const char * __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetAchievementDisplayAttribute(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, const char * pchName, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetAchievementDisplayAttribute(_this->linux_side, pchName, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_IndicateAchievementProgress, 16)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_IndicateAchievementProgress(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_IndicateAchievementProgress(_this->linux_side, pchName, nCurProgress, nMaxProgress);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_RequestUserStats, 12)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_RequestUserStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_RequestUserStats(_this->linux_side, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetUserStat, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetUserStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, CSteamID steamIDUser, const char * pchName, int32 * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetUserStat(_this->linux_side, steamIDUser, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetUserStat_2, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetUserStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, CSteamID steamIDUser, const char * pchName, float * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetUserStat_2(_this->linux_side, steamIDUser, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetUserAchievement, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetUserAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, CSteamID steamIDUser, const char * pchName, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetUserAchievement(_this->linux_side, steamIDUser, pchName, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_ResetAllStats, 5)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_ResetAllStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, bool bAchievementsToo)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_ResetAllStats(_this->linux_side, bAchievementsToo);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_FindOrCreateLeaderboard, 16)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_FindOrCreateLeaderboard(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, const char * pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_FindOrCreateLeaderboard(_this->linux_side, pchLeaderboardName, eLeaderboardSortMethod, eLeaderboardDisplayType);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_FindLeaderboard, 8)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_FindLeaderboard(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, const char * pchLeaderboardName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_FindLeaderboard(_this->linux_side, pchLeaderboardName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardName, 12)
+const char * __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardName(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardName(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardEntryCount, 12)
+int __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardEntryCount(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardEntryCount(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardSortMethod, 12)
+ELeaderboardSortMethod __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardSortMethod(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardSortMethod(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardDisplayType, 12)
+ELeaderboardDisplayType __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardDisplayType(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, SteamLeaderboard_t hSteamLeaderboard)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardDisplayType(_this->linux_side, hSteamLeaderboard);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_DownloadLeaderboardEntries, 24)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_DownloadLeaderboardEntries(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_DownloadLeaderboardEntries(_this->linux_side, hSteamLeaderboard, eLeaderboardDataRequest, nRangeStart, nRangeEnd);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetDownloadedLeaderboardEntry, 28)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetDownloadedLeaderboardEntry(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t * pLeaderboardEntry, int32 * pDetails, int cDetailsMax)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetDownloadedLeaderboardEntry(_this->linux_side, hSteamLeaderboardEntries, index, pLeaderboardEntry, pDetails, cDetailsMax);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_UploadLeaderboardScore, 24)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_UploadLeaderboardScore(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *_this, SteamLeaderboard_t hSteamLeaderboard, int32 nScore, int32 * pScoreDetails, int cScoreDetailsCount)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_UploadLeaderboardScore(_this->linux_side, hSteamLeaderboard, nScore, pScoreDetails, cScoreDetailsCount);
+}
+
+extern vtable_ptr winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005,
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_RequestCurrentStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_SetStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_SetStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_UpdateAvgRateStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_SetAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_ClearAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_StoreStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetAchievementIcon)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetAchievementDisplayAttribute)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_IndicateAchievementProgress)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_RequestUserStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetUserStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetUserStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetUserAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_ResetAllStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_FindOrCreateLeaderboard)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_FindLeaderboard)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardName)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardEntryCount)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardSortMethod)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetLeaderboardDisplayType)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_DownloadLeaderboardEntries)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_GetDownloadedLeaderboardEntry)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_UploadLeaderboardScore)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005(void *linux_side)
+{
+ winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004.h"
+
+typedef struct __winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004;
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_RequestCurrentStats, 4)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_RequestCurrentStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_RequestCurrentStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetStat, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *_this, const char * pchName, int32 * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetStat(_this->linux_side, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetStat_2, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *_this, const char * pchName, float * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetStat_2(_this->linux_side, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_SetStat, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_SetStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *_this, const char * pchName, int32 nData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_SetStat(_this->linux_side, pchName, nData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_SetStat_2, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_SetStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *_this, const char * pchName, float fData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_SetStat_2(_this->linux_side, pchName, fData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_UpdateAvgRateStat, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_UpdateAvgRateStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *_this, const char * pchName, float flCountThisSession, double dSessionLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_UpdateAvgRateStat(_this->linux_side, pchName, flCountThisSession, dSessionLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetAchievement, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *_this, const char * pchName, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetAchievement(_this->linux_side, pchName, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_SetAchievement, 8)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_SetAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_SetAchievement(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_ClearAchievement, 8)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_ClearAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_ClearAchievement(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_StoreStats, 4)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_StoreStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_StoreStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetAchievementIcon, 8)
+int __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetAchievementIcon(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetAchievementIcon(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetAchievementDisplayAttribute, 12)
+const char * __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetAchievementDisplayAttribute(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *_this, const char * pchName, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetAchievementDisplayAttribute(_this->linux_side, pchName, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_IndicateAchievementProgress, 16)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_IndicateAchievementProgress(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *_this, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_IndicateAchievementProgress(_this->linux_side, pchName, nCurProgress, nMaxProgress);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_RequestUserStats, 12)
+SteamAPICall_t __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_RequestUserStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *_this, CSteamID steamIDUser)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_RequestUserStats(_this->linux_side, steamIDUser);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetUserStat, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetUserStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *_this, CSteamID steamIDUser, const char * pchName, int32 * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetUserStat(_this->linux_side, steamIDUser, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetUserStat_2, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetUserStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *_this, CSteamID steamIDUser, const char * pchName, float * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetUserStat_2(_this->linux_side, steamIDUser, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetUserAchievement, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetUserAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *_this, CSteamID steamIDUser, const char * pchName, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetUserAchievement(_this->linux_side, steamIDUser, pchName, pbAchieved);
+}
+
+extern vtable_ptr winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004,
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_RequestCurrentStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_SetStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_SetStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_UpdateAvgRateStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_SetAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_ClearAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_StoreStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetAchievementIcon)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetAchievementDisplayAttribute)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_IndicateAchievementProgress)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_RequestUserStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetUserStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetUserStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_GetUserAchievement)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004(void *linux_side)
+{
+ winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003.h"
+
+typedef struct __winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003;
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_RequestCurrentStats, 4)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_RequestCurrentStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_RequestCurrentStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetStat, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003 *_this, const char * pchName, int32 * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetStat(_this->linux_side, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetStat_2, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003 *_this, const char * pchName, float * pData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetStat_2(_this->linux_side, pchName, pData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_SetStat, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_SetStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003 *_this, const char * pchName, int32 nData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_SetStat(_this->linux_side, pchName, nData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_SetStat_2, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_SetStat_2(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003 *_this, const char * pchName, float fData)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_SetStat_2(_this->linux_side, pchName, fData);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_UpdateAvgRateStat, 20)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_UpdateAvgRateStat(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003 *_this, const char * pchName, float flCountThisSession, double dSessionLength)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_UpdateAvgRateStat(_this->linux_side, pchName, flCountThisSession, dSessionLength);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetAchievement, 12)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003 *_this, const char * pchName, bool * pbAchieved)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetAchievement(_this->linux_side, pchName, pbAchieved);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_SetAchievement, 8)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_SetAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_SetAchievement(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_ClearAchievement, 8)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_ClearAchievement(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_ClearAchievement(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_StoreStats, 4)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_StoreStats(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_StoreStats(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetAchievementIcon, 8)
+int __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetAchievementIcon(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003 *_this, const char * pchName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetAchievementIcon(_this->linux_side, pchName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetAchievementDisplayAttribute, 12)
+const char * __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetAchievementDisplayAttribute(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003 *_this, const char * pchName, const char * pchKey)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetAchievementDisplayAttribute(_this->linux_side, pchName, pchKey);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_IndicateAchievementProgress, 16)
+bool __thiscall winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_IndicateAchievementProgress(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003 *_this, const char * pchName, uint32 nCurProgress, uint32 nMaxProgress)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_IndicateAchievementProgress(_this->linux_side, pchName, nCurProgress, nMaxProgress);
+}
+
+extern vtable_ptr winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003,
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_RequestCurrentStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_SetStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_SetStat_2)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_UpdateAvgRateStat)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_SetAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_ClearAchievement)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_StoreStats)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetAchievementIcon)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_GetAchievementDisplayAttribute)
+ VTABLE_ADD_FUNC(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_IndicateAchievementProgress)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003 *create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003(void *linux_side)
+{
+ winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamUtils.c b/lsteamclient/winISteamUtils.c
new file mode 100644
index 00000000..4eb2d747
--- /dev/null
+++ b/lsteamclient/winISteamUtils.c
@@ -0,0 +1,1520 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamUtils_SteamUtils009.h"
+
+typedef struct __winISteamUtils_SteamUtils009 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUtils_SteamUtils009;
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_GetSecondsSinceAppActive, 4)
+uint32 __thiscall winISteamUtils_SteamUtils009_GetSecondsSinceAppActive(winISteamUtils_SteamUtils009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_GetSecondsSinceAppActive(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_GetSecondsSinceComputerActive, 4)
+uint32 __thiscall winISteamUtils_SteamUtils009_GetSecondsSinceComputerActive(winISteamUtils_SteamUtils009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_GetSecondsSinceComputerActive(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_GetConnectedUniverse, 4)
+EUniverse __thiscall winISteamUtils_SteamUtils009_GetConnectedUniverse(winISteamUtils_SteamUtils009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_GetConnectedUniverse(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_GetServerRealTime, 4)
+uint32 __thiscall winISteamUtils_SteamUtils009_GetServerRealTime(winISteamUtils_SteamUtils009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_GetServerRealTime(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_GetIPCountry, 4)
+const char * __thiscall winISteamUtils_SteamUtils009_GetIPCountry(winISteamUtils_SteamUtils009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_GetIPCountry(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_GetImageSize, 16)
+bool __thiscall winISteamUtils_SteamUtils009_GetImageSize(winISteamUtils_SteamUtils009 *_this, int iImage, uint32 * pnWidth, uint32 * pnHeight)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_GetImageSize(_this->linux_side, iImage, pnWidth, pnHeight);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_GetImageRGBA, 16)
+bool __thiscall winISteamUtils_SteamUtils009_GetImageRGBA(winISteamUtils_SteamUtils009 *_this, int iImage, uint8 * pubDest, int nDestBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_GetImageRGBA(_this->linux_side, iImage, pubDest, nDestBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_GetCSERIPPort, 12)
+bool __thiscall winISteamUtils_SteamUtils009_GetCSERIPPort(winISteamUtils_SteamUtils009 *_this, uint32 * unIP, uint16 * usPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_GetCSERIPPort(_this->linux_side, unIP, usPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_GetCurrentBatteryPower, 4)
+uint8 __thiscall winISteamUtils_SteamUtils009_GetCurrentBatteryPower(winISteamUtils_SteamUtils009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_GetCurrentBatteryPower(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_GetAppID, 4)
+uint32 __thiscall winISteamUtils_SteamUtils009_GetAppID(winISteamUtils_SteamUtils009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_GetAppID(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_SetOverlayNotificationPosition, 8)
+void __thiscall winISteamUtils_SteamUtils009_SetOverlayNotificationPosition(winISteamUtils_SteamUtils009 *_this, ENotificationPosition eNotificationPosition)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils009_SetOverlayNotificationPosition(_this->linux_side, eNotificationPosition);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_IsAPICallCompleted, 16)
+bool __thiscall winISteamUtils_SteamUtils009_IsAPICallCompleted(winISteamUtils_SteamUtils009 *_this, SteamAPICall_t hSteamAPICall, bool * pbFailed)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_IsAPICallCompleted(_this->linux_side, hSteamAPICall, pbFailed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_GetAPICallFailureReason, 12)
+ESteamAPICallFailure __thiscall winISteamUtils_SteamUtils009_GetAPICallFailureReason(winISteamUtils_SteamUtils009 *_this, SteamAPICall_t hSteamAPICall)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_GetAPICallFailureReason(_this->linux_side, hSteamAPICall);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_GetAPICallResult, 28)
+bool __thiscall winISteamUtils_SteamUtils009_GetAPICallResult(winISteamUtils_SteamUtils009 *_this, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_GetAPICallResult(_this->linux_side, hSteamAPICall, pCallback, cubCallback, iCallbackExpected, pbFailed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_RunFrame, 4)
+void __thiscall winISteamUtils_SteamUtils009_RunFrame(winISteamUtils_SteamUtils009 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils009_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_GetIPCCallCount, 4)
+uint32 __thiscall winISteamUtils_SteamUtils009_GetIPCCallCount(winISteamUtils_SteamUtils009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_GetIPCCallCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_SetWarningMessageHook, 8)
+void __thiscall winISteamUtils_SteamUtils009_SetWarningMessageHook(winISteamUtils_SteamUtils009 *_this, SteamAPIWarningMessageHook_t pFunction)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils009_SetWarningMessageHook(_this->linux_side, pFunction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_IsOverlayEnabled, 4)
+bool __thiscall winISteamUtils_SteamUtils009_IsOverlayEnabled(winISteamUtils_SteamUtils009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_IsOverlayEnabled(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_BOverlayNeedsPresent, 4)
+bool __thiscall winISteamUtils_SteamUtils009_BOverlayNeedsPresent(winISteamUtils_SteamUtils009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_BOverlayNeedsPresent(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_CheckFileSignature, 8)
+SteamAPICall_t __thiscall winISteamUtils_SteamUtils009_CheckFileSignature(winISteamUtils_SteamUtils009 *_this, const char * szFileName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_CheckFileSignature(_this->linux_side, szFileName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_ShowGamepadTextInput, 24)
+bool __thiscall winISteamUtils_SteamUtils009_ShowGamepadTextInput(winISteamUtils_SteamUtils009 *_this, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_ShowGamepadTextInput(_this->linux_side, eInputMode, eLineInputMode, pchDescription, unCharMax, pchExistingText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_GetEnteredGamepadTextLength, 4)
+uint32 __thiscall winISteamUtils_SteamUtils009_GetEnteredGamepadTextLength(winISteamUtils_SteamUtils009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_GetEnteredGamepadTextLength(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_GetEnteredGamepadTextInput, 12)
+bool __thiscall winISteamUtils_SteamUtils009_GetEnteredGamepadTextInput(winISteamUtils_SteamUtils009 *_this, char * pchText, uint32 cchText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_GetEnteredGamepadTextInput(_this->linux_side, pchText, cchText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_GetSteamUILanguage, 4)
+const char * __thiscall winISteamUtils_SteamUtils009_GetSteamUILanguage(winISteamUtils_SteamUtils009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_GetSteamUILanguage(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_IsSteamRunningInVR, 4)
+bool __thiscall winISteamUtils_SteamUtils009_IsSteamRunningInVR(winISteamUtils_SteamUtils009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_IsSteamRunningInVR(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_SetOverlayNotificationInset, 12)
+void __thiscall winISteamUtils_SteamUtils009_SetOverlayNotificationInset(winISteamUtils_SteamUtils009 *_this, int nHorizontalInset, int nVerticalInset)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils009_SetOverlayNotificationInset(_this->linux_side, nHorizontalInset, nVerticalInset);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_IsSteamInBigPictureMode, 4)
+bool __thiscall winISteamUtils_SteamUtils009_IsSteamInBigPictureMode(winISteamUtils_SteamUtils009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_IsSteamInBigPictureMode(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_StartVRDashboard, 4)
+void __thiscall winISteamUtils_SteamUtils009_StartVRDashboard(winISteamUtils_SteamUtils009 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils009_StartVRDashboard(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_IsVRHeadsetStreamingEnabled, 4)
+bool __thiscall winISteamUtils_SteamUtils009_IsVRHeadsetStreamingEnabled(winISteamUtils_SteamUtils009 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils009_IsVRHeadsetStreamingEnabled(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils009_SetVRHeadsetStreamingEnabled, 5)
+void __thiscall winISteamUtils_SteamUtils009_SetVRHeadsetStreamingEnabled(winISteamUtils_SteamUtils009 *_this, bool bEnabled)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils009_SetVRHeadsetStreamingEnabled(_this->linux_side, bEnabled);
+}
+
+extern vtable_ptr winISteamUtils_SteamUtils009_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUtils_SteamUtils009,
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_GetSecondsSinceAppActive)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_GetSecondsSinceComputerActive)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_GetConnectedUniverse)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_GetServerRealTime)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_GetIPCountry)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_GetImageSize)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_GetImageRGBA)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_GetCSERIPPort)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_GetCurrentBatteryPower)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_GetAppID)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_SetOverlayNotificationPosition)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_IsAPICallCompleted)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_GetAPICallFailureReason)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_GetAPICallResult)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_RunFrame)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_GetIPCCallCount)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_SetWarningMessageHook)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_IsOverlayEnabled)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_BOverlayNeedsPresent)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_CheckFileSignature)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_ShowGamepadTextInput)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_GetEnteredGamepadTextLength)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_GetEnteredGamepadTextInput)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_GetSteamUILanguage)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_IsSteamRunningInVR)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_SetOverlayNotificationInset)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_IsSteamInBigPictureMode)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_StartVRDashboard)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_IsVRHeadsetStreamingEnabled)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils009_SetVRHeadsetStreamingEnabled)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUtils_SteamUtils009 *create_winISteamUtils_SteamUtils009(void *linux_side)
+{
+ winISteamUtils_SteamUtils009 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUtils_SteamUtils009));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUtils_SteamUtils009_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUtils_SteamUtils008.h"
+
+typedef struct __winISteamUtils_SteamUtils008 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUtils_SteamUtils008;
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_GetSecondsSinceAppActive, 4)
+uint32 __thiscall winISteamUtils_SteamUtils008_GetSecondsSinceAppActive(winISteamUtils_SteamUtils008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_GetSecondsSinceAppActive(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_GetSecondsSinceComputerActive, 4)
+uint32 __thiscall winISteamUtils_SteamUtils008_GetSecondsSinceComputerActive(winISteamUtils_SteamUtils008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_GetSecondsSinceComputerActive(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_GetConnectedUniverse, 4)
+EUniverse __thiscall winISteamUtils_SteamUtils008_GetConnectedUniverse(winISteamUtils_SteamUtils008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_GetConnectedUniverse(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_GetServerRealTime, 4)
+uint32 __thiscall winISteamUtils_SteamUtils008_GetServerRealTime(winISteamUtils_SteamUtils008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_GetServerRealTime(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_GetIPCountry, 4)
+const char * __thiscall winISteamUtils_SteamUtils008_GetIPCountry(winISteamUtils_SteamUtils008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_GetIPCountry(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_GetImageSize, 16)
+bool __thiscall winISteamUtils_SteamUtils008_GetImageSize(winISteamUtils_SteamUtils008 *_this, int iImage, uint32 * pnWidth, uint32 * pnHeight)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_GetImageSize(_this->linux_side, iImage, pnWidth, pnHeight);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_GetImageRGBA, 16)
+bool __thiscall winISteamUtils_SteamUtils008_GetImageRGBA(winISteamUtils_SteamUtils008 *_this, int iImage, uint8 * pubDest, int nDestBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_GetImageRGBA(_this->linux_side, iImage, pubDest, nDestBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_GetCSERIPPort, 12)
+bool __thiscall winISteamUtils_SteamUtils008_GetCSERIPPort(winISteamUtils_SteamUtils008 *_this, uint32 * unIP, uint16 * usPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_GetCSERIPPort(_this->linux_side, unIP, usPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_GetCurrentBatteryPower, 4)
+uint8 __thiscall winISteamUtils_SteamUtils008_GetCurrentBatteryPower(winISteamUtils_SteamUtils008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_GetCurrentBatteryPower(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_GetAppID, 4)
+uint32 __thiscall winISteamUtils_SteamUtils008_GetAppID(winISteamUtils_SteamUtils008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_GetAppID(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_SetOverlayNotificationPosition, 8)
+void __thiscall winISteamUtils_SteamUtils008_SetOverlayNotificationPosition(winISteamUtils_SteamUtils008 *_this, ENotificationPosition eNotificationPosition)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils008_SetOverlayNotificationPosition(_this->linux_side, eNotificationPosition);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_IsAPICallCompleted, 16)
+bool __thiscall winISteamUtils_SteamUtils008_IsAPICallCompleted(winISteamUtils_SteamUtils008 *_this, SteamAPICall_t hSteamAPICall, bool * pbFailed)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_IsAPICallCompleted(_this->linux_side, hSteamAPICall, pbFailed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_GetAPICallFailureReason, 12)
+ESteamAPICallFailure __thiscall winISteamUtils_SteamUtils008_GetAPICallFailureReason(winISteamUtils_SteamUtils008 *_this, SteamAPICall_t hSteamAPICall)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_GetAPICallFailureReason(_this->linux_side, hSteamAPICall);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_GetAPICallResult, 28)
+bool __thiscall winISteamUtils_SteamUtils008_GetAPICallResult(winISteamUtils_SteamUtils008 *_this, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_GetAPICallResult(_this->linux_side, hSteamAPICall, pCallback, cubCallback, iCallbackExpected, pbFailed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_RunFrame, 4)
+void __thiscall winISteamUtils_SteamUtils008_RunFrame(winISteamUtils_SteamUtils008 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils008_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_GetIPCCallCount, 4)
+uint32 __thiscall winISteamUtils_SteamUtils008_GetIPCCallCount(winISteamUtils_SteamUtils008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_GetIPCCallCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_SetWarningMessageHook, 8)
+void __thiscall winISteamUtils_SteamUtils008_SetWarningMessageHook(winISteamUtils_SteamUtils008 *_this, SteamAPIWarningMessageHook_t pFunction)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils008_SetWarningMessageHook(_this->linux_side, pFunction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_IsOverlayEnabled, 4)
+bool __thiscall winISteamUtils_SteamUtils008_IsOverlayEnabled(winISteamUtils_SteamUtils008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_IsOverlayEnabled(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_BOverlayNeedsPresent, 4)
+bool __thiscall winISteamUtils_SteamUtils008_BOverlayNeedsPresent(winISteamUtils_SteamUtils008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_BOverlayNeedsPresent(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_CheckFileSignature, 8)
+SteamAPICall_t __thiscall winISteamUtils_SteamUtils008_CheckFileSignature(winISteamUtils_SteamUtils008 *_this, const char * szFileName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_CheckFileSignature(_this->linux_side, szFileName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_ShowGamepadTextInput, 24)
+bool __thiscall winISteamUtils_SteamUtils008_ShowGamepadTextInput(winISteamUtils_SteamUtils008 *_this, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_ShowGamepadTextInput(_this->linux_side, eInputMode, eLineInputMode, pchDescription, unCharMax, pchExistingText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_GetEnteredGamepadTextLength, 4)
+uint32 __thiscall winISteamUtils_SteamUtils008_GetEnteredGamepadTextLength(winISteamUtils_SteamUtils008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_GetEnteredGamepadTextLength(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_GetEnteredGamepadTextInput, 12)
+bool __thiscall winISteamUtils_SteamUtils008_GetEnteredGamepadTextInput(winISteamUtils_SteamUtils008 *_this, char * pchText, uint32 cchText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_GetEnteredGamepadTextInput(_this->linux_side, pchText, cchText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_GetSteamUILanguage, 4)
+const char * __thiscall winISteamUtils_SteamUtils008_GetSteamUILanguage(winISteamUtils_SteamUtils008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_GetSteamUILanguage(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_IsSteamRunningInVR, 4)
+bool __thiscall winISteamUtils_SteamUtils008_IsSteamRunningInVR(winISteamUtils_SteamUtils008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_IsSteamRunningInVR(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_SetOverlayNotificationInset, 12)
+void __thiscall winISteamUtils_SteamUtils008_SetOverlayNotificationInset(winISteamUtils_SteamUtils008 *_this, int nHorizontalInset, int nVerticalInset)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils008_SetOverlayNotificationInset(_this->linux_side, nHorizontalInset, nVerticalInset);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_IsSteamInBigPictureMode, 4)
+bool __thiscall winISteamUtils_SteamUtils008_IsSteamInBigPictureMode(winISteamUtils_SteamUtils008 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils008_IsSteamInBigPictureMode(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils008_StartVRDashboard, 4)
+void __thiscall winISteamUtils_SteamUtils008_StartVRDashboard(winISteamUtils_SteamUtils008 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils008_StartVRDashboard(_this->linux_side);
+}
+
+extern vtable_ptr winISteamUtils_SteamUtils008_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUtils_SteamUtils008,
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_GetSecondsSinceAppActive)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_GetSecondsSinceComputerActive)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_GetConnectedUniverse)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_GetServerRealTime)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_GetIPCountry)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_GetImageSize)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_GetImageRGBA)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_GetCSERIPPort)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_GetCurrentBatteryPower)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_GetAppID)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_SetOverlayNotificationPosition)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_IsAPICallCompleted)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_GetAPICallFailureReason)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_GetAPICallResult)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_RunFrame)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_GetIPCCallCount)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_SetWarningMessageHook)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_IsOverlayEnabled)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_BOverlayNeedsPresent)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_CheckFileSignature)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_ShowGamepadTextInput)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_GetEnteredGamepadTextLength)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_GetEnteredGamepadTextInput)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_GetSteamUILanguage)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_IsSteamRunningInVR)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_SetOverlayNotificationInset)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_IsSteamInBigPictureMode)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils008_StartVRDashboard)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUtils_SteamUtils008 *create_winISteamUtils_SteamUtils008(void *linux_side)
+{
+ winISteamUtils_SteamUtils008 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUtils_SteamUtils008));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUtils_SteamUtils008_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUtils_SteamUtils007.h"
+
+typedef struct __winISteamUtils_SteamUtils007 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUtils_SteamUtils007;
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_GetSecondsSinceAppActive, 4)
+uint32 __thiscall winISteamUtils_SteamUtils007_GetSecondsSinceAppActive(winISteamUtils_SteamUtils007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_GetSecondsSinceAppActive(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_GetSecondsSinceComputerActive, 4)
+uint32 __thiscall winISteamUtils_SteamUtils007_GetSecondsSinceComputerActive(winISteamUtils_SteamUtils007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_GetSecondsSinceComputerActive(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_GetConnectedUniverse, 4)
+EUniverse __thiscall winISteamUtils_SteamUtils007_GetConnectedUniverse(winISteamUtils_SteamUtils007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_GetConnectedUniverse(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_GetServerRealTime, 4)
+uint32 __thiscall winISteamUtils_SteamUtils007_GetServerRealTime(winISteamUtils_SteamUtils007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_GetServerRealTime(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_GetIPCountry, 4)
+const char * __thiscall winISteamUtils_SteamUtils007_GetIPCountry(winISteamUtils_SteamUtils007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_GetIPCountry(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_GetImageSize, 16)
+bool __thiscall winISteamUtils_SteamUtils007_GetImageSize(winISteamUtils_SteamUtils007 *_this, int iImage, uint32 * pnWidth, uint32 * pnHeight)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_GetImageSize(_this->linux_side, iImage, pnWidth, pnHeight);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_GetImageRGBA, 16)
+bool __thiscall winISteamUtils_SteamUtils007_GetImageRGBA(winISteamUtils_SteamUtils007 *_this, int iImage, uint8 * pubDest, int nDestBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_GetImageRGBA(_this->linux_side, iImage, pubDest, nDestBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_GetCSERIPPort, 12)
+bool __thiscall winISteamUtils_SteamUtils007_GetCSERIPPort(winISteamUtils_SteamUtils007 *_this, uint32 * unIP, uint16 * usPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_GetCSERIPPort(_this->linux_side, unIP, usPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_GetCurrentBatteryPower, 4)
+uint8 __thiscall winISteamUtils_SteamUtils007_GetCurrentBatteryPower(winISteamUtils_SteamUtils007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_GetCurrentBatteryPower(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_GetAppID, 4)
+uint32 __thiscall winISteamUtils_SteamUtils007_GetAppID(winISteamUtils_SteamUtils007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_GetAppID(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_SetOverlayNotificationPosition, 8)
+void __thiscall winISteamUtils_SteamUtils007_SetOverlayNotificationPosition(winISteamUtils_SteamUtils007 *_this, ENotificationPosition eNotificationPosition)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils007_SetOverlayNotificationPosition(_this->linux_side, eNotificationPosition);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_IsAPICallCompleted, 16)
+bool __thiscall winISteamUtils_SteamUtils007_IsAPICallCompleted(winISteamUtils_SteamUtils007 *_this, SteamAPICall_t hSteamAPICall, bool * pbFailed)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_IsAPICallCompleted(_this->linux_side, hSteamAPICall, pbFailed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_GetAPICallFailureReason, 12)
+ESteamAPICallFailure __thiscall winISteamUtils_SteamUtils007_GetAPICallFailureReason(winISteamUtils_SteamUtils007 *_this, SteamAPICall_t hSteamAPICall)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_GetAPICallFailureReason(_this->linux_side, hSteamAPICall);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_GetAPICallResult, 28)
+bool __thiscall winISteamUtils_SteamUtils007_GetAPICallResult(winISteamUtils_SteamUtils007 *_this, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_GetAPICallResult(_this->linux_side, hSteamAPICall, pCallback, cubCallback, iCallbackExpected, pbFailed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_RunFrame, 4)
+void __thiscall winISteamUtils_SteamUtils007_RunFrame(winISteamUtils_SteamUtils007 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils007_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_GetIPCCallCount, 4)
+uint32 __thiscall winISteamUtils_SteamUtils007_GetIPCCallCount(winISteamUtils_SteamUtils007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_GetIPCCallCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_SetWarningMessageHook, 8)
+void __thiscall winISteamUtils_SteamUtils007_SetWarningMessageHook(winISteamUtils_SteamUtils007 *_this, SteamAPIWarningMessageHook_t pFunction)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils007_SetWarningMessageHook(_this->linux_side, pFunction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_IsOverlayEnabled, 4)
+bool __thiscall winISteamUtils_SteamUtils007_IsOverlayEnabled(winISteamUtils_SteamUtils007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_IsOverlayEnabled(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_BOverlayNeedsPresent, 4)
+bool __thiscall winISteamUtils_SteamUtils007_BOverlayNeedsPresent(winISteamUtils_SteamUtils007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_BOverlayNeedsPresent(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_CheckFileSignature, 8)
+SteamAPICall_t __thiscall winISteamUtils_SteamUtils007_CheckFileSignature(winISteamUtils_SteamUtils007 *_this, const char * szFileName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_CheckFileSignature(_this->linux_side, szFileName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_ShowGamepadTextInput, 24)
+bool __thiscall winISteamUtils_SteamUtils007_ShowGamepadTextInput(winISteamUtils_SteamUtils007 *_this, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax, const char * pchExistingText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_ShowGamepadTextInput(_this->linux_side, eInputMode, eLineInputMode, pchDescription, unCharMax, pchExistingText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_GetEnteredGamepadTextLength, 4)
+uint32 __thiscall winISteamUtils_SteamUtils007_GetEnteredGamepadTextLength(winISteamUtils_SteamUtils007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_GetEnteredGamepadTextLength(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_GetEnteredGamepadTextInput, 12)
+bool __thiscall winISteamUtils_SteamUtils007_GetEnteredGamepadTextInput(winISteamUtils_SteamUtils007 *_this, char * pchText, uint32 cchText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_GetEnteredGamepadTextInput(_this->linux_side, pchText, cchText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_GetSteamUILanguage, 4)
+const char * __thiscall winISteamUtils_SteamUtils007_GetSteamUILanguage(winISteamUtils_SteamUtils007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_GetSteamUILanguage(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_IsSteamRunningInVR, 4)
+bool __thiscall winISteamUtils_SteamUtils007_IsSteamRunningInVR(winISteamUtils_SteamUtils007 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils007_IsSteamRunningInVR(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils007_SetOverlayNotificationInset, 12)
+void __thiscall winISteamUtils_SteamUtils007_SetOverlayNotificationInset(winISteamUtils_SteamUtils007 *_this, int nHorizontalInset, int nVerticalInset)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils007_SetOverlayNotificationInset(_this->linux_side, nHorizontalInset, nVerticalInset);
+}
+
+extern vtable_ptr winISteamUtils_SteamUtils007_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUtils_SteamUtils007,
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_GetSecondsSinceAppActive)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_GetSecondsSinceComputerActive)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_GetConnectedUniverse)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_GetServerRealTime)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_GetIPCountry)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_GetImageSize)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_GetImageRGBA)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_GetCSERIPPort)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_GetCurrentBatteryPower)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_GetAppID)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_SetOverlayNotificationPosition)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_IsAPICallCompleted)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_GetAPICallFailureReason)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_GetAPICallResult)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_RunFrame)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_GetIPCCallCount)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_SetWarningMessageHook)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_IsOverlayEnabled)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_BOverlayNeedsPresent)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_CheckFileSignature)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_ShowGamepadTextInput)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_GetEnteredGamepadTextLength)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_GetEnteredGamepadTextInput)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_GetSteamUILanguage)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_IsSteamRunningInVR)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils007_SetOverlayNotificationInset)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUtils_SteamUtils007 *create_winISteamUtils_SteamUtils007(void *linux_side)
+{
+ winISteamUtils_SteamUtils007 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUtils_SteamUtils007));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUtils_SteamUtils007_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUtils_SteamUtils006.h"
+
+typedef struct __winISteamUtils_SteamUtils006 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUtils_SteamUtils006;
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_GetSecondsSinceAppActive, 4)
+uint32 __thiscall winISteamUtils_SteamUtils006_GetSecondsSinceAppActive(winISteamUtils_SteamUtils006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_GetSecondsSinceAppActive(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_GetSecondsSinceComputerActive, 4)
+uint32 __thiscall winISteamUtils_SteamUtils006_GetSecondsSinceComputerActive(winISteamUtils_SteamUtils006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_GetSecondsSinceComputerActive(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_GetConnectedUniverse, 4)
+EUniverse __thiscall winISteamUtils_SteamUtils006_GetConnectedUniverse(winISteamUtils_SteamUtils006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_GetConnectedUniverse(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_GetServerRealTime, 4)
+uint32 __thiscall winISteamUtils_SteamUtils006_GetServerRealTime(winISteamUtils_SteamUtils006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_GetServerRealTime(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_GetIPCountry, 4)
+const char * __thiscall winISteamUtils_SteamUtils006_GetIPCountry(winISteamUtils_SteamUtils006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_GetIPCountry(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_GetImageSize, 16)
+bool __thiscall winISteamUtils_SteamUtils006_GetImageSize(winISteamUtils_SteamUtils006 *_this, int iImage, uint32 * pnWidth, uint32 * pnHeight)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_GetImageSize(_this->linux_side, iImage, pnWidth, pnHeight);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_GetImageRGBA, 16)
+bool __thiscall winISteamUtils_SteamUtils006_GetImageRGBA(winISteamUtils_SteamUtils006 *_this, int iImage, uint8 * pubDest, int nDestBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_GetImageRGBA(_this->linux_side, iImage, pubDest, nDestBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_GetCSERIPPort, 12)
+bool __thiscall winISteamUtils_SteamUtils006_GetCSERIPPort(winISteamUtils_SteamUtils006 *_this, uint32 * unIP, uint16 * usPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_GetCSERIPPort(_this->linux_side, unIP, usPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_GetCurrentBatteryPower, 4)
+uint8 __thiscall winISteamUtils_SteamUtils006_GetCurrentBatteryPower(winISteamUtils_SteamUtils006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_GetCurrentBatteryPower(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_GetAppID, 4)
+uint32 __thiscall winISteamUtils_SteamUtils006_GetAppID(winISteamUtils_SteamUtils006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_GetAppID(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_SetOverlayNotificationPosition, 8)
+void __thiscall winISteamUtils_SteamUtils006_SetOverlayNotificationPosition(winISteamUtils_SteamUtils006 *_this, ENotificationPosition eNotificationPosition)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils006_SetOverlayNotificationPosition(_this->linux_side, eNotificationPosition);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_IsAPICallCompleted, 16)
+bool __thiscall winISteamUtils_SteamUtils006_IsAPICallCompleted(winISteamUtils_SteamUtils006 *_this, SteamAPICall_t hSteamAPICall, bool * pbFailed)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_IsAPICallCompleted(_this->linux_side, hSteamAPICall, pbFailed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_GetAPICallFailureReason, 12)
+ESteamAPICallFailure __thiscall winISteamUtils_SteamUtils006_GetAPICallFailureReason(winISteamUtils_SteamUtils006 *_this, SteamAPICall_t hSteamAPICall)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_GetAPICallFailureReason(_this->linux_side, hSteamAPICall);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_GetAPICallResult, 28)
+bool __thiscall winISteamUtils_SteamUtils006_GetAPICallResult(winISteamUtils_SteamUtils006 *_this, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_GetAPICallResult(_this->linux_side, hSteamAPICall, pCallback, cubCallback, iCallbackExpected, pbFailed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_RunFrame, 4)
+void __thiscall winISteamUtils_SteamUtils006_RunFrame(winISteamUtils_SteamUtils006 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils006_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_GetIPCCallCount, 4)
+uint32 __thiscall winISteamUtils_SteamUtils006_GetIPCCallCount(winISteamUtils_SteamUtils006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_GetIPCCallCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_SetWarningMessageHook, 8)
+void __thiscall winISteamUtils_SteamUtils006_SetWarningMessageHook(winISteamUtils_SteamUtils006 *_this, SteamAPIWarningMessageHook_t pFunction)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils006_SetWarningMessageHook(_this->linux_side, pFunction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_IsOverlayEnabled, 4)
+bool __thiscall winISteamUtils_SteamUtils006_IsOverlayEnabled(winISteamUtils_SteamUtils006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_IsOverlayEnabled(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_BOverlayNeedsPresent, 4)
+bool __thiscall winISteamUtils_SteamUtils006_BOverlayNeedsPresent(winISteamUtils_SteamUtils006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_BOverlayNeedsPresent(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_CheckFileSignature, 8)
+SteamAPICall_t __thiscall winISteamUtils_SteamUtils006_CheckFileSignature(winISteamUtils_SteamUtils006 *_this, const char * szFileName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_CheckFileSignature(_this->linux_side, szFileName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_ShowGamepadTextInput, 20)
+bool __thiscall winISteamUtils_SteamUtils006_ShowGamepadTextInput(winISteamUtils_SteamUtils006 *_this, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_ShowGamepadTextInput(_this->linux_side, eInputMode, eLineInputMode, pchDescription, unCharMax);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_GetEnteredGamepadTextLength, 4)
+uint32 __thiscall winISteamUtils_SteamUtils006_GetEnteredGamepadTextLength(winISteamUtils_SteamUtils006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_GetEnteredGamepadTextLength(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_GetEnteredGamepadTextInput, 12)
+bool __thiscall winISteamUtils_SteamUtils006_GetEnteredGamepadTextInput(winISteamUtils_SteamUtils006 *_this, char * pchText, uint32 cchText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_GetEnteredGamepadTextInput(_this->linux_side, pchText, cchText);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_GetSteamUILanguage, 4)
+const char * __thiscall winISteamUtils_SteamUtils006_GetSteamUILanguage(winISteamUtils_SteamUtils006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_GetSteamUILanguage(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils006_IsSteamRunningInVR, 4)
+bool __thiscall winISteamUtils_SteamUtils006_IsSteamRunningInVR(winISteamUtils_SteamUtils006 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils006_IsSteamRunningInVR(_this->linux_side);
+}
+
+extern vtable_ptr winISteamUtils_SteamUtils006_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUtils_SteamUtils006,
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_GetSecondsSinceAppActive)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_GetSecondsSinceComputerActive)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_GetConnectedUniverse)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_GetServerRealTime)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_GetIPCountry)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_GetImageSize)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_GetImageRGBA)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_GetCSERIPPort)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_GetCurrentBatteryPower)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_GetAppID)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_SetOverlayNotificationPosition)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_IsAPICallCompleted)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_GetAPICallFailureReason)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_GetAPICallResult)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_RunFrame)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_GetIPCCallCount)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_SetWarningMessageHook)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_IsOverlayEnabled)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_BOverlayNeedsPresent)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_CheckFileSignature)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_ShowGamepadTextInput)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_GetEnteredGamepadTextLength)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_GetEnteredGamepadTextInput)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_GetSteamUILanguage)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils006_IsSteamRunningInVR)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUtils_SteamUtils006 *create_winISteamUtils_SteamUtils006(void *linux_side)
+{
+ winISteamUtils_SteamUtils006 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUtils_SteamUtils006));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUtils_SteamUtils006_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUtils_SteamUtils005.h"
+
+typedef struct __winISteamUtils_SteamUtils005 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUtils_SteamUtils005;
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_GetSecondsSinceAppActive, 4)
+uint32 __thiscall winISteamUtils_SteamUtils005_GetSecondsSinceAppActive(winISteamUtils_SteamUtils005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_GetSecondsSinceAppActive(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_GetSecondsSinceComputerActive, 4)
+uint32 __thiscall winISteamUtils_SteamUtils005_GetSecondsSinceComputerActive(winISteamUtils_SteamUtils005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_GetSecondsSinceComputerActive(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_GetConnectedUniverse, 4)
+EUniverse __thiscall winISteamUtils_SteamUtils005_GetConnectedUniverse(winISteamUtils_SteamUtils005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_GetConnectedUniverse(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_GetServerRealTime, 4)
+uint32 __thiscall winISteamUtils_SteamUtils005_GetServerRealTime(winISteamUtils_SteamUtils005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_GetServerRealTime(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_GetIPCountry, 4)
+const char * __thiscall winISteamUtils_SteamUtils005_GetIPCountry(winISteamUtils_SteamUtils005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_GetIPCountry(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_GetImageSize, 16)
+bool __thiscall winISteamUtils_SteamUtils005_GetImageSize(winISteamUtils_SteamUtils005 *_this, int iImage, uint32 * pnWidth, uint32 * pnHeight)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_GetImageSize(_this->linux_side, iImage, pnWidth, pnHeight);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_GetImageRGBA, 16)
+bool __thiscall winISteamUtils_SteamUtils005_GetImageRGBA(winISteamUtils_SteamUtils005 *_this, int iImage, uint8 * pubDest, int nDestBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_GetImageRGBA(_this->linux_side, iImage, pubDest, nDestBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_GetCSERIPPort, 12)
+bool __thiscall winISteamUtils_SteamUtils005_GetCSERIPPort(winISteamUtils_SteamUtils005 *_this, uint32 * unIP, uint16 * usPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_GetCSERIPPort(_this->linux_side, unIP, usPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_GetCurrentBatteryPower, 4)
+uint8 __thiscall winISteamUtils_SteamUtils005_GetCurrentBatteryPower(winISteamUtils_SteamUtils005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_GetCurrentBatteryPower(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_GetAppID, 4)
+uint32 __thiscall winISteamUtils_SteamUtils005_GetAppID(winISteamUtils_SteamUtils005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_GetAppID(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_SetOverlayNotificationPosition, 8)
+void __thiscall winISteamUtils_SteamUtils005_SetOverlayNotificationPosition(winISteamUtils_SteamUtils005 *_this, ENotificationPosition eNotificationPosition)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils005_SetOverlayNotificationPosition(_this->linux_side, eNotificationPosition);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_IsAPICallCompleted, 16)
+bool __thiscall winISteamUtils_SteamUtils005_IsAPICallCompleted(winISteamUtils_SteamUtils005 *_this, SteamAPICall_t hSteamAPICall, bool * pbFailed)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_IsAPICallCompleted(_this->linux_side, hSteamAPICall, pbFailed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_GetAPICallFailureReason, 12)
+ESteamAPICallFailure __thiscall winISteamUtils_SteamUtils005_GetAPICallFailureReason(winISteamUtils_SteamUtils005 *_this, SteamAPICall_t hSteamAPICall)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_GetAPICallFailureReason(_this->linux_side, hSteamAPICall);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_GetAPICallResult, 28)
+bool __thiscall winISteamUtils_SteamUtils005_GetAPICallResult(winISteamUtils_SteamUtils005 *_this, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_GetAPICallResult(_this->linux_side, hSteamAPICall, pCallback, cubCallback, iCallbackExpected, pbFailed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_RunFrame, 4)
+void __thiscall winISteamUtils_SteamUtils005_RunFrame(winISteamUtils_SteamUtils005 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils005_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_GetIPCCallCount, 4)
+uint32 __thiscall winISteamUtils_SteamUtils005_GetIPCCallCount(winISteamUtils_SteamUtils005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_GetIPCCallCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_SetWarningMessageHook, 8)
+void __thiscall winISteamUtils_SteamUtils005_SetWarningMessageHook(winISteamUtils_SteamUtils005 *_this, SteamAPIWarningMessageHook_t pFunction)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils005_SetWarningMessageHook(_this->linux_side, pFunction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_IsOverlayEnabled, 4)
+bool __thiscall winISteamUtils_SteamUtils005_IsOverlayEnabled(winISteamUtils_SteamUtils005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_IsOverlayEnabled(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_BOverlayNeedsPresent, 4)
+bool __thiscall winISteamUtils_SteamUtils005_BOverlayNeedsPresent(winISteamUtils_SteamUtils005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_BOverlayNeedsPresent(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_CheckFileSignature, 8)
+SteamAPICall_t __thiscall winISteamUtils_SteamUtils005_CheckFileSignature(winISteamUtils_SteamUtils005 *_this, const char * szFileName)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_CheckFileSignature(_this->linux_side, szFileName);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_ShowGamepadTextInput, 20)
+bool __thiscall winISteamUtils_SteamUtils005_ShowGamepadTextInput(winISteamUtils_SteamUtils005 *_this, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char * pchDescription, uint32 unCharMax)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_ShowGamepadTextInput(_this->linux_side, eInputMode, eLineInputMode, pchDescription, unCharMax);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_GetEnteredGamepadTextLength, 4)
+uint32 __thiscall winISteamUtils_SteamUtils005_GetEnteredGamepadTextLength(winISteamUtils_SteamUtils005 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_GetEnteredGamepadTextLength(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils005_GetEnteredGamepadTextInput, 12)
+bool __thiscall winISteamUtils_SteamUtils005_GetEnteredGamepadTextInput(winISteamUtils_SteamUtils005 *_this, char * pchText, uint32 cchText)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils005_GetEnteredGamepadTextInput(_this->linux_side, pchText, cchText);
+}
+
+extern vtable_ptr winISteamUtils_SteamUtils005_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUtils_SteamUtils005,
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_GetSecondsSinceAppActive)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_GetSecondsSinceComputerActive)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_GetConnectedUniverse)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_GetServerRealTime)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_GetIPCountry)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_GetImageSize)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_GetImageRGBA)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_GetCSERIPPort)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_GetCurrentBatteryPower)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_GetAppID)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_SetOverlayNotificationPosition)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_IsAPICallCompleted)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_GetAPICallFailureReason)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_GetAPICallResult)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_RunFrame)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_GetIPCCallCount)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_SetWarningMessageHook)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_IsOverlayEnabled)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_BOverlayNeedsPresent)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_CheckFileSignature)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_ShowGamepadTextInput)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_GetEnteredGamepadTextLength)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils005_GetEnteredGamepadTextInput)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUtils_SteamUtils005 *create_winISteamUtils_SteamUtils005(void *linux_side)
+{
+ winISteamUtils_SteamUtils005 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUtils_SteamUtils005));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUtils_SteamUtils005_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUtils_SteamUtils004.h"
+
+typedef struct __winISteamUtils_SteamUtils004 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUtils_SteamUtils004;
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils004_GetSecondsSinceAppActive, 4)
+uint32 __thiscall winISteamUtils_SteamUtils004_GetSecondsSinceAppActive(winISteamUtils_SteamUtils004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils004_GetSecondsSinceAppActive(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils004_GetSecondsSinceComputerActive, 4)
+uint32 __thiscall winISteamUtils_SteamUtils004_GetSecondsSinceComputerActive(winISteamUtils_SteamUtils004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils004_GetSecondsSinceComputerActive(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils004_GetConnectedUniverse, 4)
+EUniverse __thiscall winISteamUtils_SteamUtils004_GetConnectedUniverse(winISteamUtils_SteamUtils004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils004_GetConnectedUniverse(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils004_GetServerRealTime, 4)
+uint32 __thiscall winISteamUtils_SteamUtils004_GetServerRealTime(winISteamUtils_SteamUtils004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils004_GetServerRealTime(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils004_GetIPCountry, 4)
+const char * __thiscall winISteamUtils_SteamUtils004_GetIPCountry(winISteamUtils_SteamUtils004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils004_GetIPCountry(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils004_GetImageSize, 16)
+bool __thiscall winISteamUtils_SteamUtils004_GetImageSize(winISteamUtils_SteamUtils004 *_this, int iImage, uint32 * pnWidth, uint32 * pnHeight)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils004_GetImageSize(_this->linux_side, iImage, pnWidth, pnHeight);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils004_GetImageRGBA, 16)
+bool __thiscall winISteamUtils_SteamUtils004_GetImageRGBA(winISteamUtils_SteamUtils004 *_this, int iImage, uint8 * pubDest, int nDestBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils004_GetImageRGBA(_this->linux_side, iImage, pubDest, nDestBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils004_GetCSERIPPort, 12)
+bool __thiscall winISteamUtils_SteamUtils004_GetCSERIPPort(winISteamUtils_SteamUtils004 *_this, uint32 * unIP, uint16 * usPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils004_GetCSERIPPort(_this->linux_side, unIP, usPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils004_GetCurrentBatteryPower, 4)
+uint8 __thiscall winISteamUtils_SteamUtils004_GetCurrentBatteryPower(winISteamUtils_SteamUtils004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils004_GetCurrentBatteryPower(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils004_GetAppID, 4)
+uint32 __thiscall winISteamUtils_SteamUtils004_GetAppID(winISteamUtils_SteamUtils004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils004_GetAppID(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils004_SetOverlayNotificationPosition, 8)
+void __thiscall winISteamUtils_SteamUtils004_SetOverlayNotificationPosition(winISteamUtils_SteamUtils004 *_this, ENotificationPosition eNotificationPosition)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils004_SetOverlayNotificationPosition(_this->linux_side, eNotificationPosition);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils004_IsAPICallCompleted, 16)
+bool __thiscall winISteamUtils_SteamUtils004_IsAPICallCompleted(winISteamUtils_SteamUtils004 *_this, SteamAPICall_t hSteamAPICall, bool * pbFailed)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils004_IsAPICallCompleted(_this->linux_side, hSteamAPICall, pbFailed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils004_GetAPICallFailureReason, 12)
+ESteamAPICallFailure __thiscall winISteamUtils_SteamUtils004_GetAPICallFailureReason(winISteamUtils_SteamUtils004 *_this, SteamAPICall_t hSteamAPICall)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils004_GetAPICallFailureReason(_this->linux_side, hSteamAPICall);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils004_GetAPICallResult, 28)
+bool __thiscall winISteamUtils_SteamUtils004_GetAPICallResult(winISteamUtils_SteamUtils004 *_this, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils004_GetAPICallResult(_this->linux_side, hSteamAPICall, pCallback, cubCallback, iCallbackExpected, pbFailed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils004_RunFrame, 4)
+void __thiscall winISteamUtils_SteamUtils004_RunFrame(winISteamUtils_SteamUtils004 *_this)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils004_RunFrame(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils004_GetIPCCallCount, 4)
+uint32 __thiscall winISteamUtils_SteamUtils004_GetIPCCallCount(winISteamUtils_SteamUtils004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils004_GetIPCCallCount(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils004_SetWarningMessageHook, 8)
+void __thiscall winISteamUtils_SteamUtils004_SetWarningMessageHook(winISteamUtils_SteamUtils004 *_this, SteamAPIWarningMessageHook_t pFunction)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils004_SetWarningMessageHook(_this->linux_side, pFunction);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils004_IsOverlayEnabled, 4)
+bool __thiscall winISteamUtils_SteamUtils004_IsOverlayEnabled(winISteamUtils_SteamUtils004 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils004_IsOverlayEnabled(_this->linux_side);
+}
+
+extern vtable_ptr winISteamUtils_SteamUtils004_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUtils_SteamUtils004,
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils004_GetSecondsSinceAppActive)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils004_GetSecondsSinceComputerActive)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils004_GetConnectedUniverse)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils004_GetServerRealTime)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils004_GetIPCountry)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils004_GetImageSize)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils004_GetImageRGBA)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils004_GetCSERIPPort)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils004_GetCurrentBatteryPower)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils004_GetAppID)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils004_SetOverlayNotificationPosition)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils004_IsAPICallCompleted)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils004_GetAPICallFailureReason)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils004_GetAPICallResult)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils004_RunFrame)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils004_GetIPCCallCount)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils004_SetWarningMessageHook)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils004_IsOverlayEnabled)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUtils_SteamUtils004 *create_winISteamUtils_SteamUtils004(void *linux_side)
+{
+ winISteamUtils_SteamUtils004 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUtils_SteamUtils004));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUtils_SteamUtils004_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamUtils_SteamUtils002.h"
+
+typedef struct __winISteamUtils_SteamUtils002 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamUtils_SteamUtils002;
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils002_GetSecondsSinceAppActive, 4)
+uint32 __thiscall winISteamUtils_SteamUtils002_GetSecondsSinceAppActive(winISteamUtils_SteamUtils002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils002_GetSecondsSinceAppActive(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils002_GetSecondsSinceComputerActive, 4)
+uint32 __thiscall winISteamUtils_SteamUtils002_GetSecondsSinceComputerActive(winISteamUtils_SteamUtils002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils002_GetSecondsSinceComputerActive(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils002_GetConnectedUniverse, 4)
+EUniverse __thiscall winISteamUtils_SteamUtils002_GetConnectedUniverse(winISteamUtils_SteamUtils002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils002_GetConnectedUniverse(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils002_GetServerRealTime, 4)
+uint32 __thiscall winISteamUtils_SteamUtils002_GetServerRealTime(winISteamUtils_SteamUtils002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils002_GetServerRealTime(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils002_GetIPCountry, 4)
+const char * __thiscall winISteamUtils_SteamUtils002_GetIPCountry(winISteamUtils_SteamUtils002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils002_GetIPCountry(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils002_GetImageSize, 16)
+bool __thiscall winISteamUtils_SteamUtils002_GetImageSize(winISteamUtils_SteamUtils002 *_this, int iImage, uint32 * pnWidth, uint32 * pnHeight)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils002_GetImageSize(_this->linux_side, iImage, pnWidth, pnHeight);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils002_GetImageRGBA, 16)
+bool __thiscall winISteamUtils_SteamUtils002_GetImageRGBA(winISteamUtils_SteamUtils002 *_this, int iImage, uint8 * pubDest, int nDestBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils002_GetImageRGBA(_this->linux_side, iImage, pubDest, nDestBufferSize);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils002_GetCSERIPPort, 12)
+bool __thiscall winISteamUtils_SteamUtils002_GetCSERIPPort(winISteamUtils_SteamUtils002 *_this, uint32 * unIP, uint16 * usPort)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils002_GetCSERIPPort(_this->linux_side, unIP, usPort);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils002_GetCurrentBatteryPower, 4)
+uint8 __thiscall winISteamUtils_SteamUtils002_GetCurrentBatteryPower(winISteamUtils_SteamUtils002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils002_GetCurrentBatteryPower(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils002_GetAppID, 4)
+uint32 __thiscall winISteamUtils_SteamUtils002_GetAppID(winISteamUtils_SteamUtils002 *_this)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils002_GetAppID(_this->linux_side);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils002_SetOverlayNotificationPosition, 8)
+void __thiscall winISteamUtils_SteamUtils002_SetOverlayNotificationPosition(winISteamUtils_SteamUtils002 *_this, ENotificationPosition eNotificationPosition)
+{
+ TRACE("%p\n", _this);
+ cppISteamUtils_SteamUtils002_SetOverlayNotificationPosition(_this->linux_side, eNotificationPosition);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils002_IsAPICallCompleted, 16)
+bool __thiscall winISteamUtils_SteamUtils002_IsAPICallCompleted(winISteamUtils_SteamUtils002 *_this, SteamAPICall_t hSteamAPICall, bool * pbFailed)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils002_IsAPICallCompleted(_this->linux_side, hSteamAPICall, pbFailed);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils002_GetAPICallFailureReason, 12)
+ESteamAPICallFailure __thiscall winISteamUtils_SteamUtils002_GetAPICallFailureReason(winISteamUtils_SteamUtils002 *_this, SteamAPICall_t hSteamAPICall)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils002_GetAPICallFailureReason(_this->linux_side, hSteamAPICall);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamUtils_SteamUtils002_GetAPICallResult, 28)
+bool __thiscall winISteamUtils_SteamUtils002_GetAPICallResult(winISteamUtils_SteamUtils002 *_this, SteamAPICall_t hSteamAPICall, void * pCallback, int cubCallback, int iCallbackExpected, bool * pbFailed)
+{
+ TRACE("%p\n", _this);
+ return cppISteamUtils_SteamUtils002_GetAPICallResult(_this->linux_side, hSteamAPICall, pCallback, cubCallback, iCallbackExpected, pbFailed);
+}
+
+extern vtable_ptr winISteamUtils_SteamUtils002_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamUtils_SteamUtils002,
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils002_GetSecondsSinceAppActive)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils002_GetSecondsSinceComputerActive)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils002_GetConnectedUniverse)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils002_GetServerRealTime)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils002_GetIPCountry)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils002_GetImageSize)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils002_GetImageRGBA)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils002_GetCSERIPPort)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils002_GetCurrentBatteryPower)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils002_GetAppID)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils002_SetOverlayNotificationPosition)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils002_IsAPICallCompleted)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils002_GetAPICallFailureReason)
+ VTABLE_ADD_FUNC(winISteamUtils_SteamUtils002_GetAPICallResult)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamUtils_SteamUtils002 *create_winISteamUtils_SteamUtils002(void *linux_side)
+{
+ winISteamUtils_SteamUtils002 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamUtils_SteamUtils002));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamUtils_SteamUtils002_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/winISteamVideo.c b/lsteamclient/winISteamVideo.c
new file mode 100644
index 00000000..e424dd41
--- /dev/null
+++ b/lsteamclient/winISteamVideo.c
@@ -0,0 +1,121 @@
+/* This file is auto-generated, do not edit. */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+#include "cxx.h"
+
+#include "steam_defs.h"
+
+#include "steamclient_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(steamclient);
+
+#include "cppISteamVideo_STEAMVIDEO_INTERFACE_V002.h"
+
+typedef struct __winISteamVideo_STEAMVIDEO_INTERFACE_V002 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamVideo_STEAMVIDEO_INTERFACE_V002;
+
+DEFINE_THISCALL_WRAPPER(winISteamVideo_STEAMVIDEO_INTERFACE_V002_GetVideoURL, 8)
+void __thiscall winISteamVideo_STEAMVIDEO_INTERFACE_V002_GetVideoURL(winISteamVideo_STEAMVIDEO_INTERFACE_V002 *_this, AppId_t unVideoAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamVideo_STEAMVIDEO_INTERFACE_V002_GetVideoURL(_this->linux_side, unVideoAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamVideo_STEAMVIDEO_INTERFACE_V002_IsBroadcasting, 8)
+bool __thiscall winISteamVideo_STEAMVIDEO_INTERFACE_V002_IsBroadcasting(winISteamVideo_STEAMVIDEO_INTERFACE_V002 *_this, int * pnNumViewers)
+{
+ TRACE("%p\n", _this);
+ return cppISteamVideo_STEAMVIDEO_INTERFACE_V002_IsBroadcasting(_this->linux_side, pnNumViewers);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamVideo_STEAMVIDEO_INTERFACE_V002_GetOPFSettings, 8)
+void __thiscall winISteamVideo_STEAMVIDEO_INTERFACE_V002_GetOPFSettings(winISteamVideo_STEAMVIDEO_INTERFACE_V002 *_this, AppId_t unVideoAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamVideo_STEAMVIDEO_INTERFACE_V002_GetOPFSettings(_this->linux_side, unVideoAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamVideo_STEAMVIDEO_INTERFACE_V002_GetOPFStringForApp, 16)
+bool __thiscall winISteamVideo_STEAMVIDEO_INTERFACE_V002_GetOPFStringForApp(winISteamVideo_STEAMVIDEO_INTERFACE_V002 *_this, AppId_t unVideoAppID, char * pchBuffer, int32 * pnBufferSize)
+{
+ TRACE("%p\n", _this);
+ return cppISteamVideo_STEAMVIDEO_INTERFACE_V002_GetOPFStringForApp(_this->linux_side, unVideoAppID, pchBuffer, pnBufferSize);
+}
+
+extern vtable_ptr winISteamVideo_STEAMVIDEO_INTERFACE_V002_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamVideo_STEAMVIDEO_INTERFACE_V002,
+ VTABLE_ADD_FUNC(winISteamVideo_STEAMVIDEO_INTERFACE_V002_GetVideoURL)
+ VTABLE_ADD_FUNC(winISteamVideo_STEAMVIDEO_INTERFACE_V002_IsBroadcasting)
+ VTABLE_ADD_FUNC(winISteamVideo_STEAMVIDEO_INTERFACE_V002_GetOPFSettings)
+ VTABLE_ADD_FUNC(winISteamVideo_STEAMVIDEO_INTERFACE_V002_GetOPFStringForApp)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamVideo_STEAMVIDEO_INTERFACE_V002 *create_winISteamVideo_STEAMVIDEO_INTERFACE_V002(void *linux_side)
+{
+ winISteamVideo_STEAMVIDEO_INTERFACE_V002 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamVideo_STEAMVIDEO_INTERFACE_V002));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamVideo_STEAMVIDEO_INTERFACE_V002_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
+#include "cppISteamVideo_STEAMVIDEO_INTERFACE_V001.h"
+
+typedef struct __winISteamVideo_STEAMVIDEO_INTERFACE_V001 {
+ vtable_ptr *vtable;
+ void *linux_side;
+} winISteamVideo_STEAMVIDEO_INTERFACE_V001;
+
+DEFINE_THISCALL_WRAPPER(winISteamVideo_STEAMVIDEO_INTERFACE_V001_GetVideoURL, 8)
+void __thiscall winISteamVideo_STEAMVIDEO_INTERFACE_V001_GetVideoURL(winISteamVideo_STEAMVIDEO_INTERFACE_V001 *_this, AppId_t unVideoAppID)
+{
+ TRACE("%p\n", _this);
+ cppISteamVideo_STEAMVIDEO_INTERFACE_V001_GetVideoURL(_this->linux_side, unVideoAppID);
+}
+
+DEFINE_THISCALL_WRAPPER(winISteamVideo_STEAMVIDEO_INTERFACE_V001_IsBroadcasting, 8)
+bool __thiscall winISteamVideo_STEAMVIDEO_INTERFACE_V001_IsBroadcasting(winISteamVideo_STEAMVIDEO_INTERFACE_V001 *_this, int * pnNumViewers)
+{
+ TRACE("%p\n", _this);
+ return cppISteamVideo_STEAMVIDEO_INTERFACE_V001_IsBroadcasting(_this->linux_side, pnNumViewers);
+}
+
+extern vtable_ptr winISteamVideo_STEAMVIDEO_INTERFACE_V001_vtable;
+
+#ifndef __GNUC__
+void __asm_dummy_vtables(void) {
+#endif
+ __ASM_VTABLE(winISteamVideo_STEAMVIDEO_INTERFACE_V001,
+ VTABLE_ADD_FUNC(winISteamVideo_STEAMVIDEO_INTERFACE_V001_GetVideoURL)
+ VTABLE_ADD_FUNC(winISteamVideo_STEAMVIDEO_INTERFACE_V001_IsBroadcasting)
+ );
+#ifndef __GNUC__
+}
+#endif
+
+winISteamVideo_STEAMVIDEO_INTERFACE_V001 *create_winISteamVideo_STEAMVIDEO_INTERFACE_V001(void *linux_side)
+{
+ winISteamVideo_STEAMVIDEO_INTERFACE_V001 *r = HeapAlloc(GetProcessHeap(), 0, sizeof(winISteamVideo_STEAMVIDEO_INTERFACE_V001));
+ TRACE("-> %p\n", r);
+ r->vtable = &winISteamVideo_STEAMVIDEO_INTERFACE_V001_vtable;
+ r->linux_side = linux_side;
+ return r;
+}
+
diff --git a/lsteamclient/win_constructors.h b/lsteamclient/win_constructors.h
new file mode 100644
index 00000000..d0d1d47b
--- /dev/null
+++ b/lsteamclient/win_constructors.h
@@ -0,0 +1,118 @@
+extern void *create_winISteamClient_SteamClient017(void *);
+extern void *create_winISteamUser_SteamUser019(void *);
+extern void *create_winISteamFriends_SteamFriends015(void *);
+extern void *create_winISteamUtils_SteamUtils009(void *);
+extern void *create_winISteamMatchmaking_SteamMatchMaking009(void *);
+extern void *create_winISteamMatchmakingServers_SteamMatchMakingServers002(void *);
+extern void *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014(void *);
+extern void *create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011(void *);
+extern void *create_winISteamApps_STEAMAPPS_INTERFACE_VERSION008(void *);
+extern void *create_winISteamNetworking_SteamNetworking005(void *);
+extern void *create_winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003(void *);
+extern void *create_winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001(void *);
+extern void *create_winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001(void *);
+extern void *create_winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002(void *);
+extern void *create_winISteamController_SteamController006(void *);
+extern void *create_winISteamUGC_STEAMUGC_INTERFACE_VERSION010(void *);
+extern void *create_winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001(void *);
+extern void *create_winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004(void *);
+extern void *create_winISteamInventory_STEAMINVENTORY_INTERFACE_V002(void *);
+extern void *create_winISteamVideo_STEAMVIDEO_INTERFACE_V002(void *);
+extern void *create_winISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001(void *);
+extern void *create_winISteamGameServer_SteamGameServer012(void *);
+extern void *create_winISteamGameServerStats_SteamGameServerStats001(void *);
+extern void *create_winISteamGameCoordinator_SteamGameCoordinator001(void *);
+extern void *create_winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001(void *);
+extern void *create_winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001(void *);
+extern void *create_winISteamController_SteamController005(void *);
+extern void *create_winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003(void *);
+extern void *create_winISteamUtils_SteamUtils008(void *);
+extern void *create_winISteamUGC_STEAMUGC_INTERFACE_VERSION009(void *);
+extern void *create_winISteamInventory_STEAMINVENTORY_INTERFACE_V001(void *);
+extern void *create_winISteamVideo_STEAMVIDEO_INTERFACE_V001(void *);
+extern void *create_winISteamController_SteamController004(void *);
+extern void *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013(void *);
+extern void *create_winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002(void *);
+extern void *create_winISteamController_SteamController003(void *);
+extern void *create_winISteamUGC_STEAMUGC_INTERFACE_VERSION008(void *);
+extern void *create_winISteamUser_SteamUser018(void *);
+extern void *create_winISteamUtils_SteamUtils007(void *);
+extern void *create_winISteamApps_STEAMAPPS_INTERFACE_VERSION007(void *);
+extern void *create_winISteamUGC_STEAMUGC_INTERFACE_VERSION007(void *);
+extern void *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012(void *);
+extern void *create_winISteamController_STEAMCONTROLLER_INTERFACE_VERSION(void *);
+extern void *create_winISteamUGC_STEAMUGC_INTERFACE_VERSION005(void *);
+extern void *create_winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002(void *);
+extern void *create_winISteamUGC_STEAMUGC_INTERFACE_VERSION003(void *);
+extern void *create_winISteamClient_SteamClient016(void *);
+extern void *create_winISteamUser_SteamUser017(void *);
+extern void *create_winISteamFriends_SteamFriends014(void *);
+extern void *create_winISteamApps_STEAMAPPS_INTERFACE_VERSION006(void *);
+extern void *create_winISteamClient_SteamClient015(void *);
+extern void *create_winISteamUGC_STEAMUGC_INTERFACE_VERSION002(void *);
+extern void *create_winISteamClient_SteamClient014(void *);
+extern void *create_winISteamClient_SteamClient012(void *);
+extern void *create_winISteamUtils_SteamUtils006(void *);
+extern void *create_winISteamUGC_STEAMUGC_INTERFACE_VERSION001(void *);
+extern void *create_winISteamGameServer_SteamGameServer011(void *);
+extern void *create_winISteamFriends_SteamFriends013(void *);
+extern void *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011(void *);
+extern void *create_winISteamApps_STEAMAPPS_INTERFACE_VERSION005(void *);
+extern void *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010(void *);
+extern void *create_winISteamUser_SteamUser016(void *);
+extern void *create_winISteamUtils_SteamUtils005(void *);
+extern void *create_winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001(void *);
+extern void *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008(void *);
+extern void *create_winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001(void *);
+extern void *create_winISteamFriends_SteamFriends011(void *);
+extern void *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006(void *);
+extern void *create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010(void *);
+extern void *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005(void *);
+extern void *create_winISteamApps_STEAMAPPS_INTERFACE_VERSION004(void *);
+extern void *create_winISteamClient_SteamClient011(void *);
+extern void *create_winISteamFriends_SteamFriends009(void *);
+extern void *create_winISteamMatchmaking_SteamMatchMaking008(void *);
+extern void *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004(void *);
+extern void *create_winISteamGameServer_SteamGameServer010(void *);
+extern void *create_winISteamMasterServerUpdater_SteamMasterServerUpdater001(void *);
+extern void *create_winISteamClient_SteamClient010(void *);
+extern void *create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009(void *);
+extern void *create_winISteamUser_SteamUser014(void *);
+extern void *create_winISteamFriends_SteamFriends008(void *);
+extern void *create_winISteamNetworking_SteamNetworking004(void *);
+extern void *create_winISteamClient_SteamClient009(void *);
+extern void *create_winISteamFriends_SteamFriends007(void *);
+extern void *create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007(void *);
+extern void *create_winISteamApps_STEAMAPPS_INTERFACE_VERSION003(void *);
+extern void *create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002(void *);
+extern void *create_winISteamUser_SteamUser013(void *);
+extern void *create_winISteamFriends_SteamFriends006(void *);
+extern void *create_winISteamNetworking_SteamNetworking003(void *);
+extern void *create_winISteamFriends_SteamFriends005(void *);
+extern void *create_winISteamClient_SteamClient008(void *);
+extern void *create_winISteamMatchmaking_SteamMatchMaking007(void *);
+extern void *create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006(void *);
+extern void *create_winISteamGameServer_SteamGameServer009(void *);
+extern void *create_winISteamUtils_SteamUtils004(void *);
+extern void *create_winISteamUser_SteamUser012(void *);
+extern void *create_winISteamMatchmakingServers_SteamMatchMakingServers001(void *);
+extern void *create_winISteamMatchmaking_SteamMatchMaking006(void *);
+extern void *create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005(void *);
+extern void *create_winISteamNetworking_SteamNetworking002(void *);
+extern void *create_winISteamGameServer_SteamGameServer008(void *);
+extern void *create_winISteamClient_SteamClient007(void *);
+extern void *create_winISteamUser_SteamUser011(void *);
+extern void *create_winISteamUtils_SteamUtils002(void *);
+extern void *create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004(void *);
+extern void *create_winISteamApps_STEAMAPPS_INTERFACE_VERSION002(void *);
+extern void *create_winISteamFriends_SteamFriends004(void *);
+extern void *create_winISteamMatchmaking_SteamMatchMaking004(void *);
+extern void *create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003(void *);
+extern void *create_winISteamNetworking_SteamNetworking001(void *);
+extern void *create_winISteamGameServer_SteamGameServer005(void *);
+extern void *create_winISteamUser_SteamUser010(void *);
+extern void *create_winISteamFriends_SteamFriends003(void *);
+extern void *create_winISteamMatchmaking_SteamMatchMaking002(void *);
+extern void *create_winISteamUser_SteamUser009(void *);
+extern void *create_winISteamApps_STEAMAPPS_INTERFACE_VERSION001(void *);
+extern void *create_winISteamGameServer_SteamGameServer004(void *);
diff --git a/lsteamclient/win_constructors_table.dat b/lsteamclient/win_constructors_table.dat
new file mode 100644
index 00000000..57d28476
--- /dev/null
+++ b/lsteamclient/win_constructors_table.dat
@@ -0,0 +1,120 @@
+ {"SteamClient017", &create_winISteamClient_SteamClient017},
+ {"SteamUser019", &create_winISteamUser_SteamUser019},
+ {"SteamFriends015", &create_winISteamFriends_SteamFriends015},
+ {"SteamUtils009", &create_winISteamUtils_SteamUtils009},
+ {"SteamMatchMaking009", &create_winISteamMatchmaking_SteamMatchMaking009},
+ {"SteamMatchMakingServers002", &create_winISteamMatchmakingServers_SteamMatchMakingServers002},
+ {"STEAMREMOTESTORAGE_INTERFACE_VERSION014", &create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION014},
+ {"STEAMUSERSTATS_INTERFACE_VERSION011", &create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION011},
+ {"STEAMAPPS_INTERFACE_VERSION008", &create_winISteamApps_STEAMAPPS_INTERFACE_VERSION008},
+ {"SteamNetworking005", &create_winISteamNetworking_SteamNetworking005},
+ {"STEAMSCREENSHOTS_INTERFACE_VERSION003", &create_winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION003},
+ {"STEAMMUSIC_INTERFACE_VERSION001", &create_winISteamMusic_STEAMMUSIC_INTERFACE_VERSION001},
+ {"STEAMMUSICREMOTE_INTERFACE_VERSION001", &create_winISteamMusicRemote_STEAMMUSICREMOTE_INTERFACE_VERSION001},
+ {"STEAMHTTP_INTERFACE_VERSION002", &create_winISteamHTTP_STEAMHTTP_INTERFACE_VERSION002},
+ {"SteamController006", &create_winISteamController_SteamController006},
+ {"STEAMUGC_INTERFACE_VERSION010", &create_winISteamUGC_STEAMUGC_INTERFACE_VERSION010},
+ {"STEAMAPPLIST_INTERFACE_VERSION001", &create_winISteamAppList_STEAMAPPLIST_INTERFACE_VERSION001},
+ {"STEAMHTMLSURFACE_INTERFACE_VERSION_004", &create_winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004},
+ {"STEAMINVENTORY_INTERFACE_V002", &create_winISteamInventory_STEAMINVENTORY_INTERFACE_V002},
+ {"STEAMVIDEO_INTERFACE_V002", &create_winISteamVideo_STEAMVIDEO_INTERFACE_V002},
+ {"STEAMAPPTICKET_INTERFACE_VERSION001", &create_winISteamAppTicket_STEAMAPPTICKET_INTERFACE_VERSION001},
+ {"SteamGameServer012", &create_winISteamGameServer_SteamGameServer012},
+ {"SteamGameServerStats001", &create_winISteamGameServerStats_SteamGameServerStats001},
+ {"SteamGameCoordinator001", &create_winISteamGameCoordinator_SteamGameCoordinator001},
+ {"STEAMPARENTALSETTINGS_INTERFACE_VERSION001", &create_winISteamParentalSettings_STEAMPARENTALSETTINGS_INTERFACE_VERSION001},
+ {"STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001", &create_winISteamUnifiedMessages_STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001},
+ {"SteamController005", &create_winISteamController_SteamController005},
+ {"STEAMHTMLSURFACE_INTERFACE_VERSION_003", &create_winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003},
+ {"SteamUtils008", &create_winISteamUtils_SteamUtils008},
+ {"STEAMUGC_INTERFACE_VERSION009", &create_winISteamUGC_STEAMUGC_INTERFACE_VERSION009},
+ {"STEAMINVENTORY_INTERFACE_V001", &create_winISteamInventory_STEAMINVENTORY_INTERFACE_V001},
+ {"STEAMVIDEO_INTERFACE_V001", &create_winISteamVideo_STEAMVIDEO_INTERFACE_V001},
+ {"SteamController004", &create_winISteamController_SteamController004},
+ {"STEAMREMOTESTORAGE_INTERFACE_VERSION013", &create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION013},
+ {"STEAMSCREENSHOTS_INTERFACE_VERSION002", &create_winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION002},
+ {"SteamController003", &create_winISteamController_SteamController003},
+ {"STEAMUGC_INTERFACE_VERSION008", &create_winISteamUGC_STEAMUGC_INTERFACE_VERSION008},
+ {"SteamUser018", &create_winISteamUser_SteamUser018},
+ {"SteamUtils007", &create_winISteamUtils_SteamUtils007},
+ {"STEAMAPPS_INTERFACE_VERSION007", &create_winISteamApps_STEAMAPPS_INTERFACE_VERSION007},
+ {"STEAMUGC_INTERFACE_VERSION007", &create_winISteamUGC_STEAMUGC_INTERFACE_VERSION007},
+ {"STEAMREMOTESTORAGE_INTERFACE_VERSION012", &create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION012},
+ {"STEAMCONTROLLER_INTERFACE_VERSION", &create_winISteamController_STEAMCONTROLLER_INTERFACE_VERSION},
+ {"STEAMUGC_INTERFACE_VERSION005", &create_winISteamUGC_STEAMUGC_INTERFACE_VERSION005},
+ {"STEAMHTMLSURFACE_INTERFACE_VERSION_002", &create_winISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002},
+ {"STEAMUGC_INTERFACE_VERSION003", &create_winISteamUGC_STEAMUGC_INTERFACE_VERSION003},
+ {"SteamClient016", &create_winISteamClient_SteamClient016},
+ {"SteamUser017", &create_winISteamUser_SteamUser017},
+ {"SteamFriends014", &create_winISteamFriends_SteamFriends014},
+ {"STEAMAPPS_INTERFACE_VERSION006", &create_winISteamApps_STEAMAPPS_INTERFACE_VERSION006},
+ {"SteamClient015", &create_winISteamClient_SteamClient015},
+ {"STEAMUGC_INTERFACE_VERSION002", &create_winISteamUGC_STEAMUGC_INTERFACE_VERSION002},
+ {"SteamClient014", &create_winISteamClient_SteamClient014},
+ {"SteamClient012", &create_winISteamClient_SteamClient012},
+ {"SteamClient013", &create_winISteamClient_SteamClient012}, /* alias */
+ {"SteamUtils006", &create_winISteamUtils_SteamUtils006},
+ {"STEAMUGC_INTERFACE_VERSION001", &create_winISteamUGC_STEAMUGC_INTERFACE_VERSION001},
+ {"SteamGameServer011", &create_winISteamGameServer_SteamGameServer011},
+ {"SteamFriends013", &create_winISteamFriends_SteamFriends013},
+ {"STEAMREMOTESTORAGE_INTERFACE_VERSION011", &create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION011},
+ {"STEAMAPPS_INTERFACE_VERSION005", &create_winISteamApps_STEAMAPPS_INTERFACE_VERSION005},
+ {"STEAMREMOTESTORAGE_INTERFACE_VERSION010", &create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION010},
+ {"SteamUser016", &create_winISteamUser_SteamUser016},
+ {"SteamUtils005", &create_winISteamUtils_SteamUtils005},
+ {"STEAMSCREENSHOTS_INTERFACE_VERSION001", &create_winISteamScreenshots_STEAMSCREENSHOTS_INTERFACE_VERSION001},
+ {"STEAMREMOTESTORAGE_INTERFACE_VERSION008", &create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION008},
+ {"STEAMHTTP_INTERFACE_VERSION001", &create_winISteamHTTP_STEAMHTTP_INTERFACE_VERSION001},
+ {"SteamFriends011", &create_winISteamFriends_SteamFriends011},
+ {"STEAMREMOTESTORAGE_INTERFACE_VERSION006", &create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION006},
+ {"STEAMUSERSTATS_INTERFACE_VERSION010", &create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION010},
+ {"STEAMREMOTESTORAGE_INTERFACE_VERSION005", &create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION005},
+ {"STEAMAPPS_INTERFACE_VERSION004", &create_winISteamApps_STEAMAPPS_INTERFACE_VERSION004},
+ {"SteamClient011", &create_winISteamClient_SteamClient011},
+ {"SteamFriends009", &create_winISteamFriends_SteamFriends009},
+ {"SteamMatchMaking008", &create_winISteamMatchmaking_SteamMatchMaking008},
+ {"STEAMREMOTESTORAGE_INTERFACE_VERSION004", &create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION004},
+ {"SteamGameServer010", &create_winISteamGameServer_SteamGameServer010},
+ {"SteamMasterServerUpdater001", &create_winISteamMasterServerUpdater_SteamMasterServerUpdater001},
+ {"SteamClient010", &create_winISteamClient_SteamClient010},
+ {"STEAMUSERSTATS_INTERFACE_VERSION009", &create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION009},
+ {"SteamUser014", &create_winISteamUser_SteamUser014},
+ {"SteamFriends008", &create_winISteamFriends_SteamFriends008},
+ {"SteamNetworking004", &create_winISteamNetworking_SteamNetworking004},
+ {"SteamClient009", &create_winISteamClient_SteamClient009},
+ {"SteamFriends007", &create_winISteamFriends_SteamFriends007},
+ {"STEAMUSERSTATS_INTERFACE_VERSION007", &create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION007},
+ {"STEAMAPPS_INTERFACE_VERSION003", &create_winISteamApps_STEAMAPPS_INTERFACE_VERSION003},
+ {"STEAMREMOTESTORAGE_INTERFACE_VERSION002", &create_winISteamRemoteStorage_STEAMREMOTESTORAGE_INTERFACE_VERSION002},
+ {"SteamUser013", &create_winISteamUser_SteamUser013},
+ {"SteamFriends006", &create_winISteamFriends_SteamFriends006},
+ {"SteamNetworking003", &create_winISteamNetworking_SteamNetworking003},
+ {"SteamFriends005", &create_winISteamFriends_SteamFriends005},
+ {"SteamClient008", &create_winISteamClient_SteamClient008},
+ {"SteamMatchMaking007", &create_winISteamMatchmaking_SteamMatchMaking007},
+ {"STEAMUSERSTATS_INTERFACE_VERSION006", &create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION006},
+ {"SteamGameServer009", &create_winISteamGameServer_SteamGameServer009},
+ {"SteamUtils004", &create_winISteamUtils_SteamUtils004},
+ {"SteamUtils003", &create_winISteamUtils_SteamUtils004}, /* alias */
+ {"SteamUser012", &create_winISteamUser_SteamUser012},
+ {"SteamMatchMakingServers001", &create_winISteamMatchmakingServers_SteamMatchMakingServers001},
+ {"SteamMatchMaking006", &create_winISteamMatchmaking_SteamMatchMaking006},
+ {"STEAMUSERSTATS_INTERFACE_VERSION005", &create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION005},
+ {"SteamNetworking002", &create_winISteamNetworking_SteamNetworking002},
+ {"SteamGameServer008", &create_winISteamGameServer_SteamGameServer008},
+ {"SteamClient007", &create_winISteamClient_SteamClient007},
+ {"SteamUser011", &create_winISteamUser_SteamUser011},
+ {"SteamUtils002", &create_winISteamUtils_SteamUtils002},
+ {"STEAMUSERSTATS_INTERFACE_VERSION004", &create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION004},
+ {"STEAMAPPS_INTERFACE_VERSION002", &create_winISteamApps_STEAMAPPS_INTERFACE_VERSION002},
+ {"SteamFriends004", &create_winISteamFriends_SteamFriends004},
+ {"SteamMatchMaking004", &create_winISteamMatchmaking_SteamMatchMaking004},
+ {"STEAMUSERSTATS_INTERFACE_VERSION003", &create_winISteamUserStats_STEAMUSERSTATS_INTERFACE_VERSION003},
+ {"SteamNetworking001", &create_winISteamNetworking_SteamNetworking001},
+ {"SteamGameServer005", &create_winISteamGameServer_SteamGameServer005},
+ {"SteamUser010", &create_winISteamUser_SteamUser010},
+ {"SteamFriends003", &create_winISteamFriends_SteamFriends003},
+ {"SteamMatchMaking002", &create_winISteamMatchmaking_SteamMatchMaking002},
+ {"SteamUser009", &create_winISteamUser_SteamUser009},
+ {"STEAMAPPS_INTERFACE_VERSION001", &create_winISteamApps_STEAMAPPS_INTERFACE_VERSION001},
+ {"SteamGameServer004", &create_winISteamGameServer_SteamGameServer004},